カテゴリ: Rails 更新日: 2026/03/18

Railsのロケール切り替え完全ガイド|URL・サブドメイン・クッキーで多言語対応を実装しよう

ロケール切り替え実装:URL/サブドメイン/クッキーでlocaleを判定する方法
ロケール切り替え実装:URL/サブドメイン/クッキーでlocaleを判定する方法

先生と生徒の会話形式で理解しよう

生徒

「日本語と英語を切り替えられるWebサイトって、どうやって作っているんですか?」

先生

「Railsではi18nという仕組みを使って、言語や時間の表示を切り替えられます。」

生徒

「URLが /ja/en で分かれているサイトもありますよね?」

先生

「それがロケール切り替えです。URLやクッキーなどを使って判定できます。順番に見ていきましょう。」

1. Railsのロケールとi18nとは?

1. Railsのロケールとi18nとは?
1. Railsのロケールとi18nとは?

Railsのi18nは「internationalization(国際化)」の略で、多言語対応を簡単に行うための仕組みです。 ロケールとは「言語や地域の設定」のことで、日本語ならja、英語ならenといった短い名前で表します。

例えるなら、同じ説明書を「日本語版」「英語版」に切り替えて読むようなイメージです。 Railsでは、この切り替えをプログラムで自動的に行えます。

Railsの仕組みを根本から理解し、現場で通用する 「設計のセオリー」を身につけたいならこの一冊。 MVC、テスト、Docker対応など、実践的な内容が凝縮されています。

パーフェクト Ruby on RailsをAmazonで見る

※ Amazon広告リンク

2. ロケール切り替えの基本的な考え方

2. ロケール切り替えの基本的な考え方
2. ロケール切り替えの基本的な考え方

ロケール切り替えでは、まず「今どの言語を使うか」を決めます。 この判定方法として、主に次の3つがあります。

  • URLで判定する方法
  • サブドメインで判定する方法
  • クッキーで判定する方法

Railsでは、コントローラという場所でロケールを設定するのが一般的です。

3. URLでロケールを切り替える方法

3. URLでロケールを切り替える方法
3. URLでロケールを切り替える方法

URLで切り替える方法は、初心者にとって一番わかりやすく、SEO対策としてもよく使われます。

例:
/ja/posts → 日本語
/en/posts → 英語


# config/routes.rb
scope "(:locale)", locale: /ja|en/ do
  resources :posts
end

次に、コントローラでロケールを設定します。


# app/controllers/application_controller.rb
before_action :set_locale

def set_locale
  I18n.locale = params[:locale] || :ja
end

これは「URLに言語があればそれを使い、なければ日本語にする」という意味です。

4. サブドメインでロケールを切り替える方法

4. サブドメインでロケールを切り替える方法
4. サブドメインでロケールを切り替える方法

サブドメインとは、en.example.com の「en」の部分です。 言語ごとに入り口を分けたいときに使われます。


# app/controllers/application_controller.rb
before_action :set_locale

def set_locale
  I18n.locale = request.subdomain == 'en' ? :en : :ja
end

この場合、英語用と日本語用でURL構造が変わるため、企業サイトなどでよく利用されます。

5. クッキーでロケールを保存する方法

5. クッキーでロケールを保存する方法
5. クッキーでロケールを保存する方法

クッキーとは、ブラウザに保存される小さなメモ帳のようなものです。 一度選んだ言語を覚えておくのに向いています。


def set_locale
  I18n.locale = cookies[:locale] || :ja
end

言語切り替えボタンを押したときに、クッキーへ保存します。


def change_locale
  cookies[:locale] = params[:locale]
  redirect_back(fallback_location: root_path)
end

6. タイムゾーンとロケールの関係

6. タイムゾーンとロケールの関係
6. タイムゾーンとロケールの関係

ロケールは言語、タイムゾーンは時間の基準です。 日本は「東京時間」、海外では国ごとに異なります。


# config/application.rb
config.time_zone = 'Tokyo'
config.active_record.default_timezone = :local

言語と時間をセットで考えることで、より自然な多言語対応になります。

7. 初心者がつまずきやすいポイント

7. 初心者がつまずきやすいポイント
7. 初心者がつまずきやすいポイント

よくある間違いは次の通りです。

  • ロケールの指定を忘れて常に英語になる
  • URLとクッキーの設定が混ざってしまう
  • 翻訳ファイルが読み込まれていない

まずは「URLで切り替える方法」だけを実装するのがおすすめです。

カテゴリの一覧へ
新着記事
New1
Ruby
Rubyのシンボル(:symbol)入門!初心者でもわかる軽量・高速・イミュータブルの特徴と使い方
New2
Ruby
Rubyのヒアドキュメント完全ガイド!初心者でもわかる<<-と<<~の違いとインデント調整のコツ
New3
Rails
Railsのi18n完全入門!lazy lookupの使い方と省略記法を初心者向けにやさしく解説
New4
Rails
YarnとNPMの違いと使い分け方を徹底解説!初心者でもわかるフロントエンド依存管理の基本
人気記事
No.1
Java&Spring記事人気No1
Rails
Railsメール確認(confirmable)の実装手順を完全ガイド!初心者でもわかる有効化リンクと期限設定
No.2
Java&Spring記事人気No2
Ruby
WindowsでRubyをインストールする方法!RubyInstallerとMSYS2を使った完全ガイド
No.3
Java&Spring記事人気No3
Ruby
プロキシ環境でも安心!社内ネットワーク下でのRuby gemインストール完全ガイド【SSL対応も解説】
No.4
Java&Spring記事人気No4
Ruby
RubyのEnumerable完全解説!cycle・zipで繰り返しの達人になろう
No.5
Java&Spring記事人気No5
Ruby
Gemとは?RubyGemsとBundlerを初心者向けに完全解説!依存関係管理も図解でわかりやすく理解
No.6
Java&Spring記事人気No6
Ruby
RubyのEnumerable高速化ガイド!N+1問題や無駄なループを減らす最適化テクニック
No.7
Java&Spring記事人気No7
データベース
Redis(レディス)をキャッシュとして使う基本ガイド!初心者でもわかる高速化の仕組み
No.8
Java&Spring記事人気No8
Rails
VS CodeをRails用に最適化!初心者でもできる拡張機能・Rubocop・フォーマッター・デバッグ設定