Skip to content

Instantly share code, notes, and snippets.

@zwaldowski
Created October 11, 2023 01:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save zwaldowski/0615c4597448fe09a7813536641e196b to your computer and use it in GitHub Desktop.
Save zwaldowski/0615c4597448fe09a7813536641e196b to your computer and use it in GitHub Desktop.
`Locale.MeasurementSystem`
struct ContentView: View {
@Environment(\.locale) var locale
var body: some View {
VStack {
Image(systemName: "globe")
.imageScale(.large)
.foregroundStyle(.tint)
Text("Locale: \(locale.identifier)")
Text("Measurement: \(locale.measurementSystem.identifier)")
Text("3 miles: \(Measurement(value: 3, unit: UnitLength.miles), format: .measurement(width: .wide, usage: .road))")
}
.padding()
}
}
import Foundation
// https://developer.apple.com/documentation/foundation/locale/4020222-measurementsystem
// "if the user overrode the default measurement system, this property provides the user’s preference."
print(Locale.current.measurementSystem) // us, uk, metric (will be metric in a playground)
let en_GB = Locale(languageCode: .english, languageRegion: .unitedKingdom)
let en_US = Locale(languageCode: .english, languageRegion: .unitedStates)
let en_DE = Locale(languageCode: .english, languageRegion: .germany)
var components = Locale.Components(languageCode: .english, languageRegion: .unitedStates)
components.measurementSystem = .metric // override
let en_US_metric = Locale(components: components)
let m = Measurement(value: 3, unit: UnitLength.miles)
print(m.formatted(.measurement(width: .wide).locale(en_US))) // 3 miles
print(m.formatted(.measurement(width: .wide).locale(en_GB))) // 3 miles
print(m.formatted(.measurement(width: .wide).locale(en_DE))) // 4,8 kilometres
print(m.formatted(.measurement(width: .wide).locale(en_US_metric))) // 4.8 kilometers
print(m.formatted(.measurement(width: .wide, usage: .visibility).locale(en_US))) // 3 miles
print(m.formatted(.measurement(width: .wide, usage: .visibility).locale(en_GB))) // 3 miles
print(m.formatted(.measurement(width: .wide, usage: .visibility).locale(en_DE))) // 4.8 m
print(m.formatted(.measurement(width: .wide, usage: .visibility).locale(en_US_metric))) // 4.8 kilometres
print(m.formatted(.measurement(width: .wide, usage: .asProvided).locale(en_US))) // 42 miles
print(m.formatted(.measurement(width: .wide, usage: .asProvided).locale(en_GB))) // 42 miles
print(m.formatted(.measurement(width: .wide, usage: .asProvided).locale(en_DE))) // 42 miles
print(m.formatted(.measurement(width: .wide, usage: .asProvided).locale(en_US_metric))) // 42 miles
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment