Заменить umlaute (äüö) на SEO ссылку в rails-лучший способ
Я использую плагин permalink_fu для создания постоянных ссылок из заголовков. Моя проблема заключается в следующем: Если заголовок содержит немецкие символы, они просто заменяются на"_".
Мне нужно что-то, что заменяет ä с ae ü с ue ... с ОЭ
I fount String.tr но проблема здесь в том, что он заменяет 1 символ на 1 замену, поэтому он будет работать для замены
É с e ø с o
И т.д.
Есть ли у кого-нибудь хорошее и чистое решение для это?
Спасибо
7 ответов:
Использование
String.gsub()
:"ich bin doch nicht blöd, mann!".gsub(/[äöü]/) do |match| case match when "ä" 'ae' when "ö" 'oe' when "ü" 'ue' end end
Конечно, поиск можно улучшить, используя таблицу поиска, но принцип должен быть ясен.
Посмотрите на транслитерацию и параметризацию (с транслитерациями в locales / de.yml):
Http://api.rubyonrails.org/classes/ActiveSupport/Inflector.html#method-i-transliterate
I18n.transliterate("Über der Höhenstraße") => "Ueber der Hoehenstrasse"
Http://api.rubyonrails.org/classes/ActiveSupport/Inflector.html#method-i-parameterize
Если вы не хотите писать транслитерации самостоятельно, вы можете установить драгоценный камень"Über der Höhenstraße".parameterize => "ueber-der-hoehenstrasse"
rails-i18n
.
Я написал небольшую библиотеку под названием Asciify именно для этой цели
$ sudo gem install asciify
Использование:
#!/bin/ruby require "asciify" "Lücke".asciify #=> "Luecke"
Вы можете предоставить ЯМЛ-файл для пользовательских сопоставлений следующим образом:
translator = Asciify.new("/path/to/mappings.yaml") output_string = translator.convert("input string")
(смотрите встроенное отображение по умолчанию для ожидаемого формата)
Весь проект довольно старый, но, возможно, он делает ту работу, которая вам нужна. Если нет, то, возможно, исходный код будет полезен.
Попробуйте Строку.саб!.
Однажды я задал подобный вопрос . Это было для JavaScript, и он принимает регулярное выражение на основе aproach. Может быть, решение все еще имеет для вас некоторую ценность, с методологической точки зрения.