From 28be00ea53666fd5500a702a3c187c0e27dd90ad Mon Sep 17 00:00:00 2001
From: Ariver <shanghai3168@gmail.com>
Date: Sat, 27 Jun 2026 16:26:30 +0800
Subject: [PATCH] Simplify SmartStart default categories
---
src/Apptag/Localization/fr.json | 8
src/Apptag/Localization/ru.json | 8
src/Apptag/Localization/ar.json | 8
src/Apptag/Localization/ro.json | 8
src/Apptag/Localization/en.json | 8
src/Apptag/Localization/sv.json | 8
src/Apptag/SmartCategorization/SmartStartService.swift | 1
src/Apptag/Localization/zh-Hant.json | 8
src/Apptag/AppleDefaultAppCatalog.swift | 1
src/Apptag/Localization/pl.json | 6
src/Apptag/Localization/es.json | 8
src/Apptag/Localization/th.json | 8
src/Apptag/Localization/nn.json | 8
src/CHANGELOG.md | 8
src/Apptag/Info.plist | 4
src/Apptag/Localization/cs.json | 8
src/Apptag/Localization/ms.json | 8
src/Apptag/DataLayer.swift | 9
src/Apptag/Localization/it.json | 8
src/Apptag/Localization/tr.json | 8
src/Apptag/Localization/da.json | 8
src/Apptag/Localization/id.json | 8
src/Scripts/smartstart_default_categories_qa.sh | 211 +++++++++++++++
src/Apptag/Localization/ja.json | 8
src/Apptag/Localization/de.json | 8
src/Apptag/Localization/pt-BR.json | 8
CODEGRAPH.md | 4
src/Apptag/Localization/ar-Najdi.json | 8
src/Apptag/Localization/nb.json | 8
src/Apptag/SmartCategorization/SmartCategory.swift | 56 +--
src/Apptag/Localization/ko.json | 8
src/Apptag/Localization/no.json | 8
src/Apptag/Localization/sr-Cyrl.json | 8
src/Apptag/Localization/zh-Hans.json | 6
src/Docs/Requirements/2026-06-27-smartstart-category-simplification.md | 259 ++++++++++++++++++
src/Apptag/Localization/nl.json | 8
src/Apptag/Localization/uk.json | 8
src/Apptag/Localization/vi.json | 8
38 files changed, 629 insertions(+), 152 deletions(-)
diff --git a/CODEGRAPH.md b/CODEGRAPH.md
index 791e669..e8ede11 100644
--- a/CODEGRAPH.md
+++ b/CODEGRAPH.md
@@ -95,6 +95,8 @@
- `src/Apptag/SmartCategorization/SmartCategory.swift`
- 内置智能分类定义。
+ - `SmartCategoryDefaults.orderedIDs` 是 SmartStart 默认初始化标签事实源;当前默认方案为 15 个标签。
+ - `SmartCategoryID.smartStartDefaultCategoryID` 负责把旧细分 catalog 分类归并到 15 个默认标签;这是新 SmartStart 写入前的归并,不做老用户旧标签自动迁移。
- `src/Apptag/SmartCategorization/SmartCategorizationDraft.swift`
- 智能分类草稿、默认备注 provenance、未分配应用和 warning 模型。
- `src/Apptag/SmartCategorization/SmartStartService.swift`
@@ -145,6 +147,8 @@
- SmartStart catalog 资源检查。
- `src/Scripts/smart_category_localization_qa.sh`
- SmartCategory/default system tag 初始化标签 29 语种本地化检查;禁止非英文语言包直接复制英文标签,保留 `PDF`、`DevOps` 等技术通用词例外。
+- `src/Scripts/smartstart_default_categories_qa.sh`
+ - SmartStart 默认初始化标签检查;验证 15 个默认分类、catalog 分类归并入口、首次 starter tags 和关键多语言目标文案。
- `src/Scripts/quick_search_app_name_qa.sh`
- Quick Search 应用显示名回归。
- `src/Scripts/quick_search_system_app_qa.sh`
diff --git a/src/Apptag/AppleDefaultAppCatalog.swift b/src/Apptag/AppleDefaultAppCatalog.swift
index 66b884b..1a9f1ea 100644
--- a/src/Apptag/AppleDefaultAppCatalog.swift
+++ b/src/Apptag/AppleDefaultAppCatalog.swift
@@ -127,6 +127,7 @@
let categoryIDs = entry.defaultTag
.compactMap { SmartCategoryID(rawValue: $0) }
.filter { $0 != .other }
+ .map(\.smartStartDefaultCategoryID)
guard !categoryIDs.isEmpty else { return nil }
return AppleDefaultCategorization(
canonicalName: entry.canonicalName,
diff --git a/src/Apptag/DataLayer.swift b/src/Apptag/DataLayer.swift
index 6177fd6..1357d95 100644
--- a/src/Apptag/DataLayer.swift
+++ b/src/Apptag/DataLayer.swift
@@ -1755,12 +1755,11 @@
guard !FileManager.default.fileExists(atPath: storeURL.path) else { return }
let starterCategoryIDs: [SmartCategoryID] = [
- .uiPrototyping,
- .ide,
- .writing,
- .game,
+ .design,
+ .development,
+ .office,
.entertainment,
- .system,
+ .systemEnhancement,
.gtd
]
diff --git a/src/Apptag/Info.plist b/src/Apptag/Info.plist
index 8152059..33c96c9 100644
--- a/src/Apptag/Info.plist
+++ b/src/Apptag/Info.plist
@@ -19,9 +19,9 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
- <string>8.1.2</string>
+ <string>8.1.3</string>
<key>CFBundleVersion</key>
- <string>20260627.0106</string>
+ <string>20260627.1605</string>
<key>LSApplicationCategoryType</key>
<string>public.app-category.utilities</string>
<key>LSMinimumSystemVersion</key>
diff --git a/src/Apptag/Localization/ar-Najdi.json b/src/Apptag/Localization/ar-Najdi.json
index 4bb424c..d42ffa3 100644
--- a/src/Apptag/Localization/ar-Najdi.json
+++ b/src/Apptag/Localization/ar-Najdi.json
@@ -105,16 +105,16 @@
"smart.category.productivity": "الإنتاجية",
"smart.category.file-management": "إدارة الملفات",
"smart.category.transfer": "الرفع والتنزيل",
- "smart.category.development": "التطوير",
+ "smart.category.development": "البرمجة",
"smart.category.design": "التصميم",
"smart.category.writing": "الكتابة",
"smart.category.media": "الوسائط",
"smart.category.video": "الفيديو",
"smart.category.audio": "الصوت",
- "smart.category.picture-photo": "الصور والفوتوغرافيا",
+ "smart.category.picture-photo": "الصور",
"smart.category.utilities": "الأدوات",
"smart.category.system": "تطبيقات النظام",
- "smart.category.system-enhancement": "تحسينات النظام",
+ "smart.category.system-enhancement": "أدوات النظام",
"smart.category.entertainment": "الترفيه",
"smart.category.game": "الألعاب",
"smart.category.finance": "المالية",
@@ -190,7 +190,7 @@
"smart.category.GTD": "المهام وGTD",
"smart.category.Notes": "الملاحظات",
"smart.category.Meeting": "الاجتماعات",
- "smart.category.office": "المكتب",
+ "smart.category.office": "المكتب والمستندات",
"smart.category.PDF": "PDF",
"smart.category.api-tools": "أدوات API",
"smart.category.database-tools": "قواعد البيانات",
diff --git a/src/Apptag/Localization/ar.json b/src/Apptag/Localization/ar.json
index 3bd3052..a1012e0 100644
--- a/src/Apptag/Localization/ar.json
+++ b/src/Apptag/Localization/ar.json
@@ -105,16 +105,16 @@
"smart.category.productivity": "الإنتاجية",
"smart.category.file-management": "إدارة الملفات",
"smart.category.transfer": "الرفع والتنزيل",
- "smart.category.development": "التطوير",
+ "smart.category.development": "البرمجة",
"smart.category.design": "التصميم",
"smart.category.writing": "الكتابة",
"smart.category.media": "الوسائط",
"smart.category.video": "الفيديو",
"smart.category.audio": "الصوت",
- "smart.category.picture-photo": "الصور والفوتوغرافيا",
+ "smart.category.picture-photo": "الصور",
"smart.category.utilities": "الأدوات",
"smart.category.system": "تطبيقات النظام",
- "smart.category.system-enhancement": "تحسينات النظام",
+ "smart.category.system-enhancement": "أدوات النظام",
"smart.category.entertainment": "الترفيه",
"smart.category.game": "الألعاب",
"smart.category.finance": "المالية",
@@ -190,7 +190,7 @@
"smart.category.GTD": "المهام وGTD",
"smart.category.Notes": "الملاحظات",
"smart.category.Meeting": "الاجتماعات",
- "smart.category.office": "المكتب",
+ "smart.category.office": "المكتب والمستندات",
"smart.category.PDF": "PDF",
"smart.category.api-tools": "أدوات API",
"smart.category.database-tools": "قواعد البيانات",
diff --git a/src/Apptag/Localization/cs.json b/src/Apptag/Localization/cs.json
index 9593aee..3e7868f 100644
--- a/src/Apptag/Localization/cs.json
+++ b/src/Apptag/Localization/cs.json
@@ -105,16 +105,16 @@
"smart.category.productivity": "Produktivita",
"smart.category.file-management": "Správa souborů",
"smart.category.transfer": "Nahrávání a stahování",
- "smart.category.development": "Vývoj",
+ "smart.category.development": "Programování",
"smart.category.design": "Návrh",
"smart.category.writing": "Psaní",
"smart.category.media": "Média",
"smart.category.video": "Videa",
"smart.category.audio": "Zvuk",
- "smart.category.picture-photo": "Obrázky a fotografie",
+ "smart.category.picture-photo": "Fotky",
"smart.category.utilities": "Nástroje",
"smart.category.system": "Systémové aplikace",
- "smart.category.system-enhancement": "Vylepšení systému",
+ "smart.category.system-enhancement": "Systémové nástroje",
"smart.category.entertainment": "Zábava",
"smart.category.game": "Hry",
"smart.category.finance": "Peníze",
@@ -190,7 +190,7 @@
"smart.category.GTD": "Úkoly a GTD",
"smart.category.Notes": "Poznámky",
"smart.category.Meeting": "Schůzky",
- "smart.category.office": "Kancelář",
+ "smart.category.office": "Kancelář a dokumenty",
"smart.category.PDF": "PDF",
"smart.category.api-tools": "Nástroje API",
"smart.category.database-tools": "Databáze",
diff --git a/src/Apptag/Localization/da.json b/src/Apptag/Localization/da.json
index edd7934..8e4a9e8 100644
--- a/src/Apptag/Localization/da.json
+++ b/src/Apptag/Localization/da.json
@@ -105,16 +105,16 @@
"smart.category.productivity": "Produktivitet",
"smart.category.file-management": "Filhåndtering",
"smart.category.transfer": "Uploads og downloads",
- "smart.category.development": "Udvikling",
+ "smart.category.development": "Kodning",
"smart.category.design": "Formgivning",
"smart.category.writing": "Skrivning",
"smart.category.media": "Medier",
"smart.category.video": "Videoer",
"smart.category.audio": "Lyd",
- "smart.category.picture-photo": "Billeder og fotos",
+ "smart.category.picture-photo": "Fotos",
"smart.category.utilities": "Værktøjer",
"smart.category.system": "Systemapps",
- "smart.category.system-enhancement": "Systemforbedringer",
+ "smart.category.system-enhancement": "Systemværktøjer",
"smart.category.entertainment": "Underholdning",
"smart.category.game": "Spil",
"smart.category.finance": "Økonomi",
@@ -190,7 +190,7 @@
"smart.category.GTD": "Opgaver og GTD",
"smart.category.Notes": "Noter",
"smart.category.Meeting": "Møder",
- "smart.category.office": "Kontor",
+ "smart.category.office": "Kontor og dokumenter",
"smart.category.PDF": "PDF",
"smart.category.api-tools": "API-værktøjer",
"smart.category.database-tools": "Databaser",
diff --git a/src/Apptag/Localization/de.json b/src/Apptag/Localization/de.json
index 5d04e9a..f087d60 100644
--- a/src/Apptag/Localization/de.json
+++ b/src/Apptag/Localization/de.json
@@ -105,16 +105,16 @@
"smart.category.productivity": "Produktivität",
"smart.category.file-management": "Dateiverwaltung",
"smart.category.transfer": "Uploads und Downloads",
- "smart.category.development": "Entwicklung",
+ "smart.category.development": "Programmieren",
"smart.category.design": "Gestaltung",
"smart.category.writing": "Schreiben",
"smart.category.media": "Medien",
"smart.category.video": "Videos",
"smart.category.audio": "Ton",
- "smart.category.picture-photo": "Bilder und Fotos",
+ "smart.category.picture-photo": "Fotos",
"smart.category.utilities": "Dienstprogramme",
"smart.category.system": "System-Apps",
- "smart.category.system-enhancement": "Systemerweiterungen",
+ "smart.category.system-enhancement": "Systemwerkzeuge",
"smart.category.entertainment": "Unterhaltung",
"smart.category.game": "Spiele",
"smart.category.finance": "Finanzen",
@@ -190,7 +190,7 @@
"smart.category.GTD": "Aufgaben und GTD",
"smart.category.Notes": "Notizen",
"smart.category.Meeting": "Besprechungen",
- "smart.category.office": "Büro",
+ "smart.category.office": "Büro & Dokumente",
"smart.category.PDF": "PDF",
"smart.category.api-tools": "API-Tools",
"smart.category.database-tools": "Datenbanken",
diff --git a/src/Apptag/Localization/en.json b/src/Apptag/Localization/en.json
index bba7486..2921d09 100644
--- a/src/Apptag/Localization/en.json
+++ b/src/Apptag/Localization/en.json
@@ -105,16 +105,16 @@
"smart.category.productivity": "Productivity",
"smart.category.file-management": "File Management",
"smart.category.transfer": "Uploads & Downloads",
- "smart.category.development": "Development",
+ "smart.category.development": "Coding",
"smart.category.design": "Design",
"smart.category.writing": "Writing",
"smart.category.media": "Media",
"smart.category.video": "Video",
"smart.category.audio": "Audio",
- "smart.category.picture-photo": "Pictures & Photos",
+ "smart.category.picture-photo": "Photos",
"smart.category.utilities": "Utilities",
"smart.category.system": "System Apps",
- "smart.category.system-enhancement": "System Enhancements",
+ "smart.category.system-enhancement": "System Tools",
"smart.category.entertainment": "Entertainment",
"smart.category.game": "Games",
"smart.category.finance": "Finance",
@@ -190,7 +190,7 @@
"smart.category.GTD": "Tasks & GTD",
"smart.category.Notes": "Notes",
"smart.category.Meeting": "Meetings",
- "smart.category.office": "Office",
+ "smart.category.office": "Office & Docs",
"smart.category.PDF": "PDF",
"smart.category.api-tools": "API Tools",
"smart.category.database-tools": "Databases",
diff --git a/src/Apptag/Localization/es.json b/src/Apptag/Localization/es.json
index 9635fee..45d8aad 100644
--- a/src/Apptag/Localization/es.json
+++ b/src/Apptag/Localization/es.json
@@ -105,16 +105,16 @@
"smart.category.productivity": "Productividad",
"smart.category.file-management": "Gestión de archivos",
"smart.category.transfer": "Cargas y descargas",
- "smart.category.development": "Desarrollo",
+ "smart.category.development": "Programación",
"smart.category.design": "Diseño",
"smart.category.writing": "Escritura",
"smart.category.media": "Medios",
"smart.category.video": "Vídeo",
"smart.category.audio": "Sonido",
- "smart.category.picture-photo": "Imágenes y fotos",
+ "smart.category.picture-photo": "Fotos",
"smart.category.utilities": "Utilidades",
"smart.category.system": "Apps del sistema",
- "smart.category.system-enhancement": "Mejoras del sistema",
+ "smart.category.system-enhancement": "Herramientas del sistema",
"smart.category.entertainment": "Entretenimiento",
"smart.category.game": "Juegos",
"smart.category.finance": "Finanzas",
@@ -190,7 +190,7 @@
"smart.category.GTD": "Tareas y GTD",
"smart.category.Notes": "Notas",
"smart.category.Meeting": "Reuniones",
- "smart.category.office": "Oficina",
+ "smart.category.office": "Oficina y documentos",
"smart.category.PDF": "PDF",
"smart.category.api-tools": "Herramientas API",
"smart.category.database-tools": "Bases de datos",
diff --git a/src/Apptag/Localization/fr.json b/src/Apptag/Localization/fr.json
index de9a0a7..599fb7c 100644
--- a/src/Apptag/Localization/fr.json
+++ b/src/Apptag/Localization/fr.json
@@ -105,16 +105,16 @@
"smart.category.productivity": "Productivité",
"smart.category.file-management": "Gestion de fichiers",
"smart.category.transfer": "Envois et téléchargements",
- "smart.category.development": "Développement",
+ "smart.category.development": "Programmation",
"smart.category.design": "Conception",
"smart.category.writing": "Rédaction",
"smart.category.media": "Médias",
"smart.category.video": "Vidéo",
"smart.category.audio": "Son",
- "smart.category.picture-photo": "Images et photos",
+ "smart.category.picture-photo": "Images",
"smart.category.utilities": "Utilitaires",
"smart.category.system": "Apps système",
- "smart.category.system-enhancement": "Améliorations système",
+ "smart.category.system-enhancement": "Outils système",
"smart.category.entertainment": "Divertissement",
"smart.category.game": "Jeux",
"smart.category.finance": "Finances",
@@ -190,7 +190,7 @@
"smart.category.GTD": "Tâches et GTD",
"smart.category.Notes": "Prises de notes",
"smart.category.Meeting": "Réunions",
- "smart.category.office": "Bureau",
+ "smart.category.office": "Bureau et documents",
"smart.category.PDF": "PDF",
"smart.category.api-tools": "Outils API",
"smart.category.database-tools": "Bases de données",
diff --git a/src/Apptag/Localization/id.json b/src/Apptag/Localization/id.json
index 950bbc7..2add81c 100644
--- a/src/Apptag/Localization/id.json
+++ b/src/Apptag/Localization/id.json
@@ -105,16 +105,16 @@
"smart.category.productivity": "Produktivitas",
"smart.category.file-management": "Manajemen file",
"smart.category.transfer": "Unggahan dan unduhan",
- "smart.category.development": "Pengembangan",
+ "smart.category.development": "Pemrograman",
"smart.category.design": "Desain",
"smart.category.writing": "Penulisan",
"smart.category.media": "Media digital",
"smart.category.video": "Video digital",
"smart.category.audio": "Audio digital",
- "smart.category.picture-photo": "Gambar dan foto",
+ "smart.category.picture-photo": "Foto",
"smart.category.utilities": "Utilitas",
"smart.category.system": "Aplikasi sistem",
- "smart.category.system-enhancement": "Peningkatan sistem",
+ "smart.category.system-enhancement": "Alat sistem",
"smart.category.entertainment": "Hiburan",
"smart.category.game": "Game",
"smart.category.finance": "Keuangan",
@@ -190,7 +190,7 @@
"smart.category.GTD": "Tugas dan GTD",
"smart.category.Notes": "Catatan",
"smart.category.Meeting": "Rapat",
- "smart.category.office": "Kantor",
+ "smart.category.office": "Kantor & dokumen",
"smart.category.PDF": "PDF",
"smart.category.api-tools": "Alat API",
"smart.category.database-tools": "Basis data",
diff --git a/src/Apptag/Localization/it.json b/src/Apptag/Localization/it.json
index cb27fae..8c39924 100644
--- a/src/Apptag/Localization/it.json
+++ b/src/Apptag/Localization/it.json
@@ -105,16 +105,16 @@
"smart.category.productivity": "Produttività",
"smart.category.file-management": "Gestione file",
"smart.category.transfer": "Caricamenti e download",
- "smart.category.development": "Sviluppo",
+ "smart.category.development": "Programmazione",
"smart.category.design": "Progettazione",
"smart.category.writing": "Scrittura",
"smart.category.media": "Contenuti multimediali",
"smart.category.video": "Filmati",
"smart.category.audio": "Suono",
- "smart.category.picture-photo": "Immagini e foto",
+ "smart.category.picture-photo": "Foto",
"smart.category.utilities": "Utility",
"smart.category.system": "App di sistema",
- "smart.category.system-enhancement": "Miglioramenti di sistema",
+ "smart.category.system-enhancement": "Strumenti di sistema",
"smart.category.entertainment": "Intrattenimento",
"smart.category.game": "Giochi",
"smart.category.finance": "Finanza",
@@ -190,7 +190,7 @@
"smart.category.GTD": "Attività e GTD",
"smart.category.Notes": "Note",
"smart.category.Meeting": "Riunioni",
- "smart.category.office": "Ufficio",
+ "smart.category.office": "Ufficio e documenti",
"smart.category.PDF": "PDF",
"smart.category.api-tools": "Strumenti API",
"smart.category.database-tools": "Database",
diff --git a/src/Apptag/Localization/ja.json b/src/Apptag/Localization/ja.json
index e52078f..c5248ed 100644
--- a/src/Apptag/Localization/ja.json
+++ b/src/Apptag/Localization/ja.json
@@ -105,16 +105,16 @@
"smart.category.productivity": "生産性",
"smart.category.file-management": "ファイル管理",
"smart.category.transfer": "アップロードとダウンロード",
- "smart.category.development": "開発",
+ "smart.category.development": "コーディング",
"smart.category.design": "デザイン",
"smart.category.writing": "執筆",
"smart.category.media": "メディア",
"smart.category.video": "ビデオ",
"smart.category.audio": "オーディオ",
- "smart.category.picture-photo": "画像と写真",
+ "smart.category.picture-photo": "写真",
"smart.category.utilities": "ユーティリティ",
"smart.category.system": "システムアプリ",
- "smart.category.system-enhancement": "システム拡張",
+ "smart.category.system-enhancement": "システムツール",
"smart.category.entertainment": "エンターテインメント",
"smart.category.game": "ゲーム",
"smart.category.finance": "ファイナンス",
@@ -190,7 +190,7 @@
"smart.category.GTD": "タスクとGTD",
"smart.category.Notes": "メモ",
"smart.category.Meeting": "会議",
- "smart.category.office": "オフィス",
+ "smart.category.office": "オフィスと文書",
"smart.category.PDF": "PDF",
"smart.category.api-tools": "APIツール",
"smart.category.database-tools": "データベース",
diff --git a/src/Apptag/Localization/ko.json b/src/Apptag/Localization/ko.json
index 5b92d99..662ce02 100644
--- a/src/Apptag/Localization/ko.json
+++ b/src/Apptag/Localization/ko.json
@@ -105,16 +105,16 @@
"smart.category.productivity": "생산성",
"smart.category.file-management": "파일 관리",
"smart.category.transfer": "업로드 및 다운로드",
- "smart.category.development": "개발",
+ "smart.category.development": "코딩",
"smart.category.design": "디자인",
"smart.category.writing": "글쓰기",
"smart.category.media": "미디어",
"smart.category.video": "비디오",
"smart.category.audio": "오디오",
- "smart.category.picture-photo": "이미지와 사진",
+ "smart.category.picture-photo": "사진",
"smart.category.utilities": "유틸리티",
"smart.category.system": "시스템 앱",
- "smart.category.system-enhancement": "시스템 향상",
+ "smart.category.system-enhancement": "시스템 도구",
"smart.category.entertainment": "엔터테인먼트",
"smart.category.game": "게임",
"smart.category.finance": "금융",
@@ -190,7 +190,7 @@
"smart.category.GTD": "작업 및 GTD",
"smart.category.Notes": "메모",
"smart.category.Meeting": "회의",
- "smart.category.office": "오피스",
+ "smart.category.office": "오피스 및 문서",
"smart.category.PDF": "PDF",
"smart.category.api-tools": "API 도구",
"smart.category.database-tools": "데이터베이스",
diff --git a/src/Apptag/Localization/ms.json b/src/Apptag/Localization/ms.json
index 4d95c02..357d4a6 100644
--- a/src/Apptag/Localization/ms.json
+++ b/src/Apptag/Localization/ms.json
@@ -105,16 +105,16 @@
"smart.category.productivity": "Produktiviti",
"smart.category.file-management": "Pengurusan fail",
"smart.category.transfer": "Muat naik dan muat turun",
- "smart.category.development": "Pembangunan",
+ "smart.category.development": "Pengekodan",
"smart.category.design": "Reka bentuk",
"smart.category.writing": "Penulisan",
"smart.category.media": "Media digital",
"smart.category.video": "Video digital",
"smart.category.audio": "Audio digital",
- "smart.category.picture-photo": "Gambar dan foto",
+ "smart.category.picture-photo": "Foto",
"smart.category.utilities": "Utiliti",
"smart.category.system": "Aplikasi sistem",
- "smart.category.system-enhancement": "Peningkatan sistem",
+ "smart.category.system-enhancement": "Alat sistem",
"smart.category.entertainment": "Hiburan",
"smart.category.game": "Permainan",
"smart.category.finance": "Kewangan",
@@ -190,7 +190,7 @@
"smart.category.GTD": "Tugasan dan GTD",
"smart.category.Notes": "Nota",
"smart.category.Meeting": "Mesyuarat",
- "smart.category.office": "Pejabat",
+ "smart.category.office": "Pejabat & dokumen",
"smart.category.PDF": "PDF",
"smart.category.api-tools": "Alat API",
"smart.category.database-tools": "Pangkalan data",
diff --git a/src/Apptag/Localization/nb.json b/src/Apptag/Localization/nb.json
index 7276bf4..16b71ab 100644
--- a/src/Apptag/Localization/nb.json
+++ b/src/Apptag/Localization/nb.json
@@ -105,16 +105,16 @@
"smart.category.productivity": "Produktivitet",
"smart.category.file-management": "Filbehandling",
"smart.category.transfer": "Opplastinger og nedlastinger",
- "smart.category.development": "Utvikling",
+ "smart.category.development": "Koding",
"smart.category.design": "Utforming",
"smart.category.writing": "Skriving",
"smart.category.media": "Medier",
"smart.category.video": "Videoer",
"smart.category.audio": "Lyd",
- "smart.category.picture-photo": "Bilder og foto",
+ "smart.category.picture-photo": "Bilder",
"smart.category.utilities": "Verktøy",
"smart.category.system": "Systemapper",
- "smart.category.system-enhancement": "Systemforbedringer",
+ "smart.category.system-enhancement": "Systemverktøy",
"smart.category.entertainment": "Underholdning",
"smart.category.game": "Spill",
"smart.category.finance": "Økonomi",
@@ -190,7 +190,7 @@
"smart.category.GTD": "Oppgaver og GTD",
"smart.category.Notes": "Notater",
"smart.category.Meeting": "Møter",
- "smart.category.office": "Kontor",
+ "smart.category.office": "Kontor og dokumenter",
"smart.category.PDF": "PDF",
"smart.category.api-tools": "API-verktøy",
"smart.category.database-tools": "Databaser",
diff --git a/src/Apptag/Localization/nl.json b/src/Apptag/Localization/nl.json
index 3bfdbfa..a2ee3ce 100644
--- a/src/Apptag/Localization/nl.json
+++ b/src/Apptag/Localization/nl.json
@@ -105,16 +105,16 @@
"smart.category.productivity": "Productiviteit",
"smart.category.file-management": "Bestandsbeheer",
"smart.category.transfer": "Uploads en downloads",
- "smart.category.development": "Ontwikkeling",
+ "smart.category.development": "Programmeren",
"smart.category.design": "Ontwerp",
"smart.category.writing": "Schrijven",
"smart.category.media": "Mediabestanden",
"smart.category.video": "Videomateriaal",
"smart.category.audio": "Geluid",
- "smart.category.picture-photo": "Afbeeldingen en foto’s",
+ "smart.category.picture-photo": "Foto’s",
"smart.category.utilities": "Hulpprogramma’s",
"smart.category.system": "Systeemapps",
- "smart.category.system-enhancement": "Systeemverbeteringen",
+ "smart.category.system-enhancement": "Systeemtools",
"smart.category.entertainment": "Ontspanning",
"smart.category.game": "Spellen",
"smart.category.finance": "Financiën",
@@ -190,7 +190,7 @@
"smart.category.GTD": "Taken en GTD",
"smart.category.Notes": "Notities",
"smart.category.Meeting": "Vergaderingen",
- "smart.category.office": "Kantoor",
+ "smart.category.office": "Kantoor en documenten",
"smart.category.PDF": "PDF",
"smart.category.api-tools": "API-tools",
"smart.category.database-tools": "Databanken",
diff --git a/src/Apptag/Localization/nn.json b/src/Apptag/Localization/nn.json
index bb62912..51f9c04 100644
--- a/src/Apptag/Localization/nn.json
+++ b/src/Apptag/Localization/nn.json
@@ -105,16 +105,16 @@
"smart.category.productivity": "Produktivitet",
"smart.category.file-management": "Filhandsaming",
"smart.category.transfer": "Opplastingar og nedlastingar",
- "smart.category.development": "Utvikling",
+ "smart.category.development": "Koding",
"smart.category.design": "Utforming",
"smart.category.writing": "Skriving",
"smart.category.media": "Medium",
"smart.category.video": "Videoar",
"smart.category.audio": "Lyd",
- "smart.category.picture-photo": "Bilete og foto",
+ "smart.category.picture-photo": "Foto",
"smart.category.utilities": "Verktøy",
"smart.category.system": "Systemappar",
- "smart.category.system-enhancement": "Systemforbetringar",
+ "smart.category.system-enhancement": "Systemverktøy",
"smart.category.entertainment": "Underhaldning",
"smart.category.game": "Spel",
"smart.category.finance": "Økonomi",
@@ -190,7 +190,7 @@
"smart.category.GTD": "Oppgåver og GTD",
"smart.category.Notes": "Notat",
"smart.category.Meeting": "Møte",
- "smart.category.office": "Kontor",
+ "smart.category.office": "Kontor og dokument",
"smart.category.PDF": "PDF",
"smart.category.api-tools": "API-verktøy",
"smart.category.database-tools": "Databasar",
diff --git a/src/Apptag/Localization/no.json b/src/Apptag/Localization/no.json
index 7276bf4..16b71ab 100644
--- a/src/Apptag/Localization/no.json
+++ b/src/Apptag/Localization/no.json
@@ -105,16 +105,16 @@
"smart.category.productivity": "Produktivitet",
"smart.category.file-management": "Filbehandling",
"smart.category.transfer": "Opplastinger og nedlastinger",
- "smart.category.development": "Utvikling",
+ "smart.category.development": "Koding",
"smart.category.design": "Utforming",
"smart.category.writing": "Skriving",
"smart.category.media": "Medier",
"smart.category.video": "Videoer",
"smart.category.audio": "Lyd",
- "smart.category.picture-photo": "Bilder og foto",
+ "smart.category.picture-photo": "Bilder",
"smart.category.utilities": "Verktøy",
"smart.category.system": "Systemapper",
- "smart.category.system-enhancement": "Systemforbedringer",
+ "smart.category.system-enhancement": "Systemverktøy",
"smart.category.entertainment": "Underholdning",
"smart.category.game": "Spill",
"smart.category.finance": "Økonomi",
@@ -190,7 +190,7 @@
"smart.category.GTD": "Oppgaver og GTD",
"smart.category.Notes": "Notater",
"smart.category.Meeting": "Møter",
- "smart.category.office": "Kontor",
+ "smart.category.office": "Kontor og dokumenter",
"smart.category.PDF": "PDF",
"smart.category.api-tools": "API-verktøy",
"smart.category.database-tools": "Databaser",
diff --git a/src/Apptag/Localization/pl.json b/src/Apptag/Localization/pl.json
index 544ce9e..b61b7f3 100644
--- a/src/Apptag/Localization/pl.json
+++ b/src/Apptag/Localization/pl.json
@@ -111,10 +111,10 @@
"smart.category.media": "Multimedia",
"smart.category.video": "Wideo",
"smart.category.audio": "Dźwięk",
- "smart.category.picture-photo": "Obrazy i zdjęcia",
+ "smart.category.picture-photo": "Zdjęcia",
"smart.category.utilities": "Narzędzia",
"smart.category.system": "Aplikacje systemowe",
- "smart.category.system-enhancement": "Ulepszenia systemu",
+ "smart.category.system-enhancement": "Narzędzia systemowe",
"smart.category.entertainment": "Rozrywka",
"smart.category.game": "Gry",
"smart.category.finance": "Finanse",
@@ -190,7 +190,7 @@
"smart.category.GTD": "Zadania i GTD",
"smart.category.Notes": "Notatki",
"smart.category.Meeting": "Spotkania",
- "smart.category.office": "Biuro",
+ "smart.category.office": "Biuro i dokumenty",
"smart.category.PDF": "PDF",
"smart.category.api-tools": "Narzędzia API",
"smart.category.database-tools": "Bazy danych",
diff --git a/src/Apptag/Localization/pt-BR.json b/src/Apptag/Localization/pt-BR.json
index 7b46e9e..3a17fd9 100644
--- a/src/Apptag/Localization/pt-BR.json
+++ b/src/Apptag/Localization/pt-BR.json
@@ -105,16 +105,16 @@
"smart.category.productivity": "Produtividade",
"smart.category.file-management": "Gerenciamento de arquivos",
"smart.category.transfer": "Uploads e downloads",
- "smart.category.development": "Desenvolvimento",
+ "smart.category.development": "Programação",
"smart.category.design": "Projeto",
"smart.category.writing": "Escrita",
"smart.category.media": "Mídia",
"smart.category.video": "Vídeo",
"smart.category.audio": "Áudio",
- "smart.category.picture-photo": "Imagens e fotos",
+ "smart.category.picture-photo": "Fotos",
"smart.category.utilities": "Utilitários",
"smart.category.system": "Apps do sistema",
- "smart.category.system-enhancement": "Aprimoramentos do sistema",
+ "smart.category.system-enhancement": "Ferramentas do sistema",
"smart.category.entertainment": "Entretenimento",
"smart.category.game": "Jogos",
"smart.category.finance": "Finanças",
@@ -190,7 +190,7 @@
"smart.category.GTD": "Tarefas e GTD",
"smart.category.Notes": "Notas",
"smart.category.Meeting": "Reuniões",
- "smart.category.office": "Escritório",
+ "smart.category.office": "Escritório e documentos",
"smart.category.PDF": "PDF",
"smart.category.api-tools": "Ferramentas API",
"smart.category.database-tools": "Bancos de dados",
diff --git a/src/Apptag/Localization/ro.json b/src/Apptag/Localization/ro.json
index 8509fd6..f5f70e7 100644
--- a/src/Apptag/Localization/ro.json
+++ b/src/Apptag/Localization/ro.json
@@ -105,16 +105,16 @@
"smart.category.productivity": "Productivitate",
"smart.category.file-management": "Gestionarea fișierelor",
"smart.category.transfer": "Încărcări și descărcări",
- "smart.category.development": "Dezvoltare",
+ "smart.category.development": "Programare",
"smart.category.design": "Proiectare",
"smart.category.writing": "Scriere",
"smart.category.media": "Conținut media",
"smart.category.video": "Videoclipuri",
"smart.category.audio": "Sunet",
- "smart.category.picture-photo": "Imagini și fotografii",
+ "smart.category.picture-photo": "Fotografii",
"smart.category.utilities": "Utilitare",
"smart.category.system": "Aplicații de sistem",
- "smart.category.system-enhancement": "Îmbunătățiri de sistem",
+ "smart.category.system-enhancement": "Instrumente de sistem",
"smart.category.entertainment": "Divertisment",
"smart.category.game": "Jocuri",
"smart.category.finance": "Finanțe",
@@ -190,7 +190,7 @@
"smart.category.GTD": "Sarcini și GTD",
"smart.category.Notes": "Note",
"smart.category.Meeting": "Întâlniri",
- "smart.category.office": "Birou",
+ "smart.category.office": "Birou și documente",
"smart.category.PDF": "PDF",
"smart.category.api-tools": "Instrumente API",
"smart.category.database-tools": "Baze de date",
diff --git a/src/Apptag/Localization/ru.json b/src/Apptag/Localization/ru.json
index ddc4598..0238ffe 100644
--- a/src/Apptag/Localization/ru.json
+++ b/src/Apptag/Localization/ru.json
@@ -105,16 +105,16 @@
"smart.category.productivity": "Продуктивность",
"smart.category.file-management": "Управление файлами",
"smart.category.transfer": "Загрузки и выгрузки",
- "smart.category.development": "Разработка",
+ "smart.category.development": "Программирование",
"smart.category.design": "Дизайн",
"smart.category.writing": "Письмо",
"smart.category.media": "Медиа",
"smart.category.video": "Видео",
"smart.category.audio": "Аудио",
- "smart.category.picture-photo": "Изображения и фото",
+ "smart.category.picture-photo": "Фото",
"smart.category.utilities": "Утилиты",
"smart.category.system": "Системные приложения",
- "smart.category.system-enhancement": "Улучшения системы",
+ "smart.category.system-enhancement": "Системные инструменты",
"smart.category.entertainment": "Развлечения",
"smart.category.game": "Игры",
"smart.category.finance": "Финансы",
@@ -190,7 +190,7 @@
"smart.category.GTD": "Задачи и GTD",
"smart.category.Notes": "Заметки",
"smart.category.Meeting": "Встречи",
- "smart.category.office": "Офис",
+ "smart.category.office": "Офис и документы",
"smart.category.PDF": "PDF",
"smart.category.api-tools": "Инструменты API",
"smart.category.database-tools": "Базы данных",
diff --git a/src/Apptag/Localization/sr-Cyrl.json b/src/Apptag/Localization/sr-Cyrl.json
index ee023c3..af1ca34 100644
--- a/src/Apptag/Localization/sr-Cyrl.json
+++ b/src/Apptag/Localization/sr-Cyrl.json
@@ -105,16 +105,16 @@
"smart.category.productivity": "Продуктивност",
"smart.category.file-management": "Управљање датотекама",
"smart.category.transfer": "Отпремања и преузимања",
- "smart.category.development": "Развој",
+ "smart.category.development": "Програмирање",
"smart.category.design": "Дизајн",
"smart.category.writing": "Писање",
"smart.category.media": "Медији",
"smart.category.video": "Видео",
"smart.category.audio": "Аудио",
- "smart.category.picture-photo": "Слике и фотографије",
+ "smart.category.picture-photo": "Фотографије",
"smart.category.utilities": "Алатке",
"smart.category.system": "Системске апликације",
- "smart.category.system-enhancement": "Побољшања система",
+ "smart.category.system-enhancement": "Системски алати",
"smart.category.entertainment": "Забава",
"smart.category.game": "Игре",
"smart.category.finance": "Финансије",
@@ -190,7 +190,7 @@
"smart.category.GTD": "Задаци и GTD",
"smart.category.Notes": "Белешке",
"smart.category.Meeting": "Састанци",
- "smart.category.office": "Канцеларија",
+ "smart.category.office": "Канцеларија и документи",
"smart.category.PDF": "PDF",
"smart.category.api-tools": "API алатке",
"smart.category.database-tools": "Базе података",
diff --git a/src/Apptag/Localization/sv.json b/src/Apptag/Localization/sv.json
index ca1ea1d..48e3b51 100644
--- a/src/Apptag/Localization/sv.json
+++ b/src/Apptag/Localization/sv.json
@@ -105,16 +105,16 @@
"smart.category.productivity": "Produktivitet",
"smart.category.file-management": "Filhantering",
"smart.category.transfer": "Uppladdningar och nedladdningar",
- "smart.category.development": "Utveckling",
+ "smart.category.development": "Kodning",
"smart.category.design": "Formgivning",
"smart.category.writing": "Skrivande",
"smart.category.media": "Medier",
"smart.category.video": "Videor",
"smart.category.audio": "Ljud",
- "smart.category.picture-photo": "Bilder och foton",
+ "smart.category.picture-photo": "Foton",
"smart.category.utilities": "Verktyg",
"smart.category.system": "Systemappar",
- "smart.category.system-enhancement": "Systemförbättringar",
+ "smart.category.system-enhancement": "Systemverktyg",
"smart.category.entertainment": "Underhållning",
"smart.category.game": "Spel",
"smart.category.finance": "Ekonomi",
@@ -190,7 +190,7 @@
"smart.category.GTD": "Uppgifter och GTD",
"smart.category.Notes": "Anteckningar",
"smart.category.Meeting": "Möten",
- "smart.category.office": "Kontor",
+ "smart.category.office": "Kontor och dokument",
"smart.category.PDF": "PDF",
"smart.category.api-tools": "API-verktyg",
"smart.category.database-tools": "Databaser",
diff --git a/src/Apptag/Localization/th.json b/src/Apptag/Localization/th.json
index ef7e228..bdb104f 100644
--- a/src/Apptag/Localization/th.json
+++ b/src/Apptag/Localization/th.json
@@ -105,16 +105,16 @@
"smart.category.productivity": "ประสิทธิภาพงาน",
"smart.category.file-management": "จัดการไฟล์",
"smart.category.transfer": "อัปโหลดและดาวน์โหลด",
- "smart.category.development": "การพัฒนา",
+ "smart.category.development": "การเขียนโค้ด",
"smart.category.design": "การออกแบบ",
"smart.category.writing": "การเขียน",
"smart.category.media": "สื่อ",
"smart.category.video": "วิดีโอ",
"smart.category.audio": "เสียง",
- "smart.category.picture-photo": "รูปภาพและภาพถ่าย",
+ "smart.category.picture-photo": "รูปภาพ",
"smart.category.utilities": "ยูทิลิตี้",
"smart.category.system": "แอประบบ",
- "smart.category.system-enhancement": "ปรับปรุงระบบ",
+ "smart.category.system-enhancement": "เครื่องมือระบบ",
"smart.category.entertainment": "ความบันเทิง",
"smart.category.game": "เกม",
"smart.category.finance": "การเงิน",
@@ -190,7 +190,7 @@
"smart.category.GTD": "งานและ GTD",
"smart.category.Notes": "โน้ต",
"smart.category.Meeting": "การประชุม",
- "smart.category.office": "สำนักงาน",
+ "smart.category.office": "สำนักงานและเอกสาร",
"smart.category.PDF": "PDF",
"smart.category.api-tools": "เครื่องมือ API",
"smart.category.database-tools": "ฐานข้อมูล",
diff --git a/src/Apptag/Localization/tr.json b/src/Apptag/Localization/tr.json
index 6dc43e8..aa1d40f 100644
--- a/src/Apptag/Localization/tr.json
+++ b/src/Apptag/Localization/tr.json
@@ -105,16 +105,16 @@
"smart.category.productivity": "Verimlilik",
"smart.category.file-management": "Dosya yönetimi",
"smart.category.transfer": "Yüklemeler ve indirmeler",
- "smart.category.development": "Geliştirme",
+ "smart.category.development": "Kodlama",
"smart.category.design": "Tasarım",
"smart.category.writing": "Yazma",
"smart.category.media": "Medya",
"smart.category.video": "Videolar",
"smart.category.audio": "Ses",
- "smart.category.picture-photo": "Resimler ve fotoğraflar",
+ "smart.category.picture-photo": "Fotoğraflar",
"smart.category.utilities": "Yardımcı araçlar",
"smart.category.system": "Sistem uygulamaları",
- "smart.category.system-enhancement": "Sistem iyileştirmeleri",
+ "smart.category.system-enhancement": "Sistem araçları",
"smart.category.entertainment": "Eğlence",
"smart.category.game": "Oyunlar",
"smart.category.finance": "Finans",
@@ -190,7 +190,7 @@
"smart.category.GTD": "Görevler ve GTD",
"smart.category.Notes": "Notlar",
"smart.category.Meeting": "Toplantılar",
- "smart.category.office": "Ofis",
+ "smart.category.office": "Ofis ve belgeler",
"smart.category.PDF": "PDF",
"smart.category.api-tools": "API araçları",
"smart.category.database-tools": "Veritabanları",
diff --git a/src/Apptag/Localization/uk.json b/src/Apptag/Localization/uk.json
index 9169ccb..7fd913b 100644
--- a/src/Apptag/Localization/uk.json
+++ b/src/Apptag/Localization/uk.json
@@ -105,16 +105,16 @@
"smart.category.productivity": "Продуктивність",
"smart.category.file-management": "Керування файлами",
"smart.category.transfer": "Вивантаження і завантаження",
- "smart.category.development": "Розробка",
+ "smart.category.development": "Програмування",
"smart.category.design": "Дизайн",
"smart.category.writing": "Письмо",
"smart.category.media": "Медіа",
"smart.category.video": "Відео",
"smart.category.audio": "Аудіо",
- "smart.category.picture-photo": "Зображення і фото",
+ "smart.category.picture-photo": "Фото",
"smart.category.utilities": "Утиліти",
"smart.category.system": "Системні програми",
- "smart.category.system-enhancement": "Покращення системи",
+ "smart.category.system-enhancement": "Системні інструменти",
"smart.category.entertainment": "Розваги",
"smart.category.game": "Ігри",
"smart.category.finance": "Фінанси",
@@ -190,7 +190,7 @@
"smart.category.GTD": "Завдання і GTD",
"smart.category.Notes": "Нотатки",
"smart.category.Meeting": "Зустрічі",
- "smart.category.office": "Офіс",
+ "smart.category.office": "Офіс і документи",
"smart.category.PDF": "PDF",
"smart.category.api-tools": "Інструменти API",
"smart.category.database-tools": "Бази даних",
diff --git a/src/Apptag/Localization/vi.json b/src/Apptag/Localization/vi.json
index 37a643c..c9a3da7 100644
--- a/src/Apptag/Localization/vi.json
+++ b/src/Apptag/Localization/vi.json
@@ -105,16 +105,16 @@
"smart.category.productivity": "Năng suất",
"smart.category.file-management": "Quản lý tệp",
"smart.category.transfer": "Tải lên và tải xuống",
- "smart.category.development": "Phát triển",
+ "smart.category.development": "Lập trình",
"smart.category.design": "Thiết kế",
"smart.category.writing": "Viết",
"smart.category.media": "Phương tiện",
"smart.category.video": "Video clip",
"smart.category.audio": "Âm thanh",
- "smart.category.picture-photo": "Ảnh và hình ảnh",
+ "smart.category.picture-photo": "Ảnh",
"smart.category.utilities": "Tiện ích",
"smart.category.system": "Ứng dụng hệ thống",
- "smart.category.system-enhancement": "Cải tiến hệ thống",
+ "smart.category.system-enhancement": "Công cụ hệ thống",
"smart.category.entertainment": "Giải trí",
"smart.category.game": "Trò chơi",
"smart.category.finance": "Tài chính",
@@ -190,7 +190,7 @@
"smart.category.GTD": "Công việc và GTD",
"smart.category.Notes": "Ghi chú",
"smart.category.Meeting": "Cuộc họp",
- "smart.category.office": "Văn phòng",
+ "smart.category.office": "Văn phòng & tài liệu",
"smart.category.PDF": "PDF",
"smart.category.api-tools": "Công cụ API",
"smart.category.database-tools": "Cơ sở dữ liệu",
diff --git a/src/Apptag/Localization/zh-Hans.json b/src/Apptag/Localization/zh-Hans.json
index 94b0c07..fd1ca3b 100644
--- a/src/Apptag/Localization/zh-Hans.json
+++ b/src/Apptag/Localization/zh-Hans.json
@@ -111,10 +111,10 @@
"smart.category.media": "媒体",
"smart.category.video": "视频",
"smart.category.audio": "音频",
- "smart.category.picture-photo": "图片与照片",
+ "smart.category.picture-photo": "图片",
"smart.category.utilities": "工具",
"smart.category.system": "系统应用",
- "smart.category.system-enhancement": "系统能力强化",
+ "smart.category.system-enhancement": "系统工具",
"smart.category.entertainment": "影音娱乐",
"smart.category.game": "游戏",
"smart.category.finance": "财务",
@@ -190,7 +190,7 @@
"smart.category.GTD": "任务与 GTD",
"smart.category.Notes": "笔记",
"smart.category.Meeting": "会议",
- "smart.category.office": "办公",
+ "smart.category.office": "办公文档",
"smart.category.PDF": "PDF",
"smart.category.api-tools": "API 工具",
"smart.category.database-tools": "数据库",
diff --git a/src/Apptag/Localization/zh-Hant.json b/src/Apptag/Localization/zh-Hant.json
index 892f5c0..7eff870 100644
--- a/src/Apptag/Localization/zh-Hant.json
+++ b/src/Apptag/Localization/zh-Hant.json
@@ -105,16 +105,16 @@
"smart.category.productivity": "辦公",
"smart.category.file-management": "檔案管理",
"smart.category.transfer": "上傳與下載",
- "smart.category.development": "程式開發",
+ "smart.category.development": "程式編寫",
"smart.category.design": "設計",
"smart.category.writing": "寫作",
"smart.category.media": "媒體",
"smart.category.video": "影片",
"smart.category.audio": "音訊",
- "smart.category.picture-photo": "圖片與照片",
+ "smart.category.picture-photo": "圖片",
"smart.category.utilities": "工具",
"smart.category.system": "系統應用",
- "smart.category.system-enhancement": "系統能力強化",
+ "smart.category.system-enhancement": "系統工具",
"smart.category.entertainment": "影音娛樂",
"smart.category.game": "遊戲",
"smart.category.finance": "財務",
@@ -190,7 +190,7 @@
"smart.category.GTD": "任務與 GTD",
"smart.category.Notes": "筆記",
"smart.category.Meeting": "會議",
- "smart.category.office": "辦公",
+ "smart.category.office": "辦公文件",
"smart.category.PDF": "PDF",
"smart.category.api-tools": "API 工具",
"smart.category.database-tools": "資料庫",
diff --git a/src/Apptag/SmartCategorization/SmartCategory.swift b/src/Apptag/SmartCategorization/SmartCategory.swift
index b1b7093..dac8b71 100644
--- a/src/Apptag/SmartCategorization/SmartCategory.swift
+++ b/src/Apptag/SmartCategorization/SmartCategory.swift
@@ -66,7 +66,7 @@
case .meeting:
return "Meetings"
case .office:
- return "Office"
+ return "Office & Docs"
case .pdf:
return "PDF"
case .fileManagement:
@@ -76,7 +76,7 @@
case .productivity:
return "Productivity"
case .development:
- return "Development"
+ return "Coding"
case .design:
return "Design"
case .aiTools:
@@ -110,13 +110,13 @@
case .audio:
return "Audio"
case .picturePhoto:
- return "Pictures & Photos"
+ return "Photos"
case .utilities:
return "Utilities"
case .system:
return "System Apps"
case .systemEnhancement:
- return "System Enhancements"
+ return "System Tools"
case .systemMaintenance:
return "System Maintenance"
case .windowManagement:
@@ -248,6 +248,24 @@
return 0
}
}
+
+ var smartStartDefaultCategoryID: SmartCategoryID {
+ switch self {
+ case .pdf, .productivity, .writing:
+ return .office
+ case .fileManagement, .transfer, .utilities, .system, .systemMaintenance,
+ .windowManagement, .deviceManagement, .inputTools, .networkTools, .security:
+ return .systemEnhancement
+ case .apiTools, .databaseTools, .devops, .ide, .runtimeSDK, .terminalTools, .automation:
+ return .development
+ case .font, .uiPrototyping, .threeDCAD, .diagramming:
+ return .design
+ case .media, .video, .audio, .game:
+ return .entertainment
+ default:
+ return self
+ }
+ }
}
struct SmartCategoryDefinition: Codable, Hashable, Identifiable {
@@ -277,38 +295,14 @@
.notes,
.meeting,
.office,
- .pdf,
- .fileManagement,
- .transfer,
+ .systemEnhancement,
.aiTools,
- .apiTools,
- .databaseTools,
- .devops,
- .ide,
- .runtimeSDK,
- .terminalTools,
- .font,
- .uiPrototyping,
- .threeDCAD,
- .diagramming,
- .writing,
- .media,
- .video,
- .audio,
+ .development,
+ .design,
.picturePhoto,
- .utilities,
- .system,
- .systemMaintenance,
- .windowManagement,
- .deviceManagement,
- .inputTools,
- .automation,
- .networkTools,
.entertainment,
- .game,
.finance,
.education,
- .security,
.other
]
diff --git a/src/Apptag/SmartCategorization/SmartStartService.swift b/src/Apptag/SmartCategorization/SmartStartService.swift
index d377f99..c1451d4 100644
--- a/src/Apptag/SmartCategorization/SmartStartService.swift
+++ b/src/Apptag/SmartCategorization/SmartStartService.swift
@@ -529,6 +529,7 @@
let tagIDs = entry.defaultTag
.compactMap { SmartCategoryID(rawValue: $0) }
.filter { $0 != .other }
+ .map(\.smartStartDefaultCategoryID)
guard !tagIDs.isEmpty else { return nil }
return SmartStartCatalogEntry(
diff --git a/src/CHANGELOG.md b/src/CHANGELOG.md
index 5831d95..3571b68 100644
--- a/src/CHANGELOG.md
+++ b/src/CHANGELOG.md
@@ -2,6 +2,14 @@
## [Unreleased]
+## [8.1.3] — 2026-06-27
+
+- 精简 SmartStart 智能初始化默认分类:新用户 / 重置智能初始化方案后的默认标签从 39 个收敛为 15 个,降低初次使用时的分类冗余
+- 合并细分分类:`Office / PDF / Writing` 归入 `Office & Docs`,系统工具相关分类归入 `System Tools`,开发相关分类归入 `Coding`,设计相关分类归入 `Design`,`Video / Audio / Games` 归入 `Entertainment`
+- SmartStart 第三方应用 catalog 和 Apple 自带应用 catalog 在写入前统一归并到 15 个默认标签;已有用户的旧标签保持原样,本轮不做老用户旧 39 标签自动迁移
+- 更新 29 个语种中 15 默认分类的关键目标文案,并新增 `Scripts/smartstart_default_categories_qa.sh`,防止默认分类数量、归并入口和首次 starter tags 回退
+- 版本号更新为 `8.1.3`,Build 更新为 `20260627.1605`
+
## [8.1.2] — 2026-06-27
- 优化样式 2 / 样式 3 的底部特殊容器排版:`未分类`和`Mac 自带`都固定在瀑布流底部并横向占满,`未分类`倒数第二、`Mac 自带`最后显示
diff --git a/src/Docs/Requirements/2026-06-27-smartstart-category-simplification.md b/src/Docs/Requirements/2026-06-27-smartstart-category-simplification.md
new file mode 100644
index 0000000..c7208b2
--- /dev/null
+++ b/src/Docs/Requirements/2026-06-27-smartstart-category-simplification.md
@@ -0,0 +1,259 @@
+# SmartStart 智能初始化默认标签精简方案
+
+日期:2026-06-27
+
+状态:产品已确认 `network-tools` 归入 `System Tools / 系统工具`;确认 `system-tools` 的用户可见名称采用 `System Tools / 系统工具`;确认 `office`、`PDF`、`writing` 合并为 `Office & Docs / 办公文档`;确认 `Video / Audio / Games` 合并进 `Entertainment / 影音娱乐`,最终默认智能分类为 15 个。
+
+## 1. 本轮目标
+
+用户反馈当前智能初始化使用 39 个默认标签,过于冗余。本方案把默认标签精简为 15 个,并明确合并关系、最终标签列表与后续落地注意事项。
+
+## 2. 当前 39 个初始化标签
+
+来源:`src/Apptag/SmartCategorization/SmartCategory.swift` 中 `SmartCategoryDefaults.orderedIDs`。
+
+| 序号 | category id | 英文默认名 | 简体中文 |
+|---:|---|---|---|
+| 1 | `browser` | Browsers | 浏览器 |
+| 2 | `communication` | Communication | 沟通 |
+| 3 | `GTD` | Tasks & GTD | 任务与 GTD |
+| 4 | `Notes` | Notes | 笔记 |
+| 5 | `Meeting` | Meetings | 会议 |
+| 6 | `office` | Office | 办公 |
+| 7 | `PDF` | PDF | PDF |
+| 8 | `file-management` | File Management | 文件管理 |
+| 9 | `transfer` | Uploads & Downloads | 上传与下载 |
+| 10 | `ai-tools` | AI Tools | AI 工具 |
+| 11 | `api-tools` | API Tools | API 工具 |
+| 12 | `database-tools` | Databases | 数据库 |
+| 13 | `devops` | DevOps | DevOps |
+| 14 | `ide` | IDEs | IDE |
+| 15 | `runtime-sdk` | Runtimes & SDKs | 运行时与 SDK |
+| 16 | `terminal-tools` | Terminal Tools | 终端工具 |
+| 17 | `Font` | Fonts | 字体 |
+| 18 | `ui-prototyping` | UI Prototyping | UI 原型 |
+| 19 | `3d-cad` | 3D & CAD | 3D 与 CAD |
+| 20 | `diagramming` | Diagramming | 图表绘制 |
+| 21 | `writing` | Writing | 写作 |
+| 22 | `media` | Media | 媒体 |
+| 23 | `video` | Video | 视频 |
+| 24 | `audio` | Audio | 音频 |
+| 25 | `picture-photo` | Pictures & Photos | 图片与照片 |
+| 26 | `utilities` | Utilities | 工具 |
+| 27 | `system` | System Apps | 系统应用 |
+| 28 | `system-maintenance` | System Maintenance | 系统维护 |
+| 29 | `window-management` | Window Management | 窗口管理 |
+| 30 | `device-management` | Device Management | 设备管理 |
+| 31 | `input-tools` | Input Tools | 输入工具 |
+| 32 | `Automation` | Automation | 自动化 |
+| 33 | `network-tools` | Network Tools | 网络工具 |
+| 34 | `entertainment` | Entertainment | 影音娱乐 |
+| 35 | `game` | Games | 游戏 |
+| 36 | `finance` | Finance | 财务 |
+| 37 | `education` | Education | 学习 |
+| 38 | `security` | Security | 安全 |
+| 39 | `other` | Other | 其他 |
+
+## 3. 已确认的合并规则
+
+### 改动 1:合并为 Coding / 编程
+
+11、12、13、14、15、16、32 合并成 `Coding / 编程`。
+
+涉及:
+
+- API 工具
+- 数据库
+- DevOps
+- IDE
+- 运行时与 SDK
+- 终端工具
+- 自动化
+
+说明:第 33 项 `network-tools / 网络工具` 不归入 Coding,已确认归入 System Tools。
+
+### 改动 2:合并为 Design / 设计
+
+17、18、19、20 合并成 `Design / 设计`。
+
+涉及:
+
+- 字体
+- UI 原型
+- 3D 与 CAD
+- 图表绘制
+
+### 改动 3:合并为 System Tools / 系统工具
+
+8、9、28、29、30、31、33、38 合并成 `System Tools / 系统工具`。
+
+涉及:
+
+- 文件管理
+- 上传与下载
+- 系统维护
+- 窗口管理
+- 设备管理
+- 输入工具
+- 网络工具
+- 安全
+
+确认理由:
+
+- 网络工具在普通用户心智里更接近系统能力、连接、代理、网络诊断,而不是纯编程。
+- coding 已经覆盖 API、数据库、DevOps、IDE、SDK、终端、自动化,范围足够大。
+- 把网络工具归入 system-tools,可以避免 coding 继续膨胀成“所有技术工具”的大杂烩。
+
+### 改动 4:合并为 Office & Docs / 办公文档
+
+6、7、21 合并成 `Office & Docs / 办公文档`。
+
+涉及:
+
+- 办公
+- PDF
+- 写作
+
+确认理由:
+
+- 这三类都属于文档生产、文档阅读、文档处理。
+- 合并后能减少普通用户在“办公 / PDF / 写作”之间选择的成本。
+- `Office & Docs / 办公文档`比单独的 `Office / 办公`覆盖范围更准确,也比 `Docs & Writing / 文档写作`更贴近用户已确认的命名方向。
+
+
+### 改动 5:合并为 Entertainment / 影音娱乐
+
+11、12、15(基于 18 标签方案中的 `Video`、`Audio`、`Games`)合并进 `Entertainment / 影音娱乐`。
+
+涉及原始 39 标签中的:
+
+- 媒体
+- 视频
+- 音频
+- 影音娱乐
+- 游戏
+
+确认理由:
+
+- 这些标签面向普通用户时都属于休闲、影音、游戏和娱乐心智。
+- 合并后能进一步降低默认标签数量,避免新用户第一屏出现过多细分分类。
+- `Entertainment / 影音娱乐`作为总标签更适合默认初始化;如果用户需要细分,可后续手动拆分。
+
+## 4. 命名确认
+
+### System Tools
+
+- 英文:`System Tools`
+- 简体中文:`系统工具`
+
+实现建议:
+
+- 代码里优先复用既有 `SmartCategoryID.systemEnhancement`,避免新增 category id。
+- 只把用户可见文案改为 `System Tools / 系统工具`。
+- 不使用 `系统能力强化`作为最终展示文案,因为它偏长、偏抽象,且在标签栏和容器标题里不够利落。
+
+### Office & Docs
+
+- 英文:`Office & Docs`
+- 简体中文:`办公文档`
+
+实现建议:
+
+- 可优先复用既有 `SmartCategoryID.office` 作为合并目标,减少新增 category id。
+- 将 `office` 的用户可见文案从 `Office / 办公`调整为 `Office & Docs / 办公文档`。
+- `PDF` 和 `writing` 不再作为默认初始化标签出现,但仍可作为内部识别来源映射到 `office`。
+
+## 5. 合并后的最终标签数量
+
+当前:39 个默认标签。
+
+合并后:15 个默认标签。
+
+减少:24 个标签。
+
+## 6. 最终 15 个默认标签列表
+
+以下列表按“尽量保留原始顺序 + 合并项放在首次出现位置”的原则排列。
+
+| 新序号 | category id | 英文显示名 | 简体中文显示名 | 来源 |
+|---:|---|---|---|---|
+| 1 | `browser` | Browsers | 浏览器 | 原 1 |
+| 2 | `communication` | Communication | 沟通 | 原 2 |
+| 3 | `GTD` | Tasks & GTD | 任务与 GTD | 原 3 |
+| 4 | `Notes` | Notes | 笔记 | 原 4 |
+| 5 | `Meeting` | Meetings | 会议 | 原 5 |
+| 6 | `office` | Office & Docs | 办公文档 | 原 6、7、21 |
+| 7 | `system-enhancement` | System Tools | 系统工具 | 原 8、9、26、27、28、29、30、31、33、38 |
+| 8 | `ai-tools` | AI Tools | AI 工具 | 原 10 |
+| 9 | `development` | Coding | 编程 | 原 11、12、13、14、15、16、32 |
+| 10 | `design` | Design | 设计 | 原 17、18、19、20 |
+| 11 | `picture-photo` | Photos | 图片 | 原 25 |
+| 12 | `entertainment` | Entertainment | 影音娱乐 | 原 22、23、24、34、35 |
+| 13 | `finance` | Finance | 财务 | 原 36 |
+| 14 | `education` | Education | 学习 | 原 37 |
+| 15 | `other` | Other | 其他 | 原 39 |
+
+## 7. 完整合并映射表
+
+| 原序号 | 原 category id | 原简体中文 | 新 category id | 新显示名 |
+|---:|---|---|---|---|
+| 1 | `browser` | 浏览器 | `browser` | 浏览器 |
+| 2 | `communication` | 沟通 | `communication` | 沟通 |
+| 3 | `GTD` | 任务与 GTD | `GTD` | 任务与 GTD |
+| 4 | `Notes` | 笔记 | `Notes` | 笔记 |
+| 5 | `Meeting` | 会议 | `Meeting` | 会议 |
+| 6 | `office` | 办公 | `office` | 办公文档 |
+| 7 | `PDF` | PDF | `office` | 办公文档 |
+| 8 | `file-management` | 文件管理 | `system-enhancement` | 系统工具 |
+| 9 | `transfer` | 上传与下载 | `system-enhancement` | 系统工具 |
+| 10 | `ai-tools` | AI 工具 | `ai-tools` | AI 工具 |
+| 11 | `api-tools` | API 工具 | `development` | 编程 |
+| 12 | `database-tools` | 数据库 | `development` | 编程 |
+| 13 | `devops` | DevOps | `development` | 编程 |
+| 14 | `ide` | IDE | `development` | 编程 |
+| 15 | `runtime-sdk` | 运行时与 SDK | `development` | 编程 |
+| 16 | `terminal-tools` | 终端工具 | `development` | 编程 |
+| 17 | `Font` | 字体 | `design` | 设计 |
+| 18 | `ui-prototyping` | UI 原型 | `design` | 设计 |
+| 19 | `3d-cad` | 3D 与 CAD | `design` | 设计 |
+| 20 | `diagramming` | 图表绘制 | `design` | 设计 |
+| 21 | `writing` | 写作 | `office` | 办公文档 |
+| 22 | `media` | 媒体 | `entertainment` | 影音娱乐 |
+| 23 | `video` | 视频 | `entertainment` | 影音娱乐 |
+| 24 | `audio` | 音频 | `entertainment` | 影音娱乐 |
+| 25 | `picture-photo` | 图片与照片 | `picture-photo` | 图片 |
+| 26 | `utilities` | 工具 | `system-enhancement` | 系统工具 |
+| 27 | `system` | 系统应用 | `system-enhancement` | 系统工具 |
+| 28 | `system-maintenance` | 系统维护 | `system-enhancement` | 系统工具 |
+| 29 | `window-management` | 窗口管理 | `system-enhancement` | 系统工具 |
+| 30 | `device-management` | 设备管理 | `system-enhancement` | 系统工具 |
+| 31 | `input-tools` | 输入工具 | `system-enhancement` | 系统工具 |
+| 32 | `Automation` | 自动化 | `development` | 编程 |
+| 33 | `network-tools` | 网络工具 | `system-enhancement` | 系统工具 |
+| 34 | `entertainment` | 影音娱乐 | `entertainment` | 影音娱乐 |
+| 35 | `game` | 游戏 | `entertainment` | 影音娱乐 |
+| 36 | `finance` | 财务 | `finance` | 财务 |
+| 37 | `education` | 学习 | `education` | 学习 |
+| 38 | `security` | 安全 | `system-enhancement` | 系统工具 |
+| 39 | `other` | 其他 | `other` | 其他 |
+
+## 8. 后续落地建议
+
+如果产品确认这版列表,建议后续实现按低风险路径做:
+
+1. 调整 `SmartCategoryDefaults.orderedIDs`,把 39 个默认标签压缩为 15 个。
+2. 复用既有 `SmartCategoryID.office`、`SmartCategoryID.development`、`SmartCategoryID.design`、`SmartCategoryID.systemEnhancement` 作为合并目标。
+3. 建立旧 category id 到新 category id 的映射表,SmartStart 匹配结果统一归并后再写入标签。
+4. 29 个语言包中将 `system-enhancement` 的用户可见文案改为 `System Tools / 系统工具`对应语义,将 `office` 改为 `Office & Docs / 办公文档`对应语义,将 `picture-photo` 简化为 `Photos / 图片`对应语义。
+5. QA 覆盖:
+ - 新用户智能初始化最终标签数是 15。
+ - 合并来源 app 进入正确目标标签。
+ - 第 33 项 `network-tools`归入 `system-enhancement`,不重复创建标签。
+ - `office`、`PDF`、`writing`都归入 `Office & Docs / 办公文档`。
+ - 新默认智能分类结果中 29 语种没有旧细分标签残留、没有英文兜底污染。
+ - 老用户已有标签保持原样;本轮不做旧 39 标签自动迁移。
+
+## 9. 产品边界确认
+
+1. 本轮只影响新用户 / 重置分类方案后的智能初始化。
+2. 不做老用户旧 39 标签自动迁移;已有用户标签保持原样,避免为极少量历史用户增加冗余迁移代码。
diff --git a/src/Scripts/smartstart_default_categories_qa.sh b/src/Scripts/smartstart_default_categories_qa.sh
new file mode 100755
index 0000000..73984e7
--- /dev/null
+++ b/src/Scripts/smartstart_default_categories_qa.sh
@@ -0,0 +1,211 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
+SMART_CATEGORY_SWIFT="$ROOT_DIR/Apptag/SmartCategorization/SmartCategory.swift"
+SMARTSTART_SWIFT="$ROOT_DIR/Apptag/SmartCategorization/SmartStartService.swift"
+APPLE_CATALOG_SWIFT="$ROOT_DIR/Apptag/AppleDefaultAppCatalog.swift"
+DATA_LAYER_SWIFT="$ROOT_DIR/Apptag/DataLayer.swift"
+LOCALIZATION_DIR="$ROOT_DIR/Apptag/Localization"
+SMARTSTART_BASE="$ROOT_DIR/Research/SmartStart/UltimateDefaultCatalog/SmartStart_UltimateDefaultCatalog.base.json"
+APPLE_BASE="$ROOT_DIR/Research/AppleDefaultApps/AppleDefaultApps.base.json"
+
+fail() {
+ printf 'FAIL: %s\n' "$*" >&2
+ exit 1
+}
+
+[[ -f "$SMART_CATEGORY_SWIFT" ]] || fail "missing SmartCategory.swift"
+[[ -f "$SMARTSTART_SWIFT" ]] || fail "missing SmartStartService.swift"
+[[ -f "$APPLE_CATALOG_SWIFT" ]] || fail "missing AppleDefaultAppCatalog.swift"
+[[ -f "$DATA_LAYER_SWIFT" ]] || fail "missing DataLayer.swift"
+[[ -d "$LOCALIZATION_DIR" ]] || fail "missing Localization directory"
+[[ -f "$SMARTSTART_BASE" ]] || fail "missing SmartStart base catalog"
+[[ -f "$APPLE_BASE" ]] || fail "missing Apple default base catalog"
+
+python3 - "$ROOT_DIR" <<'PY'
+import json
+import pathlib
+import re
+import sys
+
+root = pathlib.Path(sys.argv[1])
+smart_category = root / "Apptag" / "SmartCategorization" / "SmartCategory.swift"
+smartstart = root / "Apptag" / "SmartCategorization" / "SmartStartService.swift"
+apple_catalog = root / "Apptag" / "AppleDefaultAppCatalog.swift"
+data_layer = root / "Apptag" / "DataLayer.swift"
+localization_dir = root / "Apptag" / "Localization"
+smartstart_base = root / "Research" / "SmartStart" / "UltimateDefaultCatalog" / "SmartStart_UltimateDefaultCatalog.base.json"
+apple_base = root / "Research" / "AppleDefaultApps" / "AppleDefaultApps.base.json"
+
+EXPECTED_ORDERED_CASES = [
+ "browser",
+ "communication",
+ "gtd",
+ "notes",
+ "meeting",
+ "office",
+ "systemEnhancement",
+ "aiTools",
+ "development",
+ "design",
+ "picturePhoto",
+ "entertainment",
+ "finance",
+ "education",
+ "other",
+]
+
+EXPECTED_RAW_IDS = {
+ "browser",
+ "communication",
+ "GTD",
+ "Notes",
+ "Meeting",
+ "office",
+ "system-enhancement",
+ "ai-tools",
+ "development",
+ "design",
+ "picture-photo",
+ "entertainment",
+ "finance",
+ "education",
+ "other",
+}
+
+MERGE_MAP = {
+ "PDF": "office",
+ "productivity": "office",
+ "writing": "office",
+ "file-management": "system-enhancement",
+ "transfer": "system-enhancement",
+ "utilities": "system-enhancement",
+ "system": "system-enhancement",
+ "system-maintenance": "system-enhancement",
+ "window-management": "system-enhancement",
+ "device-management": "system-enhancement",
+ "input-tools": "system-enhancement",
+ "network-tools": "system-enhancement",
+ "security": "system-enhancement",
+ "api-tools": "development",
+ "database-tools": "development",
+ "devops": "development",
+ "ide": "development",
+ "runtime-sdk": "development",
+ "terminal-tools": "development",
+ "Automation": "development",
+ "Font": "design",
+ "ui-prototyping": "design",
+ "3d-cad": "design",
+ "diagramming": "design",
+ "media": "entertainment",
+ "video": "entertainment",
+ "audio": "entertainment",
+ "game": "entertainment",
+}
+
+TARGET_LABELS = {
+ "en": {
+ "smart.category.office": "Office & Docs",
+ "smart.category.development": "Coding",
+ "smart.category.system-enhancement": "System Tools",
+ "smart.category.picture-photo": "Photos",
+ },
+ "zh-Hans": {
+ "smart.category.office": "办公文档",
+ "smart.category.development": "编程",
+ "smart.category.system-enhancement": "系统工具",
+ "smart.category.picture-photo": "图片",
+ },
+ "zh-Hant": {
+ "smart.category.office": "辦公文件",
+ "smart.category.development": "程式編寫",
+ "smart.category.system-enhancement": "系統工具",
+ "smart.category.picture-photo": "圖片",
+ },
+}
+
+
+def fail(message: str) -> None:
+ print(f"FAIL: {message}", file=sys.stderr)
+ sys.exit(1)
+
+
+def load_json(path: pathlib.Path):
+ try:
+ return json.loads(path.read_text(encoding="utf-8"))
+ except Exception as error:
+ fail(f"{path} is not valid JSON: {error}")
+
+
+swift = smart_category.read_text(encoding="utf-8")
+order_match = re.search(
+ r"static\s+let\s+orderedIDs\s*:\s*\[SmartCategoryID\]\s*=\s*\[(.*?)\n\s*\]",
+ swift,
+ re.S,
+)
+if not order_match:
+ fail("could not find SmartCategoryDefaults.orderedIDs")
+ordered_cases = re.findall(r"\.([A-Za-z0-9_]+)", order_match.group(1))
+if ordered_cases != EXPECTED_ORDERED_CASES:
+ fail(f"SmartCategoryDefaults.orderedIDs mismatch: {ordered_cases}")
+
+required_mapping_snippets = [
+ "case .pdf, .productivity, .writing:",
+ "return .office",
+ "case .fileManagement, .transfer, .utilities, .system, .systemMaintenance,",
+ "case .apiTools, .databaseTools, .devops, .ide, .runtimeSDK, .terminalTools, .automation:",
+ "case .font, .uiPrototyping, .threeDCAD, .diagramming:",
+ "case .media, .video, .audio, .game:",
+ "return .entertainment",
+]
+missing_snippets = [snippet for snippet in required_mapping_snippets if snippet not in swift]
+if missing_snippets:
+ fail("SmartStart merge mapping is missing snippets: " + " | ".join(missing_snippets))
+
+for path in [smartstart, apple_catalog]:
+ text = path.read_text(encoding="utf-8")
+ if ".map(\\.smartStartDefaultCategoryID)" not in text:
+ fail(f"{path.name} must normalize catalog category IDs through smartStartDefaultCategoryID")
+
+starter_match = re.search(
+ r"let\s+starterCategoryIDs\s*:\s*\[SmartCategoryID\]\s*=\s*\[(.*?)\n\s*\]",
+ data_layer.read_text(encoding="utf-8"),
+ re.S,
+)
+if not starter_match:
+ fail("could not find starterCategoryIDs")
+starter_cases = re.findall(r"\.([A-Za-z0-9_]+)", starter_match.group(1))
+legacy_starter_cases = set(starter_cases) - set(EXPECTED_ORDERED_CASES)
+if legacy_starter_cases:
+ fail("starterCategoryIDs contains non-default categories: " + ", ".join(sorted(legacy_starter_cases)))
+
+def normalize(raw: str) -> str:
+ return MERGE_MAP.get(raw, raw)
+
+for catalog_path in [smartstart_base, apple_base]:
+ catalog = load_json(catalog_path)
+ unexpected = {}
+ for entry in catalog.get("entries", []):
+ for raw in entry.get("defaultTag", []):
+ if raw == "other":
+ continue
+ normalized = normalize(raw)
+ if normalized not in EXPECTED_RAW_IDS:
+ unexpected.setdefault(raw, normalized)
+ if unexpected:
+ fail(f"{catalog_path.name} normalizes to non-default categories: {unexpected}")
+
+for language_code, expected in TARGET_LABELS.items():
+ data = load_json(localization_dir / f"{language_code}.json")
+ for key, value in expected.items():
+ if data.get(key) != value:
+ fail(f"{language_code}.json {key} is {data.get(key)!r}, expected {value!r}")
+
+print(
+ "PASS SmartStart default categories: "
+ f"{len(EXPECTED_ORDERED_CASES)} defaults, catalog IDs normalized, "
+ "starter tags restricted, target labels checked"
+)
+PY
--
Gitblit v1.9.3