react-native - 在 React Native 中的数组或对象内部时,i18n 无法正确

我正在尝试使用 i18n-js 将一些字符串翻译成其他语言。如果我的代码是普通代码,它就可以工作。例如:

//Displays "Something" (no quotes) where I want it
<Text> translate("Something"); </Text>

但是如果我把它放在一个数组或对象中,然后稍后调用它,它就会停止工作并显示一条丢失的消息,而不是我想要翻译的文本。例如:

const messages = {
    something: translate("Something"),
    // other translations...
}

// later on
// Displays "[missing "en.Something" translation]" (no quotes) where I want it
<Text> messages.something </Text>

以下是我的翻译功能代码,以及 i18n 的配置。我正在使用 lodash-memoize,但这与问题无关。我已经检查过传递给 i18n.t() 的文本是相同的(包括类型),无论它是在普通代码中还是在数组中,但它仍然没有返回正确的东西。我写了一些错误检查以避免在屏幕上显示丢失的消息,但这仍然不能解决它找不到翻译的问题。

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

export const translate = memoize(
  (key, config) => {
    text = i18n.t(key, config)
    return text
  },
  (key, config) => (config ? key + JSON.stringify(config) : key)
);

export 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;
};

我不知道该去哪里。任何建议将不胜感激!

最佳答案

同样的问题,解决方法是从函数内部返回数组/对象:

不工作

export const translations = [i18.t('path')]

作品

export function getTranslations() {
  const translations = [i18.t('path')]
  return translations
}

关于react-native - 在 React Native 中的数组或对象内部时,i18n 无法正确翻译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64455414/

相关文章:

reactjs - 如何始终覆盖具有不确定后缀的 JSS 样式?

r - 以编程方式将 R Shiny 应用程序作为后台作业启动

javascript - 从 MapBox GL JS 中的聚类中排除某些功能

reactjs - 无法查询类型 "x"上的字段 "y"

ios - 带有 iOS 14 设备的 Xcode 10 - 尝试与此设备通信时遇到错误。 (该服务

reactjs - 如何更改点击 react 的类(class)?

python-3.x - python 中的 sys.exit 给出一个 SystemExit 错误

dart - Dart 中的不同流

hyperledger-fabric - super 账本结构 2.0 : Chaincode co

apache-spark - 无法使用 Apache Hudi 编写非分区表