在rails 3.1中隐藏locale参数?

时间:2012-01-22 08:47:53

标签: ruby-on-rails localization routes

我想实现以下行为:

如果用户的浏览器语言是例如EN,如果浏览器语言为http://foo.bar/hello,则应将其重定向到网址DE,然后重定向到http://foo.bar/hallo

那么我如何设置我的路由以将用户重定向到正确的语言(例如,当英语用户请求DE路由时,反之亦然)以及如何设置隐藏的语言环境参数,这样我就可以加载正确的语言在控制器中查看?

我想为两种语言使用相同的控制器(每页一个方法),但本地化视图(foo.en.html.erb等)

提前感谢!

2 个答案:

答案 0 :(得分:2)

我认为你想要获得的是一个好主意,我会在这里解释一下。我不明白为什么你会选择与开箱即用的Rails提供的方法不同的方法,并在"Internationalization Guide, Sections 2.3 and further"中详细解释。

以下是论点:

  • Rails提供至少3种不同的方式来更改语言环境:
    1. 从参数中获取:http://my.example.com/books?locale=de
    2. 从子域获取:http://de.example.com/books
    3. 客户提供的应用程序,如accept-header
  • 所有这些都具有控制器和操作相同的优势,这是您通常希望拥有的。
  • 如果您想根据位置改变行为,有辅助方法:locale,...
  • 但是,如果您愿意,可以将整个视图本地化:请参阅localized views。这可能会导致视图代码重复。
  • 或者您使用翻译和本地化API,如I18n.t 'store.title'I18n.l Time.now

隐藏的语言环境参数的缺点是(对于用户来说)使用哪个语言环境并不明显。

答案 1 :(得分:1)

如果您需要翻译路线以及设置区域设置,您可以查看translate_routes gem。

README解释了如何从翻译hello / hallo中设置语言环境。