9 Stimmen

i18n-Fallback in Rails vorübergehend deaktivieren

I18n Fallback wird geladen:

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

Gibt es eine Idee, wie man das vorübergehend deaktivieren kann? Ich habe Formulare, in denen ich verschiedene Sprachversionen bearbeiten möchte, und mit Fallback bekomme ich Felder mit der Standardsprache, wenn die angegebene Übersetzung noch nicht vorhanden ist.

4voto

iGEL Punkte 14948

Sie können die fallback: true Option zu I18n.t , was I18n daran hindert, nach anderen Gebietsschemata zu suchen ( siehe Umsetzung hier ). Aber es ist wahrscheinlich nicht Teil der öffentlichen API...

2voto

p.matsinopoulos Punkte 7536

Sie können passieren :fallback => 'false' zu Ihrem I18n.translate Aufrufen, aber dies ist nicht Teil der öffentlichen API.

Eine andere Möglichkeit, die Sie vielleicht ausprobieren möchten, ist die folgende:

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

Dies führt dazu, dass für jedes verfügbare Gebietsschema nur die eigene Übersetzung als Fallback verwendet wird. Also, wenn die Übersetzung nicht in sich selbst gefunden wird, dann gibt es kein Fallback, auf das zurückgegriffen werden kann.

In diesem Fall müssen Sie jedoch einen Weg finden, um die Standardrückstellung wiederherzustellen.

Das können Sie zum Beispiel mit einer Anweisung wie dieser tun:

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

1voto

Max Prokopiev Punkte 273

Falls sich noch jemand fragt, wie man das macht, kann man die I18n.fallbacks auf die Schnelle:

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

Ich bin mir allerdings nicht sicher, wie sicher das ist.

0voto

Jeppe Liisberg Punkte 3674

Verwenden Sie globalize?

Ich verwende I18n Fallback für meine Systemstrings und globalize3 für meine Attributübersetzungen. Ich möchte, dass System-Strings zurückfallen, aber nicht Attribute. Ich habe einfach Fallbacks für globalize nur mit einem kleinen Affen Patch deaktiviert:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X