Jus*_*ser 7 template-engine internationalization express pug
tl; dr:我正在寻找一种在Jade模板中进行国际化的优雅方法.本质上问题归结为我必须对变量中的字符串进行插值,而不是逐字代码.
问题详情:
在单语Jade模板中,我可以创建一个带有嵌入式标签和变量的元素,如下所示:
p Posted by
span.author= post.author
| on
span.date= post.author
Run Code Online (Sandbox Code Playgroud)
得到类似的东西
<p>Posted by <span style="author">The Author</span> on
<span style="date">2012-03-08</span></p>
Run Code Online (Sandbox Code Playgroud)
但是当我想要将其国际化时,我需要一个单独的字符串,因为在每种语言中单词顺序都不一样.此外,我想隐藏翻译人员的html详细信息,并给他们这样一行:
Posted by #{author} on #{date}
Run Code Online (Sandbox Code Playgroud)
现在当我将这个字符串的i18n-ed版本作为i18n.posted_by_on传递给Jade模板时,它不会对它进行插值,所以我能做的最好的是:
- var author = '<span class="author">$</span>'.replace('$',post.author);
- var date = '<span class="date">$</span>'.replace('$',post.date);
- var header = i18n.posted_by_on
.replace('#{author}',author)
.replace('#{date}',date);
p!= header
Run Code Online (Sandbox Code Playgroud)
这大多打败了漂亮的Jade模板,因为我必须手动进行所有插值.是否有任何方法更好,更紧凑,可读?
您现在可能已找到解决方案(如果是,请告诉我们它是什么),但如果您没有,则可能需要查看i18next节点库.它支持变量,因此您可以执行以下操作:
// Localized resources
{
'en-GB': {
translation: {
space_temperature_is: 'Space temperature is __COUNT__ degrees Celsius.'
}
}
'fr-FR': {
translation: {
space_temperature_is: 'Température de l'espace est de __COUNT__ degrés Celsius.'
}
}
};
Run Code Online (Sandbox Code Playgroud)
然后,在您的玉石模板中,您将执行以下操作:
// This translates to "Space temperature is 28 degrees Celsius."
i18n.t('space_temperature_is', { COUNT: 28 });
Run Code Online (Sandbox Code Playgroud)
这个图书馆确实有很好的文档,但是,如果你赶时间,这篇文章我发现它很有用,作为一个快速介绍.
| 归档时间: |
|
| 查看次数: |
7288 次 |
| 最近记录: |