- Copy
TEMPLATE.jsto{code}.js(e.g.,de.jsfor German,fr.jsfor French) - Edit the
register()call at the top:i18n.register('de', 'DE', 'Deutsch', {
- Translate all string values (keep the keys in English)
- Add a
<script>tag inindex.html:<script src="/js/i18n/de.js?v=5.5"></script>
- That's it! The language appears automatically in the language selector.
- Don't modify
en.jsunless you're adding new keys for a new feature en.jsis the fallback — any missing key in your language will show the English text- Keep
{{variable}}placeholders as-is (they're replaced at runtime) - Some values contain HTML (e.g.,
<strong>,<br>) — keep the HTML tags - Test your translation by switching to it in the app (click the language button in the sidebar footer)
Use ISO 639-1 two-letter codes:
| Code | Language | Native Name |
|---|---|---|
| en | English | English |
| ro | Romanian | Română |
| de | German | Deutsch |
| fr | French | Français |
| es | Spanish | Español |
| it | Italian | Italiano |
| pt | Portuguese | Português |
| nl | Dutch | Nederlands |
| pl | Polish | Polski |
| ja | Japanese | 日本語 |
| zh | Chinese | 中文 |
| ko | Korean | 한국어 |
i18n/
en.js ← English (base/fallback, ~900 keys)
ro.js ← Romanian
TEMPLATE.js ← Copy this to start a new language
README.md ← This file
You don't need to translate every key. Missing keys automatically fall back to English.
Start with the most visible sections: common, nav, login, pages.dashboard, pages.containers.