
Die Lokalisierung von Produkten ist fĂŒr internationale Unternehmen, die neue LĂ€nder und Regionen erschlieĂen, sehr wichtig. Ebenso ist die Lokalisierung fĂŒr mobile Anwendungen erforderlich. Wenn ein Entwickler mit der internationalen Expansion beginnt, ist es wichtig, den Nutzern aus einem anderen Land die Möglichkeit zu geben, die BenutzeroberflĂ€che in ihrer Muttersprache zu nutzen. In diesem Artikel werden wir eine React Native-Anwendung erstellen, unter Verwendung des Pakets .
Skillbox empfiehlt: Online-Kurs .
Wir erinnern daran: alle Leser von âHabrâ erhalten einen Rabatt von 10.000 Rubel bei der Anmeldung zu einem beliebigen Kurs von Skillbox mit dem Aktionscode âHabrâ.
Werkzeuge und FĂ€higkeiten
FĂŒr das VerstĂ€ndnis dieses Artikels sind grundlegende Kenntnisse im Umgang mit React Native erforderlich. Zur Einarbeitung in die Einstellungen der Arbeitsmaschine kann man .
Wir benötigen folgende Versionen der Software-Tools:
- Node v10.15.0
- npm 6.4.1
- yarn 1.16.0
- react-native 0.59.9
- react-native-localize 1.1.3
- i18n-js 3.3.0
Starten wir
Wir werden eine Anwendung erstellen, die Englisch, Französisch und Arabisch unterstĂŒtzt. Zuerst erstellen wir ein neues Projekt mit react-native-cli. Dazu muss im Terminal Folgendes eingegeben werden:
$ react-native init multiLanguage
$ cd multiLanguage
FĂŒgen Sie die erforderlichen Bibliotheken hinzu
Zuerst mĂŒssen wir react-native-localize installieren, indem wir Folgendes eingeben:
$ yarn add react-native-localize
Falls wÀhrend der Installation Probleme auftreten, .
Die Bibliothek react-native-localize gibt dem Entwickler Zugriff auf mehrsprachige Funktionen. Aber sie benötigt eine weitere Bibliothek â i18n.
Im Artikel wird die Verwendung beschrieben um Ăbersetzungen in JavaScript zu gewĂ€hrleisten.
$ yarn add i18n-js
Da i18n-js jedoch keine Caching- oder Memoisierungsfunktionen bietet, empfehle ich die Verwendung von lodash.memoize dafĂŒr:
$ yarn add lodash.memoize
Arbeiten mit Ăbersetzungen
Um sicherzustellen, dass die Anwendung auch mit anderen Sprachen arbeiten kann, muss zunĂ€chst ein Verzeichnis translations innerhalb von src erstellt werden, dann â drei JSON-Dateien fĂŒr jede Sprache.
1. en.json fĂŒr Englisch;
2. fr.json fĂŒr Französisch;
3. ar.json fĂŒr Arabisch.
Diese Dateien enthalten JSON-Objekte mit SchlĂŒsseln und Werten. Der SchlĂŒssel wird fĂŒr jede Sprache gleich sein. Er wird von der Anwendung verwendet, um Textinformationen anzuzeigen.
Der Wert (value) ist der Text, der dem Benutzer angezeigt werden soll.
Englisch:
{ "hello": "Hello World!"}
Französisch
{ "hello": "Salut le Monde!"}
Arabisch
{ "hello": "ŰŁÙÙŰ§Ù ŰšŰ§ÙŰčۧÙÙ "}
Auf Ă€hnliche Weise können weitere Sprachen hinzugefĂŒgt werden.
Hauptcode
An diesem Punkt mĂŒssen Sie die Datei App.js öffnen und den Import hinzufĂŒgen:
import React from "react";
import * as RNLocalize from "react-native-localize";
import i18n from "i18n-js";
import memoize from "lodash.memoize"; // Verwenden Sie dies fĂŒr Caching/memoize fĂŒr bessere Leistung
import {
I18nManager,
SafeAreaView,
ScrollView,
StyleSheet,
Text,
View
} from "react-native";Danach werden Hilfsfunktionen und Konstanten hinzugefĂŒgt, die spĂ€ter nĂŒtzlich sein werden.
const translationGetters = {
// verzögerte Anforderungen (Metro-Bundler unterstĂŒtzt keine Symlinks)
ar: () => require("./src/translations/ar.json"),
en: () => require("./src/translations/en.json"),
fr: () => require("./src/translations/fr.json")
};
const translate = memoize(
(key, config) => i18n.t(key, config),
(key, config) => (config ? key + JSON.stringify(config) : key)
);
const setI18nConfig = () => {
// Fallback, wenn keine verfĂŒgbare Sprache passt
const fallback = { languageTag: "en", isRTL: false };
const { languageTag, isRTL } =
RNLocalize.findBestAvailableLanguage(Object.keys(translationGetters)) ||
fallback;
// Ăbersetzungscache leeren
translate.cache.clear();
// Layout-Richtung aktualisieren
I18nManager.forceRTL(isRTL);
// i18n-js-Konfiguration setzen
i18n.translations = { [languageTag]: translationGetters[languageTag]() };
i18n.locale = languageTag;
};Und jetzt erstellen wir die Klasse App:
export default class App extends React.Component {
constructor(props) {
super(props);
setI18nConfig(); // Anfangskonfiguration setzen
}
componentDidMount() {
RNLocalize.addEventListener("change", this.handleLocalizationChange);
}
componentWillUnmount() {
RNLocalize.removeEventListener("change", this.handleLocalizationChange);
}
handleLocalizationChange = () => {
setI18nConfig();
this.forceUpdate();
};
render() {
return (
{translate("hello")}
);
}
}
const styles = StyleSheet.create({
safeArea: {
backgroundColor: "white",
flex: 1,
alignItems: "center",
justifyContent: "center"
},
value: {
fontSize: 18
}
});Der erste Punkt â setI18nConfig() â legt die Anfangskonfiguration fest.
Dann muss in componentDidMount() ein Ereignislistener hinzugefĂŒgt werden; dieses Element wird Aktualisierungen verfolgen und handleLocalizationChange() aufrufen, wenn sie stattfinden.
Die Methode handleLocalizationChange() aktiviert setI18nConfig() und forceUpdate(). Dies ist notwendig fĂŒr Android-GerĂ€te, da die Komponente gerendert werden muss, damit die Ănderungen sichtbar werden.
Dann muss das Abhören im componentWillUnmount() entfernt werden.
SchlieĂlich wird in render() das Wort hello zurĂŒckgegeben, indem translate() verwendet und der Parameter key hinzugefĂŒgt wird. Nach diesen Schritten wird die App "verstehen", welche Sprache benötigt wird, und die Nachrichten entsprechend anzeigen.
Start der Anwendung
Jetzt ist es an der Zeit zu prĂŒfen, wie die Ăbersetzung funktioniert.
Zuerst starten wir die Anwendung im Simulator oder Emulator, indem wir eingeben
$ react-native run-ios
$ react-native run-android
So wird es ungefÀhr aussehen:

Jetzt kann man versuchen, die Sprache auf Französisch zu wechseln, indem man dann die Anwendung startet.

Mit der arabischen Sprache machen wir dasselbe, da gibt es keinen Unterschied.
Bisher lÀuft alles gut.
Was passiert jedoch, wenn man eine zufĂ€llige Sprache auswĂ€hlt, fĂŒr die es keine Ăbersetzung in der Anwendung gibt?
Es stellt sich heraus, dass die Aufgabe von findBestLanguage darin besteht, die optimale Ăbersetzung aus allen verfĂŒgbaren zu liefern. Als Ergebnis wird die Sprache angezeigt, die standardmĂ€Ăig eingestellt wurde.
Es geht um die Einstellungen des Telefons. Beispielsweise kann man im iOS-Emulator die Reihenfolge der Sprachen ansehen.

Wenn die gewĂ€hlte Sprache nicht bevorzugt ist, gibt findBestAvailableLanguage undefined zurĂŒck, sodass die Sprache angezeigt wird, die standardmĂ€Ăig eingestellt ist.
Bonus
react-native-localize hat eine API, die den Zugriff auf eine groĂe Anzahl von Sprachelementen ermöglicht. Bevor man mit der Arbeit beginnt, .
Das DBMS Tarantool ist ein attraktives, zukunftstrÀchtiges Produkt zur Erstellung von hochbelasteten Anwendungen.
Die Anwendung kann ohne groĂe Probleme mehrsprachig gestaltet werden. React-native-localize ist eine hervorragende Option, die es ermöglicht, den Benutzerkreis der Anwendung zu erweitern.
Der Quellcode des Projekts .
Skillbox empfiehlt:
- ZweijÀhriger praktischer Kurs .
- Online-Kurs .
- Praktischer Jahreskurs .
Quelle: habr.com
