Rails中的不同文本i18n

时间:2015-02-19 14:24:27

标签: ruby-on-rails ruby ruby-on-rails-4 internationalization

在我的rails应用程序中,我有一个部分(file1/_partial.html.erb)必须以两种形式file2/form1.html.erbfile3/_partial.html.erb呈现,我想知道什么是i18n的最佳解决方案部分

中的文字

实际上我正在做的是

<%= (t :to_ranslate, :scope => 'file2.form1' ) %>

  file2:
    form1:
      to_ranslate: "translated"

这是有效的,但我想知道是否有一个解决方案,我可以根据模板进行不同的翻译,所以对于相同的部分我会根据呈现的位置有不同的文本

2 个答案:

答案 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默认是开箱即用的国际化 只需像往常一样放置文本,它应该没有问题。

参考:http://guides.rubyonrails.org/i18n.html