【发布时间】:2014-07-09 18:24:05
【问题描述】:
目标
当我点击链接时,删除浏览器 URL 栏中的 ?locale=en。
注意:进程背后没有任何异步机制。我的意思是,当我点击某些东西时,没有window.history.pushState 动态修改 URL。
问题
我所做的一切都没有解决我的问题。
我尝试过的
我仍在寻找进一步的解决方案。
场景
我不想拥有本地化的管理面板,那么,我的路由如下:
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
问题已部分解决。不幸的是,这不是我真正想要的。如果没有其他选项来解析用户的语言环境(也就是明确设置了 URL 的语言环境参数),我正在处理浏览器的语言。
【问题讨论】:
-
你是否试图让 Rails 停止将语言环境参数放入链接到某些页面的 url 中?
-
“停止将语言环境参数放入链接到某些页面的 url”是什么意思?例如,我将
link_to与admin_path一起使用,参数会自动出现在那里。
标签: ruby-on-rails ruby-on-rails-4