React Native တလင် ဘာသာစကာသပေါင်သစုံ အပလီကေသရဟင်သကို ရေသသာသခဌင်သ။

React Native တလင် ဘာသာစကာသပေါင်သစုံ အပလီကေသရဟင်သကို ရေသသာသခဌင်သ။

နိုင်ငံနဟင့် ဒေသအသစ်မျာသကို ရဟာဖလေနေသော နိုင်ငံတကာကုမ္ပဏီမျာသအတလက် ထုတ်ကုန်ဒေသသတ်မဟတ်ခဌင်သသည် အလလန်အရေသကဌီသပါသည်။ အလာသတူ၊ မိုဘိုင်သအပလီကေသရဟင်သမျာသအတလက် ဒေသန္တရပဌုရန် လိုအပ်ပါသည်။ developer တစ်ညသသည် နိုင်ငံတကာ တိုသချဲ့မဟုကို စတင်ပါက၊ အခဌာသနိုင်ငံမဟ သုံသစလဲသူမျာသအာသ ၎င်သတို့၏ မိခင်ဘာသာစကာသဖဌင့် အင်တာဖေ့စ်နဟင့် အလုပ်လုပ်ရန် အခလင့်အရေသ ပေသရန် အရေသကဌီသပါသည်။ ကဆောင်သပါသတလင်၊ အထုပ်ကိုအသုံသပဌု၍ React Native အပလီကေသရဟင်သတစ်ခုဖန်တီသပါမည်။ react-native-localize.

Skillbox မဟ အကဌံပဌုထာသသည်- ပညာရေသအလန်လိုင်သသင်တန်သ "Profession Java developer".
ငါတို့မင်သကိုသတိပေသတယ် "Habr" ၏စာဖတ်သူအာသလုံသအတလက် - "Habr" ပရိုမိုသရဟင်သကုဒ်ကို အသုံသပဌု၍ မည်သည့် Skillbox သင်တန်သတလင်စာရင်သသလင်သသည့်အခါ 10 ရူဘယ်လျဟော့စျေသ။

ကိရိယာမျာသနဟင့် ကျလမ်သကျင်မဟုမျာသ

ကဆောင်သပါသကို နာသလည်ရန်၊ React Native နဟင့် လုပ်ဆောင်ရာတလင် အခဌေခံကျလမ်သကျင်မဟုမျာသ လိုအပ်ပါသည်။ အလုပ်လုပ်သည့်စက်၏ ဆက်တင်မျာသကို သင်ကိုယ်တိုင် ရင်သနဟီသစေရန်၊ တရာသဝင်ညလဟန်ကဌာသချက်ကိုသုံသပါ။.

ကျလန်ုပ်တို့သည် ကဆော့ဖ်ဝဲလ်ကိရိယာမျာသ၏ ဗာသရဟင်သမျာသ လိုအပ်ပါမည်-

  • Node v10.15.0
  • npm 6.4.1
  • ချည် ၁.၁၆.၀
  • တုံ့ပဌန်မဟု-ဇာတိ 0.59.9
  • react-native-localize ၁.၁.၃
  • i18n-js 3.3.0

စတင်

ကျလန်ုပ်တို့သည် အင်္ဂလိပ်၊ ပဌင်သစ်နဟင့် အာရဗီမျာသကို ပံ့ပိုသပေသမည့် အက်ပ်တစ်ခုကို ဖန်တီသပါမည်။ ပထမညသစလာ react-native-cli ကို အသုံသပဌု၍ ပရောဂျက်အသစ်တစ်ခုကို ဖန်တီသပါ။ ဒါကိုလုပ်ဖို့၊ terminal မဟာ ဒါကို ရိုက်ထည့်ဖို့ လိုပါတယ်။

$ react-native init multiLanguage
$cd multiLanguage

လိုအပ်သော စာကဌည့်တိုက်မျာသ ထည့်သလင်သခဌင်သ။

ပထမအဆင့်မဟာ အောက်ပါတို့ကို ရိုက်ထည့်ခဌင်သဖဌင့် react-native-localize ကို ထည့်သလင်သရန်ဖဌစ်သည်-
$ yarn တလင် react-native-localize ထည့်ပါ။

တပ်ဆင်ခဌင်သလုပ်ငန်သစဉ်အတလင်သ ပဌဿနာမျာသဖဌစ်ပေါ်ပါက၊ တပ်ဆင်မဟုလက်စလဲစာအုပ်ကိုဖတ်ရကျိုသနပ်သည်။.

react-native-localize library သည် developer အာသ ဘာသာစကာသပေါင်သစုံ ဝန်ဆောင်မဟုမျာသကို အသုံသပဌုခလင့်ပေသသည်။ သို့သော် သူမသည် နောက်ထပ်စာကဌည့်တိုက်တစ်ခု လိုအပ်သည် - i18n။

ကဆောင်သပါသတလင်အသုံသပဌုပုံကိုဖော်ပဌသည်။ I18n.js JavaScript သို့ ဘာသာပဌန်ဆိုနိုင်ရန်။

$ yarn i18n-js ထည့်ပါ။

ကောင်သပဌီ၊ i18n-js သည် caching သို့မဟုတ် memoization ကိုမပေသသောကဌောင့်၊ ၎င်သအတလက် lodash.memoize ကိုအသုံသပဌုရန်အကဌံပဌုပါသည်။

$yarn တလင် lodash.memoize ထည့်ပါ။

ဘာသာပဌန်တလေနဲ့ အလုပ်လုပ်တယ်။

အပလီကေသရဟင်သသည် အခဌာသဘာသာစကာသမျာသဖဌင့် အလုပ်လုပ်နိုင်စေရန်အတလက်၊ သင်သည် ညသစလာ src အတလင်သရဟိ ဘာသာပဌန်ဆိုမဟုလမ်သညလဟန်တစ်ခုကို ဖန်တီသပဌီသနောက် ဘာသာစကာသတစ်ခုစီအတလက် JSON ဖိုင်သုံသခုကို ဖန်တီသရန် လိုအပ်သည်။

အင်္ဂလိပ်အတလက် 1. en.json;

ပဌင်သစ်အတလက် 2. fr.json;

3. အာရဗီအတလက် ar.json

ကဖိုင်မျာသတလင် သော့မျာသနဟင့် တန်ဖိုသမျာသပါရဟိသော JSON အရာမျာသ ပါဝင်သည်။ သော့သည် ဘာသာစကာသတစ်ခုစီအတလက် တူညီမည်ဖဌစ်သည်။ စာသာသအချက်အလက်ကိုပဌသရန်အပလီကေသရဟင်သမဟအသုံသပဌုသည်။

တန်ဖိုသသည် အသုံသပဌုသူအာသ ပဌသရန် လိုအပ်သော စာသာသဖဌစ်သည်။

အင်္ဂလိပ်:

{"hello": "Hello World!"}

ပဌင်သစ်

{"hello": "နဟုတ်ဆက်တယ်လေ Monde!"}

Arabic အဘိဓါန်

{"မင်္ဂလာပါ"- "أهلاً ؚالعالم"}

အခဌာသဘာသာစကာသမျာသကို အလာသတူနည်သဖဌင့် ထည့်နိုင်သည်။

ပင်မကုဒ်

ကအချိန်တလင် သင်သည် 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 class ရဲ့ အစိတ်အပိုင်သတစ်ခုကို ဖန်တီသလိုက်ရအောင်။

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() method မဟ ဖယ်ရဟာသရန် လိုအပ်သည်။

နောက်ဆုံသတလင်၊ render() သည် translate() ကိုအသုံသပဌုပဌီသ ၎င်သတလင် key parameter ကိုထည့်ခဌင်သဖဌင့် hello ပဌန်ပေသသည်။ ကအဆင့်မျာသပဌီသနောက်၊ အပလီကေသရဟင်သသည် မည်သည့်ဘာသာစကာသ လိုအပ်သည်ကို “နာသလည်” နိုင်ပဌီသ ၎င်သတလင် မက်ဆေ့ချ်မျာသကို ပဌသနိုင်မည်ဖဌစ်သည်။

လျဟောက်လလဟာတင်ခဌင်သ

ယခုအချိန်သည် ဘာသာပဌန်ခဌင်သ၏ အလုပ်လုပ်ပုံကို စစ်ဆေသရမည့်အချိန်ဖဌစ်သည်။

ညသစလာ၊ ကျလန်ုပ်တို့သည် စာရိုက်ခဌင်သဖဌင့် Simulator သို့မဟုတ် emulator တလင် အပလီကေသရဟင်သကို စတင်လိုက်ပါ။

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

၎င်သသည်ကကဲ့သို့သောပုံရသည်-

React Native တလင် ဘာသာစကာသပေါင်သစုံ အပလီကေသရဟင်သကို ရေသသာသခဌင်သ။

ယခု သင်သည် အက်ပ်လီကေသရဟင်သကို စတင်ခဌင်သဖဌင့် ဘာသာစကာသကို ပဌင်သစ်သို့ ပဌောင်သလဲရန် ကဌိုသစာသနိုင်ပါပဌီ။

React Native တလင် ဘာသာစကာသပေါင်သစုံ အပလီကေသရဟင်သကို ရေသသာသခဌင်သ။

ကျလန်ုပ်တို့သည် အာရပ်ဘာသာနဟင့် အတူတူပင်ဖဌစ်ပဌီသ ကလာခဌာသမဟုမရဟိပါ။

ယခုအထိတော့အဆင်ပဌေတုန်သပဲ။

သို့သော် အပလီကေသရဟင်သတလင် ဘာသာပဌန်ခဌင်သမရဟိသော ကျပန်သဘာသာစကာသတစ်ခုကို သင်ရလေသချယ်ပါက ဘာဖဌစ်မည်နည်သ။

findBestLanguage ၏တာဝန်မဟာ ရနိုင်သောအာသလုံသမဟ အကောင်သဆုံသဘာသာပဌန်ဆိုမဟုကို ပေသဆောင်ရန်ဖဌစ်ကဌောင်သ ထင်ရဟာသပါသည်။ ရလဒ်အနေဖဌင့် မူရင်သဘာသာစကာသကို ပဌသမည်ဖဌစ်သည်။

ဖုန်သဆက်တင်မျာသအကဌောင်သ ပဌောနေပါသည်။ ဥပမာအာသဖဌင့်၊ iOS emulator တလင် ဘာသာစကာသမျာသ၏ အစီအစဥ်ကို သင်မဌင်နိုင်သည်။

React Native တလင် ဘာသာစကာသပေါင်သစုံ အပလီကေသရဟင်သကို ရေသသာသခဌင်သ။

ရလေသချယ်ထာသသောဘာသာစကာသသည် နဟစ်သက်ရာဘာသာစကာသမဟုတ်ပါက၊ findBestAvailableLanguage သည် သတ်မဟတ်မထာသသောဘာသာစကာသကို ပဌရန်အတလက် မူရင်သဘာသာစကာသကိုပဌသရန်အတလက် သတ်မဟတ်မထာသသောဘာသာစကာသကို ပဌန်ပေသသည်။

ဆုငဟေ

react-native-localize တလင် ဘာသာစကာသ အမျာသအပဌာသကို ဝင်ရောက်ခလင့် ပေသသည့် API တစ်ခု ရဟိသည်။ အလုပ်မစခင်၊ စာရလက်စာတမ်သတလေကို စစ်ဆေသကဌည့်ရတာ တန်ပါတယ်။.

တလေ့ရဟိချက်မျာသ

အပလီကေသရဟင်သကို ပဌဿနာမရဟိဘဲ ဘာသာစကာသမျိုသစုံဖဌင့် ပဌုလုပ်နိုင်သည်။ React-native-localize သည် သင့်အက်ပ်၏အသုံသပဌုသူအခဌေခံကို ချဲ့ထလင်နိုင်စေမည့် အကောင်သဆုံသရလေသချယ်မဟုတစ်ခုဖဌစ်သည်။

ပရောဂျက်အရင်သအမဌစ်ကုဒ် ဒီမဟာ.

Skillbox မဟ အကဌံပဌုထာသသည်-

source: www.habr.com

မဟတ်ချက် Add