点击链接时删除浏览器网址栏的?locale=en
。
注意:进程后面没有任何异步机制。我的意思是,当我点击某些内容时,没有window.history.pushState
动态修改网址。
我所做的一切都没有解决我的问题。
我仍然在寻找更多解决方案。
我不想拥有本地化的管理面板,然后,我的路由如下:
scope '/(:locale)', locale: /#{I18n.available_locales.join("|")}/ do
root to: 'welcome#index'
end
namespace :admin do
get '/' => 'home#index'
resources :products
end
但是当我点击管理员面板中的链接时,我仍然总是?locale=en
。这就是我设置语言环境的方法:
# /app/controllers/application_controller.rb
def set_locale
extracted_locale = params[:locale] || extract_locale_from_accept_language_header
I18n.locale = (I18n::available_locales.include? extracted_locale.to_sym) ?
extracted_locale : I18n.default_locale
end
这是我的私有 extract_locale_from_accept_language_header
方法:
# /app/controllers/application_controller.rb
private
def extract_locale_from_accept_language_header
request.env['HTTP_ACCEPT_LANGUAGE'].scan(/^[a-z]{2}/).first
end
如果我改变了这个:
I18n.locale = (I18n::available_locales.include? extracted_locale.to_sym) ?
extracted_locale : I18n.default_locale
为此:
I18n.locale = params[:locale] || I18n.default_locale
问题是部分已解决。不幸的是,这不是我真正想要的。如果没有其他方法可以解析用户的语言环境(例如,明确设置了网址的语言环境参数),我就会使用浏览器的语言处理。
答案 0 :(得分:1)
您想要查看应用程序控制器中的default_url_options
方法。这就决定了link_to如何创建网址,I18n.locale
只是控制服务器端设置。如果您对不应获取locale参数的所有页面都有一个简单的定义,请在那里使用它。例如,
def default_url_options(options={})
if params[:controller].include? "admin"
locale: nil
end
end