НиС пишСм ΠΌΠ½ΠΎΠ³ΠΎΠ΅Π·ΠΈΡ‡Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° React Native

НиС пишСм ΠΌΠ½ΠΎΠ³ΠΎΠ΅Π·ΠΈΡ‡Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° React Native

Локализацията Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΡ‚Π΅ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π²Π°ΠΆΠ½Π° Π·Π° ΠΌΠ΅ΠΆΠ΄ΡƒΠ½Π°Ρ€ΠΎΠ΄Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‚ Π½ΠΎΠ²ΠΈ страни ΠΈ Ρ€Π΅Π³ΠΈΠΎΠ½ΠΈ. По ΡΡŠΡ‰ΠΈΡ Π½Π°Ρ‡ΠΈΠ½ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° локализация Π·Π° ΠΌΠΎΠ±ΠΈΠ»Π½ΠΈ прилоТСния. Ако Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π·Π°ΠΏΠΎΡ‡Π½Π΅ ΠΌΠ΅ΠΆΠ΄ΡƒΠ½Π°Ρ€ΠΎΠ΄Π½Π° Скспанзия, Π²Π°ΠΆΠ½ΠΎ Π΅ Π΄Π° сС Π΄Π°Π΄Π΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° Π΄ΡŠΡ€ΠΆΠ°Π²Π° Π΄Π° работят с интСрфСйса Π½Π° родния си Π΅Π·ΠΈΠΊ. Π’ Ρ‚Π°Π·ΠΈ статия Ρ‰Π΅ създадСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ React Native, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π° Ρ€Π΅Π°Π³ΠΈΡ€Π°Ρ‚-Π½Π°Ρ‚ΠΈΠ²Π½ΠΎ-Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚.

Skillbox ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π°: ΠžΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅Π½ ΠΎΠ½Π»Π°ΠΉΠ½ курс β€žΠŸΡ€ΠΎΡ„Π΅ΡΠΈΡ Java Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊβ€œ.
НапомнямС Π²ΠΈ: Π·Π° всички Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ Π½Π° "Habr" - ΠΎΡ‚ΡΡ‚ΡŠΠΏΠΊΠ° ΠΎΡ‚ 10 000 Ρ€ΡƒΠ±Π»ΠΈ ΠΏΡ€ΠΈ записванС във всСки курс Skillbox, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ промоционалния ΠΊΠΎΠ΄ Π½Π° "Habr".

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ΠΈ ΠΈ умСния

Π Π°Π·Π±ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚Π°Π·ΠΈ статия изисква основни умСния Π·Π° 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 multiLanguage
$ cd ΠΌΠ½ΠΎΠ³ΠΎΠ΅Π·ΠΈΡ‡Π΅Π½

ДобавянС Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈΡ‚Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ

ΠŸΡŠΡ€Π²Π°Ρ‚Π° ΡΡ‚ΡŠΠΏΠΊΠ° Π΅ Π΄Π° инсталиратС react-native-localize, ΠΊΠ°Ρ‚ΠΎ Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ слСдното:
$ yarn add react-native-localize

Ако срСщнСтС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° инсталационния процСс, Π²ΠΈΠΆΡ‚Π΅ Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎΡ‚ΠΎ Π·Π° инсталиранС.

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° 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 ΠΎΠ±Π΅ΠΊΡ‚ΠΈ с ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅ ΠΈ стойности. ΠšΠ»ΡŽΡ‡ΡŠΡ‚ Ρ‰Π΅ бъдС Π΅Π΄ΠΈΠ½ ΠΈ ΡΡŠΡ‰ Π·Π° всСки Π΅Π·ΠΈΠΊ. Използва сС ΠΎΡ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π·Π° ΠΏΠΎΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° тСкстова информация.

Бтойност (стойност) Π΅ Ρ‚Π΅ΠΊΡΡ‚ΡŠΡ‚, ΠΊΠΎΠΉΡ‚ΠΎ трябва Π΄Π° бъдС ΠΏΠΎΠΊΠ°Π·Π°Π½ Π½Π° потрСбитСля.

Английски:

{ "hello": "Π—Π΄Ρ€Π°Π²Π΅ΠΉ свят!"}

Ѐранцузский

{ "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;
};

Π•, сСга Π½Π΅ΠΊΠ° създадСм ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΎΡ‚ класа App:

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().

И накрая, hello сС Π²Ρ€ΡŠΡ‰Π° Π² render() Ρ‡Ρ€Π΅Π· ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° 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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€