internationalization - 带有 Express/Jade : Strings with embedded tags and interpolation 的 I18N

标签 internationalization express template-engine pug

tl;dr:我正在寻找一种在 Jade 模板中进行国际化的优雅方法。本质上,问题归结为我必须对变量中的字符串进行插值,而不是逐字代码。

问题详情:

在单语 Jade 模板中,我可以制作一个带有嵌入标签和变量的元素,如下所示:

p Posted by 
  span.author= post.author
  | on
  span.date= post.author

得到类似的东西
<p>Posted by <span style="author">The Author</span> on 
<span style="date">2012-03-08</span></p>

但是当我想将其国际化时,我需要一个字符串,因为每种语言的词序都不相同。另外,我想对翻译人员隐藏 html 详细信息,只需给他们这样一行:
Posted by #{author} on #{date}

现在,当我将此字符串的 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

这在很大程度上打败了漂亮的 Jade 模板的要点,因为我必须手动完成所有的插值。有没有什么方法可以做得更好、更紧凑、更易读?

最佳答案

您现在可能已经找到了解决方案(如果是,请告诉我们它是什么),但如果没有,您可能需要查看 i18next-node图书馆。它支持变量,因此您可以执行以下操作:

// 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.'
     }
   }
};

然后,在您的 Jade 模板中,您将执行以下操作:
// This translates to "Space temperature is 28 degrees Celsius."
i18n.t('space_temperature_is', { COUNT: 28 });

该库的文档确实很好,但是,如果您赶时间,请访问 an article我发现作为快速介绍很有用。

关于internationalization - 带有 Express/Jade : Strings with embedded tags and interpolation 的 I18N,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9615951/

相关文章:

json - Angular i18n json 文件中的自动比较检查

node.js - EJS模板中对象的显示属性

node.js - express-handlebars、express-hbs 和 hbs 模块有什么区别,

c++ - 完整的 C++ i18n gettext() "hello world"示例

java - 如何在Java应用程序中处理多种语言?

windows-8 - 不同语言的不同应用程序 Logo

node.js - 找不到路由时表示 4 中间件(未调用最终处理程序): how to check for it?

javascript - 向客户端发送响应然后在 nodejs 中运行长/重操作的快速方法是什么

java - RythmEngine 和 TemplateClassManager 堆的最大对象 : memory leak problems

performance - 证明 memcache 比文件系统缓存更快?