【问题标题】:How can I put a select box on my rails application to choose the language of the site?如何在我的 Rails 应用程序上放置一个选择框来选择网站的语言?
【发布时间】:2014-08-05 12:40:49
【问题描述】:

我是 Rails 新手,我已经学会了如何使用语言环境来更改我的网站语言,但我想在我的导航栏右侧放置一个选择框,它可以传递变量/会话来更改整体网站语言。那可能吗?我正在使用带有 Ruby 的 Windows:1.9.3,Rails:3.2.2

到目前为止,这是我在“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

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 drop-down-menu internationalization


    【解决方案1】:

    是的,这是可能的

    在你看来

    <li><%= select_tag(:locale, options_for_select([['Portuguese', 'pt'], ['English', 'en']])) %></li>
    

    在您的应用程序控制器中

    before_action :set_locale
     def set_locale
        I18n.locale = params[:locale] || I18n.default_locale
      end 
    

    【讨论】:

    • 您将始终获得 params[:locale],因为您的路线配置为将第一个输入作为 params[:locale]
    猜你喜欢
    • 2012-01-03
    • 2023-03-30
    • 2020-03-30
    • 2012-10-06
    • 2017-09-19
    • 1970-01-01
    • 2012-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多