【问题标题】:How to include i18next locale files in ReactJS build如何在 ReactJS 构建中包含 i18next 语言环境文件
【发布时间】:2018-12-03 07:39:01
【问题描述】:

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

我有两个主要问题

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

结构如下:

my-app
  public
    images
      image.jpg
    locale
      xx
        xxx.json
  src

还有像url(/images/image.jpg)这样的背景图片网址,

该 url 在 dev 上运行良好,但在生产/构建之后,它相对于 / 路径,无论在 package.json 中设置的 homepage 是什么

语言环境文件也是如此。

PShomepage 不会是/,假设是/myapp/

我的 i18n 文件是这样的:

i18n
  use(Backend)

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

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

如果您有这方面的知识,请提供傻瓜分步指南之类的答案。

【问题讨论】:

  • 你找到解决办法了吗?
  • 其实我做了,我现在就贴出来

标签: reactjs webpack deployment path react-i18next


【解决方案1】:

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

结构:

├── public
|  ├── locales
|  ├── ar
|  |  ├── errors.json
|  |  ├── general.json
|  |  └── warnings.json
|  ├── en
|  |  ├── errors.json
|  |  ├── general.json
|  |  └── warnings.json
├── src
|  ├── App.js
|  ├── i18n.js

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;

组件

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

class MyComponent extends React.Component{...}
export default withNamespaces('general', 'errors')(MyComponent)

【讨论】:

  • 在 webpack 构建您的应用程序之后,您是否将您的公共文件夹包含在构建/分发中。我目前使用 webpack-copy-plugin。什么是'window.location.pathname',webpack 或服务器如何知道你的公共文件夹是什么
  • 您必须包含公用文件夹,这是您的 index.html 所在的位置。至于服务器(生产),路径名类似于https://www.example.com/。您可以通过在 chrome 中输入 URL 来验证您是否有权访问您的语言环境文件
猜你喜欢
  • 1970-01-01
  • 2019-08-04
  • 1970-01-01
  • 2020-09-26
  • 2020-01-10
  • 2021-08-14
  • 2011-09-17
  • 2018-05-07
  • 1970-01-01
相关资源
最近更新 更多