Static Internationalization
Grunt plugin to translate static assets.
Say you have:
app/
โโโ Gruntfile.js
โโโ app
โโโ locale
โ โโโ fr
โ โ โโโ LC_MESSAGES
โ โ โโโ messages.po
โ โโโ pt_BR
โ โโโ LC_MESSAGES
โ โโโ messages.po
โโโ static
โโโ data.json // content: ["_('Hello World')"]
And you need to translate data.json
.
Static internationalization would like like:
app/
โโโ Gruntfile.js
โโโ app
โโโ i18n
โ โโโ fr
โ โ โโโ static
โ โ โโโ data.json // content: ["Bonjour tout le monde"]
โ โโโ pt_BR
โ โ โโโ static
โ โ โโโ data.json // content: ["Olรก mundo"]
โ โโโ static
โ โโโ data.json // not translated: ["Hello World"]
โโโ locale
โ โโโ fr
โ โ โโโ LC_MESSAGES
โ โ โโโ messages.po
โ โโโ pt_BR
โ โโโ LC_MESSAGES
โ โโโ messages.po
โโโ static
โโโ data.json
Getting Started
This plugin requires Grunt.
Translations are done with node-gettext and you will need a proper
gettext catalog (structure seen above). If need help extracting translation
strings, checkout grunt-i18n-abide.
Checkout the makemessages
task in Gruntfile.js.
The "statici18n" task
Overview
In your project's Gruntfile, add a section named statici18n
to the data
object passed into grunt.initConfig()
:
grunt.initConfig({
statici18n: {
options: {
localeDir: 'app/locale'
},
myAppTask: {
files: [{
expand: true,
cwd: 'app',
src: 'static/*.{js,json}',
dest: 'app/i18n'
}]
}
}
})
Options
options.localeDir
Type: String
Default value: locale
Sometimes easiest to use a var, say <%= abideCreate.options.localeDir %>
options.template.interpolate
Type: RegEx
Default: search for _('msgid')
or _("msgid")
Used to find gettext calls.
Sets _.templateSettings.interpolate
options.textDomain
Type: String
Default value: messages
Name of your po files: locale/<lang>/LC_MESSAGES/<textDomain>.po
Tests
Run grunt && open coverage.html
License
Copyright (c) 2014 Douglas Beck. Licensed under the MIT license.