【问题标题】:My site has to support multiple languages, how do I route in rails?我的网站必须支持多种语言,如何在 Rails 中路由?
【发布时间】:2009-01-31 14:44:04
【问题描述】:

我有几个资源,我想以某种方式在标题中添加一个 :lang 参数。 所以 /en/posts/ 会使用 params[:lang] == en 指向 posts_controller/index。

这通常是怎么做的?必须在每个链接上添加 ?lang=en 看起来很难看,而且感觉非常不规范。

我想你知道我在说什么,即使我不是很清楚,这里的规范是什么?

【问题讨论】:

    标签: ruby-on-rails routing


    【解决方案1】:

    一种方法是:

    map.resources :yourresources, :path_prefix => '/:lang'
    

    您还可以添加语言参数过滤器:

    map.resources :yourresources, :path_prefix => '/:lang', :lang => /(en|de|jp)/
    

    【讨论】:

    • 我将如何去创建与资源的链接?我是否必须做 link_to myresource_path(:lang => "en") 或者我可以设置某种标准语言在没有给出参数时使用?
    • 是的,您必须将一些语言传递给链接助手。但是,您可以在 environment.rb 中设置默认语言(作为常量),然后在 Application 控制器中创建一个方法(例如 get_language),如果未设置 params[:lang],该方法将返回此默认值。
    【解决方案2】:

    您不应该完全避开路由,并根据浏览器的 HTTP Accept-Language 标头设置语言吗? See Here.

    我想您应该为您的用户提供更改语言的选项,然后将该值存储在 cookie 中,然后可以在 before_filter 中提取该值。

    为什么要这样做?好吧,“HTTP 最佳实践”指出每个资源都应该有一个 URI。一篇文章仍然是同一篇文章,无论是西班牙语还是英语,所以应该有相同的 URI。 site.com/en/articlesite.com/es/article显然不是同一个URI,违反了这个原则

    【讨论】:

    • 但是无法链接正确的语言会导致访问页面的人认为他们来到了错误的页面?如果你说英语并从一位英国朋友那里得到一个链接,然后来到一个充满瑞典语的页面。有人会很困惑吗?
    • -1:提议的解决方案不是 RESTful,在我看来比“非 HTTP 最佳实践”要糟糕得多。
    • 这也不是很好的解决方案,因为搜索引擎机器人可以随机获取文章的语言环境。
    • 为什么不是 RESTful?似乎为同一事物的翻译提供单独的 URL 绝对是 RESTful 的。根据浏览器的 Accept 标头从同一个 URL 提供 XML 或 JSON 是标准做法,那么为什么要为英语或法语提供不同的 URL?
    【解决方案3】:

    Rails 2.3 的最新功能似乎就在你身边:http://afreshcup.com/2009/02/01/rails-23-localized-views/

    【讨论】:

      猜你喜欢
      • 2020-11-08
      • 2013-12-11
      • 1970-01-01
      • 1970-01-01
      • 2011-08-17
      • 1970-01-01
      • 2021-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多