UTF-8 slugs for categories

AI-generated summary

The discussion revolves around implementing UTF-8 slugs for categories and user profiles in Discourse, particularly for non-Latin scripts like Russian, Japanese, and Hindi. Maestra_Powers suggests that just as category names are converted to SEO-friendly Latin slugs, user nicknames should be too, while still displaying the original UTF-8 characters. Sam references a related Meta discussion on removing slugs for some languages. Hellekin highlights issues with current ASCII-based slug generation, which can break words in languages like French and German due to accent handling. Gerhard explains that Discourse uses transliteration rules based on the site’s default_locale, which works well for German but not yet for French. He notes that Rails may now include default transliteration rules and suggests creating a PR for French transliteration rules. Hellekin agrees to contribute but is busy and suggests others in the @translators group could help, while also mentioning edge cases like handling subscripts in chemical formulas.

Is it possible to add? When I create category with russian name, links to it converts to SEO-friendly latin letters. And that’s awesome! I bet it’s possible to do same with nicknames. If name on russan / japanese / hindi, it can be converted to latin version and you can use it for links to user profiles, but show localized UTF-8 one on pages.

1 « J'aime »

Planned at some point see:

2 « J'aime »

La conversion ASCII pour les slugs n’est pas aussi optimisée pour le référencement qu’elle pourrait l’être.

Par exemple, « Nos Œuvres Cachées » pourrait produire nos-oeuvres-cachees (ASCII) mais produit en fait nos-uvres-cachees, ce qui casse les mots.

Un caractère UTF-8 est automatiquement remplacé par un -, ce qui pose souvent problème dans les langues non anglaises (par exemple, en français, allemand et autres langues avec beaucoup d’accents). En allemand, l’umlaut (par exemple, ü) est traditionnellement remplacé par ue dans les URL.

(N’hésitez pas à déplacer ce message vers un nouveau sujet.)

2 « J'aime »

Discourse utilise des règles de translittération pour remplacer les caractères Unicode par des caractères ASCII. Les règles dépendent de la default_locale du site.

Cela fonctionne parfaitement pour l’allemand (transliterate.de.yml). Cela ne fonctionne pas pour le français car il n’y a pas encore de règles de translittération.

EDIT : Oh, en regardant la sortie ci-dessous, elle correspond en fait à votre « nos-œuvres-cachées » préféré. Je ne sais pas pourquoi… Peut-être que Rails a commencé à inclure des règles de translittération par défaut ? :thinking:

[1] pry(main)> SiteSetting.default_locale = :de
=> :de
[2] pry(main)> Slug.for("Küche", "")
=> "kueche"
[3] pry(main)> SiteSetting.default_locale = :fr
=> :fr
[4] pry(main)> Slug.for("Nos Œuvres Cachées", "")
=> "nos-oeuvres-cachees"

Pourriez-vous créer une PR avec les règles de translittération françaises ?

1 « J'aime »

J’ai pris un exemple, peut-être que ce n’était pas un bon. Mais merci pour les conseils de console, je vais certainement jeter un œil et voir si je peux jouer avec les fichiers de translittération, s’il existe un moyen de personnaliser certains cas de translittération pour remplacer les valeurs par défaut, ce serait bien d’en avoir.

Je serais heureux de le faire, mais je suis déjà surbooké. Peut-être que quelqu’un du groupe @translators (surtout les personnes du sujet Quality of French Translations) serait plus rapide que moi.)

J’étais préoccupé par quelques cas limites qui seraient plutôt résolus en remplaçant des règles (par exemple, parfois vous voulez qu’un indice numérique soit remplacé par un nombre normal ou rien plutôt que par un « - », par exemple, écrire CO₂ serait plutôt changé en co2 que co :slight_smile: )

1 « J'aime »