ruby-on-rails-3.1 – 具有可选范围的Rails路由“:locale”

我正在使用Rails 3.1应用程序,我想为应用程序支持的不同语言设置特定的路由.
/es/countries
/de/countries
…

对于默认语言(‘en’),我不希望在url中显示语言环境.

/countries

这是我设置的路由定义.

scope "(:locale)",:locale => /es|de/ do
   resources :countries
end

它的效果很好,直到我尝试使用带有“en”的路径助手作为语言环境.

在控制台中:

app.countries_path(:locale => 'fr')
 => "/fr/countries" 

app.countries_path(:locale => 'en')
 => "/countries?locale=en"

我不想要“?locale = en”.

有没有办法告诉rails使用’en’区域设置,区域设置参数不应该添加到url?

谢谢

解决方法

这应该是一个更好的解决方案:

在你的路线,

scope "(:locale)",locale: /#{I18n.available_locales.join("|")}/,defaults: {locale: "en"} do

正如MegaTux所说,在范围内设置默认值:{locale:“en”}.

优势:
jlfenaux解决方案适用于大多数情况,但不是全部.在某些上下文中(基本上与主控制器和视图之外基本上是一样的),路径帮助器将被困惑,并将对象或object.id放在locale参数中,这将导致错误.你会发现自己放置语言环境:没有在许多路径帮助程序,以避免这些错误.

可能的问题:似乎默认值:{locale:“en”}总是覆盖您传入的任何其他值以进行语言环境.该选项被命名为default,所以我希望它只有当没有值时才会将locale分配给’en’,但这不会发生.有人遇到这个吗?

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...