Skip to main content

Internationalization (i18n)

Ever Teams supports 13 languages using next-intl for the web application.

Supported Languages​

CodeLanguageRTL
enEnglishNo
frFrenchNo
arArabicYes
bgBulgarianNo
zhChineseNo
nlDutchNo
deGermanNo
heHebrewYes
itItalianNo
plPolishNo
ptPortugueseNo
ruRussianNo
esSpanishNo

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​

  1. Create a new JSON file in apps/web/locales/ (e.g., ja.json)
  2. Add the locale code to docusaurus.config.ts locales array
  3. Translate all keys from en.json
  4. 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.