File: Locale%2BLanguage.swift

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (83 lines) | stat: -rw-r--r-- 3,038 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
//===----------------------------------------------------------------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2021 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//

extension Locale {

    @available(macOS 13, iOS 16, tvOS 16, watchOS 9, *)
    public struct Language : Hashable, Codable, Sendable {

        @available(macOS 13, iOS 16, tvOS 16, watchOS 9, *)
        /// Represents a language identifier
        public struct Components : Hashable, Codable, Sendable {
            public var languageCode: Locale.LanguageCode?
            public var script: Locale.Script?
            public var region: Locale.Region?

            public init(languageCode: Locale.LanguageCode? = nil, script: Locale.Script? = nil, region: Locale.Region? = nil) {
                self.languageCode = languageCode
                self.script = script
                self.region = region
            }

            package var identifier: String {
                var result: String = ""

                if let languageCode = languageCode {
                    result += languageCode._normalizedIdentifier
                }
                if let script = script {
                    result += "-"
                    result += script._normalizedIdentifier
                }
                if let region = region {
                    result += "_"
                    result += region._normalizedIdentifier
                }

                return result
            }
            
#if !FOUNDATION_FRAMEWORK
            @_spi(SwiftCorelibsFoundation) public var _identifier: String { identifier }
#endif
        }

        package var components: Language.Components
        
#if !FOUNDATION_FRAMEWORK
        @_spi(SwiftCorelibsFoundation) public var _components: Language.Components {
            components
        }
#endif
        
        public init(components: Language.Components) {
            self.components = components
        }

        public init(languageCode: Locale.LanguageCode? = nil, script: Locale.Script? = nil, region: Locale.Region? = nil) {
            self.components = Components(languageCode: languageCode, script: script, region: region)
        }

        /// Returns a list of system languages, includes the languages of all product localization for the current platform
        public static var systemLanguages: [Language] {
#if FOUNDATION_FRAMEWORK && canImport(_FoundationICU)
            NSLocale.systemLanguages().map {
                let comp = Components(identifier: $0 as! String)
                return Language(components: comp)
            }
#else
            // TODO: Read language list for other platforms
            return []
#endif
        }
    }
}