Заменить umlaute (äüö) на SEO ссылку в rails-лучший способ


Я использую плагин permalink_fu для создания постоянных ссылок из заголовков. Моя проблема заключается в следующем: Если заголовок содержит немецкие символы, они просто заменяются на"_".

Мне нужно что-то, что заменяет ä с ae ü с ue ... с ОЭ

I fount String.tr но проблема здесь в том, что он заменяет 1 символ на 1 замену, поэтому он будет работать для замены

É с e ø с o

И т.д.

Есть ли у кого-нибудь хорошее и чистое решение для это?

Спасибо

7 5

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")

(смотрите встроенное отображение по умолчанию для ожидаемого формата)

Весь проект довольно старый, но, возможно, он делает ту работу, которая вам нужна. Если нет, то, возможно, исходный код будет полезен.

"äöü".gsub('ä','ae').gsub('ö','oe').gsub('ü','ue')

;)

Попробуйте Строку.саб!.

Однажды я задал подобный вопрос . Это было для JavaScript, и он принимает регулярное выражение на основе aproach. Может быть, решение все еще имеет для вас некоторую ценность, с методологической точки зрения.

Попробуйте использовать это: "Ich bin doch nicht böld ähhh ühh öhhh".gsub(/[äöüßÄÖÜ„“§%&–+]/){|t|t.to_xs}