joppot

コピペで絶対動く。説明を妥協しない

プログラミング

railsのwebrickでi18nの言語切り分けをサブドメインで設定する

投稿日:2016年10月18日 更新日:

Pocket

topthumb

概要

みなさんこんにちはcandleです。最近では海外展開も視野に入れたwebアプリケーションの開発が行われることが多くなってきているような気がします。

そうなってくると、webアプリケーションの国際化ですが、一般にrailsの言語切り替えはサブドメインかURLの先頭に言語指定を入れる方法がとられます。

今回はサブドメインの方法を見ていきましょう。

前提

適当なrailsアプリケーションがある。

SPONSORED LINK


i18nの基本設定

i18nを設定する場合は何をdefault言語とするかが大事になります。
一般的には英語をデフォルト言語にして、日本語はサブドメインにする方法がよいかと思います。

config/application.rbを開いて、以下を記述します。

config.time_zone = 'Central Time (US & Canada)'
config.i18n.default_locale = :en
config.i18n.available_locales = [:en, :ja]
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]

タイムゾーンをアメリカにします。
デフォルトの言語は英語にします。
使用できる言語の設定でjaを加えます。
他言語用の言語ファイルを読み込む設定を最後に記述します。

appi18n

設定は以上です。

hostsでサブドメインを設定する

もしかするとwebrickの設定とかでサブドメインができるのかもしれないのですが、
それよりも簡単に、hostsファイルにサブドメインを設定する方が早いと思います。

/etc/hosts

をエディタで開いて、以下を記述します。

127.0.0.1 ja.localhost

保存しましょう。

http://ja.localhost:3000

にアクセスできるようになりました。


サブドメインをi18nのlocalesにする設定

サブドメインで言語指定をしてもrails側でそれを処理してi18nに設定しなければ、ただのサブドメインなので、設定します。
このサイトの内容を参考にさせて頂きました。

http://ruby-rails.hatenadiary.com/entry/20150226/1424937175
app/controllers/application_controller.rbを開きます。

以下を記述します。

  before_action :set_locale

  def set_locale
    I18n.locale = extract_locale_from_tld || I18n.default_locale
  end

  def extract_locale_from_tld
    parsed_locale = request.subdomains.first
    I18n.available_locales.map(&:to_s).include?(parsed_locale) ? parsed_locale : nil
  end

プログラムの説明としては

extra_locale_from_tldはrequestからサブドメインんだけを取り出し、
その名前がi18nで定義されていれば、サブドメインを返して、定義されていなければ、nilを返します。

返ってきた値をset_locale関数は受けとって、
もしもサブドメインがある場合はそれをi18nに設定し、
無ければ、デフォルト言語を設定します。

yamlを用意する

他言語用のyamlファイルを用意します。
一般に以下のようにします。

config/locales/views/コントローラー名/ja.yml
config/locales/views/コントローラー名/en.yml

例えばitems controllerのindexアクションに任意の文字列を表示したい場合は

config/locales/views/items/ja.yml

を作成し
中身を以下のようにします。

ja:
  items:
    index:
      header: アイテム一覧

jaitemsyml

そしたら、app/views/items/index.html.erb
を開いて、以下を記述すれば表示されます。

<%= t('.header') %>

konnnakannji

同様に、en.ymlを用意すれば、localesがenの時はenが表示されます。

実際にアクセスする

htpp://ja.localhost:3000

これで日本語が表示されます。

itemsjaname


まとめ

ローカルでサブドメインを使って、i18nをやってみました。
どうでしたでしょうか。

スポンサードリンク

「為になったなぁ」と思ったら、シェアお願いします。

-プログラミング
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

fabricでvagrantのデフォルトの秘密鍵を使ってサーバにアクセスする

概要 みなさんこんにちはcandleです。今回はfabricを使ってvagrant上のvmにアクセスする方法を紹介します。様々なサイトを閲覧すると、あまりvagrantのデフォルトの鍵を使用して、fa …

wordpress skeletonを使った開発環境の構築

はじめに みなさんこんにちはcandleです。wordpressは大変便利なのですが、いまいちgitで管理するのが難しいものです。 というのも、wordpress全体をgit管理対象にしてしまうと、w …

Rails pluginを使ったgemの作り方[4](controller helper編)

概要 みなさんこんにちはcandleです。今回はgemの中枢とも言えるhelperの作り方です。 helperというのは様はgemにすることで便利になる関数を作るとというイメージです。 例えば、con …

macにmiddlemanの環境構築をする

概要 みなさんこんにちはcandleです。今回はmacにmiddlemanの環境構築をしてみたいと思います。 middlemanといえばwebサイト作成支援ツールみたいなものです。 githubやhe …

railsのrakeのmigrationファイルを削除しNO FILEとstatusに出た時の対処

概要 みなさんこんにちはcandleです。今回は誤ってデータベースに反映したマイグレーションファイルを不要だと思って削除した時に、NO FILEと出てきてしまった時の対処です。 言うなれば、下のような …

  • English
  • 日本語

プロフィール


ベンチャー企業のCTOをやってます。大学時代にプログラミングを始め、javaから入門し、C++へて、PHPへと進み、会社ではRailsを使用。自動化が大好きなプログラマー

twitter

スポンサードリンク

アーカイブ