Использование зависящей от локали функции сортировки в Ruby / Rails - PullRequest
3 голосов
/ 19 апреля 2010

Каков хороший подход к сортировке массива строк в соответствии с текущей локалью?

Например, стандарт Array#sort ставит «Ä» после «Z», что на немецком языке неверно.

Я бы ожидал, что гем I18n предложит ловушку для определения моих собственных алгоритмов сортировки или предоставления строк или объектов сопоставления. В моем воображении передача этого proc или строки в функцию sort заставит его вести себя как нужно. Я знаю, что это возможно в Python, например.

Google на этот раз мне не помог. Вы можете?

Любой совет приветствуется!

1 Ответ

2 голосов
/ 19 апреля 2010

Есть два общих подхода:

  1. Сортировка с вашей базой данных (Optimus)

    или, если вам абсолютно необходимо что-то сделать с ruby ​​перед сортировкой:

  2. Нелокализовать специальный символ для заказа: "Äñðøß" .uncolate => "Andos"

вы добавляете в строку функцию uncolate и используете ее для сортировки uncolate может быть

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

И сортировка:

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

Надеюсь, это поможет

...