Techioz Blog

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