ios - 使用单位符号格式化本地化数字

标签 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

问题

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

最佳答案

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 代表……好吧,幻想语言。

关于ios - 使用单位符号格式化本地化数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52034907/

相关文章:

ios - Swift/浮点运算

objective-c - 自定义 cocoa 对象的默认值

iphone - 如何类转储 iPad 应用程序?

objective-c - 将对象添加到从文件读取的数组中

ios - 使用 Malcom API 发送推送通知

iphone - AudioSession - 想停止在后台播放的所有内容吗?

ios - 仅在符合协议(protocol)时才进行 Swift 类扩展

swift - 使用不同的 View Controller 删除 map 上的数据

ios - 从另一个 vc 重新加载 vc TableView 支持的最佳方法

ios - MVP: View Controller 可以向另一个 View Controller 的呈现者发送消息吗?