
ΠΠΎΠΊΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠ° Π΅ ΠΈΠ·ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ Π²Π°ΠΆΠ½Π° Π·Π° ΠΌΠ΅ΠΆΠ΄ΡΠ½Π°ΡΠΎΠ΄Π½ΠΈ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, ΠΊΠΎΠΈΡΠΎ Π½Π°Π²Π»ΠΈΠ·Π°Ρ Π² Π½ΠΎΠ²ΠΈ ΡΡΡΠ°Π½ΠΈ ΠΈ ΡΠ΅Π³ΠΈΠΎΠ½ΠΈ. ΠΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° ΡΠΎΠ²Π°, Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°ΡΠΈΡΡΠ° Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠ° ΠΈ Π·Π° ΠΌΠΎΠ±ΠΈΠ»Π½ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠΎΠ³Π°ΡΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡΡ Π·Π°ΠΏΠΎΡΠ½Π΅ ΠΌΠ΅ΠΆΠ΄ΡΠ½Π°ΡΠΎΠ΄Π½Π° Π΅ΠΊΡΠΏΠ°Π½Π·ΠΈΡ, Π΅ Π²Π°ΠΆΠ½ΠΎ Π΄Π° ΡΠ΅ Π΄Π°Π΄Π΅ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅ ΠΎΡ Π΄ΡΡΠ³Π° ΡΡΡΠ°Π½Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π΄Π° ΡΠ°Π±ΠΎΡΡΡ Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π½Π° ΡΠΎΠ΄Π½ΠΈΡ ΡΠΈ Π΅Π·ΠΈΠΊ. Π ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ ΡΠ΅ ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° 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 ΠΈ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ Π² Π½Π΅Π³ΠΎ ΠΈΠΌΠΏΠΎΡΡ:
ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠΉΡΠ΅ React ΠΈΠ· "react";
ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠΉΡΠ΅ * ΠΊΠ°ΠΊ RNLocalize ΠΈΠ· "react-native-localize";
ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠΉΡΠ΅ i18n ΠΈΠ· "i18n-js";
ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠΉΡΠ΅ memoize ΠΈΠ· "lodash.memoize"; // ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π΄Π»Ρ ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ/memoize Π΄Π»Ρ Π»ΡΡΡΠ΅ΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ
ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠΉΡΠ΅ {
I18nManager,
SafeAreaView,
ScrollView,
StyleSheet,
Text,
View
} ΠΈΠ· "react-native";Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° Π΄ΠΎΠ±Π°Π²ΡΠΌΠ΅ ΠΏΠΎΠΌΠΎΡΠ½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΡΠ° ΠΏΠΎΠ»Π΅Π·Π½ΠΈ ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ.
const translationGetters = {
// ΠΌΡΡΠ·Π΅Π»ΠΈΠ²ΠΈ ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡ (metro bundler Π½Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ½ΠΈ Π»ΠΈΠ½ΠΊΠΎΠ²Π΅)
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:
Π΅ΠΊΡΠΏΠΎΡΡΠΈΡΠ°ΠΉΡΠ΅ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΠΊΠ»Π°Ρ App extends React.Component {
ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ(ΠΏΡΠΎΠΏΡΠΈ) {
ΡΡΠΏΠ΅ΡΠΊΠ»Π°Ρ(ΠΏΡΠΎΠΏΡΠΈ);
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() ΠΈ Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΊΠ»ΡΡ. Π‘Π»Π΅Π΄ ΡΠ΅Π·ΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° "ΡΠ°Π·Π±ΠΈΡΠ°", ΠΊΠΎΠΉ Π΅Π·ΠΈΠΊ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ ΠΈ Π΄Π° ΠΏΠΎΠΊΠ°Π·Π²Π° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡΡΠ° ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° Π½Π΅Π³ΠΎ.
Π‘ΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ
Π‘Π΅Π³Π° Π΅ Π²ΡΠ΅ΠΌΠ΅ Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠΈ ΠΏΡΠ΅Π²ΠΎΠ΄ΡΡ.
ΠΡΡΠ²ΠΎ ΡΡΠ°ΡΡΠΈΡΠ°ΠΉΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π² ΡΠΈΠΌΡΠ»Π°ΡΠΎΡΠ° ΠΈΠ»ΠΈ Π΅ΠΌΡΠ»Π°ΡΠΎΡΠ°, ΠΊΠ°ΡΠΎ Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅
$ react-native run-ios
$ react-native run-android
Π’ΠΎΠ²Π° ΡΠ΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΏΠΎ ΡΠ»Π΅Π΄Π½ΠΈΡ Π½Π°ΡΠΈΠ½:

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

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

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