是否有更清洁,content_tag-ish方式? (我不想在我的YML中使用HTML)
en.yml:
expert_security_advice: "Go <a href='{{url}}'>here</a> for expert security advice."
layout.html.erb:
<%= t(:expert_security_advice, :url => "http://www.getsafeonline.org") %>
答案 0 :(得分:3)
不,没有更简洁的方法来解决这个问题。如果你想从字符串中拉出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问题的快捷方式,它们总会让你误入歧途并导致问题:非干代码(WET代码?)总是比破坏代码更好。
顺便说一句,我建议您删除标准的Rails I18N字符串处理工具,而不是gettext,保持与gettext同步的所有内容更容易,代码最终更容易阅读。< / p>
答案 1 :(得分:3)
我能想出的最好的结果:
en.yml:
expert_security_advice: "Go *[here] for expert security advice."
layout.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