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.
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
andNSLocaleUsesMetricSystem
keys.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.
https://developer.apple.com/library/ios/documentation/MapKit/Reference/MKDistanceFormatter_class/Reference/Reference.html
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
andNSEnergyFormatter
which are very easy to use – see this iOS8 NSFormatter tutorial. Here is an example using the NSLengthFormatter with swift:I have extracted this method to String extension. Looks elegant
Swift 4.1 version
Usage
Swift:
1.)
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.
3.)