Android Localization
Follow Android resource naming conventions: use lowercase snake_case for all string keys and prefix by feature area to prevent collisions — auth_login_button, checkout_confirm_title, profile_edit_hint. Generic names like title or button cause collisions as the project grows and make Translation Memory less effective because identical keys in different features may carry different meanings. Keep res/values/strings.xml as the single source of truth for base-language strings, with language-specific overrides in language-qualified directories containing only strings that genuinely differ.
Reference strings using the resource reference syntax rather than hardcoding text in android:text layout attributes — hardcoded strings are flagged by Android Lint's HardcodedText rule. Include android:hint and android:contentDescription values in your strings.xml as well — accessibility labels are translatable and benefit from the same Translation Memory and Glossary controls. Run Android Lint checks including MissingTranslation and ExtraTranslation in your CI pipeline to catch incomplete or surplus translations before they reach production builds.
Use quantity strings (plurals elements) for any string that depends on a count, and provide all plural categories required by your target languages — not just one and other. Arabic requires six categories (zero, one, two, few, many, other), Polish requires four, Russian requires three. For build flavour strings that differ between white-label app variants, place overrides in src/flavorName/res/values/strings.xml rather than modifying the main strings.xml.
Connect your GitHub, Bitbucket, or Azure Repos repository to Language Monster. Language Monster detects strings.xml files across all res/values-* resource directories automatically, queues new strings for translation, and pushes completed translations back to the correct language directories as a pull request. Plurals elements and string-array elements are handled correctly — each plural category and each array entry is translated as a distinct unit.
Language Monster's Glossary enforces consistent terminology for your app name, feature names, and branded terms across every language. Quality controls run spelling checks, grammar analysis, and placeholder validation for percent-s, percent-d, and positional argument format specifiers on every saved translation. Translation Memory ensures identical strings across library modules are translated once and reused.
