ตอบสนองโครงการเนทีฟด้วย expo-localization และ i18n-js
ขณะนี้ฉันกำลังพยายามใช้การแปลเป็นภาษาท้องถิ่นโดยขึ้นอยู่กับภาษาระบบของอุปกรณ์ แต่มีบางอย่างไม่ทำงานตามต้องการ
ฉันทำตามรหัสเดียวกันทุกประการในเอกสารงานแสดงสินค้าเช่น สำหรับปุ่ม i มี i ให้รับแทน[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
ถ้าคุณพยายามconsole.log(Localization.locale)
... มันจะไม่เป็นเพียงen
(กุญแจที่i18n.translations
คาดหวังโดยi18n
) ... มันจะอยู่ในรูปแบบของen_countryCode
... ดังนั้นคุณต้องหั่นส่วนนั้น
i18n.locale = Localization.locale.search(/-|_/) !== -1
? Localization.locale.slice(0, 2)
: Localization.locale;