locality

0.0.6 • Public • Published

Locality

Locality adds i18n support to Express. It exposes middleware that can be added to the Express middleware stack.

Locality uses YAML configuration files to define it's language packs.

##Definitions

First you must define your language packs. Language packs are directories named after the locale they are supporting, each file inside a locale directiory defines a namespace and each key within that namespace is a localized string.

/packs //The default language pack directory
en_US/default.yml //en_US is the locale and bar is the namespace

Hello {{name}}: 'Hello {{name}}'' //Locality supports Handlebars variables
//Locality supports pluralization
I ate %s duck:
	0: 'I ate no ducks' //You can provide number based keys which Locality will look for first, this helps with languages like Russian that have multiple types of pluralization
	singular: 'I ate %s duck' //Locality supports string formatting with sprintf-js
	plural: 'I ate %d ducks'

en_US/foo.yml

bar %s: 'bar %s'

##Instantiation

You should instantiate Locality in your app.js, it should be done before you set Express' middleware.

var Locality = require('locality'),
	i18n = new Locality({
		path: './packs', //The path to the language packs directory
		defaultLocale: 'en_US', //The default locale
		defaultFile: 'default.yml' //The default file to use when translating strings
		locales: ['en_US'] //The supported locales, expects an array of locale strings
	});

Pass the Locality middleware anywhere in the middleware chain you want.

app.use(i18n.middleware());

##Usage

The Locality object is attached to the Express' req object

var route = function (req, res, next) {
	
	req.i18n //The Locality object

	req.i18n.setLocale('en_US'); //Manually set the locale
	req.i18n.setLocaleFromHeaders(req.headers); //Set the locale from the 'accept-language' headers
	req.i18n.setLocaleFromCookie(req.cookies, 'lang');//Set the locale from the cookie, the second arg is the key to look for
	req.i18n.setLocaleFromQuery(req.query, 'lang'); //Set the locale from the query/body, the second arg is the key to look for
	req.i18n.setLocaleFromSubdomain(req.headers.host); //Set the locale from the subdomain of the url string

	req.i18n.getLocale(); //Returns the current locale

	//Translation for a single string
	req.i18n.__('Hello {{name}}', { name: 'Devon Anderson' }); //Looks in the default file (default.yml) returns Hello Devon Anderson
	req.i18n.__('foo.yml', 'bar %s', 'baz'); //Looks in foo.yml and returns bar baz

	//Pluralized translations, definitions needs to have a "singular" and "plural" set of keys, and can provide options number based keys.
	req.i18n.__p('I ate %s duck', 0); //I ate no ducks
	req.i18n.__p('I ate %s duck', 2); //I ate 2 ducks
	req.i18n.__p('I ate %s duck', 'a', 1); //I ate a duck
}

Package Sidebar

Install

npm i locality

Weekly Downloads

8

Version

0.0.6

License

none

Last publish

Collaborators

  • devonanderson