ΠŸΠΈΡˆΡƒΠ²Π°ΡšΠ΅ ΠΏΠΎΠ²Π΅ΡœΠ΅Ρ˜Π°Π·ΠΈΡ‡Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Π²ΠΎ React Native

ΠŸΠΈΡˆΡƒΠ²Π°ΡšΠ΅ ΠΏΠΎΠ²Π΅ΡœΠ΅Ρ˜Π°Π·ΠΈΡ‡Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Π²ΠΎ React Native

Π›ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅ Π΅ ΠΌΠ½ΠΎΠ³Ρƒ Π²Π°ΠΆΠ½Π° Π·Π° ΠΌΠ΅Ρ“ΡƒΠ½Π°Ρ€ΠΎΠ΄Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΠΊΠΎΠΈ истраТуваат Π½ΠΎΠ²ΠΈ зСмји ΠΈ Ρ€Π΅Π³ΠΈΠΎΠ½ΠΈ. Π‘Π»ΠΈΡ‡Π½ΠΎ Π½Π° Ρ‚ΠΎΠ°, ΠΏΠΎΡ‚Ρ€Π΅Π±Π½Π° Π΅ Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ˜Π° Π·Π° ΠΌΠΎΠ±ΠΈΠ»Π½ΠΈΡ‚Π΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ. Ако ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ΅Ρ€ΠΎΡ‚ Π·Π°ΠΏΠΎΡ‡Π½Π΅ ΠΌΠ΅Ρ“ΡƒΠ½Π°Ρ€ΠΎΠ΄Π½ΠΎ ΠΏΡ€ΠΎΡˆΠΈΡ€ΡƒΠ²Π°ΡšΠ΅, Π²Π°ΠΆΠ½ΠΎ Π΅ Π΄Π° ΠΈΠΌ сС Π΄Π°Π΄Π΅ моТност Π½Π° корисницитС ΠΎΠ΄ Π΄Ρ€ΡƒΠ³Π° зСмја Π΄Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ со ΠΈΠ½Ρ‚Π΅Ρ€Ρ„Π΅Ρ˜ΡΠΎΡ‚ Π½Π° Π½ΠΈΠ²Π½ΠΈΠΎΡ‚ ΠΌΠ°Ρ˜Ρ‡ΠΈΠ½ јазик. Π’ΠΎ ΠΎΠ²Π°Π° ΡΡ‚Π°Ρ‚ΠΈΡ˜Π°, ќС создадСмС Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° React Native ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Π³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΡ‚ Ρ€Π΅Π°Π³ΠΈΡ€Π°-ΠΌΠ°Ρ˜Ρ‡ΠΈΠ½-Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΈΡ€Π°.

Skillbox ΠΏΡ€Π΅ΠΏΠΎΡ€Π°Ρ‡ΡƒΠ²Π°: Π•Π΄ΡƒΠΊΠ°Ρ‚ΠΈΠ²Π΅Π½ онлајн курс β€žΠŸΡ€ΠΎΡ„Π΅ΡΠΈΡ˜Π° Java ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ΅Ρ€β€œ.
ΠŸΠΎΡ‚ΡΠ΅Ρ‚ΡƒΠ²Π°ΠΌΠ΅: Π·Π° ситС Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ Π½Π° β€žΠ₯Π°Π±Ρ€β€œ - попуст ΠΎΠ΄ 10 Ρ€ΡƒΠ±Π»ΠΈ ΠΏΡ€ΠΈ Π·Π°ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅ Π½Π° кој Π±ΠΈΠ»ΠΎ курс Skillbox ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Π³ΠΎ ΠΏΡ€ΠΎΠΌΠΎΡ‚ΠΈΠ²Π½ΠΈΠΎΡ‚ ΠΊΠΎΠ΄ β€žΠ₯Π°Π±Ρ€β€œ.

Алатки ΠΈ Π²Π΅ΡˆΡ‚ΠΈΠ½ΠΈ

Π—Π° Π΄Π° ја Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ ΠΎΠ²Π°Π° ΡΡ‚Π°Ρ‚ΠΈΡ˜Π°, ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈ Π²ΠΈ сС основни Π²Π΅ΡˆΡ‚ΠΈΠ½ΠΈ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° со 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 со Π²Π½Π΅ΡΡƒΠ²Π°ΡšΠ΅ Π½Π° слСдново:
$ ΠΏΡ€Π΅Π΄ΠΈΠ²ΠΎ Π΄ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ Ρ€Π΅Π°Π³ΠΈΡ€Π°-ΠΌΠ°Ρ˜Ρ‡ΠΈΠ½-Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΈΡ€Π°Ρ˜

Ако сС ΠΏΠΎΡ˜Π°Π²Π°Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ Π·Π° Π²Ρ€Π΅ΠΌΠ΅ Π½Π° процСсот Π½Π° ΠΈΠ½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡ˜Π°, Π’Ρ€Π΅Π΄ΠΈ Π΄Π° сС ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π° упатството Π·Π° ΠΈΠ½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡ˜Π°.

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° react-native-localize ΠΌΡƒ Π΄Π°Π²Π° Π½Π° Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‡ΠΎΡ‚ пристап Π΄ΠΎ ΠΏΠΎΠ²Π΅ΡœΠ΅Ρ˜Π°Π·ΠΈΡ‡Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Но, ѝ Ρ‚Ρ€Π΅Π±Π° ΡƒΡˆΡ‚Π΅ Π΅Π΄Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° - i18n.

Оваа ΡΡ‚Π°Ρ‚ΠΈΡ˜Π° ја ΠΎΠΏΠΈΡˆΡƒΠ²Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°Ρ‚Π° I18n.js со Ρ†Π΅Π» Π΄Π° сС ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈ ΠΏΡ€Π΅Π²ΠΎΠ΄ Π½Π° JavaScript.

$ ΠΏΡ€Π΅Π΄ΠΈΠ²ΠΎ Π΄ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ i18n-js

Па, бидСјќи i18n-js Π½Π΅ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡƒΠ²Π° ΠΊΠ΅ΡˆΠΈΡ€Π°ΡšΠ΅ ΠΈΠ»ΠΈ ΠΌΠ΅ΠΌΠΎΠΈΠ·Π°Ρ†ΠΈΡ˜Π°, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΠΌ Π΄Π° Π³ΠΎ користитС lodash.memoize Π·Π° ΠΎΠ²Π°:

$ ΠΏΡ€Π΅Π΄ΠΈΠ²ΠΎ Π΄ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ lodash.memoize

Π Π°Π±ΠΎΡ‚Π° со ΠΏΡ€Π΅Π²ΠΎΠ΄ΠΈ

Π—Π° Π΄Π° ΠΌΠΎΠΆΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ со Π΄Ρ€ΡƒΠ³ΠΈ Ρ˜Π°Π·ΠΈΡ†ΠΈ, ΠΏΡ€Π²ΠΎ Ρ‚Ρ€Π΅Π±Π° Π΄Π° ΠΊΡ€Π΅ΠΈΡ€Π°Ρ‚Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌ Π·Π° ΠΏΡ€Π΅Π²ΠΎΠ΄ΠΈ Π²ΠΎ src, Π° ΠΏΠΎΡ‚ΠΎΠ° Ρ‚Ρ€ΠΈ JSON-Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ Π·Π° сСкој јазик.

1. en.json за англиски јазик;

2. fr.json Π·Π° француски;

3. Π°Ρ€.јсон Π·Π° арапски.

ОвиС Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ содрТат JSON ΠΎΠ±Ρ˜Π΅ΠΊΡ‚ΠΈ со ΠΊΠ»ΡƒΡ‡Π΅Π²ΠΈ ΠΈ врСдности. ΠšΠ»ΡƒΡ‡ΠΎΡ‚ ќС Π±ΠΈΠ΄Π΅ ист Π·Π° сСкој јазик. Π‘Π΅ користи ΠΎΠ΄ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π·Π° ΠΏΡ€ΠΈΠΊΠ°ΠΆΡƒΠ²Π°ΡšΠ΅ Π½Π° тСкстуални ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

ВрСдност Π΅ тСкстот ΡˆΡ‚ΠΎ Ρ‚Ρ€Π΅Π±Π° Π΄Π° ΠΌΡƒ сС ΠΏΡ€ΠΈΠΊΠ°ΠΆΠ΅ Π½Π° корисникот.

Англиски:

{"Π·Π΄Ρ€Π°Π²ΠΎ": "Π—Π΄Ρ€Π°Π²ΠΎ свСт!"}

Ѐранцузский

{"Π·Π΄Ρ€Π°Π²ΠΎ": "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().

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, 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

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€