Ich habe gerade auf Rails 4.0.2 aktualisiert und erhalte folgende Warnung:
[veraltet] I18n.enforce_available_locales wird in Zukunft standardmäßig auf true gesetzt. Wenn Sie die Überprüfung Ihres Gebietsschemas wirklich überspringen möchten, können Sie I18n.enforce_available_locales = false festlegen, um diese Meldung zu vermeiden.
Gibt es ein Sicherheitsproblem, wenn es auf false gesetzt wird?
ruby-on-rails
ruby
ruby-on-rails-4
deprecated
rails-i18n
Mauricio Moraes
quelle
quelle
Rails 4.0.1
Anwendungen.Antworten:
Wichtig : Stellen Sie sicher, dass Ihre App nicht I18n 0.6.8 verwendet. Es gibt einen Fehler, der verhindert, dass die Konfiguration korrekt eingestellt wird .
Kurze Antwort
Um die Warnung auszuschalten, bearbeiten Sie die Datei application.rb und fügen Sie die folgende Zeile in den
Rails::Application
Text einDie möglichen Werte sind:
Hinweis:
false
nichttrue
.config.i18n.default_locale
Konfiguration oder andere i18n-Einstellungen vornehmen, stellen Sie sicher, dass Sie dies nach dem Festlegen derconfig.i18n.enforce_available_locales
Einstellung tun .config
möglicherweise keine Auswirkungen. In diesem Fall stellen Sie es direkt aufI18n
using einI18n.config.enforce_available_locales
.Vorsichtsmaßnahmen
Beispiel
Lange Antwort
Die Verfallswarnung wird jetzt sowohl in Rails 4 (> = 4.0.2) als auch in Rails 3.2 (> = 3.2.14) angezeigt. Der Grund wird in diesem Commit erläutert .
Wenn Sie vor dieser Änderung ein nicht unterstütztes Gebietsschema übergeben haben, wechselt Rails stillschweigend zu diesem Gebietsschema, wenn das Gebietsschema gültig ist (dh wenn sich eine entsprechende Gebietsschemadatei im
/config/locales
Ordner befindet). Andernfalls wird standardmäßig dieconfig.i18n.default_locale
Konfiguration verwendet (standardmäßig: en) ).Die neue Version des I18n-Edelsteins zwingt Entwickler dazu, sich der Verwaltung des Gebietsschemas etwas bewusster zu werden.
In Zukunft wird sich das Verhalten ändern und wenn ein Gebietsschema ungültig ist, wird die Rails-App einen Fehler auslösen.
In Vorbereitung auf eine solche Änderung (die möglicherweise mehrere Anwendungen beschädigen kann, die bis heute auf stillen Standardeinstellungen beruhten) werden Sie durch die Warnung gezwungen, explizit anzugeben, welche Validierung Sie während der aktuellen Übergangszeit durchführen möchten.
Um das vorherige Verhalten wiederherzustellen, setzen Sie einfach die folgende Konfiguration auf
false
Andernfalls setzen Sie den Wert auf true, um den neuen Rails-Standardeinstellungen zu entsprechen, oder wenn Sie die Domänenüberprüfung strenger gestalten möchten, und vermeiden Sie den Wechsel zum Standard bei ungültigem Gebietsschema.
Vorbehalt
Wenn Sie die setzen
config.i18n.default_locale
Konfiguration oder unter Verwendung eines der zuvor genannten Verfahren (default_locale=
,locale=
,translate
, usw.), stellen Sie sicher , dass es nach dem Einstellen der tunconfig.i18n.enforce_available_locales
Einstellung. Andernfalls wird die Abwertungswarnung weiterhin angezeigt. (Danke Fábio Batista ).Wenn Sie Edelsteine von Drittanbietern verwenden, die I18n-Funktionen enthalten, hat das Durchsetzen der Variablen möglicherweise keine Auswirkungen. Tatsächlich ist das Problem das gleiche wie im vorherigen Punkt beschrieben, nur ein bisschen schwieriger zu debuggen.
Dieses Problem hat Vorrang. Wenn Sie die Konfiguration in Ihrer Rails-App festlegen, wird der Wert nicht sofort dem I18n-Juwel zugewiesen. Rails speichert jede Konfiguration in einem internen Objekt, lädt die Abhängigkeiten (Railties und Edelsteine von Drittanbietern) und übergibt die Konfiguration an die Zielklassen. Wenn Sie ein Gem (oder Rails-Plugin) verwenden, das eine der I18n-Methoden aufruft, bevor die Konfiguration I18n zugewiesen wird, wird die Warnung angezeigt.
In diesem Fall müssen Sie den Rails-Stack überspringen und die Konfiguration durch Aufrufen sofort auf das I18n-Juwel setzen
anstatt
Das Problem ist leicht zu beweisen. Versuchen Sie, eine neue leere Rails - Anwendung zu generieren , und Sie werden diese Einstellung sehen
config.i18n
in denapplication.rb
Werken in Ordnung.Wenn dies in Ihrer App nicht der Fall ist, gibt es eine einfache Möglichkeit, den Täter zu debuggen. Suchen Sie das i18n-Juwel in Ihrem System, öffnen Sie die
i18n.rb
Datei und bearbeiten Sie die Methodeenforce_available_locales!
, um die Anweisung einzuschließenputs caller.inspect
.Dies führt dazu, dass die Methode die Stapelverfolgung bei jedem Aufruf druckt. Sie können feststellen, welcher Edelstein ihn aufruft, indem Sie die Stapelverfolgung überprüfen (in meinem Fall war es Authlogic).
quelle
config.i18n.default_locale
Konfiguration festlegen, stellen Sie sicher, dass Sie dies nach dem Festlegen der neuenconfig.i18n.enforce_available_locales
Einstellung tun . Andernfalls wird die Abwertungswarnung weiterhin angezeigt.I18n.enforce_available_locales = true
.config.i18n.enforce_available_locales = true
funktioniert nichtI18n.config.enforce_available_locales
nicht seinI18n.config.i18n.enforce_available_locales
, ich habe deine Antwort bearbeitet. Vielen Dank für das Update.I18n.config.available_locales = [:your_locale, :en]
zum Beispiel einstellen muss , sonst können Sie Ihren Rails-Server nicht starten.Beachten Sie der Vollständigkeit halber, dass Sie die Warnung auch entfernen können, indem Sie
I18n.enforce_available_locales
intrue
(oderfalse
) Folgendes einstellenconfig/application.rb
:quelle
config.i18n.enforce_available_locales = true
?I18n.config
damit dies eine Wirkung hatconfig.i18n.enforce_available_locales = true
In config / application.rb wurde die Verfallswarnung für mich in Rails 4.0.2 entfernt, aber nur, wenn ich sie über die anderenconfig.i18n
Zeilen setze .I18n.config.enforce_available_locales = true
arbeitete für mich in Rails 3.2.16 (ich habe es in config / application.rb gestellt)quelle
Scheint nicht so - das wäre das vorherige Verhalten der Funktionsweise von i18n - neues Verhalten (true) löst einen Fehler aus, wenn Sie nach einem Gebietsschema fragen, das nicht implementiert / verfügbar ist.
Siehe das Commit, das diese Warnung hinzugefügt hat: https://github.com/svenfuchs/i18n/commit/3b6e56e06fd70f6e4507996b017238505e66608c
quelle
Wenn Sie sich für Gebietsschemas interessieren möchten, schreiben Sie in eine
appilcation.rb
Datei.Sie können false schreiben, wenn das Gebietsschema überprüft wird, und das interessiert Sie nicht.
quelle