Właśnie zaktualizowałem do wersji 4.0.2 i otrzymuję to ostrzeżenie:
[przestarzałe] I18n.enforce_available_locales domyślnie przyjmie wartość true w przyszłości. Jeśli naprawdę chcesz pominąć sprawdzanie poprawności ustawień regionalnych, możesz ustawić I18n.enforce_available_locales = false, aby uniknąć tego komunikatu.
Czy jest jakiś problem z bezpieczeństwem przy ustawianiu wartości false?
ruby-on-rails
ruby
ruby-on-rails-4
deprecated
rails-i18n
Mauricio Moraes
źródło
źródło
Rails 4.0.1
aplikacji.Odpowiedzi:
Ważne : upewnij się, że Twoja aplikacja nie używa I18n 0.6.8, ponieważ zawiera błąd uniemożliwiający prawidłowe ustawienie konfiguracji .
Krótka odpowiedź
Aby wyciszyć ostrzeżenie, edytuj plik application.rb i dołącz następujący wiersz do
Rails::Application
treściMożliwe wartości to:
Uwaga:
false
, a nietrue
.config.i18n.default_locale
konfigurację lub inne ustawienia i18n, pamiętaj, aby to zrobić po ustawieniuconfig.i18n.enforce_available_locales
ustawienia.config
obiekt aplikacji może nie mieć żadnego efektu. W takim przypadku ustaw bezpośrednio naI18n
używanieI18n.config.enforce_available_locales
.Ostrzeżenia
Przykład
Długa odpowiedź
Ostrzeżenie o wycofaniu jest teraz wyświetlane zarówno w Railsach 4 (> = 4.0.2), jak i Railsach 3.2 (> = 3.2.14). Powód wyjaśniono w tym zatwierdzeniu .
Przed tą zmianą, jeśli przekazałeś nieobsługiwane ustawienia narodowe, Railsy po cichu przełączyłyby się na nie, jeśli ustawienia narodowe są prawidłowe (tj. Jeśli w
/config/locales
folderze znajduje się odpowiedni plik ustawień narodowych), w przeciwnym razie ustawienia narodowe domyślnieconfig.i18n.default_locale
skonfigurują się (domyślnie: en ).Nowa wersja klejnotu I18n zmusza deweloperów do większej świadomości zarządzania lokacjami.
W przyszłości zachowanie się zmieni, a jeśli ustawienia regionalne będą nieprawidłowe, aplikacja Railsy zgłosi błąd.
W ramach przygotowań do takiej zmiany (która może potencjalnie uszkodzić kilka aplikacji, które do tej pory polegały na cichych ustawieniach domyślnych), ostrzeżenie zmusza cię do jawnego zadeklarowania, którą walidację chcesz wykonać w bieżącym okresie przejściowym.
Aby przywrócić poprzednie zachowanie, po prostu ustaw następującą konfigurację na
false
w przeciwnym razie ustaw wartość true, aby dopasować nowe wartości domyślne Rails lub jeśli chcesz być bardziej sztywny przy sprawdzaniu poprawności domeny i unikaj przełączania na domyślne w przypadku nieprawidłowych ustawień regionalnych.
Zastrzeżenie
Jeśli ustawienie
config.i18n.default_locale
konfiguracji lub przy użyciu jednego z wcześniej wymienionych metod (default_locale=
,locale=
,translate
, etc), upewnij się, aby to zrobić po ustawieniuconfig.i18n.enforce_available_locales
ustawienia. W przeciwnym razie pojawi się ostrzeżenie o wycofaniu. (Dzięki Fábio Batista ).Jeśli używasz klejnotów innych firm, które zawierają funkcje I18n, ustawienie zmiennej może nie mieć efektu. W rzeczywistości problem jest taki sam, jak opisano w poprzednim punkcie, tylko nieco trudniejszy do debugowania.
Ta kwestia ma pierwszeństwo. Po ustawieniu konfiguracji w aplikacji Rails wartość nie jest natychmiast przypisywana do klejnotu I18n. Railsy przechowują każdą konfigurację w obiekcie wewnętrznym, ładują zależności (Railties i klejnoty stron trzecich), a następnie przekazują konfigurację do klas docelowych. Jeśli użyjesz gem (lub wtyczki Rails), która wywołuje dowolną metodę I18n, zanim konfiguracja zostanie przypisana do I18n, otrzymasz ostrzeżenie.
W takim przypadku musisz pominąć stos Railsów i natychmiast ustawić konfigurację na klejnot I18n, dzwoniąc
zamiast
Problem jest łatwy do udowodnienia. Spróbuj wygenerować nową aplikację pustych szyn i widać, że ustawienie
config.i18n
wapplication.rb
szlachetnych uczynków.Jeśli w aplikacji tak nie jest, istnieje prosty sposób na debugowanie sprawcy. Znajdź klejnot i18n w swoim systemie, otwórz
i18n.rb
plik i edytuj metodę,enforce_available_locales!
aby dołączyć instrukcjęputs caller.inspect
.Spowoduje to, że metoda będzie drukować ślad stosu przy każdym wywołaniu. Będziesz mógł określić, który klejnot go wywołuje, sprawdzając stacktrace (w moim przypadku był to Authlogic).
źródło
config.i18n.default_locale
konfigurujesz konfigurację, upewnij się, że robisz to po ustawieniu nowegoconfig.i18n.enforce_available_locales
ustawienia. W przeciwnym razie ostrzeżenie o wycofaniu będzie się pojawiać.I18n.enforce_available_locales = true
.config.i18n.enforce_available_locales = true
nie działa.I18n.config.enforce_available_locales
nie powinno byćI18n.config.i18n.enforce_available_locales
, zredagowałem twoją odpowiedź. Dzięki za poprawkę.I18n.config.available_locales = [:your_locale, :en]
na przykład, w przeciwnym razie nie będzie można uruchomić serwera Railsowego.Tylko dla kompletności, uwaga, że można również pozbyć się ostrzeżenia, ustawiając
I18n.enforce_available_locales
siętrue
(lubfalse
) wconfig/application.rb
:źródło
config.i18n.enforce_available_locales = true
?I18n.config
to, aby mieć efektconfig.i18n.enforce_available_locales = true
w config / application.rb wyeliminowałem ostrzeżenie o przestarzałości w Railsach 4.0.2, ale tylko jeśli ustawię je powyżej innychconfig.i18n
linii.I18n.config.enforce_available_locales = true
pracował dla mnie w Railsach 3.2.16 (umieszczam go w config / application.rb)źródło
Nie wydaje się w ten sposób - takie byłoby poprzednie zachowanie w sposobie działania i18n - nowe zachowanie (prawda) spowoduje błąd, gdy poprosisz o ustawienia regionalne, które nie zostały zaimplementowane / dostępne.
Zobacz zatwierdzenie, które dodało to ostrzeżenie: https://github.com/svenfuchs/i18n/commit/3b6e56e06fd70f6e4507996b017238505e66608c
źródło
Jeśli chcesz dbać o ustawienia regionalne, napisz do
appilcation.rb
pliku.Możesz wpisać fałsz, jeśli sprawdzanie poprawności ustawień regionalnych i nie przejmuj się tym.
źródło