在Ruby / Rails中使用依赖于语言环境的排序函数

时间:2010-04-19 07:56:40

标签: ruby-on-rails ruby sorting internationalization locale

根据当前语言环境对字符串数组进行排序有什么好方法?

例如标准Array#sort在“Z”之后放置“Ä”,这在德语中是不正确的。

我原本期望gem I18n提供一个钩子来定义我自己的排序算法或提供校对字符串或对象。在我的想象中,将此proc或字符串传递给sort函数会使其表现得如此必要。我知道这在Python中是可行的,例如。

这次Google没有帮助我。你能吗?

任何建议表示赞赏!

1 个答案:

答案 0 :(得分:2)

有两种常见的方法:

  1. 按数据库排序(optimus)

    或者,如果您在排序之前绝对需要使用ruby做一些事情:

  2. Unlocalize特殊字符的订购: “Äñðøß”.uncolate => “Andos”

  3. 您将uncolate函数添加到字符串并用于排序 uncolate可以

    class String
      def uncolate
        self.tr(SPECIAL_CHARS,SUBSTITUTE_CHARS)
      end
    end
    

    并排序:

    international_things.sort_by{|i| i.international_attr.uncolate}
    

    我希望它有所帮助