reactjs i18next警告或lint指示缺少语言键(不是fallbackLng)

nwsw7zdq  于 2023-01-12  发布在  React
关注(0)|答案(3)|浏览(203)

到目前为止,我的项目使用i18 next和react-i18 next取得了成功。没有涉及本地化或服务器端。
当前设置:

  • 默认后备语言(& F):恩
  • 其他语言:自由

**我想自动执行一些与错误检查相关的操作:

1.检查所有密钥是否已在每个定义的语言文件中翻译
2.在开发环境或lint中警告ci/cd。**
我试过使用以下选项执行1.:

saveMissing: true,
    saveMissingTo:"all",
    missingKeyHandler: (ng, ns, key, fallbackValue) => {
        console.log(ng, ns, key, fallbackValue)
    },

    // other options
    resources: {
        en: {
            translations: enTranslation,
        },
        fr: {
            translations: frTranslation,
        },
    },
    fallbackLng: 'en',
    ns: ['translations'],
    defaultNS: 'translations',

    interpolation: {
        formatSeparator: ',',
    },

    react: {
        wait: true,
    }

我以为如果我从我的French .json中删除了一个键(为了测试它是否工作),它会被记录下来,但它没有,只有当我删除两个键。
尝试其他解决方案:

  1. "eslint-plugin-i18n-json",但它没有检查我需要的内容,还没有找到正确的选项/config
    2.备选办法2.
    你有什么链接或解决方案可以帮助你吗?(除了那些涉及SaaS的)
osh3o9ms

osh3o9ms1#

虽然@tudor answer可以在eslint中使用javascript格式,但它不是. json格式。

    • 插件**:eslint插件i18n-json
    • 用途**:

1.将插件添加到. eslintrc
"extends": ["eslint:recommended", "plugin:i18n-json/recommended"],
1.将新规则添加到. eslintrc中,该规则应包含所有必需的键

"rules": {
    "i18n-json/identical-keys": [2, {
        "filePath": {
            "admin.json": "../../../../src/languages/en.json",
        }
    }],
}
    • 注意:**对于要求,我们需要返回4个文件夹(从node_modules/eslint-plugin-i18n-json/src/util/require-no-cache.js),以获得我们的翻译文件。

因为require会首先尝试从预定义的__dirname中解析,而require-no-cache.js的__dirname将是'node_modules/eslint-plugin-i18n-json/src/util。
1.添加一个新脚本到你的package.json中,它将检查所有的键是否都存在(对照2中的文件)。

script: {
    "lint:i18n": "eslint src/**/languages/*.json"
}

图片来源:www.example.comhttps://github.com/godaddy/eslint-plugin-i18n-json/issues/31#issuecomment-604636886

nukf8bse

nukf8bse2#

您可以使用https://github.com/godaddy/eslint-plugin-i18n-json#i18n-jsonidentical-keys。具体方法如下:
在eslintrc中添加以下内容:

module.exports = {
  extends: ["plugin:i18n-json/recommended"],
  rules: {
    "i18n-json/identical-keys": [
      2,
      {
        filePath: path.resolve("translations/en.json")
      }
    ]
  }
};

然后使用以下选项运行eslint:

eslint --fix --ext .json --format node_modules/eslint-plugin-i18n-json/formatter.js translations/

这里假设包含翻译的文件夹名为translations(您应该修改路径)。
下面是一个演示其工作原理的代码:https://codesandbox.io/s/friendly-minsky-9siu4
您可以使用终端运行npm run lint,并且可以使用translations/en.jsontranslations/de.json中的值来检查它是如何工作的。

oiopk7p5

oiopk7p53#

在我的用例中,我只是希望应用程序在特定环境中抛出一个错误,我在配置中添加了以下内容,它对我很有效。

saveMissing: true,
  missingKeyHandler: (ng, ns, key, fallbackValue) => {
    throw new Error(`Key not found ${key}, ${ng}, ${ns}, ${fallbackValue}`);
  },

希望能有所帮助
我对case的假设是,控制台日志语句不起作用,因为键存在于后备语言中。

相关问题