1 // Copyright 2021-present 650 Industries. All rights reserved. 2 3 import Foundation 4 import ExpoModulesCore 5 6 public class LocalizationModule: Module { 7 public func definition() -> ModuleDefinition { 8 name("ExpoLocalization") 9 10 constants { 11 return Self.getCurrentLocalization() 12 } 13 14 function("getLocalizationAsync") { 15 return Self.getCurrentLocalization() 16 } 17 } 18 19 static func getCurrentLocalization() -> [String: Any?] { 20 let locale = Locale.current 21 let languageCode = locale.languageCode ?? "en" 22 var languageIds = Locale.preferredLanguages 23 24 if languageIds.isEmpty { 25 languageIds.append("en-US") 26 } 27 28 return [ 29 "currency": locale.currencyCode ?? "USD", 30 "decimalSeparator": locale.decimalSeparator ?? ".", 31 "digitGroupingSeparator": locale.groupingSeparator ?? ",", 32 "isoCurrencyCodes": Locale.isoCurrencyCodes, 33 "isMetric": locale.usesMetricSystem, 34 "isRTL": Locale.characterDirection(forLanguage: languageCode) == .rightToLeft, 35 "locale": languageIds.first, 36 "locales": languageIds, 37 "region": locale.regionCode ?? "US", 38 "timezone": TimeZone.current.identifier 39 ] 40 } 41 } 42