Try T.M Engineer Blog

「アウトプットする事は大事だ」と思って初めたブログ、プログラミング、独り語り、etc

Railsの国際化機能を使って日本語/英語を切り替える機能を実装

学びシリーズ第4弾です。

作ってみた機能

Railsの国際化機能を使って日本語/英語を切り替える機能を実装

環境構成

全体構成・完成イメージ

f:id:special-moucom:20180522013228p:plain

DB(Table)

なし

プログラムコード等

Config


今回は、多くのConfig設定を行います。

■ config/application.rb

config.i18n.default_locale = :ja

デフォルトのロケールを日本語表記に設定します。

  • ロケールとは?
    ソフトウェアに内蔵される、言語や国・地域ごとに異なる単位、記号、日付、通貨などの表記規則の集合。または単に、利用する言語や国・地域の指定のこと。(IT用語辞典より)

■ config/routes.rb

get "locale" => "managers#locale", as: "locale"

日本語表記/英語表記を切り替えるroutesを設定します。

■ config/locales/en.yml config/locales/ja.yml

ja:
  activerecord:
    models:
  attributes:
    manager:
      manager_name: ユーザー名
      password: パスワード

en:
  activerecord:
    models:
  attributes:
    manager:
      manager_name: UserName
      password: Password
  

日本語表記と英語表記のロケール用のテキストをYAML形式で作成します。

Controller


■ managers_controller.rb

class ManagersController < ApplicationController

  def locale
    if ["ja", "en"].include?(params[:locale])
      cookies[:locale] = params[:locale]
      redirect_to :root
    end
  end
  
end

ここでcookieにViewから受け取った日本語表記("ja")/英語表記("en")の値をセットする。

■ application_controller.rb

  before_action :set_locale

  def set_locale
    if ["ja", "en"].include?(cookies[:locale])
      I18n.locale = cookies[:locale]
    end
  end

cookieに保存された日本語表記("ja")/英語表記("en")をGemパッケージのrails-i18nに読み込ませて、表記を変更します。

以下は、ご参考です。

View


■ members/index.html.erb

<%= form_tag :session do %>
  <table id="login_form">
    <tr>
      <td style="text-align: right"><%= t('attributes.manager.manager_name') %></td>
      <td><%= text_field_tag "manager_name", "", style: "width: 120px" %></td>
    </tr>
    <tr>
      <td style="text-align: right"><%= t('attributes.manager.password') %></td>
      <td><%= password_field_tag "password", "", style: "width: 120px" %></td>
    </tr>
    <tr>
      <td colspan="2" style="text-align: center">
        <%= submit_tag "ログイン" %></td>
    </tr>
  </table>
<% end %>

<%= link_to "日本語", locale_path(locale: "ja") %>
<%= link_to "英語", locale_path(locale: "en") %>

学んだ事

よくサイト等で見る日本語表記/英語表記の切り替え方を学びました。これで、グローバル化にも対応できますね。今はある書籍を使ってRailsの勉強をしていますが、Railsチュートリアルなるものがあるとのことなので、今後はそちらも使って学習していこうと思います。