feat: i18n support

This commit is contained in:
JustSong 2025-02-01 23:52:42 +08:00
parent 33102c4586
commit b7f008cd72
3 changed files with 68 additions and 4 deletions

View File

@ -379,5 +379,28 @@
"promote": "Promote", "promote": "Promote",
"demote": "Demote" "demote": "Demote"
} }
},
"dashboard": {
"charts": {
"requests": {
"title": "Model Request Trend",
"tooltip": "Request Count"
},
"quota": {
"title": "Quota Usage Trend",
"tooltip": "Quota Used"
},
"tokens": {
"title": "Token Usage Trend",
"tooltip": "Token Count"
}
},
"statistics": {
"title": "Statistics",
"tooltip": {
"date": "Date",
"value": "Value"
}
}
} }
} }

View File

@ -379,5 +379,28 @@
"promote": "提升", "promote": "提升",
"demote": "降级" "demote": "降级"
} }
},
"dashboard": {
"charts": {
"requests": {
"title": "模型请求趋势",
"tooltip": "请求次数"
},
"quota": {
"title": "额度消费趋势",
"tooltip": "消费额度"
},
"tokens": {
"title": "Token 消费趋势",
"tooltip": "Token 数量"
}
},
"statistics": {
"title": "统计",
"tooltip": {
"date": "日期",
"value": "数值"
}
}
} }
} }

View File

@ -1,4 +1,5 @@
import React, { useEffect, useState } from 'react'; import React, { useEffect, useState } from 'react';
import { useTranslation } from 'react-i18next';
import { Card, Grid, Statistic } from 'semantic-ui-react'; import { Card, Grid, Statistic } from 'semantic-ui-react';
import { import {
LineChart, LineChart,
@ -53,6 +54,7 @@ const chartConfig = {
}; };
const Dashboard = () => { const Dashboard = () => {
const { t } = useTranslation();
const [data, setData] = useState([]); const [data, setData] = useState([]);
const [summaryData, setSummaryData] = useState({ const [summaryData, setSummaryData] = useState({
todayRequests: 0, todayRequests: 0,
@ -194,7 +196,7 @@ const Dashboard = () => {
<Card fluid className='chart-card'> <Card fluid className='chart-card'>
<Card.Content> <Card.Content>
<Card.Header> <Card.Header>
模型请求趋势 {t('dashboard.charts.requests.title')}
<span className='stat-value'>{summaryData.todayRequests}</span> <span className='stat-value'>{summaryData.todayRequests}</span>
</Card.Header> </Card.Header>
<div className='chart-container'> <div className='chart-container'>
@ -220,6 +222,11 @@ const Dashboard = () => {
borderRadius: '4px', borderRadius: '4px',
boxShadow: '0 2px 8px rgba(0,0,0,0.1)', boxShadow: '0 2px 8px rgba(0,0,0,0.1)',
}} }}
formatter={(value) => [
value,
t('dashboard.charts.requests.tooltip')
]}
labelFormatter={(label) => `${t('dashboard.tooltip.date')}: ${label}`}
/> />
<Line <Line
type='monotone' type='monotone'
@ -240,7 +247,7 @@ const Dashboard = () => {
<Card fluid className='chart-card'> <Card fluid className='chart-card'>
<Card.Content> <Card.Content>
<Card.Header> <Card.Header>
额度消费趋势 {t('dashboard.charts.quota.title')}
<span className='stat-value'> <span className='stat-value'>
${summaryData.todayQuota.toFixed(3)} ${summaryData.todayQuota.toFixed(3)}
</span> </span>
@ -268,6 +275,11 @@ const Dashboard = () => {
borderRadius: '4px', borderRadius: '4px',
boxShadow: '0 2px 8px rgba(0,0,0,0.1)', boxShadow: '0 2px 8px rgba(0,0,0,0.1)',
}} }}
formatter={(value) => [
value,
t('dashboard.charts.quota.tooltip')
]}
labelFormatter={(label) => `${t('dashboard.tooltip.date')}: ${label}`}
/> />
<Line <Line
type='monotone' type='monotone'
@ -288,7 +300,7 @@ const Dashboard = () => {
<Card fluid className='chart-card'> <Card fluid className='chart-card'>
<Card.Content> <Card.Content>
<Card.Header> <Card.Header>
Token 消费趋势 {t('dashboard.charts.tokens.title')}
<span className='stat-value'>{summaryData.todayTokens}</span> <span className='stat-value'>{summaryData.todayTokens}</span>
</Card.Header> </Card.Header>
<div className='chart-container'> <div className='chart-container'>
@ -314,6 +326,11 @@ const Dashboard = () => {
borderRadius: '4px', borderRadius: '4px',
boxShadow: '0 2px 8px rgba(0,0,0,0.1)', boxShadow: '0 2px 8px rgba(0,0,0,0.1)',
}} }}
formatter={(value) => [
value,
t('dashboard.charts.tokens.tooltip')
]}
labelFormatter={(label) => `${t('dashboard.tooltip.date')}: ${label}`}
/> />
<Line <Line
type='monotone' type='monotone'
@ -334,7 +351,7 @@ const Dashboard = () => {
{/* 模型使用统计 */} {/* 模型使用统计 */}
<Card fluid className='chart-card'> <Card fluid className='chart-card'>
<Card.Content> <Card.Content>
<Card.Header>统计</Card.Header> <Card.Header>{t('dashboard.statistics.title')}</Card.Header>
<div className='chart-container'> <div className='chart-container'>
<ResponsiveContainer width='100%' height={300}> <ResponsiveContainer width='100%' height={300}>
<BarChart data={modelData}> <BarChart data={modelData}>
@ -361,6 +378,7 @@ const Dashboard = () => {
borderRadius: '4px', borderRadius: '4px',
boxShadow: '0 2px 8px rgba(0,0,0,0.1)', boxShadow: '0 2px 8px rgba(0,0,0,0.1)',
}} }}
labelFormatter={(label) => `${t('dashboard.tooltip.date')}: ${label}`}
/> />
<Legend <Legend
wrapperStyle={{ wrapperStyle={{