用单位符号格式化本地号码

时间:2018-08-27 07:53:59

标签: ios swift cocoa cocoa-touch

情况

我想将Double 23.54435678的格式格式化为23.54 fps这样的字符串,以尊重用户的语言环境。

let formatter = NumberFormatter()
formatter.maximumFractionDigits = 2
let formatted = formatter.string(from: fps as NSNumber)! + " fps"

对于本地化的数字格式,我使用DateFormatter

问题

我应该如何处理单元部件?仅将单位附加到格式化的号码上是否有效?符号的位置是否与语言环境无关?我该如何处理?

1 个答案:

答案 0 :(得分:1)

Cocoa没有对“每秒帧数”单位的内置支持,因此您必须自己提供后缀,例如使用Xcode的本地化系统。

您仍然需要使用NumberFormatter设置当前语言环境的数字格式,然后将结果数字字符串插入本地化的格式字符串:

let formatter = NumberFormatter()
formatter.maximumFractionDigits = 2
let numberString = formatter.string(from: fps)
let formatString = NSLocalizedString("%@ fps", comment: "") // provide localizations via .strings files
let fpsString = String(format: formatString, arguments: numberString)

如果单元放置取决于语言环境(您将必须自行确定应用程序的目标语言环境),则还必须手动处理此问题。您可以在此处通过为本地化提供适当放置的数字值占位符来利用本地化系统,例如%@ fps代表英语,x %@ yz代表……幻想语言。