แƒ›แƒ แƒแƒ•แƒแƒšแƒ”แƒœแƒแƒ•แƒแƒœแƒ˜ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒ“แƒแƒฌแƒ”แƒ แƒ React Native-แƒจแƒ˜

แƒ›แƒ แƒแƒ•แƒแƒšแƒ”แƒœแƒแƒ•แƒแƒœแƒ˜ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒ“แƒแƒฌแƒ”แƒ แƒ React Native-แƒจแƒ˜

แƒžแƒ แƒแƒ“แƒฃแƒฅแƒขแƒ˜แƒก แƒšแƒแƒ™แƒแƒšแƒ˜แƒ–แƒแƒชแƒ˜แƒ แƒซแƒแƒšแƒ˜แƒแƒœ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœแƒ˜แƒ แƒกแƒแƒ”แƒ แƒ—แƒแƒจแƒแƒ แƒ˜แƒกแƒ แƒ™แƒแƒ›แƒžแƒแƒœแƒ˜แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒ˜แƒ™แƒ•แƒšแƒ”แƒ•แƒ”แƒœ แƒแƒฎแƒแƒš แƒฅแƒ•แƒ”แƒงแƒœแƒ”แƒ‘แƒกแƒ แƒ“แƒ แƒ แƒ”แƒ’แƒ˜แƒแƒœแƒ”แƒ‘แƒก. แƒแƒœแƒแƒšแƒแƒ’แƒ˜แƒฃแƒ แƒแƒ“, แƒšแƒแƒ™แƒแƒšแƒ˜แƒ–แƒแƒชแƒ˜แƒ แƒกแƒแƒญแƒ˜แƒ แƒแƒ แƒ›แƒแƒ‘แƒ˜แƒšแƒฃแƒ แƒ˜ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒ—แƒฃ แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ˜ แƒ˜แƒฌแƒงแƒ”แƒ‘แƒก แƒกแƒแƒ”แƒ แƒ—แƒแƒจแƒแƒ แƒ˜แƒกแƒ แƒ’แƒแƒคแƒแƒ แƒ—แƒแƒ”แƒ‘แƒแƒก, แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœแƒ˜แƒ แƒกแƒฎแƒ•แƒ แƒฅแƒ•แƒ”แƒงแƒœแƒ˜แƒก แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ”แƒ‘แƒก แƒ›แƒ˜แƒกแƒชแƒ”แƒก แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ แƒ˜แƒ›แƒฃแƒจแƒแƒแƒœ แƒ˜แƒœแƒขแƒ”แƒ แƒคแƒ”แƒ˜แƒกแƒ˜แƒ— แƒ›แƒจแƒแƒ‘แƒšแƒ˜แƒฃแƒ  แƒ”แƒœแƒแƒ–แƒ”. แƒแƒ› แƒกแƒขแƒแƒขแƒ˜แƒแƒจแƒ˜ แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ•แƒฅแƒ›แƒœแƒ˜แƒ— React Native แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒแƒก แƒžแƒแƒ™แƒ”แƒขแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— แƒ แƒ”แƒแƒ’แƒ˜แƒ แƒ”แƒ‘แƒ-แƒ›แƒจแƒแƒ‘แƒšแƒ˜-แƒšแƒแƒ™แƒแƒšแƒ˜แƒ–แƒแƒชแƒ˜แƒ.

Skillbox แƒ’แƒ˜แƒ แƒฉแƒ”แƒ•แƒ—: แƒกแƒแƒ’แƒแƒœแƒ›แƒแƒœแƒแƒ—แƒšแƒ”แƒ‘แƒšแƒ แƒแƒœแƒšแƒแƒ˜แƒœ แƒ™แƒฃแƒ แƒกแƒ˜ "แƒžแƒ แƒแƒคแƒ”แƒกแƒ˜แƒ Java Developer".
แƒจแƒ”แƒ’แƒแƒฎแƒกแƒ”แƒœแƒ”แƒ‘แƒ—: "Habr"-แƒ˜แƒก แƒงแƒ•แƒ”แƒšแƒ แƒ›แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ”แƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก - แƒคแƒแƒกแƒ“แƒแƒ™แƒšแƒ”แƒ‘แƒ 10 แƒ แƒฃแƒ‘แƒšแƒ˜แƒ“แƒแƒœ Skillbox-แƒ˜แƒก แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ  แƒ™แƒฃแƒ แƒกแƒ–แƒ” แƒฉแƒแƒ แƒ˜แƒชแƒฎแƒ•แƒ˜แƒกแƒแƒก "Habr" แƒกแƒแƒ แƒ”แƒ™แƒšแƒแƒ›แƒ แƒ™แƒแƒ“แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—.

แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜ แƒ“แƒ แƒฃแƒœแƒแƒ แƒ”แƒ‘แƒ˜

แƒแƒ› แƒกแƒขแƒแƒขแƒ˜แƒ˜แƒก แƒ’แƒแƒกแƒแƒ’แƒ”แƒ‘แƒแƒ“, แƒ’แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒแƒ— React Native-แƒ—แƒแƒœ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒก แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“แƒ˜ แƒฃแƒœแƒแƒ แƒ”แƒ‘แƒ˜. แƒกแƒแƒ›แƒฃแƒจแƒแƒ แƒแƒžแƒแƒ แƒแƒขแƒ˜แƒก แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ—แƒแƒœ แƒ’แƒแƒกแƒแƒชแƒœแƒแƒ‘แƒแƒ“, แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ— แƒแƒคแƒ˜แƒชแƒ˜แƒแƒšแƒฃแƒ แƒ˜ แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜.

แƒฉแƒ•แƒ”แƒœ แƒ“แƒแƒ’แƒ•แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒฃแƒšแƒ˜ แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒ•แƒ”แƒ แƒกแƒ˜แƒ”แƒ‘แƒ˜:

  • Node v10.15.0
  • npm 6.4.1
  • แƒœแƒแƒ แƒ—แƒ˜ 1.16.0
  • แƒ แƒ”แƒแƒฅแƒขแƒ˜แƒฃแƒšแƒ˜ 0.59.9
  • react-native-localize 1.1.3
  • i18n-js 3.3.0

แƒ“แƒแƒ˜แƒฌแƒงแƒ

แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ•แƒฅแƒ›แƒœแƒ˜แƒ— แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒแƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ›แƒฎแƒแƒ แƒก แƒ“แƒแƒฃแƒญแƒ”แƒ แƒก แƒ˜แƒœแƒ’แƒšแƒ˜แƒกแƒฃแƒ แƒก, แƒคแƒ แƒแƒœแƒ’แƒฃแƒšแƒก แƒ“แƒ แƒแƒ แƒแƒ‘แƒฃแƒšแƒก. แƒฏแƒ”แƒ  แƒ•แƒฅแƒ›แƒœแƒ˜แƒ— แƒแƒฎแƒแƒš แƒžแƒ แƒแƒ”แƒฅแƒขแƒก react-native-cli-แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—. แƒแƒ›แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒแƒ™แƒ แƒ˜แƒคแƒแƒ— แƒ”แƒก แƒขแƒ”แƒ แƒ›แƒ˜แƒœแƒแƒšแƒจแƒ˜:

$ react-native init multiLanguage
$ cd แƒ›แƒ แƒแƒ•แƒแƒšแƒ”แƒœแƒแƒ•แƒแƒœแƒ˜

แƒกแƒแƒญแƒ˜แƒ แƒ แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ

แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒœแƒแƒ‘แƒ˜แƒฏแƒ˜ แƒแƒ แƒ˜แƒก react-native-localize-แƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒžแƒฃแƒœแƒฅแƒขแƒ˜แƒก แƒแƒ™แƒ แƒ”แƒคแƒ˜แƒ—:
$ แƒœแƒแƒ แƒ—แƒ˜ แƒ“แƒแƒแƒ›แƒแƒขแƒ”แƒ— react-native-localize

แƒ—แƒฃ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ”แƒ‘แƒ˜ แƒฌแƒแƒ แƒ›แƒแƒ˜แƒฅแƒ›แƒœแƒ”แƒ‘แƒ แƒ˜แƒœแƒกแƒขแƒแƒšแƒแƒชแƒ˜แƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒจแƒ˜, แƒฆแƒ˜แƒ แƒก แƒ˜แƒœแƒกแƒขแƒแƒšแƒแƒชแƒ˜แƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ›แƒซแƒฆแƒ•แƒแƒœแƒ”แƒšแƒแƒก แƒฌแƒแƒ™แƒ˜แƒ—แƒฎแƒ•แƒ.

React-native-localize แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ แƒแƒซแƒšแƒ”แƒ•แƒก แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒก แƒฌแƒ•แƒ“แƒแƒ›แƒแƒก แƒ›แƒ แƒแƒ•แƒแƒšแƒ”แƒœแƒแƒ•แƒแƒœ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ–แƒ”. แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒแƒก แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ”แƒ แƒ—แƒ˜ แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ แƒกแƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ - i18n.

แƒ”แƒก แƒกแƒขแƒแƒขแƒ˜แƒ แƒแƒฆแƒฌแƒ”แƒ แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒแƒก I18n.js JavaScript-แƒจแƒ˜ แƒ—แƒแƒ แƒ’แƒ›แƒแƒœแƒ˜แƒก แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒกแƒแƒงแƒแƒคแƒแƒ“.

$ แƒœแƒแƒ แƒ—แƒ˜ แƒ“แƒแƒแƒ›แƒแƒขแƒ”แƒ— i18n-js

แƒ™แƒแƒ แƒ’แƒ˜, แƒ แƒแƒ“แƒ’แƒแƒœ i18n-js แƒแƒ  แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒก แƒฅแƒ”แƒจแƒ˜แƒ แƒ”แƒ‘แƒแƒก แƒแƒœ แƒ“แƒแƒ›แƒแƒฎแƒกแƒแƒ•แƒ แƒ”แƒ‘แƒแƒก, แƒ›แƒ” แƒ’แƒ˜แƒ แƒฉแƒ”แƒ•แƒ— แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒแƒ— lodash.memoize แƒแƒ›แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก:

$ แƒœแƒแƒ แƒ—แƒ˜ แƒ“แƒแƒแƒ›แƒแƒขแƒ”แƒ— lodash.memoize

แƒ—แƒแƒ แƒ’แƒ›แƒแƒœแƒ”แƒ‘แƒ—แƒแƒœ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ

แƒ˜แƒ›แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ› แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒแƒ› แƒจแƒ”แƒซแƒšแƒแƒก แƒกแƒฎแƒ•แƒ แƒ”แƒœแƒ”แƒ‘แƒ—แƒแƒœ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ, แƒฏแƒ”แƒ  แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒฅแƒ›แƒœแƒแƒ— แƒ—แƒแƒ แƒ’แƒ›แƒแƒœแƒ˜แƒก แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒ src-แƒจแƒ˜, แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ™แƒ˜ แƒกแƒแƒ›แƒ˜ JSON แƒคแƒแƒ˜แƒšแƒ˜ แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒ”แƒœแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก.

1. en.json แƒ˜แƒœแƒ’แƒšแƒ˜แƒกแƒฃแƒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก;

2. fr.json แƒคแƒ แƒแƒœแƒ’แƒฃแƒšแƒแƒ“;

3. ar.json แƒแƒ แƒแƒ‘แƒฃแƒšแƒแƒ“.

แƒ”แƒก แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜ แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก JSON แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ”แƒ‘แƒก แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒ— แƒ“แƒ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜แƒ—. แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜ แƒ˜แƒ’แƒ˜แƒ•แƒ” แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒ”แƒœแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒ˜แƒ’แƒ˜ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒ›แƒ˜แƒ”แƒ  แƒขแƒ”แƒฅแƒกแƒขแƒฃแƒ แƒ˜ แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ˜แƒก แƒกแƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒšแƒแƒ“.

แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ แƒแƒ แƒ˜แƒก แƒขแƒ”แƒฅแƒกแƒขแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒฃแƒœแƒ“แƒ แƒแƒฉแƒ•แƒ”แƒœแƒแƒก แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒก.

แƒ˜แƒœแƒ’แƒšแƒ˜แƒกแƒฃแƒ แƒ˜ แƒ”แƒœแƒ:

{"hello": "แƒ’แƒแƒ›แƒแƒ แƒฏแƒแƒ‘แƒ แƒกแƒแƒ›แƒงแƒแƒ แƒ!"}

ะคั€ะฐะฝั†ัƒะทัะบะธะน

{"แƒ’แƒแƒ›แƒแƒ แƒฏแƒแƒ‘แƒ": "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;
};

แƒแƒฎแƒšแƒ แƒ›แƒแƒ“แƒ˜แƒ— แƒจแƒ”แƒ•แƒฅแƒ›แƒœแƒแƒ— แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒ™แƒšแƒแƒกแƒ˜แƒก แƒ™แƒแƒ›แƒžแƒแƒœแƒ”แƒœแƒขแƒ˜:

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

แƒ”แƒก แƒ“แƒแƒแƒฎแƒšแƒแƒ”แƒ‘แƒ˜แƒ— แƒแƒกแƒ” แƒ’แƒแƒ›แƒแƒ˜แƒงแƒฃแƒ แƒ”แƒ‘แƒ:

แƒ›แƒ แƒแƒ•แƒแƒšแƒ”แƒœแƒแƒ•แƒแƒœแƒ˜ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒ“แƒแƒฌแƒ”แƒ แƒ React Native-แƒจแƒ˜

แƒแƒฎแƒšแƒ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒกแƒชแƒแƒ“แƒแƒ— แƒ”แƒœแƒ˜แƒก แƒจแƒ”แƒชแƒ•แƒšแƒ แƒคแƒ แƒแƒœแƒ’แƒฃแƒšแƒ–แƒ” แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒ—.

แƒ›แƒ แƒแƒ•แƒแƒšแƒ”แƒœแƒแƒ•แƒแƒœแƒ˜ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒ“แƒแƒฌแƒ”แƒ แƒ React Native-แƒจแƒ˜

แƒแƒ แƒแƒ‘แƒฃแƒšแƒ—แƒแƒœแƒแƒช แƒ˜แƒ’แƒ˜แƒ•แƒ”แƒก แƒ•แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ—, แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒ แƒแƒ  แƒแƒ แƒ˜แƒก.

แƒฏแƒ”แƒ แƒฏแƒ”แƒ แƒแƒ‘แƒ˜แƒ— แƒ™แƒแƒ แƒ’แƒ˜แƒ.

แƒ›แƒแƒ’แƒ แƒแƒ› แƒ แƒ แƒ›แƒแƒฎแƒ“แƒ”แƒ‘แƒ, แƒ—แƒฃ แƒแƒ˜แƒ แƒฉแƒ”แƒ•แƒ— แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒ˜แƒ— แƒ”แƒœแƒแƒก, แƒ แƒแƒ›แƒšแƒ˜แƒก แƒ—แƒแƒ แƒ’แƒ›แƒแƒœแƒ˜ แƒแƒ  แƒแƒ แƒ˜แƒก แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒแƒจแƒ˜?

แƒ’แƒแƒ›แƒแƒ“แƒ˜แƒก, แƒ แƒแƒ› findBestLanguage-แƒ˜แƒก แƒแƒ›แƒแƒชแƒแƒœแƒแƒ แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒก แƒแƒžแƒขแƒ˜แƒ›แƒแƒšแƒฃแƒ แƒ˜ แƒ—แƒแƒ แƒ’แƒ›แƒแƒœแƒ˜ แƒงแƒ•แƒ”แƒšแƒ แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒ˜แƒ“แƒแƒœ. แƒจแƒ”แƒ“แƒ”แƒ’แƒแƒ“, แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ•แƒ˜ แƒ”แƒœแƒ แƒ’แƒแƒ›แƒแƒฉแƒœแƒ“แƒ”แƒ‘แƒ.

แƒกแƒแƒฃแƒ‘แƒแƒ แƒ˜แƒ แƒขแƒ”แƒšแƒ”แƒคแƒแƒœแƒ˜แƒก แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ–แƒ”. แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, iOS แƒ”แƒ›แƒฃแƒšแƒแƒขแƒแƒ แƒจแƒ˜ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ˜แƒฎแƒ˜แƒšแƒแƒ— แƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒ—แƒแƒœแƒ›แƒ˜แƒ›แƒ“แƒ”แƒ•แƒ แƒแƒ‘แƒ.

แƒ›แƒ แƒแƒ•แƒแƒšแƒ”แƒœแƒแƒ•แƒแƒœแƒ˜ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒ“แƒแƒฌแƒ”แƒ แƒ React Native-แƒจแƒ˜

แƒ—แƒฃ แƒแƒ แƒฉแƒ”แƒฃแƒšแƒ˜ แƒ”แƒœแƒ แƒแƒ  แƒแƒ แƒ˜แƒก แƒกแƒแƒกแƒฃแƒ แƒ•แƒ”แƒšแƒ˜ แƒ”แƒœแƒ, findBestAvailableLanguage แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒก แƒ’แƒแƒœแƒฃแƒกแƒแƒ–แƒฆแƒ•แƒ แƒ”แƒšแƒก, แƒ แƒแƒ—แƒ แƒœแƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ˜ แƒ˜แƒงแƒแƒก แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ•แƒ˜ แƒ”แƒœแƒ.

แƒ‘แƒแƒœแƒฃแƒก

react-native-localize-แƒก แƒแƒฅแƒ•แƒก API, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒก แƒ”แƒœแƒ˜แƒก แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒก แƒ“แƒ˜แƒ“ แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒแƒ–แƒ” แƒฌแƒ•แƒ“แƒแƒ›แƒแƒก. แƒกแƒแƒœแƒแƒ› แƒ›แƒฃแƒจแƒแƒแƒ‘แƒแƒก แƒ“แƒแƒ˜แƒฌแƒงแƒ”แƒ‘แƒ“แƒ”แƒ—, แƒฆแƒ˜แƒ แƒก แƒ“แƒแƒ™แƒฃแƒ›แƒ”แƒœแƒขแƒแƒชแƒ˜แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ.

แƒ“แƒแƒกแƒ™แƒ•แƒœแƒ”แƒ‘แƒ˜

แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ›แƒ แƒแƒ•แƒแƒšแƒ”แƒœแƒแƒ•แƒแƒœแƒ˜ แƒ˜แƒงแƒแƒก แƒฃแƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒแƒ“. React-native-localize แƒแƒ แƒ˜แƒก แƒจแƒ”แƒกแƒแƒœแƒ˜แƒจแƒœแƒแƒ•แƒ˜ แƒ•แƒแƒ แƒ˜แƒแƒœแƒขแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ’แƒแƒซแƒšแƒ”แƒ•แƒ— แƒ’แƒแƒแƒคแƒแƒ แƒ—แƒแƒ•แƒแƒ— แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ—แƒ แƒ‘แƒแƒ–แƒ.

แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒฌแƒงแƒแƒ แƒ แƒ™แƒแƒ“แƒ˜ แƒแƒฅ แƒแƒ แƒ˜แƒก.

Skillbox แƒ’แƒ˜แƒ แƒฉแƒ”แƒ•แƒ—:

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ