我试图找出一种在Ruby on Rails中对UTF-8字符串进行排序的"正确"方法.
在我的应用程序中,我有一个填充了国家/地区的选择框.由于我的应用程序已本地化,因此每个现有语言环境都有一个countries.yml文件,该文件将国家/地区的ID与该国家/地区的本地化名称相关联.我无法在yml文件中手动对字符串进行排序,因为我需要ID在所有语言环境中保持一致.
我所做的是创建一个ascii_name
方法,使用unidecode
gem将重音和非拉丁字符转换为它们的ascii等价物(例如,"Afeganistão"将成为"Afeganistao"),然后排序:
require 'unidecode'
class Country
def ascii_name
Unidecoder.decode(name).gsub("[?]", "").gsub(/`/, "'").strip
end
end
Country.all.sort_by(:&ascii_name)
Run Code Online (Sandbox Code Playgroud)
但是,这有明显的问题:
有没有人知道我可以对弦进行排序的更好方法?