The following APIs compliment the core API shown in the README:
You can control which locale is used, by putting language codes in the URL.
This is enabled via the option locale_on_url
option during setup:
app.use(i18n.abide({
supported_languages: ['en-US', 'de', 'es', 'db-LB', 'it-CH'],
default_lang: 'en-US',
debug_lang: 'it-CH',
translation_directory: 'i18n',
locale_on_url: true
}));
Here the locale_on_url
option has been set to true
, which causes
i18n-abide
to perform an extra step with every request:
each time a request comes to the server, the URL is examined for an optional
language tag.
Some examples include:
If a URL includes a language tag for one of the supported languages specified
at setup, the request's accept-language
header is overridden by the URL's
language.
The URL is then rewritten to no longer include this language tag,
such that routes further down in the middleware chain are unaffected.
Given the URLs listed above, the following would happen in the i18n-abide
middleware with locale_on_url
set to true
:
- http://app.com/ --> http://app.com/
- http://app.com/en-US/ --> locale is now
en-US
, url is http://app.com/ - http://app.com/de --> locale is now
de
, url is http://app.com/
The locale_on_url
option is off by default.
Another way to override locale settings is directly via the API.
You can set locale in the scope of a single request.
The following example shows how to set the locale of the request to zh_TW
(Traditional Chinese):
exports.homepage = function(req, resp) {
req.setLocale('zh_TW');
resp.render('home', {title: "my title"});
};
Perhaps zh-TW
came from the session or user preferences, for example.
By default PO/POT files are used. This can be changed during setup:
app.use(i18n.abide({
supported_languages: ['en-US', 'de', 'es', 'db-LB', 'it-CH'],
default_lang: 'en-US',
debug_lang: 'it-CH',
translation_directory: 'i18n',
translation_type: 'plist'
}));
The translation_type
option will cause i18n-abide
to look for files named
messages.plist
in locale directories beneath your translation_directory
root.
For example, the es
language listed above should be located at
i18n/es/messages.plist
.
For compatibility with express-resource
and other apps,
you may use the format_fn_name
option to rename the format
function.
Example:
app.use(i18n.abide({format_fn_name: 'i18nformat'}));
app.get('/foo', function(req, res) {
res.render('bar', {
greeting: req.i18nformat("%s %s!", ["Hello", "World"]);
});
});
# in bar.ejs
<p><%= i18nformat(gettext("Please see %s"), ["https://example.com"]) %></p>