# UTF-8 slugs for categories

**URL:** https://meta.discourse.org/t/utf-8-slugs-for-categories/27353
**Category:** Feature
**Created:** [8 Abril , 2015 18:47 UTC](https://meta.discourse.org/t/utf-8-slugs-for-categories/27353 "2015-04-08T18:47:26Z")
**Posts on this page:** 5
**Page:** 1

<div class="post-metadata">

### Author: ![Maestra\_Powers](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/maestra_powers/32/37362_2.png) [@Maestra\_Powers](https://meta.discourse.org/u/Maestra_Powers)
#### Post date: [8 Abril , 2015 18:47 UTC](https://meta.discourse.org/t/utf-8-slugs-for-categories/27353/1 "2015-04-08T18:47:26Z")

</div>

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.

 ![](https://global.discourse-cdn.com/meta/original/3X/9/b/9b0ef1a59340eecdef6b60b6cd0079ec0fe4b1e8.png)

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [8 Abril , 2015 22:20 UTC](https://meta.discourse.org/t/utf-8-slugs-for-categories/27353/2 "2015-04-08T22:20:23Z")

</div>

Planned at some point see:

> [@Removing the concept of "slugs" for some languages](https://meta.discourse.org/t/removing-the-concept-of-slugs-for-some-languages/26643):
>
> Discourse is trying to shoehorn the concept of “pretty slugs” to non ascii char set based languages. It may be acceptable to do this transliteration in Norwegen or Turkish, but stuff gets really weird when you do it in Korean or Chinese or Arabic. When you look at alexa top 100 for say Egypt or China or any non-latin alphabet you never see this concept of a “slug” which is attempting to convert your alphabet to English. It is offensive and comical. Our default behavior, which is to “only keep …

---

<div class="post-metadata">

### Author: ![hellekin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/hellekin/32/51636_2.png) [@hellekin](https://meta.discourse.org/u/hellekin)
#### Post date: [13 Fevereiro , 2024 10:37 UTC](https://meta.discourse.org/t/utf-8-slugs-for-categories/27353/3 "2024-02-13T10:37:46Z")

</div>

A conversão ASCII para slugs não é tão amigável para SEO quanto poderia ser.

Por exemplo, “Nos Œuvres Cachées” poderia produzir `nos-oeuvres-cachees` (ASCII), mas na verdade produz `nos-uvres-cachees`, o que quebra palavras.

Um caractere UTF-8 é automaticamente substituído por um `-`, o que muitas vezes quebra em idiomas não ingleses (por exemplo, em francês, alemão e outros idiomas com muitos acentos). Em alemão, o umlaut (por exemplo, `ü`) é tradicionalmente substituído por `ue` em URLs.

(Sinta-se à vontade para mover esta postagem para um novo tópico.)

---

<div class="post-metadata">

### Author: ![gerhard](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/gerhard/32/119479_2.png) [@gerhard](https://meta.discourse.org/u/gerhard)
#### Post date: [13 Fevereiro , 2024 10:51 UTC](https://meta.discourse.org/t/utf-8-slugs-for-categories/27353/4 "2024-02-13T10:51:38Z")

</div>

O Discourse usa regras de transliteração para substituir caracteres Unicode por caracteres ASCII. As regras dependem do `default_locale` do site.

Funciona perfeitamente para o alemão ([transliterate.de.yml](https://github.com/discourse/discourse/blob/main/config/locales/transliterate.de.yml)). Não funciona para o francês porque ainda não existem regras de transliteração.

EDIT: Ah, olhando a saída abaixo, na verdade corresponde ao seu preferido “nos-oeuvres-cachees”. Não tenho certeza por quê… Talvez o Rails tenha começado a incluir regras de transliteração por padrão? 🤔

```ruby
[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"

```

Você poderia criar um PR com as regras de transliteração em francês?

---

<div class="post-metadata">

### Author: ![hellekin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/hellekin/32/51636_2.png) [@hellekin](https://meta.discourse.org/u/hellekin)
#### Post date: [13 Fevereiro , 2024 11:14 UTC](https://meta.discourse.org/t/utf-8-slugs-for-categories/27353/5 "2024-02-13T11:14:13Z")

</div>

> [@gerhard](#):
>
> EDIT: Ah, olhando a saída abaixo, na verdade corresponde ao seu “nos-oeuvres-cachees” preferido. Não tenho certeza por quê… Talvez o Rails tenha começado a incluir regras de transliteração por padrão? 🤔
> 
> ``

Peguei um exemplo, talvez este tenha sido um mau. Mas obrigado pelas dicas do console, definitivamente darei uma olhada e verei se consigo brincar com os arquivos de transliteração, se houver uma maneira de personalizar alguns casos de transliteração para substituir os padrões, pode ser bom ter.

> [@gerhard](#):
>
> Você poderia criar um PR com as regras de transliteração francesa?

Ficarei feliz em fazer isso, mas já estou sobrecarregado. Talvez alguém do grupo [@translators](https://meta.discourse.org/groups/translators) (especialmente pessoas no tópico [Quality of French Translations](https://meta.discourse.org/t/quality-of-french-translations/135871)) seja mais rápido do que eu.)

Eu estava preocupado com alguns casos extremos que seriam melhor resolvidos substituindo regras (por exemplo, às vezes você quer que um número subscrito seja substituído por um número normal ou nada em vez de `-`, por exemplo, escrever `CO₂` seria melhor alterado para `co2` do que `co` 🙂 )
