web-dev-qa-db-fra.com

Regroupement alphabétique des mots accentués

Nous avons une liste de pays dans notre interface utilisateur où le prototype de conception regroupe les pays par lettre initiale. Les noms de pays changent selon la langue, donc le regroupement change également. Cela signifie également que les groupes eux-mêmes changent.

Dans certaines langues, les noms de pays commencent par des caractères accentués, par exemple Autriche en anglais et Österreich en allemand. Comment est-il plus courant de regrouper ces mots: Österreich devrait-il appartenir au groupe "O" ou au groupe "Ö"? Existe-t-il des traditions différentes dans les différents pays (j'entends souvent les Allemands se référer à "a" et "ä" comme des lettres différentes)?

Un autre exemple en portugais: Alemanha et Áustria commencent tous les deux par A et personne ne s'attendrait à ce qu'ils soient dans des groupes séparés.

19
ecc

Cela dépend directement de la langue et si le diacritique produit une nouvelle lettre ou simplement une variation de la même lettre.

En français (ou italien, catalan, portugais ...), les caractères accentués (comme À, É, Ê, Ô, Ö, etc.) ne produisent pas de nouvelle lettre, ils ne sont que la variation de la même lettre. En tant que tel, on s'attendrait à ce que les mots commençant par un caractère accentué soient classés comme tout autre mot commençant par le même caractère non accentué.

En allemand, le tréma produit trois voyelles différentes (Ä, Ö et Ü) qui peuvent être considérées comme des lettres différentes, mais lors du tri alphabétique des mots, le tréma n'est généralement pas distingué de la voyelle sous-jacente.

Cependant, en finnois, norvégien et danois, des caractères tels que Å, Ö sont en réalité des lettres complètement différentes de A et O. Dans ces langues, on s'attend généralement à ce que les mots commençant par ces caractères aient leur propre catégorie.

Il existe d'autres langues comme le hongrois, où les caractères accentués (tels que á, é, ó, ú, ő, ű ...) sont des lettres différentes mais sont généralement regroupés par paires (a/á, e/é, i/í , o/ó, ö/ő, u/ú et ü/ű) dans les dictionnaires.

Comme vous pouvez le voir, le même caractère (Ö par exemple) peut être traité différemment selon la langue, vous devrez adapter le comportement de votre interface utilisateur en fonction de la langue du mot, pas seulement du caractère lui-même.

Vous devriez consulter la page wikipedia sur diacritiques où vous trouverez si un caractère accentué est considéré comme une nouvelle lettre dans les langues que vous devrez prendre en charge:

  • Si pour une langue spécifique, les caractères accentués ne sont pas des lettres différentes, les mots doivent être dans la même catégorie.
  • Si vous devez gérer des langues dans lesquelles le diacritique génère de nouvelles lettres, vous devez vérifier chaque langue et utiliser la pratique courante locale.

Si vous devez prendre en charge plusieurs langues avec des règles différentes, vous devez déléguer l'i18n à une solution dédiée car, comme vous pouvez le voir, cela peut devenir très complexe très rapidement.

36
zakinster

En tant qu'allemand, je connais deux façons de gérer cela. Soit "ö" est traité comme "o" (par exemple, dans une encyclopédie), soit il est traité comme "oe" (par exemple, dans un annuaire téléphonique). "ß" est toujours traité comme "ss".

Même l'ISO allemand (DIN) connaît ces deux variantes: DIN 5007 Variantes 1 et 2

Côté logiciel, des bases de données comme MySQL ont des classements différents .

Il n'y a pas de réponse définitive à ce sujet. Peut-être que ce tablea aide (non, honnêtement, cela aggrave probablement les choses).

5
mrks

La règle est que vous devez mettre les noms dans des catégories et les trier de telle manière que vos utilisateurs les trouvent là où ils les attendent. Vous suivez les règles de la langue de l'utilisateur. Par exemple, si vous avez un nom suédois comme Ångström et que vos utilisateurs sont britanniques, vous le triez sous la lettre A car c'est là que les utilisateurs britanniques le rechercheraient. Si vos utilisateurs sont suédois, vous les triez après la lettre Z.

Oubliez de trouver vous-même les règles correctes. Ils sont compliqués, encore pire lorsque vous ne connaissez pas la langue (comme en allemand, vous devez savoir lequel des deux systèmes complètement différents appliquer). Vérifiez si votre système d'exploitation possède des bibliothèques utiles pour vous aider.

4
gnasher729

Pour un site danois, nous avons rencontré le même problème et nous les avons regroupés en caractères séparés pour éviter la confusion. Le regroupement doit être compréhensible pour les utilisateurs.

Gyldendal.dk authors list

3
Usman Mani

Une autre façon de dire ce que les autres ont dit est que cela dépend de l'algorithme de classement (tri de texte) utilisé. Chaque langue/dialecte/variation de langue a son propre algorithme de collation [J'ai un vague souvenir que certaines langues en ont plus d'une?]. Certaines collations considèrent les lettres avec et sans signes diacritiques comme la même lettre (par exemple, xaxx, xáxy, xayy). Certains classements les considèrent comme des lettres différentes.

Une solution complète devrait donc "ouvrir" les règles de classement et regarder à l'intérieur.

Une solution rapide et sale pourrait être de trier les chaînes (noms de pays) avec un algorithme de classement en boîte noire (formez votre langage de programmation ou bibliothèque préféré) et essayez de les regrouper par première lettre [*]. Si une lettre apparaît mélangée avec une autre lettre (comme "A", "Á", "A"), vous les regroupez comme la même lettre. Pas infaillible. :-)

[*] Notez que la "première lettre" a quelques subtilités. Premier point de code Unicode? Premier glyphe? Premier groupe de glyphes? Unicode a la combinaison de caractères ...

Mise à jour : Au fait, vous pouvez peut-être modifier légèrement votre interface utilisateur (?) Pour éviter le problème de regroupement. Si le regroupement est juste un moyen de trouver rapidement une chaîne donnée, un peu comme dans un dictionnaire, alors une alternative est d'avoir toutes vos chaînes (noms de pays) dans une longue liste triée alphabétiquement (paginée?) Et de sélectionner des en-têtes et des liens chacun à l'emplacement correspondant sur la liste. Ces titres peuvent être une seule lettre ou les premières lettres de la première chaîne commençant par cette ou ces lettres. Il peut être judicieux de sélectionner des titres à espacement approximativement uniforme.

Par exemple. pour une certaine liste de pays , Afg ... Bhu ... Con ... Fra ... Hun ... Lib ... et ainsi de suite, toutes les 25 chaînes chacune.

Remarque: juste une idée, non testée pour l'ergonomie, détails laissés comme exercice ;-)

2
Pablo H

Ä, Ö, Õ, Å etc. ne sont pas des lettres accentuées, mais des lettres de sonorité complètement différentes et différentes de A et O, en alphabet suédois et finlandais, elles se trouvent à la fin des lettres "anglais". J'ai vu des listes organisées en mélangeant O et Ö, et c'est aussi déroutant que de confondre, disons s et k.

Si vous ne pensez que du point de vue alphabétique, vous devriez trouver une norme formelle qui comprend des lettres non anglaises. Du point de vue de l'utilisabilité, je ne pense pas que l'alphabet affecte la facilité d'utilisation de la liste.

Par exemple, vous ne savez pas nécessairement quel mot-clé vous devez utiliser pour votre propre pays: Pays-Bas contre Pays-Bas contre Pays-Bas. Ceci est un excellent article: https://www.smashingmagazine.com/2011/11/redesigning-the-country-selector/ qui suggère de rechercher la liste et de mapper plusieurs mots-clés pour le même pays.

1
Boat

Probablement trop simplifié, mais je vérifierais simplement un dictionnaire dans la langue particulière et suivrais la façon dont ils alphabétiseraient. Il ne rentrera pas dans une jolie boite soignée. Différentes langues, différentes règles, je suppose ...

1
Owen Parker