
Lokalisering av produkter er svÊrt viktig for internasjonale selskaper som gÄr inn i nye land og regioner. PÄ samme mÄte er lokalisering nÞdvendig for mobilapplikasjoner. Hvis en utvikler starter en internasjonal ekspansjon, er det viktig Ä gi brukere fra et annet land muligheten til Ä bruke grensesnittet pÄ sitt morsmÄl. I denne artikkelen vil vi lage en React Native-applikasjon ved Ä bruke pakken .
Skillbox anbefaler: Nettbasert utdanningskurs .
Vi minner om: for alle lesere av «Habr» â 10 000 rubler rabatt ved pĂ„melding til hvilket som helst Skillbox-kurs med kampanjekoden «Habr».
VerktĂžy og ferdigheter
For Ä forstÄ denne artikkelen trenger du grunnleggende ferdigheter i React Native. For Ä bli kjent med oppsettet til arbeidsmaskinen kan du .
Vi vil trenge fĂžlgende versjoner av programverktĂžyene:
- 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
Vi begynner
Vi skal lage en applikasjon som stÞtter engelsk, fransk og arabisk. FÞrst lager vi et nytt prosjekt ved Ä bruke react-native-cli. For dette mÄ du skrive fÞlgende i terminalen:
$ react-native init multiLanguage
$ cd multiLanguage
Legg til nĂždvendige biblioteker
FÞrst mÄ du installere react-native-localize ved Ä skrive fÞlgende:
$ yarn add react-native-localize
Hvis det oppstÄr problemer under installasjonen, .
Biblioteket react-native-localize gir utvikleren tilgang til flersprĂ„klige funksjoner. Men det trenger et annet bibliotek â i18n.
Artikkelen beskriver bruken av for Ă„ muliggjĂžre oversettelse i JavaScript.
$ yarn add i18n-js
Og siden i18n-js ikke tilbyr caching eller memoization, foreslÄr jeg Ä bruke lodash.memoize for dette:
$ yarn add lodash.memoize
Arbeid med oversettelser
For at applikasjonen skal kunne fungere med andre sprÄk, mÄ du fÞrst opprette en katalog oversettelser inne i src, deretter opprette tre JSON-filer, én for hvert sprÄk.
1. en.json for engelsk;
2. fr.json for fransk;
3. ar.json for arabisk.
Disse filene inneholder JSON-objekter med nÞkler og verdier. NÞkkelen vil vÊre den samme for hvert sprÄk. Den brukes av applikasjonen for Ä vise tekstinformasjon.
Verdien (value) er teksten som mÄ vises for brukeren.
Engelsk:
{ «hello»: «Hello World!»}
Fransk
{ «hello»: «Hallo verden!»}
Arabisk
{ «hello»: Â«Ù Ű±ŰŰšÙۧ ۚۧÙŰčۧÙ٠»}
PÄ samme mÄte kan man legge til andre sprÄk.
Hovedkode
I dette trinnet mÄ du Äpne filen App.js og legge til importen:
import React from "react";
import * as RNLocalize from "react-native-localize";
import i18n from "i18n-js";
import memoize from "lodash.memoize"; // Brukes for caching/memoize for bedre ytelse
import {
I18nManager,
SafeAreaView,
ScrollView,
StyleSheet,
Text,
View
} from "react-native";Deretter legges det til hjelpefunksjoner og konstanter som vil vĂŠre nyttige senere.
const translationGetters = {
// lazy requires (metro bundler stĂžtter ikke 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 hvis ingen tilgjengelige sprÄk passer
const fallback = { languageTag: "en", isRTL: false };
const { languageTag, isRTL } =
RNLocalize.findBestAvailableLanguage(Object.keys(translationGetters)) ||
fallback;
// tĂžm oversettelsescachen
translate.cache.clear();
// oppdater layoutretning
I18nManager.forceRTL(isRTL);
// sett i18n-js konfigurasjon
i18n.translations = { [languageTag]: translationGetters[languageTag]() };
i18n.locale = languageTag;
};NĂ„ skal vi lage klassekomponenten App:
export default class App extends React.Component {
constructor(props) {
super(props);
setI18nConfig(); // sett initial konfigurasjon
}
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
}
});Det fĂžrste elementet â setI18nConfig() â setter den innledende konfigurasjonen.
Deretter i componentDidMount() mÄ du legge til en lytter for hendelser; dette elementet vil overvÄke oppdateringer og kalle handleLocalizationChange() nÄr de skjer.
Metoden handleLocalizationChange() aktiverer setI18nConfig() og forceUpdate(). Dette er nÞdvendig for Android-enheter, da komponenten mÄ gjengis for at endringene skal bli synlige.
Deretter mÄ du fjerne lytteren i componentWillUnmount().
Til slutt, i render() returneres hello ved Ä bruke translate() og legge til parameteren key. Etter disse handlingene vil applikasjonen kunne forstÄ hvilket sprÄk som trengs, og vise meldinger pÄ dette sprÄket.
KjĂžre applikasjonen
NÄ er det pÄ tide Ä sjekke hvordan oversettelsen fungerer.
FĂžrst kjĂžrer vi applikasjonen i simulatoren eller emulatoren ved Ă„ skrive
$ react-native run-ios
$ react-native run-android
Det vil se omtrent slik ut:

NÄ kan vi prÞve Ä bytte sprÄk til fransk, og deretter kjÞre applikasjonen.

Med arabisk gjĂžr vi det samme, det er ingen forskjell.
SÄ langt gÄr det bra.
Men hva skjer hvis vi velger et tilfeldig sprÄk som ikke er oversatt i applikasjonen?
Det viser seg at oppgaven findBestLanguage er Ä gi den beste oversettelsen blant alle tilgjengelige. Resultatet blir at sprÄket som er satt som standard, vises.
Dette gjelder innstillingene pÄ telefonen. For eksempel kan man i iOS-emulatoren se rekkefÞlgen pÄ sprÄkene.

Hvis det valgte sprÄket ikke er preferert, returnerer findBestAvailableLanguage undefined, sÄ det sprÄket som er satt som standard, vises.
Bonus
react-native-localize har et API som gir tilgang til et stort antall sprÄkelementer. FÞr vi begynner Ä jobbe, .
Konklusjoner
Applikasjonen kan gjÞres flersprÄklig uten store problemer. React-native-localize er et utmerket valg som lar oss utvide brukerbasen for applikasjonen.
Kildekoden til prosjektet .
Skillbox anbefaler:
- ToÄrig praktisk kurs .
- Nettkurs .
- Praktisk ettÄrig kurs .
Kilde: habr.com
