Ruby on rails 如何避免在生成的URL中添加默认区域设置?
如果遵循,则所有生成的链接都包含locale参数(localhost/en/about、localhost/fr/about)。这是因为我们使用方法Ruby on rails 如何避免在生成的URL中添加默认区域设置?,ruby-on-rails,internationalization,Ruby On Rails,Internationalization,如果遵循,则所有生成的链接都包含locale参数(localhost/en/about、localhost/fr/about)。这是因为我们使用方法default\u url\u options始终添加区域设置参数: def default_url_options(options={}) { :locale => I18n.locale } end 当区域设置未知或默认时,是否可以从生成的url中删除区域设置参数? 我需要的是: 区域设置未知:mysite/about 地区en:m
default\u url\u options
始终添加区域设置参数:
def default_url_options(options={})
{ :locale => I18n.locale }
end
当区域设置未知或默认时,是否可以从生成的url中删除区域设置参数?
我需要的是:
- 区域设置未知:
mysite/about
- 地区en:
(而不是mysite/about
)localhost/en/about
- 语言环境fr:
mysite/fr/about
整个代码: ApplicationController.rb: routes.rb
我知道这不完全是你的问题但是 我更喜欢国际化的另一种方式:从域名设置语言环境 例如:mysite.com/about,mysite.fr/about
对我来说,这是最好的方法,但你需要购买所有域名。好的,我更了解。事实上,你几乎做到了 您只需要在Ruby中使用一个非常有用的运算符:
|
如果第一个值存在,则使用它,否则将考虑第二个参数
def set_locale
I18n.locale = params[:locale] || :en
end
选择的答案是完全正确的,它提供了将没有区域设置的URL重定向到默认区域设置所需的一切,但我想做更多的事情,并想与您分享 我想避免使用默认的语言环境,也就是说
应与mysite.com/en/page
mysite.com/page
mysite.com
链接到
它应该链接到mysite.com/en/page
mysite.com/page
默认url\u选项的编辑实现了这一点:
def default_url_options(options={})
{ :locale => ((I18n.locale == I18n.default_locale) ? nil : I18n.locale) }
end
您必须在config/application.rb中定义config.i18n.default\u locale
,才能使其工作。您还可以通过config.i18n.fallbacks=[:en]
为不受支持的语言环境分配回退,其中该数组是要回退到的语言的优先级顺序列表。Rails 4+
如果您不想通过URL传递它,您应该考虑将其存储在会话或Cookie中。当当前区域设置为默认时,我不想在URL中传递它。当这不是默认值时,将其放在url中是可以的。是的,我们希望避免购买所有域名。不要将语言和地区与国家混淆。这很有效!我认为如果不支持语言环境,那么将nil或其他设置设置为I18n.locale将被忽略,或者nil将被重置为默认语言环境。显然,情况并非如此。非常感谢你的回答!你不认为从谷歌的角度来看,你会有重复的内容吗(相同的内容存在于两个不同的位置)?
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'
def set_locale
I18n.locale = params[:locale] || :en
end
def default_url_options(options={})
{ :locale => ((I18n.locale == I18n.default_locale) ? nil : I18n.locale) }
end
def set_locale
I18n.locale = params[:locale] || I18n.default_locale
end
def default_url_options(options = {})
(I18n.locale.to_sym.eql?(I18n.default_locale.to_sym) ? {} : {locale: I18n.locale}).merge options
end