āĻ¨āĻ¤ā§āĻ¨ āĻĻā§āĻļ āĻāĻŦāĻ āĻ
āĻā§āĻāĻ˛ āĻŦāĻŋāĻāĻžāĻļāĻāĻžāĻ°ā§ āĻāĻ¨ā§āĻ¤āĻ°ā§āĻāĻžāĻ¤āĻŋāĻ āĻ¸āĻāĻ¸ā§āĻĨāĻžāĻā§āĻ˛āĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻĒāĻŖā§āĻ¯āĻā§āĻ˛āĻŋāĻ° āĻ¸ā§āĻĨāĻžāĻ¨ā§āĻ¯āĻŧāĻāĻ°āĻŖ āĻ
āĻ¤ā§āĻ¯āĻ¨ā§āĻ¤ āĻā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§āĻ°ā§āĻŖāĨ¤ āĻāĻāĻāĻāĻžāĻŦā§, āĻŽā§āĻŦāĻžāĻāĻ˛ āĻ
ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¸ā§āĻĨāĻžāĻ¨ā§āĻ¯āĻŧāĻāĻ°āĻŖ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨āĨ¤ āĻ¯āĻĻāĻŋ āĻāĻāĻāĻ¨ āĻŦāĻŋāĻāĻžāĻļāĻāĻžāĻ°ā§ āĻāĻ¨ā§āĻ¤āĻ°ā§āĻāĻžāĻ¤āĻŋāĻ āĻ¸āĻŽā§āĻĒā§āĻ°āĻ¸āĻžāĻ°āĻŖ āĻļā§āĻ°ā§ āĻāĻ°ā§, āĻ¤āĻžāĻšāĻ˛ā§ āĻ
āĻ¨ā§āĻ¯ āĻĻā§āĻļā§āĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻĻā§āĻ° āĻ¤āĻžāĻĻā§āĻ° āĻ¸ā§āĻĨāĻžāĻ¨ā§āĻ¯āĻŧ āĻāĻžāĻˇāĻžāĻ¯āĻŧ āĻāĻ¨ā§āĻāĻžāĻ°āĻĢā§āĻ¸ā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻžāĻ āĻāĻ°āĻžāĻ° āĻ¸ā§āĻ¯ā§āĻ āĻĻā§āĻāĻ¯āĻŧāĻž āĻā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§āĻ°ā§āĻŖāĨ¤ āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§, āĻāĻŽāĻ°āĻž āĻĒā§āĻ¯āĻžāĻā§āĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻāĻāĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻ¨ā§āĻāĻŋāĻ āĻ
ā§āĻ¯āĻžāĻĒ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻŦ
Skillbox āĻ¸ā§āĻĒāĻžāĻ°āĻŋāĻļ āĻāĻ°ā§: āĻļāĻŋāĻā§āĻˇāĻžāĻāĻ¤ āĻ āĻ¨āĻ˛āĻžāĻāĻ¨ āĻā§āĻ°ā§āĻ¸
"āĻĒā§āĻļāĻž āĻāĻžāĻāĻž āĻŦāĻŋāĻāĻžāĻļāĻāĻžāĻ°ā§" .
āĻāĻŽāĻ°āĻž āĻŽāĻ¨ā§ āĻāĻ°āĻŋāĻ¯āĻŧā§ āĻĻāĻŋāĻā§āĻāĻŋ: "Habr"-āĻāĻ° āĻ¸āĻāĻ˛ āĻĒāĻžāĻ āĻāĻĻā§āĻ° āĻāĻ¨ā§āĻ¯ - "Habr" āĻĒā§āĻ°āĻāĻžāĻ°āĻŽā§āĻ˛āĻ āĻā§āĻĄ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻ¯ā§āĻā§āĻ¨ā§ Skillbox āĻā§āĻ°ā§āĻ¸ā§ āĻ¨āĻĨāĻŋāĻā§āĻā§āĻ¤ āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ 10 āĻ°ā§āĻŦā§āĻ˛ āĻāĻžāĻĄāĻŧāĨ¤
āĻ¸āĻ°āĻā§āĻāĻžāĻŽ āĻāĻŦāĻ āĻĻāĻā§āĻˇāĻ¤āĻž
āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻāĻŋ āĻŦā§āĻāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻŽā§āĻ˛āĻŋāĻ āĻĒā§āĻ°āĻ¤āĻŋāĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻ¨ā§āĻāĻŋāĻ āĻĻāĻā§āĻˇāĻ¤āĻž āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨āĨ¤ āĻāĻ¯āĻŧāĻžāĻ°ā§āĻāĻŋāĻ āĻŽā§āĻļāĻŋāĻ¨ā§āĻ° āĻ¸ā§āĻāĻŋāĻāĻ¸ā§āĻ° āĻ¸āĻžāĻĨā§ āĻĒāĻ°āĻŋāĻāĻŋāĻ¤ āĻšāĻ¤ā§, āĻāĻĒāĻ¨āĻŋ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨
āĻāĻŽāĻžāĻĻā§āĻ° āĻ¸āĻĢā§āĻāĻāĻ¯āĻŧā§āĻ¯āĻžāĻ° āĻ¸āĻ°āĻā§āĻāĻžāĻŽāĻā§āĻ˛āĻŋāĻ° āĻāĻ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖāĻā§āĻ˛āĻŋāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨:
- āĻ¨ā§āĻĄ 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 āĻ¯ā§āĻ āĻāĻ°ā§āĻ¨ react-native-localize
āĻāĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻāĻ¨āĻ¸ā§āĻāĻ˛ā§āĻļāĻ¨ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻāĻ˛āĻžāĻāĻžāĻ˛ā§āĻ¨ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻ° āĻ¸āĻŽā§āĻŽā§āĻā§āĻ¨ āĻšāĻ¨,
āĻ°āĻŋāĻ ā§āĻ¯āĻžāĻā§āĻ-āĻ¨ā§āĻāĻŋāĻ-āĻ˛ā§āĻāĻžāĻ˛āĻžāĻāĻ āĻ˛āĻžāĻāĻŦā§āĻ°ā§āĻ°āĻŋ āĻĄā§āĻā§āĻ˛āĻĒāĻžāĻ°āĻā§ āĻŦāĻšā§āĻāĻžāĻˇāĻŋāĻ āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯ā§ āĻ ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ āĻĻā§āĻ¯āĻŧāĨ¤ āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻ¤āĻžāĻ° āĻāĻ°ā§āĻāĻāĻŋ āĻ˛āĻžāĻāĻŦā§āĻ°ā§āĻ°āĻŋ āĻĻāĻ°āĻāĻžāĻ° - i18nāĨ¤
āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°ā§
$ āĻ¸ā§āĻ¤āĻž āĻ¯ā§āĻ āĻāĻ°ā§āĻ¨ i18n-js
āĻ āĻŋāĻ āĻāĻā§, āĻ¯ā§āĻšā§āĻ¤ā§ i18n-js āĻā§āĻ¯āĻžāĻļāĻŋāĻ āĻŦāĻž āĻŽā§āĻŽā§āĻžāĻāĻā§āĻļāĻ¨ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°ā§ āĻ¨āĻž, āĻāĻŽāĻŋ āĻāĻ° āĻāĻ¨ā§āĻ¯ lodash.memoize āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻžāĻ° āĻĒāĻ°āĻžāĻŽāĻ°ā§āĻļ āĻĻāĻŋāĻ:
$ yarn lodash.memoize āĻ¯ā§āĻ āĻāĻ°ā§āĻ¨
āĻ āĻ¨ā§āĻŦāĻžāĻĻ āĻ¨āĻŋāĻ¯āĻŧā§ āĻāĻžāĻ āĻāĻ°āĻž
āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨āĻāĻŋ āĻ āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻāĻžāĻˇāĻžāĻ° āĻ¸āĻžāĻĨā§ āĻāĻžāĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻĒāĻ¨āĻžāĻā§ āĻĒā§āĻ°āĻĨāĻŽā§ src-āĻāĻ° āĻāĻŋāĻ¤āĻ°ā§ āĻāĻāĻāĻŋ āĻ āĻ¨ā§āĻŦāĻžāĻĻ āĻĄāĻŋāĻ°ā§āĻā§āĻāĻ°āĻŋ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§, āĻ¤āĻžāĻ°āĻĒāĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻāĻžāĻˇāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻ¤āĻŋāĻ¨āĻāĻŋ JSON āĻĢāĻžāĻāĻ˛ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤
1. āĻāĻāĻ°ā§āĻāĻŋāĻ° āĻāĻ¨ā§āĻ¯ en.json;
2. āĻĢāĻ°āĻžāĻ¸āĻŋ āĻāĻ¨ā§āĻ¯ fr.json;
3. āĻāĻ°āĻŦāĻŋ āĻāĻ¨ā§āĻ¯ ar.json.
āĻāĻ āĻĢāĻžāĻāĻ˛āĻā§āĻ˛āĻŋāĻ¤ā§ āĻā§ āĻāĻŦāĻ āĻŽāĻžāĻ¨ āĻ¸āĻš JSON āĻ āĻŦāĻā§āĻā§āĻ āĻ°āĻ¯āĻŧā§āĻā§āĨ¤ āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻāĻžāĻˇāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻā§ āĻāĻāĻ āĻšāĻŦā§āĨ¤ āĻāĻāĻŋ āĻĒāĻžāĻ ā§āĻ¯ āĻ¤āĻĨā§āĻ¯ āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻ¨ āĻāĻ°āĻ¤ā§ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ āĻĻā§āĻŦāĻžāĻ°āĻž āĻŦā§āĻ¯āĻŦāĻšā§āĻ¤ āĻšāĻ¯āĻŧāĨ¤
āĻŽāĻžāĻ¨ (āĻŽāĻžāĻ¨) āĻšāĻ˛ āĻ¸ā§āĻ āĻĒāĻžāĻ ā§āĻ¯ āĻ¯āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻā§ āĻĻā§āĻāĻžāĻ¨ā§ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨āĨ¤
āĻāĻāĻ°ā§āĻāĻŋ:
{"āĻšā§āĻ¯āĻžāĻ˛ā§": "āĻšā§āĻ¯āĻžāĻ˛ā§ āĻāĻ¯āĻŧāĻžāĻ°ā§āĻ˛ā§āĻĄ!"}
āĻĢāĻ°āĻžāĻ¸āĻŋ
{"āĻšā§āĻ¯āĻžāĻ˛ā§": "āĻ¸ā§āĻ¯āĻžāĻ˛ā§āĻ āĻ˛ā§ āĻŽāĻ¨ā§āĻĄā§!"}
ĐŅĐ°ĐąŅĐēиК
{ "āĻšā§āĻ¯āĻžāĻ˛ā§": "ØŖŲŲاŲ باŲؚاŲŲ "}
āĻāĻāĻāĻāĻžāĻŦā§ āĻ āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻāĻžāĻˇāĻž āĻ¯ā§āĻ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤
āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻā§āĻĄ
āĻāĻ āĻŽā§āĻšā§āĻ°ā§āĻ¤ā§, āĻāĻĒāĻ¨āĻžāĻā§ 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() āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻ¸ā§āĻI18nConfig() āĻāĻŦāĻ forceUpdate() āĻāĻšā§āĻŦāĻžāĻ¨ āĻāĻ°ā§āĨ¤ āĻāĻāĻŋ āĻ ā§āĻ¯āĻžāĻ¨ā§āĻĄā§āĻ°āĻ¯āĻŧā§āĻĄ āĻĄāĻŋāĻāĻžāĻāĻ¸āĻā§āĻ˛āĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ, āĻāĻžāĻ°āĻŖ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻā§āĻ˛āĻŋ āĻĻā§āĻļā§āĻ¯āĻŽāĻžāĻ¨ āĻšāĻāĻ¯āĻŧāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻĒāĻžāĻĻāĻžāĻ¨āĻāĻŋ āĻ āĻŦāĻļā§āĻ¯āĻ āĻ°ā§āĻ¨ā§āĻĄāĻžāĻ° āĻāĻ°āĻž āĻāĻāĻŋāĻ¤ā§ˇ
āĻ¤āĻžāĻ°āĻĒāĻ° āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻŽā§āĻĒā§āĻ¨ā§āĻ¨ā§āĻ āĻāĻāĻ˛āĻāĻ¨āĻŽāĻžāĻāĻ¨ā§āĻ() āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻĨā§āĻā§ āĻļā§āĻ°ā§āĻ¤āĻžāĻā§ āĻ āĻĒāĻ¸āĻžāĻ°āĻŖ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤
āĻ āĻŦāĻļā§āĻˇā§, translate() āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻŦāĻ āĻāĻ¤ā§ āĻāĻāĻāĻŋ āĻā§ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻāĻžāĻ° āĻ¯ā§āĻ āĻāĻ°ā§ āĻ°ā§āĻ¨ā§āĻĄāĻžāĻ°() āĻ āĻšā§āĻ¯āĻžāĻ˛ā§ āĻĢā§āĻ°āĻ¤ āĻĻā§āĻāĻ¯āĻŧāĻž āĻšāĻ¯āĻŧāĨ¤ āĻāĻ āĻĒāĻĻāĻā§āĻˇā§āĻĒāĻā§āĻ˛āĻŋāĻ° āĻĒāĻ°ā§, āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨āĻāĻŋ āĻā§āĻ¨ āĻāĻžāĻˇāĻž āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻ¤āĻž "āĻŦā§āĻāĻ¤ā§" āĻāĻŦāĻ āĻāĻ¤ā§ āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻā§āĻ˛āĻŋ āĻĻā§āĻāĻžāĻ¤ā§ āĻ¸āĻā§āĻˇāĻŽ āĻšāĻŦā§ā§ˇ
āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ āĻĒā§āĻ°āĻŦāĻ°ā§āĻ¤āĻ¨
āĻāĻāĻ¨ āĻ āĻ¨ā§āĻŦāĻžāĻĻ āĻāĻŋāĻāĻžāĻŦā§ āĻāĻžāĻ āĻāĻ°ā§ āĻ¤āĻž āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧāĨ¤
āĻĒā§āĻ°āĻĨāĻŽā§ āĻāĻŽāĻ°āĻž āĻāĻžāĻāĻĒ āĻāĻ°ā§ āĻ¸āĻŋāĻŽā§āĻ˛ā§āĻāĻ° āĻŦāĻž āĻāĻŽā§āĻ˛ā§āĻāĻ°ā§ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨āĻāĻŋ āĻāĻžāĻ˛āĻžāĻ
$ āĻĒā§āĻ°āĻ¤āĻŋāĻā§āĻ°āĻŋāĻ¯āĻŧāĻž-āĻ¨ā§āĻāĻŋāĻ āĻ°āĻžāĻ¨-āĻāĻāĻāĻāĻ¸
$ āĻĒā§āĻ°āĻ¤āĻŋāĻā§āĻ°āĻŋāĻ¯āĻŧāĻž-āĻ¨ā§āĻāĻŋāĻ āĻ°āĻžāĻ¨-āĻ
ā§āĻ¯āĻžāĻ¨ā§āĻĄā§āĻ°āĻ¯āĻŧā§āĻĄ
āĻāĻāĻŋ āĻāĻ āĻŽāĻ¤ āĻāĻŋāĻā§ āĻĻā§āĻāĻžāĻŦā§:
āĻāĻāĻ¨ āĻāĻĒāĻ¨āĻŋ āĻ
ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨āĻāĻŋ āĻāĻžāĻ˛ā§ āĻāĻ°ā§ āĻāĻžāĻˇāĻžāĻāĻŋāĻā§ āĻĢā§āĻ°ā§āĻā§āĻā§ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻ°āĻžāĻ° āĻā§āĻˇā§āĻāĻž āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤
āĻāĻŽāĻ°āĻž āĻāĻ°āĻŦāĻŋ āĻāĻžāĻˇāĻžāĻ° āĻ¸āĻžāĻĨā§ āĻāĻāĻ āĻāĻ°āĻŋ, āĻā§āĻ¨ āĻĒāĻžāĻ°ā§āĻĨāĻā§āĻ¯ āĻ¨ā§āĻāĨ¤
āĻāĻāĻ¨ āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻ¸āĻŦāĻāĻŋāĻā§ āĻ āĻŋāĻāĻ āĻžāĻ āĻāĻ˛āĻā§āĨ¤
āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻāĻŽāĻ¨ āĻāĻāĻāĻŋ āĻ°ā§āĻ¯āĻžāĻ¨ā§āĻĄāĻŽ āĻāĻžāĻˇāĻž āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ¨ āĻāĻ°ā§āĻ¨ āĻ¯āĻžāĻ° āĻ ā§āĻ¯āĻžāĻĒā§ āĻ āĻ¨ā§āĻŦāĻžāĻĻ āĻ¨ā§āĻ āĻ¤āĻžāĻšāĻ˛ā§ āĻā§ āĻšāĻŦā§?
āĻĻā§āĻāĻž āĻ¯āĻžāĻā§āĻā§ āĻ¯ā§ FindBestLanguage-āĻāĻ° āĻāĻžāĻ āĻšāĻ˛ āĻāĻĒāĻ˛āĻŦā§āĻ§ āĻ¸āĻāĻ˛ā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻ¸āĻ°ā§āĻŦā§āĻ¤ā§āĻ¤āĻŽ āĻ¸āĻŽā§āĻāĻžāĻŦā§āĻ¯ āĻ āĻ¨ā§āĻŦāĻžāĻĻ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°āĻžāĨ¤ āĻĢāĻ˛āĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻĄāĻŋāĻĢāĻ˛ā§āĻāĻ°ā§āĻĒā§ āĻ¸ā§āĻ āĻāĻ°āĻž āĻāĻžāĻˇāĻž āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻŋāĻ¤ āĻšāĻŦā§āĨ¤
āĻāĻāĻŋ āĻĢā§āĻ¨ āĻ¸ā§āĻāĻŋāĻāĻ¸ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§āĨ¤ āĻ¸ā§āĻ¤āĻ°āĻžāĻ, āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, iOS āĻāĻŽā§āĻ˛ā§āĻāĻ°ā§, āĻāĻĒāĻ¨āĻŋ āĻāĻžāĻˇāĻžāĻ° āĻā§āĻ°āĻŽ āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤
āĻ¯āĻĻāĻŋ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻŋāĻ¤ āĻāĻžāĻˇāĻžāĻāĻŋ āĻĒāĻāĻ¨ā§āĻĻā§āĻ° āĻāĻžāĻˇāĻž āĻ¨āĻž āĻšāĻ¯āĻŧ, āĻ¤āĻžāĻšāĻ˛ā§ FindBestAvailableLanguage āĻ
āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŋāĻ¤ āĻ°āĻŋāĻāĻžāĻ°ā§āĻ¨ āĻāĻ°ā§ āĻ¯āĻžāĻ¤ā§ āĻĄāĻŋāĻĢāĻ˛ā§āĻ āĻāĻžāĻˇāĻž āĻĻā§āĻāĻžāĻ¨ā§ āĻšāĻ¯āĻŧāĨ¤
āĻ āĻ§āĻŋāĻŦā§āĻ¤ā§āĻ¤āĻŋ
react-native-localize-āĻāĻ° āĻāĻāĻāĻŋ API āĻ°āĻ¯āĻŧā§āĻā§ āĻ¯āĻž āĻĒā§āĻ°āĻā§āĻ° āĻ¸āĻāĻā§āĻ¯āĻ āĻāĻžāĻˇāĻžāĻ° āĻāĻĒāĻžāĻĻāĻžāĻ¨āĻā§āĻ˛āĻŋāĻ¤ā§ āĻ
ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°ā§āĨ¤ āĻāĻžāĻ āĻļā§āĻ°ā§ āĻāĻ°āĻžāĻ° āĻāĻā§,
āĻ¤āĻĨā§āĻ¯āĻ
āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ āĻā§āĻ¨ā§ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻāĻžāĻĄāĻŧāĻžāĻ āĻŦāĻšā§āĻāĻžāĻˇāĻŋāĻ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§. āĻĒā§āĻ°āĻ¤āĻŋāĻā§āĻ°āĻŋāĻ¯āĻŧāĻž-āĻ¨ā§āĻāĻŋāĻ-āĻ˛ā§āĻāĻžāĻ˛āĻžāĻāĻ āĻāĻāĻāĻŋ āĻĻā§āĻ°ā§āĻĻāĻžāĻ¨ā§āĻ¤ āĻŦāĻŋāĻāĻ˛ā§āĻĒ āĻ¯āĻž āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻĒāĻ¨āĻžāĻ° āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ā§āĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻĻā§āĻ° āĻĒāĻ°āĻŋāĻ¸āĻ° āĻĒā§āĻ°āĻ¸āĻžāĻ°āĻŋāĻ¤ āĻāĻ°āĻ¤ā§ āĻĻā§āĻ¯āĻŧāĨ¤
āĻĒā§āĻ°ā§āĻā§āĻā§āĻ āĻ¸ā§āĻ°ā§āĻ¸ āĻā§āĻĄ
Skillbox āĻ¸ā§āĻĒāĻžāĻ°āĻŋāĻļ āĻāĻ°ā§:
- āĻĻā§āĻ āĻŦāĻāĻ°ā§āĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻŋāĻ āĻā§āĻ°ā§āĻ¸
"āĻāĻŽāĻŋ āĻāĻāĻāĻ¨ āĻĒā§āĻ°ā§ āĻāĻ¯āĻŧā§āĻŦ āĻĄā§āĻā§āĻ˛āĻĒāĻžāĻ°" .- āĻ āĻ¨āĻ˛āĻžāĻāĻ¨ āĻā§āĻ°ā§āĻ¸
"āĻ¸ā§āĻā§āĻ°ā§āĻ¯āĻžāĻ āĻĨā§āĻā§ C# āĻŦāĻŋāĻāĻžāĻļāĻāĻžāĻ°ā§" .- āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻŋāĻ āĻŦāĻāĻ°ā§āĻ° āĻā§āĻ°ā§āĻ¸
"0 āĻĨā§āĻā§ PRO āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻĒāĻŋāĻāĻāĻāĻĒāĻŋ āĻŦāĻŋāĻāĻžāĻļāĻāĻžāĻ°ā§" .
āĻāĻ¤ā§āĻ¸: www.habr.com