【问题标题】:React native project with expo-localization and i18n-js使用 expo-localization 和 i18n-js 反应原生项目
【发布时间】:2021-01-04 11:07:16
【问题描述】:

我目前正在尝试根据设备的系统语言实现本地化,但有些东西没有按要求工作。

例如,我在世博会文档中遵循了完全相同的代码。对于我拥有的按钮,我不断收到[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; 

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

【问题讨论】:

    标签: react-native localization expo i18n-js


    【解决方案1】:

    如果你尝试console.log(Localization.locale) ...它不会只是eni18n.translations 中的键是i18n 所期望的)...它的形式是en_countryCode ...所以你必须切开那部分

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

    【讨论】:

    • 您好,感谢您回复我,试试这个。你建议我像上面的代码一样使用import i18n from 'i18n-js' 还是这个库import I18n from 'ex-react-native-i18n'
    • 我个人使用i18next
    • 它们有区别吗?
    • 如果我决定使用 i18next 是否需要对我的代码进行大量更改?
    • 我在弹出项目中工作......这与世博项目有点不同(我的意思是弹出项目让您在选择哪些模块方面有更大的灵活性)......我会说去可以与世博会顺利合作的那个..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    相关资源
    最近更新 更多