2023-02-01 18:17:03 +00:00
|
|
|
import Foundation
|
|
|
|
|
2023-02-24 07:24:51 +00:00
|
|
|
public struct Language: Identifiable, Equatable, Hashable {
|
|
|
|
public var id: String { isoCode }
|
2023-02-01 18:17:03 +00:00
|
|
|
|
2023-02-24 07:24:51 +00:00
|
|
|
public let isoCode: String
|
|
|
|
public let nativeName: String?
|
|
|
|
public let localizedName: String?
|
2023-02-04 16:17:38 +00:00
|
|
|
|
2023-02-24 07:24:51 +00:00
|
|
|
public static var allAvailableLanguages: [Language] = Locale.LanguageCode.isoLanguageCodes
|
2023-02-04 16:17:38 +00:00
|
|
|
.filter { $0.identifier.count == 2 }
|
|
|
|
.map { lang in
|
|
|
|
let nativeLocale = Locale(languageComponents: Locale.Language.Components(languageCode: lang))
|
2023-02-24 07:24:51 +00:00
|
|
|
return Language(
|
2023-02-04 16:17:38 +00:00
|
|
|
isoCode: lang.identifier,
|
|
|
|
nativeName: nativeLocale.localizedString(forLanguageCode: lang.identifier)?.capitalized,
|
|
|
|
localizedName: Locale.current.localizedString(forLanguageCode: lang.identifier)?.localizedCapitalized
|
|
|
|
)
|
|
|
|
}
|
2023-02-01 18:17:03 +00:00
|
|
|
}
|
2023-02-27 05:39:07 +00:00
|
|
|
|
|
|
|
extension Language: Sendable {}
|