Skip to content

Commit 30c6304

Browse files
committed
feat: optimize zh-cn translation and language toggle layout
1 parent 223c4f8 commit 30c6304

File tree

3 files changed

+109
-112
lines changed

3 files changed

+109
-112
lines changed

app/(main)/layout.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ function MainLayout({ children }: { children: React.ReactNode }) {
1616
<div className="flex w-full items-center gap-4 md:ml-auto md:gap-2 lg:gap-4">
1717
<div className="ml-auto flex-1 sm:flex-initial">
1818
</div>
19-
<ThemeToggle />
2019
<LanguageToggle />
20+
<ThemeToggle />
2121
<UserNav />
2222
</div>
2323
</header>

components/layout/lang-toggle.tsx

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,13 @@ import {
1212
import { Languages } from 'lucide-react';
1313

1414
const LOCALE_MAP: Record<string, string> = {
15+
'zh': '简体中文',
1516
'en': 'English',
16-
'zh': '中文',
1717
};
1818

1919
export function LanguageToggle() {
20-
// 使用导出的 Hook
2120
const { locale, switchLocale } = useClientLocale();
2221

23-
const currentLabel = locale ? LOCALE_MAP[locale] : 'Lang';
24-
2522
return (
2623
<DropdownMenu>
2724
<DropdownMenuTrigger asChild>

public/messages/zh.json

Lines changed: 107 additions & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
{
22
"home": {
3-
"power_by": " <github1>ZJUSCT/CSOJ</github1> 与 <github2>ZJUSCT/CSOJ-WebUI</github2> 强力驱动",
4-
"contests": "全部比赛",
3+
"power_by": "基于 <github1>ZJUSCT/CSOJ</github1> 与 <github2>ZJUSCT/CSOJ-WebUI</github2> 构建",
4+
"contests": "竞赛列表",
55
"submissions": "提交记录",
6-
"profile": "个人资料",
6+
"profile": "个人中心",
77
"theme": {
88
"toggleTheme": "切换主题",
9-
"toggleToDark": "切换到深色模式",
10-
"toggleToLight": "切换到浅色模式",
11-
"toggleToSystem": "切换到跟随系统"
9+
"toggleToDark": "切换至深色模式",
10+
"toggleToLight": "切换至浅色模式",
11+
"toggleToSystem": "跟随系统主题"
1212
},
1313
"user": {
1414
"profile": "个人资料",
@@ -17,236 +17,236 @@
1717
}
1818
},
1919
"contests": {
20-
"invalidDuration": "竞赛持续时间无效。",
21-
"starts": "开始",
22-
"ends": "结束",
20+
"invalidDuration": "竞赛时长设置无效",
21+
"starts": "开始时间",
22+
"ends": "结束时间",
2323
"to": "",
2424
"viewDetails": "查看详情",
2525
"registered": "已报名",
26-
"checking": "正在检查...",
27-
"register": "报名",
26+
"checking": "校验中...",
27+
"register": "立即报名",
2828
"loading": "加载中...",
29-
"registerForContest": "报名参加竞赛",
29+
"registerForContest": "竞赛报名",
3030
"status": {
3131
"upcoming": "即将开始",
3232
"ongoing": "进行中",
3333
"finished": "已结束",
3434
"ended": "已结束",
35-
"live": "实时"
35+
"live": "实时赛况"
3636
},
3737
"registration": {
38-
"successTitle": "成功",
39-
"successDescription": "您已成功报名参加竞赛。",
38+
"successTitle": "报名成功",
39+
"successDescription": "您已成功报名参加本次竞赛",
4040
"failTitle": "报名失败",
41-
"unexpectedError": "发生意外错误。"
41+
"unexpectedError": "发生未知错误,请稍后重试"
4242
},
4343
"list": {
44-
"loadFail": "加载竞赛列表失败",
45-
"noContests": "暂无可用竞赛"
44+
"loadFail": "加载竞赛列表失败",
45+
"noContests": "暂无可用竞赛"
4646
},
4747
"detail": {
48-
"loadFail": "加载竞赛详情失败",
49-
"notFound": "未找到竞赛。"
48+
"loadFail": "加载竞赛详情失败",
49+
"notFound": "未找到指定竞赛"
5050
},
5151
"description": {
52-
"title": "竞赛描述"
52+
"title": "竞赛说明"
5353
},
5454
"problems": {
55-
"title": "题目",
56-
"instruction": "选择一个题目查看详情并提交您的解决方案。",
57-
"none": "此竞赛未激活或暂无题目。"
55+
"title": "题目列表",
56+
"instruction": "请选择题目查看详情并提交解答",
57+
"none": "当前竞赛未激活或暂无题目"
5858
},
5959
"problemCard": {
60-
"id": "题目 ID",
60+
"id": "题目编号",
6161
"view": "查看题目"
6262
},
6363
"trend": {
6464
"title": "分数趋势",
65-
"description": "顶尖用户分数随时间的变化趋势。",
66-
"loadFail": "加载分数趋势数据失败。",
67-
"none": "暂无分数趋势数据。"
65+
"description": "顶尖选手得分随时间变化趋势图",
66+
"loadFail": "加载趋势数据失败",
67+
"none": "暂无趋势数据"
6868
},
6969
"leaderboard": {
7070
"title": "排行榜",
7171
"rank": "排名",
72-
"user": "用户",
72+
"user": "用户名",
7373
"totalScore": "总分",
74-
"loadFail": "加载排行榜数据失败",
75-
"none": "暂无分数记录。",
76-
"contestDetailsFail": "无法加载竞赛详情以显示排行榜头部信息。"
74+
"loadFail": "加载排行榜数据失败",
75+
"none": "暂无得分记录",
76+
"contestDetailsFail": "无法加载竞赛详情,无法显示排行榜头部信息"
7777
},
7878
"tabs": {
79-
"problems": "题目",
79+
"problems": "题目列表",
8080
"leaderboard": "排行榜"
8181
},
8282
"announcements": {
83-
"title": "公告",
83+
"title": "竞赛公告",
8484
"loadFail": "加载公告失败",
8585
"none": "暂无公告"
8686
}
8787
},
8888
"ProblemDetails": {
8989
"noProblem": {
9090
"title": "未选择题目",
91-
"description": "请选择一个题目以查看其详细信息。"
91+
"description": "请先选择要查看的题目"
9292
},
9393
"details": {
94-
"loadFail": "加载题目失败。您可能暂无权访问此题目。",
95-
"notFound": "未找到题目。",
96-
"id": "题目 ID"
94+
"loadFail": "加载题目失败,您可能暂无访问权限",
95+
"notFound": "未找到指定题目",
96+
"id": "题目编号"
9797
},
9898
"submitForm": {
99-
"title": "提交答案"
99+
"title": "提交解答"
100100
},
101101
"submissions": {
102-
"title": "您的提交记录",
103-
"none": "您尚未提交过此题目的任何解决方案。",
104-
"id": "提交 ID",
102+
"title": "提交历史",
103+
"none": "您尚未提交过本题的解答",
104+
"id": "提交编号",
105105
"status": "状态",
106-
"score": "分数",
107-
"date": "日期"
106+
"score": "得分",
107+
"date": "提交时间"
108108
}
109109
},
110110
"Profile": {
111111
"avatar": {
112-
"title": "头像",
113-
"description": "更新您的个人资料图片",
112+
"title": "头像设置",
113+
"description": "更新您的个人资料图片",
114114
"change": "更换头像",
115-
"uploading": "正在上传...",
115+
"uploading": "上传中...",
116116
"uploadSuccess": "头像更新成功!",
117117
"uploadFailTitle": "上传失败",
118-
"uploadFailDescription": "无法上传头像。"
118+
"uploadFailDescription": "头像上传失败,请重试"
119119
},
120120
"form": {
121121
"title": "个人信息",
122-
"description": "更新您的账户详细信息。用户名无法更改。",
122+
"description": "更新您的账户信息(用户名不可修改)",
123123
"username": "用户名",
124124
"nickname": "昵称",
125-
"nicknamePlaceholder": "您的显示名称",
125+
"nicknamePlaceholder": "请输入显示名称",
126126
"signature": "个性签名",
127-
"signaturePlaceholder": "一段简短的个人简介",
128-
"saving": "正在保存...",
129-
"saveChanges": "保存更改",
127+
"signaturePlaceholder": "请输入个人简介",
128+
"saving": "保存中...",
129+
"saveChanges": "保存修改",
130130
"updateSuccess": "个人资料更新成功!",
131131
"updateFailTitle": "更新失败",
132-
"updateFailDescription": "无法更新个人资料。",
133-
"nicknameRequired": "昵称是必填项"
132+
"updateFailDescription": "个人资料更新失败,请重试",
133+
"nicknameRequired": "昵称为必填项"
134134
},
135135
"token": {
136-
"title": "认证令牌 (Token)",
137-
"description": "这是您当前的会话令牌。请妥善保管,切勿泄露。",
136+
"title": "身份验证令牌",
137+
"description": "此为当前会话令牌,请妥善保管切勿泄露",
138138
"label": "您的令牌",
139139
"copySr": "复制令牌",
140-
"copySuccessTitle": "令牌已复制",
141-
"copySuccessDescription": "认证令牌已复制到您的剪贴板。",
140+
"copySuccessTitle": "令牌已复制",
141+
"copySuccessDescription": "身份验证令牌已复制到剪贴板",
142142
"expiresAt": "过期时间",
143-
"timeRemaining": "有效时间",
143+
"timeRemaining": "剩余有效期",
144144
"expired": "已过期"
145145
},
146146
"logout": "退出登录"
147147
},
148148
"auth": {
149149
"login": {
150-
"title": "登录到 CSOJ",
151-
"loadingDescription": "正在检查可用的登录方式...",
152-
"descriptionLocal": "输入您的凭据,或使用其他登录方式",
153-
"descriptionExternal": "请使用可用的登录方式。",
150+
"title": "登录 CSOJ",
151+
"loadingDescription": "正在检测可用登录方式...",
152+
"descriptionLocal": "请输入账号密码,或使用其他登录方式",
153+
"descriptionExternal": "请选择以下登录方式",
154154
"form": {
155155
"username": "用户名",
156156
"password": "密码",
157-
"usernameRequired": "用户名是必填项",
158-
"passwordRequired": "密码是必填项",
157+
"usernameRequired": "用户名不能为空",
158+
"passwordRequired": "密码不能为空",
159159
"loginButton": "登录",
160-
"loggingIn": "正在登录..."
160+
"loggingIn": "登录中..."
161161
},
162-
"separatorText": "或使用以下方式继续",
163-
"gitlabButton": "使用 GitLab 登录",
162+
"separatorText": "或使用以下方式登录",
163+
"gitlabButton": "GitLab 登录",
164164
"noAccount": "还没有账号?",
165-
"registerLink": "注册",
165+
"registerLink": "立即注册",
166166
"toast": {
167167
"successTitle": "登录成功!",
168168
"failTitle": "登录失败",
169-
"failDefault": "登录失败"
169+
"failDefault": "登录失败,请检查凭证"
170170
}
171171
},
172172
"register": {
173-
"title": "创建账户",
174-
"loadingDescription": "正在检查注册可用性...",
175-
"description": "输入您的详细信息以创建一个新的 CSOJ 账户",
173+
"title": "注册账户",
174+
"loadingDescription": "正在检测注册可用性...",
175+
"description": "请输入详细信息创建新的 CSOJ 账户",
176176
"disabled": {
177-
"title": "注册已禁用",
178-
"description": "通过用户名和密码注册账户的功能已禁用。",
179-
"instruction": "请返回登录页面并使用其他方式。",
177+
"title": "注册功能已关闭",
178+
"description": "当前暂不支持用户名密码方式注册",
179+
"instruction": "请返回登录页使用其他登录方式",
180180
"backToLogin": "返回登录"
181181
},
182182
"form": {
183183
"username": "用户名",
184184
"nickname": "昵称",
185185
"password": "密码",
186-
"nicknamePlaceholder": "您的显示名称",
187-
"usernameMinLength": "用户名至少需要 3 个字符",
188-
"nicknameRequired": "昵称是必填项",
189-
"passwordMinLength": "密码至少需要 6 个字符",
186+
"nicknamePlaceholder": "请输入显示名称",
187+
"usernameMinLength": "用户名至少需要3个字符",
188+
"nicknameRequired": "昵称为必填项",
189+
"passwordMinLength": "密码至少需要6个字符",
190190
"registerButton": "注册",
191-
"creatingAccount": "正在创建账户..."
191+
"creatingAccount": "创建账户中..."
192192
},
193193
"alreadyHaveAccount": "已有账户?",
194-
"loginLink": "登录",
194+
"loginLink": "立即登录",
195195
"toast": {
196196
"successTitle": "注册成功!",
197-
"successDescription": "您现在可以使用您的新账户登录。",
197+
"successDescription": "现在可以使用新账户登录",
198198
"failTitle": "注册失败",
199-
"failDefault": "注册失败"
199+
"failDefault": "注册失败,请重试"
200200
}
201201
}
202202
},
203203
"submissions": {
204204
"list": {
205205
"title": "我的提交记录",
206-
"description": "您所有提交的列表。",
207-
"loadFail": "加载提交记录失败",
208-
"none": "暂无提交记录",
206+
"description": "您所有的提交记录列表",
207+
"loadFail": "加载提交记录失败",
208+
"none": "暂无提交记录",
209209
"table": {
210-
"id": "ID",
211-
"problemId": "题目 ID",
210+
"id": "编号",
211+
"problemId": "题目编号",
212212
"status": "状态",
213-
"score": "分数",
213+
"score": "得分",
214214
"submittedAt": "提交时间"
215215
}
216216
},
217217
"details": {
218-
"loadFail": "加载提交详情失败",
219-
"notFound": "未找到提交记录。",
218+
"loadFail": "加载提交详情失败",
219+
"notFound": "未找到指定提交记录",
220220
"log": {
221221
"title": "实时日志",
222-
"description": "来自判题机的实时输出。选择一个步骤以查看其日志。"
222+
"description": "测评机实时输出,请选择步骤查看详细日志"
223223
},
224224
"info": {
225225
"title": "提交信息",
226226
"status": "状态",
227-
"score": "分数",
228-
"submitted": "提交于",
227+
"score": "得分",
228+
"submitted": "提交时间",
229229
"problem": "题目",
230230
"user": "用户",
231-
"cluster": "集群",
231+
"cluster": "测评集群",
232232
"node": "节点",
233-
"stepProgress": "第 {{current}} / {{total}} 步: {{name}}"
233+
"stepProgress": "第 {{current}} 步 / 共 {{total}} 步{{name}}"
234234
},
235235
"judgeInfo": {
236-
"title": "判题信息",
237-
"description": "这是判题过程最终步骤的原始 JSON 输出"
236+
"title": "测评信息",
237+
"description": "此为测评过程最终步骤的原始 JSON 输出"
238238
},
239239
"queue": {
240240
"position": "队列位置",
241-
"info": "在 {{cluster}} 队列中排在 #{{position}} 位"
241+
"info": "在 {{cluster}} 队列中排第 {{position}} 位"
242242
},
243243
"interrupt": {
244-
"button": "中断",
245-
"confirm": "您确定要中断此提交吗?此操作无法撤销。",
246-
"successTitle": "成功",
247-
"successDescription": "已发送中断提交的请求。",
248-
"failTitle": "错误",
249-
"failDefault": "中断提交失败"
244+
"button": "中断提交",
245+
"confirm": "确定要中断此提交吗?此操作不可撤销",
246+
"successTitle": "操作成功",
247+
"successDescription": "已发送中断提交请求",
248+
"failTitle": "操作失败",
249+
"failDefault": "中断提交失败,请重试"
250250
}
251251
}
252252
}

0 commit comments

Comments
 (0)