Localize Your App

React Native Localization: How to Translate Your i18n JSON Files

React Native localization almost always ends at the same place: a folder of JSON files, one per language, consumed by i18next (usually via react-i18next) or react-intl. The libraries are mature; the painful part is producing and maintaining es.json, de.json, ja.json… with the same nested structure as your English file. This guide covers the setup briefly, then the translation workflow that keeps those files in sync.

The 60-second setup recap

// i18n.js
import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';
import en from './locales/en.json';
import ja from './locales/ja.json';

i18n.use(initReactI18next).init({
  resources: { en: { translation: en }, ja: { translation: ja } },
  lng: 'en',
  fallbackLng: 'en',
});

Pair it with expo-localization or react-native-localize to detect the device language. From here on, localization is purely a content problem: every key in en.json needs a counterpart in every other file.

What makes i18n JSON tricky to translate

  • Nesting. Keys like settings.notifications.title live in nested objects. Flatten-and-rebuild scripts corrupt structure; a translated file with different nesting silently falls back to English.
  • Interpolation. {{count}} variables must survive verbatim — including the double braces i18next expects.
  • Plural suffixes. i18next encodes plurals as separate keys (item_one, item_other), and the required suffix set changes per language — Arabic needs six forms, Japanese one. Tools that mirror the English key set produce broken plurals.

Translate your JSON in three steps

  1. Upload en.json. Localize Your App understands nested i18n JSON: keys, interpolation variables, and plural suffixes are detected, and variables are locked so they can't be translated or dropped.
  2. Select languages. Any of the 39 App Store Connect locales. Plural keys are generated with the right suffix set per language, and output structure is guaranteed to mirror your source file exactly.
  3. Review and download. Polish anything in the side-by-side editor, then download one JSON per language and drop them into locales/. Register each in your i18next resources and ship.

When your next release adds keys, upload the new en.json — translation memory covers everything unchanged for free. If you've been comparing subscription tools for this, the Lokalise alternatives guide shows why per-string credits usually win for indie apps, and the cost guide puts numbers on it.

Don't forget the stores

A localized app with an English-only store listing leaves most of the win on the table — store search happens in the user's language. Once the app speaks Japanese, localize the listing so Japanese users can actually find it.

Ship your app in 39 languages by tonight

Upload your localization file, review side by side, download ready-to-import files for every language. One-time credits from $9 — no subscription.

No subscription. Credits never expire.

Related guides