node package manager

grunt-banana-checker

NPM version Build Status

grunt-banana-checker

Task for checking JSON files for the "Banana" i18n system provided by MediaWiki and jquery.i18n.

Getting started

If this is the first time you're using Grunt, the getting started guide will show you how to get up and running.

Once you have that installed, with a Gruntfile set for your code, you can install the plugin with:

npm install grunt-banana-checker --save-dev

In your Gruntfile, add the line:

grunt.loadNpmTasks( 'grunt-banana-checker' );

Running and configuring

Run this task with the grunt banana command.

This is designed to be very simple and not need configuring for the most common cases.

You can specify the targets and options for the task using the normal Grunt configuration – see Grunt's guide on how to configure tasks in general.

Options

For edge cases, you can set some path options:

sourceFile

Type: string Default value: "en.json"

The JSON file providing the primary messages.

documentationFile

Type: string Default value: "qqq.json"

The JSON file providing the documentation messages.

requireMetadata

Type: boolean Default value: true

Whether to fail if message files don't have a @metadata meta-data key.

requireCompleteMessageDocumentation

Type: boolean Default value: true

Whether to fail if any message is in the primary file but not documented.

disallowEmptyDocumentation

Type: boolean Default value: true

Whether to fail if any message is in the primary file but documented as a blank string.

disallowUnusedDocumentation

Type: boolean Default value: true

Whether to fail if any documented message isn't in the primary file.

disallowBlankTranslations

Type: boolean Default value: true

Whether to fail if any message is translated as a blank string.

disallowDuplicateTranslations

Type: boolean Default value: false

Whether to fail if any message is translated as identical to the original string.

disallowUnusedTranslations

Type: boolean Default value: false

Whether to fail if any translated message isn't in the primary file.

requireCompleteTranslationLanguages

Type: string[] Default value: [] Example value: [ 'fr', 'es' ]

Languages on which to fail if any message in the primary file is missing.

requireCompleteTranslationMessages

Type: string[] Default value: [] Example value: [ 'first-message-key', 'third-message-key' ]

Messages on which to fail if missing in any provided language.

Example uses

OOjs UI uses this on a single directory of messages:

banana: {
    all: 'i18n/'
}

VisualEditor's MediaWiki extension uses this on two directories as a single test:

banana: {
    all: 'modules/ve-{mw,wmf}/i18n/'
}

MediaWiki uses this on two directories as different tests – one for the main software and another for the installer:

banana: {
    core: 'languages/i18n/',
    installer: 'includes/installer/i18n/'
}

Checks run

  • The source and documentation files both exist, and are both valid JSON.
  • Both source and documentation include a "@metadata" object.
    • (Note no parsing is done of the metadata objects.)
  • Each defined source message has a matching defined documentation message.
    • (Note no parsing is done of the message definitions or their documentation, including if they are simply the blank string "".)
  • Each defined documentation message has a matching defined source message.