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
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.
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'
}]
}
}
})
Type: String
Default value: locale
Sometimes easiest to use a var, say <%= abideCreate.options.localeDir %>
Type: RegEx
Default: search for _('msgid')
or _("msgid")
Used to find gettext calls.
Sets _.templateSettings.interpolate
Type: String
Default value: messages
Name of your po files: locale/<lang>/LC_MESSAGES/<textDomain>.po
Run grunt && open coverage.html
Copyright (c) 2014 Douglas Beck. Licensed under the MIT license.