スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

I18n を使った多言語対応②

多言語対応について②。

というわけで、以前の続き。
前記事はこちら

前回はローケルファイルから文字列を読みだして表示させる所までだったが、
フォームから言語を選択し、反映させるまでを紹介する。

まず、en.ymlに合わせてconfig/localsフォルダの中にja.ymlというファイルを作成する。
これを日本語用のローケルファイルとする。以下のように編集する。

ja:
name: "ユーザーの名前"


続いて、config/initializers/i18n.rbを以下のように編集する。

I18n.default_locale = 'en'
LOCALES_DIRECTORY = "#{Rails.root}/config/locales/"
LANGUAGES = {
'English' => 'en',
'日本語' => 'ja'
}


ここではローケルファイル選択するためのハッシュを定義している。

次に、app/views/users/index.html.erbに以下を追加する。

<h1>Listing users</h1>

<% form_tag '', :method => 'get', :class => 'locale' do %>
<%= select_tag 'locale', options_for_select(LANGUAGES, I18n.locale), :onchange => 'this.form.submit()' %>
<%= submit_tag 'submit' %>
<%= javascript_tag "$$('.locale input').each(Element.hide)" %>
<% end %>


<table>
<tr>
<th><%= I18n.t('name') %></th>
</tr>

<% @users.each do |user| %>
<tr>
<td><%= user.name %></td>
<td><%= link_to 'Show', user %></td>
<td><%= link_to 'Edit', edit_user_path(user) %></td>
<td><%= link_to 'Destroy', user, :confirm => 'Are you sure?', :method => :delete %></td>
</tr>
<% end %>
</table>

<br />

<%= link_to 'New User', new_user_path %>

以上は、言語選択のための選択リストを表示し、
先ほどのハッシュを元にI18n.localeを更新し、
選択されるたびに、フォーム送信を行うようにしている。

最後に、アプリケーションコントローラにbefore_filterを追加。

class ApplicationController < ActionController::Base
protect_from_forgery

before_filter :set_locale

protected
def set_locale
session[:locale] = params[:locale] if params[:locale]
I18n.locale = session[:locale] || I18n.default_local
locale_path = "#{LOCALES_DIRECTORY}#{I18n.locale}.yml"

unless I18n.load_path.include? locale_path
I18n.load_path << locale_path
I18n.backend.send(:init_translations)
end
rescue Exception => err
logger.error err
flash.now[:notice] = "#{I18n.locale} translation not available"

I18n.load_path -= [locale_path]
I18n.locale = session[:locale] = I18n.default_locale
end

end

これにより、I18n.localeの値に応じて読み込まれるローカルファイルが変わり、
表示される文字列が切り替わるようになる。

つまり「Name」の部分が、
「English」を選択すると、「User's name are」となって表示され、
「日本語」を選択すると、「ユーザーの名前」と表示される。

新たに言語を増やしたい場合は、
ローケルファイルとハッシュ値を追加するだけ。


スポンサーサイト
検索フォーム
プロフィール

yas

Author:yas
yasと申します。
RailsにてWebアプリケーション開発をしております。

【開発環境】
OS: Mac OSX 10.6
Ruby: 1.9
Rails: 3.0
IDE: NetBeans6.9

最新記事
カテゴリ
月別アーカイブ
RSSリンクの表示
リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。