UNPKG

grunt-banana-checker

Version:

Checker for the 'Banana' JSON-file format for interface messages, as used by MediaWiki and jQuery.i18n.

250 lines (171 loc) 6.87 kB
# banana-checker > 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 documented. * Each defined documentation entry has a matching source message. For all available options, see the [**Options** section](#options). You can use Banana checker [standalone](#command-line-interface) or as a [Grunt plugin](#getting-started-grunt-plugin). ## Getting started (Grunt plugin) To use this plugin, add it as a development dependency to your project: <pre lang=shell> npm install grunt-banana-checker --save-dev </pre> Ensure your project has a Gruntfile.js file ([example file](http://gruntjs.com/sample-gruntfile)). Then, in Gruntfile.js, add the line: <pre lang=js> grunt.loadNpmTasks( 'grunt-banana-checker' ); </pre> ### Configure the Grunt plugin In Gruntfile.js, add a configuration 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: <pre lang=js> grunt.initConfig( { banana: { all: 'i18n/' } } ); </pre> You can also configure multiple directories, like so: <pre lang=js> grunt.initConfig( { banana: { core: 'languages/i18n/', installer: 'includes/installer/i18n/' } } ); </pre> You can also use globbing patterns and/or arrays of directories, like so: <pre lang=js> grunt.initConfig( { banana: { all: 'modules/ve-{mw,wmf}/i18n/' } } ); </pre> For a full list of supported ways of defining the target directory of a Grunt plugin, see [Configuring tasks](https://gruntjs.com/configuring-tasks) on gruntjs.com. [See the **Options** sections](#Options) for create a config file. Config can also be set in Grunt by defining your target directory as an object instead of a string, with `src` and `options` properties, like so: <pre lang=js> grunt.initConfig( { banana: { all: { src: 'i18n/', options: { sourceFile: 'messages.json', documentationFile: 'documentation.json' } } } } ); </pre> For all available options, see the [**Options** section](#Options). ## Command-line The Banana checker also offers a command-line interface. <pre lang=shell> npm install grunt-banana-checker --save-dev </pre> 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. <pre lang=js> { "scripts": { "test": "banana-checker i18n/" } } </pre> Options can be set in the config file, or overridden as `--key=value` pairs. For example: <pre lang=shell> npx banana-checker --requireKeyPrefix="x-" i18n/ </pre> * For boolean options, use the valus `0`, `1`, `true`, or `false`. * Quotes are allowed, but not required. * For options that allow multiple values, separate values by comma. Like `--key=one,two`. ## Options Create a `.bananaconfig.[json|js]` file (or `bananaconfig.[json|js]`): <pre lang=json> { "sourceFile": "messages.json", "documentationFile": "documentation.json" } </pre> Available options are: #### autofix Type: `boolean` Default value: `false` If enabled, try to automatically fix issues in en/qqq.json detected by some checks. Note that autofixing will not affect the check result - the checker will fail even if all errors were automatically fixed. #### autofixTranslated Type: `boolean` Default value: `false` Same as `autofix` but for translated messages. #### 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. ### Rules Rule options can be set to `"off"`, `"warn"` or `"error"`. When additional options are available an array tuple should be created, e.g. `[ "error", { "initial: true } ]`. #### requireMetadata Default value: `"error"` Whether to fail if message files don't have a `@metadata` meta-data key. #### requireCompleteMessageDocumentation Default value: `"error"` Additional option: `skip` (type `string[]`) Keys to skip Whether to fail if any message is in the primary file but not documented. #### disallowEmptyDocumentation Default value: `"error"` Whether to fail if any message is in the primary file but documented as a blank string. #### requireLowerCase Default value: `"error"` Additional option: `initial` (type `boolean`, default `false`) Whether to fail if any message key is not lower case. If the `"initial"` option is set, fail only if the first character is not lower case. #### requireKeyPrefix Default value: `"off"` Additional option: `prefix` (type `string` or `string[]`) Whether to fail if any message key is not prefixed by the given prefix, or if multiple, one of the given prefixes. #### disallowUnusedDocumentation Default value: `"error"` Whether to fail if any documented message isn't in the primary file. #### disallowBlankTranslations Default value: `"warn"` Whether to warn if any message is translated as a blank string. #### disallowDuplicateTranslations Default value: `"off"` Whether to fail if any message is translated as identical to the original string. #### disallowUnusedTranslations Default value: `"off"` Whether to fail if any translated message isn't in the primary file. #### requireCompletelyUsedParameters Default value: `"off"` Whether to fail if any translated message fails to use a parameter used in the primary message. #### requireCompleteTranslationLanguages Default value: `"off"` Additional option: `langs` (type `string[]`) Languages required Additional option: `ignoreMissing` (type `boolean`, default `true`) Ignore missing translations whose original string is blank Example value: `[ "error", { "langs": [ "fr", "es" ], "ignoreMissing": false } ]` Languages on which to fail if any message in the primary file is missing. #### requireCompleteTranslationMessages Default value: `"off"` Additional option: `keys` (type `string[]`) Message keys to require Example value: `[ "error", { "keys": [ "first-message-key", "second-message-key" ] } ]` Messages on which to fail if missing in any provided language. ### disallowLeadingWhitespace Default value: `"off"` Whether to ignore leading whitespace in original messages. ### disallowLeadingWhitespaceTranslated Default value: `"off"` Whether to ignore leading whitespace in translated messages. ### disallowTrailingWhitespace Default value: `"error"` Whether to ignore trailing whitespace in original messages. ### allowTrailingWhitespaceTranslated Default value: `"warn"` Whether to ignore trailing whitespace in original messages.