Vis*_*hal 6 javascript react-native react-i18next
我是反应本机新手,我正在尝试从用户的设备获取当前区域设置。目前,我的应用程序有两个版本:法语和英语。当我更改后备语言时,它工作得很好,我确实有该应用程序的两个版本。但我无法直接从设备更改语言。
我们可以手动更改,但是如果我们在设备上设置了法语,那么我们无法直接获取法语。
import i18next from 'i18next';
import {initReactI18next} from 'react-i18next';
const languageDetector = {
type: 'languageDetector',
async: true,
detect: cb => cb('en'),
init: () => {},
cacheUserLanguage: () => {},
};
i18next
.use(languageDetector)
.use(initReactI18next)
.init({
fallbackLng: 'en',
debug: true,
resources: {
en: {
translation: {
hello: 'Hello world',
change: 'Change language',
},
},
sv: {
translation: {
hello: 'Hallo!',
change: 'Goedemorgen',
},
},
},
});
export default i18next;
Run Code Online (Sandbox Code Playgroud)
应用程序.js
import React from 'react';
import { Text, View, TouchableOpacity } from 'react-native';
import { useTranslation } from 'react-i18next';
import './src/Traslations'
export default function App() {
const { t, i18n } = useTranslation();
return (
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
<Text style={{ fontSize: 20, marginBottom: 20 }}>{t('hello')}</Text>
<Text style={{ fontSize: 20, marginBottom: 20 }}>{t('change')}</Text>
<TouchableOpacity style={{backgroundColor: 'pink'}} onPress={() => i18n.changeLanguage(i18n.language === 'nl' ? 'en' : 'nl')}>
<Text>{t('change')}</Text>
</TouchableOpacity>
</View>
);
}
Run Code Online (Sandbox Code Playgroud)
您languageDetector用作en语言fallback...
确保您在设备中选择的语言前缀是sv<<-- 您在设置中拥有的密钥i18n...
const languageDetector = {
type: 'languageDetector',
async: true,
detect: cb => cb('en'), // <<---- here
init: () => {},
cacheUserLanguage: () => {},
};
Run Code Online (Sandbox Code Playgroud)
反而
您想要传递 current-device-lang
import { Platform, NativeModules, Dimensions } from 'react-native';
const getDeviceLang = () => {
const appLanguage =
Platform.OS === 'ios'
? NativeModules.SettingsManager.settings.AppleLocale ||
NativeModules.SettingsManager.settings.AppleLanguages[0]
: NativeModules.I18nManager.localeIdentifier;
return appLanguage.search(/-|_/g) !== -1
? appLanguage.slice(0, 2)
: appLanguage;
};
detect: async callback => {
const deviceLang = getDeviceLang();
callback(appLanguage);
},
Run Code Online (Sandbox Code Playgroud)
可以在此处找到更多详细信息以及工作示例...
| 归档时间: |
|
| 查看次数: |
16224 次 |
| 最近记录: |