|
|
@@ -68,6 +68,8 @@ enum TemplateNameTokenLexicon {
|
|
|
token.prefix(1).uppercased() + token.dropFirst().lowercased()
|
|
|
}
|
|
|
|
|
|
+ private static var bundleTables: [AppLanguage: [String: String]] = [:]
|
|
|
+
|
|
|
private static func table(for language: AppLanguage) -> [String: String] {
|
|
|
switch language {
|
|
|
case .english:
|
|
|
@@ -85,10 +87,24 @@ enum TemplateNameTokenLexicon {
|
|
|
case .swedish:
|
|
|
return sv
|
|
|
case .dutch, .finnish, .greek, .hebrew, .italian, .korean, .norwegian, .polish, .portugueseBrazil, .russian, .spanish, .spanishMexico, .ukrainian, .vietnamese:
|
|
|
- return [:]
|
|
|
+ return bundleTable(for: language)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /// Resolves tokens from `Localizable.strings` for locales without a dedicated static table.
|
|
|
+ private static func bundleTable(for language: AppLanguage) -> [String: String] {
|
|
|
+ if let cached = bundleTables[language] { return cached }
|
|
|
+ let table: [String: String] = Dictionary(
|
|
|
+ uniqueKeysWithValues: templateNameTokenRows.compactMap { row -> (String, String)? in
|
|
|
+ let localized = appLocalized(row.key, language: language)
|
|
|
+ guard !localized.isEmpty, localized != row.key else { return nil }
|
|
|
+ return (row.key, localized)
|
|
|
+ }
|
|
|
+ )
|
|
|
+ bundleTables[language] = table
|
|
|
+ return table
|
|
|
+ }
|
|
|
+
|
|
|
static let zhHans: [String: String] = buildTable(\.zhHans)
|
|
|
static let zhHant: [String: String] = buildTable(\.zhHant)
|
|
|
static let ar: [String: String] = buildTable(\.ar)
|