开发者

Temporary disable i18n fallback in Rails

开发者_JAVA技巧I18n fallback is loaded:

 I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)

Any idea now to temporary disable it? I have forms, where I want to edit various language versions, and with fallback I am getting fields with default language, if given translation is yet not present.


You can pass the fallback: true option to I18n.t, which will prevent I18n from looking up other locales (see implementation here). But it's probably not part of the public API...


You can pass :fallback => 'false' on your I18n.translate calls, but this is not part of the public API.

Another way you might want to try is the following:

I18n.available_locales.each do
  |al| I18n.fallbacks.merge!({al => [al]})
end

This will basically make the fallback for each available locale to include only itself. So, if the translation is not found in itself, then there is not fallback to fall back to.

However, then you need to find a way to restore to the default fallback.

You can do that for example with a statement like:

I18n.available_locales.each do
  |al| I18n.fallbacks.merge!({al => [al, I18n.default_locale]})
end


if anyone is still wondering how to do that, you can change the I18n.fallbacks on the fly:

def foo
  I18n.fallbacks[:at] = [:at]
  # do stuff with I18n#t
ensure
  I18n.fallbacks[:at] = [:at, :de] # or whatever is was before
end

Not sure how safe is that though.


Are you using globalize?

I'm using I18n fallback for my system strings, and globalize3 for my attribute translations. I want system strings to fallback, but not attributes. I simply disabled fallbacks for globalize only with a small monkey patch:

config/initializers/i18n.rb:

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

# monkey patch globalize3 to not use fallbacks
module Globalize
  def self.fallbacks?
    false
  end
end
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜