Add New Languages to a React Native App
Instamobile React Native apps include a localization layer so you can translate the app into the languages your product needs. This guide explains where translations live, how to add a new language, how to verify fallback behavior, and what to test before release.
Quick Answer
Duplicate the default English translation file, rename it using the language code, translate the values, register the new language in the translations index, restart Metro, rebuild the app, and test the app with the device language set to the new locale.
When To Use This Guide
Use this guide when you want to:
- add a new supported language;
- translate a purchased app package for a market or client;
- add RTL support for Arabic, Hebrew, Persian, Urdu, or another RTL language;
- verify localization before publishing a white-labeled app.
Translation Files
Most app packages keep translations under:
src/translations/
Common files:
src/translations/
en.json
es.json
fr.json
index.ts
The exact files can vary by app. Search before editing:
find src -path "*translations*" -maxdepth 4
Step 1: Create The New Language File
Copy the English file:
cp src/translations/en.json src/translations/es.json
Use the ISO 639-1 language code when possible:
| Language | File |
|---|---|
| Spanish | es.json |
| French | fr.json |
| German | de.json |
| Arabic | ar.json |
| Hebrew | he.json |
Step 2: Translate Values, Not Keys
Translation files usually work as dictionaries. Keep the keys stable and translate the values.
{
"Welcome": "Bienvenido",
"Sign In": "Iniciar sesion",
"Create Account": "Crear cuenta"
}
Do not rename keys unless you update every call site that uses the key.
Step 3: Register The Language
Open the translations index file, commonly:
src/translations/index.ts
Register the new translation file in the same pattern used by the app package:
import en from './en.json'
import es from './es.json'
export default {
en,
es,
}
Some app packages use a slightly different structure. Follow the existing file pattern rather than replacing the localization system.
Step 4: Restart And Rebuild
Restart Metro so the new JSON file is picked up:
corepack yarn start --reset-cache
Then rebuild the app:
corepack yarn ios
or:
corepack yarn android
Step 5: Test The Locale
Change the simulator or device language to the new language and relaunch the app.
Verify:
- onboarding screens;
- sign-in and sign-up screens;
- tab labels;
- empty states;
- settings screens;
- form validation messages;
- push notification text if generated locally;
- any app-specific screens such as feeds, products, bookings, listings, or chat.
RTL Checklist
For RTL languages, also verify:
- text alignment;
- row direction;
- icons that imply direction, such as arrows;
- chat bubbles;
- form inputs;
- navigation headers;
- product/listing cards;
- map and location screens.
If a screen has layout problems in RTL, fix the component layout instead of hard-coding a language-specific exception.
Troubleshooting
The app still shows English
Check that the new JSON file is registered in src/translations/index.ts, the
device locale matches the language code, and Metro was restarted with a clean
cache.
The app crashes after adding a translation file
Validate the JSON syntax. A missing comma or quote can break the bundle.
node -e "JSON.parse(require('fs').readFileSync('src/translations/es.json', 'utf8'))"
Some strings are still missing
Search for hard-coded strings and convert them to localized strings. Then add the same key to every supported language file.