如何在 ReactJS 构建中包含 i18next 语言环境文件

Ros*_*hdy 1 deployment path reactjs webpack react-i18next

我搜索了很多帖子,但都没有解决我的构建问题。

我有两个主要问题

  1. 构建后不包含 /public/locale/xx/xxx.json 文件路径
  2. css 中使用的背景图片路径无法正常工作

结构如下所示:

my-app
  public
    images
      image.jpg
    locale
      xx
        xxx.json
  src
Run Code Online (Sandbox Code Playgroud)

和背景图片网址一样url(/images/image.jpg)

该 url 在开发人员上运行良好,但在生产/构建后,它是相对于/路径的,无论homepage设置如何package.json

语言环境文件也是如此。

PShomepage不会/,假设会/myapp/

我的 i18n 文件是这样的:

i18n
  use(Backend)
Run Code Online (Sandbox Code Playgroud)

我试图将后端设置设置为任何内容 ( __dirname | env.PUBLIC_URL,...etc),但没有任何效果。

这似乎是一个非常普遍的问题,因为我到处都发现了很多关于它的帖子,但是,在运行时如何正确设置相对路径并没有明确的答案 npm run build

如果您有知识,请为傻瓜式答案提供分步指南

Ros*_*hdy 5

我设法使用以下设置使其工作:

结构:

??? public
|  ??? locales
|  ??? ar
|  |  ??? errors.json
|  |  ??? general.json
|  |  ??? warnings.json
|  ??? en
|  |  ??? errors.json
|  |  ??? general.json
|  |  ??? warnings.json
??? src
|  ??? App.js
|  ??? i18n.js
Run Code Online (Sandbox Code Playgroud)

i18n.js

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

i18n
  // load translation using xhr -> see /public/locales
  .use(Backend)
  // detect user language
  .use(LanguageDetector)
  .init({
    fallbackLng: 'en',
    debug: false,
    defaultNS: 'general',
    ns: ['general', 'errors', 'warnings'],
    backend: {
      loadPath: `${window.location.pathname}locales/{{lng}}/{{ns}}.json`
    },
    load: 'unspecific',
    // special options for react-i18next
    // learn more: https://react.i18next.com/components/i18next-instance
    react: {
      wait: true
    }
  });

export default i18n;
Run Code Online (Sandbox Code Playgroud)

成分

根据需要为每个组件包含命名空间(除“ defaultNS”配置之外的任何内容)

class MyComponent extends React.Component{...}
export default withNamespaces('general', 'errors')(MyComponent)
Run Code Online (Sandbox Code Playgroud)