Gemischte Gebietsschemas in Rails i18n

8

Rails mischt irgendwie meine Locales und ich habe absolut keine Ahnung warum. Die meisten meiner übersetzten Strings funktionieren wie erwartet, aber bei einigen werden die Locales gemischt.

Interessanterweise geschieht dies nur auf einem unserer Systeme. Passenger speziell mit Apache.

Bei Verwendung von Webrick, Thin oder Passenger Standalone auf meinem Entwicklungssystem ist alles in Ordnung.

Das habe ich in meinem application.rb :

%Vor%

Dies ist in application_controller.rb :

%Vor%

(Ich erlebe die Probleme auf Seiten, wo @current_client nil ist und der else Teil ausgeführt wird).

Also verwende ich im Grunde das :de Gebietsschema. Wenn ich einen Validierungsfehler in einem Formular zeige, erlebe ich gemischte Übersetzungen wie folgt:

  

ist zu kurz (nicht weniger als 6 Zeichen) und fehlt: en.activecord.errors.custom.password_format

Wie Sie sehen, wird die Fehlermeldung von der ersten fehlgeschlagenen Validierung wie erwartet übersetzt, da die zweite Fehlermeldung versucht, auf die englische Übersetzung zuzugreifen (die nicht existiert).

Ich vermute ein Problem mit dem verzögerten Laden von übersetzten Zeichenfolgen, noch bevor% code% ausgeführt wird.

Irgendwelche Hinweise, warum das passieren könnte?

Für den Rekord: Das ist Rails 3

BEARBEITEN :

Ich habe gerade festgestellt, dass dies von der verwendeten Umgebung abhängt. Bei Verwendung der Entwicklungsumgebung ist alles in Ordnung. Bei der Verwendung der Produktionsumgebung (oder einer produktionsähnlichen Umgebung) erfahre ich das oben beschriebene Verhalten.

BEARBEITEN 2 :

Ich habe noch mehr herausgefunden: Es hängt besonders von before_filter ab. Wenn config.cache_classes eingestellt ist, sehe ich die gemischten Übersetzungen. Wenn auf true gesetzt (wie in der typischen Entwicklungsumgebung), funktioniert i18n wie erwartet.

EDIT 3 :

Vielleicht hängt das mit dem folgenden Fehler zusammen?

Ссылка

Bearbeiten 4 :

Dies hängt mit dem oben erwähnten Fehler zusammen, das Problem liegt an eifrig geladenen Modellklassen, die I18n-Strings verwenden, aber eifriges Klassenladen findet vor der I18n-Initialisierung statt, daher werden die Übersetzungen nicht gefunden. Es gibt sogar einen weiteren Fehler:

Ссылка

Leider haben es die Rails-Jungs nicht geschafft, das Update in die aktuelle Version 3.0.4 aufzunehmen (soweit ich das beurteilen kann). Daher versuche ich, eine solche Problemumgehung (in meiner Anwendungskonfiguration) zu finden:

%Vor%

Pech, das geht nicht. Irgendwelche Hinweise?

    
tbk 03.02.2011, 10:28
quelle

4 Antworten

2

Hier ist meine letzte Problemumgehung, die zu funktionieren scheint (fügen Sie diese in application.rb oder eine Ihrer Umgebungskonfigurationsdateien bei Bedarf ein):

%Vor%

Ich hoffe, das ist für jeden anderen nützlich ...

BEARBEITEN:

Wenn dies nicht für Sie funktioniert, versuchen Sie before_configuration anstelle von before_eager_load (siehe Lösung unten). Zumindest funktioniert das als Workaround für mich in Rails 3.0.10.

    
tbk 16.02.2011, 11:36
quelle
13

Dieses Problem kann auch auftreten, wenn Sie ein Gem haben, das auch I18n verwendet (ich hatte dieses Problem mit active_admin). Rails setzt I18n zu spät für das Gem, um dieselben load_paths verwenden zu können.

Was ich getan habe, war, dies zu production.rb hinzuzufügen:

%Vor%     
fkreusch 07.06.2011 03:31
quelle
0

Haben Sie versucht, an den Einstellungen für die Passenger-Spawn-Methode zu fummeln? Versuchen Sie, es auf konservativ zu setzen, auf diese Weise sollte Passagier sich wie Thin verhalten.

    
pantulis 03.02.2011 12:35
quelle
0

Das Upgrade auf Rails 3.0.5 sollte dieses und ähnliche I18n-Probleme beheben.

Siehe: Ссылка

    
axelarge 18.03.2011 10:17
quelle