เจฐเฉ€เจเจ•เจŸ เจจเฉ‡เจŸเจฟเจต เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจฌเจนเฉ-เจญเจพเจธเจผเจพเจˆ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฒเจฟเจ–เจฃเจพ

เจฐเฉ€เจเจ•เจŸ เจจเฉ‡เจŸเจฟเจต เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจฌเจนเฉ-เจญเจพเจธเจผเจพเจˆ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฒเจฟเจ–เจฃเจพ

เจจเจตเฉ‡เจ‚ เจฆเฉ‡เจธเจผเจพเจ‚ เจ…เจคเฉ‡ เจ–เฉ‡เจคเจฐเจพเจ‚ เจฆเฉ€ เจชเฉœเจšเฉ‹เจฒ เจ•เจฐเจจ เจตเจพเจฒเฉ€เจ†เจ‚ เจ…เฉฐเจคเจฐเจฐเจพเจธเจผเจŸเจฐเฉ€ เจ•เฉฐเจชเจจเฉ€เจ†เจ‚ เจฒเจˆ เจ‰เจคเจชเจพเจฆ เจธเจฅเจพเจจเฉ€เจ•เจฐเจจ เจฌเจนเฉเจค เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจจ เจนเฉˆเฅค เจ‡เจธเฉ‡ เจคเจฐเฉเจนเจพเจ‚, เจฎเฉ‹เจฌเจพเจˆเจฒ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚ เจฒเจˆ เจธเจฅเจพเจจเฉ€เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค เจœเฉ‡เจ•เจฐ เจ•เฉ‹เจˆ เจกเจฟเจตเฉˆเจฒเจชเจฐ เจ…เฉฐเจคเจฐเจฐเจพเจธเจผเจŸเจฐเฉ€ เจตเจฟเจธเจคเจพเจฐ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเจฆเจพ เจนเฉˆ, เจคเจพเจ‚ เจฆเฉ‚เจœเฉ‡ เจฆเฉ‡เจธเจผ เจฆเฉ‡ เจ‰เจชเจญเฉ‹เจ—เจคเจพเจตเจพเจ‚ เจจเฉ‚เฉฐ เจ‰เจนเจจเจพเจ‚ เจฆเฉ€ เจฎเฉ‚เจฒ เจญเจพเจธเจผเจพ เจตเจฟเฉฑเจš เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฆเจพ เจฎเฉŒเจ•เจพ เจฆเฉ‡เจฃเจพ เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจจ เจนเฉˆเฅค เจ‡เจธ เจฒเฉ‡เจ– เจตเจฟเฉฑเจš, เจ…เจธเฉ€เจ‚ เจชเฉˆเจ•เฉ‡เจœ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจ‡เฉฑเจ• เจฐเฉ€เจเจ•เจŸ เจจเฉ‡เจŸเจฟเจต เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฌเจฃเจพเจตเจพเจ‚เจ—เฉ‡ เจชเฉเจฐเจคเฉ€เจ•เจฟเจฐเจฟเจ†-เจฎเฉ‚เจฒ-เจธเจฅเจพเจจเจ•เฉ€เจ•เจฐเจจ.

เจธเจ•เจฟเฉฑเจฒเจฌเจพเจ•เจธ เจธเจฟเจซเจผเจพเจฐเจฟเจธเจผ เจ•เจฐเจฆเจพ เจนเฉˆ: เจตเจฟเจฆเจฟเจ…เจ• เจ”เจจเจฒเจพเจˆเจจ เจ•เฉ‹เจฐเจธ "เจชเฉเจฐเฉ‹เจซเฉˆเจธเจผเจจ เจœเจพเจตเจพ เจกเจฟเจตเฉˆเจฒเจชเจฐ".
เจ…เจธเฉ€เจ‚ เจฏเจพเจฆ เจฆเจฟเจตเจพเจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚: "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 เจฌเจนเฉ เจญเจพเจธเจผเจพ
$cd เจฌเจนเฉ-เจญเจพเจธเจผเจพ

เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ€เจ†เจ‚ เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ เจœเฉ‹เฉœเจจเจพ

เจชเจนเจฟเจฒเจพ เจ•เจฆเจฎ เจ‡เจน เจนเฉˆ เจ•เจฟ เจนเฉ‡เจ เจพเจ‚ เจฆเจฟเฉฑเจคเฉ‡ เจŸเจพเจˆเจช เจ•เจฐเจ•เฉ‡ เจฐเฉ€เจเจ•เจŸ-เจจเฉ‡เจŸเจฟเจต-เจฒเฉ‹เจ•เจฒเจพเจˆเจœเจผ เจจเฉ‚เฉฐ เจธเจฅเจพเจชเจฟเจค เจ•เจฐเจจเจพ เจนเฉˆ:
$ yarn add react-native-localize

เจœเฉ‡เจ•เจฐ เจ‡เฉฐเจธเจŸเจพเจฒเฉ‡เจธเจผเจจ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจฆเฉŒเจฐเจพเจจ เจธเจฎเฉฑเจธเจฟเจ†เจตเจพเจ‚ เจ†เจ‰เจ‚เจฆเฉ€เจ†เจ‚ เจนเจจ, เจ‡เจน เจ‡เฉฐเจธเจŸเจพเจฒเฉ‡เจธเจผเจจ เจฎเฉˆเจจเฉ‚เจ…เจฒ เจจเฉ‚เฉฐ เจชเฉœเฉเจนเจจ เจฆเฉ‡ เจฏเฉ‹เจ— เจนเฉˆ.

เจฐเฉ€เจเจ•เจŸ-เจจเฉ‡เจŸเจฟเจต-เจฒเฉ‹เจ•เจฒเจฒเจพเจˆเจœเจผ เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€ เจกเจฟเจตเฉˆเจฒเจชเจฐ เจจเฉ‚เฉฐ เจฌเจนเฉ-เจญเจพเจธเจผเจพเจˆ เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพเจตเจพเจ‚ เจคเฉฑเจ• เจชเจนเฉเฉฐเจš เจฆเจฟเฉฐเจฆเฉ€ เจนเฉˆเฅค เจชเจฐ เจ‰เจธเจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจนเฉ‹เจฐ เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ - i18n.

เจ‡เจน เจฒเฉ‡เจ– เจตเจฐเจคเฉ‹เจ‚ เจฌเจพเจฐเฉ‡ เจฆเฉฑเจธเจฆเจพ เจนเฉˆ I18n.js JavaScript เจตเจฟเฉฑเจš เจ…เจจเฉเจตเจพเจฆ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจจ เจฒเจˆเฅค

$ เจงเจพเจ—เฉ‡ i18n-js เจธเจผเจพเจฎเจฒ เจ•เจฐเฉ‹

เจ–เฉˆเจฐ, เจ•เจฟเจ‰เจ‚เจ•เจฟ i18n-js เจ•เฉˆเจšเจฟเฉฐเจ— เจœเจพเจ‚ เจฎเฉˆเจฎเฉ‹เจ‡เจœเจผเฉ‡เจธเจผเจจ เจชเฉเจฐเจฆเจพเจจ เจจเจนเฉ€เจ‚ เจ•เจฐเจฆเจพ, เจฎเฉˆเจ‚ เจ‡เจธ เจฒเจˆ lodash.memoize เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฆเจพ เจธเฉเจเจพเจ… เจฆเจฟเฉฐเจฆเจพ เจนเจพเจ‚:

$ yarn add 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() เจจเฉ‚เฉฐ เจธเจฐเจ—เจฐเจฎ เจ•เจฐเจฆเฉ€ เจนเฉˆเฅค เจ‡เจน เจเจ‚เจกเจฐเฉŒเจ‡เจก เจกเจฟเจตเจพเจˆเจธเจพเจ‚ เจฒเจˆ เจœเจผเจฐเฉ‚เจฐเฉ€ เจนเฉˆ เจ•เจฟเจ‰เจ‚เจ•เจฟ เจฌเจฆเจฒเจพเจ… เจงเจฟเจ†เจจ เจฆเฉ‡เจฃ เจฏเฉ‹เจ— เจนเฉ‹เจฃ เจฒเจˆ เจ•เฉฐเจชเฉ‹เจจเฉˆเจ‚เจŸ เจจเฉ‚เฉฐ เจฐเฉˆเจ‚เจกเจฐ เจ•เฉ€เจคเจพ เจœเจพเจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆเฅค

เจซเจฟเจฐ เจคเฉเจนเจพเจจเฉ‚เฉฐ componentWillUnmount() เจตเจฟเจงเฉ€ เจคเฉ‹เจ‚ เจธเฉเจฃเจจ เจจเฉ‚เฉฐ เจนเจŸเจพเจ‰เจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค

เจ…เฉฐเจค เจตเจฟเฉฑเจš, render() translate() เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจ…เจคเฉ‡ เจ‡เจธ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจฎเฉเฉฑเจ– เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐ เจœเฉ‹เฉœ เจ•เฉ‡ เจนเฉˆเจฒเฉ‹ เจตเจพเจชเจธ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจ‡เจนเจจเจพเจ‚ เจ•เจฆเจฎเจพเจ‚ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ "เจธเจฎเจเจฃ" เจฆเฉ‡ เจฏเฉ‹เจ— เจนเฉ‹ เจœเจพเจตเฉ‡เจ—เฉ€ เจ•เจฟ เจ•เจฟเจนเฉœเฉ€ เจญเจพเจธเจผเจพ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ เจ…เจคเฉ‡ เจ‡เจธ เจตเจฟเฉฑเจš เจธเฉฐเจฆเฉ‡เจธเจผ เจชเฉเจฐเจฆเจฐเจธเจผเจฟเจค เจ•เฉ€เจคเฉ‡ เจœเจพเจฃเจ—เฉ‡เฅค

เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฒเจพเจ‚เจš

เจนเฉเจฃ เจ‡เจน เจฆเฉ‡เจ–เจฃ เจฆเจพ เจธเจฎเจพเจ‚ เจนเฉˆ เจ•เจฟ เจ…เจจเฉเจตเจพเจฆ เจ•เจฟเจตเฉ‡เจ‚ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆเฅค

เจชเจนเจฟเจฒเจพเจ‚, เจ…เจธเฉ€เจ‚ เจŸเจพเจˆเจช เจ•เจฐเจ•เฉ‡ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจจเฉ‚เฉฐ เจธเจฟเจฎเฉ‚เจฒเฉ‡เจŸเจฐ เจœเจพเจ‚ เจ‡เจฎเฉ‚เจฒเฉ‡เจŸเจฐ เจตเจฟเฉฑเจš เจฒเจพเจ‚เจš เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚

$ react-native run-ios
$ react-native run-android

เจ‡เจน เจ•เฉเจ เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจฆเจฟเจ–เจพเจˆ เจฆเฉ‡เจตเฉ‡เจ—เจพ:

เจฐเฉ€เจเจ•เจŸ เจจเฉ‡เจŸเจฟเจต เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจฌเจนเฉ-เจญเจพเจธเจผเจพเจˆ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฒเจฟเจ–เจฃเจพ

เจนเฉเจฃ เจคเฉเจธเฉ€เจ‚ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจจเฉ‚เฉฐ เจฒเจพเจ‚เจš เจ•เจฐเจ•เฉ‡ เจญเจพเจธเจผเจพ เจจเฉ‚เฉฐ เจซเฉเจฐเฉˆเจ‚เจš เจตเจฟเฉฑเจš เจฌเจฆเจฒเจฃ เจฆเฉ€ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค

เจฐเฉ€เจเจ•เจŸ เจจเฉ‡เจŸเจฟเจต เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจฌเจนเฉ-เจญเจพเจธเจผเจพเจˆ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฒเจฟเจ–เจฃเจพ

เจ…เจธเฉ€เจ‚ เจ…เจฐเจฌเฉ€ เจจเจพเจฒ เจ‰เจนเฉ€ เจ—เฉฑเจฒ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚, เจ•เฉ‹เจˆ เจซเจฐเจ• เจจเจนเฉ€เจ‚ เจนเฉˆ.

เจนเฉเจฃ เจคเฉฑเจ• เจฌเจนเฉเจค เจตเจงเฉ€เจ†.

เจชเจฐ เจ•เฉ€ เจนเฉเฉฐเจฆเจพ เจนเฉˆ เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ เจ‡เฉฑเจ• เจฌเฉ‡เจคเจฐเจคเฉ€เจฌ เจญเจพเจธเจผเจพ เจšเฉเจฃเจฆเฉ‡ เจนเฉ‹ เจœเจฟเจธ เจฒเจˆ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจตเจฟเฉฑเจš เจ•เฉ‹เจˆ เจ…เจจเฉเจตเจพเจฆ เจจเจนเฉ€เจ‚ เจนเฉˆ?

เจ‡เจน เจชเจคเจพ เจšเจฒเจฆเจพ เจนเฉˆ เจ•เจฟ FindBestLanguage เจฆเจพ เจ•เฉฐเจฎ เจธเจพเจฐเฉ€เจ†เจ‚ เจ‰เจชเจฒเจฌเจง เจญเจพเจธเจผเจพเจตเจพเจ‚ เจคเฉ‹เจ‚ เจธเจฐเจตเฉ‹เจคเจฎ เจ…เจจเฉเจตเจพเจฆ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจจเจพ เจนเฉˆเฅค เจจเจคเฉ€เจœเฉ‡ เจตเจœเฉ‹เจ‚, เจกเจฟเจซเฉŒเจฒเจŸ เจญเจพเจธเจผเจพ เจฆเจฟเจ–เจพเจˆ เจœเจพเจตเฉ‡เจ—เฉ€เฅค

เจ…เจธเฉ€เจ‚ เจซเฉ‹เจจ เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจฌเจพเจฐเฉ‡ เจ—เฉฑเจฒ เจ•เจฐ เจฐเจนเฉ‡ เจนเจพเจ‚เฅค เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, iOS เจ‡เจฎเฉ‚เจฒเฉ‡เจŸเจฐ เจตเจฟเฉฑเจš เจคเฉเจธเฉ€เจ‚ เจญเจพเจธเจผเจพเจตเจพเจ‚ เจฆเจพ เจ•เฉเจฐเจฎ เจฆเฉ‡เจ– เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค

เจฐเฉ€เจเจ•เจŸ เจจเฉ‡เจŸเจฟเจต เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจฌเจนเฉ-เจญเจพเจธเจผเจพเจˆ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฒเจฟเจ–เจฃเจพ

เจœเฉ‡เจ•เจฐ เจšเฉเจฃเฉ€ เจ—เจˆ เจญเจพเจธเจผเจพ เจคเจฐเจœเฉ€เจนเฉ€ เจญเจพเจธเจผเจพ เจจเจนเฉ€เจ‚ เจนเฉˆ, เจคเจพเจ‚ FindBestAvailableLanguage เจชเจฐเจฟเจญเจพเจธเจผเจฟเจค เจจเจนเฉ€เจ‚ เจนเฉเฉฐเจฆเฉ€ เจคเจพเจ‚ เจ•เจฟ เจกเจฟเจซเฉŒเจฒเจŸ เจญเจพเจธเจผเจพ เจฆเจฟเจ–เจพเจˆ เจœเจพเจตเฉ‡เฅค

เจฌเฉ‹เจจเจธ

react-native-localize เจ•เฉ‹เจฒ เจ‡เฉฑเจ• API เจนเฉˆ เจœเฉ‹ เจญเจพเจธเจผเจพ เจคเฉฑเจคเจพเจ‚ เจฆเฉ€ เจ‡เฉฑเจ• เจตเฉฑเจกเฉ€ เจ—เจฟเจฃเจคเฉ€ เจคเฉฑเจ• เจชเจนเฉเฉฐเจš เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจ•เฉฐเจฎ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเจจ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚, เจ‡เจน เจฆเจธเจคเจพเจตเฉ‡เจœเจผเจพเจ‚ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเจจ เจฏเฉ‹เจ— เจนเฉˆ.

เจธเจฟเฉฑเจŸเจพ

เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจจเฉ‚เฉฐ เจฌเจฟเจจเจพเจ‚ เจ•เจฟเจธเฉ‡ เจธเจฎเฉฑเจธเจฟเจ† เจฆเฉ‡ เจฌเจนเฉ-เจญเจพเจธเจผเจพเจˆ เจฌเจฃเจพเจ‡เจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆเฅค React-native-localize เจ‡เฉฑเจ• เจตเจงเฉ€เจ† เจตเจฟเจ•เจฒเจช เจนเฉˆ เจœเฉ‹ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจคเฉเจนเจพเจกเฉ‡ เจเจช เจฆเฉ‡ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจ…เจงเจพเจฐ เจจเฉ‚เฉฐ เจตเจงเจพเจ‰เจฃ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเจฟเฉฐเจฆเจพ เจนเฉˆเฅค

เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจธเจฐเฉ‹เจค เจ•เฉ‹เจก เจ‡เฉฑเจฅเฉ‡ เจนเฉˆ.

เจธเจ•เจฟเฉฑเจฒเจฌเจพเจ•เจธ เจธเจฟเจซเจผเจพเจฐเจฟเจธเจผ เจ•เจฐเจฆเจพ เจนเฉˆ:

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹