
ΠΠΎΠΊΠ°Π»ΠΈΠ·Π°ΡΠΈΡΡΠ° Π½Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡΠ΅ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π²Π°ΠΆΠ½Π° Π·Π° ΠΌΠ΅ΠΆΠ΄ΡΠ½Π°ΡΠΎΠ΄Π½ΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, ΠΊΠΎΠΈΡΠΎ Π½Π°Π²Π»ΠΈΠ·Π°Ρ Π² Π½ΠΎΠ²ΠΈ Π·Π° ΡΡΡ
Π΄ΡΡΠΆΠ°Π²ΠΈ ΠΈ ΡΠ΅Π³ΠΈΠΎΠ½ΠΈ. ΠΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π°ΡΠΈΠ½ Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°ΡΠΈΡΡΠ° Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠ° ΠΈ Π½Π° ΠΌΠΎΠ±ΠΈΠ»Π½ΠΈΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠΎΠ³Π°ΡΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡΡ Π·Π°ΠΏΠΎΡΠ½Π΅ ΠΌΠ΅ΠΆΠ΄ΡΠ½Π°ΡΠΎΠ΄Π½Π° Π΅ΠΊΡΠΏΠ°Π½Π·ΠΈΡ, Π΅ Π²Π°ΠΆΠ½ΠΎ Π΄Π° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅ ΠΎΡ Π΄ΡΡΠ³Π° ΡΡΡΠ°Π½Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΡΠ°Π±ΠΎΡΠ° Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π½Π° ΡΠ΅Ρ
Π½ΠΈΡ ΡΠΎΠ΄Π΅Π½ Π΅Π·ΠΈΠΊ. Π ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ ΡΠ΅ ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ React Native, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ° .
Skillbox ΠΏΡΠ΅ΠΏΠΎΡΡΡΠ²Π°: ΠΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΠ΅Π»Π΅Π½ ΠΎΠ½Π»Π°ΠΉΠ½ ΠΊΡΡΡ .
ΠΠ°ΠΏΠΎΠΌΠ½ΡΠΌΠ΅: Π·Π° Π²ΡΠΈΡΠΊΠΈ ΡΠΈΡΠ°ΡΠ΅Π»ΠΈ Π½Π° Β«Π₯Π°Π±ΡΠ°Β» β ΠΎΡΡΡΡΠΏΠΊΠ° ΠΎΡ 10 000 ΡΡΠ±Π»ΠΈ ΠΏΡΠΈ Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ Π½Π° Π²ΡΠ΅ΠΊΠΈ ΠΊΡΡΡ Skillbox Ρ ΠΏΡΠΎΠΌΠΎΠΊΠΎΠ΄ Β«Π₯Π°Π±ΡΒ».
ΠΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ ΠΈ ΡΠΌΠ΅Π½ΠΈΡ
ΠΠ° Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ, ΡΠ° Π½ΡΠΆΠ½ΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΠΈ ΡΠΌΠ΅Π½ΠΈΡ Π·Π° ΡΠ°Π±ΠΎΡΠ° Ρ React Native. ΠΠ° Π·Π°ΠΏΠΎΠ·Π½Π°Π²Π°Π½Π΅ Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅ Π½Π° ΡΠ°Π±ΠΎΡΠ½Π°ΡΠ° ΠΌΠ°ΡΠΈΠ½Π° ΠΌΠΎΠΆΠ΅ Π΄Π° .
ΠΡΠΆΠ΄Π°Π΅ΠΌ ΡΠ΅ ΠΎΡ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Π½Π° ΡΠΎΡΡΡΠ΅ΡΠ½ΠΈΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ:
- 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
ΠΠ°ΠΏΠΎΡΠ²Π°ΠΌΠ΅
Π©Π΅ ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΈ, ΡΡΠ΅Π½ΡΠΊΠΈ ΠΈ Π°ΡΠ°Π±ΡΠΊΠΈ Π΅Π·ΠΈΡΠΈ. ΠΡΡΠ²ΠΎ ΡΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ Π½ΠΎΠ² ΠΏΡΠΎΠ΅ΠΊΡ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ react-native-cli. ΠΠ° ΡΠ΅Π»ΡΠ° Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π° ΡΡΡΠ±Π²Π° Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ:
$ react-native init multiLanguage
$ cd multiLanguage
ΠΠΎΠ±Π°Π²ΡΠΌΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ
ΠΡΡΠ²ΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΌΠ΅ react-native-localize, ΠΊΠ°ΡΠΎ Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ:
$ yarn add react-native-localize
ΠΠΊΠΎ Π²ΡΠ·Π½ΠΈΠΊΠ½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ΡΠΎ, .
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° react-native-localize Π΄Π°Π²Π° Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠ΅Π·ΠΈΡΠ½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠΎ Π΅ Π½ΡΠΆΠ½Π° ΠΈ Π΄ΡΡΠ³Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° β i18n.
Π ΡΡΠ°ΡΠΈΡΡΠ° ΡΠ΅ ΠΎΠΏΠΈΡΠ²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ ΠΉ Π·Π° ΠΎΡΠΈΠ³ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠ΅Π²ΠΎΠ΄ Π² JavaScript.
$ yarn add i18n-js
Π’ΡΠΉ ΠΊΠ°ΡΠΎ i18n-js Π½Π΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ ΠΊΠ΅ΡΠΈΡΠ°Π½Π΅ ΠΈΠ»ΠΈ ΠΌΠ΅ΠΌΠΎΠΈΠ·Π°ΡΠΈΡ, ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ lodash.memoize Π·Π° ΡΠ°Π·ΠΈ ΡΠ΅Π»:
$ yarn add lodash.memoize
Π Π°Π±ΠΎΡΠ° Ρ ΠΏΡΠ΅Π²ΠΎΠ΄ΠΈ
ΠΠ° Π΄Π° ΠΌΠΎΠΆΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π΄Π° ΡΠ°Π±ΠΎΡΠΈ ΠΈ Ρ Π΄ΡΡΠ³ΠΈ Π΅Π·ΠΈΡΠΈ, ΠΏΡΡΠ²ΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΡΠ΅ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ translations Π² src, ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ β ΡΡΠΈ JSON ΡΠ°ΠΉΠ»Π°, ΠΏΠΎ Π΅Π΄ΠΈΠ½ Π·Π° Π²ΡΠ΅ΠΊΠΈ ΠΎΡ Π΅Π·ΠΈΡΠΈΡΠ΅.
1. en.json Π·Π° Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΈ;
2. fr.json Π·Π° ΡΡΠ΅Π½ΡΠΊΠΈ;
3. ar.json Π·Π° Π°ΡΠ°Π±ΡΠΊΠΈ.
Π’Π΅Π·ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΡΡΠ΄ΡΡΠΆΠ°Ρ JSON ΠΎΠ±Π΅ΠΊΡΠΈ Ρ ΠΊΠ»ΡΡΠΎΠ²Π΅ ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ. ΠΠ»ΡΡΡΡ ΡΠ΅ Π±ΡΠ΄Π΅ Π΅Π΄ΠΈΠ½ ΠΈ ΡΡΡ Π·Π° Π²ΡΠ΅ΠΊΠΈ Π΅Π·ΠΈΠΊ. Π’ΠΎΠΉ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΎΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, Π·Π° Π΄Π° ΠΏΠΎΠΊΠ°Π·Π²Π° ΡΠ΅ΠΊΡΡΠΎΠ²Π°ΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ.
Π‘ΡΠΎΠΉΠ½ΠΎΡΡΡΠ° (value) Π΅ ΡΠ΅ΠΊΡΡΡΡ, ΠΊΠΎΠΉΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π²Π° Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ.
ΠΠ½Π³Π»ΠΈΠΉΡΠΊΠΈ Π΅Π·ΠΈΠΊ:
{ "hello": "Hello World!"}
Π€ΡΠ΅Π½ΡΠΊΠΈ
{ "hello": "Salut le Monde!"}
ΠΡΠ°Π±ΡΠΊΠΈ
{ "hello": "Ψ£ΩΩΨ§Ω Ψ¨Ψ§ΩΨΉΨ§ΩΩ "}
ΠΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π°ΡΠΈΠ½ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΠΈ Π΄ΡΡΠ³ΠΈ Π΅Π·ΠΈΡΠΈ.
ΠΡΠ½ΠΎΠ²Π΅Π½ ΠΊΠΎΠ΄
ΠΠ° ΡΠΎΠ·ΠΈ Π΅ΡΠ°ΠΏ ΡΡΡΠ±Π²Π° Π΄Π° ΠΎΡΠ²ΠΎΡΠΈΡΠ΅ ΡΠ°ΠΉΠ»Π° App.js ΠΈ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ ΠΈΠΌΠΏΠΎΡΡ:
import React ΠΎΡ "react";
import * as RNLocalize ΠΎΡ "react-native-localize";
import i18n ΠΎΡ "i18n-js";
import memoize ΠΎΡ "lodash.memoize"; // ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ Π·Π° ΠΊΠ΅ΡΠΈΡΠ°Π½Π΅/ΠΌΠ΅ΠΌΠΎΠΈΠ·ΠΈΡΠ°Π½Π΅ Π·Π° ΠΏΠΎ-Π΄ΠΎΠ±ΡΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ
import {
I18nManager,
SafeAreaView,
ScrollView,
StyleSheet,
Text,
View
} ΠΎΡ "react-native";Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ Π΄ΠΎΠ±Π°Π²ΡΡ ΠΏΠΎΠΌΠΎΡΠ½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ Π±ΡΠ΄Π°Ρ ΠΏΠΎΠ»Π΅Π·Π½ΠΈ ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ.
const translationGetters = {
// ΠΌΡΡΠ·Π΅Π»ΠΈΠ²ΠΈ ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡ (ΠΌΠ΅ΡΡΠΎ bundler Π½Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° 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 = () => {
// ΡΠ΅Π·Π΅ΡΠ²Π΅Π½ Π²Π°ΡΠΈΠ°Π½Ρ, Π°ΠΊΠΎ Π½ΡΠΌΠ° Π½Π°Π»ΠΈΡΠ΅Π½ Π΅Π·ΠΈΠΊ
const fallback = { languageTag: "en", isRTL: false };
const { languageTag, isRTL } =
RNLocalize.findBestAvailableLanguage(Object.keys(translationGetters)) ||
fallback;
// ΠΈΠ·ΡΠΈΡΡΠ²Π°Π½Π΅ Π½Π° ΠΊΠ΅ΡΠ° Π½Π° ΠΏΡΠ΅Π²ΠΎΠ΄ΠΈΡΠ΅
translate.cache.clear();
// Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΠΎΡΠΎΠΊΠ°ΡΠ° Π½Π° ΠΎΡΠΎΡΠΌΠ»Π΅Π½ΠΈΠ΅
I18nManager.forceRTL(isRTL);
// Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π½Π° i18n-js
i18n.translations = { [languageTag]: translationGetters[languageTag]() };
i18n.locale = languageTag;
};Π‘Π΅Π³Π° ΡΠ΅ ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ ΠΊΠ»Π°Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ App:
export default class App extends React.Component {
constructor(props) {
super(props);
setI18nConfig(); // Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Π½Π° Π½Π°ΡΠ°Π»Π½Π°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ
}
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
}
});ΠΡΡΠ²ΠΈΡΡ Π΅Π»Π΅ΠΌΠ΅Π½Ρ β setI18nConfig() β Π½Π°ΡΡΡΠΎΠΉΠ²Π° Π½Π°ΡΠ°Π»Π½Π°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ.
Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° Π² componentDidMount() ΡΡΡΠ±Π²Π° Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΡΠ»ΡΡΠ°ΡΠ΅Π» Π·Π° ΡΡΠ±ΠΈΡΠΈΡ, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΡΠ»Π΅Π΄ΠΈ Π·Π° Π°ΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ ΡΠ΅ ΠΈΠ·Π²ΠΈΠΊΠ²Π° handleLocalizationChange() ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ΅ ΡΠ΅ ΡΠ»ΡΡΠ²Π°Ρ.
ΠΠ΅ΡΠΎΠ΄ΡΡ handleLocalizationChange() Π°ΠΊΡΠΈΠ²ΠΈΠ·ΠΈΡΠ° setI18nConfig() ΠΈ forceUpdate(). Π’ΠΎΠ²Π° Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π° ΡΡΡΡΠΎΠΉΡΡΠ²Π° Π½Π° Android, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡΡ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ ΡΠ΅Π½Π΄Π΅ΡΠΈΡΠ°Π½, Π·Π° Π΄Π° ΡΡΠ°Π½Π°Ρ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π²ΠΈΠ΄ΠΈΠΌΠΈ.
Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΡΠ΅ΠΌΠ°Ρ Π½Π΅ΠΌ ΡΠ»ΡΡΠ°ΡΠ΅Π»Ρ ΠΎΡ ΠΌΠ΅ΡΠΎΠ΄Π° componentWillUnmount().
ΠΠ°ΠΊΡΠ°Ρ, Π² render() ΡΠ΅ Π²ΡΡΡΠ° hello ΡΡΠ΅Π· ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° translate() ΠΈ Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡΠ° key. Π‘Π»Π΅Π΄ ΡΠ΅Π·ΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° "ΡΠ°Π·Π±ΠΈΡΠ°" ΠΊΠΎΠΉ Π΅Π·ΠΈΠΊ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ ΠΈ Π΄Π° ΠΏΠΎΠΊΠ°Π·Π²Π° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° Π½Π΅Π³ΠΎ.
Π‘ΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ
Π‘Π΅Π³Π° Π΅ ΠΌΠΎΠΌΠ΅Π½ΡΡΡ Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠΈ ΠΏΡΠ΅Π²ΠΎΠ΄ΡΡ.
ΠΡΡΠ²ΠΎ ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π² ΡΠΈΠΌΡΠ»Π°ΡΠΎΡΠ° ΠΈΠ»ΠΈ Π΅ΠΌΡΠ»Π°ΡΠΎΡΠ°, Π½Π°Π±ΠΈΡΠ°ΠΉΠΊΠΈ
$ react-native run-ios
$ react-native run-android
Π’ΠΎΠ²Π° ΡΠ΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»Π½ΠΎ ΡΠ°ΠΊΠ°:

Π‘Π΅Π³Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΎΠΏΠΈΡΠ°ΡΠ΅ Π΄Π° ΡΠΌΠ΅Π½ΠΈΡΠ΅ Π΅Π·ΠΈΠΊΠ° Π½Π° ΡΡΠ΅Π½ΡΠΊΠΈ, ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ.

Π‘ Π°ΡΠ°Π±ΡΠΊΠΈΡ Π΅Π·ΠΈΠΊ ΠΏΡΠ°Π²ΠΈΠΌ ΡΡΡΠΎΡΠΎ, ΡΠ°Π·Π»ΠΈΠΊΠ° Π½ΡΠΌΠ°.
ΠΠΎΡΠ΅Π³Π° Π²ΡΠΈΡΠΊΠΎ Π²ΡΡΠ²ΠΈ Π΄ΠΎΠ±ΡΠ΅.
ΠΠΎ ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ΅ ΡΠ΅ ΡΠ»ΡΡΠΈ, Π°ΠΊΠΎ ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΈΡ Π΅Π·ΠΈΠΊ, Π·Π° ΠΊΠΎΠΉΡΠΎ Π½ΡΠΌΠ° ΠΏΡΠ΅Π²ΠΎΠ΄ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ?
ΠΠΊΠ°Π·Π²Π° ΡΠ΅, ΡΠ΅ Π·Π°Π΄Π°ΡΠ°ΡΠ° findBestLanguage Π΅ Π΄Π° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈ ΠΎΠΏΡΠΈΠΌΠ°Π»Π½ΠΈΡ ΠΎΡ Π²ΡΠΈΡΠΊΠΈ Π½Π°Π»ΠΈΡΠ½ΠΈ ΠΏΡΠ΅Π²ΠΎΠ΄. Π ΡΠ΅Π·ΡΠ»ΡΠ°Ρ ΡΠ΅ ΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π²Π° Π΅Π·ΠΈΠΊΡΡ, ΠΊΠΎΠΉΡΠΎ Π΅ Π·Π°Π΄Π°Π΄Π΅Π½ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅.
Π‘ΡΠ°Π²Π° Π²ΡΠΏΡΠΎΡ Π·Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅ Π½Π° ΡΠ΅Π»Π΅ΡΠΎΠ½Π°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² iOS Π΅ΠΌΡΠ»Π°ΡΠΎΡΠ° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΡΠ΅Π΄Π° Π½Π° Π΅Π·ΠΈΡΠΈΡΠ΅.

ΠΠΊΠΎ ΠΈΠ·Π±ΡΠ°Π½ΠΈΡΡ Π΅Π·ΠΈΠΊ Π½Π΅ Π΅ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Π½, findBestAvailableLanguage Π²ΡΡΡΠ° undefined, ΡΠ°ΠΊΠ° ΡΠ΅ ΡΠ΅ ΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π²Π° Π΅Π·ΠΈΠΊΡΡ, ΠΊΠΎΠΉΡΠΎ Π΅ Π·Π°Π΄Π°Π΄Π΅Π½ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅.
ΠΠΎΠ½ΡΡ
react-native-localize ΡΠ°Π·ΠΏΠΎΠ»Π°Π³Π° Ρ API, ΠΊΠΎΠ΅ΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ Π³ΠΎΠ»ΡΠΌΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π΅Π·ΠΈΠΊΠΎΠ²ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ. ΠΡΠ΅Π΄ΠΈ Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ΡΠ΅ ΡΠ°Π±ΠΎΡΠ°, .
ΠΠ·Π²ΠΎΠ΄ΠΈ
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π½Π°ΠΏΡΠ°Π²Π΅Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠ΅Π·ΠΈΡΠ½ΠΎ Π±Π΅Π· ΠΎΡΠΎΠ±Π΅Π½ΠΈ ΡΡΡΠ΄Π½ΠΎΡΡΠΈ. React-native-localize Π΅ ΠΎΡΠ»ΠΈΡΠ΅Π½ Π²Π°ΡΠΈΠ°Π½Ρ, ΠΊΠΎΠΉΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΠ°Π·ΡΠΈΡΠΈΡΠ΅ ΠΊΡΡΠ³Π° Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ.
ΠΠ·Ρ ΠΎΠ΄Π½ΠΈΡΡ ΠΊΠΎΠ΄ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° .
Skillbox ΠΏΡΠ΅ΠΏΠΎΡΡΡΠ²Π°:
- ΠΠ²ΡΠ³ΠΎΠ΄ΠΈΡΠ΅Π½ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΊΡΡΡ .
- ΠΠ½Π»Π°ΠΉΠ½ ΠΊΡΡΡ .
- ΠΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π³ΠΎΠ΄ΠΈΡΠ΅Π½ ΠΊΡΡΡ .
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
