Introduction
enum-i18n
extends the excellent enum implementation adrai/enum. It exposes an Enum constructor that can be configured with a translate
function.
Installation
npm install -S enum-props
Usage
This document addresses the i18n features added here. For full documentation see adrai/enum.
Constructor Factory
The default export of this module is a factory that returns partially configured Enum
constructors. You can pass any config values supported by adrai/enum and they will be used for any enumerations instantiated with the returned constructor.
var enumI18n = require( "enum-i18n" );
var FrozenEnum = enumI18n( { freez: true } );
var InsensitiveEnum = enumI18n( { ignoreCase: true } );
Translate Functions
Every enumeration must be provided a translate function. This function will be called to get a plain-text description of each enum member. A translate function will be passed an enum member and is expected to return a string.
You can pass a translate function to the constructor factory:
var Enum = require( "enum-i18n" )( {
translate: function( member ) {
return getTranslation( "enums." + member.enum.name + "." + member.key );
}
} );
var Enum = require( "enum-i18n" )( function( member ) {
return getTranslation( "enums." + member.enum.name + "." + member.key );
} );
Or you can pass a translate function to the constructor:
var Enum = require( "enum-i18n" )();
var colors = new Enum( [ "red", "yellow", "green" ], {
name: "colors",
translate: function( member ) {
return member.key;
}
} );
If you pass both then the constructor's translate function will win.
Enum Construction
Every enumeration must be provided with a name
and a translate
function. The name
must be provided at the time the enumeration is instantiated.
var Enum = require( "enum-i18n" )( translator );
var colors = Enum( [ "red", "yellow", "green" ], {
name: "colors"
} );
var colors = Enum( [ "red", "yellow", "green" ], "colors" );
You can also pass any options supported by adrai/enum.
Example (shared translation set)
If you have a single translation collection for your app, you can pass a translate function in the enum-i18n
options:
var Enum = require( "enum-i18n" )( function( member ) {
return getTranslation( "enums." + member.enum.name + "." + member.key );
);
var colors = new Enum( [ "red", "yellow", "green" ], "colors" );
colors.enums.map( function( member ) {
return member.key + ", " + member.value + ", " + member.toDescription();
} );
Example (independent translation sets)
If you have a translation collection per enumeration, you can pass a translate function in the constructor options:
var Enum = require( "enum-i18n" )();
var COLOR_NAMES = {
red: "stop",
yellow: "caution",
green: "go"
};
var colors = new Enum( [ "red", "yellow", "green" ], {
name: "colors",
translate: function( member ) {
return COLOR_NAMES[ member.key ];
}
} );
colors.enums.map( function( member ) {
return member.key + ", " + member.value + ", " + member.toDescription();
} );
Development
npm test
gulp coverage
gulp show-coverage
gulp