From b2a06ec5ebc86c0241e635782ae5a032ab5aad0a Mon Sep 17 00:00:00 2001
From: Ariver <shanghai3168@gmail.com>
Date: Thu, 02 Jul 2026 02:43:51 +0800
Subject: [PATCH] Prepare TagLauncher 8.3.2 App Store candidate

---
 src/Scripts/pro_localization_qa.sh |   27 +++++++++++++++++++++++++++
 1 files changed, 27 insertions(+), 0 deletions(-)

diff --git a/src/Scripts/pro_localization_qa.sh b/src/Scripts/pro_localization_qa.sh
index dba4f4c..b1a953c 100755
--- a/src/Scripts/pro_localization_qa.sh
+++ b/src/Scripts/pro_localization_qa.sh
@@ -22,6 +22,8 @@
 REQUIRED_PLACEHOLDERS = {
     "pro.notes.remaining": {"%limit%", "%remaining%"},
     "pro.theme.status.previewCountdown": {"%time%"},
+    "pro.customContainers.quotaShort": {"%used%", "%limit%"},
+    "pro.customContainers.quotaPrompt": {"%used%", "%limit%", "%remaining%"},
 }
 REQUIRED_NON_PRO_KEYS = [
     "settings.proStatus.freeUser",
@@ -36,6 +38,10 @@
     "settings.proStatus.unsupportedFeature",
     "settings.proStatus.unavailableFeature",
     "settings.proStatus.previewFiveMinutes",
+    "settings.proStatus.maxSixTags",
+    "settings.proStatus.unlimitedTags",
+    "settings.proStatus.previewOnly",
+    "settings.proStatus.supported",
     "settings.proFeature.appNotes",
     "settings.proFeature.dataBackup",
     "settings.proBenefit.general",
@@ -122,6 +128,14 @@
     fail("en.json Pro comparison unlimited notes status must include the leading checkmark")
 if english.get("settings.proStatus.unlockedFeature") != "✅ Unlocked":
     fail("en.json Pro comparison unlocked status must be '✅ Unlocked'")
+if english.get("settings.proStatus.supported") != "✅ Supported":
+    fail("en.json Pro comparison supported status must be '✅ Supported'")
+if english.get("settings.proStatus.unlimitedTags") != "✅ No limit":
+    fail("en.json Pro comparison unlimited tag status must be '✅ No limit'")
+if english.get("pro.customContainers.quotaShort") != "Free users can use 6 custom tags (containers): %used% / %limit% used":
+    fail("en.json custom container quota line must use the approved free-user wording")
+if english.get("settings.proStatus.proUser") != "You are currently a valued Pro user":
+    fail("en.json settings.proStatus.proUser must not duplicate the crown icon in text")
 
 zh_hans = load_json(localization_dir / "zh-Hans.json")
 if zh_hans.get("settings.proStatus.lockedFeature") != "✅支持":
@@ -130,6 +144,14 @@
     fail("zh-Hans.json Pro comparison unlimited notes status must be '✅无限备注'")
 if zh_hans.get("settings.proStatus.unlockedFeature") != "✅已解锁":
     fail("zh-Hans.json Pro comparison unlocked status must be '✅已解锁'")
+if zh_hans.get("settings.proStatus.supported") != "✅支持":
+    fail("zh-Hans.json Pro comparison supported status must be '✅支持'")
+if zh_hans.get("settings.proStatus.unlimitedTags") != "✅没有限制":
+    fail("zh-Hans.json Pro comparison unlimited tag status must be '✅没有限制'")
+if zh_hans.get("pro.customContainers.quotaShort") != "免费用户可以使用6个自定义标签(容器):已使用 %used% / %limit%":
+    fail("zh-Hans.json custom container quota line must use the approved free-user wording")
+if zh_hans.get("settings.proStatus.proUser") != "您当前是尊贵的 Pro 用户":
+    fail("zh-Hans.json settings.proStatus.proUser must be the approved centered Pro identity sentence")
 
 ko = load_json(localization_dir / "ko.json")
 if ko.get("quickSearch.hotkeys") != "키보드 단축키":
@@ -197,6 +219,11 @@
         if copied_english:
             fail(f"{code}.json copies English Pro copy: {', '.join(copied_english)}")
 
+    if "👑" in data.get("settings.proStatus.proUser", ""):
+        fail(f"{code}.json settings.proStatus.proUser must not duplicate the crown icon")
+    if not data.get("settings.proStatus.unlimitedTags", "").startswith("✅"):
+        fail(f"{code}.json settings.proStatus.unlimitedTags must include the leading checkmark")
+
 print(
     "PASS Pro localization QA: "
     f"{len(language_codes)} languages, {len(pro_keys) + len(REQUIRED_NON_PRO_KEYS) + len(REQUIRED_VISIBLE_SETTINGS_KEYS)} Pro/settings keys, "

--
Gitblit v1.9.3