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.