Internationalization

Overview

weNow supports 50 languages via i18next with the react-i18next integration. The app automatically detects the device locale on first launch and sets the UI language accordingly. If the detected locale is not among the 50 supported languages, the app falls back to English. The user's language preference is persisted to AsyncStorage so it survives app restarts.

Supported Languages

Code Language Native Name
afAfrikaansAfrikaans
arArabicالعربية
bgBulgarianБългарски
bnBengaliবাংলা
caCatalanCatalà
csCzechČeština
daDanishDansk
deGermanDeutsch
elGreekΕλληνικά
enEnglishEnglish
esSpanishEspañol
faPersianفارسی
fiFinnishSuomi
filFilipinoFilipino
frFrenchFrançais
heHebrewעברית
hiHindiहिन्दी
hrCroatianHrvatski
huHungarianMagyar
idIndonesianBahasa Indonesia
itItalianItaliano
jaJapanese日本語
kmKhmerភាសាខ្មែរ
knKannadaಕನ್ನಡ
koKorean한국어
ltLithuanianLietuvių
lvLatvianLatviešu
mlMalayalamമലയാളം
mrMarathiमराठी
msMalayBahasa Melayu
myBurmeseမြန်မာဘာသာ
nbNorwegianNorsk Bokmål
nlDutchNederlands
plPolishPolski
ptPortuguesePortuguês
roRomanianRomână
ruRussianРусский
siSinhalaසිංහල
skSlovakSlovenčina
srSerbianСрпски
svSwedishSvenska
swSwahiliKiswahili
taTamilதமிழ்
teTeluguతెలుగు
thThaiไทย
trTurkishTürkçe
ukUkrainianУкраїнська
urUrduاردو
viVietnameseTiếng Việt
zhChinese中文

Technical Setup

The internationalization system is built on the following stack:

Key files:

How to Add a New Language

  1. Create the locale file -- Add a new JSON file in src/i18n/locales/ named with the language code (e.g., sw.json). Copy the structure from en.json and translate all values.
  2. Register the language -- Add the language entry (code, name, native name) to the array in src/i18n/languages.ts.
  3. Import in i18n config -- Import the new locale JSON in src/i18n/index.ts and add it to the resources object passed to i18next.init().

Translation Keys

Translation strings are organized into the following sections within each locale JSON file:

Widget Localization

Android home screen widgets run in a headless JavaScript context that does not have access to react-i18next, so they handle localization differently from the main app: