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
:
Dies ist in application_controller.rb
:
(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?
Hier ist meine letzte Problemumgehung, die zu funktionieren scheint (fügen Sie diese in application.rb
oder eine Ihrer Umgebungskonfigurationsdateien bei Bedarf ein):
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.
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%Tags und Links ruby-on-rails internationalization