【问题标题】:Remove "?locale=en" from URL从 URL 中删除 "?locale=en"
【发布时间】: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_toadmin_path 一起使用,参数会自动出现在那里。

标签: ruby-on-rails ruby-on-rails-4


【解决方案1】:

您想查看应用程序控制器中的default_url_options 方法。这决定了 link_to 如何创建 url,I18n.locale 仅控制服务器端设置。如果您对所有不应获取语言环境参数的页面都有一个简单的定义,请在此处使用它。例如,

def default_url_options(options={})
  if params[:controller].include? "admin"
    locale: nil
  end
end

【讨论】:

  • 就像一个魅力,m8。谢谢! =>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-12
  • 1970-01-01
  • 2011-12-15
  • 1970-01-01
  • 2023-04-01
相关资源
最近更新 更多