derby-locale

A locale module for Derby JS.

Derby Locale

Enable Derby JS applications to select the best locale from a list of supported locales.

Strategies such as derby-locale-browser must be added to provide a list of preffered locales.

$ npm install derby-locale --save

In your server file, add the middleware:

var locale = require('derby-locale').server;

expressApp
  // ...
  // ...
  .use(locale({
    default: 'en',
    supported: ['en', 'es']
  }))

Change or add default and supported locales as necessary.

Require the locale function:

var locale = require('derby-locale').app.locale;

Set it up as a view function:

app.proto.locale = locale;

And then in your view:

<p>{{locale($locale)}}</p>

Alternatively, set it up as a reactive function:

app.on('model', function (model) {
  model.fn('locale', locale);
});

app.get('/', function (page, model) {
  model.start('_page.locale', '$locale', 'locale');
  page.render();
});

And then in your view:

<p>{{_page.locale}}</p>

default – Default locale to use. If unset, the first supported locale will be the default.

path – Default path to locale information. Defaults to $locale.

strategies – An object containing strategies that determine the best locale.

supported – An array of supported locales. It is empty by default;

At least one strategy must be added in order to select the best locale.
Strategies are stored on $locale.strategies and have the following definition:

$locale: {
  strategies: {
    example1: {
      locales: ['en', 'es'],
      order: 2 // optional
    },
    example2: {
      locales: ['ca'],
      order: 1 // optional
    }
  }
}

Strategies provide a list of preferred locales. derby-locale-browser is a good example of a strategy. It is created via middleware; however, strategies may be created in app routes as well:

app.get('/', function (page, model) {
  // ...

  var strategy = model.at('$locale.strategies.user');

  // update the page's locale according to the user's preference
  strategy.ref('locales.0', '_page.user.locale');

  // prioritize this user's preferences
  strategy.set('order', 1);

  // ...
});

Strategies are processed in the order they are declared. As such, earlier strategies have a greater chance of having one of their locales selected from the list of supported locales.

The ordering of strategies can be re-arranged by setting their order property. Strategies are sorted in ascending order.

By default, settings configured in the server middleware are stored on the path $locale.

Locale objects may be changed client side as well. For instance, you may store an array of supported locales in the database and subscribe to them at $locale.supported.

app.get('/', function (page, model, params, next) {
  var locales = model.at('locales.supported');

  locales.subscribe(function (err) {
    if (err) return next(err);
    model.ref('$locale.supported', locales);
    page.render();
  });
});