Yerel projeye expo-yerelleştirme ve i18n-js ile tepki verin

Jan 04 2021

Şu anda aygıtın sistem diline bağlı olarak yerelleştirmeyi uygulamaya çalışıyorum ancak bir şey gerektiği gibi çalışmıyor.

Expo dokümantasyonunda tam olarak aynı kodu takip ettim, örneğin. [MISSING "EN-GB.LOGIN" TRANSLATION]yerine almaya devam ettiğim düğme için LOGIN.

İşte kodum:

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')}
    />
)}

Bu yüzden yukarıdaki kod yerine şuna karar verdim:

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')}
)}

Yanıtlar

1 HendEl-Sahli Jan 05 2021 at 14:17

Eğer denersen console.log(Localization.locale)... bu sadece olmayacak en( i18n.translationsbeklenen anahtar i18n) ... şeklinde olacak en_countryCode... bu yüzden o kısmı dilimlemelisin

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