npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

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

Build
Status

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:

  1. 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>)
  1. 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 only a and span tags, the translated files:
    1. Can contain 0 or more a and span tags.
    2. All other tags cause an error.
  1. 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:
    1. Can have either, both or neither of the href and target attributes on each a element.
    2. Can have either, both or neither of the id and class attributes on each button element.
    3. All other attributes will cause an error.
  1. 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:
    1. Can only have the value /signin for href attributes.
    2. Can only have the value _blank for target attributes.
    3. Can only have the value logout for id attributes.
    4. All other 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.

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/