从rails中的url中删除locale参数

时间:2013-02-13 09:53:36

标签: ruby-on-rails ruby-on-rails-3.2 subdomain locale refinerycms

我正在使用rails url helpers而不是路径助手(在某些情况下),因为我正在使用使用子域的应用程序,所以我必须将域选项作为参数传递。

然而,这导致链接呈现为:

http://sub.domain.dev/the-page?locale=en

我尝试在应用程序控制器中使用以下变体,但无济于事:

def default_url_options(options={})
  { :locale => :en }
end

如何删除该区域设置参数?

我正在使用RefineryCMS。

3 个答案:

答案 0 :(得分:5)

奇怪,但对于我这种情况的任何人:

将RefineryCMS与引擎一起使用时,即使没有使用区域设置,而其他引擎也会生成预期的网址,修复方法是设置:

# config/initializers/refinery/i18n.rb
Refinery::I18n.configure do |config|
  config.enabled = false
end

答案 1 :(得分:1)

对于refinerycms-i18n~> 4.0:

# config/initializers/refinery/i18n.rb

Refinery::I18n.configure do |config|
  config.url_filter_enabled = false
end

答案 2 :(得分:0)

如果您使用的是区域设置,我建议您使用以下内容:

在您的routes.rb中:

scope "(:locale)", locale: /en|br/ do
  resources :the-pages
end

在您的应用程序控制器中:

before_filter :set_locale
def set_locale
  I18n.locale = params[:locale]
end

def default_url_options(options={})
  { locale: I18n.locale }
end

通过这种方式,您的网址将变为:

http://sub.domain.dev/en/the-page
http://sub.domain.dev/pt/the-page

编辑 - 如果您不想要任何语言环境,则需要将其从应用程序控制器中删除:

#remove the below
def default_url_options(options={})
 { :locale => :en }
end

另外,请确保您的routes.rb

中没有任何语言环境