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