swift - 快速从本地化数值中删除千位分隔符
问题描述
我正在尝试从两者Localizable.stringsdict
和Localizable.strings
使用String.localizedStringWithFormat()
方法中获取本地化字符串以及单/复数本地化。但是这个方法返回thousand separator/group separator
我不想要的字符串。有没有办法在没有千位分隔符的情况下获得本地化字符串以及数字本地化?以下是我的Localizable.stringsdict
:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>v1_pineapples_count</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@variable@</string>
<key>variable</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>zero</key>
<string>John has no pineapples</string>
<key>one</key>
<string>John has 1 pineapple</string>
<key>other</key>
<string>John has %d pineapples</string>
</dict>
</dict>
</dict>
</plist>
我获取本地化字符串的代码是:
let formatString : String = NSLocalizedString("v1_pineapples_count", comment: "")
let resultString : String = String.localizedStringWithFormat(formatString, 1000)
Current output is John has 1,000/١,٠٠٠ pineapples Expected output is John has 1000/١٠٠٠ pineapples
解决方案
由于我没有找到任何方法来删除千位分隔符但保留数字本地化以及单数/复数本地化,我为我的项目编写了这个扩展。现在它为我服务很好。希望它能帮助有相同要求的人。
extension String {
func localizedStringOf(comment: String, args: CVarArg...) -> String {
let formatter = NumberFormatter()
formatter.locale = Locale.current
let formattedString = NSLocalizedString(self, comment: comment)
let pluralString = withVaList(args){_ in
(String(format: formattedString, arguments: args) as String)
}
var resultString: String = pluralString
for arg in args {
let locDigit = getLocalizedDigit(num: arg as! UInt, formatter: formatter)
resultString = replaceString(str: pluralString, num1: arg as! UInt, with: locDigit)
}
print(resultString)
return resultString
}
func getLocalizedDigit(num: UInt, formatter: NumberFormatter)->String {
let number = NSNumber(value: num)
return formatter.string(from: number) ?? ""
}
func replaceString(str: String, num1: UInt, with num2: String ) -> String {
return str.replacingOccurrences(of: String(num1), with: num2)
}
}
推荐阅读
- java - 如何在不使用 Maven 配置文件的情况下关闭 Spring Boot 应用程序的 Swagger/OpenAPI 3.0?
- java - 如何保存我的绘图?(基本绘画应用程序)
- php - 为什么我从作为参数传递的数组中得到“注意:未定义的偏移量”?
- git - 在 Github 上对同一项目的多个存储库进行分组的方式?
- python - 这个 python 发布请求安全吗?
- laravel - Laravel Eloquent 将 "where" 和 "orWhereHas" 一起使用
- macos - Mac 守护进程无法运行 bash 脚本
- javascript - 一次定义多个函数
- elasticsearch - 您可以在elasticsearch中查询父子连接中多个子节点之间的元素吗?
- sql - 根据另一列的计数选择一列的最佳方法