ソースを参照

release: v1.6.1 - cross-model review fixes (Kimi-K3 x GLM 5.2, 13 issues)

- H1 BillingPolicy 多语言化(9 语言 billing 命名空间),移除对客'70% of China price'与'× 0.7'
- H2 catalog 页移除硬编码 'DashScope × 0.7'
- H3 zh-TW 修复 5 处简繁混用 + '中國國內價'残留;H4 zh-HK code_resend 全角括号
- M1-M6 seo 注释/文档 sitemap 36→81/CHANGELOG 去重/README 基线引用/pricing.p 语法/管理后台批量定价表述
- L1-L3 文档注释与占位表述清理;pricing.p 统一 'USD & local currency'
- 版本同步 1.6.1(VERSION/package.json×2/health)
DoTouch Dev 2 週間 前
コミット
a505a45e24

+ 2 - 2
.omo/run-continuation/ses_0229f653bffedHZYFR3ILxjlpg.json

@@ -1,10 +1,10 @@
 {
   "sessionID": "ses_0229f653bffedHZYFR3ILxjlpg",
-  "updatedAt": "2026-08-09T14:48:08.818Z",
+  "updatedAt": "2026-08-09T14:57:54.091Z",
   "sources": {
     "background-task": {
       "state": "idle",
-      "updatedAt": "2026-08-09T14:48:08.818Z"
+      "updatedAt": "2026-08-09T14:57:54.091Z"
     }
   }
 }

+ 1 - 1
README.md

@@ -118,7 +118,7 @@ docs/
 ├── seo/                      SEO 方案与性能基线
 │   ├── seo-strategy-v1.0.md          SEO 方案(P1 已执行,P2/P3 待执行)
-│   └── performance-baseline-v1.3.0.md 性能基线(SSG TTFB ~13ms)
+│   └── performance-baseline-v1.6.0.md 性能基线(9 语言 SSG,TTFB 14–18ms)
 ├── models/                  模型调研(阿里云百炼真实扫描)
 │   ├── dashscope-models-20260808.json    236 个在售模型全量清单
 │   └── dashscope-pricing-20260808.md     价格与收费方式(含 7 折策略)

+ 1 - 1
VERSION

@@ -1 +1 @@
-v1.6.0 (i18n-expansion)
+v1.6.1 (final-review-fixes)

+ 1 - 1
apps/api/package.json

@@ -1,6 +1,6 @@
 {
   "name": "@dotouch/api",
-  "version": "1.6.0",
+  "version": "1.6.1",
   "private": true,
   "description": "DoTouch.AI API Gateway (NestJS)",
   "scripts": {

+ 1 - 1
apps/api/src/health/health.controller.ts

@@ -9,7 +9,7 @@ export class HealthController {
   check() {
     return {
       status: 'ok' as const,
-      version: '1.6.0',
+      version: '1.6.1',
       timestamp: new Date().toISOString(),
     };
   }

+ 14 - 3
apps/web/messages/ar-SA.json

@@ -1,5 +1,7 @@
 {
-  "common": { "locale": "ar-SA" },
+  "common": {
+    "locale": "ar-SA"
+  },
   "nav": {
     "home": "الرئيسية",
     "models": "النماذج",
@@ -408,5 +410,14 @@
   "referral_type_register": "مكافأة التسجيل",
   "referral_type_referee_first_pay": "مكافأة أول شحن",
   "referral_type_referrer_pay": "مكافأة الإحالة",
-  "c_referral": "الإحالات"
-}
+  "c_referral": "الإحالات",
+  "billing": {
+    "h2": "سياسة الفوترة",
+    "c1_t": "سعر منخفض للغاية",
+    "c1_d": "التسعير بالعملة المحلية بسعر صرف ثابت. شفافية تامة، بدون رسوم خفية.",
+    "c2_t": "دفع مسبق، يُحسب لكل رمز",
+    "c2_d": "النصوص: فوترة منفصلة للإدخال والإخراج. الصور: لكل صورة / دقة. الصوت: لكل حرف / ثانية.",
+    "c3_t": "التسعير عبر لوحة الإدارة",
+    "c3_d": "جميع النماذج الـ236 مسعرة حسب الفئة؛ النماذج بدون سعر مؤكد تظهر \"pending\"."
+  }
+}

+ 13 - 4
apps/web/messages/en.json

@@ -54,13 +54,13 @@
   "pricing": {
     "kicker": "Pricing",
     "h2": "Pay Only for What You Use",
-    "p": "Prepaid, metered per token. No subscription — top up anytime. Prices are unbeatable low price, shown in USD & VND.",
+    "p": "Prepaid, metered per token. No subscription — top up anytime. Unbeatable low prices, shown in USD & local currency.",
     "pt_model": "Model",
     "pt_in": "Input / 1M tokens",
     "pt_out": "Output / 1M tokens",
     "pt_save": "You save",
     "more": "View full pricing →",
-    "note": "* Prices are placeholders pending DashScope × 0.7 confirmation."
+    "note": "* Prices are indicative; final rates pending DashScope confirmation."
   },
   "features": {
     "kicker": "Why DoTouch",
@@ -352,7 +352,7 @@
   "pay_card": "Bank Card",
   "price_faq": "Pricing FAQ",
   "price_h1": "Pricing",
-  "price_note": "* Prices are placeholders pending DashScope × 0.7 confirmation.",
+  "price_note": "* Prices are indicative; final rates pending DashScope confirmation.",
   "price_rule": "Billing rules",
   "price_rule_p": "Cost = tokens × unit price, deducted from balance. No subscription, no commitment. VND rate applied at top-up.",
   "price_sub": "All prices are unbeatable low price. Shown in USD and VND at the current rate.",
@@ -410,5 +410,14 @@
   "referral_type_register": "Register bonus",
   "referral_type_referee_first_pay": "First top-up bonus",
   "referral_type_referrer_pay": "Referral bonus",
-  "c_referral": "Referrals"
+  "c_referral": "Referrals",
+  "billing": {
+    "h2": "Billing policy",
+    "c1_t": "Unbeatable Low Price",
+    "c1_d": "Priced in local currency at a stable reference rate. Transparent, no hidden fees.",
+    "c2_t": "Prepaid, metered per token",
+    "c2_d": "Text: input/output billed separately. Image: per image / resolution. Speech: per character / second.",
+    "c3_t": "Priced via Admin Panel",
+    "c3_d": "All 236 models are priced by category; models without a confirmed price show as \"pending\"."
+  }
 }

+ 14 - 3
apps/web/messages/id-ID.json

@@ -1,5 +1,7 @@
 {
-  "common": { "locale": "id-ID" },
+  "common": {
+    "locale": "id-ID"
+  },
   "nav": {
     "home": "Beranda",
     "models": "Model",
@@ -408,5 +410,14 @@
   "referral_type_register": "Bonus pendaftaran",
   "referral_type_referee_first_pay": "Bonus pengisian pertama",
   "referral_type_referrer_pay": "Bonus referral",
-  "c_referral": "Referral"
-}
+  "c_referral": "Referral",
+  "billing": {
+    "h2": "Kebijakan penagihan",
+    "c1_t": "Harga Super Terjangkau",
+    "c1_d": "Dibanderol dalam mata uang lokal dengan nilai tukar stabil. Transparan, tanpa biaya tersembunyi.",
+    "c2_t": "Prabayar, ditagih per token",
+    "c2_d": "Teks: input/output ditagih terpisah. Gambar: per gambar / resolusi. Suara: per karakter / detik.",
+    "c3_t": "Dibanderol via Admin Panel",
+    "c3_d": "Semua 236 model dibanderol per kategori; model tanpa harga terkonfirmasi tampil \"pending\"."
+  }
+}

+ 14 - 3
apps/web/messages/ms-MY.json

@@ -1,5 +1,7 @@
 {
-  "common": { "locale": "ms-MY" },
+  "common": {
+    "locale": "ms-MY"
+  },
   "nav": {
     "home": "Utama",
     "models": "Model",
@@ -408,5 +410,14 @@
   "referral_type_register": "Bonus pendaftaran",
   "referral_type_referee_first_pay": "Bonus tambah nilai pertama",
   "referral_type_referrer_pay": "Bonus rujukan",
-  "c_referral": "Rujukan"
-}
+  "c_referral": "Rujukan",
+  "billing": {
+    "h2": "Dasar bil",
+    "c1_t": "Harga Amat Rendah",
+    "c1_d": "Ditetapkan dalam mata wang tempatan pada kadar tukaran stabil. Telus, tanpa caj tersembunyi.",
+    "c2_t": "Prabayar, diukur per token",
+    "c2_d": "Teks: input/output dicaj berasingan. Imej: setiap imej / resolusi. Pertuturan: setiap aksara / saat.",
+    "c3_t": "Harga melalui Admin Panel",
+    "c3_d": "Semua 236 model ditetapkan harganya mengikut kategori; model tanpa harga disahkan dipaparkan \"pending\"."
+  }
+}

+ 14 - 3
apps/web/messages/th-TH.json

@@ -1,5 +1,7 @@
 {
-  "common": { "locale": "th-TH" },
+  "common": {
+    "locale": "th-TH"
+  },
   "nav": {
     "home": "หน้าแรก",
     "models": "โมเดล",
@@ -408,5 +410,14 @@
   "referral_type_register": "โบนัสสมัครสมาชิก",
   "referral_type_referee_first_pay": "โบนัสเติมเงินครั้งแรก",
   "referral_type_referrer_pay": "โบนัสแนะนำ",
-  "c_referral": "การแนะนำ"
-}
+  "c_referral": "การแนะนำ",
+  "billing": {
+    "h2": "นโยบายการเรียกเก็บเงิน",
+    "c1_t": "ราคาถูกสุดๆ",
+    "c1_d": "คิดราคาเป็นสกุลเงินท้องถิ่นตามอัตราแลกเปลี่ยนคงที่ โปร่งใส ไม่มีค่าธรรมเนียมแอบแฝง",
+    "c2_t": "เติมเงิน คิดต่อ token",
+    "c2_d": "ข้อความ: คิดแยก input/output รูปภาพ: ต่อภาพ / ความละเอียด เสียง: ต่อตัวอักษร / วินาที",
+    "c3_t": "ตั้งราคาผ่าน Admin Panel",
+    "c3_d": "โมเดลทั้ง 236 ตัวตั้งราคาตามหมวดหมู่ โมเดลที่ยังไม่ยืนยันราคาแสดง \"pending\""
+  }
+}

+ 13 - 4
apps/web/messages/vi.json

@@ -54,13 +54,13 @@
   "pricing": {
     "kicker": "Bảng giá",
     "h2": "Chỉ trả cho những gì bạn dùng",
-    "p": "Trả trước, tính theo token. Không thuê bao — nạp tiền bất cứ lúc nào. Giá cực kỳ cạnh tranh, hiển thị bằng USD & VND.",
+    "p": "Trả trước, tính theo token. Không thuê bao — nạp tiền bất cứ lúc nào. Giá cực kỳ cạnh tranh, hiển thị bằng USD & tiền tệ địa phương.",
     "pt_model": "Mô hình",
     "pt_in": "Đầu vào / 1M token",
     "pt_out": "Đầu ra / 1M token",
     "pt_save": "Tiết kiệm",
     "more": "Xem bảng giá đầy đủ →",
-    "note": "* Giá đang là tạm tính, chờ xác nhận giá DashScope × 0.7."
+    "note": "* Giá mang tính tham khảo; mức giá cuối chờ xác nhận từ DashScope."
   },
   "features": {
     "kicker": "Vì sao DoTouch",
@@ -352,7 +352,7 @@
   "pay_card": "Thẻ ngân hàng",
   "price_faq": "Câu hỏi về giá",
   "price_h1": "Bảng giá",
-  "price_note": "* Giá đang là tạm tính, chờ xác nhận giá DashScope × 0.7.",
+  "price_note": "* Giá mang tính tham khảo; mức giá cuối chờ xác nhận từ DashScope.",
   "price_rule": "Quy tắc tính phí",
   "price_rule_p": "Phí = token × đơn giá, trừ từ số dư. Không thuê bao, không cam kết. Tỷ giá VND áp dụng tại thời điểm nạp tiền.",
   "price_sub": "Tất cả giá cực kỳ cạnh tranh. Hiển thị USD và VND theo tỷ giá hiện tại.",
@@ -410,5 +410,14 @@
   "referral_type_register": "Thưởng đăng ký",
   "referral_type_referee_first_pay": "Thưởng nạp đầu",
   "referral_type_referrer_pay": "Thưởng giới thiệu",
-  "c_referral": "Giới thiệu bạn bè"
+  "c_referral": "Giới thiệu bạn bè",
+  "billing": {
+    "h2": "Chính sách thanh toán",
+    "c1_t": "Giá cực kỳ cạnh tranh",
+    "c1_d": "Định giá bằng tiền tệ địa phương theo tỷ giá ổn định. Minh bạch, không phí ẩn.",
+    "c2_t": "Trả trước, tính theo token",
+    "c2_d": "Văn bản: tính riêng input/output. Hình ảnh: theo ảnh / độ phân giải. Giọng nói: theo ký tự / giây.",
+    "c3_t": "Định giá qua Admin Panel",
+    "c3_d": "Tất cả 236 mô hình được định giá theo nhóm; mô hình chưa có giá hiển thị \"pending\"."
+  }
 }

+ 13 - 4
apps/web/messages/zh-CN.json

@@ -54,13 +54,13 @@
   "pricing": {
     "kicker": "定价",
     "h2": "按用量付费",
-    "p": "预充值,按 token 计量。无订阅——随时充值。价格 = 极致低价,以美元与越南盾双币种显示。",
+    "p": "预充值,按 token 计量。无订阅——随时充值。价格极致低价,以 USD 与当地货币显示。",
     "pt_model": "模型",
     "pt_in": "输入 / 1M tokens",
     "pt_out": "输出 / 1M tokens",
     "pt_save": "节省",
     "more": "查看完整定价 →",
-    "note": "* 价格为占位值,待百炼 × 0.7 确认。"
+    "note": "* 价格为参考值,最终费率以百炼确认为准。"
   },
   "features": {
     "kicker": "为什么选择 DoTouch",
@@ -352,7 +352,7 @@
   "pay_card": "银行卡",
   "price_faq": "价格常见问题",
   "price_h1": "定价",
-  "price_note": "* 价格为占位值,待百炼 × 0.7 确认。",
+  "price_note": "* 价格为参考值,最终费率以百炼确认为准。",
   "price_rule": "扣费规则",
   "price_rule_p": "费用 = token × 单价,从余额扣除。无订阅、无承诺。越南盾按充值时刻汇率结算。",
   "price_sub": "所有价格 = 极致低价。以美元与越南盾按当前汇率显示。",
@@ -410,5 +410,14 @@
   "referral_type_register": "注册奖励",
   "referral_type_referee_first_pay": "首充奖励",
   "referral_type_referrer_pay": "转介绍奖励",
-  "c_referral": "邀请奖励"
+  "c_referral": "邀请奖励",
+  "billing": {
+    "h2": "计费政策",
+    "c1_t": "极致低价",
+    "c1_d": "以本地货币按稳定汇率计价。价格透明,无隐藏费用。",
+    "c2_t": "预付制,按 token 计费",
+    "c2_d": "文本:输入/输出分别计费。图片:按张/分辨率。语音:按字符/秒。",
+    "c3_t": "管理后台统一定价",
+    "c3_d": "全部 236 个模型按类别定价;未确认价格的模型显示 \"pending\"。"
+  }
 }

+ 15 - 4
apps/web/messages/zh-HK.json

@@ -1,5 +1,7 @@
 {
-  "common": { "locale": "zh-HK" },
+  "common": {
+    "locale": "zh-HK"
+  },
   "nav": {
     "home": "首頁",
     "models": "模型",
@@ -151,7 +153,7 @@
     "confirm_new": "確認新密碼",
     "code_label": "驗證碼",
     "code_send": "發送驗證碼",
-    "code_resend": "重新發送({s}s)",
+    "code_resend": "重新發送({s}s)",
     "code_note": "8 位驗證碼(A-Z、0-9),15 分鐘內有效",
     "code_sent": "✓ 驗證碼已發送至 {email},請在 15 分鐘內輸入。",
     "login_btn": "登入",
@@ -408,5 +410,14 @@
   "referral_type_register": "註冊獎勵",
   "referral_type_referee_first_pay": "首次增值獎勵",
   "referral_type_referrer_pay": "轉介紹獎勵",
-  "c_referral": "邀請"
-}
+  "c_referral": "邀請",
+  "billing": {
+    "h2": "計費政策",
+    "c1_t": "超低價格",
+    "c1_d": "以當地貨幣按穩定匯率計價。價格透明,無隱藏費用。",
+    "c2_t": "預付制,按 token 計費",
+    "c2_d": "文字:輸入/輸出分別計費。圖片:按張/解像度。語音:按字元/秒。",
+    "c3_t": "管理後台統一定價",
+    "c3_d": "全部 236 個模型按類別定價;未確認價格的模型顯示 \"pending\"。"
+  }
+}

+ 17 - 8
apps/web/messages/zh-TW.json

@@ -12,7 +12,7 @@
     "signup": "立即開始"
   },
   "hero": {
-    "badge": "OpenAI 相容 · 中國國內價 低价 · 越南優先",
+    "badge": "OpenAI 相容 · 極致低價 · 越南優先",
     "h1": "一點觸達",
     "h1_grad": "所有 AI。",
     "sub": "DoTouch.AI 將中國前沿大模型——GLM 5.2、DeepSeek V4 等——以難以置信的低價帶給全球開發者與中小企業。同樣的 OpenAI API,便宜 30%,零遷移成本。",
@@ -54,20 +54,20 @@
   "pricing": {
     "kicker": "定價",
     "h2": "按用量付費",
-    "p": "預儲值,按 token 計量。無訂閱——隨時儲值。價格 = 中國國內價 低价,以美元與越南盾雙幣種顯示。",
+    "p": "預儲值,按 token 計量。無訂閱——隨時儲值。價格極致低價,以 USD 與當地貨幣顯示。",
     "pt_model": "模型",
     "pt_in": "輸入 / 1M tokens",
     "pt_out": "輸出 / 1M tokens",
     "pt_save": "節省",
     "more": "查看完整定價 →",
-    "note": "* 價格為佔位值,待百煉 × 0.7 確認。"
+    "note": "* 價格為參考值,最終費率以百煉確認為準。"
   },
   "features": {
     "kicker": "為什麼選擇 DoTouch",
     "h2": "為開發者而生,人人用得起",
     "f1_t": "無縫相容 OpenAI",
     "f1_d": "改一行 OpenAI SDK 設定即可使用。",
-    "f2_t": "中國國內價 低价",
+    "f2_t": "極致低價",
     "f2_d": "中國模型、中國價格,美元或越南盾支付。",
     "f3_t": "本地化支付",
     "f3_d": "MoMo、ZaloPay、Stripe、PayPal、Alipay 與銀行卡。",
@@ -270,7 +270,7 @@
   "detail_price_in": "輸入",
   "detail_price_out": "輸出",
   "detail_pricing": "價格",
-  "detail_pricing_note": "每 1M tokens · 已含中國國內價 低价",
+  "detail_pricing_note": "每 1M tokens · 已含極致低價",
   "detail_rel": "相關模型",
   "detail_rel_view": "查看全部模型 →",
   "detail_spec": "技術規格",
@@ -352,10 +352,10 @@
   "pay_card": "銀行卡",
   "price_faq": "價格常見問題",
   "price_h1": "定價",
-  "price_note": "* 價格為佔位值,待百煉 × 0.7 確認。",
+  "price_note": "* 價格為參考值,最終費率以百煉確認為準。",
   "price_rule": "扣費規則",
   "price_rule_p": "費用 = token × 單價,從餘額扣除。無訂閱、無承諾。越南盾按儲值時刻匯率結算。",
-  "price_sub": "所有價格 = 中國國內價 低价。以美元與越南盾按當前匯率顯示。",
+  "price_sub": "所有價格皆極致低價。以 USD 與當地貨幣按當前匯率顯示。",
   "price_th_in": "輸入 / 1M",
   "price_th_model": "模型",
   "price_th_out": "輸出 / 1M",
@@ -410,5 +410,14 @@
   "referral_type_register": "註冊獎勵",
   "referral_type_referee_first_pay": "首儲獎勵",
   "referral_type_referrer_pay": "轉介紹獎勵",
-  "c_referral": "邀請獎勵"
+  "c_referral": "邀請獎勵",
+  "billing": {
+    "h2": "計費政策",
+    "c1_t": "極致低價",
+    "c1_d": "以當地貨幣按穩定匯率計價。價格透明,無隱藏費用。",
+    "c2_t": "預付制,按 token 計費",
+    "c2_d": "文字:輸入/輸出分別計費。圖片:按張/解析度。語音:按字元/秒。",
+    "c3_t": "管理後台統一定價",
+    "c3_d": "全部 236 個模型按類別定價;未確認價格的模型顯示 \"pending\"。"
+  }
 }

+ 1 - 1
apps/web/package.json

@@ -1,6 +1,6 @@
 {
   "name": "@dotouch/web",
-  "version": "1.6.0",
+  "version": "1.6.1",
   "private": true,
   "description": "DoTouch.AI Landing Page & Dashboard",
   "scripts": {

+ 1 - 1
apps/web/src/app/[locale]/pricing/catalog/page.tsx

@@ -59,7 +59,7 @@ export default function PricingCatalogPage() {
             </h1>
             <p className="text-sm text-brand-muted">
               All 236 models on sale on DashScope have been scanned and onboarded (2026-08-08). Displayed price =
-              DashScope × 0.7.{' '}
+              stable reference rate.{' '}
               <span className="inline-block rounded-full border border-[rgba(0,229,160,.3)] bg-[rgba(0,229,160,.1)] px-2 py-px text-[11px] text-brand-green-l">
                 ✓ verified
               </span>{' '}

+ 1 - 1
apps/web/src/components/admin/panels/ModelsPanel.tsx

@@ -25,7 +25,7 @@ export function ModelsPanel() {
       <div className="mb-4 flex flex-wrap items-center gap-2.5 rounded-xl border border-[rgba(124,92,255,.25)] bg-[rgba(124,92,255,.07)] px-4 py-3 text-[13px]">
         <b>批量工具:</b>
         <OpBtn className="border-[rgba(0,229,160,.4)] !text-brand-green-l hover:!border-brand-green">
-          按上游价 × 0.7 批量定价
+          按稳定汇率批量定价
         </OpBtn>
         <OpBtn className="border-[rgba(255,194,77,.4)] !text-brand-gold hover:!border-brand-gold">
           一键上架全部

+ 1 - 1
apps/web/src/components/admin/panels/SettingsPanel.tsx

@@ -92,7 +92,7 @@ export function SettingsPanel() {
 
       {/* 上游(阿里云百炼) */}
       <SettingCard title="上游(阿里云百炼)">
-        <SettingRow title="DASHSCOPE_API_KEY" desc="当前为占位,配置后启用 /admin/models/sync 自动同步">
+        <SettingRow title="DASHSCOPE_API_KEY" desc="当前为演示占位,生产配置真实 Key 后启用 /admin/models/sync 自动同步">
           <StatusBadge variant="pending">待配置</StatusBadge>
         </SettingRow>
         <SettingRow title="基础地址">

+ 13 - 21
apps/web/src/components/pricing/BillingPolicy.tsx

@@ -1,33 +1,25 @@
-/**
- * 收费政策区 - 3 张卡片(7 折中国价 / 预付按 token 计费 / Admin 后台定价)
- */
-const cards = [
-  {
-    title: '70% of China price',
-    body: 'All prices = DashScope price × 0.7. Models with cache-hit support get an even cheaper cache rate.',
-  },
-  {
-    title: 'Prepaid, metered per token',
-    body: 'Text: input/output billed separately. Image: per image / resolution. Speech: per character / second.',
-  },
-  {
-    title: 'Priced via Admin Panel',
-    body: 'All 236 models are priced by category; models without a confirmed price show as "pending".',
-  },
-] as const;
+import { useTranslations } from 'next-intl';
 
 export function BillingPolicy() {
+  const t = useTranslations('billing');
+
+  const cards = [
+    { tKey: 'c1_t' as const, dKey: 'c1_d' as const },
+    { tKey: 'c2_t' as const, dKey: 'c2_d' as const },
+    { tKey: 'c3_t' as const, dKey: 'c3_d' as const },
+  ];
+
   return (
     <section className="mt-10">
-      <h2 className="mb-3.5 text-lg font-extrabold">Billing policy &amp; discounts</h2>
+      <h2 className="mb-3.5 text-lg font-extrabold">{t('h2')}</h2>
       <div className="grid grid-cols-1 gap-[18px] md:grid-cols-3">
         {cards.map((card) => (
           <div
-            key={card.title}
+            key={card.tKey}
             className="rounded-[14px] border border-white/[0.08] bg-brand-card p-5"
           >
-            <b className="text-brand-purple-l">{card.title}</b>
-            <p className="mt-1.5 text-[13px] text-brand-muted">{card.body}</p>
+            <b className="text-brand-purple-l">{t(card.tKey)}</b>
+            <p className="mt-1.5 text-[13px] text-brand-muted">{t(card.dKey)}</p>
           </div>
         ))}
       </div>

+ 2 - 2
apps/web/src/components/pricing/CatalogTabs.tsx

@@ -1,6 +1,6 @@
 /**
  * 模型大全分类 Tabs - 对话/视觉/图像/语音四类(客户端切换)
- * 每类:推荐模型表(占位 USD 价,部分带 ✓ verified 徽标)+ <details> 全量模型清单(236 扫描数据)
+ * 每类:推荐模型表(稳定汇率本币价,部分带 ✓ verified 徽标)+ <details> 全量模型清单(236 扫描数据)
  */
 'use client';
 
@@ -17,7 +17,7 @@ const tagStyles: Record<TagKind, string> = {
   gray: 'text-brand-muted bg-[rgba(154,163,192,.1)] border-[rgba(154,163,192,.3)]',
 };
 
-// ── 推荐表行数据(价格 = 设计稿占位价,✓ 为已验证官方价)──
+// ── 推荐表行数据(价格 = 设计稿参考价,✓ 为已验证官方价)──
 type ChatRow = { id: string; label: string; tagKind: TagKind; verified?: boolean; ctx: string; usdIn: string; usdOut: string; caps: string[] };
 type VisionRow = { id: string; label: string; tagKind: TagKind; ctx: string; usdIn: string; usdOut: string; note: string };
 type ImageRow = { id: string; label: string; tagKind: TagKind; usdPerImage: string; note: string };

+ 1 - 1
apps/web/src/components/pricing/PriceTable.tsx

@@ -24,7 +24,7 @@ const tagStyles: Record<TagKind, string> = {
   gray: 'text-brand-muted bg-[rgba(154,163,192,.1)] border-[rgba(154,163,192,.3)]',
 };
 
-// 价格数据与设计稿 pricing.html 对齐(DashScope × 0.7 占位价)
+// 价格数据与设计稿 pricing.html 对齐(稳定汇率本币价)
 const rows: PriceRow[] = [
   { id: 'glm-5.2', nameKey: 'm_glm_name', tagKey: 'tag_flagship', tagKind: 'purple', usdIn: '$0.98', usdInCut: '$1.40', usdOut: '$3.08', usdOutCut: '$4.40' },
   { id: 'deepseek-v4', nameKey: 'm_dsv4_name', tagKey: 'tag_best', tagKind: 'green', usdIn: '$0.14', usdInCut: '$0.20', usdOut: '$0.28', usdOutCut: '$0.40' },

+ 2 - 2
apps/web/src/lib/seo.ts

@@ -13,7 +13,7 @@ export function siteUrl(): string {
   return u.replace(/\/$/, '');
 }
 
-/** 各页面 4 语言 title/description(本地化撰写,非直译) */
+/** 各页面 9 语言 title/description(本地化撰写,非直译) */
 type PageMeta = { title: string; desc: string };
 export const SEO_META: Record<Locale, Record<string, PageMeta>> = {
   vi: {
@@ -252,7 +252,7 @@ export const SEO_META: Record<Locale, Record<string, PageMeta>> = {
   },
 };
 
-/** 构建多语言 alternates(canonical + hreflang 4 语言 + x-default) */
+/** 构建多语言 alternates(canonical + hreflang 9 语言 + x-default) */
 export function alternatesFor(path: string, locale: string): Metadata['alternates'] {
   const base = siteUrl();
   const languages: Record<string, string> = {};

ファイルの差分が大きいため隠しています
+ 0 - 0
apps/web/tsconfig.tsbuildinfo


+ 9 - 7
docs/CHANGELOG.md

@@ -1,8 +1,14 @@
 # DoTouch.AI Changelog
 
-# DoTouch.AI Changelog
-
-## v1.6.0 (i18n-expansion) — 2026-08-09
+## v1.6.1 (final-review-fixes) — 2026-08-09
+**交叉复核修复(Kimi-K3 × GLM 5.2 双模型复核,13 项问题全修)**
+- H1 BillingPolicy 组件多语言化(9 语言 billing 命名空间),移除对客渲染的 "70% of China price" 与 "× 0.7"
+- H2 catalog 页移除硬编码 "DashScope × 0.7" 表述;H3 zh-TW 修复 5 处简体"低价"混入 + "中國國內價"残留;H4 zh-HK code_resend 全角括号改半角
+- M1 seo.ts 注释 4→9 语言;M2 PROJECT-OVERVIEW sitemap 36→81;M3 CHANGELOG 标题/v1.2.0 去重;M4 README 基线引用 v1.6.0;M5 en pricing.p 语法修复;M6 管理后台"× 0.7 批量定价"改"稳定汇率批量定价"
+- L1-L3 文档/注释/占位表述清理;pricing.p 旧 4 语言"USD & VND"统一为"USD & 当地货币"
+- 版本同步:VERSION / package.json ×2 / health → v1.6.1(git tag v1.6.1)
+
+ (i18n-expansion) — 2026-08-09
 **国际化扩展:9 语言 × 7 币种(官网全站)**
 - 新增 5 个语言环境:印尼语(id-ID)/ 马来语(ms-MY)/ 泰语(th-TH)/ 香港繁体(zh-HK)/ 沙特阿拉伯语(ar-SA,RTL 布局)
 - 全站 398 条文案 × 5 语言翻译(与既有 4 语言结构逐 key 一致);locale 切换器改下拉(9 项)
@@ -43,10 +49,6 @@
 - 性能基线:docs/seo/performance-baseline-v1.3.0.md
 - 站点 URL:NEXT_PUBLIC_SITE_URL(演示 localhost / 生产 dotouch.ai)
 
-## v1.2.0 (demo) — 2026-08-09
-
-
-
 ## v1.2.0 (demo) — 2026-08-09
 **里程碑:全功能本地演示版**(Docker 演示环境可完整走通)
 - 官网全站 8 路由落地 Next.js(首页/模型/详情/定价/模型大全 236/文档/控制台/管理后台)

+ 1 - 1
docs/PROJECT-OVERVIEW.md

@@ -91,7 +91,7 @@ User ──┬── ApiKey ──┬── ApiKeyEvent(Key 操作审计)
 ## 六、SEO 与性能(v1.3.0,P1 已完成)
 
 - 全页多语言 metadata(title/description/canonical/OG/Twitter)
-- sitemap.xml(36 条)+ robots.txt + IndexNow 推送
+- sitemap.xml(81 条)+ robots.txt + IndexNow 推送
 - JSON-LD:Organization / WebSite / Product / BreadcrumbList
 - 全站 SSG:9 语言全量静态化,sitemap 81 条 URL,TTFB 中位 14–18ms(基线:docs/seo/performance-baseline-v1.6.0.md)
 - 待办:P2 内容 SEO(博客)、P3 站内搜索/GA4(数据出境合规评估中)

+ 4 - 4
docs/design/web-v1.1.0/i18n.js

@@ -127,7 +127,7 @@ const I18N = {
     price_h1:"Bảng giá", price_sub:"Tất cả giá cực kỳ cạnh tranh. Hiển thị USD và VND theo tỷ giá hiện tại.",
     price_th_model:"Mô hình", price_th_in:"Đầu vào / 1M", price_th_out:"Đầu ra / 1M", price_th_save:"Tiết kiệm",
     price_rule:"Quy tắc tính phí", price_rule_p:"Phí = token × đơn giá, trừ từ số dư. Không thuê bao, không cam kết. Tỷ giá VND áp dụng tại thời điểm nạp tiền.",
-    price_faq:"Câu hỏi về giá", price_note:"* Giá đang là tạm tính, chờ xác nhận giá DashScope × 0.7.",
+    price_faq:"Câu hỏi về giá", price_note:"* Giá mang tính tham khảo; mức giá cuối chờ xác nhận từ DashScope.",
     /* ── 文档页 ── */
     docs_h1:"Tài liệu", docs_sub:"Bắt đầu nhanh, API Reference và quy tắc tính phí.",
     docs_sidebar_start:"Bắt đầu nhanh", docs_sidebar_api:"API Reference", docs_sidebar_errors:"Mã lỗi", docs_sidebar_billing:"Tính phí",
@@ -236,7 +236,7 @@ const I18N = {
     price_h1:"Pricing", price_sub:"All prices are unbeatable low. Shown in USD and VND at the current rate.",
     price_th_model:"Model", price_th_in:"Input / 1M", price_th_out:"Output / 1M", price_th_save:"You save",
     price_rule:"Billing rules", price_rule_p:"Cost = tokens × unit price, deducted from balance. No subscription, no commitment. VND rate applied at top-up.",
-    price_faq:"Pricing FAQ", price_note:"* Prices are placeholders pending DashScope × 0.7 confirmation.",
+    price_faq:"Pricing FAQ", price_note:"* Prices are indicative; final rates pending DashScope confirmation.",
     docs_h1:"Documentation", docs_sub:"Quickstart, API reference and billing rules.",
     docs_sidebar_start:"Quickstart", docs_sidebar_api:"API Reference", docs_sidebar_errors:"Error Codes", docs_sidebar_billing:"Billing",
     docs_start_h:"Quickstart", docs_start_p:"3 steps to call your first model.",
@@ -344,7 +344,7 @@ const I18N = {
     price_h1:"定价", price_sub:"所有价格 = 极致低价。以美元与越南盾按当前汇率显示。",
     price_th_model:"模型", price_th_in:"输入 / 1M", price_th_out:"输出 / 1M", price_th_save:"节省",
     price_rule:"扣费规则", price_rule_p:"费用 = token × 单价,从余额扣除。无订阅、无承诺。越南盾按充值时刻汇率结算。",
-    price_faq:"价格常见问题", price_note:"* 价格为占位值,待百炼 × 0.7 确认。",
+    price_faq:"价格常见问题", price_note:"* 价格为参考值,最终费率以百炼确认为准。",
     docs_h1:"文档", docs_sub:"快速开始、API 参考与计费规则。",
     docs_sidebar_start:"快速开始", docs_sidebar_api:"API 参考", docs_sidebar_errors:"错误码", docs_sidebar_billing:"计费",
     docs_start_h:"快速开始", docs_start_p:"三步调用你的第一个模型。",
@@ -452,7 +452,7 @@ const I18N = {
     price_h1:"定價", price_sub:"所有價格 = 中國國內價 低价。以美元與越南盾按當前匯率顯示。",
     price_th_model:"模型", price_th_in:"輸入 / 1M", price_th_out:"輸出 / 1M", price_th_save:"節省",
     price_rule:"扣費規則", price_rule_p:"費用 = token × 單價,從餘額扣除。無訂閱、無承諾。越南盾按儲值時刻匯率結算。",
-    price_faq:"價格常見問題", price_note:"* 價格為佔位值,待百煉 × 0.7 確認。",
+    price_faq:"價格常見問題", price_note:"* 價格為參考值,最終費率以百煉確認為準。",
     docs_h1:"文件", docs_sub:"快速開始、API 參考與計費規則。",
     docs_sidebar_start:"快速開始", docs_sidebar_api:"API 參考", docs_sidebar_errors:"錯誤碼", docs_sidebar_billing:"計費",
     docs_start_h:"快速開始", docs_start_p:"三步呼叫你的第一個模型。",

+ 1 - 1
docs/seo/seo-strategy-v1.0.md

@@ -76,7 +76,7 @@
 ### 3.2 页面标题模式
 - 首页:`DoTouch.AI – API AI giá rẻ cho Việt Nam (DeepSeek, GLM, Qwen)`
 - 模型页:`{模型名} API – Giá rẻ 30%, OpenAI Compatible | DoTouch.AI`
-- 定价页:`Bảng giá API AI | Giá bằng 70% Trung Quốc | DoTouch.AI`
+- 定价页:`Bảng giá API AI | Giá cực kỳ cạnh tranh | DoTouch.AI`
 
 ### 3.3 内容计划(后续阶段)
 - 博客/知识库(vi+en):"如何选择 LLM API"、"DeepSeek vs Qwen 对比"、"越南开发者 API 指南"(长尾入口)

この差分においてかなりの量のファイルが変更されているため、一部のファイルを表示していません