Platform
Never key a string by its English text
It is the decision that seems convenient at the start and becomes expensive the first time somebody fixes a typo in the source and quietly detaches thirty translations from it.
See it live
A key request, and the response behind it
Fetch a locale by key and get back the resolved variables and plural forms already applied — the same call your own applications can use.

Four mechanics
Each one prevents a bug that only appears in a language you do not read
Keyed by identifier, not by text
If the English is the key, correcting a typo in it orphans every translation of that string. An identifier is stable, and the English becomes just another translation of it.
Variables stay variables
Names, amounts and dates are injected at runtime. Word order differs between languages, so the placeholder moves within the sentence rather than the sentence being rebuilt around it.
Plural rules are per language
English has two plural forms. Several languages have more, and some have one. Concatenating an s is a solution that works in exactly one language and silently fails elsewhere.
Formatting follows the locale
Numbers, dates and currency are formatted by locale rather than embedded in the translated text, so a translator never has to decide where a decimal separator goes.
Working at volume
Five operations that keep a large translation set maintainable
Send a language to an agency in a format they can work in
Bring the work back with a diff shown before anything applies
Change a term across hundreds of keys in one reviewed action
List exactly what is missing per locale, not a percentage
Surface keys no application requests any more
FAQ
Keys and variables: common questions
6 short answers to what teams ask before a demo.
Because correcting a typo in the English then orphans every translation of that string. With a stable identifier, English is simply one more translation and can be edited as freely as any other.
They are named placeholders resolved at runtime, and they can sit in different positions in different languages. Word order varies, and a system that assumes a fixed position produces sentences that are grammatically wrong.
Plural forms are defined per language, because the number of forms genuinely differs. Appending an s works in English and fails everywhere else, usually without anyone noticing until a client mentions it.
Yes, either by giving them scoped access directly or by exporting and re-importing. An import shows a diff before anything applies, so an agency file cannot silently overwrite reviewed work.
Yes, through a batch edit that goes through the same review as any other change. Changing hundreds of keys is exactly the kind of action that should not be a single unreviewed click.
Requested keys are tracked, so ones no application has asked for can be listed and retired. Translation sets accumulate dead strings otherwise, and every one of them is paid for in review time.
Still have a question?
A specialist will answer it directly, with your set-up in mind.
Ask a specialistHow are your strings keyed today?
If the answer is by their English text, that is the migration worth doing before adding a single new language.