Tom*_*Tom 16 ruby-on-rails internationalization
如果您按照I18N Rails指南进行操作,则所有生成的链接都包含locale参数(localhost/en/about,localhost/fr/about).这是因为我们使用该方法default_url_options
始终添加Locale参数:
def default_url_options(options={})
{ :locale => I18n.locale }
end
Run Code Online (Sandbox Code Playgroud)
当语言环境未知或默认语言环境时,是否可以从生成的URL中删除语言环境参数?
我需要的 :
mysite/about
mysite/about
而不是localhost/en/about
)mysite/fr/about
我试图只设置语言环境,如果它不是默认语言环境,但结果是生成的链接永远不会包含语言环境参数...
我尝试了很多像这样的东西
def default_url_options(options={})
if I18n.locale == :fr
{ :locale => I18n.locale }
else
{ :locale => nil }
end
end
Run Code Online (Sandbox Code Playgroud)
整码:
ApplicationController.rb:
before_filter :set_locale
def set_locale
I18n.locale = params[:locale]
end
def default_url_options(options={})
{ :locale => I18n.locale }
end
Run Code Online (Sandbox Code Playgroud)
的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'
Run Code Online (Sandbox Code Playgroud)
fre*_*lon 24
所选答案完全正确,并提供了将没有语言环境的URL重定向到默认语言环境所需的一切,但我想做更多的事情,并想到我会与您分享.
我想避免必须使用默认语言环境,也就是说
mysite.com/en/page
应该是一样的mysite.com/page
从默认语言环境查看时,所有链接都不应包含语言环境,这意味着mysite.com应该包含不包含默认语言环境(en)的链接.而不是 mysite.com
链接到
mysite.com/en/page
它应该链接到mysite.com/page
我通过以下编辑实现了这一点 default_url_options
:
def default_url_options(options={})
{ :locale => ((I18n.locale == I18n.default_locale) ? nil : I18n.locale) }
end
Run Code Online (Sandbox Code Playgroud)
您必须config.i18n.default_locale
在config/application.rb中定义 才能使其正常工作.您还可以通过config.i18n.fallbacks = [ :en ]
其中该数组是要回退的优先级排序的语言列表,为不支持的语言环境分配回 退.
好的我明白了.的确,你几乎做到了.
你只需要一个非常有用的Ruby操作符: ||
如果第一个值存在,则使用它,否则考虑第二个参数.
def set_locale
I18n.locale = params[:locale] || :en
end
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8072 次 |
最近记录: |