有没有一种更简洁的 content_tag-ish 方式来做到这一点?(我不想在我的 YML 中使用 HTML)
en.yml:
expert_security_advice: "Go <a href='{{url}}'>here</a> for expert security advice."
布局.html.erb:
<%= t(:expert_security_advice, :url => "http://www.getsafeonline.org") %>
有没有一种更简洁的 content_tag-ish 方式来做到这一点?(我不想在我的 YML 中使用 HTML)
en.yml:
expert_security_advice: "Go <a href='{{url}}'>here</a> for expert security advice."
布局.html.erb:
<%= t(:expert_security_advice, :url => "http://www.getsafeonline.org") %>
不,没有更清洁的方法来处理这个问题。如果您想url
从字符串中拉出,那么您将无法将句子分成四部分:
"Go
.<a href="{{url}}">...</a>
'here'
'for expert security advice.'
这四个部分很容易用英语重新组合在一起,但是在其他语言中顺序可能会改变,这可能会改变这里的大小写并导致其他问题。为了让它正确,你必须像这样构造一些东西:
here = "<a href=\"#{url}\">#{t(:expert_security_advice_here)}</a>"
whole_thing = t(:expert_security_advice, :here => here)
以及 YAML 中的两个单独的字符串:
expert_security_advice_here: "here"
expert_security_advice: "Go {{here}} for expert security advice."
您还必须告诉翻译人员这两段文本是放在一起的。
如果那种东西对你来说看起来更干净,那就去吧,但我不会担心需要翻译的文本中的少量 HTML,任何值得交谈的翻译者都可以处理它。永远不要试图在 I18N/L10N 问题上走捷径,它们总是会让你误入歧途并导致问题:非 DRY 代码(WET 代码?)总是比损坏的代码好。
顺便说一句,我建议您放弃标准的 Rails I18N 字符串处理工具,转而使用gettext,让所有内容与 gettext 保持同步更容易,并且代码最终更容易阅读。
我能想到的最好的:
en.yml:
expert_security_advice: "Go *[here] for expert security advice."
布局.html.erb:
<%= translate_with_link(:expert_security_advice, "http://www.getsafeonline.org") %>
application_helper.rb:
include ActionView::Helpers::TagHelper
def translate_with_link(key, *urls)
urls.inject(I18n.t(key)) { |s, url|
s.sub(/\*\[(.+?)\]/, content_tag(:a, $1, :href => url))
}
end