Rails/I18n:默认范围



我使用Rails的默认I18n模块来转换视图中的字符串。

<%= t("registration.heading") %>

现在,当我在注册视图中时,我的所有字符串都以registration开头。我总是要写

<%= t("registration.heading.notice") %>
// or
<%= t(:heading, :scope => :registration) %>

最好为该文件定义一个默认作用域(甚至可能在控制器中),因此对t的调用会自动添加定义的作用域

// controller
set_i18n_default_scope :registration
// view
<%= t(:heading) %>
// --> looks in "registration.heading"

这可能吗?

如果您组织翻译并添加视图名称,如:

en:
  registration:
    index:
      heading: "Registration heading"

那么你可以使用这个:

<%= t(".heading") %>

请注意,第一个字符是一个点。

您可以在Rails国际化(I18n)API指南中了解它

如果您有在多个视图中共享的文本,并且您不想在每个视图的每个部分中复制相同的翻译,则可以使用YAML参考。它们在维基百科上有很好的描述:http://en.wikipedia.org/wiki/YAML#Repeated_nodes

这是可能的。检查Rails i18n API 第4.1.4节

4.1.4"懒惰"查找

Rails 2.3实现了一种方便的方式以在视图中查找区域设置。当你有以下情况时字典:

  es:   books:
          index:
             title: "Título" 

你可以在中查找books.index.title的值

app/views/books/index.html.erb模板如下(注意点):

<%= t '.title' %>

关于懒惰查找:

这是这类问题的一般解决方案

常见问题:Rails在哪里查找L10N/I18N字符串-例如,在进行懒惰查找时

这并不容易猜测,因为视图、控制器、模型、标签、帮助程序或验证都不同。。。等等…但是。。。

使用以下方法很容易直接找到:

http://www.unixgods.org/Rails/where_is_Rails_trying_to_lookup_L10N_strings.html

这有助于弄清楚Rails认为当前范围是什么(例如,当使用".heading"时)

3个简单步骤:

  1. 创建一个文件/config/iinitializers/i18n.rb,如上面文章中所述
  2. 把t('.heading')放在你的视野中
  3. 启动"rails-server"并查看控制台输出,rails认为该视图的默认位置是".heading"。。。例如I18N密钥是什么

(4.然后将I18N字符串添加到由密钥标识的位置)

像符咒一样工作:-)

如果您想打印出I18n-gem的懒惰模式正在寻找的密钥,您可以将其添加到initializers文件夹中的i18n.rb文件中:

module I18n
  module Backend
    class Simple
      module Implementation
        alias_method :lookup_orig, :lookup
        # Give ability to check I18n looked up keys in lazy mode by setting env var I18N_DEBUG to true
        # 
        def lookup(locale, key, scope = [], options = {})
          puts "I18N keys: #{I18n.normalize_keys(locale, key, scope, options[:separator])}" if ENV['I18N_DEBUG']
          lookup_orig(locale, key, scope, options)
        end
      end
    end
  end
end

(Gist:https://gist.github.com/capripot/6e6cf778ad2db0443280)

然后启动你的服务器,例如:

I18N_DEBUG=true bundle exec rails server

相关内容

  • 没有找到相关文章

最新更新