--- import Icon from './Icon.astro'; import PricingPlans from './PricingPlans.jsx'; import { PRICES, type T, type Lang } from '../i18n/strings'; interface Props { t: T; lang: Lang } const { t, lang } = Astro.props; const P = PRICES[lang]; const plansData = { monthly: t('price.monthly'), yearly: t('price.yearly'), save: t('price.save'), permo: t('price.permo'), popular: t('price.popular'), plans: [ { key: 'free', name: t('price.free'), price: P.free, desc: t('price.freedesc'), feats: [t('pf.free1'), t('pf.free2'), t('pf.free3'), t('pf.free4')], cta: t('price.cta_free'), ctaClass: 'pcta-out', highlight: false, }, { key: 'pro', name: t('price.pro'), price: P.pro, desc: t('price.prodesc'), feats: [t('pf.pro1'), t('pf.pro2'), t('pf.pro3'), t('pf.pro4'), t('pf.pro5')], cta: t('price.cta_pro'), ctaClass: 'pcta-white', highlight: true, }, { key: 'team', name: t('price.team'), price: P.team, desc: t('price.teamdesc'), feats: [t('pf.team1'), t('pf.team2'), t('pf.team3'), t('pf.team4')], cta: t('price.cta_team'), ctaClass: 'pcta-fill', highlight: false, }, ], }; // 功能对比表行:[名称键, free, pro, team];值可为字符串或 'check' / 'dash'。 const rows = [ { label: 'cmp.locations', free: '1', pro: t('cmp.loc_all'), team: t('cmp.loc_all') }, { label: 'cmp.data', free: t('cmp.daily'), pro: t('cmp.unlimited'), team: t('cmp.unlimited') }, { label: 'cmp.time', free: t('cmp.time_free'), pro: t('cmp.unlimited'), team: t('cmp.unlimited') }, { label: 'cmp.devices', free: '1', pro: '5', team: '10' }, { label: 'cmp.speed', free: 'dash', pro: 'check', team: 'check' }, { label: 'cmp.stream', free: 'dash', pro: 'check', team: 'check' }, { label: 'cmp.kill', free: 'dash', pro: 'check', team: 'check' }, { label: 'cmp.support', free: t('cmp.basic'), pro: t('cmp.basic'), team: t('cmp.priority') }, ]; function cell(v: string) { return v === 'check' ? 'yes' : v === 'dash' ? 'no' : 'tx'; } ---
{t('price.eyebrow')}

{t('price.h')}

{t('price.sub')}

{t('pay.title')}
{t('pay.body')}
{t('pay.store')} {t('pay.usdt')} Telegram @PangolinVPN_bot LINE @pangolinvpn buy@pangolin.vpn

{t('cmp.h')}

{rows.map((r) => ( {[r.free, r.pro, r.team].map((v) => ( ))} ))}
{t('cmp.feature')} {t('price.free')} {t('price.pro')} {t('price.team')}
{t(r.label)} {v === 'check' ? : v === 'dash' ? '—' : v}