Как я могу получить локализованный символ единицы из результата MeasurementFormatter?
Я пытаюсь получить локализованный символ единицы для любого измерения, полученного с использованием средства форматирования измерений.
Например, если в локали используются градусы Фаренгейта, но приложение хранит эти данные в градусах Цельсия, я бы создал средство форматирования измерений следующим образом:
let formatter = MeasurementFormatter()
let measurement = Measurement(value: 10, unit: UnitTemperature.celsius)
formatter.string(from: measurement)
Эта последняя строка даст мне "50°F". Теперь я хочу получить значение "°F" из измерения.
Я пытался использовать
formatter.string(from: measurement.unit)
Но это только дает мне "град. C"
Заранее спасибо!
4 ответа
Вы, вероятно, просто должны установить язык форматирования следующим образом:
formatter.locale = Locale(identifier: "en-US")
Или, если вы хотите получить текущую локаль устройства и установить его, сделайте так:
formatter.locale = Locale.current
а потом
formatter.string(from: measurement.unit)
Немного опоздав на вечеринку, основываясь на ответе Ларса и комментарии Даниэля, следующий код позволяет вам получить локализованные единицы и значения:
let measurement = Measurement<UnitTemperature>(value: 10, unit: .celsius)
let formatter = MeasurementFormatter()
let localMeasurement = measurement.converted(to: UnitSpeed(forLocale: .autoupdatingCurrent))
let unit = formatter.string(from: localMeasurement.unit)
let value = localMeasurement.value //.rounded()
Для того, чтобы получить "°F", я думаю, что вы должны установить язык форматирования на "en_US".
Когда мой префикс Mac установлен на en_US с температурой по Фаренгейту, следующий код дает мне то, что вы хотите в Objective-C:
NSUnitTemperature * fahrenheit = [NSUnitTemperature fahrenheit];
NSMeasurement * measurement = [[NSMeasurement alloc] initWithDoubleValue:35 unit:fahrenheit];
NSMeasurementFormatter * formatter = [[NSMeasurementFormatter alloc] init];
NSLog(@"%@", measurement.unit.symbol); // °F
Этот вывод: °F