问题描述
我目前正在尝试根据设备的系统语言实现本地化,但有些东西没有按要求工作.
i am currently trying to implement localization depending on the system language of the device but something is not working as required.
我在世博会文档中遵循了完全相同的代码,例如.对于我有的按钮,我不断收到 [MISSING EN-GB.LOGIN";TRANSLATION]
而不是 LOGIN
.
I followed the exact same code on expo documentation, for eg. for the button i have i keep getting [MISSING "EN-GB.LOGIN" TRANSLATION]
instead of LOGIN
.
这是我的代码:
welcomeScreen.js
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')}
/>
)}
所以我决定用这个代替上面的代码:
So instead of the code above i decided to go with this:
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
SignUpScreen.js
import I18n from '../config/i18n';
function RegisterScreen(props) {
return(
<Button title={I18n.t('SignUp.SignUp')}
)}
推荐答案
如果你尝试 console.log(Localization.locale)
...它不会只是 en
code>(i18n
预期的 i18n.translations
中的键)......它以 en_countryCode
的形式......所以你必须切掉那部分
If you try to console.log(Localization.locale)
... it's not gonna be just en
(the key in i18n.translations
expected by i18n
) ... it'd in the form of en_countryCode
... so you have to slice that part
i18n.locale = Localization.locale.search(/-|_/) !== -1
? Localization.locale.slice(0, 2)
: Localization.locale;
这篇关于使用 expo-localization 和 i18n-js 反应原生项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!