没有i18nKey属性的Trans组件不会渲染翻译

时间:2019-09-29 12:10:48

标签: react-i18next

我有一个使用Trans组件执行翻译的应用。我没有在Trans组件上声明i18nKey属性,而只是使用Trans组件内的内容来生成密钥,但是即使存在密钥,Trans也不会产生翻译除非组件上存在i18nKeyt中的useTranslation函数可以正确转换其参数,但是在此示例中,Trans组件不会转换为法语。 github here上的完整项目在我的应用中的示例:

index.jsx

import React from 'react';
import ReactDOM from 'react-dom';
import { I18nextProvider } from 'react-i18next';
import URLSearchParams from '@ungap/url-search-params';
import 'web/js/sentry';
import 'react-toastify/dist/ReactToastify.css';

import { Root } from 'web/js/page/root';

import i18n from 'common/i18n';

if (!window.URLSearchParams) {
  window.URLSearchParams = URLSearchParams;
}

ReactDOM.render(
  <I18nextProvider i18n={i18n}>
    <Root />
  </I18nextProvider>,
  document.querySelector('.projectroot'),
);

topic / hangul / index.jsx

import React from 'react';
import { Trans } from 'react-i18next';

import { Utterance } from 'web/js/application-hook/utterance';

import './style.scss';

export function Hangul() {
  return (
    <div styleName='root'>
      <section styleName='section'>
        <Trans>
          <Utterance text='한글'>한글</Utterance> and <Utterance text='조선글'>조선글</Utterance> are the respective names of the contemporary Korean writing system used in South Korea and North Korea.
        </Trans>
        &nbsp;
        <Trans>
          <Utterance text='훈민정음'>훈민정음</Utterance>, the original name of the writing system, was introduced and promoted in 1446 by Sejong the Great.
        </Trans>
      </section>
    </div>
  );
}

common / i18n.js

import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';

import fr from 'common/i18n/fr/translation.json';
import { SUPPORTED_LANGUAGE_IDS } from 'common/models';

i18n
.use(initReactI18next)
.init({
  preload: SUPPORTED_LANGUAGE_IDS,
  fallbackLng: 'en',
  initImmediate: false,
  returnEmptyString: false,
  resources: {
    fr: {
      translation: fr
    }
  },
  interpolation: {
    escapeValue: false
  },
  react: {
    hashTransKey: function(defaultValue) {
      console.log('missing key', defaultValue);

      return defaultValue;
    },
  }
});

export default i18n;

common / i18n / fr / translation.json

{
  "The Korean Writing System": "Le système d'écriture coréen",
  "<0>한글</0> and <2>조선글</2> are the respective names of the contemporary Korean writing system used in South Korea and North Korea.": "<0>한글</0> et <2>조선글</2> sont les noms respectifs du système d'écriture coréen contemporain utilisé en Corée du Sud et en Corée du Nord.",
  "<0>훈민정음</0>, the original name of the writing system, was introduced and promoted in 1446 by Sejong the Great.": "<0>훈민정음</0>, le nom original du système d'écriture, a été introduit et promu en 1446 par Sejong le Grand."
}

1 个答案:

答案 0 :(得分:0)

我发现了为什么会这样,在i18next的configuration options中,默认的keySeparator.,所以我所有包含.字符的文本都没有由于.充当keySeperator,因此可以正确计算翻译。