fix(website): 价格按语言分币种 —— 英文版显示美元(P0)
PRICES 原为中英共用一份人民币值 → 英文页显示 ¥ 不专业。改为 Record<Lang,...>: - zh: ¥0 / ¥25(年¥20) / ¥99(年¥79) - en: $0 / $3.99(年$3.19) / $13.99(年$11.19) 年付沿用 8 折 Pricing.astro 接收 lang 按语言取价;Site.astro 传入 lang。 构建产物核实:EN 页 0 处 ¥、ZH 页 0 处 $;红线扫描 0 命中。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -1,10 +1,11 @@
|
|||||||
---
|
---
|
||||||
import Icon from './Icon.astro';
|
import Icon from './Icon.astro';
|
||||||
import PricingPlans from './PricingPlans.jsx';
|
import PricingPlans from './PricingPlans.jsx';
|
||||||
import { PRICES, type T } from '../i18n/strings';
|
import { PRICES, type T, type Lang } from '../i18n/strings';
|
||||||
|
|
||||||
interface Props { t: T }
|
interface Props { t: T; lang: Lang }
|
||||||
const { t } = Astro.props;
|
const { t, lang } = Astro.props;
|
||||||
|
const P = PRICES[lang];
|
||||||
|
|
||||||
const plansData = {
|
const plansData = {
|
||||||
monthly: t('price.monthly'),
|
monthly: t('price.monthly'),
|
||||||
@@ -16,7 +17,7 @@ const plansData = {
|
|||||||
{
|
{
|
||||||
key: 'free',
|
key: 'free',
|
||||||
name: t('price.free'),
|
name: t('price.free'),
|
||||||
price: PRICES.free,
|
price: P.free,
|
||||||
desc: t('price.freedesc'),
|
desc: t('price.freedesc'),
|
||||||
feats: [t('pf.free1'), t('pf.free2'), t('pf.free3'), t('pf.free4')],
|
feats: [t('pf.free1'), t('pf.free2'), t('pf.free3'), t('pf.free4')],
|
||||||
cta: t('price.cta_free'),
|
cta: t('price.cta_free'),
|
||||||
@@ -26,7 +27,7 @@ const plansData = {
|
|||||||
{
|
{
|
||||||
key: 'pro',
|
key: 'pro',
|
||||||
name: t('price.pro'),
|
name: t('price.pro'),
|
||||||
price: PRICES.pro,
|
price: P.pro,
|
||||||
desc: t('price.prodesc'),
|
desc: t('price.prodesc'),
|
||||||
feats: [t('pf.pro1'), t('pf.pro2'), t('pf.pro3'), t('pf.pro4'), t('pf.pro5')],
|
feats: [t('pf.pro1'), t('pf.pro2'), t('pf.pro3'), t('pf.pro4'), t('pf.pro5')],
|
||||||
cta: t('price.cta_pro'),
|
cta: t('price.cta_pro'),
|
||||||
@@ -36,7 +37,7 @@ const plansData = {
|
|||||||
{
|
{
|
||||||
key: 'team',
|
key: 'team',
|
||||||
name: t('price.team'),
|
name: t('price.team'),
|
||||||
price: PRICES.team,
|
price: P.team,
|
||||||
desc: t('price.teamdesc'),
|
desc: t('price.teamdesc'),
|
||||||
feats: [t('pf.team1'), t('pf.team2'), t('pf.team3'), t('pf.team4')],
|
feats: [t('pf.team1'), t('pf.team2'), t('pf.team3'), t('pf.team4')],
|
||||||
cta: t('price.cta_team'),
|
cta: t('price.cta_team'),
|
||||||
|
|||||||
@@ -193,9 +193,17 @@ export function createT(lang: Lang): T {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 价格表(月 / 年),与 ui_kits/website/site.js 的 PRICES 同步,对齐 design/CLAUDE.md §7。 */
|
/** 价格表(月 / 年·按月),按语言分币种:zh=人民币、en=美元。年付约 8 折。
|
||||||
export const PRICES: Record<'free' | 'pro' | 'team', [string, string]> = {
|
* 对齐 design/CLAUDE.md §7;收款走客户端内兑换激活码,网页价仅为展示。 */
|
||||||
free: ['¥0', '¥0'],
|
export const PRICES: Record<Lang, Record<'free' | 'pro' | 'team', [string, string]>> = {
|
||||||
pro: ['¥25', '¥20'],
|
zh: {
|
||||||
team: ['¥99', '¥79'],
|
free: ['¥0', '¥0'],
|
||||||
|
pro: ['¥25', '¥20'],
|
||||||
|
team: ['¥99', '¥79'],
|
||||||
|
},
|
||||||
|
en: {
|
||||||
|
free: ['$0', '$0'],
|
||||||
|
pro: ['$3.99', '$3.19'],
|
||||||
|
team: ['$13.99', '$11.19'],
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ const headerT = {
|
|||||||
<Hero t={t} />
|
<Hero t={t} />
|
||||||
<Features t={t} />
|
<Features t={t} />
|
||||||
<WhySignup t={t} />
|
<WhySignup t={t} />
|
||||||
<Pricing t={t} />
|
<Pricing t={t} lang={lang} />
|
||||||
<Download t={t} />
|
<Download t={t} />
|
||||||
<Docs t={t} />
|
<Docs t={t} />
|
||||||
<CtaBand t={t} />
|
<CtaBand t={t} />
|
||||||
|
|||||||
Reference in New Issue
Block a user