Anomaly between language selection list in D* and on website


(goob) #1

In the Diaspora app, the list of available languages is sorted by language name. On the project website, they are sorted by ISO code. These two lists should ideally be sorted in the same way.

Neither is ideal at the moment. In my opinion, the ideal would be alphabetically by language, but case-insensitive and ignoring diacriticals (so that, for instance, polski will appear between Occitan and Português (Brasil); and Čeština will appear between Català and Cymraeg).

This means that, as far as possible, a user will be able to find their language by its native name in alphabetical order. A user who speaks Magyar shouldn’t have to look under H to find their language. (I know that some languages that use the Latin alphabet do sort some letters in the alphabet into a different order from English, but I’m not sure whether that would affect any of the languages we use.)

I can’t see a way to integrate names in non-Roman script into the list alphabetically, so they will probably have to remain at the foot of the list.

Any ideas on how to implement this? Or opinions that my suggestion is not the best one?


(Deus Figendi) #2

To be honest: I don’t think this is important. These are two different “projects”, of cause they are related but if another diaspora* app would like to sort it in a third way (or lets the user choose how to sort) it is fine too I’d say.

I agree, the situation with bosanski jezik, magyar nyelv, polski, íslenska and Čeština isn’t satisfying. (btw. what is en_shaw 𐑦𐑙𐑤𐑦𐑖 ? … ah I guess it is this)
Those languages should be placed in alphabetic order as you said.

Yes this is a problem, maybe those which cannot be sorted by [A-Za-z] should be prefixed with the ISO code for sorting-manner? So russian would become ruРусский for sorting (not for displaying) and be listed between Română and Sardu. I would only check the very first two characters if they are latin so Română would not be prefixed. By the way Čeština would be sorted as csČeština

So in pseudocode:

if (language_name.regExp(/^[A-Za-z]{2}.*/)) {
    sorting_name = language_name.lowerCase();
} else {
    sorting_name = language_code + language_name.lowerCase();
}