Translation Key Generator

Generate consistent translation keys from UI text in camelCase, snake_case, kebab-case or dot.notation with optional namespaces.

One text per line

Keys
6
Duplicates
1
TextKey
Save changessaveChanges
Are you sure you want to delete this project?areYouSureYouWantToDeleteThisProject
Hello {name}, you have {{count}} new messageshelloYouHaveNewMessages
Größe änderngrosseAndern
Zażółć gęślą jaźńzazolcGeslaJazn
Save changes!saveChanges_2duplicate

Runs in your browser. Files are not uploaded unless the tool says otherwise.

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.

More translation tools

Manage translations with SimpleLocalize

  • Import the same file formats you just converted or checked
  • Auto-translate with DeepL, Google, OpenAI, Claude or Gemini using your own API keys
  • Free plan for small projects, no credit card required
Start for free
No credit card required5-minute setup