使用单位符号设置本地化数字的格式



>情况

我想将双23.54435678格式化为字符串,例如23.54 fps尊重用户的区域设置。

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

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

问题

我应该如何处理单元部分?仅将单位附加到格式化的数字是否有效?符号的位置是否与区域设置无关?我该如何处理?

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)

如果单元放置取决于区域设置(您必须自己找出应用程序的目标区域设置(,您也必须手动处理此问题。您可以在此处利用本地化系统,为本地化提供足够位置的数值占位符,例如 英语%@ fpsx %@ yz英语...好吧,幻想语言。

最新更新