Phản ứng dự án gốc với bản địa hóa triển lãm và i18n-js
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
Nếu bạn cố gắng console.log(Localization.locale)
... nó sẽ không chỉ là en
(chìa khóa được i18n.translations
mong đợ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;