学びシリーズ第4弾です。
作ってみた機能
Railsの国際化機能を使って日本語/英語を切り替える機能を実装
環境構成
全体構成・完成イメージ
DB(Table)
なし
プログラムコード等
Config
今回は、多くのConfig設定を行います。
■ config/application.rb
config.i18n.default_locale = :ja
デフォルトのロケールを日本語表記に設定します。
■ 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形式で作成します。
- YAML形式とは?
構造化されたデータを表現するための記法。YAMLは、"YAML Ain't a Markup Language"(YAMLはマークアップ言語ではない)という意味を持つ。(YAML -Wikipediaより)
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のチュートリアルなるものがあるとのことなので、今後はそちらも使って学習していこうと思います。