[英]How does one utilize the i18n template for eslint in Angular?
I would like to be able to utilize the eslint angular template that checks for i18n tags as shown here https://github.com/angular-eslint/angular-eslint/blob/master/packages/eslint-plugin-template/src/rules/i18n.ts and listed here https://github.com/angular-eslint/angular-eslint#readme , but there isn't really any helpful instruction on how to activate it or what needs to be put in the config to make it work.我希望能够使用 eslint angular 模板来检查 i18n 标签,如下所示https://github.com/angular-eslint/angular-eslint/blob/master/packages/eslint-plugin-template/src/ rules/i18n.ts并在此处列出https://github.com/angular-eslint/angular-eslint#readme ,但实际上并没有任何有用的说明来说明如何激活它或需要在配置中添加什么让它起作用。 I just need to know how to turn it "on" to start checking.
我只需要知道如何将其“打开”即可开始检查。 Any help would be appreciated.
任何帮助,将不胜感激。
Update:更新:
Here is an example of what I am trying (and failing) at doing:这是我正在尝试(并且失败)的示例:
In .eslintrc.json
, I am trying to add @angular-eslint/template/i18n:在
.eslintrc.json
中,我正在尝试添加@angular-eslint/template/i18n:
{
"root": true,
"ignorePatterns": [
"projects/**/*"
],
"overrides": [
{
"files": [
"*.ts"
],
"parserOptions": {
"project": [
"tsconfig.json" ],
"createDefaultProgram": true,
"tsconfigRootDir": "",
"ecmaVersion": 2017
},
"env": {
"es6": true
},
"extends": [
"plugin:@angular-eslint/ng-cli-compat",
"plugin:@angular-eslint/ng-cli-compat--formatting-add-on",
"plugin:@angular-eslint/template/process-inline-templates"
],
"rules": {
"arrow-body-style": 0,
"@typescript-eslint/naming-convention": [
"error",
{
"selector": "enumMember",
"format": [
"camelCase",
"UPPER_CASE"
]
}
],
"@typescript-eslint/consistent-type-definitions": "error",
"@typescript-eslint/dot-notation": "off",
"@typescript-eslint/explicit-member-accessibility": [
"off",
{
"accessibility": "explicit"
}
],
"@typescript-eslint/no-non-null-assertion": "off",
"brace-style": [
"error",
"1tbs"
],
// note you must disable the base rule as it can report incorrect errors
"no-shadow": "off",
"@typescript-eslint/no-shadow": [
"error"
]
}
},
{
"files": [
"*.html"
],
"extends": [
"plugin:@angular-eslint/template/recommended"
],
"rules": {
"@angular-eslint/template/i18n": [
"warn",
{ "items": ["check-id", "check-text"] }
]
}
}
]
}
When I do this, I get the error:当我这样做时,我收到错误:
An unhandled exception occurred: .eslintrc.json#overrides[1]:
Configuration for rule "@angular-eslint/template/i18n" is invalid:
Value {"items":["check-id","check-text"],"checkId":true,"checkText":true,"checkAttributes":true,"ignoreAttributes":["charset","class","color","colspan","fill","formControlName","height","href","id","lang","src","stroke","stroke-width","style","svgIcon","tabindex","target","type","viewBox","width","xmlns"]} should NOT have additional properties.
If I change the name from @angular-eslint/template/i18n to template-i18n, it runs and scans all of my.html files, but returns an error for each one that says 1:1 error Definition for rule 'template-i18n' was not found template-i18n
如果我将名称从 @angular-eslint/template/i18n 更改为 template-i18n,它会运行并扫描所有 my.html 文件,但会为每个显示
1:1 error Definition for rule 'template-i18n' was not found template-i18n
的文件返回一个错误1:1 error Definition for rule 'template-i18n' was not found template-i18n
Hello I updated per maplion's comments您好,我根据 maplion 的评论进行了更新
Assuming its the i18n build and try to help you setup the build for localization ie i18n.假设它是 i18n 构建并尝试帮助您设置本地化构建,即 i18n。 Try these two options, the first is to configure your
build
with the i18n build.尝试这两个选项,第一个是使用 i18n 构建配置您的
build
。 Second, is use another lib i18n-Lint
which is easier IMHO.其次,使用另一个更容易恕我直言的 lib
i18n-Lint
。 Short answer this enables the template you want to use "template-i18n": [true, "check-id", "check-text"]
简短的回答这使您可以使用
"template-i18n": [true, "check-id", "check-text"]
First setup you schema on what you want to check, ie just id
, strings
or both
in .eslintrc.json
:首先在您想要检查的内容上设置您的架构,即
.eslintrc.json
中的id
、 strings
或both
:
// per MapLions feedback, i updated the full section, mine is different
{
// 1 - tell it which files you want
"files": [
"*.html"
],
// 2 - include this plugin
"extends": [
"plugin:@angular-eslint/template/recommended"
],
"rules": {
"@angular-eslint/template/i18n": [
"warn",
{ // 3 - setup your rules here
"checkId": true,
"checkText": true,
"checkAttributes": true
}
]
}
}
...
Then
enable
it like so.然后像这样
enable
它。
"template-i18n": [true, "check-id", "check-text"]
check-id
Makes sure i18n attributes have ID specified check-id
确保 i18n 属性具有指定的 IDcheck-text
Makes sure there are no elements with text content but no i18n attribute check-text
确保没有包含文本内容但没有 i18n 属性的元素in your rules setup up "@angular-eslint/template/i18n": "warn",
then in your build you can setup the extract or tests在您的规则中设置
"@angular-eslint/template/i18n": "warn",
然后在您的构建中,您可以设置提取或测试
{
"name": myapp...",
"version": "..",
"angular-cli": {},
"scripts": {
"------------- your app -----------": "",
"start": "ng serve --configuration=test --proxy-config proxy.conf.json --live-reload false",
./node_modules/@angular/cli/bin/ng build --configuration=prod-en-us",
"build:prod:fr-ca": "node --max_old_space_size=10240 ./node_modules/@angular/cli/bin/ng build --configuration=prod-fr-ca",
"build:prod:multilang": "npm run build:prod:en-us & npm run build:prod:fr-ca",
"build:debug": "node --max_old_space_size=10240 ./node_modules/@angular/cli/bin/ng build --configuration=prod-en-us --verbose",
"extract-i18n-html": "ng xi18n --output-path locale",
"extract-i18n-ts": "ngx-extractor --input src/**/*.ts --format=xlf --out-file=src/locale/messages.xlf",
"extract-i18n": "npm run extract-i18n-html & npm run extract-i18n-ts",
"merge-i18n": "xliffmerge --profile xliffmerge.json -v",
"i18n": "./node_modules/.bin/ng-xi18n --i18nFormat=xlf",
"lint": "tslint \"src/**/*.ts",
....
"------------- setup build for yourComponents -----------": "",
"start:...",
"build:...",
"build:myComponents:prod:multilang": "npm run build:myComponents:prod:en-us & npm run build:myComponents:prod:fr-ca",
"extract-i18n-html:myComponents": "ng xi18n myComponents --output-path src/locale",
"extract-i18n-ts:myComponents": "ngx-extractor --input projects/myComponents/**/*.ts --format=xlf --out-file=projects/myComponents/src/locale/messages.xlf",
"extract-i18n:myComponents": "npm run extract-i18n-html:myComponents & npm run extract-i18n-ts:myComponents",
"merge-i18n:myComponents": "xliffmerge --profile projects/myComponents/xliffmerge.json -v",
...
"------------- your tests -----------": "",
"test": "ng test",
...
},
"private": true,
"dependencies": {
"@angular/animations": "7.0.2",
...
"@ngx-translate/i18n-polyfill": "0.2.0",
...
},
"devDependencies": {
"@angular-devkit/build-angular": "0.10.3",
...
"ngx-i18nsupport": "0.16.2",
....
}
}
Option 2: i18n-lint选项 2: i18n-lint
Use https://www.npmjs.com/package/i18n-lint使用https://www.npmjs.com/package/i18n-lint
CLI
Installing i18n-lint globally via npm gives you the i18n-lint binary.
$ npm install -g jwarby/i18n-lint
$ i18n-lint --help
Usage: i18n-lint [OPTIONS] <file ...>
Options:
-h, --help output usage information
-V, --version output the version number
-a, --attributes <attributes> Comma-separated list of HTML attributes to lint (default: 'alt,title')
-i, --ignore-tags <tags> Comma-separated list of names of tags to ignore whilst linting (default: 'script,style')
-t, --template-delimiters <delimiters> Template delimiters used in source files. For example, Mustache-like templating languages should use ''
-r, --reporter <reporter> Specify which reporter to output results with
--exclude <exclusion patterns> Comma-separated list of glob patterns to ignore, e.g. "/test_subdir/,ignored.html"
--color Force colored output
--no-color Disable colored output
Use `man i18n-lint` for more information
API
i18n-lint can be used in other projects as a library. After installing, simply require the module.
$ npm install --save jwarby/i18n-lint
var i18nlint = require('i18n-lint');
// Lint a file
var errors = i18nlint('myfile.html', {
// ... options ...
});
// Lint a string
var errors = i18nlint.scan('<div>Untranslated String!</div>', {
// ...options...
You can then use it然后你可以使用它
CLI
After installing, you should be able to type i18n-lint into a terminal.
# Display version and exit
$ i18n-lint --version
# Lint myfile.html
$ i18n-lint myfile.html
# Lint all HTML files using a glob pattern
$ i18n-lint views/**/*.html
# Set options using --<option name> <optionValue>
$ i18n-lint --some-option "someValue" views/**/*.html
Mr. Transformer set me on the right track and I was able to get his Option 1 to work with the following in.eslintrc.json: Transformer 先生让我走上了正轨,我能够让他的选项 1 与以下 in.eslintrc.json 一起工作:
...
"rules": {
"@angular-eslint/template/i18n": [
"warn",
{
"checkId": true,
"checkText": true,
"checkAttributes": true
}
]
}
...
Here's the full.eslintrc.json for reference:这是 full.eslintrc.json 供参考:
{
"root": true,
"ignorePatterns": [
"projects/**/*"
],
"overrides": [
{
"files": [
"*.ts"
],
"parserOptions": {
"project": [
"tsconfig.json" ],
"createDefaultProgram": true,
"tsconfigRootDir": "",
"ecmaVersion": 2017
},
"env": {
"es6": true
},
"extends": [
"plugin:@angular-eslint/ng-cli-compat",
"plugin:@angular-eslint/ng-cli-compat--formatting-add-on",
"plugin:@angular-eslint/template/process-inline-templates"
],
"rules": {
"arrow-body-style": 0,
"@typescript-eslint/naming-convention": [
"error",
{
"selector": "enumMember",
"format": [
"camelCase",
"UPPER_CASE"
]
}
],
"@typescript-eslint/consistent-type-definitions": "error",
"@typescript-eslint/dot-notation": "off",
"@typescript-eslint/explicit-member-accessibility": [
"off",
{
"accessibility": "explicit"
}
],
"@typescript-eslint/no-non-null-assertion": "off",
"brace-style": [
"error",
"1tbs"
],
// note you must disable the base rule as it can report incorrect errors
"no-shadow": "off",
"@typescript-eslint/no-shadow": [
"error"
]
}
},
{
"files": [
"*.html"
],
"extends": [
"plugin:@angular-eslint/template/recommended"
],
"rules": {
"@angular-eslint/template/i18n": [
"warn",
{
"checkId": true,
"checkText": true,
"checkAttributes": true
}
]
}
}
]
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.