Terms and translations
The atomic units of LangSync – translation keys and their per-language values.
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.titlereads better thansigninTitleand 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.homewith context "Top-nav link to landing page" → "Home". - Mark
house.homewith 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.