react i18next单数和复数的问题,始终返回复数值

n3h0vuf2  于 2023-05-28  发布在  React
关注(0)|答案(1)|浏览(225)

我对i18next有一些困惑。我用英语的时候完全正确。但是当我把语言改为zh时,它总是在值是单数的情况下返回复数值。
我尝试升级依赖项,更改配置,但仍然不起作用。
我在下面的链接中提供了一个示例代码。
https://codesandbox.io/s/react-i18next-plurals-forked-jgulw6?file=/public/locales/zh/translation.json
配置

i18n
  .use(Backend)
  .use(initReactI18next)
  .init({
    ns: ["common"],
    defaultNS: "common",
    resources,
    fallbackNS: "en",
    supportedLngs: ["en", "zh"],
    interpolation: {
      escapeValue: false
    },
    react: {
      bindI18n: "loaded languageChanged"
    },
    returnEmptyString: false,
    nsSeparator: false
  });

export default i18n;

依赖项版本:

i18next             21.3.1
intl-pluralrules    1.3.1
react               17.0.0
react-i18next.      11.12.0
6yjfywim

6yjfywim1#

这不是一个bug,而是一个特性

不同的语言(地区)有不同的适用复数后缀。
只能使用允许的后缀或到另一个(如果存在)命名空间的i18 n回退。
阅读https://www.i18next.com/translation-function/plurals并使用(由i18 next提供,您可以在上一页找到链接)https://jsfiddle.net/6bpxsgd4来检查您想要的语言(区域设置)支持哪些后缀。
例如:

  • 英语(简体):_one,_other;
  • 中文(zh):_其他;
  • 俄语(ru):_one,_few,_many.

因此,在提供翻译密钥时,您需要牢记这一点。当我尝试使用“month_one”和“month_other”表示“en”和“ru”时,我也遇到了类似的问题:

这一切都是因为“ru”不支持“_other”后缀。当我只使用“month”和“month_one”键时,问题就解决了。
对于你的情况-中文(zh)只支持“_other”后缀(或者根本不使用后缀):

{
  "test": "測試",
  "month_one": "{{ count }} 月" // won't work, because there is no "_one" for "zh"
  "month_other": "{{ count }} 月s" // or "month": "{{ count }} 月s"
}

相关问题