Checker for the 'Banana' JSON-file format for interface messages, as used by MediaWiki and jQuery.i18n.
By default, Banana checker asserts the following:
- The source and documentation files must exist and contain valid JSON.
- Both files include a
@metadata
object. - Each defined source message is documentated.
- Each defined documentation entry has a matching source message.
For all available options, see the Options section.
You can use Banana checker standalone, or as Grunt plugin.
To use this plugin, add it as a development dependency to your project:
npm install grunt-banana-checker --save-dev
Ensure your project has a Gruntfile.js file (example file). Then, in Gruntfile.js, add the line:
grunt.loadNpmTasks( 'grunt-banana-checker' );
In Gruntfile.js, add a configuation key for banana
and set it to an empty object.
We will use this object to declare which directory contains the interface messages. For example, to enable grunt-banana-checker for a single directory only, configure it like so:
grunt.initConfig( {
banana: {
all: 'i18n/'
}
} );
You can also configure multiple directories, like so:
grunt.initConfig( {
banana: {
core: 'languages/i18n/',
installer: 'includes/installer/i18n/'
}
} );
You can also use globbing patterns and/or arrays of directories, like so:
grunt.initConfig( {
banana: {
all: 'modules/ve-{mw,wmf}/i18n/'
}
} );
For a full list of supported ways of defining the target directory of a Grunt plugin, see Configuring tasks on gruntjs.com.
To customise the options for Banana checker, define your target directory as an object instead of a string, with src
and options
properties, like so:
grunt.initConfig( {
banana: {
all: {
src: 'i18n/',
options: {
sourceFile: 'messages.json',
documentationFile: 'documentation.json'
}
}
}
} );
For all available options, see the Options section.
The Banana checker also offers a command-line interface.
npm install grunt-banana-checker --save-dev
To use Banana checker as part of your test run, refer to the banana-checker
program from the scripts.test
property in your package.json
file.
{
"scripts": {
"test": "banana-checker i18n/"
}
}
To set custom options, pass parameters as --key=value
pairs. For example:
npx banana-checker --requireKeyPrefix="x-" i18n/
- For boolean options, use the valus
0
,1
,true
, orfalse
. - Quotes are allowed, but not required.
- For options that allow multiple values, separate values by comma. Like
--key=one,two
.
For edge cases, you can set some path options:
Type: string
Default value: "en.json"
The JSON file providing the primary messages.
Type: string
Default value: "qqq.json"
The JSON file providing the documentation messages.
Type: boolean
Default value: true
Whether to fail if message files don't have a @metadata
meta-data key.
Type: boolean
Default value: true
Whether to fail if any message is in the primary file but not documented.
Type: boolean
Default value: true
Whether to fail if any message is in the primary file but documented as a blank string.
Type: boolean
or "initial"
Default value: true
Whether to fail if any message key is not lower case. If set to "initial"
, fail only if the first
character is not lower case.
Type: string
or string[]
Default value: []
Whether to fail if any message key is not prefixed by the given prefix, or if multiple, one of the given prefices.
Type: boolean
Default value: true
Whether to fail if any documented message isn't in the primary file.
Type: boolean
Default value: true
Whether to fail if any message is translated as a blank string.
Type: boolean
Default value: false
Whether to fail if any message is translated as identical to the original string.
Type: boolean
Default value: false
Whether to fail if any translated message isn't in the primary file.
Type: boolean
Default value: false
Whether to fail if any translated message fails to use a parameter used in the primary message.
Type: string[]
Default value: []
Example value: [ 'fr', 'es' ]
Languages on which to fail if any message in the primary file is missing.
Type: string[]
Default value: []
Example value: [ 'first-message-key', 'third-message-key' ]
Messages on which to fail if missing in any provided language.
Type: boolean
Default value: true
Whether to ignore missing translations whose original string is blank.
Type: boolean
Default value: true
Whether to ignore leading whitespace in original or translated messages.
Type: boolean
Default value: true
Whether to ignore trailing whitespace in original or translated messages.