Rails / I18n:默认范围
我正在使用Rails的默认I18n模块在视图中翻译我的字符串。
现在,当我在注册视图中时,我的所有字符串都从registration
开始。 我总是要写
// or :registration) %>
定义该文件的默认范围(甚至可能在控制器中)会很好,所以对t
的调用会自动添加定义的范围
// controller set_i18n_default_scope :registration // view // --> looks in "registration.heading"
这可能吗?
如果您组织翻译,请添加视图名称,如下所示:
en: registration: index: heading: "Registration heading"
然后你可以用这个:
<%= t(".heading") %>
请注意,第一个字符是一个点。
您可以在Rails Internationalization(I18n)API Guide中阅读它
如果您有许多视图共享的文本,并且您不希望在每个视图的每个部分中复制相同的翻译,则可以使用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字符串? – 例如,在进行懒惰查找时
这并不容易猜测,因为它与视图,控制器,模型,标签,助手或validation等不同……但……
很容易直接找到,使用这个:
http://www.unixgods.org/Rails/where_is_Rails_trying_to_lookup_L10N_strings.html
这有助于弄清楚Rails认为当前范围是什么(例如,当使用“.heading”时)
3个简单步骤:
- 创建一个文件./config/initializers/i18n.rb,如上文所述
- 把t(’。heading’)放在你的视图中
- 启动“rails server”并查看控制台输出,其中Rails认为默认位置是针对此视图的“.heading”…例如I18N-key是什么
(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
(要点: https : //gist.github.com/capripot/6e6cf778ad2db0443280 )
然后启动你的服务器,例如:
I18N_DEBUG=true bundle exec rails server