読者です 読者をやめる 読者になる 読者になる

ちーくんのブログ

プログラミング備忘録

deviseのメッセージを日本語化する方法

こんにちは。本日はdeviseで表示されるメッセージを国際化して日本語に対応させる方法です。

deviseはデフォルトだともちろん英語対応のみなので、こちらで日本語ファイルを対応させなければなりません。

しかしながら、幸いな事に親切な人々がdeviseの日本語ファイルをGitHub等で無償で公開してくれているので、ありがたく使わせていただきましょう。

(日本語ファイルを作成された方々にはこの場を借りてお礼申し上げます。本当にありがとうございます。)

devise専用のja.ymlをつくる

Railsで多言語化するには辞書ファイルをlocalesフォルダに置きますが、deviseの辞書ファイルも同じようにlocalesフォルダに置きます。

また管理をしやすくするように、modelなどのフォルダとは別にdevise専用のフォルダを作り、その中にそれぞれの翻訳ファイルを作りましょう。

# config/locales/devise/ja.yml

# Additional translations at https://github.com/plataformatec/devise/wiki/I18n
ja:
  devise:
    confirmations:
      confirmed: 'アカウントを登録しました。'
      send_instructions: 'アカウントの有効化について数分以内にメールでご連絡します。'
      send_paranoid_instructions: "あなたのメールアドレスが登録済みの場合、本人確認用のメールが数分以内に送信されます。"
    failure:
      already_authenticated: 'すでにログインしています。'
      inactive: 'アカウントが有効化されていません。メールに記載された手順にしたがって、アカウントを有効化してください。'
      invalid: "%{authentication_keys} もしくはパスワードが不正です。"
      locked: 'あなたのアカウントは凍結されています。'
      last_attempt: 'あなたのアカウントが凍結される前に、複数回の操作がおこなわれています。'
      not_found_in_database: "%{authentication_keys} もしくはパスワードが不正です。"
      timeout: 'セッションがタイムアウトしました。もう一度ログインしてください。'
      unauthenticated: 'アカウント登録もしくはログインしてください。'
      unconfirmed: 'メールアドレスの本人確認が必要です。'
    mailer:
      confirmation_instructions:
        subject: 'アカウントの有効化について'
      reset_password_instructions:
        subject: 'パスワードの再設定について'
      unlock_instructions:
        subject: 'アカウントの凍結解除について'
    omniauth_callbacks:
      failure: "%{kind} アカウントによる認証に失敗しました。理由:(%{reason})"
      success: "%{kind} アカウントによる認証に成功しました。"
    passwords:
      no_token: "このページにはアクセスできません。パスワード再設定メールのリンクからアクセスされた場合には、URL をご確認ください。"
      send_instructions: 'パスワードの再設定について数分以内にメールでご連絡いたします。'
      send_paranoid_instructions: "あなたのメールアドレスが登録済みの場合、パスワード再設定用のメールが数分以内に送信されます。"
      updated: 'パスワードが正しく変更されました。'
      updated_not_active: 'パスワードが正しく変更されました。'
    registrations:
      destroyed: 'アカウントを削除しました。またのご利用をお待ちしております。'
      signed_up: 'アカウント登録が完了しました。'
      signed_up_but_inactive: 'ログインするためには、アカウントを有効化してください。'
      signed_up_but_locked: 'アカウントが凍結されているためログインできません。'
      signed_up_but_unconfirmed: '本人確認用のメールを送信しました。メール内のリンクからアカウントを有効化させてください。'
      update_needs_confirmation: 'アカウント情報を変更しました。変更されたメールアドレスの本人確認のため、本人確認用メールより確認処理をおこなってください。'
      updated: 'アカウント情報を変更しました。'
    sessions:
      signed_in: 'ログインしました。'
      signed_out: 'ログアウトしました。'
      already_signed_out: '既にログアウト済みです。'
    unlocks:
      send_instructions: 'アカウントの凍結解除方法を数分以内にメールでご連絡します。'
      send_paranoid_instructions: 'アカウントが見つかった場合、アカウントの凍結解除方法を数分以内にメールでご連絡します。'
      unlocked: 'アカウントを凍結解除しました。'
  errors:
    messages:
      already_confirmed: 'は既に登録済みです。ログインしてください。'
      confirmation_period_expired: "の期限が切れました。%{period} までに確認する必要があります。 新しくリクエストしてください。"
      expired: 'の有効期限が切れました。新しくリクエストしてください。'
      not_found: 'は見つかりませんでした。'
      not_locked: 'は凍結されていません。'
      not_saved:
        one: "エラーが発生したため %{resource} は保存されませんでした:"
        other: "%{count} 件のエラーが発生したため %{resource} は保存されませんでした:"

フォーム関連の国際化

deviseのフォーム部分を国際化するには、対応するmodelのlocalesフォルダに翻訳ファイルを置けば大丈夫です。

modelも管理がしやすくなるように上記のdevise同様、model専用のフォルダを作り、その中にそれぞれの翻訳ファイルを置きましょう。

# config/locales/modeles/user/ja.yml

ja:
  activerecord:
    models:
      user: ユーザー
    attributes:
      user:
        name: ユーザーネーム
        email: メールアドレス
        password: パスワード
        password_confirmation: パスワード(確認用)
        current_password: 現在のパスワード
        remember_me: 保存する


これでフォームまわりはOKです。


また各自deviseをオリジナルにカスタマイズした場合は、ここに対応する日本語を書きましょう。

# 例えば新規登録フォームにユーザーイメージを登録するフォームがあれば下記のように対応する日本語を書き足す。

attributes:
      user:
        image: ユーザーイメージ

デフォルトの言語を日本語にする

基本的にはmodelやviewの国際化をするときに、すでにデフォルトの言語を日本語に対応している方が多いと思いますが、一応やっていない人のためにデフォルトの言語を日本語に設定します。

# config/application.rb

config.i18n.default_locale = :ja


また今回はlocalesフォルダの中に各フォルダを作成したので、それだとRailsのデフォルトの設定だと読み込まれません。

なので下記のような設定をして、localesフォルダ以下のフォルダを読み込めるようにします。

#config/application.rb

config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]

それでは実際に見ていきましょう。

一旦サーバーを落としてから、もう一回起動してください。
(再起動しないとエラーが出て読み込まれません。)


ログインした直後のフラッシュメッセージ
f:id:chi_kun:20160609161655p:plain


新規登録画面
f:id:chi_kun:20160609161459p:plain


きちんとdeviseで生成されるメッセージが日本語になっていますね。

今回は日本語でしたが、英語・スペイン語・フランス語などの辞書ファイルが公開されているので、各自サービスに合わせて使ってみてください。



本日は以上です。