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个简单步骤:

  1. 创建一个文件./config/initializers/i18n.rb,如上文所述
  2. 把t(’。heading’)放在你的视图中
  3. 启动“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