Я пробовал использовать кодирование, но на самом деле URL нормально отображается в адресной строке браузера. Однако при копировании или отправке реальный URL превращается в экранированную строку и становится нечитаемым.
Я проверил файл lib/slug.rb и предлагаю изменить функцию encoded_generator следующим образом:
def self.encoded_generator(string, downcase: true)
# Этот генератор очищает почти все специальные символы,
# включая зарезервированные символы из RFC3986.
# См. также 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
Я протестировал это с локалью «Вьетнам» и получил желаемый результат. Надеюсь, это сработает и для других языков.
Полагаю, это вопрос совместимости. Некоторые приложения поддерживают только ссылки на латинице и просто обрезают ссылки, содержащие текст на других алфавитах.
Таким образом, это способ настроить транслитерацию через конфигурацию: в конце работы функции мы получаем только латинский текст (дружественный URL). Я пробовал это со своим родным языком, и определять пользовательский хеш не потребовалось.