Rails アプリケーションに選択ボックスを配置してサイトの言語を選択するにはどうすればよいですか?
概要
私は Rails の初心者で、ロケールを使用して Web サイトの言語を変更する方法をすでに学びましたが、Web サイト全体の言語を変更する変数/セッションを渡すことができる選択ボックスをナビゲーションバーの右側に配置したいと考えています。それは可能でしょうか? Ruby: 1.9.3、Rails: 3.2.2 で Windows を使用しています。
これはこれまでの「layouts/application.html.erb」のナビゲーションバーです。
<div class="upmenu">
<ul align="left">
<li><a href="/issues"><%=t "nav.issues.list" %></a></li>
<li><a href="/issues/new"><%=t "nav.issues.new" %></a></li>
<li><a href="/timeline/index"><%=t "nav.timeline" %></a></li>
<li><a href="/projects"><%=t "nav.projects" %></a></li>
<%= yield :nav %>
</ul>
<ul id="language">
<li><%= select_tag(:lang, options_for_select([['Portuguese', 'pt'], ['English', 'en']])) %></li>
</ul>
</div>
URL に次のスコープを使用したことを思い出してください。つまり、>“Localhost:3000/en/issues/” のようなものになります。
scope "/:locale" do
get "/timeline/index", to: "timeline#index"
resources :projects
resources :issues
end
そしてこれが私のルートです:
timeline_index GET /:locale/timeline/index(.:format) timeline#index
projects GET /:locale/projects(.:format) projects#index
POST /:locale/projects(.:format) projects#create
new_project GET /:locale/projects/new(.:format) projects#new
edit_project GET /:locale/projects/:id/edit(.:format) projects#edit
project GET /:locale/projects/:id(.:format) projects#show
PUT /:locale/projects/:id(.:format) projects#update
DELETE /:locale/project
DELETE /:locale/projects/:id(.:format) projects#destroy
.:format) issues#index
issues GET /:locale/issues(.:format) issues#index
POST /:locale/issues(.:format) issues#create
PUT /:locale/projects/:id(.:format) projects#update
DELETE /:locale/projects/:id(.:format) projects#destroy
issues GET /:locale/issues(.:format) issues#index
POST /:locale/issues(.:format) issues#create
new_issue GET /:locale/issues/new(.:format) issues#new
edit_issue GET /:locale/issues/:id/edit(.:format) issues#edit
issue GET /:locale/issues/:id(.:format) issues#show
PUT /:locale/issues/:id(.:format) issues#update
DELETE /:locale/issues/:id(.:format) issues#destroy
解決策
はい、これは可能です
あなたの見解では
<li><%= select_tag(:locale, options_for_select([['Portuguese', 'pt'], ['English', 'en']])) %></li>
ApplicationController 内
before_action :set_locale
def set_locale
I18n.locale = params[:locale] || I18n.default_locale
end