I18N с Express/Jade: строки со встроенными тегами и интерполяцией

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 версию этой строки в шаблон Jade как i18n.posted_by_on, это не сработает. интерполяции на нем, так что лучшее, что я могу сделать, это:

- 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, так как мне приходится выполнять всю интерполяцию вручную. Есть ли способ сделать это более красиво, компактно, читабельно?

7
задан Justin Kaeser 8 March 2012 в 10:14
поделиться