internationalization
setup
i18n = require('internationalization');
app.use(i18n.middleware({
directory: path.join(__dirname, 'locales'),
fallback: "en",
cookie: "lang"
}));
directory layout
files under then same directory will be merged(file name does not matter)
locales
├── en
│ ├── foo.ini
│ └── bar.ini
└── zh
└── index.ini
usage
span= _("Hello {username}", {username: username})
span= _("Hello {1}", username)
input(placeholder=_("Password") type="password")
Hello {username} = Guten Tag {username}
Hello {1} = Guten Tag {1}
Password = Passwort
namespace
span= _("profile:Hello {username}", {username: username})
[profile]
Hello {username} = Guten Tag {username}
client side
app.use(i18n.javascript({
directory: path.join(__dirname, 'locales'),
}));
include in html
<script src="/i18n.js"></script>
<script>
console.log(i18n.resource);
console.log(i18n.lang);
</script>
more options:
cookie
default lang
path
default /i18n.js
exportAs
default i18n
angularjs intergartion
app.use(i18n.angular({
directory: path.join(__dirname, 'locales'),
module: 'i18n',
service: 'i18n',
filter: 'translate'
}));
include in html
<script src="/path/to/angularjs.js"></script>
<script src="/i18n.js"></script>
using filter
<p>{{'delete warning'| translate:resource.name}}</p>
<button>{{'action:delete' | translate}}</button>
using service
app.directive("", function(i18n)->
return {
link: function(){
console.log(i18n.translate("resource key", {name: "foo"}));
}
};
generate/update language files(TBD)
directory: 'locales'
views: 'views/**.jade'
grunt i18n will scan the view direcotry for _()
and __()
$ grunt i18n de