npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

madlib-locale

v0.4.7

Published

A `Handlebars` helper collection providing keyed dictionary substitution and simple localization.

Downloads

60

Readme

madlib-locale

npm version David dependency drift detection

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:

Installing

npm install handlebars --save
npm install madlib-locale --save

Using

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- (or hbsfy runtime that is to be extended with madlib-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()

Change the locale

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
    )

Get the current locale name

To retrieve the current locale name:

    console.log( "Current locale: #{ localeManager.getLocaleName() }" )

Set up a locale definition file

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 to node-polyglot;
  • formatting should contain three further sections:
    • datetime is a keyword-to-Moment format( ... ) argument-mapping. The examples unimaginatively sport descriptive identifying keywords like date and datetime but you can name them whatever you like;
    • money, similary, is a keyword-to-Accounting formatMoney( ... ) arguments-mapping, expecting only sign (currency symbol) and precision arguments. The arguments for thousands- and decimal separator markers being taken from the number definition below;
    • number is an object defining the decimalMarker, thousandMarker and (default) precision arguments to the Accounting formatNumber( ... ) method;

See also the examples on GitHub.

Use from your Handlebars templates

  • Translate: t or T

    • ... without interpolation

      These helpers take one argument which should be a key into the phrases dictionary in your locale definition file:

      <ul>
          <li>{{T 'an.entry.in.your.phrases.dictionary'}}</li>
          <li>{{t 'another.entry.in.your.phrases.dictionary'}}</li>
      </ul>

      The difference between T and t is that the former additionally does first-letter capitalization of the dictionary's value.

      A longer form alternative to t which madlib-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"
          }
      }
      {{T 'the.phrases.dictionary.values.can.be.X.with.Y' (t 'can.be.interpolated') some.example.value }}
    • ... 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"
          }
      }
      {{T 'the.phrases.dictionary.values.can.be.X.with.Y' foo=(t 'can.be.interpolated') bar=some.example.value }}
    • ... with pluralization

      Using the special named parameter smart_count you can leverage node-polyglot's pluralization mechanism:

      {
          "phrases": {
              "some.mice":    "a mouse |||| some mice"
          }
      }
      {{T 'some.cars' smart_count=1 }}
      {{T 'some.cars' smart_count=42 }}

      Note that even though node-polyglot does allow interpolation of the smart_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 the Moment constructor can grok as its argument should be fine.
    <dl>
        <dt>{{T 'the.date'}}</dt>
        <dd>{{D 'date' some.moment.compatible.value.to.be.formatted.as.a.date.string }}</dd>
    
        <dt>{{T 'the.datetime'}}</dt>
        <dd>{{D 'datetime' some.moment.compatible.value.to.be.formatted.as.a.date-and-time.string }}</dd>
    </ul>

    A longer form alternative to D which madlib-locale has historically provided is _date.

  • 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.
    <ol>
        <li>{{N some.value.to.be.formatted.as.a.number.with.default.precision }}</li>
        <li>{{N some.value.to.be.formatted.as.a.number.with.alternative.precision 7 }}</li>
    <ol>

    A longer form alternative to N which madlib-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 simply default if the current locale defintion's default currenct is desired;
    • A number value to be formatted as an amount, currency symbol included;
    {{M 'euro' some.value.to.be.formatted.as.a.amount.of.money }}

    A longer form alternative to M which madlib-locale has historically provided is _money.

Contributing

See CONTRIBUTING.

Changelog

See CHANGELOG for versions >0.2.1; For older versions, refer to the releases on GitHub for a detailed log of changes.

License

BSD-3-Clause