react-i18next没有在使用create-react-app创建的React应用程序中加载json翻译文件

时间:2017-05-10 16:32:05

标签: reactjs webpack i18next react-i18next

我使用create-react-app

创建了一个React应用程序

我想实现翻译,我发现了react-i18next

安装完所需的软件包后,我设置了i18n.js配置文件:

import i18n from 'i18next';
import LanguageDetector from 'i18next-browser-languagedetector';
import XHR from 'i18next-xhr-backend';

i18n
    .use(XHR)
    .use(LanguageDetector)
    .init({
      debug: true,
      lng: 'en',
      nsSeparator: false,
      keySeparator: false,
      fallbackLng: false,
      backend: {
        loadPath: 'locales/{{lng}}/{{ns}}.json'
      }
    });


export default i18n;

我收到此错误:i18next::backendConnector: loading namespace translation for language en failed failed parsing locales/en/translation.json to json

这是因为webpack找不到json文件而是返回index.html文件内容:

enter image description here

2 个答案:

答案 0 :(得分:6)

我不确定您放置区域设置文件的位置,但我看到两个问题:

  1. 您已指定相对网址,因此您需要加载/kiosk/parents/locales而不是/locales。您需要在加载路径的开头添加斜杠。

  2. 要创建React App以提供静态文件,您需要将它们放入public文件夹。这在用户指南中有更详细的描述。因此,请确保locales位于项目根目录的public文件夹中。

  3. 希望这有帮助!

答案 1 :(得分:4)

以防万一有人像我一样需要这个:

如果您碰巧在 package.json 文件中更改了主页路径,如下所示:

...
    "homepage": "/tom/",
...

您还需要像这样将这部分添加到 i18n 中:

i18n
    .use(XHR)
    .use(LanguageDetector)
    .init({
      debug: true,
      lng: 'en',
      nsSeparator: false,
      keySeparator: false,
      fallbackLng: false,
      backend: {
        loadPath: '/tom/locales/{{lng}}/{{ns}}.json'
      }
    });


export default i18n;