Internationalization (i18n)
Ever Teams supports 13 languages using next-intl for the web application.
Supported Languages
| Code | Language | RTL |
|---|---|---|
en | English | No |
fr | French | No |
ar | Arabic | Yes |
bg | Bulgarian | No |
zh | Chinese | No |
nl | Dutch | No |
de | German | No |
he | Hebrew | Yes |
it | Italian | No |
pl | Polish | No |
pt | Portuguese | No |
ru | Russian | No |
es | Spanish | No |
How It Works
Routing
All user-facing routes include a [locale] segment:
/en/dashboard → English dashboard
/fr/dashboard → French dashboard
/ar/dashboard → Arabic dashboard (RTL)
Translation Files
Translation files are JSON files stored in apps/web/locales/:
locales/
├── en.json # English translations
├── fr.json # French translations
├── ar.json # Arabic translations
├── bg.json # Bulgarian translations
├── zh.json # Chinese translations
├── de.json # German translations
└── ... # Other locales
Usage in Components
import { useTranslations } from 'next-intl';
function TaskList() {
const t = useTranslations('tasks');
return <h1>{t('title')}</h1>;
}
Adding a New Language
- Create a new JSON file in
apps/web/locales/(e.g.,ja.json) - Add the locale code to
docusaurus.config.tslocales array - Translate all keys from
en.json - The new language appears in the locale switcher
Crowdin Integration
Translation management is handled via Crowdin, enabling community contributions:
- Source strings are extracted from the English locale
- Translators work on Crowdin's web interface
- Translated strings are synced back to the repo
Mobile App i18n
The mobile app (apps/mobile) has its own i18n setup using React Native's localization capabilities with translation files in apps/mobile/app/i18n/.
Desktop App i18n
The desktop app (apps/desktop/i18n/) has its own translation resources for Electron-specific UI strings.