【问题标题】:Forcing string interpolation in Jade在 Jade 中强制字符串插值
【发布时间】:2015-09-27 02:33:22
【问题描述】:

我正在尝试使用 Jade 做一些字符串插值 + i18n

我写了一个自定义标签

mixin unsubscribe
   a(title='unsubscribe_link', href='#{target_address}/', 
     target='_blank', style='color:#00b2e2;text-decoration:none;')
   = __("Click here")

然后我得到了以下工作

p
  | #[+unsubscribe] to unsubscribe

但是,为了支持 i18n,我还想将整个字符串包装在一个翻译块中,使用 __() 调用该函数。

但是当我将字符串包装在代码块中时,它不再呈现自定义标签。

p
  | #{__("#[+unsubscribe] to unsubscribe")}

p
  = __("#[+unsubscribe] to unsubscribe")

将按字面意思输出[+unsubscribe] to unsubscribe。有没有办法强制从函数返回字符串?

编辑 1

正如已经指出的那样,嵌套 "Click here" 并没有什么意义,因为它会创建单独的字符串。

我的目标实际上是创建一个可以传递给翻译服务的简化文本字符串:

所以理想情况下应该是:

"#[+unsubscribe('Click here')] to unsubscribe"

我会回来的

"Klicken Sie #[+unsubscribe hier] um Ihr auszutragen"

我的理由是,因为使用 gettext 之类的东西会精确匹配字符串,所以我想抽象出标签背后的所有逻辑。

【问题讨论】:

  • 你已经包裹了__("Click here")。您应该只将纯字符串传递给 i18n 函数。通过整个玉块是没有意义的。在完成所有函数调用(包括您的 i18n 转换)之后,渲染整个玉字符串(到 html)始终是最后一步。
  • @laggingreflex 你是对的,我实际上想要内联“单击此处”,以便它显示为内联字符串(我将修复我的示例)。只传递纯文本的问题在于它会创建几个字符串,然后这些字符串会在翻译人员看来脱离上下文。

标签: internationalization pug


【解决方案1】:

你真正想要实现的是:

<p>
  <a href='the link' title='it should also be translated!' 
     target='_blank' class='classes are better'>Click here</a> to unsubscribe
</p>

出于某种原因,您不想在翻译中包含标签。好吧,不幸的是,将“单击此处”与“取消订阅”分开会导致某些语言的翻译不正确——翻译者需要上下文。所以最好使用标签。

顺便说一句:像__('Click here') 这样的东西不允许根据上下文对字符串进行不同的翻译。我不知道您使用的是什么翻译工具,但它绝对应该使用标识符而不是英文文本。

回到你原来的问题,我相信你可以使用参数化的 mixin 来做到这一点:

mixin unsubscribe(title, target_address, click_here, to_unsubscribe)
  a(title=title, href=target_address, target='_blank', style='color:#00b2e2;text-decoration:none;')= click_here
    span= to_unsubscribe

这当然会导致额外的&lt;span&gt; 标签,它仍然不能解决真正的问题(将“单击此处”与“取消订阅”分开)并且无法重新排序这句话,但是......我猜测唯一有效的选择是将插值内置到翻译引擎中并写出未转义的标签。否则你需要重新设计页面以避免句子中的链接。

【讨论】:

  • 我的目标可能过于模糊。你是对的,点击这里不应该在自定义标签中。理想情况下,我想将类似:"[+unsubscribe Click here] to unsubscrbe" 的内容传递给翻译,以便我可以回复"Klicken Sie [+unsubscribe hier] um Ihr auszutragen"。由于替换是完全匹配的,我想尽量减少查找失败,因为链接的详细信息发生了变化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-24
  • 1970-01-01
  • 2018-06-19
  • 1970-01-01
  • 2012-03-25
  • 1970-01-01
相关资源
最近更新 更多