2011-05-23 84 views

回答

1

,当我遇到了同样的问题,我使用的方法(取决于的iconv宝石):

require 'iconv' 

def sort_alphabetical(words) 
    # caching and api-wrapper 
    transliterations = {} 

    transliterate = lambda do |w| 
    transliterations[w] ||= Iconv.iconv('ascii//ignore//translit', 'utf-8', w).to_s 
    end 

    words.sort do |w1,w2| 
    transliterate.call(w1) <=> transliterate.call(w2) 
    end 
end 

sorted = sort_alphabetical(...) 

另一种方法是使用sort_alphabetical宝石。

+0

如果我将它存储在ApplicationHelper中,它将在所有视图和控制器中是否可用? – 2011-05-23 16:22:43

+0

只能在视图中。你可以把它放到'lib'文件夹中的一个文件中(不要忘记在'application.rb'中需要它的文件),并且修改'Array'类。 – 2011-05-23 17:34:58

2

这里是我的方法:

class String 
    def to_canonical 
    self.gsub(/[áàâãä]/,'a').gsub(/[ÁÀÂÃÄ]/,'A') 
    end 
end 

['Água', 'Electricidade', 'Telefone', 'Internet', 'Televisão', 'Gás', 'Renda'].sort {|x,y| x.to_canonical <=> y.to_canonical} 

这被证明是有用的其他正则表达式藏汉,该to_canonical方法可以实现他们的方式最适合你,在这个例子只是涵盖的2正则表达式。

希望这个替代方案有所帮助。 :)

相关问题