如何在Swift中获取本地化的文件大小单位



我尝试了以下代码:

let units: [ByteCountFormatter.Units] = [.useBytes, .useKB, .useMB, .useGB, .useTB, .usePB, .useEB, .useZB, .useYBOrHigher]
let localizedDescriptions = units.map { (unit) -> String in
let formatter = ByteCountFormatter()
formatter.includesCount = false
formatter.includesUnit = true
formatter.allowedUnits = [unit]
formatter.countStyle = .file
return formatter.string(fromByteCount: .max)
}

并期望根据文档进行本地化

ByteCountFormatter

转换字节计数值的格式化程序转换为本地化的描述,该描述使用适当的字节修饰符(KB、MB、GB等(。

但不幸的是,我只得到了:

["bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"]

我测试过:

  • 切换系统区域并重新加载我的mac(在finder中看到不同的文件大小格式:"КБ"、"МБ……而不是"KB"、"MB"(
  • Playground/macOS模板项目
  • 切换了macOS模板项目中的"应用程序语言">

PS

无论如何,感谢您阅读本文。。。

不能将locale设置为ByteCountFormatter,但可以使用MeasurementFormatter

下面是一个示例(根据需要修改unitStyle和其他属性(。

let units: [UnitInformationStorage] = [.bytes, .kilobytes, .megabytes, .gigabytes, .terabytes, .petabytes, .zettabytes, .yottabytes]
let localizedDescriptions = units.map({ unit -> String in
let formatter = MeasurementFormatter()
formatter.unitStyle = .short
formatter.locale = Locale(identifier: "ru_RU") //hard coded here, I guess it takes the current one
return formatter.string(from: unit)
})

输出:

$> ["Б", "кБ", "МБ", "ГБ", "ТБ", "ПБ", "ZB", "YB"]

Zetta&Yotta没有翻译?

来自NSHipster:

ByteCountFormatterEnergyFormatterMassFormatterLengthFormatterMKDistanceFormatterMeasurementFormatter取代
旧度量:ByteCountFormatter
度量格式化程序单元:单元信息存储

最新更新