2010-04-19 12 views
3

Quelle est la meilleure approche pour trier un tableau de chaînes en fonction des paramètres régionaux actuels?Utilisation d'une fonction de tri dépendant des paramètres régionaux dans Ruby/Rails

Par exemple, la norme Array#sort met "Ä" après "Z", ce qui n'est pas correct en allemand.

Je me serais attendu à ce que la gemme I18n offre un crochet pour définir mes propres algorithmes de tri ou fournir des chaînes ou des objets de collation. Dans mon imagination, passer ce proc ou cette corde à la fonction de tri, le ferait se comporter comme nécessaire. Je sais que c'est possible en Python, par exemple.

Google ne m'a pas aidé cette fois. Peut tu?

Un conseil apprécié!

Répondre

2

Il y a deux aproaches communes:

  1. Trier avec votre base de données (optimus)

    ou, si vous devez absolument faire quelque chose avec rubis avant le tri:

  2. Unlocalize caractère spécial pour commander: "Äñðøß" .uncolate => "Andos"

vous ajoutez une fonction uncolate à chaîne et d'utiliser pour le tri uncolate peut être

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

Et tri:

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

J'espère que cela aide

+0

Merci, cela semble être un bon début ! – knuton

+2

Récemment, vous avez ceci twitted par des rails I18n devs: @svenfuchs: assert_equal "AEroskobing", I18n.backend.transliterate (: toto, "Ærøskøbing") http://bit.ly/aTUx7J http: // bit. ly/9YnosR Jetez un coup d'oeil et vous pouvez économiser du travail :) – Oinak

+0

N'a pas remarqué votre commentaire jusqu'à tout récemment. Merci! – knuton