l 방법을 사용할 때의 오류 해결 : translation missing [Rails, I18n]
덧붙여서 I18n이나 l메소드의 상세한 이용 방법에 대해서는, 참고 URL을 봐 주세요.
결론 ≒ 원인
이 에러의 원인은 l메소드의 인수인
@user.created_at
의 클래스가, ActiveSupport::TimeWithZone
이기 때문입니다.I18n을 이용하는 경우, l메소드를 이용했을 때에는, 좋게 일본어화해 줍니다. (application.rb 등을 올바르게 설정할 수 있다면)
그러나 l 메소드의 인수를 번역하는 규칙이 이번 오류와 크게 관련되어 있으며,
l 방법을 사용하면,
Date 클래스의 인스턴스는
ja.date.formats
부하의 포맷을,Time 클래스의 인스턴스는
ja.time.formats
부하의 포맷을,각각 자동으로 찾아가는 사양이 되어 있습니다. (아마도
그래서 이번 오류는
l @user.created_at, format: :ja_ymd
인수가 ActiveSupport::TimeWithZone
클래스이므로 Rails가 ja.time.formats
부하를 찾으러 갔는데,ja_ymd
형식이 정의되지 않았기 때문입니다.해당 코드
config/locales/views/en.yml(오류 발생 시
ja:
date:
formats:
ja_ymd: ! '%Y年%m月%d日' # ここを自動的に呼び出してくれると期待していた。
ja_md: ! '%m月%d日'
ja_ym: ! '%Y年%m月'
hyphen: ! '%Y-%m-%d'
wday: '(%a)'
time:
formats:
ja_ymdhm: ! '%Y年%m月%d日 %H時%M分'
hm: ! '%H:%M'
ja_hm: ! '%H時%M分'
ymdhm: ! '%Y/%m/%d %H:%M'
mdhm: ! '%m/%d %H:%M'
dot_ymd: ! '%Y.%m.%d'
config/application.rb
class Application < Rails::Application
I18n.enforce_available_locales = true
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]
config.i18n.available_locales = :ja
config.i18n.default_locale = :ja
end
app/views/users/show.html.erb
<td>
<%= l @user.created_at, format: :ja_ymd %> # ここでエラー発生 なぜならja.time.formats配下にja_ymdが定義されていないから。
<%= l @user.created_at, format: :ja_hm %> # ここはエラーが発生しない なぜならja.time.formats配下にja_hmが定義されているから。
</td>
콘솔에서 확인
콘솔
[2] pry(main)> @user.created_at.class
=> ActiveSupport::TimeWithZone
[3] pry(main)> I18n.l(Date.today, format: :ja_ymd)
=> "2021年09月22日"
[4] pry(main)> Date.today.class
=> Date
[5] pry(main)> I18n.l(Time.now, format: :ja_ymd) # エラー発生
I18n::MissingTranslationData: translation missing: ja.time.formats.ja_ymd
from /usr/local/bundle/gems/i18n-1.8.10/lib/i18n.rb:374:in `handle_exception`
[6] pry(main)> Time.now.class
=> Time # なぜならTimeクラスだから
해결책
config/locales/views/en.yml(수정
ja:
date:
formats:
ja_ymd: ! '%Y年%m月%d日'
ja_md: ! '%m月%d日'
ja_ym: ! '%Y年%m月'
hyphen: ! '%Y-%m-%d'
wday: '(%a)'
time:
formats:
ja_ymdhm: ! '%Y年%m月%d日 %H時%M分'
ja_ymd: ! '%Y年%m月%d日' # time配下に追記
hm: ! '%H:%M'
ja_hm: ! '%H時%M分'
ymdhm: ! '%Y/%m/%d %H:%M'
mdhm: ! '%m/%d %H:%M'
dot_ymd: ! '%Y.%m.%d'
참고
끝까지 읽어 주셔서 감사합니다!
Reference
이 문제에 관하여(l 방법을 사용할 때의 오류 해결 : translation missing [Rails, I18n]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/koki0527/items/d50427893d6179e7e577텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)