【问题标题】:Different text i18n in RailsRails 中的不同文本 i18n
【发布时间】:2015-02-19 14:24:27
【问题描述】:

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

其实我在做的是

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

  file2:
    form1:
      to_ranslate: "translated"

这是可行的,但我想知道是否有一种解决方案,我可以根据模板进行不同的翻译,因此对于相同的部分,我将根据渲染位置有不同的文本

【问题讨论】:

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


    【解决方案1】:

    如果您在包含在不同模板中时不需要不同的翻译,则可以使用 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(回退到其默认值)以及通过它时,它仍然有效。 这就是为什么我更喜欢它而不是像你一样使用范围:'xx'。 并且整个界面看起来有点像视图中的继承,到处都是相同的结构。

    以更抽象和更复杂的方式,也可以为此使用回退,但在此处的示例中,这将是矫枉过正。在较大的项目中,实现这样的东西可能是有意义的。

    【讨论】:

    • 如果我需要根据渲染位置对同一个部分进行不同的翻译
    • 在这种情况下,我会在渲染部分时传入一个范围,稍后我会更新我的答案
    • 我不明白为什么我必须以部分形式渲染部分形式
    【解决方案2】:

    据我所知,rails 默认是国际化的 只需像往常一样放置文本,它应该没有问题。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-02
      • 2017-07-06
      • 1970-01-01
      • 1970-01-01
      • 2011-07-19
      • 1970-01-01
      • 2011-02-28
      相关资源
      最近更新 更多