i18n在函数中翻译文本

时间:2020-02-17 15:50:15

标签: reactjs i18next react-i18next

我在翻译组件外部的某些错误消息时遇到了问题。

这是我的i18n设置

const languageDetector = {
  type: 'languageDetector',
  async: true,
  detect: (cb: (baseLanguage: string) => void) => {
    let prevLanguage: string;
    store.subscribe(() => {
      const selectBaseLanguage = makeSelectBaseLanguage();
      const baseLanguage = selectBaseLanguage(store.getState());
      if (baseLanguage !== prevLanguage) {
        prevLanguage = baseLanguage;
        cb(baseLanguage);
      }
    });
  },
  init: () => {},
  cacheUserLanguage: () => {},
};

i18n
  .use(languageDetector)
  .use(initReactI18next) // passes i18n down to react-i18next
  .init({
    debug: true,
    resources: languagesResources,
    // language to use if translations in user language are not available.
    fallbackLng: defaultLanguage,
    interpolation: {
      escapeValue: false, // not needed for react as it escapes by default
    },

    react: {
      wait: false,
      useSuspense: false,
    },
  });

我必须到达此文件中的错误代码----> httpErrors: en_HttpError

路径文件:@config/locales/languageConfig

export const languagesResources = {
  en: { ...en, httpErrors: en_HttpError },
  tr: { ...tr, httpErrors: tr_HttpError },
};

这是function*,在这里我需要进行介绍:

路径文件:@config/utils/helpers

export function* _handleFetchError(error: any) {
  const { httpStatus, httpDescriptions, errorCode, errorDescription } = error;
  console.log('!!! Start Error Handler !!!:', httpStatus, httpDescriptions, errorCode, errorDescription);

  const test = i18n.t('en_HttpError');

  yield put(sagaShowFullScreenOverlay(GenericOverlay, errorModal));
}

现在,const test仅产生未定义的错误,

如何在没有未定义错误的情况下基于我收到的errorCode值获得正确的交易?

1 个答案:

答案 0 :(得分:3)

我需要有关您的错误的更多信息,但您可能想要执行以下操作: i18next Fallback。 因此,您可以显示一条取决于httpStatus响应的消息,例如error.404Página no encontrada

考虑到您的i18n.t函数正在等待文本键来注册翻译。

在我的简单情况下:

i18n.init({
    fallbackLng: {
        default: ['es'],
    },
    resources: {
        es: {
            common: {
                Name: 'Nombre',
....

然后,我可以i18n.t('Name')来获得'Nombre'