Mehrsprachige Unterstützung in React Native
Unterstützung mehrerer Sprachen in React Native: Die Internationalisierung der React Native-App hilft uns, diejenigen Benutzer anzusprechen, die entweder kein Englisch sprechen oder die App in ihrer Landessprache lieber verwenden. Wir können den Benutzern Optionen zur Auswahl aus mehreren Sprachen geben, die wir in unserer App anbieten werden.
Für diese Art von Situation müssen wir die Unterstützung mehrerer Sprachen in unserer App implementieren. Hier kommen i18next und React-i18next ins Spiel. Diese Bibliothek erleichtert die Verwaltung von Übersetzungen und bietet viele nützliche Funktionen.
Sich nähern:
- Erstellen eines neuen React Native - Projekts und Installieren der i18next- und React -i18next- Abhängigkeiten.
- Erstellen einer JSON-Datei für jede Sprache.
- Konfiguration von i18next in i18n.js .
- Initialisieren von i18next durch Importieren in App.js .
- Importieren von Sprachfunktionen in App.js und Ändern der Sprache.
Beginnen wir nun mit der Umsetzung.
Schritt 1: Erstellen Sie ein neues React Native Project, indem Sie den Befehl ausführen
npx react-native init languageDemo
Schritt 2: Gehen Sie nun in Ihren Projektordner bzw. Sprachdemo.
cd languageDemo
Schritt 3: Installieren Sie die Bibliotheken i18next undreakt - i18next .
npm install i18next --save npm i react-i18next
Projektstruktur: Sie sieht wie folgt aus.
Schritt 4: Erstellen von JSON-Dateien. Die JSON-Datei enthält die Übersetzung für jeden Text in unserer App, den wir anzeigen möchten. Die Datei ist im JSON-Format, sodass jeder Text einen Schlüssel hat.
Der Schlüssel ist für jeden unterschiedlichen Text einzigartig, aber für denselben Text in verschiedenen Sprachen gleich.
1. en.json: enthält Übersetzungen für Englisch .
{ "translation": { "hello":"Hello", "this line is translated":"This line is translated" } }
2. hi.json: Enthält Übersetzungen für Hindi .
{ "translation": { "hello":"नमस्ते", "this line is translated":"यह पंक्ति अनुवादित है" } }
Schritt 5: Konfiguration von i18next (i18n.js). Wir werden i18n aus ‚i18next‘ und initReactI18next aus ‚react-i18next‘ importieren .
Dann importieren wir unsere JSON-Dateien ( en.json und hi.json ).
In i18n.use(initReactI18next) übergeben wir die i18n-Instanz an respond-i18next , wodurch sie für alle Komponenten über die Kontext-API verfügbar wird.
Die Funktion init() nimmt ein Objekt von {lng , fallbacklng, resources} als Parameter.
lng - default language fallbackLng - Fallback language in case key is not found for any translation. resources - JSON file for various languages.
Dateiname: i18n.js
Javascript
import i18n from 'i18next'; import {initReactI18next} from 'react-i18next'; import en from './en.json'; import hi from './hi.json'; i18n.use(initReactI18next).init({ lng: 'en', fallbackLng: 'en', resources: { en: en, hi: hi, }, interpolation: { escapeValue: false // react already safes from xss } }); export default i18n;
Schritt 6: Wir werden jetzt die i18n.js in unsere App.js -Datei importieren, die i18next initialisiert . Wir werden dann useTranslation Hook aus require-i18next importieren , was uns t und i18n gibt .
t - function which accepts key as parameter and returns the appropriate text based on current language selected. i18n - object containing function like changeLanguage and other useful values.
In unserem Bildschirm haben wir zwei Schaltflächen zum Ändern der Sprache. Es gibt einen Text, der entsprechend der aktuell eingestellten Sprache geändert wird, wenn wir eine der beiden Tasten drücken. Um die Sprache zu ändern, verwenden wir die changeLanguage- Funktion, die den Namen der Sprachressource als Parameter und eine Callback-Funktion akzeptiert, die nach der Sprachänderung ausgeführt wird.
We can check current language by doing console.log(i18n.language)
App.js
import React,{useState} from 'react'; import './i18n/i18n'; import {View, Text,Pressable} from 'react-native'; import {useTranslation} from 'react-i18next'; const App = () => { const {t, i18n} = useTranslation(); const [currentLanguage,setLanguage] =useState('en'); const changeLanguage = value => { i18n .changeLanguage(value) .then(() => setLanguage(value)) .catch(err => console.log(err)); }; return ( <View style={{ flex: 1, backgroundColor: 'white', alignItems: 'center', justifyContent: 'space-evenly', }}> <Text style={{fontWeight: 'bold', fontSize: 25, color: '#33A850'}}> {t('hello')}{' '} </Text> <Text style={{fontWeight: 'bold', fontSize: 25, color: '#33A850'}}> {t('this line is translated')} </Text> <Pressable onPress={() => changeLanguage('en')} style={{ backgroundColor: currentLanguage === 'en' ? '#33A850' : '#d3d3d3', padding: 20, }}> <Text>Select English</Text> </Pressable> <Pressable onPress={() => changeLanguage('hi')} style={{ backgroundColor: currentLanguage === 'hi' ? '#33A850' : '#d3d3d3', padding: 20, }}> <Text>हिंदी का चयन करें</Text> </Pressable> </View> ); }; export default App;
Schritt zum Ausführen der Anwendung: Starten Sie die Anwendung mit dem folgenden Befehl:
npx react-native run-android
Ausgabe: