Polyglot is an internationalization library for express. It's template-agnostic, based on JSON files, dependency-free and less than 200 lines of code. Compatible with express 3+.
Install with npm install polyglot
:
var i18n = require('polyglot')
app = express()
app.use(express.cookieParser())
app.use(express.cookieSession())
app.use(i18n() # add middleware
app.locals(i18n.locals) # register template locals
Check the example app.
app.use(i18n({
debug : false // enable debug messages
, default : 'en' // default language
, path : '/lang' // path for .json language files
}))
By default polyglot uses a JSON storage backend for translations, saving files to options.path
(default: /lang). To add a new language, just create an empty .json file with the language code as it's name (e.g. de.json
or 'en-UK.json'). These files can be sent to apps like webtranslateit.com for management and collaborative translation efforts.
See example/lang/pt.json for a sample.
String definitions are automatically added to all available languages by using the updateStrings
middleware:
app.configure('development', function(){
app.use(i18n.updateStrings)
})
Different storage backends (MongoDB, Redis) can be used by adding a constructor to i18n.store
and setting the store
option:
function MongoStore () { ... }
i18n.store.mongo = MongoStore
//...
app.use(i18n({
store: 'mongo'
}))
This object must implement the load
, save
and update
methods, and will receive the i18n
object as first argument on initialization. See the source for the JSON storage engine at src/store.coffee.
Registering app.locals(i18n.locals)
is a shortcut for:
app.locals({
__ : i18n.translate
, _n : i18n.plural
, languages : i18n.languages
})
In addition to these locals, the i18n()
middleware sets the req.lang
and req.locale
properties containing user settings.
See the /example
folder for an implementation using Handlebars helpers.
Takes a string and returns a translation based on your current session preferences (req.session.lang
)`.
{{ __('hello') }}
// en: 'hello'
// pt: 'olá'
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'
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 || '/')
})
When accessing http://yourapp.com/lang/de
the language will be set to de
, if it's in the available languages (i18n.languages
) list.
Polyglot is written in coffeescript and distributed in js. Read the annotated source here.
Run tests using mocha
or npm test
. You need coffee-script
and mocha
installed globally on your machine.
- implement simple default backends for MongoDB/Redis/LevelDB
- example of serving a string map to a client-side app
- tiny library implementing
translate
andplural
on the client, bundled with the string map and served socket.io-style at/polyglot/client.js
- support different pluralization rules