2017-11-25 100 views
0

我在我的应用程序中使用了不同的语言,我正在使用此模式:/:locale/some-action。我的大部分线路都在此范围内:locale - routes.rb中:删除区域设置Rails的URL GET参数5

scope "(:locale)", locale: /fr|en/ do 
    root to: 'home#index' 
    get 'contacts', to: 'contacts#index' 
end 
get 'about', to: 'about#index' 

,但有些则不是。对于:locale这个范围内的路由,如果我使用它们的名称,如contacts_path,Rails会根据语言环境生成路由。如果是:fr,生成的路由将是/fr/contacts

对于不在此范围内的路线。例如about。如果我使用其名称about_path和区域设置为:fr,则生成的URL将为/about?locale=fr,但我不希望这样。

这是application_controller.rb

class ApplicationController < ActionController::Base 
    protect_from_forgery with: :exception 
    before_action :set_locale 

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

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

什么是消除此GET参数的方式,但仍然使用其在范围:locale与他们的名字和生成的URL取决于:locale路线?

回答

0

我找到了解决方案。在我看来:

<%= link_to 'About', about_path(locale: nil) %>