2010-01-28 3 views
23

Во время локализации моего приложения я просмотрел много документации, где-то. Я уверен, что прочитал, что есть способ получить набор единиц, которые связан с языковым стандартом.Поиск расстояния, валюты, единиц измерения температуры и т. Д. Для страны (iPhone)

Я считаю, что это что-то вроде «единиц, основанных на культурных ...».

Я хотел бы указать температуру и расстояние в Фаренгейте и Милях для некоторых стран, а также для Celsius и километры для других стран.

Есть ли способ получить доступ к списку этих устройств в iPhone SDK.

Спасибо.

ответ

29

Вы можете использовать NSLocale, чтобы проверить валюту, , но для имперских и метрических вы должны сами составить список.

К сожалению. You может проверить для имперских против метрики. Есть NSLocaleMeasurementSystem и NSLocaleUsesMetricSystem ключей.

+0

Привет Кенни Спасибо! Угадайте, я подумаю, что это может быть оправдано, загружая такой список для двух небольших меток:/ – RickiG

+0

@RickiG. Сожалею. проверить обновление. – kennytm

+0

Привет, Кенни! Спасибо, что вернулись к этому: просто отлично, я еще не начал составлять список стран против.поэтому это произошло в идеальное время. Еще раз спасибо. – RickiG

9

Следует отметить, что Apple предоставляет хорошую библиотеку (MKDistanceFormatter, представленную в iOS 7) для автоматического представления CLLocationDistance в качестве соответствующей строки для локали и языка данного пользователя.

Он делает небольшое нечеткое округление (например, 300 футов -> 350 футов -> 400 футов), но прекрасно преобразует между единицами (например, футы -> мили, когда это необходимо). Если вы не требуете действительно точных значений, этот класс идеально подходит для возврата приблизительных оценок расстояний в двух строках кода.

MKDistanceFormatter *distanceFormatter = [[MKDistanceFormatter alloc] init]; 
[distanceFormatter setUnitStyle:MKDistanceFormatterUnitStyleAbbreviated]; // Optional 
NSString *formattedDistance = [distanceFormatter stringFromDistance:100]; 
NSLog(@"%@",formattedDistance); // Prints "350 ft" 

https://developer.apple.com/library/ios/documentation/MapKit/Reference/MKDistanceFormatter_class/Reference/Reference.html

8

Я просто хотел отметить, что, как и с выпуском iOS8 будет новый NSFormatters, по крайней мере, некоторые из блоков вы упомянули.

Там будет NSLengthFormatter, NSMassFormatter и NSEnergyFormatter, которые очень просты в использовании - посмотреть iOS8 NSFormatter tutorial. Вот пример использования NSLengthFormatter с быстрым:

let lengthFormatter = NSLengthFormatter() 
println(@"Kilometer: %@", lengthFormatter.stringFromValue(1000, unit: .Kilometer))  //Kilometer: 1,000 km 
1

Swift:

1.)

import MapKit 

2.) Поскольку создание форматировщика дорого, лучше набор форматировщика ленивой собственности , Поступая таким образом, вы можете инициализировать форматировщик только тогда, когда это необходимо, и повторное использование форматирования, а не создание нового.

lazy var distanceFormatter: MKDistanceFormatter = { 
    var tempDistanceFormatter = MKDistanceFormatter() 
    tempDistanceFormatter.unitStyle = .Abbreviated // .abbreviated in Swift 3 

    return tempDistanceFormatter 
}() 

3.)

let distanceString = self.distanceFormatter.stringFromDistance(yourDistance)