Rails4で多言語対応のサイトを作ってみたよ

Rails4で多言語対応のサイトを作ってみたよRails初心者です。昨日、「Ruby on Rails 3 アプリケーションプログラミング」を読み終え、手応えを感じたので一つサイトを作成してみました。その際に、多言語対応を行ったので、メモがてら書いてみたいと思います。僕なりのやり方です。ご教授お願い致します!

1.辞書を用意する!

これは有名だとは思うのですが、svenfuchs/rails-i18nから辞書のひな形を落としてきます。それを、とりあえずdefaultとして、いじらず、customという自分用のymlを作成して、こちらにガリガリ書き込みました。フォルダ構成などは、下記のサイトを参考にしています。ほんとにわかりやすい!ありがとうございました。

参考させていただきました! Railsの多言語化対応 i18nのやり方を整理してみた!【国際化/英語化】 – 酒と泪とRubyとRailsと

2.URLのパラメータで動的に言語を取得する

ここ、ハイライトです。本を参考にしたり、色々しながら、とりあえず何とか書き上げました。

class ApplicationController < ActionController::Base
  # Prevent CSRF attacks by raising an exception.
  # For APIs, you may want to use :null_session instead.
  protect_from_forgery with: :exception

  before_action :detect_locale

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

  private
  def detect_locale
    if params[:locale].nil?
      I18n.locale = request.headers['Accept-Language'].scan(/^[a-z]{2}/).first
    else
      I18n.locale = params[:locale]
    end
end

ApplicationControllerですね。とりあえず親です。親のbefore_actionでいろいろできるようになってます。ちょっと大げさかも。。default_url_optionsを上書きしているのは、これで、現在のロケールを毎回パラメタにセットできるように指定ます。detect_localeでは、localeパラメタに値がない場合(初回)は、ヘッダからロケールを取得しています。値がある場合はそれを、セットしています。あぁ、振り返るとシンプルだな。。。結構苦しみました。

3.ボタンでロケールを変更する

ボタンはこんなかんじです(実際は表示を変えるためのclassを設定したりしてもうちょっと長いですが)。あぁ、シンプルですね。。

<%= link_to('日本語', :action => 'index', :locale => 'ja') %>  
<%= link_to('英語', :action => 'index', :locale => 'en') %>

最初、リンククリックでcontrollerのアクションを起動させて〜とかいろいろトライして、routesにハマり、routesにハマり本当に苦しい時間を過ごしたのですが、もう、シンプルにindexでいいやと思って道がひらけました。Railsはあんまり外出しのメソッド書かないものなのかも。

3.DBも他言語化

DBに関しては規模によるかもしれませんが、僕の場合はとても小規模だったのでフィールドを追加して、二ヶ国語を突っ込んでしまいました。値を取得するときは、先ほどのlocaleを見て、どちらを出すか決めます。

<% if I18n.locale.to_s == "ja" %>
    ...処理...
  <% else %>
    ...処理...
  <% end %>

4.Doneです! Ruby on Railsで始めてサイトを作成した人の感想等

初めてのサイト作成だったので結構ハマりました。Routesに関してはまだ曖昧な部分が多いです。ていうか、ちゃんとわかってません。今回は、gregbell/active_adminなども利用して、DBの中身のテストデータ追加や編集はGUIでちゃちゃっと出来て楽でした。最初の頃に導入してよかった。あと、Pureなども使ってみたけど、ほんとに簡単にまぁまぁなサイトが出来て感動。Rails周りっていろいろ進んでるなぁと思う(PureはRails周りってわけでもないか)。それにしても、触れば触るほどRuby on Railsってよく出来てると思う!

専門はiOSだけど、Web側全くわかってなかったのでRailsを始めたのでした。ただ、Rails自体に嵌りそう!よい傾向!

最後になりましたが、この本は本当に良い本ですw ホントです。

Pocket
LINEで送る

You may also like...