现在,如果我在我的应用程序中有一些像
这样的代码<%= t :test %>
并且没有可用的翻译:test我在我的视图中得到了类似的内容:
<span class="translation_missing" title="translation missing: en.test">Test</span>
我想补充的是即使对于现有翻译也要包含类似的范围,因此如果翻译存在,我希望得到类似的内容:
<span class="translation_existing" title="translation existing: en.test">Translated string</span>
注意范围中的不同类名。字符串应该真正翻译。
如何通过覆盖translate方法来实现此结果?
提前谢谢
Gnagno
答案 0 :(得分:2)
“t”是一个视图助手: http://api.rubyonrails.org/classes/ActionView/Helpers/TranslationHelper.html#method-i-t
很容易查看其源代码并创建自己的源代码,您也可以通过在ApplicationHelper中重新定义它来覆盖帮助程序。
但是恕我直言,你不应该重新定义它,而是用不同的名字创建你自己的。有很多情况下你会想要在你的部分视图中使用“t”帮助器,如果你插入额外的HTML标记会搞砸(例如:我在我的页面部分使用“t”帮助器翻译标题,元标记等)...
答案 1 :(得分:1)
我创建了一个覆盖't'方法的帮助器,这只是'translate'的快捷方式:
def t(*a) # I don't care what params go in
key = a.first # just want to override behaviour based on the key
#if my overrides contain the key
if value = @i18n_overrides["#{I18n.locale}.#{key}"]
return value # return the overrided value
end
translate(*a) # otherwise letting i18n do its thing
end
这些方法会更加干净,但它们对我不起作用:
尝试使用别名,但意识到在执行类体时该范围内不存在t
或translate
。
尝试拨打ActionView::Helpers::TranslationHelper.translate
而不是translate
,但这也不起作用。