Phản ứng dự án gốc với bản địa hóa triển lãm và i18n-js

Jan 04 2021

tôi hiện đang cố gắng triển khai bản địa hóa tùy thuộc vào ngôn ngữ hệ thống của thiết bị nhưng có điều gì đó không hoạt động như yêu cầu.

Tôi đã làm theo cùng một đoạn mã trên tài liệu hội chợ, chẳng hạn. cho nút tôi có tôi tiếp tục nhận được [MISSING "EN-GB.LOGIN" TRANSLATION]thay vì LOGIN.

Đây là mã của tôi:

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

Vì vậy, thay vì mã ở trên, tôi quyết định sử dụng mã này:

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

Trả lời

1 HendEl-Sahli Jan 05 2021 at 14:17

Nếu bạn cố gắng console.log(Localization.locale)... nó sẽ không chỉ là en(chìa khóa được i18n.translationsmong đợi bởi i18n) ... nó sẽ ở dạng en_countryCode... vì vậy bạn phải cắt phần đó

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