【问题标题】:Missing translation problem with react-native-localize even though the translation exist即使翻译存在,react-native-localize 也缺少翻译问题
【发布时间】:2020-01-30 15:02:10
【问题描述】:

即使翻译退出,我也有翻译缺失的问题,

const translationGetters = {
  en: () => require('./translations/en.json'),
  de: () => require('./translations/de.json'),
};

const translate = memoize(
  (key, config) => i18n.t(key, config),
  (key, config) => (config ? key + JSON.stringify(config) : key),
);

const setI18nConfig = () => {
  // fallback if no available language fits
  const fallback = {languageTag: 'en', isRTL: false};

  const {languageTag, isRTL} =
    RNLocalize.findBestAvailableLanguage(Object.keys(translationGetters)) ||
    fallback;

  // clear translation cache
  translate.cache.clear();
  // update layout direction
  I18nManager.forceRTL(isRTL);
  // set i18n-js config
  i18n.translations = {[languageTag]: translationGetters[languageTag]()};
  i18n.locale = languageTag;
};

const App = () => {
  handleLocalizationChange = () => {
    setI18nConfig()
      .then(() => this.forceUpdate())
      .catch(error => {
        console.error(error);
      });
  };

  useEffect(() => {
    setI18nConfig();

    RNLocalize.addEventListener('change', handleLocalizationChange);

    return () => {
      RNLocalize.removeEventListener('change', handleLocalizationChange);
    };
  }, []);

  return (
    <ThemeProvider theme={ThemeRed}>
      <AppContainer />
    </ThemeProvider>
  );
};

export default App;

在主屏幕中

import i18n from 'i18n-js';

const HomeScreen = ({...props}) => {
  return (
    <SafeAreaView style={styles.mainView}>
      <Text style={styles.welcomeText}>{i18n.t('welcome')}</Text>
   </SafeAreaView>
  );
};

export default HomeScreen;

谁能帮忙看看我做错了什么。

任何帮助将不胜感激。

【问题讨论】:

  • 您找到解决方案了吗?我面临着同样的问题。
  • 我也有同样的问题 +1
  • 同样的问题。你能解决这个问题吗?

标签: react-native ecmascript-6


【解决方案1】:

我认为在翻译过程中必须在主屏幕中导入translate 函数并在主屏幕/任何屏幕中使用{translate('home')} 而不是i18n.t()

【讨论】:

    【解决方案2】:

    两天前我回答了一个非常相似的问题:How to use setLocale within i18n-js?

    我没有使用react-native-localize,而是expo-localization,但我不认为这是个问题。你仍然像我一样使用i18n-js,所以它可能适用。

    【讨论】:

    猜你喜欢
    • 2021-04-15
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 2018-11-25
    • 2015-03-25
    • 2016-12-28
    • 1970-01-01
    相关资源
    最近更新 更多