相关疑难解决方法(0)

在RoR中对UTF-8字符串进行排序

我试图找出一种在Ruby on Rails中对UTF-8字符串进行排序的"正确"方法.

在我的应用程序中,我有一个填充了国家/地区的选择框.由于我的应用程序已本地化,因此每个现有语言环境都有一个countries.yml文件,该文件将国家/地区的ID与该国家/地区的本地化名称相关联.我无法在yml文件中手动对字符串进行排序,因为我需要ID在所有语言环境中保持一致.

我所做的是创建一个ascii_name方法,使用unidecodegem将重音和非拉丁字符转换为它们的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)

但是,这有明显的问题:

  • 它无法正确排序非拉丁语区域设置,因为可能没有直接类似的拉丁字符.
  • 它没有区分字母和该字母的所有重音形式(例如,A和Ä可以互换)

有没有人知道我可以对弦进行排序的更好方法?

ruby sorting ruby-on-rails utf-8

15
推荐指数
2
解决办法
5704
查看次数

标签 统计

ruby ×1

ruby-on-rails ×1

sorting ×1

utf-8 ×1