hello-world
webエンジニアのメモ。とりあえずやってみる。

[rails]国際化対応でlocaleを省略したURLのrouting設定

公開日時

タイトルだけだとよくわからないですね サンプルサイトとして、

/      # トップページ
/about # aboutページ

の2種類があるとします。

このサイトを国際化対応する際に通常は

/ja/      # 日本語版トップページ
/ja/about # 日本語版aboutページ
/en/      # 英語版トップページ
/en/about # 英語版aboutページ

といった/:locale/〜 形式のURLになると思いますが、

:localeが指定されていない場合はデフォルトの:localeを使うrouting設定にするにはどうすればいいかよく分からなかったので調べてみました。

デフォルトの:localeにjaが設定されている場合

/      # 日本語版トップページ
/about # 日本語版aboutページ

で各ページにアクセスできるようにしたかったのです。

  • app/controllers/application_controller.rbを編集

:localeの指定があった場合は該当するlocale設定をするようにbefore_actionを定義します

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception

  before_action :set_locale

  def default_url_options(options = {})
    { locale: I18n.locale }
  end

  def set_locale
    I18n.locale = params[:locale] || I18n.default_locale
  end
end
  • config/routes.rbを編集

:localeでscopeを区切ります

この時、defaults設定に{ locale: "ja" }を設定することで:localeを省略できるようになります

Rails.application.routes.draw do
  root 'pages#index'

  scope "(:locale)", :locale => /ja|en/, defaults: { locale: "ja" } do
    get '' => 'pages#index'
    get 'about' => 'pages#about'
  end
end

参考


Related #Rails

[rails]Active Adminのformでjp_prefectureを使う

都道府県データを扱う際に、都道府県マスターデータをどうしようかなと思っていたところ、 chocoby/jp\_prefectureというgemを発見し、こちらを使わせていただきました。

[Rails]日付と時間の入力フォームにDateTimePickerを使う(bootstrap3-datetimepicker-rails)

Ruby2.1.0, Rails4.1で確認 フォームで日時を入力する際に、カレンダーを表示して入力サポートをするDateTimePickerを導入したかったので調べてみました。

[rails]carrierwaveで特定のuploaderだけ別のs3バケットを使いたい場合

carrierwaveの保存先にs3を使用する場合、config/initializers/carrierwave.rb にs3の設定を書くと思いますが、 特定のuploaderだけ普段とは別のs3バケットを使いたい場合どうやるのかを調べてみました。

[Rails]ActiveAdminでCSVダウンロード機能をカスタマイズする

ActiveAdminにはcsvダウンロード機能がデフォルトついているのですが、デフォルトのままだと一括でcsvデータを取得することができません。(管理画面表示1ページあたりの表示件数分になるので30件しか取得できませんでした)