polyglot
Version:
i18n module for express
95 lines (59 loc) • 3.05 kB
Markdown
Polyglot
========
Polyglot is an internationalization library for [express](http://github.com/visionmedia/express). It's template-agnostic, based on JSON files, and less than 200 lines of code. Compatible with express 3+.
## Usage
Install with `npm install polyglot`:
var i18n = require('polyglot')
app = express()
app.use(express.cookieParser())
app.use(express.cookieSession())
app.use(i18n())
# register template locals
app.locals(i18n.locals)
Check the [example](https://github.com/ricardobeat/node-polyglot/tree/master/example) app.
### Options
app.use(i18n({
debug : false // enable debug messages
, default : 'en' // default language
, path : '/lang' // path for .json language files
}))
### Language files
Translation files are `.json` files containing the translated strings. The default directory is `/lang`. To add a new language, just create an empty .json file with the language code as it's name (i.e. `de.json`).
See https://github.com/ricardobeat/node-polyglot/blob/master/example/lang/pt.json
String definitions are automatically added to all available languages by adding the `updateStrings` middleware to your express config:
app.configure('development', function(){
app.use(i18n.updateStrings)
})
### Templating / locals
All the following examples are based on [handlebars](http://github.com/donpark/hbs) templates.
Registering `app.locals(i18n.locals)` is simply a shortcut for:
app.locals({
__ : i18n.translate
, _n : i18n.plural
, languages : i18n.languages
})
In addition to that, `i18n()` registers a middleware which sets `req.lang` and `req.locale` containing the user's settings.
See the `/example` folder for an implementation using Handlebars helpers.
#### i18n.translate
Takes a string and returns a translation based on your current session preferences (`req.session.lang`)`.
{{ __('hello') }}
// en: 'hello'
// pt: 'olá'
#### i18n.plural
Takes `[n, singular, plural]` or `[n, zero, singular, plural]` arguments. Using `i18n.translate` with the same arguments will use plural automatically.
{{ __(1, "%s cat", "%s cats") }}
// en: '1 cat'
// pt: '1 gato'
{{ __(0, "no cats", "%s cat", "%s cats") }}
// en: 'no cats'
// pt: 'nenhum gato'
#### i18n.setLanguage
To change the current language call `i18n.setLanguage`, passing the user's session object and desired language code:
app.get('/lang/:lang', function(req, res){
i18n.setLanguage(req.session, req.params.lang)
res.redirect(req.headers.referer || '/')
})
Accessing http://yourapp/lang/de will set language to `de`, *if* it is defined in the i18n.languages object.
### Source code and tests
Polyglot is written in coffeescript and distributed in js. [Read the annotated source here](http://ricardobeat.github.com/node-polyglot).
Run tests using `mocha` or `npm test`. You need `coffee-script` and `mocha` installed globally on your machine.