What the QA checks
The default res/values folder is the reference. Every locale folder—values-fr, values-pt-rBR or values-b+sr+Latn—is compared key by key across <string>, <plurals> and <string-array>. Configuration folders such as values-night or values-sw600dp are recognized and only syntax-checked. Text is decoded the way aapt2 compiles it: escapes, double-quoted spans, whitespace collapsing, CDATA, entities, and markup such as <b> and <xliff:g>.
Placeholders that crash at runtime
Android passes string resources to Java’s String.format. A translation that introduces an argument index the default does not have throws MissingFormatArgumentException; one that turns %1$d into %1$s throws IllegalFormatConversionException. Strings with more than one unnumbered placeholder fail the build unless marked formatted="false". Each translation’s index-and-type signature is compared with the default.
Plurals per language
Plural quantities follow CLDR rules, read from your browser’s Intl.PluralRules: English needs one and other, Polish one, few, many and other, Japanese only other. Missing quantities fall back to other—grammatically wrong but safe—while a missing other can throw. Quantities a language never selects are listed so translators do not waste effort.
Validation boundary
This is a resource QA aid, not Android Lint or aapt2. It does not merge product flavors, build types or library resources, check other resource types, follow @string/ references, or judge translation quality, and CLDR data can differ slightly between your browser and the Android version on a device. Run ./gradlew lint and test the app in each locale before release.
Frequently asked questions
Why does an apostrophe break my Android build?
aapt2 rejects an unescaped apostrophe in a string resource. Write \' or wrap the whole text in double quotes.
Which translation placeholder mistakes crash an app?
A new argument index throws MissingFormatArgumentException, and a different conversion type such as %1$s instead of %1$d throws IllegalFormatConversionException.
Which plural quantities does each language need?
English uses one and other, Polish one, few, many and other, Japanese only other. The coverage table lists the categories for every locale you supply.
Are my strings uploaded?
No. Files are read and compared in your browser.
Authoritative references
Android’s string resources guide documents escaping, formatting and quantity strings; providing alternative resources covers locale qualifiers; and the Unicode CLDR plural rules define each language’s categories.
Browse localization tools · Check gettext PO/POT catalogues · Validate XLIFF packages