Live warning: "en_GB" invalid tag, undefined Picker display — the curated OutlineLocale.all didn't include it. Added en_GB explicitly, and made the Picker's item list always include whatever code the server actually reports (falling back to the code itself as the label) so any future unlisted locale degrades gracefully instead of breaking the control.
36 lines
1.5 KiB
Swift
36 lines
1.5 KiB
Swift
import Foundation
|
|
|
|
/// Outline's interface-language options. Not exhaustive — Outline accepts
|
|
/// community translations via its own translation portal, so the real list
|
|
/// on any given server can be longer than this; this covers the common
|
|
/// cases and falls back to showing whatever code the server already has
|
|
/// set even if it isn't in this list.
|
|
struct OutlineLocale: Identifiable, Hashable {
|
|
let code: String
|
|
let label: String
|
|
|
|
var id: String { code }
|
|
|
|
static let all: [OutlineLocale] = [
|
|
OutlineLocale(code: "en_US", label: "English (US)"),
|
|
OutlineLocale(code: "en_GB", label: "English (UK)"),
|
|
OutlineLocale(code: "de_DE", label: "Deutsch"),
|
|
OutlineLocale(code: "fr_FR", label: "Français"),
|
|
OutlineLocale(code: "es_ES", label: "Español"),
|
|
OutlineLocale(code: "pt_PT", label: "Português"),
|
|
OutlineLocale(code: "pt_BR", label: "Português (Brasil)"),
|
|
OutlineLocale(code: "it_IT", label: "Italiano"),
|
|
OutlineLocale(code: "nl_NL", label: "Nederlands"),
|
|
OutlineLocale(code: "pl_PL", label: "Polski"),
|
|
OutlineLocale(code: "ru_RU", label: "Русский"),
|
|
OutlineLocale(code: "ja_JP", label: "日本語"),
|
|
OutlineLocale(code: "ko_KR", label: "한국어"),
|
|
OutlineLocale(code: "zh_CN", label: "中文 (简体)"),
|
|
OutlineLocale(code: "zh_TW", label: "中文 (繁體)"),
|
|
]
|
|
|
|
static func label(for code: String) -> String {
|
|
all.first(where: { $0.code == code })?.label ?? code
|
|
}
|
|
}
|