Adding multi-language support to your React Native app not only enhances the user experience but also expands your app’s reach to a global audience. In this article, we’ll show you how to integrate multi-language support into your React Native app using i18next, react-i18next, and other helpful packages.
🛠️ Required Dependencies
Run the following commands to install the necessary packages:
yarn add i18next react-i18next i18next-http-backend i18next-browser-languagedetector
yarn add @react-native-async-storage/async-storage
yarn add react-native-localize
📂 Setting Up the Translations Folder
Create a translations folder inside your src directory. Inside this folder, create the following files:
-
en.json
- English translations. -
hi.json
- Hindi translations. -
i18n.js
- Configuration for i18next. -
translate.js
- Helper function for translation.
📝 Translation Files
en.json
{
"welcome": "Welcome",
"hello_world": "Hello, World!"
}
hi.json
{
"welcome": "स्वागत है",
"hello_world": "नमस्ते, दुनिया!",
"change_language": "भाषा बदलें"
}
🔧 i18n Configuration
i18n.js
import i18n from 'i18next';
import {initReactI18next} from 'react-i18next';
import * as Localization from 'react-native-localize';
import AsyncStorage from '@react-native-async-storage/async-storage';
// Translation files
import english from '../translations/en.json';
import hindi from '../translations/hi.json';
// Detect the user's language
const languageDetector = {
type: 'languageDetector',
async: true,
detect: callback => {
AsyncStorage.getItem('user-language', (err, language) => {
if (err || !language) {
const bestLanguage = Localization.findBestAvailableLanguage([
'english',
'hindi',
]);
callback(bestLanguage?.languageTag || 'english');
} else {
callback(language);
}
});
},
init: () => {},
cacheUserLanguage: language => {
AsyncStorage.setItem('user-language', language);
},
};
i18n
.use(languageDetector)
.use(initReactI18next)
.init({
fallbackLng: 'english',
lng: 'english',
resources: {
english: {translation: english},
hindi: {translation: hindi},
},
interpolation: {
escapeValue: false,
},
});
export default i18n;
🛠 Helper for Translations
translate.js
import i18n from 'i18next';
export const translate = (key, options = {}) => {
return i18n.t(key, options);
};
🚀 Integrating i18n in Your App
Update your App.js
file to include the I18nextProvider
:
App.js
import React from 'react';
import MainNavigator from './src/navigation/rootNavigator';
import {SafeAreaProvider} from 'react-native-safe-area-context';
import {I18nextProvider} from 'react-i18next';
import i18n from './src/translations/i18n';
const App = () => {
return (
<I18nextProvider i18n={i18n}>
<SafeAreaProvider>
{/* Your main app components */}
</SafeAreaProvider>
</I18nextProvider>
);
};
export default App;
🖥️ Example Screen for Multi-Language Support
Create a component to demonstrate the language switch feature:
LanguageComponent.js
import {View, Text, Button, StyleSheet} from 'react-native';
import React from 'react';
import {useTranslation} from 'react-i18next';
import {translate} from '../../translations/translate';
const LanguageComponent = () => {
const {i18n} = useTranslation();
const switchLanguage = language => {
i18n.changeLanguage(language);
};
return (
<View style={styles.container}>
<Text>{translate('welcome')}</Text>
<Text>{translate('hello_world')}</Text>
<Button title="Switch to Hindi" onPress={() => switchLanguage('hindi')} />
<Button
title="Switch to English"
onPress={() => switchLanguage('english')}
/>
</View>
);
};
export default LanguageComponent;
const styles = StyleSheet.create({
container: {
flex: 1,
alignItems: 'center',
justifyContent: 'center',
},
});
With these steps, you’ve successfully added multi-language support to your React Native app! 🌐 Happy coding! 🚀
Top comments (0)