对于我的应用程序(Ruby on Rails),我有注册页面的国家选择框。这些国家被本地化为不同的语言。但我无法找到一种方法来根据其本地化的语言对它们进行排序。目前我已经根据英语进行了整理。有没有办法根据区域设置对国家/地区名称进行排序?即国家的顺序应根据其本地化的语言而改变(升序)。 感谢..
答案 0 :(得分:3)
您可以基于给定的字母表制作自定义String
比较方法,类似于此(在Ruby 1.9中有效):
class String
# compares two strings based on a given alphabet
def cmp_loc(other, alphabet)
order = Hash[alphabet.each_char.with_index.to_a]
self.chars.zip(other.chars) do |c1, c2|
cc = (order[c1] || -1) <=> (order[c2] || -1)
return cc unless cc == 0
end
return self.size <=> other.size
end
end
class Array
# sorts an array of strings based on a given alphabet
def sort_loc(alphabet)
self.sort{|s1, s2| s1.cmp_loc(s2, alphabet)}
end
end
array_to_sort = ['abc', 'abd', 'bcd', 'bcde', 'bde']
ALPHABETS = {
:language_foo => 'abcdef',
:language_bar => 'fedcba'
}
p array_to_sort.sort_loc(ALPHABETS[:language_foo])
#=>["abc", "abd", "bcd", "bcde", "bde"]
p array_to_sort.sort_loc(ALPHABETS[:language_bar])
#=>["bde", "bcd", "bcde", "abd", "abc"]
然后为您要支持的每种语言提供字母顺序。
答案 1 :(得分:1)
前段时间,Twitter发布了一个库,可以很好地在Ruby中处理多种语言,它实际上可以正常工作https://github.com/twitter/twitter-cldr-rb#sorting-collation。它们也提供了更高级别的排序方式以及低级别,这可以比较给定语言环境中的两个字符串。这让我摆脱了我目前使用的git://github.com/k3rni/ffi-locale.git,用于以区域设置感知的方式对字符串进行排序。
答案 2 :(得分:-1)
也许你可以翻译所有内容并在翻译后对其进行排序。