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.
为了这个目的,我写了一个名为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)
(请参阅预期格式的内置默认映射)
整个项目已经很老了,但也许它完成了你需要的工作.如果没有,也许源代码会有所帮助.
"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)
当然,可以通过使用查找表来改进查找,但原则应该是清楚的.