grunt-l10n-lint is a grunt task to check l10n .po
files for
unexpected/malformed HTML.
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 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 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 (e.g.,
<span>This span is not closed
) - Mismatched < or > (e.g.,
<span
) - Tags closed in the wrong order.
- (e.g.,
<a><span>closed out of order</a></span>
)
- (e.g.,
- Unexpected tags
- If the source
.pot
files contain onlya
andspan
tags, the translated ,files must:- only contain
a
andspan
elements. - All other elements cause an error.
- only contain
- Unexpected tag attributes
- If the source
.pot
files contain<a href="/signin" target="_blank">
,<button id="logout">
, and<div>...
, the translated files must:a
elements can have 0, 1 or bothhref
andtarget
attributes.button
elements can 0 or 1id
attribute.- All other attributes on any element will cause an error.
- Unexpected tag attribute values
- If the source
.pot
files contain<a href="/signin" target="_blank">
and<button id="logout">
, and<div>...
, the translated files must:a
elements can have one or bothhref="/signin""
ortarge="_blank"
.button
elements can haveid="logout"
div
elements can have no attributes.- Any other attributes or attribute values cause an error.
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.
In addition, 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 fully formed, 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.
npm test
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.
Please see the CONTRIBUTING.md file.
This software is available under version 2.0 of the MPL: