Bereaksi proyek asli dengan expo-localization dan i18n-js

Jan 04 2021

Saya sedang mencoba menerapkan pelokalan bergantung pada bahasa sistem perangkat tetapi ada sesuatu yang tidak berfungsi sebagaimana yang diperlukan.

Saya mengikuti kode yang sama persis pada dokumentasi pameran, misalnya. untuk tombol yang saya miliki, saya terus mendapatkan [MISSING "EN-GB.LOGIN" TRANSLATION]alih-alih LOGIN.

Ini kode saya:

welcomeScreen.js

import * as Localization from 'expo-localization';
import i18n from 'i18n-js';

i18n.translations = {
en: { login: 'LOGIN'},
ar: { login: 'تسجيل الدخول'},
};

i18n.locale = Localization.locale;
i18n.fallbacks = true;

function WelcomeScreen() {
return (

<Button
      title={i18n.t('login')}
    />
)}

Jadi, alih-alih kode di atas, saya memutuskan untuk menggunakan ini:

i18n.js

import i18n from 'i18n-js';
import * as Localization from 'expo-localization';
import ar from './locales/ar';  
import en from './locales/en';

i18n.translations = {  
'en': en,
'ar': ar,
};

i18n.locale = Localization.locale.search(/-|_/) !== -1? 
Localization.locale.slice(0, 2): Localization.locale;

i18n.fallbacks = true;

export default i18n; 

en.js

const en = { 
'SignUp':{
SignUp:"Sign Up"
}}

ar.js

const ar = {
'SignUp':{
SignUp:"الاشتراك"
}}

SignUpScreen.js

import I18n from '../config/i18n';

function RegisterScreen(props) {
return(
<Button title={I18n.t('SignUp.SignUp')}
)}

Jawaban

1 HendEl-Sahli Jan 05 2021 at 14:17

Jika Anda mencoba console.log(Localization.locale)... itu tidak akan hanya en(kunci yang i18n.translationsdiharapkan oleh i18n) ... itu dalam bentuk en_countryCode... jadi Anda harus memotong bagian itu

  i18n.locale = Localization.locale.search(/-|_/) !== -1
    ? Localization.locale.slice(0, 2)
    : Localization.locale;