Замените umlaute (äüö) на SEO-ссылку в рельсах - лучший способ - PullRequest
5 голосов
/ 18 мая 2009

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

Что мне нужно, это то, что заменяет ä с ae ü с тэ ö с oe

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

е с е Ш с о

и т.д.

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

Спасибо

Ответы [ 7 ]

13 голосов
/ 26 декабря 2014

Посмотрите на транслитерацию и параметризацию (с транслитерациями в 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.

9 голосов
/ 18 мая 2009

Я написал небольшую Библиотеку под названием Asciify именно для этой цели

$ sudo gem install asciify

Использование:

#!/bin/ruby
require "asciify"

"Lücke".asciify   #=> "Luecke"

Вы можете предоставить YAML-файл для пользовательских сопоставлений, например так:

translator = Asciify.new("/path/to/mappings.yaml")
output_string = translator.convert("input string")

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

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

7 голосов
/ 18 мая 2009

Использование String.gsub():

"ich bin doch nicht blöd, mann!".gsub(/[äöü]/) do |match|
    case match
        when "ä"
          'ae'
        when "ö"
          'oe'
        when "ü"
          'ue'
    end
end

Конечно, поиск можно улучшить с помощью таблицы поиска, но принцип должен быть ясен.

6 голосов
/ 31 декабря 2010
"äöü".gsub('ä','ae').gsub('ö','oe').gsub('ü','ue')

;)

0 голосов
/ 29 марта 2010

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

0 голосов
/ 18 мая 2009

Я задавал похожий вопрос один раз . Это было для JavaScript, и это требует подхода на основе регулярных выражений. Возможно, методологическое решение все еще имеет для вас какое-то значение.

0 голосов
/ 18 мая 2009

Попробуйте String.sub! .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...