update translations: CZ, DE, PT, SE

add: find missing translations skill
This commit is contained in:
davotoula
2026-03-20 22:55:31 +01:00
parent 73536dd421
commit 64316f7d73
5 changed files with 217 additions and 4 deletions
@@ -0,0 +1,77 @@
---
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 a table ready for translation.
## 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
## Technique
### 1. Identify files
```
Default: amethyst/src/main/res/values/strings.xml
Target: amethyst/src/main/res/values-<locale>/strings.xml
```
Default locale: `cs-rCZ` if none specified. User may override (e.g., `pt-rBR`, `ja`).
### 2. Extract and diff keys
Use a single bash pipeline to extract translatable keys from both files and diff them:
```bash
# Extract translatable keys from default (exclude translatable="false")
comm -23 \
<(grep '<string name=' amethyst/src/main/res/values/strings.xml \
| grep -v 'translatable="false"' \
| sed 's/.*name="\([^"]*\)".*/\1/' | sort) \
<(grep '<string name=' amethyst/src/main/res/values-<LOCALE>/strings.xml \
| sed 's/.*name="\([^"]*\)".*/\1/' | sort)
```
This gives the list of missing key names.
### 3. Get English values for missing keys
For each missing key, extract its English value:
```bash
# For each missing key, extract the 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 \
<(grep '<string name=' amethyst/src/main/res/values/strings.xml \
| grep -v 'translatable="false"' \
| sed 's/.*name="\([^"]*\)".*/\1/' | sort) \
<(grep '<string name=' amethyst/src/main/res/values-<LOCALE>/strings.xml \
| sed 's/.*name="\([^"]*\)".*/\1/' | sort))
```
### 4. Present results
Output the missing entries as raw XML resource lines (copy-paste ready for the locale file):
```xml
<string name="attestation_valid">Valid</string>
<string name="attestation_valid_from">Valid from %1$s</string>
<string name="feed_group_lists">Lists</string>
```
Also check `<string-array>` and `<plurals>` tags using the same approach if the project uses them.
## Common Mistakes
- **Forgetting `translatable="false"`** — these should never appear in locale files
- **Not checking string-arrays/plurals** — only checking `<string>` misses other resource types
- **Modifying files** — this is a read-only research task unless the user asks to add entries
@@ -1621,5 +1621,39 @@
<string name="event_sync_status_downloading">Stahování</string>
<string name="event_sync_status_error">Chyba</string>
<string name="event_sync_status_completed">Dokončeno</string>
<!-- M3 Action Dialog titles -->
<string name="add_bookmark_dialog_title">Přidat záložku</string>
<string name="add_member_dialog_title">Přidat člena</string>
<string name="attestation">Atestace</string>
<string name="attestation_attests_to">Potvrzuje</string>
<string name="attestation_invalid">Neplatná</string>
<string name="attestation_request">Žádost o atestaci</string>
<string name="attestation_request_description">Žádost o atestaci události</string>
<string name="attestation_status_accepted">Přijata</string>
<string name="attestation_status_rejected">Zamítnuta</string>
<string name="attestation_status_revoked">Odvolána</string>
<string name="attestation_status_verified">Ověřena</string>
<string name="attestation_status_verifying">Ověřování</string>
<string name="attestation_valid">Platná</string>
<string name="attestation_valid_from">Platná od %1$s</string>
<string name="attestation_valid_to">Platná do %1$s</string>
<string name="attestor_proficiency">Odbornost atestátora</string>
<string name="attestor_proficiency_for_kinds">Odborník na ověřování druhů: %1$s</string>
<string name="attestor_recommendation">Doporučení atestátora</string>
<string name="attestor_recommendation_for_kinds">Doporučen pro druhy: %1$s</string>
<string name="bookmark_item_actions_dialog_title">Akce záložky</string>
<string name="export_actions_dialog_title">Export</string>
<string name="feed_group_communities">Komunity</string>
<string name="feed_group_feeds">Kanály</string>
<string name="feed_group_hashtags">Hashtagy</string>
<string name="feed_group_lists">Seznamy</string>
<string name="group_actions_dialog_title">Akce skupiny</string>
<string name="link_actions_dialog_title">Akce odkazu</string>
<string name="list_actions_dialog_title">Akce seznamu</string>
<string name="list_management_dialog_title">Správa seznamu</string>
<string name="mark_as_read_dialog_title">Označit jako přečtené</string>
<string name="media_actions_dialog_title">Akce médií</string>
<string name="note_actions_dialog_title">Akce poznámky</string>
<string name="pack_actions_dialog_title">Akce balíčku</string>
<string name="playback_actions_dialog_title">Přehrávání</string>
<string name="profile_actions_dialog_title">Akce profilu</string>
</resources>
@@ -1626,5 +1626,39 @@ anz der Bedingungen ist erforderlich</string>
<string name="event_sync_status_downloading">Herunterladen</string>
<string name="event_sync_status_error">Fehler</string>
<string name="event_sync_status_completed">Abgeschlossen</string>
<!-- M3 Action Dialog titles -->
<string name="add_bookmark_dialog_title">Lesezeichen hinzufügen</string>
<string name="add_member_dialog_title">Mitglied hinzufügen</string>
<string name="attestation">Attestierung</string>
<string name="attestation_attests_to">Bestätigt</string>
<string name="attestation_invalid">Ungültig</string>
<string name="attestation_request">Attestierungsanfrage</string>
<string name="attestation_request_description">Attestierung für ein Ereignis anfordern</string>
<string name="attestation_status_accepted">Akzeptiert</string>
<string name="attestation_status_rejected">Abgelehnt</string>
<string name="attestation_status_revoked">Widerrufen</string>
<string name="attestation_status_verified">Verifiziert</string>
<string name="attestation_status_verifying">Wird verifiziert</string>
<string name="attestation_valid">Gültig</string>
<string name="attestation_valid_from">Gültig ab %1$s</string>
<string name="attestation_valid_to">Gültig bis %1$s</string>
<string name="attestor_proficiency">Kompetenz des Attestierers</string>
<string name="attestor_proficiency_for_kinds">Kompetent für die Verifizierung von Arten: %1$s</string>
<string name="attestor_recommendation">Empfehlung des Attestierers</string>
<string name="attestor_recommendation_for_kinds">Empfohlen für Arten: %1$s</string>
<string name="bookmark_item_actions_dialog_title">Lesezeichen-Aktionen</string>
<string name="export_actions_dialog_title">Exportieren</string>
<string name="feed_group_communities">Gemeinschaften</string>
<string name="feed_group_feeds">Feeds</string>
<string name="feed_group_hashtags">Hashtags</string>
<string name="feed_group_lists">Listen</string>
<string name="group_actions_dialog_title">Gruppenaktionen</string>
<string name="link_actions_dialog_title">Link-Aktionen</string>
<string name="list_actions_dialog_title">Listenaktionen</string>
<string name="list_management_dialog_title">Listenverwaltung</string>
<string name="mark_as_read_dialog_title">Als gelesen markieren</string>
<string name="media_actions_dialog_title">Medienaktionen</string>
<string name="note_actions_dialog_title">Notiz-Aktionen</string>
<string name="pack_actions_dialog_title">Paket-Aktionen</string>
<string name="playback_actions_dialog_title">Wiedergabe</string>
<string name="profile_actions_dialog_title">Profilaktionen</string>
</resources>
@@ -1621,5 +1621,39 @@
<string name="event_sync_status_downloading">Baixando</string>
<string name="event_sync_status_error">Erro</string>
<string name="event_sync_status_completed">Concluído</string>
<!-- M3 Action Dialog titles -->
<string name="add_bookmark_dialog_title">Adicionar favorito</string>
<string name="add_member_dialog_title">Adicionar membro</string>
<string name="attestation">Atestação</string>
<string name="attestation_attests_to">Atesta</string>
<string name="attestation_invalid">Inválida</string>
<string name="attestation_request">Solicitação de atestação</string>
<string name="attestation_request_description">Solicitando atestação para um evento</string>
<string name="attestation_status_accepted">Aceita</string>
<string name="attestation_status_rejected">Rejeitada</string>
<string name="attestation_status_revoked">Revogada</string>
<string name="attestation_status_verified">Verificada</string>
<string name="attestation_status_verifying">Verificando</string>
<string name="attestation_valid">Válida</string>
<string name="attestation_valid_from">Válida a partir de %1$s</string>
<string name="attestation_valid_to">Válida até %1$s</string>
<string name="attestor_proficiency">Competência do atestante</string>
<string name="attestor_proficiency_for_kinds">Competente na verificação de tipos: %1$s</string>
<string name="attestor_recommendation">Recomendação do atestante</string>
<string name="attestor_recommendation_for_kinds">Recomendado para tipos: %1$s</string>
<string name="bookmark_item_actions_dialog_title">Ações de favorito</string>
<string name="export_actions_dialog_title">Exportar</string>
<string name="feed_group_communities">Comunidades</string>
<string name="feed_group_feeds">Feeds</string>
<string name="feed_group_hashtags">Hashtags</string>
<string name="feed_group_lists">Listas</string>
<string name="group_actions_dialog_title">Ações do grupo</string>
<string name="link_actions_dialog_title">Ações do link</string>
<string name="list_actions_dialog_title">Ações da lista</string>
<string name="list_management_dialog_title">Gerenciamento de lista</string>
<string name="mark_as_read_dialog_title">Marcar como lida</string>
<string name="media_actions_dialog_title">Ações de mídia</string>
<string name="note_actions_dialog_title">Ações da nota</string>
<string name="pack_actions_dialog_title">Ações do pacote</string>
<string name="playback_actions_dialog_title">Reprodução</string>
<string name="profile_actions_dialog_title">Ações do perfil</string>
</resources>
@@ -1620,5 +1620,39 @@
<string name="event_sync_status_downloading">Laddar ner</string>
<string name="event_sync_status_error">Fel</string>
<string name="event_sync_status_completed">Slutfört</string>
<!-- M3 Action Dialog titles -->
<string name="add_bookmark_dialog_title">Lägg till bokmärke</string>
<string name="add_member_dialog_title">Lägg till medlem</string>
<string name="attestation">Attestering</string>
<string name="attestation_attests_to">Intygar</string>
<string name="attestation_invalid">Ogiltig</string>
<string name="attestation_request">Attesteringsförfrågan</string>
<string name="attestation_request_description">Begär attestering för en händelse</string>
<string name="attestation_status_accepted">Accepterad</string>
<string name="attestation_status_rejected">Avvisad</string>
<string name="attestation_status_revoked">Återkallad</string>
<string name="attestation_status_verified">Verifierad</string>
<string name="attestation_status_verifying">Verifierar</string>
<string name="attestation_valid">Giltig</string>
<string name="attestation_valid_from">Giltig från %1$s</string>
<string name="attestation_valid_to">Giltig till %1$s</string>
<string name="attestor_proficiency">Attestantens kompetens</string>
<string name="attestor_proficiency_for_kinds">Kompetent att verifiera typer: %1$s</string>
<string name="attestor_recommendation">Attestantens rekommendation</string>
<string name="attestor_recommendation_for_kinds">Rekommenderad för typer: %1$s</string>
<string name="bookmark_item_actions_dialog_title">Bokmärkesåtgärder</string>
<string name="export_actions_dialog_title">Exportera</string>
<string name="feed_group_communities">Gemenskaper</string>
<string name="feed_group_feeds">Flöden</string>
<string name="feed_group_hashtags">Hashtags</string>
<string name="feed_group_lists">Listor</string>
<string name="group_actions_dialog_title">Gruppåtgärder</string>
<string name="link_actions_dialog_title">Länkåtgärder</string>
<string name="list_actions_dialog_title">Liståtgärder</string>
<string name="list_management_dialog_title">Listhantering</string>
<string name="mark_as_read_dialog_title">Markera som läst</string>
<string name="media_actions_dialog_title">Medieåtgärder</string>
<string name="note_actions_dialog_title">Anteckningsåtgärder</string>
<string name="pack_actions_dialog_title">Paketåtgärder</string>
<string name="playback_actions_dialog_title">Uppspelning</string>
<string name="profile_actions_dialog_title">Profilåtgärder</string>
</resources>