首页 > 解决方案 > 使用单位符号格式化本地化数字

问题描述

情况

我想将 Double 格式化23.54435678为 String ,就像23.54 fps尊重用户的语言环境一样。

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

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

问题

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

标签: iosswiftcocoacocoa-touch

解决方案


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……嗯,幻想语言。


推荐阅读