🗂
Rails 多言語化対応 View編
はじめに
このグローバル社会!
開発するサービスによっては多言語化対応が必要になりますよね?
今回自社の開発で多言語化対応をしたので簡単ではありますが導入を紹介します。
Model編はこちら↓
Rails 多言語化対応 Model編
参考サイト
以下のサイトを参考にしました。
記事を読む前に一読お願いします。
before_action以外
i18nについて
特にこの2つ
i18nのベーシックな使い方
辞書ファイルを分割して管理をしやすくする
before_action
実装
config
config/application.rbにデフォルトの言語と複数のロケールファイルを読み込む設定を記述します。
config/application.rb
module TestProject
class Application < Rails::Application
# Settings in config/environments/* take precedence over those specified here.
# Application configuration should go into files in config/initializers
# -- all .rb files in that directory are automatically loaded.
config.i18n.default_locale = :ja
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]
end
end
before_action
controller/application_controller.rbにbefore_actionとして、localeの指定があった場合変更する処理を書きます。
ログイン情報と一緒にlocale情報を持っておいてページを読み込むたびにチェックするイメージです。
controller/application_controller.rb
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
before_action :set_locale
def set_locale
I18n.locale = locale
end
def locale
# ここで言語の切り替えを行う
@locale ||= params[:locale] || I18n.default_locale
end
end
dictionary
1つのファイルに全文言をかくと意味不明状態になるので、
参考サイトに倣って然るべき場所に然るべきファイルを作成し文言を記述していきます。
今回はbrandのviewで使いたかったので
- config/locales/views/brands/ja.yml
- config/locales/views/brands/en.yml
を作成しています。
config/locales/views/brands/ja.yml
ja:
brand_index_title: "ブランド一覧"
config/locales/views/brands/en.yml
en:
brand_index_title: "Brand List"
これ以外にも階層を持った書き方もできたりします。
詳しくは調べてください。
view
書き方はいろいろありますが、階層を持たない場合はこれで統一してください。
(この例にはslimを使用しています)
view/brands/index.rb
h1 = t(:brand_index_title)
結果
locale = :jaの場合
locale = :enの場合
補足
今回はviewでの利用方法でしたが、modelでも利用することになります。
(validのエラーメッセージで使うはず)
Discussion