i18next 在没有翻译文件时得到 404 响应

Posted

技术标签:

【中文标题】i18next 在没有翻译文件时得到 404 响应【英文标题】:i18next get 404 response when there is no translation file 【发布时间】:2021-12-19 21:52:40 【问题描述】:

我正在使用i18next-http-backend 获取翻译。

翻译文件:

en.json
pt.json
pt-BR.json

这是我的配置:

.init(
  fallbackLng: 'en',
  supportedLngs: ['en', 'pt', 'pt-BR'],
  nonExplicitSupportedLngs: true,

  backend: 
    backends: [
      LocalStorageBackend, // primary
      HttpBackend, // fallback
    ],
    backendOptions: [
      
        prefix: 'i18next_res_',
        defaultVersion: version,
      ,
      
        loadPath: '$some-path/ns/lng.json',
        addPath: '$some-path/ns/lng',

        queryStringParams:  v: version ,
      ,
    ],
  ,
)

如果浏览器语言是英语(美国)en-US,我会收到 404 Not Found 错误,然后会加载 en

当我将load: 'languageOnly' 添加到配置时,没有404,但在这种情况下无法加载pt-BR 语言。而是加载了 pt

我查看了文档,但没有找到修复此行为的选项。

【问题讨论】:

为什么 en-US 的 404 对您来说是个问题? 我想有一个额外的错误请求不是很好的行为。 【参考方案1】:

“i18next”库开发者的评论:

"所以如果没有 en-US,但是有 en 并且您使用 load: 'all' 或 no load 选项,则将加载 en 资源。但在此之前,i18next 会尝试获取 en-US如果没有 en-US 资源,您将看到 404...

如果您不喜欢“看到”那些 404 请求,则需要在 supportedLngs 选项中列出所有语言,并且不要设置 nonExplicitSupportedLngs: true

换句话说:如果你使用 nonExplicitSupportedLngs: true 你不能阻止所有的 404"

【讨论】:

以上是关于i18next 在没有翻译文件时得到 404 响应的主要内容,如果未能解决你的问题,请参考以下文章

使用 i18next 进行反应生产构建会导致翻译仅显示字符串

如何禁用 i18next translation.json 文件的缓存?

如何在 Next.js 中设置 i18n 翻译的 URL 路由?

i18next 不能在 Cordova iOS 6.1.0 上翻译

如何使用 i18next?翻译问题

使用 i18next(占位符,值)翻译自定义属性