在我的rails应用程序中,我有一个部分(file1/_partial.html.erb
)必须以两种形式file2/form1.html.erb
和file3/_partial.html.erb
呈现,我想知道什么是i18n的最佳解决方案部分
实际上我正在做的是
<%= (t :to_ranslate, :scope => 'file2.form1' ) %>
file2:
form1:
to_ranslate: "translated"
这是有效的,但我想知道是否有一个解决方案,我可以根据模板进行不同的翻译,所以对于相同的部分我会根据呈现的位置有不同的文本
答案 0 :(得分:0)
如果您在不同的模板中包含不需要不同的翻译,您可以使用&#34; Lazy Lookup&#34;如4.1.4中所述:http://guides.rubyonrails.org/i18n.html#looking-up-translations
它也适用于渲染部分,例如:
in file1/_partial.html.erb
<%= (t '.to_translate') %>
in the translations.yml:
en:
file1:
_partial:
to_translate: "translated"
根据您渲染的位置使用不同的翻译,如此(未经测试但原则应该有效):
in file1/_partial.html.erb
<%= (t "#{translation_scope.to_s}.to_translate') %>
in file2/form1.html.erb
<%= render '/file1/partial', translation_scope: 'file2._partial' %>
in file3/_partial.html.erb
<%= render '/file1/partial', translation_scope: 'file3._partial' %>
in the translations.yml
en:
file1:
_partial:
to_translate: "translated"
file2:
_partial:
to_translate: "translated"
file2:
_partial:
to_translate: "translated"
这样做的好处是,当您不指定translation_scope(回退到默认值)时以及传递它时它仍然有效。 这就是我更喜欢使用范围的原因:&#39; xx&#39;像你一样。 并且整个界面看起来有点像在具有相同结构的视图中的继承。
以更抽象和复杂的方式,也可以使用回退,但在这里的示例中,这将是过度的。在较大的项目中,实现类似的东西可能是有意义的。
答案 1 :(得分:0)
据我所知,rails默认是开箱即用的国际化 只需像往常一样放置文本,它应该没有问题。