Internationalization 带Express/Jade的I18N:带嵌入式标记和插值的字符串

Internationalization 带Express/Jade的I18N:带嵌入式标记和插值的字符串,internationalization,express,template-engine,pug,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

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>
现在,当我将该字符串的i18n-ed版本作为i18n.posted\u by\u 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
-var author='$'.replace('$',post.author);
-变量日期=“$”.replace(“$”,post.date);
-var header=i18n。由上的发布
.replace(“#{author}”,author)
.替换(“#{date}”,日期);
p!=标题

这主要是因为我必须手动完成所有的插值操作,所以不能使用漂亮的Jade模板。有什么方法可以做得更好、更简洁、更可读吗?

正如我们在简短的文档中看到的那样,有一个sprinf样式的函数
我认为这将帮助您实现目标

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

// 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 });

该库的文档非常丰富,但是,如果您赶时间的话,这里有一个我觉得很有用的快速介绍。

Hi,请原谅我有点晚了:)回复。这个工具似乎不适合这个法案,因为它使用了位置参数。我从来没有找到答案(优先级发生了变化),但这个似乎适合,所以我接受它:)
// This translates to "Space temperature is 28 degrees Celsius."
i18n.t('space_temperature_is', { COUNT: 28 });