Sortowanie + polskie znaki diakrytyczne

Zna ktoś gema, który umożliwia poprawne sortowanie wyrazów z polskimi znakami? Znalazłem alphabetical_sort, ale to nie do końca to co trzeba.

[code][“Sa”, “Śb”, “Sc”, “Z”].sort_alphabetical
=> [“Sa”, “Śb”, “Sc”, “Z”]

prawidłowo powinno być:

=> [“Sa”, “Sc”, “Śb”, “Z”][/code]

Fajnie by było jakby obsługa była do różnych języków europejskich.

Jak sie da to chyba najłatwiej to po stronie bazy danych zrobić. No ale to pewnie wiesz, więc pewnie problem jest poza baza danych.

Część rzeczy mógłbym posortować po stronie bazy danych, ale w postgresql LC_COLLATE można ustawić tylko i wyłącznie przy tworzeniu clustera, a że nie mam na tym serwerze roota i są tam też inne bazy, to wywalenie klastera, stworzenie nowego i odtworzenie baz danych może być problematyczne.

Oprócz tego jest też kilka miejsc, w których dane nie siedzą w bazie, albo są już po obrobieniu w ruby, więc i tak się przyda jakiś gem ;]

Pomimo obsługi różnych kodowań znaków w Ruby 1.9, ciągi sortowane są tak jakby były binarne, tj.

["Łotwa", "Polska"].sort #=>["Polska", "Łotwa"]
Na pierwszy rzut oka wygląda to na spore niedociągnięcie. Po wgłębieniu się w temat okazuje się jednak, że kolejność znaków alfabetu ściśle zależy od języka. Te same znaki mogą mieć różne pozycje w alfabecie: http://en.wiktionary.org/wiki/å

[quote]Å, å - the last letter of the Danish alphabet
Å, å - the third to last letter of the Finnish alphabet
Å, å - the last letter of the Norwegian alphabet
Å, å - the third to last letter of the Swedish alphabet[/quote]
Generalnie problem jest dużo bardziej złożony niż może się wydawać - wypadałoby, żeby każdy string oprócz kodowania miał też przypisany język. Funkcja alphabetical_sort musiałaby pobierać jakiś dodatkowy argument. Ludzie są mistrzami w utrudnianiu sobie życia :-).

Kiedyś potrzebowaliśmy i nie udało nam się znaleźć nic działającego, jest projekt w C/C++/Javie: http://icu-project.org/ , są też dowiązania: http://rubyforge.org/projects/icu/ .

no to jak nie ma rozwiazania to moze cos na nizszym poziomie, tylko wolne bedzie na pewno

zapisac te dane do zmiennej, pliku -> wykorzystac jakies polecenie wbudowane w linuxa, nawet sort da rade jak jest utf8 ustawione prawidlowo, czy jakie kolwiek inne narzedzie -> odczytanie tych danych. Tylko wydajnosc strasznie ucierpi

gotar@laptop ~/Tmp $ cat a.txt Łotwa Polska Belga Białoruś Dania Mandżuria gotar@laptop ~/Tmp $ cat a.txt | sort Belga Białoruś Dania Łotwa Mandżuria Polska gotar@laptop ~/Tmp $