Sortieren von UTF-8-Zeichenfolgen in RoR

Ich versuche herauszufinden, eine 'richtige' Art und Weise der Sortierung für UTF-8 strings in Ruby on Rails.

In meiner Anwendung, ich habe eine select-box, die gefüllt ist mit den Ländern. Als meine Anwendung ist lokalisiert, die jeweils vorhandenen Gebietsschema hat eine Ländern.yml-Datei, die sich einer Land-id den lokalisierten Namen für das Land. Ich kann nicht Sortieren der strings manuell in der yml-Datei, weil ich brauche die ID um konsistent über alle Gebietsschemas.

Was ich getan habe ist, erstellen Sie eine ascii_name Methode, die verwendet die unidecode Juwel konvertieren mit Akzent und nicht-lateinische Zeichen in Ihre ascii-äquivalente (zum Beispiel, "Afeganistão" geworden wäre "Afeganistao"), und dann Sortieren Sie auf, dass:

require 'unidecode'

class Country
  def ascii_name
    Unidecoder.decode(name).gsub("[?]", "").gsub(/`/, "'").strip
  end
end

Country.all.sort_by(:&ascii_name)

Jedoch gibt es offensichtliche Probleme mit diesem:

  • Es nicht richtig Sortieren, nicht-lateinische Sprachen, da kann es nicht sein, eine direkte Analog-lateinischen Zeichen.
  • Es macht keinen Unterschied zwischen einem Brief und alle mit Akzent Formen, die Buchstaben (also z.B. A und Ä werden austauschbar)

Kennt jemand eine bessere Möglichkeit, ich könnte die Art meiner strings?

Schreibe einen Kommentar