如果遵循I18N Rails Guide,则所有生成的链接都包含语言环境参数(localhost / en / about,localhost / fr / about)。这是因为我们使用方法default_url_options
总是添加Locale参数:
def default_url_options(options={})
{ :locale => I18n.locale }
end
当语言环境未知或默认语言环境时,是否可以从生成的url中删除语言环境参数?
我需要的 :
未知地区:
mysite/about
区域设置en:
mysite/about
(而不是localhost/en/about
)区域设置fr:
mysite/fr/about
我尝试仅设置不是默认语言环境的语言环境,但是结果是生成的链接永远不会包含语言环境参数...
我尝试过很多类似的事情
def default_url_options(options={})
if I18n.locale == :fr
{ :locale => I18n.locale }
else
{ :locale => nil }
end
end
整个代码:
ApplicationController.rb:
before_filter :set_locale
def set_locale
I18n.locale = params[:locale]
end
def default_url_options(options={})
{ :locale => I18n.locale }
end
routes.rb
scope "(:locale)", :locale => /en|fr/ do
match 'about' => 'static_pages#about', :via => :get
match 'contact' => 'static_pages#contact', :via => :get
match '/' => 'search#index', :as => :search
end
root :to => 'search#index'
最佳答案
好吧,我了解得更好。确实,您几乎做到了。
您只需要在Ruby中使用一个非常有用的运算符:||
如果第一个值存在,则使用它,否则考虑第二个参数。
def set_locale
I18n.locale = params[:locale] || :en
end
关于ruby-on-rails - 如何避免在生成的URL中添加默认语言环境?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5261521/