Localization testing checklist
Sixteen checks for a product that ships in more than one language, grouped by the three ways localization breaks. Encoding failures corrupt the data itself and survive every later step, which is why they come first: a string that was mangled on the way into the database cannot be rescued by a correct translation. Formatting failures produce output that is readable, plausible and wrong, which is worse than a crash because nothing reports it. Layout and translation-coverage failures are visible, but only in a locale somebody actually looked at. Run each of these against a locale you do not read, since the bugs that survive review are the ones in the language the reviewer speaks.
16 checksabout 116 min end to end
Encoding, which corrupts the data itself
- How to check if a page is UTF-8
A page with no declared charset falls back to a legacy encoding rather than to UTF-8, so the declaration is part of the content, not a detail of the response. - How to check for garbled characters from the wrong encoding
Garbled characters name the pair of encodings that produced them, so the damage is readable as a diagnosis instead of as a rendering problem. - How to check the encoding of a file
A file's encoding has to be inferred from its bytes, and the tools that guess are confidently wrong on short files. - How to check the encoding of a CSV file
A spreadsheet reader decides how to read a file from its first bytes, so the same export opens correctly in one application and as mojibake in another. - How to check JSON encoding
JSON narrows the question to one legal answer, which makes a byte order mark at the start of a document a parse error rather than a hint. - How to test unicode input
The round trip through form, database and response is where a value loses its accents, and testing only the display half never finds it. - How to check string length with emoji
A character count that a person would give and one that a program gives differ on emoji and on combining marks, and a field limit built on the wrong one truncates mid-character.
Formatting, which is plausible and wrong
- How to test date format in different locales
The same numeric date is two different days in two locales, and neither rendering looks like an error. - How to check the thousand separator and decimal separator
A separator that means thousands in one locale means a decimal point in another, so a number parsed with the wrong locale is off by a factor of a thousand. - How to test currency formatting
Symbol, placement and decimal count are all locale decisions, and not every currency has two decimal places. - How to test pluralization
English has two plural forms and other languages have up to six, so a string catalogue built around singular and plural cannot express the correct sentence. - How to test timezone handling
A timestamp rendered in the server's zone rather than the reader's is wrong by a fixed offset that looks like a plausible time. - How to test daylight saving time
One local time each year does not exist and another happens twice, and code that assumes a day has 24 hours produces a result rather than an error.
What a reader in that locale would see
- How to check for missing translations
A missing key usually renders as the key itself or as the source language, and both pass an automated check that only asserts the page rendered. - How to test text expansion in translations
Translated strings are routinely longer than the source, so a layout tested only in the source language is tested at its narrowest. - How to test rtl layout
Right-to-left is a direction change for the whole interface rather than for the text, and the parts that do not mirror are the ones nobody declared.
Take it with you
The file is the same list as Markdown checkboxes, ready to paste into a release ticket or a pull request description.
Ticks are kept in this browser only. They are not sent anywhere and other people do not see them.