Skąd mam wiedzieć, który jest domyślnym systemem miar (imperialnym lub metrycznym) w systemie iOS?

Skąd mam wiedzieć, który jest domyślnym systemem miar (imperialnym lub metrycznym) na iOS ?

Jak uzyskać tę preferencję z ustawień urządzenia, aby wiedzieć, co wyświetlić w mojej aplikacji ?

Thanks

Author: DaveInCaz, 2011-09-14

6 answers

The NSLocale can tell you:

NSLocale *locale = [NSLocale currentLocale]; 
BOOL isMetric = [[locale objectForKey:NSLocaleUsesMetricSystem] boolValue];
Tylko trzy kraje nie używają systemu metrycznego: USA, Liberia i Mjanma. Późniejsze używają własnego systemu, dwa pierwsze używają jednostek imperialnych.

Apples documentation says (akcent mine):

NSLocaleUsesMetricSystem

Klucz znacznika, który wskazuje, czy locale używa systemu metrycznego. Odpowiadającą jej wartością jest obiekt logiczny Nsnumber. Jeśli wartość jest NO, zazwyczaj można założyć, że miara Amerykańska jednostki (np. Mila statutowa).

Dostępne w iOS 2.0 i nowszych wersjach.
 71
Author: DarkDust,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-14 08:56:16

Oto wersja swift

var locale = NSLocale.currentLocale()
let isMetric = locale.objectForKey(NSLocaleUsesMetricSystem) as! Bool
 14
Author: nibty,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-30 18:14:04

@ DarkDust odpowiedz na swift3

//User region setting return
let locale = Locale.current //NSLocale.current

//Returns true if the locale uses the metric system 
let isMetric = locale.usesMetricSystem
 14
Author: Nazmul Hasan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-12 06:45:13

Dla swift 3

    let locale = NSLocale.current
    let isMetric = locale.usesMetricSystem
 9
Author: GIJOW,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-14 14:28:35

Prawdopodobnie powinieneś po prostu mieć ustawienie w aplikacji i pozwolić użytkownikom wybrać -- to jest to, co robi Apple w aplikacji Pogoda.

Jeśli chcesz wybrać rozsądną wartość domyślną, możesz spojrzeć na ustawienia regionalne. Jeśli to my, wybierz imperialne, inaczej wybierz metryczne. Jest to heurystyczne, czasami będzie źle, ale to tylko domyślne, które można zmienić.

 2
Author: Stephen Darlington,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-14 08:23:59

Jak inni już wcześniej wspomniali, Wielka Brytania używa mieszanki jednostek metrycznych i imperialnych.

Polecam użycie nowego MeassurementFormatter wprowadzonego w iOS 10, który obsługuje większość tych rozbieżności:

import Foundation

let locale = Locale(identifier: "EN_UK")
locale.usesMetricSystem // true!
var formatter = MeasurementFormatter()
formatter.locale = locale
formatter.string(from: Measurement(value: 1000, unit: UnitLength.meters)) // 0.621 mi

Aby renderować odległość jako ciąg znaków w lokalnej, naturalnej jednostce, użyj:

let distanceInMeters: CLLocationDistance = 1000
let formatter = MeasurementFormatter()
formatter.string(from: Measurement(value: distanceInMeters, unit: UnitLength.meters)) // 0.621 mi

Oficjalna dokumentacja: https://developer.apple.com/documentation/foundation/measurementformatter

 2
Author: Eneko Alonso,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-21 20:04:25