He mea koʻikoʻi ka localization huahana no nā hui honua e ʻimi nei i nā ʻāina a me nā ʻāina hou. Pēlā nō, pono ka localization no nā polokalamu kelepona. Inā hoʻomaka ka mea hoʻomohala i ka hoʻonui honua, pono e hāʻawi i nā mea hoʻohana mai kahi ʻāina ʻē i ka manawa e hana ai me ka interface ma kā lākou ʻōlelo maoli. Ma kēia ʻatikala, e hana mākou i kahi noi React Native me ka hoʻohana ʻana i ka pā react-native-localize.
Manaʻo ʻo Skillbox: Papa hoʻonaʻauao pūnaewele "Ka mea hoʻomohala ʻoihana Java". Hoʻomaopopo mākou iā ʻoe:no ka poʻe heluhelu a pau o "Habr" - kahi ho'ēmi o 10 rubles i ka wā e kākau inoa ai i kekahi papa Skillbox e hoʻohana ana i ka code promotional "Habr".
Nā mea hana a me nā mākau
No ka hoʻomaopopo ʻana i kēia ʻatikala, pono ʻoe i nā mākau maʻamau i ka hana ʻana me React Native. No ka hoʻomaʻamaʻa iā ʻoe iho me nā hoʻonohonoho o ka mīkini hana, hiki iā ʻoe hoʻohana i nā kuhikuhi kūhelu.
Pono mākou i kēia mau mana o nā lako polokalamu:
Node v10.15.0
npm 6.4.1
wili 1.16.0
react-kumu 0.59.9
react-native-localize 1.1.3
i18n-js 3.3.0
Ua hoʻomaka
E hana mākou i kahi noi e kākoʻo i ka ʻōlelo Pelekane, Palani a me ʻAlapia. Hana mua mākou i kahi papahana hou me ka hoʻohana ʻana i ka react-native-cli. No ka hana ʻana i kēia, pono ʻoe e kākau i kēia ma ka terminal:
$ react-native init multiLanguage
$ cd ʻōlelo lehulehu
Hoʻohui i nā hale waihona puke e pono ai
ʻO ka hana mua e hoʻokomo i ka react-native-localize ma ke kākau ʻana i kēia:
$ yarn hoʻohui i ka react-native-localize
Hāʻawi ka waihona react-native-localize i ka mea hoʻomohala i nā hiʻohiʻona lehulehu. Akā makemake ʻo ia i hoʻokahi waihona - i18n.
Hōʻike kēia ʻatikala i ka hoʻohana ʻana I18n.js no ka hoʻolako ʻana i ka unuhi i ka JavaScript.
$ yarn hoʻohui i18n-js
ʻAe, no ka mea ʻaʻole hāʻawi ʻo i18n-js i ka cache a me ka memoization, manaʻo wau e hoʻohana i ka lodash.memoize no kēia:
$ yarn hoʻohui i ka lodash.memoize
Ke hana nei me nā unuhi
I mea e hiki ai i ka palapala noi ke hana me nā ʻōlelo ʻē aʻe, pono ʻoe e hana i kahi papa kuhikuhi unuhi i loko o src, a laila ʻekolu faila JSON no kēlā me kēia ʻōlelo.
1. en.json no ka ʻōlelo Pelekania;
2. fr.json no Palani;
3. ar.json no ka Arabic.
Aia kēia mau faila i nā mea JSON me nā kī a me nā waiwai. E like ana ke kī no kēlā me kēia ʻōlelo. Hoʻohana ʻia e ka palapala noi e hōʻike i ka ʻike kikokikona.
ʻO ka waiwai ka kikokikona e pono e hōʻike i ka mea hoʻohana.
Pelekania:
{"hello": "Aloha honua!"}
'Ōlelo Farani
{"hello": "Salut le Monde!"}
'Apia
{ "hello": "أهلاً بالعالم"}
Hiki iā ʻoe ke hoʻohui i nā ʻōlelo ʻē aʻe ma ke ʻano like.
Code nui
I kēia manawa, pono ʻoe e wehe i ka faila App.js a hoʻohui i nā mea lawe mai iā ia:
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";
Ma hope o kēia, hoʻohui ʻia nā hana kōkua a me nā mea mau e pono ai ma hope.
ʻO ka mea mua, setI18nConfig (), hoʻonohonoho i ka hoʻonohonoho mua.
A laila pono ʻoe e hoʻohui i kahi mea hoʻolohe hanana i ka componentDidMount (), e hoʻolohe kēia mea i nā mea hou a kāhea aku i ka handleLocalizationChange () ke hiki mai.
Hoʻohana ka hana handleLocalizationChange() setI18nConfig() a me forceUpdate(). Pono kēia no nā polokalamu Android no ka mea pono e hāʻawi ʻia ka ʻāpana i ʻike ʻia nā loli.
A laila pono ʻoe e wehe i ka hoʻolohe mai ka componentWillUnmount() ala.
ʻO ka hope, hoʻihoʻi ʻo render() i ke aloha me ka hoʻohana ʻana i ka unuhi () a hoʻohui i kahi ʻāpana kī iā ia. Ma hope o kēia mau ʻanuʻu, hiki i ka palapala noi ke "hoʻomaopopo" i ka ʻōlelo e pono ai a hōʻike i nā memo i loko.
Hoʻolālā noi
ʻO ka manawa kēia e nānā i ka hana o ka unuhi.
ʻO ka mea mua, hoʻomaka mākou i ka noi ma ka simulator a i ʻole emulator ma ke kākau ʻana
$ react-native run-ios
$ react-native run-android
E like me kēia:
I kēia manawa hiki iā ʻoe ke hoʻāʻo e hoʻololi i ka ʻōlelo i ka ʻōlelo Farani ma ka hoʻomaka ʻana i ka noi.
Hana like mākou me ka Arabic, ʻaʻohe ʻokoʻa.
I kēia manawa maikaʻi.
Akā he aha ka hopena inā koho ʻoe i kahi ʻōlelo maʻamau ʻaʻohe unuhi i ka noi?
ʻIke ʻia ʻo ka hana a findBestLanguage ʻo ia ka hāʻawi ʻana i ka unuhi maikaʻi loa mai nā mea āpau i loaʻa. ʻO ka hopena, e hōʻike ʻia ka ʻōlelo paʻamau.
Ke kamaʻilio nei mākou e pili ana i nā hoʻonohonoho kelepona. No ka laʻana, ma ka iOS emulator hiki iā ʻoe ke ʻike i ke ʻano o nā ʻōlelo.
Inā ʻaʻole ʻo ka ʻōlelo i koho ʻia ka ʻōlelo i makemake ʻia, e hoʻi ʻo findBestAvailableLanguage me ka wehewehe ʻole ʻia i hōʻike ʻia ka ʻōlelo paʻamau.
Bonus
Loaʻa i ka react-native-localize kahi API e hāʻawi ana i ke komo ʻana i kahi helu nui o nā mea ʻōlelo. Ma mua o kou hoʻomaka ʻana i ka hana, Pono e nānā i nā palapala.
haʻina
Hiki ke hana ʻia ka noi ma nā ʻōlelo he nui me ka pilikia ʻole. ʻO React-native-localize kahi koho maikaʻi loa e hiki ai iā ʻoe ke hoʻonui i ka waihona mea hoʻohana o kāu app.