From 5175818cbe5601f59355139857e033ffc394f49d Mon Sep 17 00:00:00 2001 From: leesam Date: Sat, 4 Apr 2026 19:26:29 +0900 Subject: [PATCH] fix: preserve Chinese locale scripts --- .../Sources/Managers/TranslationManager.swift | 7 +++--- .../Models/TranslationLocale+Extension.swift | 22 +++++++++++++++++-- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/Projects/App/Sources/Managers/TranslationManager.swift b/Projects/App/Sources/Managers/TranslationManager.swift index b0dfc5a..fd568c9 100644 --- a/Projects/App/Sources/Managers/TranslationManager.swift +++ b/Projects/App/Sources/Managers/TranslationManager.swift @@ -31,11 +31,11 @@ class TranslationManager { - returns: the indication to able to translate by given locale of source/target */ public func canSupportTranslate(source : Locale, target : Locale) -> Bool{ - guard let sourceTransLocale = TranslationLocale(rawValue: source.language.languageCode?.identifier ?? "") else{ + guard let sourceTransLocale = TranslationLocale.from(locale: source) else{ return false; } - guard let targetTransLocale = TranslationLocale(rawValue: target.language.languageCode?.identifier ?? "") else{ + guard let targetTransLocale = TranslationLocale.from(locale: target) else{ return false; } @@ -52,8 +52,7 @@ class TranslationManager { - returns: target locales can be translated from given source locale */ public func supportedTargetLangs(source: Locale) -> [TranslationLocale]{ - let sourceLangCode = source.language.languageCode?.identifier ?? ""; - guard let sourceLang = TranslationLocale(rawValue: sourceLangCode) else{ + guard let sourceLang = TranslationLocale.from(locale: source) else{ return []; } diff --git a/Projects/App/Sources/Models/TranslationLocale+Extension.swift b/Projects/App/Sources/Models/TranslationLocale+Extension.swift index 7bd7b7c..aeb92c3 100644 --- a/Projects/App/Sources/Models/TranslationLocale+Extension.swift +++ b/Projects/App/Sources/Models/TranslationLocale+Extension.swift @@ -50,8 +50,26 @@ extension TranslationLocale { } static func from(locale: Locale) -> TranslationLocale? { - let identifier = locale.language.languageCode?.identifier ?? "" - return TranslationLocale(rawValue: identifier) + let languageCode = locale.language.languageCode?.identifier.lowercased() ?? "" + let scriptCode = locale.language.script?.identifier.lowercased() + + switch languageCode { + case "zh": + if scriptCode == "hant" { + return .taiwan + } + if scriptCode == "hans" { + return .chinese + } + + let normalizedIdentifier = locale.identifier.lowercased().replacingOccurrences(of: "_", with: "-") + if normalizedIdentifier.contains("hant") || normalizedIdentifier.contains("zh-tw") { + return .taiwan + } + return .chinese + default: + return TranslationLocale(rawValue: languageCode) + } } }