Swift字符串数组德语本地化排序异常问题求助
解决德语本地化字符串排序问题
你的问题出在直接用lowercased()做字符串比较——这种方式是基于字符的Unicode编码值排序,完全没有遵循德语的字典排序规则。德语里的变音字母(如ö)在Unicode中编码靠后,所以会被排到对应字母组的末尾,而不是和"oe"变体放在一起。
要实现符合德语规范的排序,你需要利用Swift的本地化比较API,显式指定德语区域的排序规则:
- 创建德语(德国)区域的
Locale实例,确保排序遵循德语字典序; - 使用
compare(_:options:locale:)方法替代直接的字符串比较,该方法会根据指定区域的规则处理变音字母、大小写等。
修正后的代码示例
var bez = [String]() // 创建德语(德国)区域实例 let germanLocale = Locale(identifier: "de_DE") // 基于德语本地化规则排序,忽略大小写 let sortedBez = bez.sorted { $0.compare($1, options: .caseInsensitive, locale: germanLocale) == .orderedAscending }
补充说明
- 如果你的App已经全局切换到德语本地化,也可以用
Locale.current替代显式的de_DE,但显式指定区域能避免环境设置带来的意外问题; - 德语的排序规则中,变音字母(ä/ö/ü)会被视为对应基础字母(a/o/u)的变体,排序时会和"ae"/"oe"/"ue"形式的字符串归为同一组,位置也符合字典序要求。
内容的提问来源于stack exchange,提问作者K. Wenzel
相关产品推荐
相关产品推荐

