--- name: find-missing-translations description: Use when comparing Android strings.xml locale files to find untranslated string resources, missing translation keys, or preparing translation work for a specific language --- # Find Missing Translations ## Overview Extract string resource keys from the default `values/strings.xml` that are absent in a target locale's `strings.xml`, excluding non-translatable entries. Outputs missing keys and offers to translate them. ## When to Use - Need to find untranslated strings for a specific locale - Preparing a batch of strings for a translator - Checking translation coverage after adding new features ## Target Locales The default set of locales (unless the user specifies otherwise): | Locale | Language | Directory | |--------|----------|-----------| | `cs-rCZ` | Czech | `values-cs-rCZ` | | `pt-rBR` | Brazilian Portuguese | `values-pt-rBR` | | `sv-rSE` | Swedish | `values-sv-rSE` | | `de-rDE` | German | `values-de-rDE` | ## Technique ### 1. Identify files ``` Default: amethyst/src/main/res/values/strings.xml Target: amethyst/src/main/res/values-/strings.xml ``` ### 2. Find missing keys using cs-rCZ as reference Always diff against `cs-rCZ` first — it is the most complete locale and serves as the reference. Any keys missing in `cs-rCZ` will also be missing in the other target locales. ```bash # Extract translatable keys from default (exclude translatable="false") comm -23 \ <(grep 'Valid Valid from %1$s Lists ``` Also check `` and `` tags using the same approach if the project uses them. **Then ask the user:** "Would you like me to translate these missing strings into [list of target locales]?" ### 5. Adding translations (if approved) When adding translated strings to locale files: - **Append new strings at the bottom** of the file, just before the closing `` tag. - Do NOT try to insert them in alphabetical or matching order — a separate process handles ordering. ## Common Mistakes - **Forgetting `translatable="false"`** — these should never appear in locale files - **Not checking string-arrays/plurals** — only checking `` misses other resource types - **Diffing each locale separately** — only diff against `cs-rCZ`; assume the same keys are missing everywhere - **Inserting strings in a specific position** — always append at the bottom; ordering is handled separately