diff --git a/.claude/skills/find-missing-translations/SKILL.md b/.claude/skills/find-missing-translations/SKILL.md index 2bb00d90e9..1f4e249aab 100644 --- a/.claude/skills/find-missing-translations/SKILL.md +++ b/.claude/skills/find-missing-translations/SKILL.md @@ -51,17 +51,28 @@ Target: amethyst/src/main/res/values-/strings.xml 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. +You MUST diff **both** `` in the source will never appear in a `` diff. Forgetting `` is the most common silent failure of this skill (it misses things like `music_playlist_track_count`, `notification_count_more`, etc.). + ```bash -# Extract translatable keys from default (exclude translatable="false") +# Strings: extract translatable keys from default (exclude translatable="false") +echo "=== missing ===" comm -23 \ <(grep ' ===" +comm -23 \ + <(grep '` translations need the per-locale CLDR category set (see Step 5 → "Plurals: handle with care"). Do NOT diff each locale separately for strings — assume the same keys are missing in all target locales (but DO repeat the `` diff per locale if you suspect Crowdin asymmetric stripping). > **Caveat:** Crowdin can asymmetrically strip keys across locales (each translator independently chose source-identical for different keys). If the cs-rCZ list looks suspiciously short, run the same diff for each target locale individually and union the results before Step 2.5. @@ -85,8 +96,9 @@ else fi # For each locale, list only keys added after the Crowdin sync (truly new). +# Run for BOTH and . for locale in cs-rCZ de-rDE sv-rSE; do - echo "=== $locale: genuinely new (post-sync) keys ===" + echo "=== $locale: genuinely new (post-sync) keys ===" comm -23 \ <(grep ' keys ===" + comm -23 \ + <(grep '` is a single line; `` is a multi-line block — handle each appropriately. ```bash -# For each missing key, extract the full line from default strings.xml +# Missing : full line from default strings.xml while IFS= read -r key; do grep "name=\"$key\"" amethyst/src/main/res/values/strings.xml done < <(comm -23 \ @@ -130,6 +155,19 @@ done < <(comm -23 \ | sed 's/.*name="\([^"]*\)".*/\1/' | sort) \ <(grep ': extract the multi-line block (opening tag through ) +while IFS= read -r key; do + awk -v key="$key" ' + $0 ~ "/ { in_p = 0 } + ' amethyst/src/main/res/values/strings.xml +done < <(comm -23 \ + <(grep '` misses other resource types +- **Diffing only `` is a separate resource type; a source `` missing from a locale will never show up in a `` diff. Always run the diff twice (once per resource type) as shown in Step 2. The same goes for `` if the project uses it. - **Treating every missing key as actionable** — Crowdin strips on export any translation the translator marked as "use English", and we cannot distinguish that from "never seen" by looking at disk. Use the Step 2.5 sync-timestamp filter: only keys added to `values/strings.xml` after the last `l10n_crowdin_translations` sync are genuinely new. - **Trying to detect "stripped" from git history alone** — the on-disk locale file only sees keys the translator typed a non-identical value for. The "translator opened the key and picked English from the start" case never touches disk, so a history-only check misses it. Use the sync-timestamp cutoff instead. - **Adding source-identical fallbacks locally** — they get overwritten on the next Crowdin sync. Android falls back to `values/strings.xml` at runtime anyway, so there is no user-visible bug to fix. diff --git a/amethyst/src/main/res/values-cs-rCZ/strings.xml b/amethyst/src/main/res/values-cs-rCZ/strings.xml index 736d7190f0..609d6e04d6 100644 --- a/amethyst/src/main/res/values-cs-rCZ/strings.xml +++ b/amethyst/src/main/res/values-cs-rCZ/strings.xml @@ -2823,4 +2823,22 @@ Nowhere Drop Nowhere Umění Nowhere Fórum + + %1$d stopa + %1$d stopy + %1$d stopy + %1$d stop + + + %1$d stopa + %1$d stopy + %1$d stopy + %1$d stop + + + +%1$d další stopa + +%1$d další stopy + +%1$d další stopy + +%1$d dalších stop + diff --git a/amethyst/src/main/res/values-de-rDE/strings.xml b/amethyst/src/main/res/values-de-rDE/strings.xml index bcda0b7079..2fac0576dc 100644 --- a/amethyst/src/main/res/values-de-rDE/strings.xml +++ b/amethyst/src/main/res/values-de-rDE/strings.xml @@ -2791,4 +2791,16 @@ anz der Bedingungen ist erforderlich Nowhere Drop Nowhere Kunst Nowhere Forum + + %1$d Titel + %1$d Titel + + + %1$d Titel + %1$d Titel + + + +%1$d weiterer Titel + +%1$d weitere Titel + diff --git a/amethyst/src/main/res/values-sv-rSE/strings.xml b/amethyst/src/main/res/values-sv-rSE/strings.xml index 07c1f69fdc..8bd367d66e 100644 --- a/amethyst/src/main/res/values-sv-rSE/strings.xml +++ b/amethyst/src/main/res/values-sv-rSE/strings.xml @@ -2786,4 +2786,16 @@ Nowhere Drop Nowhere Konst Nowhere Forum + + %1$d spår + %1$d spår + + + %1$d spår + %1$d spår + + + +%1$d spår till + +%1$d spår till +