如何解决react native中的i18n-js:启动时未加载语言
我有一个支持多种语言的本机应用程序 (ios)。我目前面临一个奇怪的问题:当我打开应用程序时,一瞬间,我没有看到翻译,但我看到了一个错误:“缺少翻译......”。当在 json 文件中找不到翻译键(键值对)时,通常会出现此错误。就像我说的,这个错误只存在一瞬间,大约 500 毫秒后,翻译就会弹出。应用启动时翻译文件似乎没有正确加载。
此错误是最近几天以来的新错误,在此之前从未发生过。它也不会发生在 ios 模拟器上,而只会发生在我在设备上进行测试时。调试方案和发布方案都有这个问题。
我的语言文件如下所示:
// en.json
// { key: value }
{
"hello": "Hello","world": "World",...
}
这是我在 react-native 中的代码:
import React,{ useEffect } from 'react';
import { useSelector,useDispatch } from 'react-redux';
import { _setLanguage } from '../redux/Actions';
import _ from 'lodash';
import i18n from 'i18n-js';
import * as RNLocalize from "react-native-localize";
const translationGetters = {
'en': () => require('./translations/en.json')
};
export default useLanguage = (props) => {
const dispatch = useDispatch();
// get the stored language in the redux store (if set)
const _language = useSelector(state => state.data.config.language);
// translate function to memoize the language file
const translate = _.memoize(
(key,config) => i18n.t(key,config),(key,config) => (config ? key + JSON.stringify(config) : key)
);
// useEffect function loaded on start up to get the language from redux
// (if set) or from the device
// setLanguage() is called to load the correct language file
useEffect(() => {
if (_.isNull(_language)) {
const fallback = { languageTag: 'en' };
const { languageTag } = RNLocalize.findBestAvailableLanguage(Object.keys(translationGetters)) || fallback;
dispatch(_setLanguage({ language: languageTag }));
setLanguage(languageTag);
} else {
setLanguage(_language);
}
},[]);
// setLanguage()
// sets the language file
const setLanguage = (language) => {
translate.cache.clear();
i18n.translations = { ['en']: translationGetters['en'](),[language]: translationGetters[language]() };
i18n.locale = language;
i18n.defaultLocale = 'en';
i18n.fallbacks = true;
i18n.missingTranslation = () => (null);
dispatch(_setLanguage({ language }));
};
return {
setLanguage,language: _language,translate
};
};
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。