рдирд╡реАрди рджреЗрд╢ рдЖрдгрд┐ рдкреНрд░рджреЗрд╢рд╛рдВрдЪрд╛ рд╢реЛрдз рдШреЗрдгрд╛рд▒реНрдпрд╛ рдЖрдВрддрд░рд░рд╛рд╖реНрдЯреНрд░реАрдп рдХрдВрдкрдиреНрдпрд╛рдВрд╕рд╛рдареА рдЙрддреНрдкрд╛рджрди рд╕реНрдерд╛рдирд┐рдХреАрдХрд░рдг рдЦреВрдк рдорд╣рддреНрд╡рд╛рдЪреЗ рдЖрд╣реЗ. рддреНрдпрд╛рдЪрдкреНрд░рдорд╛рдгреЗ рдореЛрдмрд╛рдИрд▓ рдНрдкреНрд▓рд┐рдХреЗрд╢рдирд╕рд╛рдареА рд╕реНрдерд╛рдирд┐рдХреАрдХрд░рдг рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рд╡рд┐рдХрд╛рд╕рдХрд╛рдиреЗ рдЖрдВрддрд░рд░рд╛рд╖реНрдЯреНрд░реАрдп рд╡рд┐рд╕реНрддрд╛рд░ рд╕реБрд░реВ рдХреЗрд▓реНрдпрд╛рд╕, рджреБрд╕рд▒реНрдпрд╛ рджреЗрд╢рд╛рддреАрд▓ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдирд╛ рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдореВрд│ рднрд╛рд╖реЗрдд рдЗрдВрдЯрд░рдлреЗрд╕рд╕рд╣ рдХрд╛рдо рдХрд░рдгреНрдпрд╛рдЪреА рд╕рдВрдзреА рджреЗрдгреЗ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдЖрд╣реЗ. рдпрд╛ рд▓реЗрдЦрд╛рдд, рдЖрдореНрд╣реА рдкреЕрдХреЗрдЬ рд╡рд╛рдкрд░реВрди рд░рд┐рдЕреЕрдХреНрдЯ рдиреЗрдЯрд┐рд╡реНрд╣ рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рди рддрдпрд╛рд░ рдХрд░реВ
рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рд╢рд┐рдлрд╛рд░рд╕ рдХрд░рддреЛ: рд╢реИрдХреНрд╖рдгрд┐рдХ рдСрдирд▓рд╛рдЗрди рдЕрднреНрдпрд╛рд╕рдХреНрд░рдо
"рдкреНрд░реЛрдлреЗрд╢рди рдЬрд╛рд╡рд╛ рдбреЗрд╡реНрд╣рд▓рдкрд░" .
рдЖрдореНрд╣реА рдЖрдард╡рдг рдХрд░реВрди рджреЗрддреЛ: рд╕рд░реНрд╡ Habr рд╡рд╛рдЪрдХрд╛рдВрд╕рд╛рдареА - Habr рдкреНрд░реЛрдореЛ рдХреЛрдб рд╡рд╛рдкрд░реВрди рдХреЛрдгрддреНрдпрд╛рд╣реА рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рдХреЛрд░реНрд╕рдордзреНрдпреЗ рдирд╛рд╡рдиреЛрдВрджрдгреА рдХрд░рддрд╛рдирд╛ 10 рд░реВрдмрд▓ рд╕рд╡рд▓рдд.
рд╕рд╛рдзрдиреЗ рдЖрдгрд┐ рдХреМрд╢рд▓реНрдпреЗ
рд╣рд╛ рд▓реЗрдЦ рд╕рдордЬреВрди рдШреЗрдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣рд╛рд▓рд╛ 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 рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ рд╣реА рдкрд╣рд┐рд▓реА рдкрд╛рдпрд░реА рдЖрд╣реЗ:
$ yarn add react-native-localize
рд╕реНрдерд╛рдкрдирд╛ рдкреНрд░рдХреНрд░рд┐рдпреЗрджрд░рдореНрдпрд╛рди рд╕рдорд╕реНрдпрд╛ рдЙрджреНрднрд╡рд▓реНрдпрд╛рд╕,
рд░рд┐рдЕреЕрдХреНрдЯ-рдиреЗрдЯрд┐рд╡реНрд╣-рд▓реЛрдХрд▓рд╛рдЗрдЭ рд▓рд╛рдпрдмреНрд░рд░реА рд╡рд┐рдХрд╕рдХрд╛рд▓рд╛ рдмрд╣реБрднрд╛рд╖рд┐рдХ рд╡реИрд╢рд┐рд╖реНрдЯреНрдпрд╛рдВрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рджреЗрддреЗ. рдкрдг рддрд┐рд▓рд╛ рдЖрдгрдЦреА рдПрдХрд╛ рд▓рд╛рдпрдмреНрд░рд░реАрдЪреА рдЧрд░рдЬ рдЖрд╣реЗ - i18n.
рд╣рд╛ рд▓реЗрдЦ рд╡рд╛рдкрд░рд╛рдЪреЗ рд╡рд░реНрдгрди рдХрд░рддреЛ
$ рд╕реВрдд i18n-js рдЬреЛрдбрд╛
рдмрд░рдВ, i18n-js рдХреЕрд╢рд┐рдВрдЧ рдХрд┐рдВрд╡рд╛ рдореЗрдореЛрд▓рд╛рдпрдЭреЗрд╢рди рдкреНрд░рджрд╛рди рдХрд░рдд рдирд╕рд▓реНрдпрд╛рдореБрд│реЗ, рдореА рдпрд╛рд╕рд╛рдареА lodash.memoize рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪрд╛ рд╕рд▓реНрд▓рд╛ рджреЗрддреЛ:
$ рдпрд╛рд░реНрди lodash.memoize рдЬреЛрдбрд╛
рднрд╛рд╖рд╛рдВрддрд░рд╛рдВрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреЗ
рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЗрддрд░ рднрд╛рд╖рд╛рдВрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕ рд╕рдХреНрд╖рдо рд╣реЛрдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣рд╛рд▓рд╛ рдкреНрд░рдердо src рдордзреНрдпреЗ рдЕрдиреБрд╡рд╛рдж рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рддрдпрд╛рд░ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдирдВрддрд░ рдкреНрд░рддреНрдпреЗрдХ рднрд╛рд╖реЗрд╕рд╛рдареА рддреАрди JSON рдлрд╛рдЗрд▓реНрд╕.
1. рдЗрдВрдЧреНрд░рдЬреАрд╕рд╛рдареА en.json;
2. рдлреНрд░реЗрдВрдЪрд╕рд╛рдареА fr.json;
3. рдЕрд░рдмреА рд╕рд╛рдареА ar.json.
рдпрд╛ рдлрд╛рдпрд▓реАрдВрдордзреНрдпреЗ рдХреА рдЖрдгрд┐ рдореВрд▓реНрдпрд╛рдВрд╕рд╣ JSON рдСрдмреНрдЬреЗрдХреНрдЯ рдЕрд╕рддрд╛рдд. рдХреА рдкреНрд░рддреНрдпреЗрдХ рднрд╛рд╖реЗрд╕рд╛рдареА рд╕рдорд╛рди рдЕрд╕реЗрд▓. рддреЗ рдордЬрдХреВрд░ рдорд╛рд╣рд┐рддреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рджреНрд╡рд╛рд░реЗ рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддреЗ.
рдореВрд▓реНрдп рд╣рд╛ рдордЬрдХреВрд░ рдЖрд╣реЗ рдЬреЛ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рд▓рд╛ рджрд░реНрд╢рд╡рд┐рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.
рдЗрдВрдЧреНрд░рдЬреА рднрд╛рд╖рд╛:
{"hello": "Hello World!"}
рдлреНрд░рд╛рдиреНрд╕рд┐рд╢
{"рд╣реЕрд▓реЛ": "рд╕реЕрд▓рдЯ рд▓реЗ рдореЛрдВрдбреЗ!"}
рдНрд░рд╛рдмрд┐рдХ
{ "рд╣реЕрд▓реЛ": "╪г┘З┘Д╪з┘Л ╪и╪з┘Д╪╣╪з┘Д┘Е"}
рдЖрдкрдг рддреНрдпрд╛рдЪ рдкреНрд░рдХрд╛рд░реЗ рдЗрддрд░ рднрд╛рд╖рд╛ рдЬреЛрдбреВ рд╢рдХрддрд╛.
рдореБрдЦреНрдп рдХреЛрдб
рдпрд╛ рдЯрдкреНрдкреНрдпрд╛рд╡рд░, рддреБрдореНрд╣рд╛рд▓рд╛ 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;
};
рдмрд░рдВ, рдЖрддрд╛ рдЕреЕрдк рдХреНрд▓рд╛рд╕рдЪрд╛ рдПрдХ рдШрдЯрдХ рддрдпрд╛рд░ рдХрд░реВрдпрд╛:
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() translate() рд╡рд╛рдкрд░реВрди рдЖрдгрд┐ рддреНрдпрд╛рдд рдПрдХ рдХреА рдкреЕрд░рд╛рдореАрдЯрд░ рдЬреЛрдбреВрди рд╣реЕрд▓реЛ рдкрд░рдд рдХрд░рддреЗ. рдпрд╛ рдЪрд░рдгрд╛рдВрдирдВрддрд░, рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЛрдгрддреА рднрд╛рд╖рд╛ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рд╣реЗ "рд╕рдордЬреВрди рдШреЗрдгреНрдпрд╛рд╕" рдЖрдгрд┐ рддреНрдпрд╛рдордзреНрдпреЗ рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдгреНрдпрд╛рд╕ рд╕рдХреНрд╖рдо рдЕрд╕реЗрд▓.
рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд▓рд╛рдБрдЪ
рднрд╛рд╖рд╛рдВрддрд░ рдХрд╕реЗ рдЪрд╛рд▓рддреЗ рддреЗ рддрдкрд╛рд╕рдгреНрдпрд╛рдЪреА рд╣реАрдЪ рд╡реЗрд│ рдЖрд╣реЗ.
рдкреНрд░рдердо, рдЖрдореНрд╣реА рдЯрд╛рдЗрдк рдХрд░реВрди рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдХрд┐рдВрд╡рд╛ рдЗрдореНрдпреБрд▓реЗрдЯрд░рдордзреНрдпреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд▓рд╛рдБрдЪ рдХрд░рддреЛ
$ react-native run-ios
$ react-native run-android
рд╣реЗ рдЕрд╕реЗ рдХрд╛рд╣реАрддрд░реА рджрд┐рд╕реЗрд▓:
рдЖрддрд╛ рддреБрдореНрд╣реА рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд▓рд╛рдБрдЪ рдХрд░реВрди рднрд╛рд╖рд╛ рдлреНрд░реЗрдВрдЪрдордзреНрдпреЗ рдмрджрд▓рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реВ рд╢рдХрддрд╛.
рдЖрдореНрд╣реА рдЕрд░рдмреА рдмрд░реЛрдмрд░рдЪ рдХрд░рддреЛ, рддреНрдпрд╛рдд рдХрд╛рд╣реА рдлрд░рдХ рдирд╛рд╣реА.
рдЕрдЬреВрди рддрд░реА рдЫрд╛рди рдЖрд╣реЗ.
рдкрд░рдВрддреБ рдЖрдкрдг рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рднрд╛рд╖рд╛ рдирд┐рд╡рдбрд▓реНрдпрд╛рд╕ рдХрд╛рдп рд╣реЛрдИрд▓ рдЬреНрдпрд╛рд╕рд╛рдареА рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рдд рдХреЛрдгрддреЗрд╣реА рднрд╛рд╖рд╛рдВрддрд░ рдирд╛рд╣реА?
рдЕрд╕реЗ рджрд┐рд╕реВрди рдЖрд▓реЗ рдХреА FindBestLanguage рдЪреЗ рдХрд╛рд░реНрдп рд╕рд░реНрд╡ рдЙрдкрд▓рдмреНрдз рднрд╛рд╖рд╛рдВрдордзреВрди рдЗрд╖реНрдЯрддрдо рднрд╛рд╖рд╛рдВрддрд░ рдкреНрд░рджрд╛рди рдХрд░рдгреЗ рдЖрд╣реЗ. рдкрд░рд┐рдгрд╛рдореА, рдбреАрдлреЙрд▓реНрдЯ рднрд╛рд╖рд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреЗрд▓реА рдЬрд╛рдИрд▓.
рдЖрдореНрд╣реА рдлреЛрди рд╕реЗрдЯрд┐рдВрдЧреНрдЬрдмрджреНрджрд▓ рдмреЛрд▓рдд рдЖрд╣реЛрдд. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, iOS рдПрдореБрд▓реЗрдЯрд░рдордзреНрдпреЗ рдЖрдкрдг рднрд╛рд╖рд╛рдВрдЪрд╛ рдХреНрд░рдо рдкрд╛рд╣реВ рд╢рдХрддрд╛.
рдирд┐рд╡рдбрд▓реЗрд▓реА рднрд╛рд╖рд╛ рдкрд╕рдВрддреАрдЪреА рднрд╛рд╖рд╛ рдирд╕рд▓реНрдпрд╛рд╕, FindBestAvailableLanguage рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдкрд░рдд рдпреЗрддреЗ рдЬреЗрдгреЗрдХрд░реВрди рдбреАрдлреЙрд▓реНрдЯ рднрд╛рд╖рд╛ рджрд░реНрд╢рд╡рд┐рд▓реА рдЬрд╛рдИрд▓.
рдмреЛрдирд╕
react-native-localize рдордзреНрдпреЗ рдПрдХ API рдЖрд╣реЗ рдЬреЗ рдореЛрдареНрдпрд╛ рд╕рдВрдЦреНрдпреЗрдиреЗ рднрд╛рд╖рд╛ рдШрдЯрдХрд╛рдВрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдкреНрд░рджрд╛рди рдХрд░рддреЗ. рдЖрдкрдг рдХрд╛рдо рд╕реБрд░реВ рдХрд░рдгреНрдпрд╛рдкреВрд░реНрд╡реА,
рдирд┐рд╖реНрдХрд░реНрд╖
рдХреЛрдгрддреНрдпрд╛рд╣реА рд╕рдорд╕реНрдпрд╛рдВрд╢рд┐рд╡рд╛рдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдмрд╣реБрднрд╛рд╖рд┐рдХ рдХреЗрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ. React-native-localize рд╣рд╛ рдПрдХ рдЙрддреНрддрдо рдкрд░реНрдпрд╛рдп рдЖрд╣реЗ рдЬреЛ рддреБрдореНрд╣рд╛рд▓рд╛ рддреБрдордЪреНрдпрд╛ рдЕреЕрдкрдЪрд╛ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдЖрдзрд╛рд░ рд╡рд╛рдврд╡рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЛ.
рдкреНрд░рдХрд▓реНрдк рд╕реНрддреНрд░реЛрдд рдХреЛрдб
рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рд╢рд┐рдлрд╛рд░рд╕ рдХрд░рддреЛ:
- рджреЛрди рд╡рд░реНрд╖рд╛рдВрдЪрд╛ рдкреНрд░реЕрдХреНрдЯрд┐рдХрд▓ рдХреЛрд░реНрд╕
"рдореА рдкреНрд░реЛ рд╡реЗрдм рдбреЗрд╡реНрд╣рд▓рдкрд░ рдЖрд╣реЗ" .- рдСрдирд▓рд╛рдИрди рдХреЛрд░реНрд╕
"рд╕реНрдХреНрд░реЕрдЪрдордзреВрди C# рд╡рд┐рдХрд╕рдХ" .- рдПрдХ рд╡рд░реНрд╖рд╛рдЪрд╛ рдкреНрд░реЕрдХреНрдЯрд┐рдХрд▓ рдХреЛрд░реНрд╕
"PHP рд╡рд┐рдХрд╕рдХ 0 рддреЗ PRO" .
рд╕реНрддреНрд░реЛрдд: www.habr.com