Yeni ölkələr və regionlar inkişaf etdirən beynəlxalq şirkətlər üçün məhsulların lokallaşdırılması çox vacibdir. Eynilə, mobil proqramlar üçün lokalizasiya lazımdır. Tərtibatçı beynəlxalq genişlənməyə başlayırsa, başqa ölkədən olan istifadəçilərə ana dilində interfeyslə işləmək imkanı vermək vacibdir. Bu yazıda paketdən istifadə edərək React Native proqramı yaradacağıq reaksiya-doğma-lokallaşdırmaq.
Skillbox tövsiyə edir: Onlayn təhsil kursu "Peşə Java Developer". Xatırladırıq:"Habr" ın bütün oxucuları üçün - "Habr" promosyon kodundan istifadə edərək hər hansı bir Skillbox kursuna yazılarkən 10 000 rubl endirim.
Alətlər və bacarıqlar
Bu məqaləni başa düşmək üçün əsas React Native bacarıqları tələb olunur. İşləyən maşının parametrləri ilə tanış olmaq üçün edə bilərsiniz rəsmi təlimatlardan istifadə edin.
Proqram vasitələrinin bu versiyalarına ehtiyacımız var:
Node v10.15.0
npm 6.4.1
iplik 1.16.0
reaksiya-doğma 0.59.9
reaksiya-doğma-lokallaşdırmaq 1.1.3
i18n-js 3.3.0
Başlanğıc
Biz ingilis, fransız və ərəb dilini dəstəkləyəcək proqram yaradacağıq. Əvvəlcə react-native-cli istifadə edərək yeni layihə yaradırıq. Bunu etmək üçün terminalda bunu yazmalısınız:
$ reaksiya-doğma init multiLanguage
$ cd çoxdilli
Tələb olunan kitabxanaların əlavə edilməsi
İlk addım aşağıdakıları yazaraq react-native-localize quraşdırmaqdır:
$ iplik əlavə reaksiya-doğma-lokallaşdırmaq
Reaksiya-doğma-lokalizasiya kitabxanası tərtibatçıya çoxdilli xüsusiyyətlərə giriş imkanı verir. Amma ona başqa bir kitabxana lazımdır - i18n.
Məqalə istifadəni təsvir edir I18n.js JavaScript-də tərcüməni təmin etmək üçün.
$ iplik əlavə i18n-js
Yaxşı, i18n-js keşləmə və ya yadda saxlama təmin etmədiyi üçün bunun üçün lodash.memoize istifadə etməyi təklif edirəm:
$ iplik əlavə edin lodash.memoize
Tərcümələrlə işləmək
Tətbiqin digər dillərlə işləməsi üçün əvvəlcə src daxilində tərcümələr kataloqu, sonra hər dil üçün üç JSON faylı yaratmalısınız.
1. İngilis dili üçün en.json;
2. Fransız dili üçün fr.json;
3. Ərəb dili üçün ar.json.
Bu fayllar açarları və dəyərləri olan JSON obyektlərini ehtiva edir. Açar hər dil üçün eyni olacaq. Mətn məlumatlarını göstərmək üçün proqram tərəfindən istifadə olunur.
Dəyər (dəyər) istifadəçiyə göstərilməli olan mətndir.
İngilis dili:
{ "salam": "Salam Dünya!"}
Французский
{ "salam": "Salut le Monde!"}
Арабский
{ "salam": "أهلاً بالعالم"}
Digər dillər də eyni şəkildə əlavə edilə bilər.
Əsas kod
Bu nöqtədə siz App.js faylını açmalı və ona idxal əlavə etməlisiniz:
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";
Bundan sonra köməkçi funksiyalar və sabitlər əlavə olunur ki, bu da sonradan faydalı olacaq.
Birinci element, setI18nConfig(), ilkin konfiqurasiyanı təyin edir.
Sonra komponentDidMount() -a hadisə dinləyicisi əlavə etməliyik, bu element yeniləmələri dinləyəcək və onlar baş verdikdə handleLocalizationChange() funksiyasını çağıracaq.
handleLocalizationChange() metodu setI18nConfig() və forceUpdate() funksiyalarını işə salır. Bu, Android cihazları üçün lazımdır, çünki dəyişikliklərin görünməsi üçün komponent göstərilməlidir.
Sonra komponentWillUnmount() metodundan dinləyicini silməliyik.
Nəhayət, translate() istifadə edərək və ona əsas parametr əlavə etməklə render() funksiyasında salam qaytarılır. Bu addımlardan sonra proqram hansı dilin lazım olduğunu "başa düşə" və içindəki mesajları göstərə biləcək.
Tətbiqin işə salınması
İndi tərcümənin necə işlədiyini yoxlamağın vaxtıdır.
Əvvəlcə proqramı yazaraq simulyatorda və ya emulyatorda işə salırıq
İndi proqramı işə salmaqla dili fransız dilinə dəyişməyə cəhd edə bilərsiniz.
Ərəb dili ilə də eyni şeyi edirik, heç bir fərq yoxdur.
Hələlik hər şey yaxşı gedir.
Bəs proqramda tərcüməsi olmayan təsadüfi bir dil seçsəniz nə olar?
Məlum oldu ki, findBestLanguage-in vəzifəsi bütün mövcud olanlar arasında mümkün olan ən yaxşı tərcüməni təmin etməkdir. Nəticədə, standart olaraq təyin edilmiş dil göstərilir.
Söhbət telefon parametrlərindən gedir. Beləliklə, məsələn, iOS emulyatorunda dillərin sırasını görə bilərsiniz.
Seçilmiş dil üstünlük verilən dil deyilsə, findBestAvailableLanguage qeyri-müəyyənliyi qaytarır ki, standart dil göstərilsin.
Mükafat
react-native-localize çoxlu sayda dil elementlərinə girişi təmin edən API-yə malikdir. İşə başlamazdan əvvəl, sənədləri oxumağa dəyər.
Tapıntılar
Tətbiq heç bir problem olmadan çoxdilli edilə bilər. React-native-localize tətbiqinizin istifadəçilərinin dairəsini genişləndirməyə imkan verən əla seçimdir.