Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Finding the distance, currency, temperature units etc. for a country (iPhone)

During the localization of my app I went through a lot of documentation, somewhere Im sure I read that there is a way to get a set of units that is linked with the locale.

I believe it said something like "units based on cultural..." something.

I would like to display temperature and distance in Fahrenheit and Miles for some countries and Celsius and Kilometers for other countries.

Is there a way to access a list of these units in the iPhone SDK.

Thanks you.

like image 970
RickiG Avatar asked Jan 28 '10 09:01

RickiG


4 Answers

You can use NSLocale to check the currency unit, but for imperial vs. metric you need to make a list yourself.

Oops. You can check for the imperial vs. metric. There is are NSLocaleMeasurementSystem and NSLocaleUsesMetricSystem keys.

like image 65
kennytm Avatar answered Nov 03 '22 16:11

kennytm


It is worth mentioning that Apple provides a nice library (MKDistanceFormatter, introduced in iOS 7) to automatically present a CLLocationDistance as the appropriate string for a given user's locale and language.

It does a little fuzzy rounding (e.g. 300ft->350ft->400ft), but does nicely convert between units (e.g. feet -> miles, when appropriate to do so). Unless you demand really precise values, this class is perfect for returning rough estimates for distances in two lines of code.

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

like image 9
mattv123 Avatar answered Nov 03 '22 16:11

mattv123


I just wanted to note, that, as with the release of iOS8 there will be new NSFormatters for at least some of the units you mentioned.

There will be NSLengthFormatter, NSMassFormatter and NSEnergyFormatter which are very easy to use – see this iOS8 NSFormatter tutorial. Here is an example using the NSLengthFormatter with swift:

let lengthFormatter = NSLengthFormatter()
println(@"Kilometer: %@", lengthFormatter.stringFromValue(1000, unit: .Kilometer))       //Kilometer: 1,000 km
like image 8
Alexander Avatar answered Nov 03 '22 18:11

Alexander


Swift:

1.)

import MapKit

2.) Since creating formatter is expensive, you better set formatter as a lazy property. By doing so, you can initialize the formatter only when it's necessary and reuse the formatter rather than create a new one.

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

    return tempDistanceFormatter
}()

3.)

let distanceString = self.distanceFormatter.stringFromDistance(yourDistance)
like image 2
Brian Avatar answered Nov 03 '22 18:11

Brian