i18nを使ってフラッシュメッセージを表示する

i18nはRailsアプリケーションを多言語対応させることができる便利なgemです。

以前、軽くこちらで紹介しました。
Railsアプリケーションの日本時間・日本語の設定

i18nは通常の表示部分だけでなく、flashメッセージを多言語化する際にも使えます。

ymlファイルの設定

日本語の単語の定義をconfig/locales/views/users/ja.ymlに設定している場合、例えば、flashメッセージは下記のように記述します。

ja:
  users:
    new:
      form_registration: '登録'
      first_name: '姓'
      last_name: '名'
      mail: 'メールアドレス'
      image_file: 'プロフィール画像'
      password: 'パスワード'
      password_confirmation: 'パスワード(確認)'
      login: 'ログイン'
      forget_password: 'パスワードをお忘れの方はこちら'
      login_link: 'ログインはこちら'
    flash:
      success: "ユーザー登録が成功しました"
      danger: "ユーザー登録失敗"

設定はこれだけです。

controllerからflashメッセージを呼び出す

あとは、controller側で通常のviewファイルでi18nを使う場合と同様に下記のように呼び出すことができます。

    def create
        @user = User.new(user_params)
        if @user.save
            flash[:success] = t 'users.flash.success'
            redirect_to root_path
            
        else
            flash[:danger]= t 'users.flash.danger'
            render :new
            
        end
    end

viewファイル

ちなみにviewファイルは例えば下記のような感じです。

<% if flash[:success] %>
    <%= flash[:success] %>
<% elsif flash[:danger] %>
    <%= flash[:danger] %>
<% end %>

flashメッセージ内で変数を使う

フラッシュメッセージを変数を使って動的に表現することもできます。

ymlファイルを下記のように定義します。

ja:
  boards:
    flash:
      delete: "%{title}を削除しました"

そして、flashメッセージの呼び出し側で、変数の内容を設定します。

flash[:danger] = t 'boards.flash.delete' ,title: @board.title

これによって、flashメッセージが動的になります。

i18nは多言語サービスを作るときにとても便利です。ぜひ使ってみてください。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする