āĻ†āĻŽāĻ°āĻž React Native-āĻ āĻāĻ•āĻŸāĻŋ āĻŦāĻšā§āĻ­āĻžāĻˇāĻŋāĻ• āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻ˛āĻŋāĻ–āĻŋ

āĻ†āĻŽāĻ°āĻž React Native-āĻ āĻāĻ•āĻŸāĻŋ āĻŦāĻšā§āĻ­āĻžāĻˇāĻŋāĻ• āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻ˛āĻŋāĻ–āĻŋ

āĻ¨āĻ¤ā§āĻ¨ āĻĻā§‡āĻļ āĻāĻŦāĻ‚ āĻ…āĻžā§āĻšāĻ˛ āĻŦāĻŋāĻ•āĻžāĻļāĻ•āĻžāĻ°ā§€ āĻ†āĻ¨ā§āĻ¤āĻ°ā§āĻœāĻžāĻ¤āĻŋāĻ• āĻ¸āĻ‚āĻ¸ā§āĻĨāĻžāĻ—ā§āĻ˛āĻŋāĻ° āĻœāĻ¨ā§āĻ¯ āĻĒāĻŖā§āĻ¯āĻ—ā§āĻ˛āĻŋāĻ° āĻ¸ā§āĻĨāĻžāĻ¨ā§€āĻ¯āĻŧāĻ•āĻ°āĻŖ āĻ…āĻ¤ā§āĻ¯āĻ¨ā§āĻ¤ āĻ—ā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖāĨ¤ āĻāĻ•āĻ‡āĻ­āĻžāĻŦā§‡, āĻŽā§‹āĻŦāĻžāĻ‡āĻ˛ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸ā§āĻĨāĻžāĻ¨ā§€āĻ¯āĻŧāĻ•āĻ°āĻŖ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨āĨ¤ āĻ¯āĻĻāĻŋ āĻāĻ•āĻœāĻ¨ āĻŦāĻŋāĻ•āĻžāĻļāĻ•āĻžāĻ°ā§€ āĻ†āĻ¨ā§āĻ¤āĻ°ā§āĻœāĻžāĻ¤āĻŋāĻ• āĻ¸āĻŽā§āĻĒā§āĻ°āĻ¸āĻžāĻ°āĻŖ āĻļā§āĻ°ā§ āĻ•āĻ°ā§‡, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻ…āĻ¨ā§āĻ¯ āĻĻā§‡āĻļā§‡āĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻĻā§‡āĻ° āĻ¤āĻžāĻĻā§‡āĻ° āĻ¸ā§āĻĨāĻžāĻ¨ā§€āĻ¯āĻŧ āĻ­āĻžāĻˇāĻžāĻ¯āĻŧ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻžāĻ° āĻ¸ā§āĻ¯ā§‹āĻ— āĻĻā§‡āĻ“āĻ¯āĻŧāĻž āĻ—ā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖāĨ¤ āĻāĻ‡ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§‡, āĻ†āĻŽāĻ°āĻž āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻ¨ā§‡āĻŸāĻŋāĻ­ āĻ…ā§āĻ¯āĻžāĻĒ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻŦ āĻĒā§āĻ°āĻ¤āĻŋāĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž-āĻ¨ā§‡āĻŸāĻŋāĻ­-āĻ¸ā§āĻĨāĻžāĻ¨ā§€āĻ¯āĻŧāĻ•āĻ°āĻŖ.

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

āĻ āĻŋāĻ• āĻ†āĻ›ā§‡, āĻ¯ā§‡āĻšā§‡āĻ¤ā§ 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() āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ āĻāĻ¤ā§‡ āĻāĻ•āĻŸāĻŋ āĻ•ā§€ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻŸāĻžāĻ° āĻ¯ā§‹āĻ— āĻ•āĻ°ā§‡ āĻ°ā§‡āĻ¨ā§āĻĄāĻžāĻ°() āĻ āĻšā§āĻ¯āĻžāĻ˛ā§‹ āĻĢā§‡āĻ°āĻ¤ āĻĻā§‡āĻ“āĻ¯āĻŧāĻž āĻšāĻ¯āĻŧāĨ¤ āĻāĻ‡ āĻĒāĻĻāĻ•ā§āĻˇā§‡āĻĒāĻ—ā§āĻ˛āĻŋāĻ° āĻĒāĻ°ā§‡, āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨āĻŸāĻŋ āĻ•ā§‹āĻ¨ āĻ­āĻžāĻˇāĻž āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻ¤āĻž "āĻŦā§āĻāĻ¤ā§‡" āĻāĻŦāĻ‚ āĻāĻ¤ā§‡ āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻ—ā§āĻ˛āĻŋ āĻĻā§‡āĻ–āĻžāĻ¤ā§‡ āĻ¸āĻ•ā§āĻˇāĻŽ āĻšāĻŦā§‡ā§ˇ

āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻĒā§āĻ°āĻŦāĻ°ā§āĻ¤āĻ¨

āĻāĻ–āĻ¨ āĻ…āĻ¨ā§āĻŦāĻžāĻĻ āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡ āĻ¤āĻž āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧāĨ¤

āĻĒā§āĻ°āĻĨāĻŽā§‡ āĻ†āĻŽāĻ°āĻž āĻŸāĻžāĻ‡āĻĒ āĻ•āĻ°ā§‡ āĻ¸āĻŋāĻŽā§āĻ˛ā§‡āĻŸāĻ° āĻŦāĻž āĻāĻŽā§āĻ˛ā§‡āĻŸāĻ°ā§‡ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨āĻŸāĻŋ āĻšāĻžāĻ˛āĻžāĻ‡

$ āĻĒā§āĻ°āĻ¤āĻŋāĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž-āĻ¨ā§‡āĻŸāĻŋāĻ­ āĻ°āĻžāĻ¨-āĻ†āĻ‡āĻ“āĻāĻ¸
$ āĻĒā§āĻ°āĻ¤āĻŋāĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž-āĻ¨ā§‡āĻŸāĻŋāĻ­ āĻ°āĻžāĻ¨-āĻ…ā§āĻ¯āĻžāĻ¨ā§āĻĄā§āĻ°āĻ¯āĻŧā§‡āĻĄ

āĻāĻŸāĻŋ āĻāĻ‡ āĻŽāĻ¤ āĻ•āĻŋāĻ›ā§ āĻĻā§‡āĻ–āĻžāĻŦā§‡:

āĻ†āĻŽāĻ°āĻž React Native-āĻ āĻāĻ•āĻŸāĻŋ āĻŦāĻšā§āĻ­āĻžāĻˇāĻŋāĻ• āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻ˛āĻŋāĻ–āĻŋ

āĻāĻ–āĻ¨ āĻ†āĻĒāĻ¨āĻŋ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨āĻŸāĻŋ āĻšāĻžāĻ˛ā§ āĻ•āĻ°ā§‡ āĻ­āĻžāĻˇāĻžāĻŸāĻŋāĻ•ā§‡ āĻĢā§āĻ°ā§‡āĻžā§āĻšā§‡ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ•āĻ°āĻžāĻ° āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤

āĻ†āĻŽāĻ°āĻž React Native-āĻ āĻāĻ•āĻŸāĻŋ āĻŦāĻšā§āĻ­āĻžāĻˇāĻŋāĻ• āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻ˛āĻŋāĻ–āĻŋ

āĻ†āĻŽāĻ°āĻž āĻ†āĻ°āĻŦāĻŋ āĻ­āĻžāĻˇāĻžāĻ° āĻ¸āĻžāĻĨā§‡ āĻāĻ•āĻ‡ āĻ•āĻ°āĻŋ, āĻ•ā§‹āĻ¨ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āĻ¯ āĻ¨ā§‡āĻ‡āĨ¤

āĻāĻ–āĻ¨ āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻ¸āĻŦāĻ•āĻŋāĻ›ā§ āĻ āĻŋāĻ•āĻ āĻžāĻ• āĻšāĻ˛āĻ›ā§‡āĨ¤

āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻāĻŽāĻ¨ āĻāĻ•āĻŸāĻŋ āĻ°ā§āĻ¯āĻžāĻ¨ā§āĻĄāĻŽ āĻ­āĻžāĻˇāĻž āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻšāĻ¨ āĻ•āĻ°ā§‡āĻ¨ āĻ¯āĻžāĻ° āĻ…ā§āĻ¯āĻžāĻĒā§‡ āĻ…āĻ¨ā§āĻŦāĻžāĻĻ āĻ¨ā§‡āĻ‡ āĻ¤āĻžāĻšāĻ˛ā§‡ āĻ•ā§€ āĻšāĻŦā§‡?

āĻĻā§‡āĻ–āĻž āĻ¯āĻžāĻšā§āĻ›ā§‡ āĻ¯ā§‡ FindBestLanguage-āĻāĻ° āĻ•āĻžāĻœ āĻšāĻ˛ āĻ‰āĻĒāĻ˛āĻŦā§āĻ§ āĻ¸āĻ•āĻ˛ā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ¸āĻ°ā§āĻŦā§‹āĻ¤ā§āĻ¤āĻŽ āĻ¸āĻŽā§āĻ­āĻžāĻŦā§āĻ¯ āĻ…āĻ¨ā§āĻŦāĻžāĻĻ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°āĻžāĨ¤ āĻĢāĻ˛āĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻĄāĻŋāĻĢāĻ˛ā§āĻŸāĻ°ā§‚āĻĒā§‡ āĻ¸ā§‡āĻŸ āĻ•āĻ°āĻž āĻ­āĻžāĻˇāĻž āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻŋāĻ¤ āĻšāĻŦā§‡āĨ¤

āĻāĻŸāĻŋ āĻĢā§‹āĻ¨ āĻ¸ā§‡āĻŸāĻŋāĻ‚āĻ¸ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡āĨ¤ āĻ¸ā§āĻ¤āĻ°āĻžāĻ‚, āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, iOS āĻāĻŽā§āĻ˛ā§‡āĻŸāĻ°ā§‡, āĻ†āĻĒāĻ¨āĻŋ āĻ­āĻžāĻˇāĻžāĻ° āĻ•ā§āĻ°āĻŽ āĻĻā§‡āĻ–āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤

āĻ†āĻŽāĻ°āĻž React Native-āĻ āĻāĻ•āĻŸāĻŋ āĻŦāĻšā§āĻ­āĻžāĻˇāĻŋāĻ• āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻ˛āĻŋāĻ–āĻŋ

āĻ¯āĻĻāĻŋ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻšāĻŋāĻ¤ āĻ­āĻžāĻˇāĻžāĻŸāĻŋ āĻĒāĻ›āĻ¨ā§āĻĻā§‡āĻ° āĻ­āĻžāĻˇāĻž āĻ¨āĻž āĻšāĻ¯āĻŧ, āĻ¤āĻžāĻšāĻ˛ā§‡ FindBestAvailableLanguage āĻ…āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŋāĻ¤ āĻ°āĻŋāĻŸāĻžāĻ°ā§āĻ¨ āĻ•āĻ°ā§‡ āĻ¯āĻžāĻ¤ā§‡ āĻĄāĻŋāĻĢāĻ˛ā§āĻŸ āĻ­āĻžāĻˇāĻž āĻĻā§‡āĻ–āĻžāĻ¨ā§‹ āĻšāĻ¯āĻŧāĨ¤

āĻ…āĻ§āĻŋāĻŦā§ƒāĻ¤ā§āĻ¤āĻŋ

react-native-localize-āĻāĻ° āĻāĻ•āĻŸāĻŋ API āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ āĻ¯āĻž āĻĒā§āĻ°āĻšā§āĻ° āĻ¸āĻ‚āĻ–ā§āĻ¯āĻ• āĻ­āĻžāĻˇāĻžāĻ° āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨āĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°ā§‡āĨ¤ āĻ•āĻžāĻœ āĻļā§āĻ°ā§ āĻ•āĻ°āĻžāĻ° āĻ†āĻ—ā§‡, āĻāĻŸāĻž āĻĄāĻ•ā§āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāĻ¨ āĻĒāĻĄāĻŧāĻž āĻŽā§‚āĻ˛ā§āĻ¯.

āĻ¤āĻĨā§āĻ¯āĻ“

āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻ•ā§‹āĻ¨ā§‹ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻ›āĻžāĻĄāĻŧāĻžāĻ‡ āĻŦāĻšā§āĻ­āĻžāĻˇāĻŋāĻ• āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡. āĻĒā§āĻ°āĻ¤āĻŋāĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž-āĻ¨ā§‡āĻŸāĻŋāĻ­-āĻ˛ā§‹āĻ•āĻžāĻ˛āĻžāĻ‡āĻœ āĻāĻ•āĻŸāĻŋ āĻĻā§āĻ°ā§āĻĻāĻžāĻ¨ā§āĻ¤ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ āĻ¯āĻž āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ā§‡āĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻĻā§‡āĻ° āĻĒāĻ°āĻŋāĻ¸āĻ° āĻĒā§āĻ°āĻ¸āĻžāĻ°āĻŋāĻ¤ āĻ•āĻ°āĻ¤ā§‡ āĻĻā§‡āĻ¯āĻŧāĨ¤

āĻĒā§āĻ°ā§‹āĻœā§‡āĻ•ā§āĻŸ āĻ¸ā§‹āĻ°ā§āĻ¸ āĻ•ā§‹āĻĄ āĻāĻ–āĻžāĻ¨ā§‡.

Skillbox āĻ¸ā§āĻĒāĻžāĻ°āĻŋāĻļ āĻ•āĻ°ā§‡:

āĻ‰āĻ¤ā§āĻ¸: www.habr.com

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨