เชฐเซ€เชเช•เซเชŸ เชจเซ‡เชŸเซ€เชตเชฎเชพเช‚ เชฌเชนเซเชญเชพเชทเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฒเช–เชตเซ€

เชฐเซ€เชเช•เซเชŸ เชจเซ‡เชŸเซ€เชตเชฎเชพเช‚ เชฌเชนเซเชญเชพเชทเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฒเช–เชตเซ€

เชจเชตเชพ เชฆเซ‡เชถเซ‹ เช…เชจเซ‡ เชชเซเชฐเชฆเซ‡เชถเซ‹เชจเซ€ เชถเซ‹เชงเช–เซ‹เชณ เช•เชฐเชคเซ€ เช†เช‚เชคเชฐเชฐเชพเชทเซเชŸเซเชฐเซ€เชฏ เช•เช‚เชชเชจเซ€เช“ เชฎเชพเชŸเซ‡ เช‰เชคเซเชชเชพเชฆเชจ เชธเซเชฅเชพเชจเชฟเช•เซ€เช•เชฐเชฃ เช–เซ‚เชฌ เชœ เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เช›เซ‡. เชคเซ‡เชตเซ€ เชœ เชฐเซ€เชคเซ‡, เชฎเซ‹เชฌเชพเช‡เชฒ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฎเชพเชŸเซ‡ เชธเซเชฅเชพเชจเชฟเช•เซ€เช•เชฐเชฃ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡. เชœเซ‹ เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพ เช†เช‚เชคเชฐเชฐเชพเชทเซเชŸเซเชฐเซ€เชฏ เชตเชฟเชธเซเชคเชฐเชฃ เชถเชฐเซ‚ เช•เชฐเซ‡ เช›เซ‡, เชคเซ‹ เชฌเซ€เชœเชพ เชฆเซ‡เชถเชจเชพ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“เชจเซ‡ เชคเซ‡เชฎเชจเซ€ เชฎเซ‚เชณ เชญเชพเชทเชพเชฎเชพเช‚ เช‡เชจเซเชŸเชฐเชซเซ‡เชธ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพเชจเซ€ เชคเช• เช†เชชเชตเซ€ เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เช›เซ‡. เช† เชฒเซ‡เช–เชฎเชพเช‚, เช…เชฎเซ‡ เชชเซ‡เช•เซ‡เชœเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชฐเซ€เชเช•เซเชŸ เชจเซ‡เชŸเชฟเชต เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฌเชจเชพเชตเซ€เชถเซเช‚ เชชเซเชฐเชคเชฟเช•เซเชฐเชฟเชฏเชพ-เชฎเซ‚เชณ-เชธเซเชฅเชพเชจเชฟเช•เซ€เช•เชฐเชฃ.

เชธเซเช•เชฟเชฒเชฌเซ‹เช•เซเชธ เชญเชฒเชพเชฎเชฃ เช•เชฐเซ‡ เช›เซ‡: เชถเซˆเช•เซเชทเชฃเชฟเช• เช“เชจเชฒเชพเชˆเชจ เช•เซ‹เชฐเซเชธ "เชชเซเชฐเซ‹เชซเซ‡เชถเชจ เชœเชพเชตเชพ เชกเซ‡เชตเชฒเชชเชฐ".
เช…เชฎเซ‡ เชฏเชพเชฆ เช•เชฐเชพเชตเซ€เช เช›เซ€เช: Habrเชจเชพ เชคเชฎเชพเชฎ เชตเชพเชšเช•เซ‹ เชฎเชพเชŸเซ‡ - Habr เชชเซเชฐเซ‹เชฎเซ‹ เช•เซ‹เชกเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช•เซ‹เชˆเชชเชฃ เชธเซเช•เชฟเชฒเชฌเซ‹เช•เซเชธ เช•เซ‹เชฐเซเชธเชฎเชพเช‚ เชจเซ‹เช‚เชงเชฃเซ€ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ 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 เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชจเชตเซ‹ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฌเชจเชพเชตเซ€เช เช›เซ€เช. เช† เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเชพเชฐเซ‡ เชŸเชฐเซเชฎเชฟเชจเชฒเชฎเชพเช‚ เช† เชฒเช–เชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡:

$ เชชเซเชฐเชคเชฟเช•เซเชฐเชฟเชฏเชพ-เชฎเซ‚เชณ เชถเชฐเซ‚เช†เชค เชฌเชนเซเชญเชพเชทเซ€
$ cd เชฌเชนเซเชญเชพเชทเซ€

เชœเชฐเซ‚เชฐเซ€ เชชเซเชธเซเชคเช•เชพเชฒเชฏเซ‹ เช‰เชฎเซ‡เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช

เชชเซเชฐเชฅเชฎ เชชเช—เชฒเซเช‚ เช เชจเซ€เชšเซ‡ เชฒเช–เซ€เชจเซ‡ react-native-localize เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเชตเชพเชจเซเช‚ เช›เซ‡:
$ เชฏเชพเชฐเซเชจ เชฐเซ€เชเช•เซเชŸ-เชจเซ‡เชŸเชฟเชต-เชฒเซ‹เช•เชฒเชพเช‡เช เช‰เชฎเซ‡เชฐเซ‹

เชœเซ‹ เช‡เชจเซเชธเซเชŸเซ‹เชฒเซ‡เชถเชจ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชฆเชฐเชฎเชฟเชฏเชพเชจ เชธเชฎเชธเซเชฏเชพเช“ เช†เชตเซ‡ เช›เซ‡, เชคเซ‡ เช‡เชจเซเชธเซเชŸเซ‹เชฒเซ‡เชถเชจ เชฎเซ‡เชจเซเชฏเซเช…เชฒ เชตเชพเช‚เชšเชตเชพ เชฏเซ‹เช—เซเชฏ เช›เซ‡.

เชฐเชฟเชเช•เซเชŸ-เชจเซ‡เชŸเชฟเชต-เชฒเซ‹เช•เชฒเชพเช‡เช เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€ เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพเชจเซ‡ เชฌเชนเซเชญเชพเชทเซ€ เชธเซเชตเชฟเชงเชพเช“เชจเซ€ เชเช•เซเชธเซ‡เชธ เช†เชชเซ‡ เช›เซ‡. เชชเชฐเช‚เชคเซ เชคเซ‡เชฃเซ€เชจเซ‡ เชตเชงเซ เชเช• เชชเซเชธเซเชคเช•เชพเชฒเชฏเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ - i18n.

เช† เชฒเซ‡เช– เช‰เชชเชฏเซ‹เช—เชจเซเช‚ เชตเชฐเซเชฃเชจ เช•เชฐเซ‡ เช›เซ‡ I18n.js เชœเชพเชตเชพเชธเซเช•เซเชฐเชฟเชชเซเชŸเชฎเชพเช‚ เช…เชจเซเชตเชพเชฆ เชชเซเชฐเชฆเชพเชจ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡.

$เชฏเชพเชฐเซเชจ i18n-js เช‰เชฎเซ‡เชฐเซ‹

เช เซ€เช• เช›เซ‡, เช•เชพเชฐเชฃ เช•เซ‡ i18n-js เช•เซ‡เชถเซ€เช‚เช— เช…เชฅเชตเชพ เชฎเซ‡เชฎเซ‹เชˆเชเซ‡เชถเชจ เชชเซเชฐเชฆเชพเชจ เช•เชฐเชคเซเช‚ เชจเชฅเซ€, เชนเซเช‚ เช† เชฎเชพเชŸเซ‡ lodash.memoize เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซเช‚ เชธเซ‚เชšเชจ เช•เชฐเซเช‚ เช›เซเช‚:

$ เชฏเชพเชฐเซเชจ เช‰เชฎเซ‡เชฐเซ‹ 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() เชชเชฆเซเชงเชคเชฟ setI18nConfig() เช…เชจเซ‡ forceUpdate() เชจเซ‡ เชธเช•เซเชฐเชฟเชฏ เช•เชฐเซ‡ เช›เซ‡. Android เช‰เชชเช•เชฐเชฃเซ‹ เชฎเชพเชŸเซ‡ เช† เชœเชฐเซ‚เชฐเซ€ เช›เซ‡ เช•เชพเชฐเชฃ เช•เซ‡ เชซเซ‡เชฐเชซเชพเชฐเซ‹ เชงเซเชฏเชพเชจเชชเชพเชคเซเชฐ เชฌเชจเซ‡ เชคเซ‡ เชฎเชพเชŸเซ‡ เช˜เชŸเช• เชฐเซ‡เชจเซเชกเชฐ เชฅเชฏเซ‡เชฒ เชนเซ‹เชตเซเช‚ เช†เชตเชถเซเชฏเช• เช›เซ‡.

เชชเช›เซ€ เชคเชฎเชพเชฐเซ‡ componentWillUnmount() เชชเชฆเซเชงเชคเชฟเชฎเชพเช‚เชฅเซ€ เชถเซเชฐเชตเชฃเชจเซ‡ เชฆเซ‚เชฐ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡.

เช›เซ‡เชฒเซเชฒเซ‡, render() translate() เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช…เชจเซ‡ เชคเซ‡เชฎเชพเช‚ เช•เซ€ เชชเซ‡เชฐเชพเชฎเซ€เชŸเชฐ เช‰เชฎเซ‡เชฐเซ€เชจเซ‡ เชนเซ‡เชฒเซ‹ เชชเชฐเชค เช•เชฐเซ‡ เช›เซ‡. เช† เชชเช—เชฒเชพเช‚เช“ เชชเช›เซ€, เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เช•เชˆ เชญเชพเชทเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ เชคเซ‡ "เชธเชฎเชœเชตเชพ" เช…เชจเซ‡ เชคเซ‡เชฎเชพเช‚ เชธเช‚เชฆเซ‡เชถเชพ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เชธเชฎเชฐเซเชฅ เชนเชถเซ‡.

เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฒเซ‹เชจเซเชš

เช…เชจเซเชตเชพเชฆ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชพเชฐเซเชฏ เช•เชฐเซ‡ เช›เซ‡ เชคเซ‡ เชคเชชเชพเชธเชตเชพเชจเซ‹ เชนเชตเซ‡ เชธเชฎเชฏ เช›เซ‡.

เชชเซเชฐเชฅเชฎ, เช…เชฎเซ‡ เชŸเชพเช‡เชช เช•เชฐเซ€เชจเซ‡ เชธเชฟเชฎเซเชฏเซเชฒเซ‡เชŸเชฐ เช…เชฅเชตเชพ เช‡เชฎเซเชฏเซเชฒเซ‡เชŸเชฐเชฎเชพเช‚ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฒเซ‹เช‚เชš เช•เชฐเซ€เช เช›เซ€เช

$ เชชเซเชฐเชคเชฟเช•เซเชฐเชฟเชฏเชพ-เชจเซ‡เชŸเชฟเชต เชฐเชจ-เช†เช‡เช“เชเชธ
$ เชชเซเชฐเชคเชฟเช•เซเชฐเชฟเชฏเชพ-เชจเซ‡เชŸเชฟเชต เชฐเชจ-เชเชจเซเชกเซเชฐเซ‹เช‡เชก

เชคเซ‡ เช†เชจเชพ เชœเซ‡เชตเซเช‚ เช•เช‚เชˆเช• เชฆเซ‡เช–เชพเชถเซ‡:

เชฐเซ€เชเช•เซเชŸ เชจเซ‡เชŸเซ€เชตเชฎเชพเช‚ เชฌเชนเซเชญเชพเชทเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฒเช–เชตเซ€

เชนเชตเซ‡ เชคเชฎเซ‡ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฒเซ‹เช‚เชš เช•เชฐเซ€เชจเซ‡ เชญเชพเชทเชพเชจเซ‡ เชซเซเชฐเซ‡เชจเซเชšเชฎเชพเช‚ เชฌเชฆเชฒเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹.

เชฐเซ€เชเช•เซเชŸ เชจเซ‡เชŸเซ€เชตเชฎเชพเช‚ เชฌเชนเซเชญเชพเชทเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฒเช–เชตเซ€

เช…เชฎเซ‡ เช…เชฐเชฌเซ€ เชธเชพเชฅเซ‡ เชธเชฎเชพเชจ เชตเชธเซเชคเซ เช•เชฐเซ€เช เช›เซ€เช, เชคเซ‡เชฎเชพเช‚ เช•เซ‹เชˆ เชคเชซเชพเชตเชค เชจเชฅเซ€.

เช…เชคเซเชฏเชพเชฐ เชธเซเชงเซ€ เช–เซ‚เชฌ เชธเชพเชฐเซเช‚.

เชชเชฐเช‚เชคเซ เชœเซ‹ เชคเชฎเซ‡ เชเชตเซ€ เชฐเซ‡เชจเซเชกเชฎ เชญเชพเชทเชพ เชชเชธเช‚เชฆ เช•เชฐเซ‹ เช•เซ‡ เชœเซ‡เชจเชพ เชฎเชพเชŸเซ‡ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชฎเชพเช‚ เช•เซ‹เชˆ เช…เชจเซเชตเชพเชฆ เชจเชฅเซ€, เชคเซ‹ เชถเซเช‚ เชฅเชถเซ‡?

เชคเซ‡ เชคเชพเชฐเชฃ เช†เชชเซ‡ เช›เซ‡ เช•เซ‡ findBestLanguage เชจเซเช‚ เช•เชพเชฐเซเชฏ เชคเชฎเชพเชฎ เช‰เชชเชฒเชฌเซเชง เชญเชพเชทเชพเชฎเชพเช‚เชฅเซ€ เชถเซเชฐเซ‡เชทเซเช  เช…เชจเซเชตเชพเชฆ เชชเซเชฐเชฆเชพเชจ เช•เชฐเชตเชพเชจเซเช‚ เช›เซ‡. เชชเชฐเชฟเชฃเชพเชฎเซ‡, เชกเชฟเชซเซ‰เชฒเซเชŸ เชญเชพเชทเชพ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เชฅเชถเซ‡.

เช…เชฎเซ‡ เชซเซ‹เชจ เชธเซ‡เชŸเชฟเช‚เช—เซเชธ เชตเชฟเชถเซ‡ เชตเชพเชค เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช. เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, iOS เช‡เชฎเซเชฏเซเชฒเซ‡เชŸเชฐเชฎเชพเช‚ เชคเชฎเซ‡ เชญเชพเชทเชพเช“เชจเซ‹ เช•เซเชฐเชฎ เชœเซ‹เชˆ เชถเช•เซ‹ เช›เซ‹.

เชฐเซ€เชเช•เซเชŸ เชจเซ‡เชŸเซ€เชตเชฎเชพเช‚ เชฌเชนเซเชญเชพเชทเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฒเช–เชตเซ€

เชœเซ‹ เชชเชธเช‚เชฆ เช•เชฐเซ‡เชฒเซ€ เชญเชพเชทเชพ เชชเชธเช‚เชฆเช—เซ€เชจเซ€ เชญเชพเชทเชพ เชจเชฅเซ€, เชคเซ‹ FindBestAvailableLanguage เช…เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เชชเชฐเชค เช•เชฐเซ‡ เช›เซ‡ เชœเซ‡เชฅเซ€ เชกเชฟเชซเซ‹เชฒเซเชŸ เชญเชพเชทเชพ เชฌเชคเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡.

เชฌเซ‹เชจเชธ

react-native-localize เชชเชพเชธเซ‡ เชเช• API เช›เซ‡ เชœเซ‡ เชฎเซ‹เชŸเซ€ เชธเช‚เช–เซเชฏเชพเชฎเชพเช‚ เชญเชพเชทเชพ เช˜เชŸเช•เซ‹เชจเซ€ เชเช•เซเชธเซ‡เชธ เชชเซเชฐเชฆเชพเชจ เช•เชฐเซ‡ เช›เซ‡. เชคเชฎเซ‡ เช•เชพเชฎ เชถเชฐเซ‚ เช•เชฐเซ‹ เชคเซ‡ เชชเชนเซ‡เชฒเชพเช‚, เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ เชคเชชเชพเชธเชตเซเช‚ เชฏเซ‹เช—เซเชฏ เช›เซ‡.

เชคเชพเชฐเชฃเซ‹

เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เช•เซ‹เชˆเชชเชฃ เชธเชฎเชธเซเชฏเชพ เชตเชฟเชจเชพ เชฌเชนเซเชญเชพเชทเซ€ เชฌเชจเชพเชตเซ€ เชถเช•เชพเชฏ เช›เซ‡. React-native-localize เช เชเช• เชถเซเชฐเซ‡เชทเซเช  เชตเชฟเช•เชฒเซเชช เช›เซ‡ เชœเซ‡ เชคเชฎเชจเซ‡ เชคเชฎเชพเชฐเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเชพ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เช†เชงเชพเชฐเชจเซ‡ เชตเชฟเชธเซเชคเซƒเชค เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡.

เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชธเซเชฐเซ‹เชค เช•เซ‹เชก เช…เชนเซ€เช‚ เช›เซ‡.

เชธเซเช•เชฟเชฒเชฌเซ‹เช•เซเชธ เชญเชฒเชพเชฎเชฃ เช•เชฐเซ‡ เช›เซ‡:

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹