我使用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个简单步骤:
- 创建一个文件/config/iinitializers/i18n.rb,如上面文章中所述
- 把t('.heading')放在你的视野中
- 启动"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