A Handlebars.js
helper collection providing keyed dictionary substitution and simple localization.
It can format numbers, money, dates, and "translate" texts using the following packages:
npm install handlebars --save
npm install madlib-locale --save
madlib-locale
's single export is the localeManager
object, which will need to be initialize( ... )
-ed before use. initialize( ... )
returns a
(Q) Promise
that'll be fullfilled when the specified locale's definition file has been loaded; it takes in three
parameters:
- The
Handlebars
- (orhbsfy
runtime that is to be extended withmadlib-locale
's helpers; - The locale, expressed as a valid BCP 47 language tag string; It'll designate a
.json
locale definition file by the same name that is to be loaded; - An optional url base path to retrieve that- and any future locale definition files from; it defaults to
'./i18n'
;
Handlebars = require( 'handlebars/runtime' )
localeManager = require( 'madlib-locale' )
localeManager
.initialize( Handlebars, 'en-GB', '/examples' )
.then(
() ->
## Ready to render templates using the helper functions
return
() ->
console.error( 'something went wrong...' )
return
)
.done()
The locale can be changed at any time through invoking localeManager.setLocale( ... )
; it, too, will return a Promise
. Once resolved, a re-rendering
of your templates will ensure they'll be in the new locale.
localeManager
.setLocale( 'nl-NL' )
.then(
() ->
## Ready to re-render templates using the helper functions
return
() ->
console.error( 'something went wrong...' )
return
)
To retrieve the current locale name:
console.log( "Current locale: #{ localeManager.getLocaleName() }" )
At its top level, a locale definition file has a name
string, and phrases
- and formatting
objects.
name
is expected to be a valid BCP 47 language tag string. This is also the name of the file (excluding the.json
filename extension);phrases
is any object acceptable as a phrases dictionary tonode-polyglot
;formatting
should contain three further sections:datetime
is a keyword-to-Moment
format( ... )
argument-mapping. The examples unimaginatively sport descriptive identifying keywords likedate
anddatetime
but you can name them whatever you like;money
, similary, is a keyword-to-Accounting
formatMoney( ... )
arguments-mapping, expecting onlysign
(currency symbol) andprecision
arguments. The arguments for thousands- and decimal separator markers being taken from thenumber
definition below;number
is an object defining thedecimalMarker
,thousandMarker
and (default)precision
arguments to theAccounting
formatNumber( ... )
method;
See also the examples on GitHub.
-
Translate:
t
orT
-
... without interpolation
These helpers take one argument which should be a key into the
phrases
dictionary in your locale definition file:The difference between
T
andt
is that the former additionally does first-letter capitalization of the dictionary's value.A longer form alternative to
t
whichmadlib-locale
has historically provided is_translate
. It does not have a capitalization variant. -
... with interpolation
These helpers also support
node-polyglot
's interpolation; any additional positional arguments will be interpolated into the resulting dictionary value string as follows:{ "phrases": { "the.phrases.dictionary.values.can.be.X.with.Y": "translation strings can be %{0} with anything, like: \"%{1}\"" , "can.be.interpolated": "interpolated" } }
-
... with named parameters
Interpolations with named instead of positional parameters are also possible:
{ "phrases": { "the.phrases.dictionary.values.can.be.X.with.Y": "translation strings can be %{foo} with anything, like: \"%{bar}\"" , "can.be.interpolated": "interpolated" } }
-
... with pluralization
Using the special named parameter
smart_count
you can leveragenode-polyglot
's pluralization mechanism:{ "phrases": { "some.mice": "a mouse |||| some mice" } }
Note that even though
node-polyglot
does allow interpolation of thesmart_count
value, it will not receive any localized formatting treatment.
-
-
Date:
D
This helper takes two arguments:
- A key into the
formatting.datetime
section of your locale definition file, designating the specific format to use; - Ideally a
Moment
instance, but any value that theMoment
constructor can grok as its argument should be fine.
A longer form alternative to
D
whichmadlib-locale
has historically provided is_date
. - A key into the
-
Number:
N
This helper takes one or two arguments:
- A number value to be formatted;
- An, optional, precision argument designating the specific number of decimals to format instead of the current locale definition's default.
A longer form alternative to
N
whichmadlib-locale
has historically provided is_number
. -
Money
This helper takes two arguments:
- A key into the
formatting.money
section of your locale definition file, designating the specific currency to use, or simplydefault
if the current locale defintion's default currenct is desired; - A number value to be formatted as an amount, currency symbol included;
A longer form alternative to
M
whichmadlib-locale
has historically provided is_money
. - A key into the
See CONTRIBUTING.
See CHANGELOG for versions >0.2.1
; For older versions, refer to the
releases on GitHub for a detailed log of changes.