Reagieren Sie auf ein natives Projekt mit Expo-Lokalisierung und i18n-js
Jan 04 2021
Ich versuche derzeit, die Lokalisierung abhängig von der Systemsprache des Geräts zu implementieren, aber etwas funktioniert nicht wie erforderlich.
Ich habe genau den gleichen Code in der Ausstellungsdokumentation befolgt, z. für den Knopf, den ich habe, bekomme ich immer [MISSING "EN-GB.LOGIN" TRANSLATION]
statt LOGIN
.
Hier ist mein Code:
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')}
/>
)}
Anstelle des obigen Codes habe ich mich für Folgendes entschieden:
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')}
)}
Antworten
1 HendEl-Sahli Jan 05 2021 at 14:17
Wenn Sie versuchen console.log(Localization.locale)
... es wird nicht nur en
(der Schlüssel, der von i18n.translations
erwartet wird i18n
) ... es würde in Form von en_countryCode
... sein, also müssen Sie diesen Teil in Scheiben schneiden
i18n.locale = Localization.locale.search(/-|_/) !== -1
? Localization.locale.slice(0, 2)
: Localization.locale;