expo-localization 및 i18n-js로 네이티브 프로젝트 반응

Jan 04 2021

현재 장치의 시스템 언어에 따라 현지화를 구현하려고하지만 필요한대로 작동하지 않습니다.

예를 들어 엑스포 문서에서 똑같은 코드를 따랐습니다. 버튼 [MISSING "EN-GB.LOGIN" TRANSLATION]의 경우 LOGIN.

내 코드는 다음과 같습니다.

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

그래서 위의 코드 대신 다음과 같이하기로 결정했습니다.

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

답변

1 HendEl-Sahli Jan 05 2021 at 14:17

하려고한다면 console.log(Localization.locale)... 그냥 en(키로 i18n.translations예상되는 i18n)이 아닐 것입니다 en_countryCode. ... 형태가 될 것입니다.

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