난 그냥 레일 4.0.2로 업데이트 하고이 경고가 나타납니다 :
[더 이상 사용되지 않음] I18n.enforce_available_locales는 향후 기본값이 true로 설정됩니다. 로캘의 유효성 검사를 정말로 건너 뛰려면이 메시지를 피하기 위해 I18n.enforce_available_locales = false를 설정할 수 있습니다.
false로 설정하는 데 보안 문제가 있습니까?
답변
중요 : 앱에서 I18n 0.6.8을 사용하고 있지 않은지 확인하십시오 . 구성에 올바르게 설정되지 못하게 하는 버그가 있습니다 .
짧은 답변
경고를 끄려면 application.rb 파일을 편집하고 Rails::Application
본문에 다음 줄을 포함하십시오.
config.i18n.enforce_available_locales = true
가능한 값은 다음과 같습니다.
- 거짓 : 당신이 경우
- 로캘 유효성 검사를 건너 뛰고 싶습니다
- 로케일에 관심이 없다
- 사실 : 만약 당신이
- 유효하지 않은 로케일이 전달되면 응용 프로그램에서 오류가 발생하기를 원합니다.
- 새로운 Rails 비헤이비어를 기본값으로 설정하려는 경우
- 로캘 유효성 검사에주의
노트 :
- 이전 기본 동작은
false
아닙니다true
. - 당신이 설정하는 경우
config.i18n.default_locale
구성 또는 다른 국제화 설정을 설정 한 후 그것을 할 수 있는지 확인config.i18n.enforce_available_locales
설정을. - I18n 기능이 포함 된 타사 보석을 사용하는 경우 Application
config
객체를 통해 변수를 설정해도 효과가 없을 수 있습니다. 이 경우을I18n
사용하여 직접 설정하십시오I18n.config.enforce_available_locales
.
경고
예
require File.expand_path('../boot', __FILE__)
# ...
module YouApplication
class Application < Rails::Application
# ...
config.i18n.enforce_available_locales = true
# or if one of your gem compete for pre-loading, use
I18n.config.enforce_available_locales = true
# ...
end
end
긴 대답
사용 중단 경고가 이제 Rails 4 (> = 4.0.2)와 Rails 3.2 (> = 3.2.14)에 모두 표시됩니다. 이유는 이 커밋에 설명되어 있습니다.
사용 가능한 로캘 적용
때
I18n.config.enforce_available_locales
사실 전달 된 로케일을 사용할 수없는 경우 우리는 국제화 :: InvalidLocale 예외를 발생시킬 수 있습니다.
nil
더 이상 사용되지 않는 오류가 표시 되도록 기본값이 설정되어 있습니다.로 설정하면
false
사용 가능한 로캘을 모두 적용하지 않습니다 (오래된 동작).이것은 다음 방법으로 구현되었습니다.
- I18n.config.default_locale =
- I18n.config.locale =
- I18n. 번역
- I18n. 현지화
- I18n. 음역
이 변경 전에 지원되지 않는 로케일을 전달하면 로케일이 유효한 경우 (예 : /config/locales
폴더 에 해당 로케일 파일이있는 경우) Rails가 자동으로 로케일로 전환합니다 . 그렇지 않으면 로케일의 기본값이 config.i18n.default_locale
구성 (기본값 : : en)입니다 ).
I18n gem의 새로운 버전은 개발자가 로케일 관리를 조금 더 의식하게합니다.
앞으로 동작이 변경되고 로케일이 유효하지 않으면 Rails 앱에서 오류가 발생합니다.
이러한 변경을 준비 할 때 (오늘날까지 자동 기본값에 의존하는 여러 응용 프로그램이 중단 될 수 있음) 경고는 현재 전환 기간 동안 수행 할 유효성 검사를 명시 적으로 선언하도록합니다.
이전 동작을 복원하려면 다음 구성을 설정하십시오. false
config.i18n.enforce_available_locales = false
그렇지 않으면, 새로운 Rails 기본값과 일치하도록 또는 도메인 유효성 검사에 대해 더 엄격하게하고 유효하지 않은 로케일의 경우 기본값으로 전환하지 않으려면 true로 설정하십시오.
config.i18n.enforce_available_locales = true
경고
-
당신이 설정하는 경우
config.i18n.default_locale
구성 또는 앞서 언급 한 방법 (의 사용default_locale=
,locale=
,translate
, 등)에 설정 한 후 그것을 할 수 있는지 확인config.i18n.enforce_available_locales
설정을. 그렇지 않으면 지원 중단 경고가 계속 나타납니다. ( Fábio Batista 감사합니다 ). -
I18n 기능이 포함 된 타사 보석을 사용하는 경우 변수를 통해 설정하면 효과가 없을 수 있습니다. 실제로, 문제는 이전 시점에서 설명한 것과 동일하지만 디버깅하기가 조금 더 어렵습니다.
이 문제는 우선 순위입니다. Rails 앱에서 구성을 설정하면 해당 값이 I18n gem에 즉시 할당되지 않습니다. Rails는 각 설정을 내부 객체에 저장하고 의존성 (Railties 및 타사 gem)을로드 한 다음 구성을 대상 클래스로 전달합니다. 구성이 I18n에 할당되기 전에 I18n 메소드를 호출하는 gem (또는 Rails 플러그인)을 사용하면 경고가 표시됩니다.
이 경우 Rails 스택을 건너 뛰고 config를 즉시 I18n gem으로 설정해야합니다.
I18n.config.enforce_available_locales = true
대신에
config.i18n.enforce_available_locales = true
이 문제는 쉽게 입증 할 수 있습니다. 빈 Rails 앱을 새로 생성하면 해당 설정
config.i18n
이application.rb
제대로 작동 하는 것을 볼 수 있습니다.앱에서 그렇지 않은 경우 범인을 디버깅하는 쉬운 방법이 있습니다. 시스템에서 i18n gem을 찾아
i18n.rb
파일을 열고enforce_available_locales!
명령문을 포함하도록 메소드 를 편집하십시오puts caller.inspect
.이렇게하면 호출 될 때마다 메소드가 스택 추적을 인쇄합니다. 스택 트레이스 (제 경우에는 Authlogic)를 검사하여 어떤 gem을 호출하고 있는지 확인할 수 있습니다.
["/Users/weppos/.rvm/gems/ruby-2.0.0-p247@application/gems/i18n-0.6.9/lib/i18n.rb:150:in `translate'", "/Users/weppos/.rvm/gems/ruby-2.0.0-p247@application/gems/authlogic-3.1.0/lib/authlogic/i18n/translator.rb:8:in `translate'", "/Users/weppos/.rvm/gems/ruby-2.0.0-p247@application/gems/authlogic-3.1.0/lib/authlogic/i18n.rb:79:in `translate'", "/Users/weppos/.rvm/gems/ruby-2.0.0-p247@application/gems/authlogic-3.1.0/lib/authlogic/acts_as_authentic/email.rb:68:in `validates_format_of_email_field_options'", "/Users/weppos/.rvm/gems/ruby-2.0.0-p247@application/gems/authlogic-3.1.0/lib/authlogic/acts_as_authentic/email.rb:102:in `block in included'", "/Users/weppos/.rvm/gems/ruby-2.0.0-p247@application/gems/authlogic-3.1.0/lib/authlogic/acts_as_authentic/email.rb:99:in `class_eval'", "/Users/weppos/.rvm/gems/ruby-2.0.0-p247@application/gems/authlogic-3.1.0/lib/authlogic/acts_as_authentic/email.rb:99:in `included'", "/Users/weppos/.rvm/gems/ruby-2.0.0-p247@application/gems/authlogic-3.1.0/lib/authlogic/acts_as_authentic/base.rb:37:in `include'", "/Users/weppos/.rvm/gems/ruby-2.0.0-p247@application/gems/authlogic-3.1.0/lib/authlogic/acts_as_authentic/base.rb:37:in `block in acts_as_authentic'", "/Users/weppos/.rvm/gems/ruby-2.0.0-p247@application/gems/authlogic-3.1.0/lib/authlogic/acts_as_authentic/base.rb:37:in `each'", "/Users/weppos/.rvm/gems/ruby-2.0.0-p247@application/gems/authlogic-3.1.0/lib/authlogic/acts_as_authentic/base.rb:37:in `acts_as_authentic'", "/Users/weppos/Projects/application/app/models/user.rb:8:in `<class:User>'", "/Users/weppos/Projects/application/app/models/user.rb:1:in `<top (required)>'",
답변
완전성 I18n.enforce_available_locales
을 위해 다음에서 true
(또는 false
) 으로 설정하여 경고를 제거 할 수도 있습니다 config/application.rb
.
require File.expand_path('../boot', __FILE__)
.
.
.
module SampleApp
class Application < Rails::Application
.
.
.
I18n.enforce_available_locales = true
.
.
.
end
end
답변
I18n.config.enforce_available_locales = true
Rails 3.2.16에서 나를 위해 일했습니다 (config / application.rb에 넣었습니다)
답변
그런 식으로 보이지 않습니다-그것은 i18n이 작동하는 방식의 이전 동작 일 것입니다-새로운 동작 (참)은 로케일이 구현되지 않았거나 사용할 수 없을 때 오류를 발생시킵니다.
이 경고를 추가 한 커밋을 참조하십시오 : https://github.com/svenfuchs/i18n/commit/3b6e56e06fd70f6e4507996b017238505e66608c
답변
로케일을 관리하려면 appilcation.rb
파일에 쓰십시오 .
config.i18n.enforce_available_locales = true
로케일 유효성 검사가 마음에 들지 않으면 false를 쓸 수 있습니다.