Skip to content

Commit 5b8e8ff

Browse files
committed
Add comprehensive set of NumberingSystem constants
1 parent 5a39fc4 commit 5b8e8ff

File tree

6 files changed

+271
-10
lines changed

6 files changed

+271
-10
lines changed

Sources/FoundationEssentials/Locale/Locale+Components.swift

+263-2
Original file line numberDiff line numberDiff line change
@@ -508,8 +508,6 @@ extension Locale {
508508
_normalizedIdentifier = identifier.lowercased()
509509
}
510510

511-
package static let latn = NumberingSystem("latn")
512-
513511
public func hash(into hasher: inout Hasher) {
514512
hasher.combine(_normalizedIdentifier)
515513
}
@@ -2041,3 +2039,266 @@ extension Locale.Script {
20412039
public static var tibetan: Locale.Script { Locale.Script("Tibt") }
20422040
}
20432041

2042+
@available(macOS 13, iOS 16, tvOS 16, watchOS 9, *)
2043+
extension Locale.NumberingSystem {
2044+
@_alwaysEmitIntoClient
2045+
public static var adlam: Locale.NumberingSystem { Locale.NumberingSystem("adlm") }
2046+
2047+
@_alwaysEmitIntoClient
2048+
public static var ahom: Locale.NumberingSystem { Locale.NumberingSystem("ahom") }
2049+
2050+
@_alwaysEmitIntoClient
2051+
public static var arabic: Locale.NumberingSystem { Locale.NumberingSystem("arab") }
2052+
2053+
@_alwaysEmitIntoClient
2054+
public static var arabicExtended: Locale.NumberingSystem { Locale.NumberingSystem("arabext") }
2055+
2056+
@_alwaysEmitIntoClient
2057+
public static var armenianUpper: Locale.NumberingSystem { Locale.NumberingSystem("armn") }
2058+
2059+
@_alwaysEmitIntoClient
2060+
public static var armenianLower: Locale.NumberingSystem { Locale.NumberingSystem("armnlow") }
2061+
2062+
@_alwaysEmitIntoClient
2063+
public static var balinese: Locale.NumberingSystem { Locale.NumberingSystem("bali") }
2064+
2065+
@_alwaysEmitIntoClient
2066+
public static var bengali: Locale.NumberingSystem { Locale.NumberingSystem("beng") }
2067+
2068+
@_alwaysEmitIntoClient
2069+
public static var bhaiksuki: Locale.NumberingSystem { Locale.NumberingSystem("bhks") }
2070+
2071+
@_alwaysEmitIntoClient
2072+
public static var brahmi: Locale.NumberingSystem { Locale.NumberingSystem("brah") }
2073+
2074+
@_alwaysEmitIntoClient
2075+
public static var chakma: Locale.NumberingSystem { Locale.NumberingSystem("cakm") }
2076+
2077+
@_alwaysEmitIntoClient
2078+
public static var cham: Locale.NumberingSystem { Locale.NumberingSystem("cham") }
2079+
2080+
@_alwaysEmitIntoClient
2081+
public static var cyrillic: Locale.NumberingSystem { Locale.NumberingSystem("cyrl") }
2082+
2083+
@_alwaysEmitIntoClient
2084+
public static var devanagari: Locale.NumberingSystem { Locale.NumberingSystem("deva") }
2085+
2086+
@_alwaysEmitIntoClient
2087+
public static var divesAkuru: Locale.NumberingSystem { Locale.NumberingSystem("diak") }
2088+
2089+
@_alwaysEmitIntoClient
2090+
public static var ethiopic: Locale.NumberingSystem { Locale.NumberingSystem("ethi") }
2091+
2092+
@_alwaysEmitIntoClient
2093+
public static var financial: Locale.NumberingSystem { Locale.NumberingSystem("finance") }
2094+
2095+
@_alwaysEmitIntoClient
2096+
public static var fullwide: Locale.NumberingSystem { Locale.NumberingSystem("fullwide") }
2097+
2098+
@_alwaysEmitIntoClient
2099+
public static var georgian: Locale.NumberingSystem { Locale.NumberingSystem("geor") }
2100+
2101+
@_alwaysEmitIntoClient
2102+
public static var gunjalaGondi: Locale.NumberingSystem { Locale.NumberingSystem("gong") }
2103+
2104+
@_alwaysEmitIntoClient
2105+
public static var masaramGondi: Locale.NumberingSystem { Locale.NumberingSystem("gonm") }
2106+
2107+
@_alwaysEmitIntoClient
2108+
public static var greekUpper: Locale.NumberingSystem { Locale.NumberingSystem("grek") }
2109+
2110+
@_alwaysEmitIntoClient
2111+
public static var greekLower: Locale.NumberingSystem { Locale.NumberingSystem("greklow") }
2112+
2113+
@_alwaysEmitIntoClient
2114+
public static var gujarati: Locale.NumberingSystem { Locale.NumberingSystem("gujr") }
2115+
2116+
@_alwaysEmitIntoClient
2117+
public static var gurmukhi: Locale.NumberingSystem { Locale.NumberingSystem("guru") }
2118+
2119+
@_alwaysEmitIntoClient
2120+
public static var hanidays: Locale.NumberingSystem { Locale.NumberingSystem("hanidays") }
2121+
2122+
@_alwaysEmitIntoClient
2123+
public static var hanidecimal: Locale.NumberingSystem { Locale.NumberingSystem("hanidec") }
2124+
2125+
@_alwaysEmitIntoClient
2126+
public static var simplifiedChinese: Locale.NumberingSystem { Locale.NumberingSystem("hans") }
2127+
2128+
@_alwaysEmitIntoClient
2129+
public static var simplifiedChineseFinancial: Locale.NumberingSystem { Locale.NumberingSystem("hansfin") }
2130+
2131+
@_alwaysEmitIntoClient
2132+
public static var traditionalChinese: Locale.NumberingSystem { Locale.NumberingSystem("hant") }
2133+
2134+
@_alwaysEmitIntoClient
2135+
public static var traditionalChineseFinancial: Locale.NumberingSystem { Locale.NumberingSystem("hantfin") }
2136+
2137+
@_alwaysEmitIntoClient
2138+
public static var hebrew: Locale.NumberingSystem { Locale.NumberingSystem("hebr") }
2139+
2140+
@_alwaysEmitIntoClient
2141+
public static var pahawhHmong: Locale.NumberingSystem { Locale.NumberingSystem("hmng") }
2142+
2143+
@_alwaysEmitIntoClient
2144+
public static var nyiakengPuachueHmong: Locale.NumberingSystem { Locale.NumberingSystem("hmnp") }
2145+
2146+
@_alwaysEmitIntoClient
2147+
public static var javanese: Locale.NumberingSystem { Locale.NumberingSystem("java") }
2148+
2149+
@_alwaysEmitIntoClient
2150+
public static var japanese: Locale.NumberingSystem { Locale.NumberingSystem("jpan") }
2151+
2152+
@_alwaysEmitIntoClient
2153+
public static var japaneseFinancial: Locale.NumberingSystem { Locale.NumberingSystem("jpanfin") }
2154+
2155+
@_alwaysEmitIntoClient
2156+
public static var japaneseYear: Locale.NumberingSystem { Locale.NumberingSystem("jpanyear") }
2157+
2158+
@_alwaysEmitIntoClient
2159+
public static var kayahLi: Locale.NumberingSystem { Locale.NumberingSystem("kali") }
2160+
2161+
@_alwaysEmitIntoClient
2162+
public static var khmer: Locale.NumberingSystem { Locale.NumberingSystem("khmr") }
2163+
2164+
@_alwaysEmitIntoClient
2165+
public static var kannada: Locale.NumberingSystem { Locale.NumberingSystem("knda") }
2166+
2167+
@_alwaysEmitIntoClient
2168+
public static var taiThamHora: Locale.NumberingSystem { Locale.NumberingSystem("lana") }
2169+
2170+
@_alwaysEmitIntoClient
2171+
public static var taiThamTham: Locale.NumberingSystem { Locale.NumberingSystem("lanatham") }
2172+
2173+
@_alwaysEmitIntoClient
2174+
public static var lao: Locale.NumberingSystem { Locale.NumberingSystem("laoo") }
2175+
2176+
@_alwaysEmitIntoClient
2177+
public static var latin: Locale.NumberingSystem { Locale.NumberingSystem("latn") }
2178+
2179+
@_alwaysEmitIntoClient
2180+
public static var lepcha: Locale.NumberingSystem { Locale.NumberingSystem("lepc") }
2181+
2182+
@_alwaysEmitIntoClient
2183+
public static var limbu: Locale.NumberingSystem { Locale.NumberingSystem("limb") }
2184+
2185+
@_alwaysEmitIntoClient
2186+
public static var mathBold: Locale.NumberingSystem { Locale.NumberingSystem("mathbold") }
2187+
2188+
@_alwaysEmitIntoClient
2189+
public static var mathDoubleStruck: Locale.NumberingSystem { Locale.NumberingSystem("mathdbl") }
2190+
2191+
@_alwaysEmitIntoClient
2192+
public static var mathMonospace: Locale.NumberingSystem { Locale.NumberingSystem("mathmono") }
2193+
2194+
@_alwaysEmitIntoClient
2195+
public static var mathSansSerifBold: Locale.NumberingSystem { Locale.NumberingSystem("mathsanb") }
2196+
2197+
@_alwaysEmitIntoClient
2198+
public static var mathSansSerif: Locale.NumberingSystem { Locale.NumberingSystem("mathsans") }
2199+
2200+
@_alwaysEmitIntoClient
2201+
public static var malayalam: Locale.NumberingSystem { Locale.NumberingSystem("mlym") }
2202+
2203+
@_alwaysEmitIntoClient
2204+
public static var modi: Locale.NumberingSystem { Locale.NumberingSystem("modi") }
2205+
2206+
@_alwaysEmitIntoClient
2207+
public static var mongolian: Locale.NumberingSystem { Locale.NumberingSystem("mong") }
2208+
2209+
@_alwaysEmitIntoClient
2210+
public static var mro: Locale.NumberingSystem { Locale.NumberingSystem("mroo") }
2211+
2212+
@_alwaysEmitIntoClient
2213+
public static var meeteiMayek: Locale.NumberingSystem { Locale.NumberingSystem("mtei") }
2214+
2215+
@_alwaysEmitIntoClient
2216+
public static var myanmar: Locale.NumberingSystem { Locale.NumberingSystem("mymr") }
2217+
2218+
@_alwaysEmitIntoClient
2219+
public static var myanmarShan: Locale.NumberingSystem { Locale.NumberingSystem("mymrshan") }
2220+
2221+
@_alwaysEmitIntoClient
2222+
public static var myanmarTaiLaing: Locale.NumberingSystem { Locale.NumberingSystem("mymrtlng") }
2223+
2224+
@_alwaysEmitIntoClient
2225+
public static var native: Locale.NumberingSystem { Locale.NumberingSystem("native") }
2226+
2227+
@_alwaysEmitIntoClient
2228+
public static var newa: Locale.NumberingSystem { Locale.NumberingSystem("newa") }
2229+
2230+
@_alwaysEmitIntoClient
2231+
public static var nko: Locale.NumberingSystem { Locale.NumberingSystem("nkoo") }
2232+
2233+
@_alwaysEmitIntoClient
2234+
public static var olChiki: Locale.NumberingSystem { Locale.NumberingSystem("olck") }
2235+
2236+
@_alwaysEmitIntoClient
2237+
public static var oriya: Locale.NumberingSystem { Locale.NumberingSystem("orya") }
2238+
2239+
@_alwaysEmitIntoClient
2240+
public static var osmanya: Locale.NumberingSystem { Locale.NumberingSystem("osma") }
2241+
2242+
@_alwaysEmitIntoClient
2243+
public static var hanifiRohingya: Locale.NumberingSystem { Locale.NumberingSystem("rohg") }
2244+
2245+
@_alwaysEmitIntoClient
2246+
public static var romanUpper: Locale.NumberingSystem { Locale.NumberingSystem("roman") }
2247+
2248+
@_alwaysEmitIntoClient
2249+
public static var romanLower: Locale.NumberingSystem { Locale.NumberingSystem("romanlow") }
2250+
2251+
@_alwaysEmitIntoClient
2252+
public static var saurashtra: Locale.NumberingSystem { Locale.NumberingSystem("saur") }
2253+
2254+
@_alwaysEmitIntoClient
2255+
public static var sharada: Locale.NumberingSystem { Locale.NumberingSystem("shrd") }
2256+
2257+
@_alwaysEmitIntoClient
2258+
public static var khudawadi: Locale.NumberingSystem { Locale.NumberingSystem("sind") }
2259+
2260+
@_alwaysEmitIntoClient
2261+
public static var sinhala: Locale.NumberingSystem { Locale.NumberingSystem("sinh") }
2262+
2263+
@_alwaysEmitIntoClient
2264+
public static var soraSompeng: Locale.NumberingSystem { Locale.NumberingSystem("sora") }
2265+
2266+
@_alwaysEmitIntoClient
2267+
public static var sundanese: Locale.NumberingSystem { Locale.NumberingSystem("sund") }
2268+
2269+
@_alwaysEmitIntoClient
2270+
public static var takri: Locale.NumberingSystem { Locale.NumberingSystem("takr") }
2271+
2272+
@_alwaysEmitIntoClient
2273+
public static var newTaiLue: Locale.NumberingSystem { Locale.NumberingSystem("talu") }
2274+
2275+
@_alwaysEmitIntoClient
2276+
public static var tamil: Locale.NumberingSystem { Locale.NumberingSystem("taml") }
2277+
2278+
@_alwaysEmitIntoClient
2279+
public static var modernTamil: Locale.NumberingSystem { Locale.NumberingSystem("tamldec") }
2280+
2281+
@_alwaysEmitIntoClient
2282+
public static var telugu: Locale.NumberingSystem { Locale.NumberingSystem("telu") }
2283+
2284+
@_alwaysEmitIntoClient
2285+
public static var thai: Locale.NumberingSystem { Locale.NumberingSystem("thai") }
2286+
2287+
@_alwaysEmitIntoClient
2288+
public static var tirhuta: Locale.NumberingSystem { Locale.NumberingSystem("tirh") }
2289+
2290+
@_alwaysEmitIntoClient
2291+
public static var tibetan: Locale.NumberingSystem { Locale.NumberingSystem("tibt") }
2292+
2293+
@_alwaysEmitIntoClient
2294+
public static var traditional: Locale.NumberingSystem { Locale.NumberingSystem("traditio") }
2295+
2296+
@_alwaysEmitIntoClient
2297+
public static var vai: Locale.NumberingSystem { Locale.NumberingSystem("vaii") }
2298+
2299+
@_alwaysEmitIntoClient
2300+
public static var warangCiti: Locale.NumberingSystem { Locale.NumberingSystem("wara") }
2301+
2302+
@_alwaysEmitIntoClient
2303+
public static var wancho: Locale.NumberingSystem { Locale.NumberingSystem("wcho") }
2304+
}

Sources/FoundationEssentials/Locale/Locale_Unlocalized.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -162,11 +162,11 @@ internal final class _LocaleUnlocalized : _LocaleProtocol, @unchecked Sendable {
162162
}
163163

164164
var numberingSystem: Locale.NumberingSystem {
165-
.latn
165+
.latin
166166
}
167167

168168
var availableNumberingSystems: [Locale.NumberingSystem] {
169-
[.latn]
169+
[.latin]
170170
}
171171

172172
var firstDayOfWeek: Locale.Weekday {

Sources/FoundationInternationalization/Locale/Locale+Components_ICU.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -453,7 +453,7 @@ extension Locale.NumberingSystem {
453453
if let numberingSystem, status.isSuccess {
454454
self.init(String(cString: unumsys_getName(numberingSystem)))
455455
} else {
456-
self = .latn
456+
self = .latin
457457
}
458458
}
459459
}

Sources/FoundationInternationalization/Locale/Locale_ICU.swift

+3-3
Original file line numberDiff line numberDiff line change
@@ -1431,8 +1431,8 @@ internal final class _LocaleICU: _LocaleProtocol, Sendable {
14311431
return systems
14321432
}
14331433

1434-
// The result always has .latn and the locale's numbering system
1435-
var result: Set<Locale.NumberingSystem> = [.latn, _lockedNumberingSystem(&state)]
1434+
// The result always has .latin and the locale's numbering system
1435+
var result: Set<Locale.NumberingSystem> = [.latin, _lockedNumberingSystem(&state)]
14361436

14371437
// https://www.unicode.org/reports/tr35/tr35-numbers.html#Numbering_Systems
14381438
let variants: [Locale.NumberingSystem] = [ "default", "native", "traditional", "finance" ]
@@ -1631,7 +1631,7 @@ extension Locale {
16311631
return numbering
16321632
}
16331633

1634-
return Locale.NumberingSystem.defaultNumberingSystem(for: localeID) ?? .latn
1634+
return Locale.NumberingSystem.defaultNumberingSystem(for: localeID) ?? .latin
16351635
}
16361636

16371637
static func localeIdentifierWithLikelySubtags(_ localeID: String) -> String {

Tests/FoundationInternationalizationTests/LocaleComponentsTests.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -444,7 +444,7 @@ final class LocaleCodableTests: XCTestCase {
444444
}
445445

446446
do {
447-
let codableObj = Locale.NumberingSystem.latn
447+
let codableObj = Locale.NumberingSystem.latin
448448
let decoded = _testRoundtripCoding(codableObj, identifier: codableObj.identifier, normalizedIdentifier: codableObj._normalizedIdentifier)
449449
XCTAssertEqual(decoded?.identifier, codableObj.identifier)
450450
XCTAssertEqual(decoded?._normalizedIdentifier, codableObj._normalizedIdentifier)

Tests/FoundationInternationalizationTests/LocaleTests.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ final class LocaleTests : XCTestCase {
190190
verify(cldr: "fr_u_cu_eur_nu_latn", bcp47: "fr-u-cu-eur-nu-latn", icu: "fr@currency=eur;numbers=latn") {
191191
var localeComponents = Locale.Components(languageCode: .french)
192192
localeComponents.currency = "eur"
193-
localeComponents.numberingSystem = .latn
193+
localeComponents.numberingSystem = .latin
194194
return localeComponents
195195
}
196196

0 commit comments

Comments
 (0)