From 13ae4d50dfed303b4c66ae25d10bd0bdd3bc571b Mon Sep 17 00:00:00 2001 From: fengruixiang <474182370@qq.com> Date: Mon, 27 Jul 2026 14:56:03 +0800 Subject: [PATCH] =?UTF-8?q?=20=20docs(justsolutionsWebV2):=20=E5=A4=9A?= =?UTF-8?q?=E5=9C=B0=E5=8C=BA=E8=AE=BE=E8=AE=A1=E5=9B=9E=E5=A1=AB=E5=9C=8B?= =?UTF-8?q?=E5=AE=B6=E9=81=B8=E9=A0=85=E4=B8=8E=20global=20=E7=AB=99?= =?UTF-8?q?=EF=BC=8CQ1/Q3=20=E6=A0=87=E6=B3=A8=E4=BF=AE=E8=AE=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - §02 新增「地区切换:页头/页尾的國家選項」小节 + Plans 按 region.subscription 分流 - §03 目录树加 global/,§07 币种表加「其他國家 · 无在线支付」 - §08 config 补 subscription / regions / markets,§09 加第 8 步与生成器执行顺序 - §12 Q1(兜底落 /global/en)、Q3(jp+hk+global)标为 2026-07-27 修订, 原决策用删除线保留追溯;§A 组件表补国家切换器 --- .../multi-region-i18n-design.html | 53 +++++++++++++++---- 1 file changed, 44 insertions(+), 9 deletions(-) diff --git a/docs/justsolutionsWebV2/multi-region-i18n-design.html b/docs/justsolutionsWebV2/multi-region-i18n-design.html index 88f2c6d..8bdeda1 100644 --- a/docs/justsolutionsWebV2/multi-region-i18n-design.html +++ b/docs/justsolutionsWebV2/multi-region-i18n-design.html @@ -297,6 +297,7 @@ .pill { font-family: var(--font-mono); font-size: 12px; padding: 2px 8px; border-radius: 6px; font-weight: 600; white-space: nowrap; } .pill.jp { color: var(--jp); background: var(--jp-soft); } .pill.hk { color: var(--hk); background: var(--hk-soft); } + .pill.gl { color: var(--ink-3); background: var(--line-soft); } /* ---------- code / tree ---------- */ .code { @@ -349,6 +350,7 @@ .q.pend .qn { color: var(--warn); background: var(--warn-soft); } .q .ans { display: block; margin-top: 7px; font-size: 13.5px; font-weight: 600; color: var(--accent-strong); } .q .ans.pend { color: var(--warn); } + .q .ans s { color: var(--ink-3); font-weight: 500; } /* 被推翻的旧决策:保留可追溯,但压低视觉权重 */ .q .qb strong { display: block; margin-bottom: 3px; } .q .qb { font-size: 14.5px; color: var(--ink-2); } .q .qb .opts { font-family: var(--font-mono); font-size: 12.5px; color: var(--ink-3); margin-top: 4px; } @@ -375,7 +377,7 @@ 路由 /{region}/{lang} 站点 Express + 静态托管 现有 geoip · translations.js · /api/* - 状态 Q1–5 已定 · Q6/7 待定 + 状态 Q1–5 已定(Q1·Q3 2026-07-27 修订)· Q6/7 待定 @@ -457,7 +459,8 @@
/hk/zh/{region}/{lang}(认不出 → 兜底 /hk/en)/{region}/{lang}(认不出 → 兜底 /global/en)ja / zh-HK / en。旧 jp/tc 迁移期做别名映射即可不断链。| 请求 | 处理 | 说明 |
|---|---|---|
/ | 302 → geoip 命中的 /{region}/{lang} | 无法识别 → 回落 /hk/en(Q1) |
/ | 302 → geoip 命中的 /{region}/{lang} | 无法识别 → 回落 /global/en(Q1 · 2026-07-27 修订) |
/{region} | 302 → /{region}/{defaultLang} | /jp → /jp/ja |
/{region}/{lang}/… | 从 public/{region}/ 提供静态内容 | 命中具体页面 |
/{region}/{lang}/plans | 该地区有在线订阅 → 内部改写成 plans-plus;没有 → 营销页 plans | 依据 region.subscription(非 geoip 国家);地址栏不变 |
/_shared/… | 提供跨地区共享资源 | css / js / img 公共部分 |
/api/… | 共享 BFF(带地区上下文) | 见 §06 |
/config.js | 动态注入运行时配置 | no-store,见 §08 |
geoip 只是落地猜测,访客必须能自己改。因此在页头(语言按钮左侧)与页尾各放一个国家选项,与语言切换器同构:选择进 URL,由服务端按路径重新渲染,可缓存、可分享、利于 hreflang。
+| 站点 | URL | 语言 | 在线订阅 |
|---|---|---|---|
| 香港 | /hk/{zh-HK,en}/ | 繁中 · 英文 | 有(plans-plus,市场 HKG) |
| 日本 | /jp/{ja,en}/ | 日文 · 英文 | 有(plans-plus,市场 JPN) |
| 其他國家 | /global/en/ | 仅英文 | 无 —— Plans 给英文营销页 |
/config.js 下发 regions(regionList()),切换器据此渲染;站点名走 i18n 键 region_{code}(缺键回落注册表 name)。新增地区仍只改 regions.js 一处,页面与切换器代码不动。/jp/ja/x → 香港站取 zh-HK);页面同名平移,目标站没有的页面回落(plans-plus → plans,pay-return → 首页);不带查询串 / hash —— 换国家是换上下文,另一个站读不懂本站参数。_shared/js/main.js 在地区页运行时注入到 .nav-inner 与 footer .footer-inner,不逐页改 HTML(plans-plus 这类不再由生成器管理的页面同样自动获得)。| 日本 JP | JPY | PayPay · JCB/信用卡 · Konbini 便利店 |
| 香港 HK | HKD | FPS 转数快 · AlipayHK · 信用卡(Stripe) |
| 其他國家 | — | 无在线支付 —— 只走线下渠道(试用申请 / 联络我们) |
| 其它 | … | 按落地地区补充 |
/config.js 保持 no-store,按请求路径注入正确的 region/lang。availableLangs 渲染,切换即跳到 /{region}/{targetLang}/{samePage}。regions 渲染,切换即跳到 /{targetRegion}/{lang}/{samePage}(见 §02)。public/jp/,落地日文排版与 ja.js/en.js。X-Region 中间件 + 让 countries/industries/plans 等按地区返回。/plans)301 到默认地区,保留一段时间兼容外链。regions.js 加 global 一行 → 重跑 build-regions.js(生成 public/global/pages)+ split-i18n.js(生成 global/i18n/en.js);裸域兜底改 global;main.js 注入页头/页尾国家选项。node scripts/build-regions.js → node scripts/split-i18n.js(后者要读前者产出的地区页来收 data-i18n 键)。两者都幂等。Q1–Q5 已拍板并回填到上文相关章节;Q6–Q7 待后续确认。
+Q1–Q5 已拍板并回填到上文相关章节;Q6–Q7 待后续确认。Q1 与 Q3 已于 2026-07-27 因「页头/页尾国家选项」需求修订——原决策保留在下方以便追溯。
en,即最终落 /hk/en/global/en(其他國家站)—— 与页头国家选项显示的站点一致,Plans 自然是英文营销版。/hk/enja / zh-HK / en;旧 jp/tc 迁移期做别名兼容X-Region 影响哪些 service。⏳ 待定 —— 实现时按接口逐一确认| 组件 | 位置(建议) | 职责 |
|---|---|---|
| 地区注册表 | server/regions.js | region → { defaultLang, availableLangs, currency, paymentMethods, … } |
| 地区注册表 | server/regions.js | region → { defaultLang, availableLangs, currency, market, paymentMethods, subscription };键序即国家选项的展示顺序 |
| region 解析中间件 | server/index.js | 解析 /{region}/{lang}、裸地区/裸域重定向、按地区托管静态 |
| geoip 落地 | server/geoip.js(复用) | 裸域 / 决定落地 region/lang(认不出 → hk/en) |
| geoip 落地 | server/geoip.js(复用) | 裸域 / 决定落地 region/lang(认不出 → global/en) |
| 国家选项(切换器) | public/_shared/js/main.js | 页头 + 页尾运行时注入,读 __APP_CONFIG__.regions,换站做语言/页面回落 |
| BFF 地区上下文中间件 | server/index.js | 读 X-Region → req.region |
| 支付门面路由 | server/routes/payments.js | 统一 /api/payments/*,按 region + method 选适配器 |
| 支付适配器 | server/services/payments/*.js | 一网关一适配器:createPayment · verifyWebhook · getStatus |
| i18n 引擎 | public/_shared/js/i18n.js | 加载共享 + 地区字典,渲染 data-i18n |
| BFF 客户端 | public/_shared/js/api.js | /api/* 请求自动带 X-Region / X-Lang |
| 配置注入 | /config.js(server/index.js) | 注入 region / lang / availableLangs / currency / paymentMethods |
| 配置注入 | /config.js(server/index.js) | 注入 region / lang / availableLangs / currency / paymentMethods / subscription / regions / markets |