将umlaute(äüö)替换为rails中的SEO链接 - 最好的方法

Ole*_*ann 5 ruby string seo replace ruby-on-rails

我正在使用permalink_fu插件来创建标题的永久链接.我的问题是:如果标题包含德语字符,它们只是替换为'_'.

我需要的是用oeö与ae取代ä的东西

我知道String.tr但这里的问题是它用1个替换替换1个字符,所以它可以用于替换

é与eøwitho

等等

有没有人有一个漂亮而干净的解决方案呢?

谢谢

eik*_*kes 14

查看音译和参数化(使用locales/de.yml中的音译):

http://api.rubyonrails.org/classes/ActiveSupport/Inflector.html#method-i-transliterate

I18n.transliterate("Über der Höhenstraße")
 => "Ueber der Hoehenstrasse"
Run Code Online (Sandbox Code Playgroud)

http://api.rubyonrails.org/classes/ActiveSupport/Inflector.html#method-i-parameterize

"Über der Höhenstraße".parameterize
 => "ueber-der-hoehenstrasse"
Run Code Online (Sandbox Code Playgroud)

如果您不想自己编写音译,可以安装rails-i18ngem.


lev*_*lex 9

为了这个目的,我写了一个名为Asciify的小型库

$ sudo gem install asciify
Run Code Online (Sandbox Code Playgroud)

用法:

#!/bin/ruby
require "asciify"

"Lücke".asciify   #=> "Luecke"
Run Code Online (Sandbox Code Playgroud)

您可以为自定义映射提供YAML文件,如下所示:

translator = Asciify.new("/path/to/mappings.yaml")
output_string = translator.convert("input string")
Run Code Online (Sandbox Code Playgroud)

(请参阅预期格式的内置默认映射)

整个项目已经很老了,但也许它完成了你需要的工作.如果没有,也许源代码会有所帮助.


Dav*_*itt 7

用途String.gsub():

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

当然,可以通过使用查找表来改进查找,但原则应该是清楚的.


Bij*_*jan 6

"äöü".gsub('ä','ae').gsub('ö','oe').gsub('ü','ue')
Run Code Online (Sandbox Code Playgroud)

;)