我正在使用permalink_fu插件来创建标题的永久链接。我的问题是:如果标题包含德语字符,则它们只是替换为“_”。
我需要的是取代的东西 äwithae ü与你 ö与oe
我fount String.tr但这里的问题是它用1个替换替换1个字符,所以它可以替换
等
有人为此提供了一个很好的清洁解决方案吗?
由于
答案 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)
"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}