新增 src/lib/locale.ts 作为统一多语言入口,覆盖前台支付链路、 管理后台、API/服务层错误文案,共 35 个文件。URL 参数 lang 全链路透传, 包括 Stripe return_url、页面跳转、layout html lang 属性等。 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
58 lines
1.7 KiB
TypeScript
58 lines
1.7 KiB
TypeScript
import type { Locale } from '@/lib/locale';
|
|
|
|
interface Summary {
|
|
total: number;
|
|
pending: number;
|
|
completed: number;
|
|
failed: number;
|
|
}
|
|
|
|
interface OrderSummaryCardsProps {
|
|
isDark: boolean;
|
|
locale: Locale;
|
|
summary: Summary;
|
|
}
|
|
|
|
export default function OrderSummaryCards({ isDark, locale, summary }: OrderSummaryCardsProps) {
|
|
const cardClass = [
|
|
'rounded-xl border p-3',
|
|
isDark ? 'border-slate-700 bg-slate-800/70' : 'border-slate-200 bg-slate-50',
|
|
].join(' ');
|
|
const labelClass = ['text-xs', isDark ? 'text-slate-400' : 'text-slate-500'].join(' ');
|
|
const labels =
|
|
locale === 'en'
|
|
? {
|
|
total: 'Total Orders',
|
|
pending: 'Pending',
|
|
completed: 'Completed',
|
|
failed: 'Closed/Failed',
|
|
}
|
|
: {
|
|
total: '总订单',
|
|
pending: '待支付',
|
|
completed: '已完成',
|
|
failed: '异常/关闭',
|
|
};
|
|
|
|
return (
|
|
<div className="mb-4 grid grid-cols-2 gap-3 sm:grid-cols-4">
|
|
<div className={cardClass}>
|
|
<div className={labelClass}>{labels.total}</div>
|
|
<div className="mt-1 text-xl font-semibold">{summary.total}</div>
|
|
</div>
|
|
<div className={cardClass}>
|
|
<div className={labelClass}>{labels.pending}</div>
|
|
<div className="mt-1 text-xl font-semibold">{summary.pending}</div>
|
|
</div>
|
|
<div className={cardClass}>
|
|
<div className={labelClass}>{labels.completed}</div>
|
|
<div className="mt-1 text-xl font-semibold">{summary.completed}</div>
|
|
</div>
|
|
<div className={cardClass}>
|
|
<div className={labelClass}>{labels.failed}</div>
|
|
<div className="mt-1 text-xl font-semibold">{summary.failed}</div>
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|