Menulis aplikasi berbilang bahasa dalam React Native
Penyetempatan produk sangat penting untuk syarikat antarabangsa yang meneroka negara dan wilayah baharu. Begitu juga, penyetempatan diperlukan untuk aplikasi mudah alih. Jika pembangun memulakan pengembangan antarabangsa, adalah penting untuk memberi pengguna dari negara lain peluang untuk bekerja dengan antara muka dalam bahasa ibunda mereka. Dalam artikel ini, kami akan mencipta aplikasi React Native menggunakan pakej tersebut bertindak balas-asli-menyetempatkan.
Skillbox mengesyorkan: Kursus dalam talian pendidikan "Pemaju Java Profesion". Kami mengingatkan:untuk semua pembaca "Habr" - diskaun sebanyak 10 rubel apabila mendaftar dalam mana-mana kursus Skillbox menggunakan kod promosi "Habr".
Alat dan kemahiran
Untuk memahami artikel ini, anda memerlukan kemahiran asas dalam bekerja dengan React Native. Untuk membiasakan diri dengan tetapan mesin kerja, anda boleh gunakan arahan rasmi.
Kami memerlukan versi alat perisian ini:
Nod v10.15.0
npm 6.4.1
benang 1.16.0
react-asli 0.59.9
bertindak balas-asli-setempat 1.1.3
i18n-js 3.3.0
Bermula
Kami akan membuat aplikasi yang akan menyokong bahasa Inggeris, Perancis dan Arab. Mula-mula kita buat projek baharu menggunakan react-native-cli. Untuk melakukan ini, anda perlu menaip ini di terminal:
$ react-native init multiLanguage
$ cd berbilang Bahasa
Menambah perpustakaan yang diperlukan
Langkah pertama ialah memasang react-native-localize dengan menaip yang berikut:
$ benang tambah react-native-localize
Pustaka react-native-localize memberikan pembangun akses kepada ciri berbilang bahasa. Tetapi dia memerlukan satu lagi perpustakaan - i18n.
Artikel ini menerangkan penggunaan I18n.js untuk menyediakan terjemahan ke dalam JavaScript.
$ benang tambah i18n-js
Oleh kerana i18n-js tidak menyediakan caching atau memoization, saya cadangkan menggunakan lodash.memoize untuk ini:
$ benang tambah lodash.memoize
Bekerja dengan terjemahan
Agar aplikasi dapat berfungsi dengan bahasa lain, anda perlu membuat direktori terjemahan di dalam src dahulu, kemudian tiga fail JSON untuk setiap bahasa.
1. en.json untuk bahasa Inggeris;
2. fr.json untuk bahasa Perancis;
3. ar.json untuk bahasa Arab.
Fail ini mengandungi objek JSON dengan kunci dan nilai. Kuncinya adalah sama untuk setiap bahasa. Ia digunakan oleh aplikasi untuk memaparkan maklumat teks.
Nilai ialah teks yang perlu ditunjukkan kepada pengguna.
Bahasa Inggeris:
{"hello": "Hello World!"}
Π€ΡΠ°Π½ΡΡΠ·ΡΠΊΠΈΠΉ
{"hello": "Salut le Monde!"}
ΠΡΠ°Π±ΡΠΊΠΈΠΉ
{ "hello": "Ψ£ΩΩΨ§Ω Ψ¨Ψ§ΩΨΉΨ§ΩΩ "}
Anda boleh menambah bahasa lain dengan cara yang sama.
Kod utama
Pada ketika ini, anda perlu membuka fail App.js dan menambah import padanya:
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";
Selepas ini, fungsi tambahan dan pemalar ditambah yang akan berguna kemudian.
Kemudian anda perlu menambah pendengar acara pada componentDidMount(), elemen ini akan mendengar kemas kini dan memanggil handleLocalizationChange() apabila ia berlaku.
Kaedah handleLocalizationChange() mengaktifkan setI18nConfig() dan forceUpdate(). Ini adalah perlu untuk peranti Android kerana komponen mesti dipaparkan agar perubahan menjadi ketara.
Kemudian anda perlu mengalih keluar pendengaran daripada kaedah componentWillUnmount().
Akhir sekali, render() mengembalikan helo dengan menggunakan translate() dan menambahkan parameter utama padanya. Selepas langkah ini, aplikasi akan dapat "memahami" bahasa yang diperlukan dan memaparkan mesej di dalamnya.
Pelancaran aplikasi
Sekarang adalah masa untuk menyemak cara terjemahan berfungsi.
Mula-mula, kami melancarkan aplikasi dalam simulator atau emulator dengan menaip
$ react-asli run-ios
$ react-native run-android
Ia akan kelihatan seperti ini:
Kini anda boleh cuba menukar bahasa kepada bahasa Perancis dengan melancarkan aplikasi.
Kita buat perkara yang sama dengan bahasa Arab, tiada bezanya.
Setakat ini baik.
Tetapi apa yang berlaku jika anda memilih bahasa rawak yang tiada terjemahan dalam aplikasi?
Ternyata tugas findBestLanguage adalah untuk menyediakan terjemahan optimum daripada semua yang tersedia. Akibatnya, bahasa lalai akan dipaparkan.
Kami bercakap tentang tetapan telefon. Sebagai contoh, dalam emulator iOS anda boleh melihat susunan bahasa.
Jika bahasa yang dipilih bukan bahasa pilihan, findBestAvailableLanguage kembali tidak ditentukan supaya bahasa lalai ditunjukkan.
Bonus
react-native-localize mempunyai API yang menyediakan akses kepada sejumlah besar elemen bahasa. Sebelum anda mula bekerja, Perlu menyemak dokumentasi.
Penemuan
Aplikasi ini boleh dibuat berbilang bahasa tanpa sebarang masalah. React-native-localize ialah pilihan hebat yang membolehkan anda mengembangkan pangkalan pengguna apl anda.