Agent skill · alirezarezvani
i18n-localization
Use when adding UI text, adding or shipping a language, reviewing translation files, or building i18n into an app. Checks missing keys, placeholders and CLDR plural forms with locale_sync.py, finds hardcoded strings with hardcoded_strings.py, and builds a pseudo-locale with pseudo_localize.py.
What it needs
About 3k tokens when loaded.
What this skill does
i18n Localization Portability: 3 stdlib Python scripts. No network, no translation service. They check and generate files; they never translate text or call an API. A release with a new language usually breaks in the same places: keys added in English and never synced, a placeholder renamed by a translator, Russian or Arabic files that copied English's two plural forms, UI text that never went through t(), and dates formatted in the server's locale. This skill makes each of those a check that fails before the release, not a bug report after it. Workflow Step 1 reads JSON/ARB (i18next or ICU), .properties, Apple .strings, Android strings.xml and gettext .po, pairs each target with the source file of the same namespace, and blocks on missing or empty keys, changed placeholders, ICU syntax errors, plural/select without other, a zero branch that can never match, and plural categories the target locale needs (ru few/many, ar six forms), using the embedded CLDR 49 table. Untranslated values, orphan keys, fuzzy entries and markup drift are warnings. Step 2 blocks on literal text between tags and literal user-facing attributes (placeholder, alt, aria-label, title...), and warns on literals rendered from {cond ? 'Saving...' : ...}, t('a') + x concatenation, toLocaleString() with no locale, '