Geen omschrijving

TemplateNameTokenLexicon.swift 30KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335
  1. //
  2. // TemplateNameTokenLexicon.swift
  3. // App for Indeed
  4. //
  5. // Per-word vocabulary for AI-invented CV template titles (often camelCase or
  6. // concatenated English) when no full-string key exists in Localizable.strings.
  7. //
  8. import Foundation
  9. enum TemplateNameTokenLexicon {
  10. static func lookup(_ token: String, language: AppLanguage) -> String? {
  11. let trimmed = token.trimmingCharacters(in: .whitespacesAndNewlines)
  12. guard !trimmed.isEmpty else { return nil }
  13. let table = table(for: language)
  14. for candidate in lookupCandidates(for: trimmed) {
  15. if let hit = table[candidate] { return hit }
  16. }
  17. return nil
  18. }
  19. /// English key plus common inflections (plurals, -ics, etc.) used in AI titles.
  20. private static func lookupCandidates(for token: String) -> [String] {
  21. var seen = Set<String>()
  22. var results: [String] = []
  23. func append(_ value: String) {
  24. let v = value.trimmingCharacters(in: .whitespacesAndNewlines)
  25. guard !v.isEmpty, seen.insert(v).inserted else { return }
  26. results.append(v)
  27. }
  28. append(token)
  29. append(token.capitalized)
  30. append(normalizedKey(token))
  31. let key = normalizedKey(token)
  32. if key.hasSuffix("ies"), key.count > 4 {
  33. append(String(key.dropLast(3)) + "y")
  34. }
  35. if key.hasSuffix("ics"), key.count > 4 {
  36. append(String(key.dropLast(1)))
  37. }
  38. if key.hasSuffix("ions"), key.count > 5 {
  39. append(String(key.dropLast(1)))
  40. append(String(key.dropLast(3)) + "ion")
  41. }
  42. if key.hasSuffix("ness"), key.count > 5 {
  43. append(String(key.dropLast(4)))
  44. }
  45. if key.hasSuffix("ity"), key.count > 4 {
  46. append(String(key.dropLast(3)) + "e")
  47. append(String(key.dropLast(3)) + "y")
  48. }
  49. if key.hasSuffix("es"), key.count > 3 {
  50. append(String(key.dropLast(2)))
  51. append(String(key.dropLast(1)))
  52. }
  53. if key.hasSuffix("s"), key.count > 2, !key.hasSuffix("ss") {
  54. append(String(key.dropLast(1)))
  55. }
  56. return results
  57. }
  58. private static func normalizedKey(_ token: String) -> String {
  59. token.prefix(1).uppercased() + token.dropFirst().lowercased()
  60. }
  61. private static func table(for language: AppLanguage) -> [String: String] {
  62. switch language {
  63. case .english:
  64. return [:]
  65. case .chineseSimplified:
  66. return zhHans
  67. case .chineseTraditional:
  68. return zhHant
  69. case .arabic:
  70. return ar
  71. case .german:
  72. return de
  73. case .french, .frenchCanada:
  74. return fr
  75. case .swedish:
  76. return sv
  77. }
  78. }
  79. static let zhHans: [String: String] = buildTable(\.zhHans)
  80. static let zhHant: [String: String] = buildTable(\.zhHant)
  81. static let ar: [String: String] = buildTable(\.ar)
  82. static let de: [String: String] = buildTable(\.de)
  83. static let fr: [String: String] = buildTable(\.fr)
  84. static let sv: [String: String] = buildTable(\.sv)
  85. }
  86. // MARK: - Master vocabulary (one row per English token, all locales)
  87. private struct TemplateNameTokenRow {
  88. let key: String
  89. let zhHans: String
  90. let zhHant: String
  91. let de: String
  92. let fr: String
  93. let sv: String
  94. let ar: String
  95. }
  96. private let templateNameTokenRows: [TemplateNameTokenRow] = [
  97. .init(key: "AI", zhHans: "人工智能", zhHant: "人工智慧", de: "KI", fr: "IA", sv: "AI", ar: "ذكاء اصطناعي"),
  98. .init(key: "ATS", zhHans: "ATS", zhHant: "ATS", de: "ATS", fr: "ATS", sv: "ATS", ar: "ATS"),
  99. .init(key: "Aesthetic", zhHans: "美学", zhHant: "美學", de: "Ästhetik", fr: "Esthétique", sv: "Estetik", ar: "جمالي"),
  100. .init(key: "Aesthetics", zhHans: "美学", zhHant: "美學", de: "Ästhetik", fr: "Esthétique", sv: "Estetik", ar: "جماليات"),
  101. .init(key: "Airy", zhHans: "通透", zhHant: "通透", de: "Luftig", fr: "Aérien", sv: "Luftig", ar: "خفيف"),
  102. .init(key: "Apex", zhHans: "巅峰", zhHant: "巔峰", de: "Spitze", fr: "Sommet", sv: "Topp", ar: "قمة"),
  103. .init(key: "Arc", zhHans: "弧线", zhHant: "弧線", de: "Bogen", fr: "Arc", sv: "Båge", ar: "قوس"),
  104. .init(key: "Artistic", zhHans: "艺术", zhHant: "藝術", de: "Künstlerisch", fr: "Artistique", sv: "Konstnärlig", ar: "فني"),
  105. .init(key: "Atlas", zhHans: "地图", zhHant: "地圖", de: "Atlas", fr: "Atlas", sv: "Atlas", ar: "أطلس"),
  106. .init(key: "Axis", zhHans: "轴线", zhHant: "軸線", de: "Achse", fr: "Axe", sv: "Axel", ar: "محور"),
  107. .init(key: "Balance", zhHans: "平衡", zhHant: "平衡", de: "Balance", fr: "Équilibre", sv: "Balans", ar: "توازن"),
  108. .init(key: "Beacon", zhHans: "灯塔", zhHant: "燈塔", de: "Leuchtfeuer", fr: "Phare", sv: "Fyr", ar: "منارة"),
  109. .init(key: "Blueprint", zhHans: "蓝图", zhHant: "藍圖", de: "Bauplan", fr: "Plan", sv: "Ritning", ar: "مخطط"),
  110. .init(key: "Bloom", zhHans: "绽放", zhHant: "綻放", de: "Blüte", fr: "Floraison", sv: "Blomning", ar: "ازدهار"),
  111. .init(key: "Blue", zhHans: "蓝", zhHant: "藍", de: "Blau", fr: "Bleu", sv: "Blå", ar: "أزرق"),
  112. .init(key: "Bold", zhHans: "大胆", zhHant: "大膽", de: "Mutig", fr: "Audacieux", sv: "Djärv", ar: "جريء"),
  113. .init(key: "Brilliance", zhHans: "光彩", zhHant: "光彩", de: "Glanz", fr: "Éclat", sv: "Glans", ar: "تألق"),
  114. .init(key: "Briefing", zhHans: "简报", zhHant: "簡報", de: "Kurzüberblick", fr: "Synthèse", sv: "Sammanfattning", ar: "موجز"),
  115. .init(key: "Bright", zhHans: "明亮", zhHant: "明亮", de: "Hell", fr: "Lumineux", sv: "Ljus", ar: "مشرق"),
  116. .init(key: "Canvas", zhHans: "画布", zhHant: "畫布", de: "Leinwand", fr: "Toile", sv: "Duk", ar: "لوحة"),
  117. .init(key: "Cascade", zhHans: "层叠", zhHant: "層疊", de: "Kaskade", fr: "Cascade", sv: "Kaskad", ar: "تتالي"),
  118. .init(key: "Chairman", zhHans: "主席", zhHant: "主席", de: "Vorsitzender", fr: "Président", sv: "Ordförande", ar: "رئيس"),
  119. .init(key: "Charter", zhHans: "宪章", zhHant: "憲章", de: "Charta", fr: "Charte", sv: "Stadga", ar: "ميثاق"),
  120. .init(key: "Chronicle", zhHans: "纪事", zhHant: "紀事", de: "Chronik", fr: "Chronique", sv: "Krönika", ar: "سجل"),
  121. .init(key: "Circuit", zhHans: "电路", zhHant: "電路", de: "Schaltung", fr: "Circuit", sv: "Krets", ar: "دائرة"),
  122. .init(key: "Clarity", zhHans: "明晰", zhHant: "明晰", de: "Klarheit", fr: "Clarté", sv: "Klarhet", ar: "وضوح"),
  123. .init(key: "Clean", zhHans: "洁净", zhHant: "潔淨", de: "Sauber", fr: "Propre", sv: "Ren", ar: "نظيف"),
  124. .init(key: "Clear", zhHans: "清晰", zhHant: "清晰", de: "Klar", fr: "Clair", sv: "Klar", ar: "واضح"),
  125. .init(key: "Compass", zhHans: "罗盘", zhHant: "羅盤", de: "Kompass", fr: "Boussole", sv: "Kompass", ar: "بوصلة"),
  126. .init(key: "Conduit", zhHans: "管道", zhHant: "管道", de: "Leitung", fr: "Conduit", sv: "Ledning", ar: "قناة"),
  127. .init(key: "Core", zhHans: "核心", zhHant: "核心", de: "Kern", fr: "Noyau", sv: "Kärna", ar: "جوهر"),
  128. .init(key: "Corporate", zhHans: "企业", zhHant: "企業", de: "Unternehmen", fr: "Entreprise", sv: "Företag", ar: "مؤسسي"),
  129. .init(key: "Craft", zhHans: "工艺", zhHant: "工藝", de: "Handwerk", fr: "Artisanat", sv: "Hantverk", ar: "حرفة"),
  130. .init(key: "Crisp", zhHans: "清爽", zhHant: "清爽", de: "Knackig", fr: "Net", sv: "Skarp", ar: "حاد"),
  131. .init(key: "Creative", zhHans: "创意", zhHant: "創意", de: "Kreativ", fr: "Créatif", sv: "Kreativ", ar: "إبداعي"),
  132. .init(key: "Crest", zhHans: "峰顶", zhHant: "峰頂", de: "Kamm", fr: "Crête", sv: "Kam", ar: "قمة"),
  133. .init(key: "Design", zhHans: "设计", zhHant: "設計", de: "Design", fr: "Design", sv: "Design", ar: "تصميم"),
  134. .init(key: "Dimension", zhHans: "维度", zhHant: "維度", de: "Dimension", fr: "Dimension", sv: "Dimension", ar: "بعد"),
  135. .init(key: "Docket", zhHans: "待办", zhHant: "待辦", de: "Dokument", fr: "Rôle", sv: "Diarium", ar: "سجل"),
  136. .init(key: "Driven", zhHans: "驱动", zhHant: "驅動", de: "Orientiert", fr: "Orienté", sv: "Driven", ar: "موجه"),
  137. .init(key: "Dynamic", zhHans: "动态", zhHant: "動態", de: "Dynamisch", fr: "Dynamique", sv: "Dynamisk", ar: "ديناميكي"),
  138. .init(key: "Dynamo", zhHans: "动力", zhHant: "動力", de: "Dynamik", fr: "Dynamique", sv: "Dynamik", ar: "ديناميكي"),
  139. .init(key: "Echo", zhHans: "回音", zhHant: "回音", de: "Echo", fr: "Écho", sv: "Eko", ar: "صدى"),
  140. .init(key: "Edge", zhHans: "边缘", zhHant: "邊緣", de: "Kante", fr: "Bord", sv: "Kant", ar: "حافة"),
  141. .init(key: "Effortless", zhHans: "轻松", zhHant: "輕鬆", de: "Mühelos", fr: "Sans effort", sv: "Ansträngningslös", ar: "بلا جهد"),
  142. .init(key: "Elegance", zhHans: "优雅", zhHant: "優雅", de: "Eleganz", fr: "Élégance", sv: "Elegans", ar: "أناقة"),
  143. .init(key: "Element", zhHans: "元素", zhHant: "元素", de: "Element", fr: "Élément", sv: "Element", ar: "عنصر"),
  144. .init(key: "Elevate", zhHans: "提升", zhHant: "提升", de: "Erheben", fr: "Élever", sv: "Lyft", ar: "رفع"),
  145. .init(key: "Elite", zhHans: "精英", zhHant: "精英", de: "Elite", fr: "Élite", sv: "Elit", ar: "نخبة"),
  146. .init(key: "Ember", zhHans: "余烬", zhHant: "餘燼", de: "Glut", fr: "Braise", sv: "Glöd", ar: "جمر"),
  147. .init(key: "Essence", zhHans: "本质", zhHant: "本質", de: "Essenz", fr: "Essence", sv: "Essens", ar: "جوهر"),
  148. .init(key: "Estate", zhHans: "庄园", zhHant: "莊園", de: "Anwesen", fr: "Domaine", sv: "Egendom", ar: "عقار"),
  149. .init(key: "Executive", zhHans: "高管", zhHant: "高階", de: "Führungskraft", fr: "Cadre", sv: "Chefsnivå", ar: "تنفيذي"),
  150. .init(key: "Expression", zhHans: "表达", zhHant: "表達", de: "Ausdruck", fr: "Expression", sv: "Uttryck", ar: "تعبير"),
  151. .init(key: "Expressions", zhHans: "表达", zhHant: "表達", de: "Ausdruck", fr: "Expressions", sv: "Uttryck", ar: "تعبيرات"),
  152. .init(key: "Facet", zhHans: "刻面", zhHant: "刻面", de: "Facette", fr: "Facette", sv: "Facett", ar: "وجه"),
  153. .init(key: "Focus", zhHans: "聚焦", zhHant: "聚焦", de: "Fokus", fr: "Focus", sv: "Fokus", ar: "تركيز"),
  154. .init(key: "Focused", zhHans: "专注", zhHant: "專注", de: "Fokussiert", fr: "Ciblé", sv: "Fokuserad", ar: "مركّز"),
  155. .init(key: "Forge", zhHans: "锻造", zhHant: "鍛造", de: "Schmiede", fr: "Forge", sv: "Smedja", ar: "حدادة"),
  156. .init(key: "Form", zhHans: "形态", zhHant: "形態", de: "Form", fr: "Forme", sv: "Form", ar: "شكل"),
  157. .init(key: "Format", zhHans: "格式", zhHant: "格式", de: "Format", fr: "Format", sv: "Format", ar: "تنسيق"),
  158. .init(key: "Forward", zhHans: "前瞻", zhHant: "前瞻", de: "Voraus", fr: "Avant", sv: "Framåt", ar: "مستقبلي"),
  159. .init(key: "Foundation", zhHans: "基础", zhHant: "基礎", de: "Fundament", fr: "Fondation", sv: "Grund", ar: "أساس"),
  160. .init(key: "Frame", zhHans: "框架", zhHant: "框架", de: "Rahmen", fr: "Cadre", sv: "Ram", ar: "إطار"),
  161. .init(key: "Frontier", zhHans: "前沿", zhHant: "前沿", de: "Grenze", fr: "Frontière", sv: "Gräns", ar: "حدود"),
  162. .init(key: "Fusion", zhHans: "融合", zhHant: "融合", de: "Fusion", fr: "Fusion", sv: "Fusion", ar: "دمج"),
  163. .init(key: "Future", zhHans: "未来", zhHant: "未來", de: "Zukunft", fr: "Futur", sv: "Framtid", ar: "مستقبل"),
  164. .init(key: "Gallery", zhHans: "画廊", zhHant: "畫廊", de: "Galerie", fr: "Galerie", sv: "Galleri", ar: "معرض"),
  165. .init(key: "Genesis", zhHans: "起源", zhHant: "起源", de: "Genesis", fr: "Genèse", sv: "Genesis", ar: "بداية"),
  166. .init(key: "Grace", zhHans: "优雅", zhHant: "優雅", de: "Anmut", fr: "Grâce", sv: "Grace", ar: "رشاقة"),
  167. .init(key: "Graceful", zhHans: "雅致", zhHant: "雅致", de: "Anmutig", fr: "Gracieux", sv: "Graciös", ar: "أنيق"),
  168. .init(key: "Gradient", zhHans: "渐变", zhHant: "漸變", de: "Verlauf", fr: "Dégradé", sv: "Gradient", ar: "تدرج"),
  169. .init(key: "Grid", zhHans: "网格", zhHant: "網格", de: "Gitter", fr: "Grille", sv: "Rutnät", ar: "شبكة"),
  170. .init(key: "Harmony", zhHans: "和谐", zhHant: "和諧", de: "Harmonie", fr: "Harmonie", sv: "Harmoni", ar: "انسجام"),
  171. .init(key: "Harbor", zhHans: "港湾", zhHant: "港灣", de: "Hafen", fr: "Havre", sv: "Hamn", ar: "ميناء"),
  172. .init(key: "Heritage", zhHans: "传承", zhHant: "傳承", de: "Erbe", fr: "Héritage", sv: "Arv", ar: "تراث"),
  173. .init(key: "Horizon", zhHans: "地平线", zhHant: "地平線", de: "Horizont", fr: "Horizon", sv: "Horisont", ar: "أفق"),
  174. .init(key: "Icon", zhHans: "标志", zhHant: "標誌", de: "Ikone", fr: "Icône", sv: "Ikon", ar: "أيقونة"),
  175. .init(key: "Iconic", zhHans: "经典", zhHant: "經典", de: "Ikonisch", fr: "Iconique", sv: "Ikonisk", ar: "أيقوني"),
  176. .init(key: "Identity", zhHans: "身份", zhHant: "身份", de: "Identität", fr: "Identité", sv: "Identitet", ar: "هوية"),
  177. .init(key: "Impact", zhHans: "影响", zhHant: "影響", de: "Wirkung", fr: "Impact", sv: "Effekt", ar: "تأثير"),
  178. .init(key: "Imprint", zhHans: "印记", zhHant: "印記", de: "Prägung", fr: "Empreinte", sv: "Avtryck", ar: "بصمة"),
  179. .init(key: "Insight", zhHans: "洞察", zhHant: "洞察", de: "Einblick", fr: "Perspicacité", sv: "Insikt", ar: "بصيرة"),
  180. .init(key: "Inspire", zhHans: "启发", zhHant: "啟發", de: "Inspiration", fr: "Inspirer", sv: "Inspirera", ar: "إلهام"),
  181. .init(key: "Inspired", zhHans: "灵感", zhHant: "靈感", de: "Inspiriert", fr: "Inspiré", sv: "Inspirerad", ar: "ملهم"),
  182. .init(key: "Innovate", zhHans: "创新", zhHant: "創新", de: "Innovation", fr: "Innovation", sv: "Innovation", ar: "ابتكار"),
  183. .init(key: "Journey", zhHans: "旅程", zhHant: "旅程", de: "Reise", fr: "Parcours", sv: "Resa", ar: "رحلة"),
  184. .init(key: "Keystone", zhHans: "基石", zhHant: "基石", de: "Schlüsselstein", fr: "Clé de voûte", sv: "Hörnsten", ar: "حجر الزاوية"),
  185. .init(key: "Kite", zhHans: "风筝", zhHant: "風箏", de: "Drachen", fr: "Cerf-volant", sv: "Drake", ar: "طائرة ورقية"),
  186. .init(key: "Landmark", zhHans: "地标", zhHant: "地標", de: "Wahrzeichen", fr: "Repère", sv: "Landmärke", ar: "معلم"),
  187. .init(key: "Lattice", zhHans: "格栅", zhHant: "格柵", de: "Gitter", fr: "Treillis", sv: "Galler", ar: "شبكة"),
  188. .init(key: "Lead", zhHans: "引领", zhHant: "引領", de: "Führung", fr: "Conduite", sv: "Ledarskap", ar: "قيادة"),
  189. .init(key: "Leadership", zhHans: "领导力", zhHant: "領導力", de: "Führung", fr: "Leadership", sv: "Ledarskap", ar: "قيادة"),
  190. .init(key: "Legacy", zhHans: "传承", zhHant: "傳承", de: "Vermächtnis", fr: "Héritage", sv: "Arv", ar: "إرث"),
  191. .init(key: "Ledger", zhHans: "账本", zhHant: "帳本", de: "Hauptbuch", fr: "Registre", sv: "Huvudbok", ar: "دفتر"),
  192. .init(key: "Lens", zhHans: "镜头", zhHant: "鏡頭", de: "Linse", fr: "Objectif", sv: "Lins", ar: "عدسة"),
  193. .init(key: "Linea", zhHans: "线条", zhHant: "線條", de: "Linie", fr: "Ligne", sv: "Linje", ar: "خط"),
  194. .init(key: "Linear", zhHans: "线性", zhHant: "線性", de: "Linear", fr: "Linéaire", sv: "Linjär", ar: "خطي"),
  195. .init(key: "Lumen", zhHans: "光度", zhHant: "光度", de: "Lumen", fr: "Lumen", sv: "Lumen", ar: "لومن"),
  196. .init(key: "Luminous", zhHans: "明亮", zhHant: "明亮", de: "Leuchtend", fr: "Lumineux", sv: "Lysande", ar: "مضيء"),
  197. .init(key: "Marigold", zhHans: "金盏花", zhHant: "金盞花", de: "Ringelblume", fr: "Souci", sv: "Ringblomma", ar: "آذريون"),
  198. .init(key: "Mastery", zhHans: "精通", zhHant: "精通", de: "Meisterschaft", fr: "Maîtrise", sv: "Mästerskap", ar: "إتقان"),
  199. .init(key: "Matrix", zhHans: "矩阵", zhHant: "矩陣", de: "Matrix", fr: "Matrice", sv: "Matris", ar: "مصفوفة"),
  200. .init(key: "Meridian", zhHans: "子午", zhHant: "子午", de: "Meridian", fr: "Méridien", sv: "Meridian", ar: "خط الزوال"),
  201. .init(key: "Mesh", zhHans: "网状", zhHant: "網狀", de: "Netz", fr: "Maillage", sv: "Nät", ar: "شبكة"),
  202. .init(key: "Minimal", zhHans: "简约", zhHant: "簡約", de: "Minimal", fr: "Minimaliste", sv: "Minimal", ar: "بسيط"),
  203. .init(key: "Modern", zhHans: "现代", zhHant: "現代", de: "Modern", fr: "Moderne", sv: "Modern", ar: "عصري"),
  204. .init(key: "Momentum", zhHans: "动能", zhHant: "動能", de: "Schwung", fr: "Élan", sv: "Momentum", ar: "زخم"),
  205. .init(key: "Mono", zhHans: "单色", zhHant: "單色", de: "Einfarbig", fr: "Monochrome", sv: "Monokrom", ar: "أحادي"),
  206. .init(key: "Monarch", zhHans: "君主", zhHant: "君主", de: "Monarch", fr: "Monarque", sv: "Monark", ar: "ملك"),
  207. .init(key: "Mosaic", zhHans: "马赛克", zhHant: "馬賽克", de: "Mosaik", fr: "Mosaïque", sv: "Mosaik", ar: "فسيفساء"),
  208. .init(key: "Motion", zhHans: "动感", zhHant: "動感", de: "Bewegung", fr: "Mouvement", sv: "Rörelse", ar: "حركة"),
  209. .init(key: "Narrative", zhHans: "叙事", zhHant: "敘事", de: "Erzählung", fr: "Récit", sv: "Berättelse", ar: "سرد"),
  210. .init(key: "Native", zhHans: "原生", zhHant: "原生", de: "Nativ", fr: "Natif", sv: "Nativ", ar: "أصلي"),
  211. .init(key: "Nexus", zhHans: "枢纽", zhHant: "樞紐", de: "Nexus", fr: "Nexus", sv: "Nexus", ar: "رابط"),
  212. .init(key: "Noble", zhHans: "尊贵", zhHant: "尊貴", de: "Edel", fr: "Noble", sv: "Ädel", ar: "نبيل"),
  213. .init(key: "North", zhHans: "北方", zhHant: "北方", de: "Norden", fr: "Nord", sv: "Norr", ar: "شمال"),
  214. .init(key: "Nova", zhHans: "新星", zhHant: "新星", de: "Nova", fr: "Nova", sv: "Nova", ar: "نجم"),
  215. .init(key: "Ocean", zhHans: "海洋", zhHant: "海洋", de: "Ozean", fr: "Océan", sv: "Ocean", ar: "محيط"),
  216. .init(key: "Oasis", zhHans: "绿洲", zhHant: "綠洲", de: "Oase", fr: "Oasis", sv: "Oas", ar: "واحة"),
  217. .init(key: "Opus", zhHans: "作品", zhHant: "作品", de: "Opus", fr: "Opus", sv: "Opus", ar: "opus"),
  218. .init(key: "Orbit", zhHans: "轨道", zhHant: "軌道", de: "Orbit", fr: "Orbite", sv: "Omloppsbana", ar: "مدار"),
  219. .init(key: "Origin", zhHans: "起源", zhHant: "起源", de: "Ursprung", fr: "Origine", sv: "Ursprung", ar: "أصل"),
  220. .init(key: "Outline", zhHans: "轮廓", zhHant: "輪廓", de: "Umriss", fr: "Contour", sv: "Kontur", ar: "مخطط"),
  221. .init(key: "Palette", zhHans: "调色", zhHant: "調色", de: "Palette", fr: "Palette", sv: "Palett", ar: "لوحة"),
  222. .init(key: "Path", zhHans: "路径", zhHant: "路徑", de: "Pfad", fr: "Chemin", sv: "Väg", ar: "مسار"),
  223. .init(key: "Peak", zhHans: "峰", zhHant: "峰", de: "Gipfel", fr: "Sommet", sv: "Topp", ar: "قمة"),
  224. .init(key: "Performance", zhHans: "绩效", zhHant: "績效", de: "Leistung", fr: "Performance", sv: "Prestation", ar: "أداء"),
  225. .init(key: "Pinnacle", zhHans: "巅峰", zhHant: "巔峰", de: "Gipfel", fr: "Apogée", sv: "Topp", ar: "ذروة"),
  226. .init(key: "Pioneer", zhHans: "先锋", zhHant: "先鋒", de: "Pionier", fr: "Pionnier", sv: "Pionjär", ar: "رائد"),
  227. .init(key: "Pixel", zhHans: "像素", zhHant: "像素", de: "Pixel", fr: "Pixel", sv: "Pixel", ar: "بكسل"),
  228. .init(key: "Pinstripe", zhHans: "细条纹", zhHant: "細條紋", de: "Nadelstreifen", fr: "Rayures fines", sv: "Smala ränder", ar: "خطوط"),
  229. .init(key: "Poise", zhHans: "从容", zhHant: "從容", de: "Haltung", fr: "Assurance", sv: "Balans", ar: "اتزان"),
  230. .init(key: "Portrait", zhHans: "肖像", zhHant: "肖像", de: "Porträt", fr: "Portrait", sv: "Porträtt", ar: "صورة"),
  231. .init(key: "Prelude", zhHans: "序章", zhHant: "序章", de: "Präludium", fr: "Prélude", sv: "Preludium", ar: "مقدمة"),
  232. .init(key: "Prestige", zhHans: "声望", zhHant: "聲望", de: "Prestige", fr: "Prestige", sv: "Prestige", ar: "هيبة"),
  233. .init(key: "Principal", zhHans: "首席", zhHant: "首席", de: "Leitend", fr: "Principal", sv: "Ledande", ar: "رئيسي"),
  234. .init(key: "Prime", zhHans: "首要", zhHant: "首要", de: "Prime", fr: "Premier", sv: "Prim", ar: "أول"),
  235. .init(key: "Prism", zhHans: "棱镜", zhHant: "稜鏡", de: "Prisma", fr: "Prisme", sv: "Prisma", ar: "منشور"),
  236. .init(key: "Professional", zhHans: "专业", zhHant: "專業", de: "Professionell", fr: "Professionnel", sv: "Professionell", ar: "احترافي"),
  237. .init(key: "Profile", zhHans: "档案", zhHant: "檔案", de: "Profil", fr: "Profil", sv: "Profil", ar: "ملف"),
  238. .init(key: "Progress", zhHans: "进步", zhHant: "進步", de: "Fortschritt", fr: "Progrès", sv: "Framsteg", ar: "تقدم"),
  239. .init(key: "Pulse", zhHans: "脉动", zhHant: "脈動", de: "Puls", fr: "Pulsation", sv: "Puls", ar: "نبض"),
  240. .init(key: "Pure", zhHans: "纯净", zhHant: "純淨", de: "Rein", fr: "Pur", sv: "Ren", ar: "نقي"),
  241. .init(key: "Quantum", zhHans: "量子", zhHant: "量子", de: "Quantum", fr: "Quantum", sv: "Quantum", ar: "كم"),
  242. .init(key: "Quest", zhHans: "探索", zhHant: "探索", de: "Quest", fr: "Quête", sv: "Quest", ar: "رحلة"),
  243. .init(key: "Quorum", zhHans: "法定人数", zhHant: "法定人數", de: "Quorum", fr: "Quorum", sv: "Kvorum", ar: "نصاب"),
  244. .init(key: "Radiance", zhHans: "光辉", zhHant: "光輝", de: "Glanz", fr: "Éclat", sv: "Glans", ar: "إشراق"),
  245. .init(key: "Realm", zhHans: "领域", zhHant: "領域", de: "Reich", fr: "Royaume", sv: "Rike", ar: "مجال"),
  246. .init(key: "Refined", zhHans: "精致", zhHant: "精緻", de: "Verfeinert", fr: "Raffiné", sv: "Förfinad", ar: "مُنقّى"),
  247. .init(key: "Reflection", zhHans: "映像", zhHant: "映像", de: "Reflexion", fr: "Réflexion", sv: "Reflektion", ar: "انعكاس"),
  248. .init(key: "Regent", zhHans: "摄政", zhHant: "攝政", de: "Regent", fr: "Régent", sv: "Ställföreträdare", ar: "وصي"),
  249. .init(key: "Resonance", zhHans: "共鸣", zhHant: "共鳴", de: "Resonanz", fr: "Résonance", sv: "Resonans", ar: "صدى"),
  250. .init(key: "Rhythm", zhHans: "韵律", zhHant: "韻律", de: "Rhythmus", fr: "Rythme", sv: "Rytm", ar: "إيقاع"),
  251. .init(key: "Rise", zhHans: "崛起", zhHant: "崛起", de: "Aufstieg", fr: "Ascension", sv: "Uppgång", ar: "صعود"),
  252. .init(key: "River", zhHans: "河", zhHant: "河", de: "Fluss", fr: "Rivière", sv: "Flod", ar: "نهر"),
  253. .init(key: "Sculptor", zhHans: "雕刻", zhHant: "雕刻", de: "Bildhauer", fr: "Sculpteur", sv: "Bildhuggare", ar: "نحات"),
  254. .init(key: "Serene", zhHans: "宁静", zhHant: "寧靜", de: "Gelassen", fr: "Serein", sv: "Lugn", ar: "هادئ"),
  255. .init(key: "Serenity", zhHans: "宁静", zhHant: "寧靜", de: "Gelassenheit", fr: "Sérénité", sv: "Lugn", ar: "سكينة"),
  256. .init(key: "Shape", zhHans: "形态", zhHant: "形態", de: "Form", fr: "Forme", sv: "Form", ar: "شكل"),
  257. .init(key: "Sharp", zhHans: "锐利", zhHant: "銳利", de: "Scharf", fr: "Net", sv: "Skarp", ar: "حاد"),
  258. .init(key: "Shift", zhHans: "转换", zhHant: "轉換", de: "Wandel", fr: "Shift", sv: "Skift", ar: "تحول"),
  259. .init(key: "Signature", zhHans: "签名", zhHant: "簽名", de: "Signatur", fr: "Signature", sv: "Signatur", ar: "توقيع"),
  260. .init(key: "Silhouette", zhHans: "剪影", zhHant: "剪影", de: "Silhouette", fr: "Silhouette", sv: "Silhuett", ar: "silhouette"),
  261. .init(key: "Simplicity", zhHans: "简约", zhHant: "簡約", de: "Einfachheit", fr: "Simplicité", sv: "Enkelhet", ar: "بساطة"),
  262. .init(key: "Slate", zhHans: "石板", zhHant: "石板", de: "Schiefer", fr: "Ardoise", sv: "Skiffer", ar: "لوح"),
  263. .init(key: "Sleek", zhHans: "流畅", zhHant: "流暢", de: "Schlank", fr: "Élégant", sv: "Slank", ar: "أنيق"),
  264. .init(key: "Skyline", zhHans: "天际", zhHant: "天際", de: "Skyline", fr: "Horizon urbain", sv: "Silhuett", ar: "أفق"),
  265. .init(key: "Spark", zhHans: "火花", zhHant: "火花", de: "Funke", fr: "Étincelle", sv: "Gnista", ar: "شرارة"),
  266. .init(key: "Spectrum", zhHans: "光谱", zhHant: "光譜", de: "Spektrum", fr: "Spectre", sv: "Spektrum", ar: "طيف"),
  267. .init(key: "Spirit", zhHans: "精神", zhHant: "精神", de: "Geist", fr: "Esprit", sv: "Ande", ar: "روح"),
  268. .init(key: "Spotlight", zhHans: "聚光", zhHant: "聚光", de: "Rampenlicht", fr: "Projecteur", sv: "Rampljus", ar: "spotlight"),
  269. .init(key: "Sterling", zhHans: "纯正", zhHant: "純正", de: "Erstklassig", fr: "Excellence", sv: "Förstklassig", ar: "ممتاز"),
  270. .init(key: "Stone", zhHans: "石", zhHant: "石", de: "Stein", fr: "Pierre", sv: "Sten", ar: "حجر"),
  271. .init(key: "Story", zhHans: "故事", zhHant: "故事", de: "Story", fr: "Histoire", sv: "Berättelse", ar: "قصة"),
  272. .init(key: "Strategic", zhHans: "战略", zhHant: "戰略", de: "Strategisch", fr: "Stratégique", sv: "Strategisk", ar: "استراتيجي"),
  273. .init(key: "Stream", zhHans: "流线", zhHant: "流線", de: "Strom", fr: "Flux", sv: "Ström", ar: "تيار"),
  274. .init(key: "Structure", zhHans: "结构", zhHant: "結構", de: "Struktur", fr: "Structure", sv: "Struktur", ar: "هيكل"),
  275. .init(key: "Studio", zhHans: "工作室", zhHant: "工作室", de: "Atelier", fr: "Atelier", sv: "Ateljé", ar: "استوديو"),
  276. .init(key: "Style", zhHans: "风格", zhHant: "風格", de: "Stil", fr: "Style", sv: "Stil", ar: "أسلوب"),
  277. .init(key: "Styled", zhHans: "风格化", zhHant: "風格化", de: "Gestylt", fr: "Stylisé", sv: "Stylad", ar: "منسق"),
  278. .init(key: "Summit", zhHans: "顶峰", zhHant: "頂峰", de: "Gipfel", fr: "Sommet", sv: "Topp", ar: "قمة"),
  279. .init(key: "Surge", zhHans: "浪潮", zhHant: "浪潮", de: "Schub", fr: "Impulsion", sv: "Våg", ar: "موجة"),
  280. .init(key: "Swiss", zhHans: "瑞士", zhHant: "瑞士", de: "Schweizer", fr: "Suisse", sv: "Schweizisk", ar: "سويسري"),
  281. .init(key: "Swift", zhHans: "迅捷", zhHant: "迅捷", de: "Schnell", fr: "Rapide", sv: "Snabb", ar: "سريع"),
  282. .init(key: "Synergy", zhHans: "协同", zhHant: "協同", de: "Synergie", fr: "Synergie", sv: "Synergi", ar: "تآزر"),
  283. .init(key: "Tabular", zhHans: "表格", zhHant: "表格", de: "Tabellarisch", fr: "Tabulaire", sv: "Tabellformad", ar: "جدولي"),
  284. .init(key: "Tapestry", zhHans: "织锦", zhHant: "織錦", de: "Tapisserie", fr: "Tapisserie", sv: "Tapet", ar: "نسيج"),
  285. .init(key: "Tempo", zhHans: "节奏", zhHant: "節奏", de: "Tempo", fr: "Tempo", sv: "Tempo", ar: "إيقاع"),
  286. .init(key: "Tone", zhHans: "色调", zhHant: "色調", de: "Ton", fr: "Ton", sv: "Ton", ar: "نبرة"),
  287. .init(key: "Trail", zhHans: "轨迹", zhHant: "軌跡", de: "Pfad", fr: "Piste", sv: "Stig", ar: "مسار"),
  288. .init(key: "Triumph", zhHans: "凯旋", zhHant: "凱旋", de: "Triumph", fr: "Triomphe", sv: "Triumf", ar: "انتصار"),
  289. .init(key: "True", zhHans: "真实", zhHant: "真實", de: "Wahr", fr: "Vrai", sv: "Sann", ar: "حقيقي"),
  290. .init(key: "Trust", zhHans: "信任", zhHant: "信任", de: "Vertrauen", fr: "Confiance", sv: "Förtroende", ar: "ثقة"),
  291. .init(key: "UI", zhHans: "界面", zhHant: "介面", de: "UI", fr: "UI", sv: "UI", ar: "واجهة"),
  292. .init(key: "Unity", zhHans: "统一", zhHant: "統一", de: "Einheit", fr: "Unité", sv: "Enhet", ar: "وحدة"),
  293. .init(key: "Urban", zhHans: "都市", zhHant: "都市", de: "Urban", fr: "Urbain", sv: "Urban", ar: "حضري"),
  294. .init(key: "UX", zhHans: "体验", zhHant: "體驗", de: "UX", fr: "UX", sv: "UX", ar: "تجربة"),
  295. .init(key: "Vale", zhHans: "谷", zhHant: "谷", de: "Tal", fr: "Vallée", sv: "Dal", ar: "وadi"),
  296. .init(key: "Valor", zhHans: "勇气", zhHant: "勇氣", de: "Tapferkeit", fr: "Vaillance", sv: "Tapperhet", ar: "شجاعة"),
  297. .init(key: "Vault", zhHans: "宝库", zhHant: "寶庫", de: "Tresor", fr: "Coffre", sv: "Valv", ar: "خزنة"),
  298. .init(key: "Vector", zhHans: "向量", zhHant: "向量", de: "Vektor", fr: "Vecteur", sv: "Vektor", ar: "متجه"),
  299. .init(key: "Venture", zhHans: "创业", zhHant: "創業", de: "Unternehmung", fr: "Aventure", sv: "Satsning", ar: "مشروع"),
  300. .init(key: "Vertex", zhHans: "顶点", zhHant: "頂點", de: "Scheitelpunkt", fr: "Sommet", sv: "Toppunkt", ar: "رأس"),
  301. .init(key: "Vibe", zhHans: "氛围", zhHant: "氛圍", de: "Stimmung", fr: "Ambiance", sv: "Stämning", ar: "أجواء"),
  302. .init(key: "Vibrant", zhHans: "活力", zhHant: "活力", de: "Lebhaft", fr: "Vibrant", sv: "Livfull", ar: "حيوي"),
  303. .init(key: "Vision", zhHans: "愿景", zhHant: "願景", de: "Vision", fr: "Vision", sv: "Vision", ar: "رؤية"),
  304. .init(key: "Visionary", zhHans: "远见", zhHant: "遠見", de: "Visionär", fr: "Visionnaire", sv: "Visionär", ar: "رؤيوي"),
  305. .init(key: "Visual", zhHans: "视觉", zhHant: "視覺", de: "Visuell", fr: "Visuel", sv: "Visuell", ar: "بصري"),
  306. .init(key: "Vital", zhHans: "关键", zhHant: "關鍵", de: "Vital", fr: "Vital", sv: "Vital", ar: "حيوي"),
  307. .init(key: "Vivid", zhHans: "鲜明", zhHant: "鮮明", de: "Lebhaft", fr: "Vif", sv: "Livfull", ar: "حي"),
  308. .init(key: "Voice", zhHans: "声音", zhHant: "聲音", de: "Stimme", fr: "Voix", sv: "Röst", ar: "صوت"),
  309. .init(key: "Voyage", zhHans: "航程", zhHant: "航程", de: "Reise", fr: "Voyage", sv: "Resa", ar: "رحلة"),
  310. .init(key: "Wave", zhHans: "波浪", zhHant: "波浪", de: "Welle", fr: "Vague", sv: "Våg", ar: "موجة"),
  311. .init(key: "White", zhHans: "白", zhHant: "白", de: "Weiß", fr: "Blanc", sv: "Vit", ar: "أبيض"),
  312. .init(key: "Zen", zhHans: "禅", zhHant: "禪", de: "Zen", fr: "Zen", sv: "Zen", ar: "zen"),
  313. .init(key: "Zenith", zhHans: "天顶", zhHant: "天頂", de: "Zenit", fr: "Zénith", sv: "Zenit", ar: "ذروة"),
  314. .init(key: "Flux", zhHans: "流变", zhHant: "流變", de: "Fluss", fr: "Flux", sv: "Flöde", ar: "flux"),
  315. .init(key: "Flow", zhHans: "流动", zhHant: "流動", de: "Fluss", fr: "Flux", sv: "Flöde", ar: "flow")
  316. ]
  317. private func buildTable(_ keyPath: KeyPath<TemplateNameTokenRow, String>) -> [String: String] {
  318. Dictionary(uniqueKeysWithValues: templateNameTokenRows.map { ($0.key, $0[keyPath: keyPath]) })
  319. }