ΠΠΎΠΊΠ°Π»ΠΈΠ·Π°ΡΠΈΡΠ°ΡΠ° Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅ Π΅ ΠΌΠ½ΠΎΠ³Ρ Π²Π°ΠΆΠ½Π° Π·Π° ΠΌΠ΅ΡΡΠ½Π°ΡΠΎΠ΄Π½ΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΠΊΠΎΠΈ ΠΈΡΡΡΠ°ΠΆΡΠ²Π°Π°Ρ Π½ΠΎΠ²ΠΈ Π·Π΅ΠΌΡΠΈ ΠΈ ΡΠ΅Π³ΠΈΠΎΠ½ΠΈ. Π‘Π»ΠΈΡΠ½ΠΎ Π½Π° ΡΠΎΠ°, ΠΏΠΎΡΡΠ΅Π±Π½Π° Π΅ Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°ΡΠΈΡΠ° Π·Π° ΠΌΠΎΠ±ΠΈΠ»Π½ΠΈΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ. ΠΠΊΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠΎΡ Π·Π°ΠΏΠΎΡΠ½Π΅ ΠΌΠ΅ΡΡΠ½Π°ΡΠΎΠ΄Π½ΠΎ ΠΏΡΠΎΡΠΈΡΡΠ²Π°ΡΠ΅, Π²Π°ΠΆΠ½ΠΎ Π΅ Π΄Π° ΠΈΠΌ ΡΠ΅ Π΄Π°Π΄Π΅ ΠΌΠΎΠΆΠ½ΠΎΡΡ Π½Π° ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΈΡΠ΅ ΠΎΠ΄ Π΄ΡΡΠ³Π° Π·Π΅ΠΌΡΠ° Π΄Π° ΡΠ°Π±ΠΎΡΠ°Ρ ΡΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡΠΎΡ Π½Π° Π½ΠΈΠ²Π½ΠΈΠΎΡ ΠΌΠ°ΡΡΠΈΠ½ ΡΠ°Π·ΠΈΠΊ. ΠΠΎ ΠΎΠ²Π°Π° ΡΡΠ°ΡΠΈΡΠ°, ΡΠ΅ ΡΠΎΠ·Π΄Π°Π΄Π΅ΠΌΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° React Native ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Π³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠΎΡ
Skillbox ΠΏΡΠ΅ΠΏΠΎΡΠ°ΡΡΠ²Π°: ΠΠ΄ΡΠΊΠ°ΡΠΈΠ²Π΅Π½ ΠΎΠ½Π»Π°ΡΠ½ ΠΊΡΡΡ
βΠΡΠΎΡΠ΅ΡΠΈΡΠ° Java ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅Ρβ .
ΠΠΎΡΡΠ΅ΡΡΠ²Π°ΠΌΠ΅: Π·Π° ΡΠΈΡΠ΅ ΡΠΈΡΠ°ΡΠ΅Π»ΠΈ Π½Π° βΠ₯Π°Π±Ρβ - ΠΏΠΎΠΏΡΡΡ ΠΎΠ΄ 10 ΡΡΠ±Π»ΠΈ ΠΏΡΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΠ΅ Π½Π° ΠΊΠΎΡ Π±ΠΈΠ»ΠΎ ΠΊΡΡΡ Skillbox ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Π³ΠΎ ΠΏΡΠΎΠΌΠΎΡΠΈΠ²Π½ΠΈΠΎΡ ΠΊΠΎΠ΄ βΠ₯Π°Π±Ρβ.
ΠΠ»Π°ΡΠΊΠΈ ΠΈ Π²Π΅ΡΡΠΈΠ½ΠΈ
ΠΠ° Π΄Π° ΡΠ° ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ ΠΎΠ²Π°Π° ΡΡΠ°ΡΠΈΡΠ°, ΠΏΠΎΡΡΠ΅Π±Π½ΠΈ Π²ΠΈ ΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΈ Π²Π΅ΡΡΠΈΠ½ΠΈ Π·Π° ΡΠ°Π±ΠΎΡΠ° ΡΠΎ React Native. ΠΠ° Π΄Π° ΡΠ΅ Π·Π°ΠΏΠΎΠ·Π½Π°Π΅ΡΠ΅ ΡΠΎ ΠΏΠΎΡΡΠ°Π²ΠΊΠΈΡΠ΅ Π½Π° ΡΠ°Π±ΠΎΡΠ½Π°ΡΠ° ΠΌΠ°ΡΠΈΠ½Π°, ΠΌΠΎΠΆΠ΅ΡΠ΅
ΠΠ΅ Π½ΠΈ ΡΡΠ΅Π±Π°Π°Ρ ΠΎΠ²ΠΈΠ΅ Π²Π΅ΡΠ·ΠΈΠΈ Π½Π° ΡΠΎΡΡΠ²Π΅ΡΡΠΊΠΈ Π°Π»Π°ΡΠΊΠΈ:
- ΠΠ°Π·ΠΎΠ» v10.15.0
- npm 6.4.1
- ΠΏΡΠ΅Π΄ΠΈΠ²ΠΎ 1.16.0
- ΡΠ΅Π°Π³ΠΈΡΠ°Π°Ρ-ΠΌΠ°ΡΡΠΈΠ½ 0.59.9
- ΡΠ΅Π°Π³ΠΈΡΠ°-ΠΌΠ°ΡΡΠΈΠ½-Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΈΡΠ°Ρ 1.1.3
- i18n-js 3.3.0
ΠΠ° Π·Π°ΠΏΠΎΡΠ½Π΅ΠΌΠ΅
ΠΠ΅ ΡΠΎΠ·Π΄Π°Π΄Π΅ΠΌΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° ΠΊΠΎΡΠ° ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΠΆΡΠ²Π° Π°Π½Π³Π»ΠΈΡΠΊΠΈ, ΡΡΠ°Π½ΡΡΡΠΊΠΈ ΠΈ Π°ΡΠ°ΠΏΡΠΊΠΈ. ΠΡΠ²ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΠΌΠ΅ Π½ΠΎΠ² ΠΏΡΠΎΠ΅ΠΊΡ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ react-native-cli. ΠΠ° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΠΎΠ²Π°, ΡΡΠ΅Π±Π° Π΄Π° Π³ΠΎ Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ ΠΎΠ²Π° Π²ΠΎ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»ΠΎΡ:
$ react-native init multiLanguage
$ cd ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠ°Π·ΠΈΡΠ½ΠΈ
ΠΠΎΠ΄Π°Π²Π°ΡΠ΅ Π½Π° ΠΏΠΎΡΡΠ΅Π±Π½ΠΈΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ
ΠΡΠ²ΠΈΠΎΡ ΡΠ΅ΠΊΠΎΡ Π΅ Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ react-native-localize ΡΠΎ Π²Π½Π΅ΡΡΠ²Π°ΡΠ΅ Π½Π° ΡΠ»Π΅Π΄Π½ΠΎΠ²ΠΎ:
$ ΠΏΡΠ΅Π΄ΠΈΠ²ΠΎ Π΄ΠΎΠ΄Π°Π΄Π΅ΡΠ΅ ΡΠ΅Π°Π³ΠΈΡΠ°-ΠΌΠ°ΡΡΠΈΠ½-Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΈΡΠ°Ρ
ΠΠΊΠΎ ΡΠ΅ ΠΏΠΎΡΠ°Π²Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Π·Π° Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡ Π½Π° ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡΠ°,
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° react-native-localize ΠΌΡ Π΄Π°Π²Π° Π½Π° ΡΠ°Π·Π²ΠΈΠ²Π°ΡΠΎΡ ΠΏΡΠΈΡΡΠ°ΠΏ Π΄ΠΎ ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠ°Π·ΠΈΡΠ½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠΎ, Ρ ΡΡΠ΅Π±Π° ΡΡΡΠ΅ Π΅Π΄Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° - i18n.
ΠΠ²Π°Π° ΡΡΠ°ΡΠΈΡΠ° ΡΠ° ΠΎΠΏΠΈΡΡΠ²Π° ΡΠΏΠΎΡΡΠ΅Π±Π°ΡΠ°
$ ΠΏΡΠ΅Π΄ΠΈΠ²ΠΎ Π΄ΠΎΠ΄Π°Π΄Π΅ΡΠ΅ i18n-js
ΠΠ°, Π±ΠΈΠ΄Π΅ΡΡΠΈ i18n-js Π½Π΅ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡΠ²Π° ΠΊΠ΅ΡΠΈΡΠ°ΡΠ΅ ΠΈΠ»ΠΈ ΠΌΠ΅ΠΌΠΎΠΈΠ·Π°ΡΠΈΡΠ°, ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΠΌ Π΄Π° Π³ΠΎ ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ lodash.memoize Π·Π° ΠΎΠ²Π°:
$ ΠΏΡΠ΅Π΄ΠΈΠ²ΠΎ Π΄ΠΎΠ΄Π°Π΄Π΅ΡΠ΅ lodash.memoize
Π Π°Π±ΠΎΡΠ° ΡΠΎ ΠΏΡΠ΅Π²ΠΎΠ΄ΠΈ
ΠΠ° Π΄Π° ΠΌΠΎΠΆΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° Π΄Π° ΡΠ°Π±ΠΎΡΠΈ ΡΠΎ Π΄ΡΡΠ³ΠΈ ΡΠ°Π·ΠΈΡΠΈ, ΠΏΡΠ²ΠΎ ΡΡΠ΅Π±Π° Π΄Π° ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌ Π·Π° ΠΏΡΠ΅Π²ΠΎΠ΄ΠΈ Π²ΠΎ src, Π° ΠΏΠΎΡΠΎΠ° ΡΡΠΈ JSON-Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ Π·Π° ΡΠ΅ΠΊΠΎΡ ΡΠ°Π·ΠΈΠΊ.
1. en.json Π·Π° Π°Π½Π³Π»ΠΈΡΠΊΠΈ ΡΠ°Π·ΠΈΠΊ;
2. fr.json Π·Π° ΡΡΠ°Π½ΡΡΡΠΊΠΈ;
3. Π°Ρ.ΡΡΠΎΠ½ Π·Π° Π°ΡΠ°ΠΏΡΠΊΠΈ.
ΠΠ²ΠΈΠ΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ ΡΠΎΠ΄ΡΠΆΠ°Ρ JSON ΠΎΠ±ΡΠ΅ΠΊΡΠΈ ΡΠΎ ΠΊΠ»ΡΡΠ΅Π²ΠΈ ΠΈ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ. ΠΠ»ΡΡΠΎΡ ΡΠ΅ Π±ΠΈΠ΄Π΅ ΠΈΡΡ Π·Π° ΡΠ΅ΠΊΠΎΡ ΡΠ°Π·ΠΈΠΊ. Π‘Π΅ ΠΊΠΎΡΠΈΡΡΠΈ ΠΎΠ΄ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° Π·Π° ΠΏΡΠΈΠΊΠ°ΠΆΡΠ²Π°ΡΠ΅ Π½Π° ΡΠ΅ΠΊΡΡΡΠ°Π»Π½ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ.
ΠΡΠ΅Π΄Π½ΠΎΡΡ Π΅ ΡΠ΅ΠΊΡΡΠΎΡ ΡΡΠΎ ΡΡΠ΅Π±Π° Π΄Π° ΠΌΡ ΡΠ΅ ΠΏΡΠΈΠΊΠ°ΠΆΠ΅ Π½Π° ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊΠΎΡ.
ΠΠ½Π³Π»ΠΈΡΠΊΠΈ:
{"Π·Π΄ΡΠ°Π²ΠΎ": "ΠΠ΄ΡΠ°Π²ΠΎ ΡΠ²Π΅Ρ!"}
Π€ΡΠ°Π½ΡΡΠ·ΡΠΊΠΈΠΉ
{"Π·Π΄ΡΠ°Π²ΠΎ": "Salut le Monde!"}
ΠΡΠ°Π±ΡΠΊΠΈΠΉ
{ "Π·Π΄ΡΠ°Π²ΠΎ": "Ψ£ΩΩΨ§Ω Ψ¨Ψ§ΩΨΉΨ§ΩΩ "}
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π΄ΠΎΠ΄Π°Π²Π°ΡΠ΅ Π΄ΡΡΠ³ΠΈ ΡΠ°Π·ΠΈΡΠΈ Π½Π° ΠΈΡΡ Π½Π°ΡΠΈΠ½.
ΠΠ»Π°Π²Π΅Π½ ΠΊΠΎΠ΄
ΠΠΎ ΠΎΠ²ΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ, ΡΡΠ΅Π±Π° Π΄Π° ΡΠ° ΠΎΡΠ²ΠΎΡΠΈΡΠ΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° App.js ΠΈ Π΄Π° Π΄ΠΎΠ΄Π°Π΄Π΅ΡΠ΅ ΡΠ²ΠΎΠ· Π²ΠΎ Π½Π΅Π°:
import React from "react";
import * as RNLocalize from "react-native-localize";
import i18n from "i18n-js";
import memoize from "lodash.memoize"; // Use for caching/memoize for better performance
import {
I18nManager,
SafeAreaView,
ScrollView,
StyleSheet,
Text,
View
} from "react-native";
ΠΠΎ ΠΎΠ²Π°, ΡΠ΅ Π΄ΠΎΠ΄Π°Π²Π°Π°Ρ ΠΏΠΎΠΌΠΎΡΠ½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠΈ ΠΊΠΎΠΈ ΡΠ΅ Π±ΠΈΠ΄Π°Ρ ΠΊΠΎΡΠΈΡΠ½ΠΈ ΠΏΠΎΠ΄ΠΎΡΠ½Π°.
const translationGetters = {
// lazy requires (metro bundler does not support 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 if no available language fits
const fallback = { languageTag: "en", isRTL: false };
const { languageTag, isRTL } =
RNLocalize.findBestAvailableLanguage(Object.keys(translationGetters)) ||
fallback;
// clear translation cache
translate.cache.clear();
// update layout direction
I18nManager.forceRTL(isRTL);
// set i18n-js config
i18n.translations = { [languageTag]: translationGetters[languageTag]() };
i18n.locale = languageTag;
};
ΠΠ°, ΡΠ΅Π³Π° Π°ΡΠ΄Π΅ Π΄Π° ΡΠΎΠ·Π΄Π°Π΄Π΅ΠΌΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° ΠΎΠ΄ ΠΊΠ»Π°ΡΠ°ΡΠ° App:
export default class App extends React.Component {
constructor(props) {
super(props);
setI18nConfig(); // set initial config
}
componentDidMount() {
RNLocalize.addEventListener("change", this.handleLocalizationChange);
}
componentWillUnmount() {
RNLocalize.removeEventListener("change", this.handleLocalizationChange);
}
handleLocalizationChange = () => {
setI18nConfig();
this.forceUpdate();
};
render() {
return (
<SafeAreaView style={styles.safeArea}>
<Text style={styles.value}>{translate("hello")}</Text>
</SafeAreaView>
);
}
}
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 Π²ΡΠ°ΡΠ° Π½Π΅Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ ΡΠ°ΠΊΠ° ΡΡΠΎ ΡΠ΅ ΡΠ΅ ΠΏΡΠΈΠΊΠ°ΠΆΠ΅ ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΈΠΎΡ ΡΠ°Π·ΠΈΠΊ.
Π±ΠΎΠ½ΡΡ
react-native-localize ΠΈΠΌΠ° API ΡΡΠΎ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° ΠΏΡΠΈΡΡΠ°ΠΏ Π΄ΠΎ Π³ΠΎΠ»Π΅ΠΌ Π±ΡΠΎΡ ΡΠ°Π·ΠΈΡΠ½ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ. ΠΡΠ΅Π΄ Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ΡΠ΅ ΡΠΎ ΡΠ°Π±ΠΎΡΠ°,
ΠΠ°ΠΎΠ΄ΠΈ
ΠΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠ°Π·ΠΈΡΠ½Π° Π±Π΅Π· Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ. React-native-localize Π΅ ΠΎΠ΄Π»ΠΈΡΠ½Π° ΠΎΠΏΡΠΈΡΠ° ΠΊΠΎΡΠ° Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° Π΄Π° ΡΠ° ΠΏΡΠΎΡΠΈΡΠΈΡΠ΅ ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΊΠ°ΡΠ° Π±Π°Π·Π° Π½Π° Π²Π°ΡΠ°ΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°.
ΠΠ·Π²ΠΎΡΠ½ΠΈΠΎΡ ΠΊΠΎΠ΄ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ
Skillbox ΠΏΡΠ΅ΠΏΠΎΡΠ°ΡΡΠ²Π°:
- ΠΠ²Π΅Π³ΠΎΠ΄ΠΈΡΠ΅Π½ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅Π½ ΠΊΡΡΡ
βΠΠ°Ρ ΡΡΠΌ PRO Π²Π΅Π±-ΡΠ°Π·Π²ΠΈΠ²Π°Ρβ .- ΠΠ½Π»Π°ΡΠ½ ΠΊΡΡΡ
βC# ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅Ρ ΠΎΠ΄ Π½ΡΠ»Π°β .- ΠΡΠ°ΠΊΡΠΈΡΠ΅Π½ Π³ΠΎΠ΄ΠΈΡΠ΅Π½ ΠΊΡΡΡ
βΠΡΠΎΠ³ΡΠ°ΠΌΠ΅Ρ Π½Π° PHP ΠΎΠ΄ 0 Π΄ΠΎ PROβ .
ΠΠ·Π²ΠΎΡ: www.habr.com