Как получить локализованные единицы размера файла в Swift - PullRequest
0 голосов
/ 27 февраля 2020

Я попробовал следующий код:

    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

Форматер, который преобразует значение счетчика байтов в локализованное описание, отформатированное с помощью соответствующего модификатора байта (КБ, МБ, ГБ и т. Д.).

Но, к сожалению, я получил только:

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

Я протестировал:

  • Переключить язык системы и перезагрузить мою ма c (Увидел другой формат файла в поисковике : "КБ", "МБ" ... вместо "КБ", "МБ")
  • Шаблон проекта Playground / macOS.
  • Переключен "Язык приложения" в проекте шаблона MacOS.

PS

В любом случае спасибо за прочтение этого ...

1 Ответ

1 голос
/ 27 февраля 2020

Вы не можете установить 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"]

Зетта и Йотта еще не переведены?

От NSHipster :

ByteCountFormatter, EnergyFormatter, MassFormatter, LengthFormatter и MKDistanceFormatter заменены MeasurementFormatter.
Legacy Measure: ByteCountFormatter
Форматирование измерений Unit : UnitInformationStorage

...