Terms and translations

Terms and translations

The atomic units of LangSync – translation keys and their per-language values.

Not verified yet

A term is a translation key – welcome.title, errors.network, button.submit. A translation is the actual string for that term in a specific language.

namespace: marketing-site
  term: welcome.title
    en-US: "Welcome"
    de-DE: "Willkommen"
    fr-FR: "Bienvenue"

Terms live inside namespaces. The same name in two different namespaces refers to two unrelated keys.

A term has

  • A mark – the key your code references (e.g. welcome.title).
  • An optional context – developer notes for translators and the AI.
  • A default value – the string in the namespace's default language.
  • One translation per attached target language.

A translation has

  • A value – the actual translated string.
  • A language – which language it belongs to.
  • Audit metadata (when it was last updated and by whom).

Best practices for term marks

  • Hierarchical dotted keys. auth.signin.title reads better than signinTitle and groups related keys in the dashboard.
  • Stable mark, mutable value. Never rename a mark to change its meaning – your app already references the old mark.
  • Source string ≠ mark. Don't use the English text as the key. If you edit the copy, you don't want every reference in your code to break.

Empty vs missing translations

A translation can be missing entirely (no row for that language) or explicitly empty (saved as an empty string). LangSync treats both as incomplete and offers to auto-translate them. Billing counts only non-empty translations – empty values cost nothing.

Context is gold

The optional context field on each term is one of the most underused features. The AI uses it to disambiguate:

  • Mark nav.home with context "Top-nav link to landing page" → "Home".
  • Mark house.home with context "Real-estate listing – buyer's primary residence" → "Casa principal" / "Hogar".

Five seconds writing context per term pays back across every language.

Behaviour and edge cases

  • Deleting a term removes the term and every translation across every language. No undo.
  • Renaming a mark updates the key immediately. Any deployed app using the old mark stops finding it.
  • Editing a default-language value does not automatically re-translate target languages – they continue to show their previous AI-generated values until you re-run auto-translate or edit them manually.
  • Concurrent edits are last-write-wins: if two team members edit the same translation in the same minute, the later save overwrites the earlier. There's no merge or per-translation history.

On this page