【问题标题】:How to get localized file size units in Swift如何在 Swift 中获取本地化的文件大小单位
【发布时间】:2020-02-27 12:59:42
【问题描述】:

我尝试了以下代码:

    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)
    }

并期望它根据the documentation 进行本地化

ByteCountFormatter

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

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

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

我测试过:

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

PS

无论如何感谢您阅读本文...

【问题讨论】:

  • 抱歉,我不明白,您的预期输出是什么?
  • @phi 我猜KB 应该是俄语的КБ

标签: swift localization foundation


【解决方案1】:

您不能将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
测量格式化单位:UnitInformationStorage

【讨论】:

    猜你喜欢
    • 2015-03-31
    • 2016-03-19
    • 2014-04-10
    • 2013-09-12
    • 1970-01-01
    • 2019-03-10
    • 2017-10-03
    • 1970-01-01
    • 2017-01-31
    相关资源
    最近更新 更多