Why not use the English text as the key?
Text-as-key looks convenient until the first copy change. Fixing a typo in "Save chnages" renames the key, which orphans every existing translation and forces a re-translation in each language. Two screens that show the same English word with different meanings ("Close" the window vs. "Close" to the station) collide on one key. And long sentences make code hard to read and diffs noisy. A stable, descriptive identifier avoids all three problems and lets translators work from a key with a description instead of guessing context.
Naming conventions that scale
- Namespace by feature or screen:
checkout.payment.title keeps related strings together and makes it obvious where a key is used. - Describe the role, not the copy:
checkout.submitButton survives a copy change from "Pay now" to "Place order". - Pick one case style and enforce it in code review. camelCase and dot.notation are the most common in JavaScript projects, snake_case in Python and Ruby, and Android resources require lowercase with underscores.
- Keep keys short: 30 to 40 characters is enough for a namespace and a role. Longer keys usually mean the text itself leaked into the name.
- Avoid characters with special meaning in your i18n library: dots and colons are separators in i18next, and Android does not allow hyphens.
How this generator works
Each line is split into words, diacritics are optionally transliterated (ł to l, ß to ss, é to e), placeholders such as {name}, {{count}}, %s or %1$d are removed, and the remaining words are joined in the selected style. Keys are cut on a word boundary at the maximum length, and an optional prefix is prepended. When two texts produce the same key, the tool marks them and appends a counter or a short hash so the exported file stays valid.
What to do with the generated keys
Download the JSON file as a starting point for your source language, then upload it to SimpleLocalize and add descriptions and screenshots for translators. If your strings already live in code, the SimpleLocalize CLI can extract keys directly from i18next, FormatJS, Android and iOS projects instead of a manual list.