Intenté codificarlo, pero en realidad la URL se ve bien en la barra de direcciones del navegador de Internet. Sin embargo, cuando la copio o la envío, la URL real es una cadena de escape y ya no es amigable.
Revisé lib/slug.rb y sugiero cambiar la función encoded_generator de la siguiente manera:
def self.encoded_generator(string, downcase: true)
# Este generador saneará casi todos los caracteres especiales,
# incluidos los caracteres reservados de RFC3986.
# Ver también URI::REGEXP::PATTERN.
string = I18n.transliterate(string, :locale => SiteSetting.default_locale)
string = string.strip.gsub(/\s+/, "-").gsub(CHAR_FILTER_REGEXP, "")
string = string.downcase if downcase
string
#CGI.escape(string)
end
Probé con la configuración regional de Vietnam y obtuve los resultados deseados. Espero que funcione con otro idioma.
Supongo que esto es una consideración de compatibilidad. Algunas aplicaciones solo admiten enlaces de texto latino y cortan directamente los enlaces en texto no latino.
No soy un escritor de código Ruby, pero leí el documento y encontré esto:
Configuración de un Hash en <locale>.yml:
i18n:
transliterate:
rule:
ü: "ue"
ö: "oe"
Así que esta es la forma de personalizar la transliteración en la configuración, al final de la función, obtenemos solo texto latino (URL amigable). Lo probé con mi idioma nativo y no es necesario definir la configuración personalizada del hash.