Rails/I18n:默认范围

Mar*_*kus 18 ruby-on-rails internationalization ruby-on-rails-3

我正在使用Rails的默认I18n模块在视图中翻译我的字符串.

<%= t("registration.heading") %>
Run Code Online (Sandbox Code Playgroud)

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

<%= t("registration.heading.notice") %>
// or
<%= t(:heading, :scope => :registration) %>
Run Code Online (Sandbox Code Playgroud)

定义该文件的默认范围(甚至可能在控制器中)会很好,因此调用会t自动添加已定义的范围

// controller
set_i18n_default_scope :registration

// view
<%= t(:heading) %>

// --> looks in "registration.heading"
Run Code Online (Sandbox Code Playgroud)

这可能吗?

Ars*_*en7 19

如果您组织翻译,请添加视图名称,如下所示:

en:
  registration:
    index:
      heading: "Registration heading"
Run Code Online (Sandbox Code Playgroud)

那你可以用这个:

<%= t(".heading") %>
Run Code Online (Sandbox Code Playgroud)

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

您可以在Rails Internationalization(I18n)API Guide中阅读它

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

  • 还要注意t(".heading")有效,而I18n.t(".heading")则没有! (3认同)

bru*_*077 8

有可能的.检查Rails i18n API的 4.1.4节

4.1.4"懒惰"查找

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

  es:   books:
          index:
             title: "Título" 
Run Code Online (Sandbox Code Playgroud)

你可以在里面查看books.index.title值

app/views/books/index.html.erb这样的模板(注意点):

<%= t '.title' %>
Run Code Online (Sandbox Code Playgroud)


Til*_*ilo 6

关于懒惰查找:

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

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

猜测并不容易,因为视图,控制器,模型,标签,帮助器或验证等等都不同......但......

很容易直接找到,使用这个:

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

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

3个简单步骤:

  1. 创建一个./config/initializers/i18n.rb文件,如上文所述
  2. 把t('.heading')放在你的视图中
  3. 启动"rails server"并查看控制台输出,其中Rails认为默认位置是针对此视图的".heading"...例如I18N-key是什么

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

奇迹般有效 :-)