grunt-l10n-lint
v0.0.3
Published
A grunt task to check l10n .po files for unexpected/malformed HTML.
Downloads
96
Readme
grunt-l10n-lint
grunt-l10n-lint is a grunt task to check l10n .po
files for
unexpected/malformed HTML.
Getting Started
This plugin requires Grunt >0.4.5
If you haven't used Grunt before, be sure to check out the Getting Started guide, as it explains how to create a Gruntfile as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command:
npm install grunt-l10n-lint --save-dev
Once the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript:
grunt.loadNpmTasks('grunt-l10n-lint');
The "l10n-lint" task
The source files used to extract allowed HTML are defined using
the untranslated
option.
The target files to be checked are in files
.
grunt.initConfig({
'l10n-lint': {
test: {
options: {
untranslated: ['test/fixtures/templates/**/*.pot']
},
files: [{
src: 'files-to-check/**/*.po'
}]
}
}
});
The lint process
The grunt task uses one or more .po
or .pot
files as the source
templates from which to extract allowed HTML. The source files are
to create a list of elements, attributes, and attribute values.
The grunt task then parses one or more translated .po
files for strings
that contain HTML that is malformed, contains unexpected tags, attributes,
or attribute values.
The translated strings are checked, one by one, for:
- Grossly malformed HTML
- Unnamed tags (e.g.
<>
,</>
) - Unclosed tags, mismatched
<
or>
(e.g.,<span
,span>
) - Unclosed elements (e.g.,
<span>This span is not closed
) - Elements closed in the wrong order.
- (e.g.,
<a><span>closed out of order</a></span>
)
- (e.g.,
- Unexpected tags. Tag names that are not used in the source
.pot
files may not be present in the translated.po
files. For instance:
- If the source
.pot
files contain onlya
andspan
tags, the translated files:- Can contain 0 or more
a
andspan
tags. - All other tags cause an error.
- Can contain 0 or more
- Unexpected attributes. Attributes that are not used on a type of element in the source
.pot
files may not be present on instances of that element type in the translated.po
files. For instance:
- If the source
.pot
files contain<a href="..." target="...">
,<button id="...">
and<button class="...">
, the translated files:- Can have either, both or neither of the
href
andtarget
attributes on eacha
element. - Can have either, both or neither of the
id
andclass
attributes on eachbutton
element. - All other attributes will cause an error.
- Can have either, both or neither of the
- Unexpected attribute values. Attribute values that are not used on a type of element in the source
.pot
files may not be present on instances of that element type in the translated.po
files. For instance:
- If the source
.pot
files contain<a href="/signin" target="_blank">
and<button id="logout">
, the translated files:- Can only have the value
/signin
forhref
attributes. - Can only have the value
_blank
fortarget
attributes. - Can only have the value
logout
forid
attributes. - All other attribute values cause an error.
- Can only have the value
The target translation checks are very coarse.
For example, if the source .pot
file contains a single a
element,
any translated string can contain an a
element.
If the source .pot
file contains two a
elements, one
with id="first-anchor"
and another with id="second-anchor"
, any translated
string could contain an a
element with either id
.
All translated strings are assumed to be independent items, and are checked individually. Quotes that surround attribute values are not checked, as long as the tag correctly closes and the attribute value matches an expected value, the value is accepted.
Running the tests
npm test
Contributing
In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using Grunt.
Get involved:
Please see the CONTRIBUTING.md file.
License:
This software is available under version 2.0 of the MPL:
https://www.mozilla.org/MPL/