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

时间:2009-05-18 17:11:31

标签: ruby-on-rails ruby string seo replace

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

我需要的是取代的东西 äwithae ü与你 ö与oe

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

éwithe ø与o

有人为此提供了一个很好的清洁解决方案吗?

由于

7 个答案:

答案 0 :(得分:13)

查看音译和参数化(使用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 gem。

答案 1 :(得分:9)

为了这个目的,我写了一个名为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")

(预期格式见the builtin default mapping

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

答案 2 :(得分:7)

使用String.gsub()

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

当然,可以使用查找表来改进查找,但原则应该是明确的。

答案 3 :(得分:6)

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

答案 4 :(得分:0)

尝试String.sub!

答案 5 :(得分:0)

I asked a similar question once。它适用于JavaScript,它采用基于正则表达式的方法。从方法论上讲,对于你来说,解决方案仍然具有一定的价值。

答案 6 :(得分:-1)

尝试使用此:"Ich bin doch nicht böld ähhh ühh öhhh".gsub(/[äöüßÄÖÜ„“§%&–+]/){|t|t.to_xs}