20

我有这样的国际化问题如何使用国际化的轨道设有后备

activerecord: 
    notices: 
    messages: 
     success: 
     create: "Something was created" 
    models: 
     user: 
     success: 
      create: "Thanks for registration" 

I18n.t("activerecord.notices.models.user.success.create") 
# => "Thanks for registration" 


I18n.t("activerecord.notices.models.book.success.create") 
# => "translation missing: de, activerecord, notices, models, book, success, create" 

我不知道为什么这本书的模型没有得到后备按摩。我已经设置了config.i18n.fallbacks = true。我使用Rails 3

+0

关键本书是不存在的文件。看一看,然后通过添加书本键重试。 – 2010-11-22 08:47:27

+0

是的,它不存在,但多数民众赞成使用后备的主要原因。如果你定义了一切,你不需要回退。但我不能那样做。它对我来说是无用的工作。 – antpaw 2010-11-22 09:48:02

+0

如果您编辑问题以澄清更多内容,那将会很不错。你现在正在使用哪些语言环境?你想回退哪些语言环境? (好像你有自己的德语区域设置,但你为什么写英文呢?) – lulalala 2013-05-22 04:23:12

回答

22

:默认给出选项,它的价值将如该翻译是缺少返回:

​​

更多信息here

+0

好的,谢谢,这似乎对我很有用 “I18n.t(”activerecord.notices.models。#{object.to_s.downcase }。#{type}“,:default => I18n.t(”activerecord.notices.messages。#{type}“))” – antpaw 2010-11-22 11:14:22

17

是否启用了回退你的后端?假设它的简单(基于例如在阳明):

把这个在初始化:

require "i18n/backend/fallbacks" 
I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks) 

https://github.com/svenfuchs/i18n/wiki/Fallbacks

+0

对于rails,只需将它放入像config/initializers/i18n_fallbacks.rb这样的文件中 – 2012-05-29 10:30:52

+0

这对我Rails 2工作 – lobati 2014-05-29 16:21:59

+0

这对我的Rails 2 - 包括'i18n'宝石后。 – 2014-06-24 04:55:28

82

我在配置设置/ application.rb中通常

config.i18n.fallbacks =[:de, :fr, :en] 

所以您可以减慢回退的顺序。

但是请注意在某些环境/ *。rb中配置被覆盖。

+15

这应该是被接受的答案。 – samvermette 2013-08-10 04:51:04

+1

这个**不应该是被接受的答案,OP要求关键回退(AKA默认值),而不是语言回退。 – rewritten 2015-07-15 21:46:57

+0

@rewritten你能澄清一点吗?我觉得我无法很清楚地区分这两者,也无法在网上找到关于它的讨论。 – lulalala 2015-09-15 03:25:08

16

在轨3+,这是设置在config /环境文件:

# Enable locale fallbacks for I18n (makes lookups for any locale fall back to 
    # the I18n.default_locale when a translation can not be found) 
    config.i18n.fallbacks = true 
+0

这不再是默认设置,但仍然可以添加。 – tybro0103 2011-11-01 18:27:24

4

我相信处理缺失字符串的最佳方式,是显示一个默认的语言环境,而不是一个错误信息。

在application.rb中添加此行以回退到英语语言环境。如果要指定特定的语言环境回退

config.i18n.fallbacks = [:en] 

,您可以使用以下命令:

config.i18n.fallbacks = {:de => [:de,:en], :en => [:en,:de]} 

另外请注意,您可以启用和禁用基于您的环境回退。 因此,尽管在发展它可能是有意义的有显示错误,则可以选中你environments/production.rb回退下列要求:

config.i18n.fallbacks = true 
+1

目前我不同意。如果一位开发人员更改或删除翻译密钥并在稍后部署该应用程序,则可能会获取缺省语言环境字符串并且不知道该错误,然后客户就会抱怨。创建测试规范以确保某种语言的所有密钥都已到位可能会更好 – 2016-01-14 13:13:24