chore(i18n): fill 729 missing zh-TW translation keys - #4488
Conversation
- 149 keys filled from zh-CN via s2t conversion - 580 remaining keys filled from vi locale (Chinese values) - zh-TW now has 4365 keys vs vi's 4177 (complete coverage + 188 extra)
WalkthroughExpansion of Traditional Chinese (zh-TW) locale with 730 new translation keys covering token-based billing tiers, cache pricing configurations, integration flows, token estimators, fee breakdowns, webhook settings, and pricing table UI elements. One formatting line removed. Changes
Estimated code review effort🎯 2 (Simple) | ⏱️ ~10 minutes Possibly related PRs
Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 3
🧹 Nitpick comments (1)
web/src/i18n/locales/zh-TW.json (1)
1-2: Recommendation: regenerate the file via project i18n tooling instead of ad-hoc imports.The two systemic problems above (Vietnamese leakage and partial s2t) suggest the upstream pipeline (custom s2t + vi.json import) bypassed the project's standard flow. Per the repo guidelines, prefer:
bun run i18n:extract # ensure zh-CN.json keys are current bun run i18n:sync # propagate missing keys to zh-TW (and other locales) bun run i18n:lint # validateThen run the new zh-TW values through OpenCC with the
s2twp.jsonconfig (Simplified → Traditional + Taiwan phrase mapping) so terminology (快取,建立,影片,登錄,儲值,帳號, …) matches what's already in the file. This will also avoid the broken-plural situation where_onevariants land in a different language than their_othercounterparts.As per coding guidelines: "Use CLI tools:
bun run i18n:extract,bun run i18n:sync,bun run i18n:lint."🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@web/src/i18n/locales/zh-TW.json` around lines 1 - 2, Regenerate zh-TW via the project's i18n pipeline instead of hand-editing: run the CLI flow (bun run i18n:extract, bun run i18n:sync, bun run i18n:lint) to ensure keys mirror zh-CN and avoid missing/plural mismatches, then convert the resulting zh-TW strings with OpenCC using the s2twp.json config to apply Taiwan-specific traditional mappings (so terms like 快取/建立/影片/登錄/儲值/帳號 match existing translations and _one/_other plural pairs remain in the same locale).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@web/src/i18n/locales/zh-TW.json`:
- Around line 3788-4367: The zh-TW.json file contains ~561 entries with
Vietnamese values (e.g., keys "Recharge Quota", "主模型", "模型加载中..." showing
Vietnamese text) instead of Traditional Chinese; fix by re-importing the correct
translations from zh-CN.json and converting Simplified-to-Traditional with the
project's i18n tooling (run the i18n sync command such as bun run i18n:sync or
the repo's equivalent) ensuring OpenCC s2t conversion is used (not vi.json),
replace the Vietnamese values in zh-TW.json with the converted Traditional
Chinese text and verify keys like "Recharge Quota", "主模型", "模型加载中..." now
contain Traditional Chinese.
- Around line 3640-3787: The zh-TW JSON section contains simplified characters
and inconsistent terminology (e.g., keys like "阶梯内 Token 数", "同时满足", "缓存创建-1小时
(cc1h)" use 简体/混用); run the i18n tooling (bun run i18n:sync && bun run
i18n:lint) and convert these new values with OpenCC s2twp, enforcing the
project's Taiwan variants and existing terminology mapping (缓存 → 快取, 创建 → 建立, 数
→ 數, 档 → 檔, 时 → 時, 满足 → 滿足, etc.), then update the entries for the affected keys
(e.g., "阶梯内 Token 数", "同时满足", "缓存创建-5分钟 (cc5)", "缓存创建-1小时 (cc1h)", "缓存创建 Token
(cc)") to use the standardized translations used elsewhere in the file.
- Line 4160: Remove the corrupted translation entry with key "设计版本" and value
"b80c3466cb6feafeb3990c7820e10e50" from all locale JSON files where it appears;
locate occurrences by searching for the exact key or hash and delete the
key/value pair (ensure trailing commas are adjusted to keep valid JSON), then
run a quick search across the repo to confirm no code references remain and run
the i18n build/check to verify no regressions.
---
Nitpick comments:
In `@web/src/i18n/locales/zh-TW.json`:
- Around line 1-2: Regenerate zh-TW via the project's i18n pipeline instead of
hand-editing: run the CLI flow (bun run i18n:extract, bun run i18n:sync, bun run
i18n:lint) to ensure keys mirror zh-CN and avoid missing/plural mismatches, then
convert the resulting zh-TW strings with OpenCC using the s2twp.json config to
apply Taiwan-specific traditional mappings (so terms like 快取/建立/影片/登錄/儲值/帳號
match existing translations and _one/_other plural pairs remain in the same
locale).
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 19176a30-3324-49a2-8e94-4196a0f301ff
📒 Files selected for processing (1)
web/src/i18n/locales/zh-TW.json
| "阶梯内 Token 数": "阶梯內 Token 数", | ||
| "同时满足": "同時满足", | ||
| "根据哪个维度的 Token 数量决定落在哪一档": "根据哪個维度的 Token 数量决定落在哪一檔", | ||
| "阶梯累进": "阶梯累进", | ||
| "含请求条件": "含请求条件", | ||
| "进入此档额外收费": "进入此檔额外收费", | ||
| "更新 Waffo Pancake 设置": "更新 Waffo Pancake 设置", | ||
| "第 {{n}} 档": "第 {{n}} 檔", | ||
| "开发者": "開發者", | ||
| "错误详情": "错误详情", | ||
| "更新易支付设置": "更新易支付设置", | ||
| "用量范围": "用量范围", | ||
| "所有 Token": "所有 Token", | ||
| "每百万 Token 价格": "每百万 Token 价格", | ||
| "日期": "日期", | ||
| "阶梯计费详情": "阶梯计费详情", | ||
| "新年促销": "新年促销", | ||
| "Token 类型": "Token 类型", | ||
| "输入 Token 数量,查看按当前阶梯配置的预计费用。": "输入 Token 数量,查看按当前阶梯配置的预计费用。", | ||
| "请输入 Store ID": "请输入 Store ID", | ||
| "输入 Token 数": "输入 Token 数", | ||
| "缓存创建-1小时": "缓存創建-1小時", | ||
| "输出 Token": "输出 Token", | ||
| "单价": "单价", | ||
| "阶梯序号": "阶梯序号", | ||
| "超过 {{count}} 个": "超过 {{count}} 個", | ||
| "充值完成后跳回的页面": "充值完成后跳回的页面", | ||
| "累进阶梯": "累进阶梯", | ||
| "用量分段计价,每一段各自按对应档位价格计费(类似电费阶梯)": "用量分段计价,每一段各自按對应檔位价格计费(类似电费阶梯)", | ||
| "缓存创建-5分钟 (cc5)": "缓存創建-5分钟 (cc5)", | ||
| "输出 Token 定价": "输出 Token 定价", | ||
| "预计费用": "预计费用", | ||
| "一次性支付,付款后自动返回": "一次性支付,付款后自动返回", | ||
| "通用缓存": "通用缓存", | ||
| "输入 Token 定价": "输入 Token 定价", | ||
| "计费明细": "计费明细", | ||
| "0=周日 1=周一 2=周二 3=周三 4=周四 5=周五 6=周六": "0=周日 1=周一 2=周二 3=周三 4=周四 5=周五 6=周六", | ||
| "值": "值", | ||
| "固定费": "固定费", | ||
| "见上方动态计费详情": "見上方动态计费详情", | ||
| "小计": "小计", | ||
| "请先选择不低于最低额度的充值金额": "请先选擇不低于最低额度的充值金额", | ||
| "该入口仅用于一次性余额充值": "该入口僅用于一次性余额充值", | ||
| "缓存创建 Token (cc)": "缓存創建 Token (cc)", | ||
| "选择金额后直接跳转到 Waffo Pancake 结账页,支付完成后会回到账户页。": "选擇金额后直接跳转到 Waffo Pancake 结账页,支付完成后会回到账户页。", | ||
| "条件乘数": "条件乘数", | ||
| "前 {{count}} 个": "前 {{count}} 個", | ||
| "变量": "变量", | ||
| "Token 用量范围": "Token 用量范围", | ||
| "阶梯判断依据": "阶梯判斷依据", | ||
| "启用后会按测试环境保存这组配置": "启用后会按测试环境保存这组配置", | ||
| "实际环境": "實际环境", | ||
| "规则版本": "规則版本", | ||
| "阶梯配置摘要": "阶梯配置摘要", | ||
| "添加条件组": "添加条件组", | ||
| "一次性余额充值": "一次性余额充值", | ||
| "Product ID": "Product ID", | ||
| "缓存读取 Token (cr)": "缓存读取 Token (cr)", | ||
| "分时缓存 (Claude)": "分時缓存 (Claude)", | ||
| "第 {{n}} 组": "第 {{n}} 组", | ||
| "输入 Tokens 阶梯": "输入 Tokens 阶梯", | ||
| "表达式错误": "表达式错误", | ||
| "兜底档": "兜底檔", | ||
| "缓存读取": "缓存读取", | ||
| "启用 Waffo Pancake": "启用 Waffo Pancake", | ||
| "档位标签": "檔位标签", | ||
| "时间条件": "時间条件", | ||
| "缓存创建价格(5分钟)": "缓存創建价格(5分钟)", | ||
| "Waffo Pancake 设置": "Waffo Pancake 设置", | ||
| "最低充值数量必须大于 0": "最低充值数量必须大于 0", | ||
| "预估额度": "预估额度", | ||
| "星期": "星期", | ||
| "缓存创建-5分钟": "缓存創建-5分钟", | ||
| "添加阶梯": "添加阶梯", | ||
| "最高档": "最高檔", | ||
| "函数": "函数", | ||
| "可选,用量达到此档时加收的固定费用": "可选,用量达到此檔時加收的固定费用", | ||
| "每个档位可设置 0~2 个条件(对 p 和 c),最后一档为兜底档无需条件。": "每個檔位可设置 0~2 個条件(對 p 和 c),最后一檔為兜底檔無需条件。", | ||
| "缓存创建价格(1小时)": "缓存創建价格(1小時)", | ||
| "测试环境 Webhook 验签公钥 Base64": "测试环境 Webhook 验签公钥 Base64", | ||
| "测试 Webhook 公钥": "测试 Webhook 公钥", | ||
| "固定阶梯": "固定阶梯", | ||
| "添加条件": "添加条件", | ||
| "阶梯计费": "阶梯计费", | ||
| "跨阶梯": "跨阶梯", | ||
| "当前入口状态": "当前入口状态", | ||
| "输出 Token 数 (c)": "输出 Token 数 (c)", | ||
| "命中档位": "命中檔位", | ||
| "表达式编辑": "表达式编辑", | ||
| "止": "止", | ||
| "付款完成后将自动回到账户页": "付款完成后将自动回到账户页", | ||
| "添加时间规则": "添加時间规則", | ||
| "立即充值": "立即充值", | ||
| "动态计费": "动态计费", | ||
| "根据总用量落在哪个档位,所有 Token 都按该档价格计费": "根据总用量落在哪個檔位,所有 Token 都按该檔价格计费", | ||
| "统一定价": "统一定价", | ||
| "输入计费表达式...": "输入计费表达式...", | ||
| "输入 Token 数 (p)": "输入 Token 数 (p)", | ||
| "Webhook 公钥": "Webhook 公钥", | ||
| "Expr 预览": "Expr 预览", | ||
| "支付方式图标": "支付方式图标", | ||
| "输出 Tokens 阶梯": "输出 Tokens 阶梯", | ||
| "1=一月 ... 12=十二月": "1=一月 ... 12=十二月", | ||
| "缓存创建价格-5分钟": "缓存創建价格-5分钟", | ||
| "Token 估算器": "Token 估算器", | ||
| "实际额度": "實际额度", | ||
| "上限": "上限", | ||
| "缓存创建-1小时 (cc1h)": "缓存創建-1小時 (cc1h)", | ||
| "添加时间条件": "添加時间条件", | ||
| "阶": "阶", | ||
| "添加更多档位": "添加更多檔位", | ||
| "新支付方式": "新支付方式", | ||
| "条件": "条件", | ||
| "缓存创建价格-1小时": "缓存創建价格-1小時", | ||
| "输入 Token 数量,查看按当前配置的预计费用。": "输入 Token 数量,查看按当前配置的预计费用。", | ||
| "月份": "月份", | ||
| "可选,填写图片 URL": "可选,填写图片 URL", | ||
| "请输入支付方式名称": "请输入支付方式名称", | ||
| "输入 Token": "输入 Token", | ||
| "易支付设置": "易支付设置", | ||
| "支付方式颜色": "支付方式颜色", | ||
| "测试环境": "测试环境", | ||
| "生产环境": "生產环境", | ||
| "请输入 Product ID": "请输入 Product ID", | ||
| "分档价格表": "分檔价格表", | ||
| "此档上限(Token 数)": "此檔上限(Token 数)", | ||
| "输出 Token 数": "输出 Token 数", | ||
| "价格根据用量档位和请求条件动态调整": "价格根据用量檔位和请求条件动态调整", | ||
| "Store ID": "Store ID", | ||
| "无限": "無限", | ||
| "预估环境": "预估环境", | ||
| "生产 Webhook 公钥": "生產 Webhook 公钥", | ||
| "当前金额未达到 Waffo Pancake 的最低充值要求": "当前金额未达到 Waffo Pancake 的最低充值要求", | ||
| "跨夜范围": "跨夜范围", | ||
| "输入阶梯": "输入阶梯", | ||
| "输出阶梯": "输出阶梯", | ||
| "请输入商户 ID": "请输入商户 ID", | ||
| "缓存创建-1h": "缓存創建-1h", | ||
| "生产环境 Webhook 验签公钥 Base64": "生產环境 Webhook 验签公钥 Base64", | ||
| "档": "檔", | ||
| "时区": "時区", | ||
| "含时间条件": "含時间条件", | ||
| "无条件(兜底档)": "無条件(兜底檔)", | ||
| "充值价格必须大于 0": "充值价格必须大于 0", | ||
| "将额外乘以上述价格": "将额外乘以上述价格", | ||
| "API 私钥": "API 私钥", | ||
| "缓存创建": "缓存創建", | ||
| "Waffo Pancake": "Waffo Pancake", |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Find newly added zh-TW values that still contain simplified-only characters,
# and count occurrences of the inconsistent 缓存/创建 vs 快取/建立 terminology.
python3 - <<'PY'
import json, re
with open('web/src/i18n/locales/zh-TW.json', encoding='utf-8') as f:
data = json.load(f)['translation']
simp_only = set('阶档数时满维决据进条缓创输验选适该项钥钟际钱账务图视频边业级历题问统计运营议级')
bad = [(k, v) for k, v in data.items()
if isinstance(v, str) and any(c in simp_only for c in v)]
print(f'Values with simplified-only chars: {len(bad)}')
for k, v in bad[:15]:
print(f' {k!r} -> {v!r}')
kuai = sum(1 for v in data.values() if isinstance(v, str) and '快取' in v)
huan = sum(1 for v in data.values() if isinstance(v, str) and '緩存' in v or '缓存' in v)
jianli = sum(1 for v in data.values() if isinstance(v, str) and '建立' in v)
chuangjian = sum(1 for v in data.values() if isinstance(v, str) and '創建' in v or '创建' in v)
print(f'快取 occurrences: {kuai}, 緩存/缓存 occurrences: {huan}')
print(f'建立 occurrences: {jianli}, 創建/创建 occurrences: {chuangjian}')
PYRepository: QuantumNous/new-api
Length of output: 676
Fix incomplete Traditional Chinese conversion and terminology inconsistency in zh-TW.json entries.
The new entries contain 86 values with simplified-only characters still present (阶, 档, 数, 时, etc.) and split terminology:
- File predominantly uses 快取 (81 times) and 建立 (86 times) for "cache" and "create"
- New entries introduce 緩存/缓存 (15 times) and 創建/创建 (11 times), creating inconsistent UI terminology
Examples:
- Line 3641:
"阶梯内 Token 数"should be"階梯內 Token 數" - Line 3642:
"同时满足"should be"同時滿足" - Cache entries use
緩存創建instead of the existing快取建立pattern throughout the file
Regenerate this section using proper i18n tooling as per coding guidelines:
bun run i18n:sync
bun run i18n:lintRun values through OpenCC s2twp (Taiwan phrase variant) to align 缓存→快取, 创建→建立, and other terminology with the rest of the file.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@web/src/i18n/locales/zh-TW.json` around lines 3640 - 3787, The zh-TW JSON
section contains simplified characters and inconsistent terminology (e.g., keys
like "阶梯内 Token 数", "同时满足", "缓存创建-1小时 (cc1h)" use 简体/混用); run the i18n tooling
(bun run i18n:sync && bun run i18n:lint) and convert these new values with
OpenCC s2twp, enforcing the project's Taiwan variants and existing terminology
mapping (缓存 → 快取, 创建 → 建立, 数 → 數, 档 → 檔, 时 → 時, 满足 → 滿足, etc.), then update the
entries for the affected keys (e.g., "阶梯内 Token 数", "同时满足", "缓存创建-5分钟 (cc5)",
"缓存创建-1小时 (cc1h)", "缓存创建 Token (cc)") to use the standardized translations used
elsewhere in the file.
| " + Web搜索 {{count}}次 / 1K 次 * {{symbol}}{{price}} * {{ratioType}} {{ratio}}_one": " + Tìm kiếm Web {{count}} lần / 1K lần * {{symbol}}{{price}} * {{ratioType}} {{ratio}}", | ||
| " + 文件搜索 {{count}}次 / 1K 次 * {{symbol}}{{price}} * {{ratioType}} {{ratio}}_one": " + Tìm kiếm tệp {{count}} lần / 1K lần * {{symbol}}{{price}} * {{ratioType}} {{ratio}}", | ||
| "Haiku 模型": "Model Haiku", | ||
| "Opus 模型": "Model Opus", | ||
| "Recharge Quota": "Hạn ngạch nạp tiền", | ||
| "Sonnet 模型": "Model Sonnet", | ||
| "主模型": "Model chính", | ||
| "仅用于换算,实际保存的是额度": "Chỉ dùng để quy đổi, giá trị lưu thực tế là hạn ngạch", | ||
| "共 {{count}} 个密钥_one": "{{count}} khóa", | ||
| "已为 {{count}} 个模型设置{{type}}_one": "Đã đặt {{type}} cho {{count}} mô hình", | ||
| "已删除 {{count}} 条失效兑换码_one": "Đã xóa {{count}} mã đổi thưởng hết hạn", | ||
| "已新增 {{count}} 个模型:{{list}}_one": "Đã thêm {{count}} mô hình: {{list}}", | ||
| "已选择 {{count}} 个模型_one": "Đã chọn {{count}} mô hình", | ||
| "搜索规则(类型 / 路径 / 来源 / 目标)": "Tìm kiếm quy tắc (loại / đường dẫn / nguồn / đích)", | ||
| "模型列表": "Danh sách mô hình", | ||
| "模型列表,使用逗号分隔,例如:gpt-3.5-turbo,gpt-4": "Danh sách mô hình, phân tách bằng dấu phẩy, ví dụ: gpt-3.5-turbo,gpt-4", | ||
| "模型别名": "Bí danh mô hình", | ||
| "模型加载中...": "Đang tải mô hình...", | ||
| "模型参数": "Tham số mô hình", | ||
| "模型名称包含": "Tên mô hình chứa", | ||
| "模型名称正则": "Regex tên mô hình", | ||
| "模型库": "Thư viện mô hình", | ||
| "模型排序": "Sắp xếp mô hình", | ||
| "模型映射": "Ánh xạ mô hình", | ||
| "模型映射关系": "Quan hệ ánh xạ mô hình", | ||
| "模型权限": "Quyền mô hình", | ||
| "模型状态": "Trạng thái mô hình", | ||
| "模型类型": "Loại mô hình", | ||
| "模型设置": "Cài đặt mô hình", | ||
| "模型详情": "Chi tiết mô hình", | ||
| "模型速率限制": "Giới hạn tốc độ mô hình", | ||
| "模型重定向,JSON格式,例如:{\"gpt-3.5-turbo\": \"gpt-3.5-turbo-0613\"}": "Chuyển hướng mô hình, định dạng JSON, ví dụ: {\"gpt-3.5-turbo\": \"gpt-3.5-turbo-0613\"}", | ||
| "模型限制": "Giới hạn mô hình", | ||
| "模糊匹配": "Khớp mờ", | ||
| "欢迎回来": "Chào mừng trở lại", | ||
| "欢迎回来!": "Chào mừng trở lại!", | ||
| "正在使用": "Đang sử dụng", | ||
| "正在加载...": "Đang tải...", | ||
| "正在处理": "Đang xử lý", | ||
| "正在导出...": "Đang xuất...", | ||
| "正在提交...": "Đang gửi...", | ||
| "正在更新...": "Đang cập nhật...", | ||
| "正在检查数据库一致性,请稍候...": "Đang kiểm tra tính nhất quán của cơ sở dữ liệu, vui lòng đợi...", | ||
| "正在测试...": "Đang kiểm tra...", | ||
| "正在登录...": "Đang đăng nhập...", | ||
| "正在验证...": "Đang xác minh...", | ||
| "每日签到获得": "Nhận được từ đăng nhập hàng ngày", | ||
| "比率": "Tỷ lệ", | ||
| "永久": "Vĩnh viễn", | ||
| "永久有效": "Có hiệu lực vĩnh viễn", | ||
| "没有可用的模型": "Không có mô hình khả dụng", | ||
| "没有可用的通道": "Không có kênh khả dụng", | ||
| "没有找到相关结果": "Không tìm thấy kết quả liên quan", | ||
| "没有权限": "Không có quyền", | ||
| "没有权限执行此操作": "Không có quyền thực hiện thao tác này", | ||
| "注册成功,请登录": "Đăng ký thành công, vui lòng đăng nhập", | ||
| "注册新用户": "Đăng ký người dùng mới", | ||
| "注册时间": "Thời gian đăng ký", | ||
| "注册用户": "Người dùng đã đăng ký", | ||
| "注册设置": "Cài đặt đăng ký", | ||
| "注意:": "Lưu ý: ", | ||
| "注意:修改密码后,所有已登录的设备将被强制登出。": "Lưu ý: Sau khi thay đổi mật khẩu, tất cả các thiết bị đã đăng nhập sẽ bị buộc đăng xuất.", | ||
| "注意:所有配置更改在保存后立即生效。": "Lưu ý: Tất cả các thay đổi cấu hình có hiệu lực ngay sau khi lưu.", | ||
| "注意:请确保您的邮箱地址正确,否则您将无法找回密码。": "Lưu ý: Vui lòng đảm bảo địa chỉ email của bạn là chính xác, nếu không bạn sẽ không thể khôi phục mật khẩu của mình.", | ||
| "测试供应商": "Kiểm tra nhà cung cấp", | ||
| "测试全部": "Kiểm tra tất cả", | ||
| "测试全部失败通道": "Kiểm tra tất cả các kênh thất bại", | ||
| "测试全部通道": "Kiểm tra tất cả các kênh", | ||
| "测试失败,详情:": "Kiểm tra thất bại, chi tiết: ", | ||
| "测试完成": "Kiểm tra hoàn tất", | ||
| "测试成功": "Kiểm tra thành công", | ||
| "测试成功,耗时 ": "Kiểm tra thành công, mất ", | ||
| "测试模型": "Mô hình kiểm tra", | ||
| "测试模型耗时": "Thời gian kiểm tra mô hình", | ||
| "测试渠道": "Kênh kiểm tra", | ||
| "测试结果": "Kết quả kiểm tra", | ||
| "测试耗时": "Thời gian kiểm tra", | ||
| "测试通道": "Kênh kiểm tra", | ||
| "浏览": "Duyệt", | ||
| "消息": "Tin nhắn", | ||
| "消息已清空": "Tin nhắn đã được xóa", | ||
| "消息详情": "Chi tiết tin nhắn", | ||
| "消耗": "Tiêu thụ", | ||
| "添加 IP": "Thêm IP", | ||
| "添加 IP 到白名单": "Thêm IP vào danh sách trắng", | ||
| "添加 IP 到黑名单": "Thêm IP vào danh sách đen", | ||
| "添加供应商": "Thêm nhà cung cấp", | ||
| "添加充值记录": "Thêm hồ sơ nạp tiền", | ||
| "添加分组倍率": "Thêm tỷ lệ nhóm", | ||
| "添加域名": "Thêm tên miền", | ||
| "添加域名到白名单": "Thêm tên miền vào danh sách trắng", | ||
| "添加域名到黑名单": "Thêm tên miền vào danh sách đen", | ||
| "添加失败": "Thêm thất bại", | ||
| "添加失败,请重试": "Thêm thất bại, vui lòng thử lại", | ||
| "添加子渠道": "Thêm kênh phụ", | ||
| "添加密钥": "Thêm khóa", | ||
| "添加屏蔽词": "Thêm từ bị chặn", | ||
| "添加新分组": "Thêm nhóm mới", | ||
| "添加新密钥": "Thêm khóa mới", | ||
| "添加新模型": "Thêm mô hình mới", | ||
| "添加新渠道": "Thêm kênh mới", | ||
| "添加新用户": "Thêm người dùng mới", | ||
| "添加新通道": "Thêm kênh mới", | ||
| "添加标签": "Thêm thẻ", | ||
| "添加模型倍率": "Thêm tỷ lệ mô hình", | ||
| "添加通道": "Thêm kênh", | ||
| "清理": "Dọn dẹp", | ||
| "清理历史日志": "Dọn dẹp nhật ký lịch sử", | ||
| "清理成功": "Dọn dẹp thành công", | ||
| "清理数据": "Dọn dẹp dữ liệu", | ||
| "清理日志": "Dọn dẹp nhật ký", | ||
| "清理未使用的模型": "Dọn dẹp các mô hình không sử dụng", | ||
| "清空历史记录": "Xóa lịch sử", | ||
| "清空对话": "Xóa cuộc trò chuyện", | ||
| "清空对话记录": "Xóa hồ sơ cuộc trò chuyện", | ||
| "清空所有数据": "Xóa tất cả dữ liệu", | ||
| "清空日志": "Xóa nhật ký", | ||
| "清空测试结果": "Xóa kết quả kiểm tra", | ||
| "渠道ID": "ID kênh", | ||
| "渠道列表": "Danh sách kênh", | ||
| "渠道别名": "Bí danh kênh", | ||
| "渠道占位符": "Trình giữ chỗ kênh", | ||
| "渠道名称": "Tên kênh", | ||
| "渠道名称/备注": "Tên kênh/Ghi chú", | ||
| "渠道已禁用": "Kênh đã bị vô hiệu hóa", | ||
| "渠道排序": "Sắp xếp kênh", | ||
| "渠道测试": "Kiểm tra kênh", | ||
| "渠道状态": "Trạng thái kênh", | ||
| "渠道类型": "Loại kênh", | ||
| "渠道设置": "Cài đặt kênh", | ||
| "渠道详情": "Chi tiết kênh", | ||
| "渠道配置": "Cấu hình kênh", | ||
| "渠道重定向": "Chuyển hướng kênh", | ||
| "温馨提示": "Lời nhắc nhở ấm áp", | ||
| "渲染": "Kết xuất", | ||
| "源码": "Mã nguồn", | ||
| "满": "Đầy", | ||
| "激活": "Kích hoạt", | ||
| "点击": "Nhấp", | ||
| "点击上传": "Nhấp để tải lên", | ||
| "点击修改": "Nhấp để sửa đổi", | ||
| "点击复制": "Nhấp để sao chép", | ||
| "点击查看": "Nhấp để xem", | ||
| "点击查看详细错误信息": "Nhấp để xem thông tin lỗi chi tiết", | ||
| "点击添加": "Nhấp để thêm", | ||
| "点击生成": "Nhấp để tạo", | ||
| "点击登录": "Nhấp để đăng nhập", | ||
| "点击进行验证": "Nhấp để xác minh", | ||
| "点击重试": "Nhấp để thử lại", | ||
| "点击链接重置密码": "Nhấp vào liên kết để đặt lại mật khẩu", | ||
| "点击阅读": "Nhấp để đọc", | ||
| "版": "Phiên bản", | ||
| "版本": "Phiên bản", | ||
| "版本号": "Số phiên bản", | ||
| "特惠": "Ưu đãi đặc biệt", | ||
| "状态更新时间": "Thời gian cập nhật trạng thái", | ||
| "生成": "Tạo", | ||
| "生成中...": "Đang tạo...", | ||
| "生成兑换码": "Tạo mã đổi thưởng", | ||
| "生成失败": "Tạo thất bại", | ||
| "生成成功": "Tạo thành công", | ||
| "生成新密钥": "Tạo khóa mới", | ||
| "生成时间": "Thời gian tạo", | ||
| "生成访问令牌": "Tạo mã thông báo truy cập", | ||
| "生效时间": "Thời gian hiệu lực", | ||
| "用于 Claude 3 预测输出,请前往": "Đối với đầu ra dự đoán Claude 3, vui lòng truy cập", | ||
| "用于 DALL-E 2 图片生成,请前往": "Đối với việc tạo hình ảnh DALL-E 2, vui lòng truy cập", | ||
| "用于 DALL-E 3 图片生成,请前往": "Đối với việc tạo hình ảnh DALL-E 3, vui lòng truy cập", | ||
| "用于 UI 显示": "Dùng cho hiển thị UI", | ||
| "用于非 OpenAI 格式的 Gemini/Vertex 渠道": "Dành cho các kênh Gemini/Vertex không phải định dạng OpenAI", | ||
| "用户 ID": "ID người dùng", | ||
| "用户 ID 或用户名": "ID người dùng hoặc tên người dùng", | ||
| "用户ID": "ID người dùng", | ||
| "用户个人设置": "Cài đặt cá nhân người dùng", | ||
| "用户中心": "Trung tâm người dùng", | ||
| "用户分组设置": "Cài đặt nhóm người dùng", | ||
| "用户列表": "Danh sách người dùng", | ||
| "用户创建成功,密码为": "Người dùng được tạo thành công, mật khẩu là", | ||
| "用户在线": "Người dùng trực tuyến", | ||
| "用户头像": "Ảnh đại diện người dùng", | ||
| "用户密码": "Mật khẩu người dùng", | ||
| "用户已存在": "Người dùng đã tồn tại", | ||
| "用户已禁用": "Người dùng đã bị vô hiệu hóa", | ||
| "用户总数": "Tổng số người dùng", | ||
| "用户指南": "Hướng dẫn người dùng", | ||
| "用户权限": "Quyền người dùng", | ||
| "用户注册": "Đăng ký người dùng", | ||
| "用户注册设置": "Cài đặt đăng ký người dùng", | ||
| "用户登录": "Đăng nhập người dùng", | ||
| "用户设置": "Cài đặt người dùng", | ||
| "用户详情": "Chi tiết người dùng", | ||
| "用户重置密码": "Đặt lại mật khẩu người dùng", | ||
| "用户额度": "Hạn ngạch người dùng", | ||
| "用户额度设置": "Cài đặt hạn ngạch người dùng", | ||
| "用途": "Mục đích", | ||
| "申请": "Đăng ký", | ||
| "申请时间": "Thời gian đăng ký", | ||
| "电子邮箱": "Email", | ||
| "画图": "Vẽ", | ||
| "画图接口": "Giao diện vẽ", | ||
| "留空则不修改": "Để trống để không sửa đổi", | ||
| "留空则不修改密码": "Để trống để không thay đổi mật khẩu", | ||
| "留空则使用默认值": "Để trống để sử dụng giá trị mặc định", | ||
| "留空则使用默认设置": "Để trống để sử dụng cài đặt mặc định", | ||
| "留空则禁用": "Để trống để vô hiệu hóa", | ||
| "留空则自动生成": "Để trống để tự động tạo", | ||
| "登录/注册": "Đăng nhập/Đăng ký", | ||
| "登录失败": "Đăng nhập thất bại", | ||
| "登录失败,请重试": "Đăng nhập thất bại, vui lòng thử lại", | ||
| "登录成功": "Đăng nhập thành công", | ||
| "登录方式": "Phương thức đăng nhập", | ||
| "登录日志": "Nhật ký đăng nhập", | ||
| "登录注册": "Đăng nhập & Đăng ký", | ||
| "登录设置": "Cài đặt đăng nhập", | ||
| "登录账户": "Đăng nhập tài khoản", | ||
| "登录验证": "Xác minh đăng nhập", | ||
| "监听端口": "Cổng lắng nghe", | ||
| "监控": "Giám sát", | ||
| "监控地址": "Địa chỉ giám sát", | ||
| "监控管理": "Quản lý giám sát", | ||
| "目前仅支持": "Hiện tại chỉ hỗ trợ", | ||
| "目前支持": "Hiện tại hỗ trợ", | ||
| "目前支持的变量": "Các biến hiện được hỗ trợ", | ||
| "目标": "Mục tiêu", | ||
| "目标 URL": "URL mục tiêu", | ||
| "目标地址": "Địa chỉ mục tiêu", | ||
| "直连": "Kết nối trực tiếp", | ||
| "相关设置": "Cài đặt liên quan", | ||
| "真实请求时间": "Thời gian yêu cầu thực", | ||
| "确定删除": "Xác nhận xóa", | ||
| "确定删除此令牌?": "Bạn có chắc chắn muốn xóa mã thông báo này không?", | ||
| "确定删除此兑换码?": "Bạn có chắc chắn muốn xóa mã đổi thưởng này không?", | ||
| "确定删除此公告?": "Bạn có chắc chắn muốn xóa thông báo này không?", | ||
| "确定删除此分组?": "Bạn có chắc chắn muốn xóa nhóm này không?", | ||
| "确定删除此密钥?": "Bạn có chắc chắn muốn xóa khóa này không?", | ||
| "确定删除此模型?": "Bạn có chắc chắn muốn xóa mô hình này không?", | ||
| "确定删除此渠道?": "Bạn có chắc chắn muốn xóa kênh này không?", | ||
| "确定删除此用户?": "Bạn có chắc chắn muốn xóa người dùng này không?", | ||
| "确定删除此通道?": "Bạn có chắc chắn muốn xóa kênh này không?", | ||
| "确定要删除吗?": "Bạn có chắc chắn muốn xóa không?", | ||
| "确定要删除所选的 {{count}} 个令牌吗?_one": "Bạn có chắc chắn muốn xóa {{count}} mã thông báo đã chọn không?", | ||
| "确定要删除所选的 {{count}} 个模型吗?_one": "Bạn có chắc chắn muốn xóa {{count}} mô hình đã chọn không?", | ||
| "确认修改": "Xác nhận sửa đổi", | ||
| "确认提交": "Xác nhận gửi", | ||
| "确认支付": "Xác nhận thanh toán", | ||
| "确认清除": "Xác nhận xóa", | ||
| "确认重置": "Xác nhận đặt lại", | ||
| "确认重置密钥?": "Xác nhận đặt lại khóa?", | ||
| "示例:": "Ví dụ: ", | ||
| "社群": "Cộng đồng", | ||
| "禁用 Passkey": "Vô hiệu hóa Passkey", | ||
| "禁用两步验证(2FA)": "Vô hiệu hóa xác thực hai yếu tố (2FA)", | ||
| "禁用成功": "Vô hiệu hóa thành công", | ||
| "禁用所有密钥": "Vô hiệu hóa tất cả các khóa", | ||
| "禁用注册": "Vô hiệu hóa đăng ký", | ||
| "禁用用户": "Vô hiệu hóa người dùng", | ||
| "禁用通道": "Vô hiệu hóa kênh", | ||
| "私有": "Riêng tư", | ||
| "私有令牌": "Mã thông báo riêng tư", | ||
| "积分": "Điểm", | ||
| "积分兑换": "Đổi điểm", | ||
| "积分记录": "Hồ sơ điểm", | ||
| "立即注册": "Đăng ký ngay", | ||
| "立即登录": "Đăng nhập ngay", | ||
| "立即验证": "Xác minh ngay", | ||
| "站点名称": "Tên trang web", | ||
| "站点图标": "Biểu tượng trang web", | ||
| "站点地址": "Địa chỉ trang web", | ||
| "站点设置": "Cài đặt trang web", | ||
| "第三方登录": "Đăng nhập bên thứ ba", | ||
| "策略": "Chiến lược", | ||
| "简介": "Giới thiệu", | ||
| "简单模式": "Chế độ đơn giản", | ||
| "管理分组": "Quản lý nhóm", | ||
| "管理后台": "Bảng quản trị", | ||
| "管理员设置": "Cài đặt quản trị viên", | ||
| "管理工具": "Công cụ quản lý", | ||
| "管理平台": "Nền tảng quản lý", | ||
| "管理您的个人信息": "Quản lý thông tin cá nhân của bạn", | ||
| "管理您的密钥": "Quản lý khóa của bạn", | ||
| "管理您的账户": "Quản lý tài khoản của bạn", | ||
| "管理控制台": "Bảng điều khiển quản lý", | ||
| "管理用户": "Quản lý người dùng", | ||
| "管理面板": "Bảng quản lý", | ||
| "类": "Lớp", | ||
| "系统提示": "Gợi ý hệ thống", | ||
| "系统日志": "Nhật ký hệ thống", | ||
| "系统状态": "Trạng thái hệ thống", | ||
| "系统监控": "Giám sát hệ thống", | ||
| "系统管理": "Quản lý hệ thống", | ||
| "系统负载": "Tải hệ thống", | ||
| "系统通知": "Thông báo hệ thống", | ||
| "系统错误": "Lỗi hệ thống", | ||
| "系统错误,请联系管理员": "Lỗi hệ thống, vui lòng liên hệ quản trị viên", | ||
| "累计消耗": "Tiêu thụ tích lũy", | ||
| "级别": "Cấp độ", | ||
| "纯文本": "Văn bản thuần túy", | ||
| "线路": "Tuyến", | ||
| "组": "Nhóm", | ||
| "组件": "Thành phần", | ||
| "组织 ID": "ID tổ chức", | ||
| "绑定 GitHub 账户": "Liên kết tài khoản GitHub", | ||
| "绑定 Linux DO 账户": "Liên kết tài khoản Linux DO", | ||
| "绑定 OIDC 账户": "Liên kết tài khoản OIDC", | ||
| "绑定 Telegram 账户": "Liên kết tài khoản Telegram", | ||
| "绑定 微信 账户": "Liên kết tài khoản WeChat", | ||
| "绑定失败": "Liên kết thất bại", | ||
| "绑定成功": "Liên kết thành công", | ||
| "绑定手机": "Liên kết điện thoại", | ||
| "绑定邮箱": "Liên kết email", | ||
| "结算": "Thanh toán", | ||
| "绘图 ID": "ID vẽ", | ||
| "绘图任务": "Tác vụ vẽ", | ||
| "绘图模型": "Mô hình vẽ", | ||
| "统计": "Thống kê", | ||
| "统计信息": "Thông tin thống kê", | ||
| "编辑分组": "Chỉnh sửa nhóm", | ||
| "编辑失败": "Chỉnh sửa thất bại", | ||
| "编辑密钥": "Chỉnh sửa khóa", | ||
| "编辑渠道": "Chỉnh sửa kênh", | ||
| "编辑通道": "Chỉnh sửa kênh", | ||
| "网络": "Mạng", | ||
| "置顶": "Ghim", | ||
| "美金": "USD", | ||
| "翻译": "Dịch", | ||
| "翻转": "Lật", | ||
| "老密码": "Mật khẩu cũ", | ||
| "耗时": "Thời gian đã trôi qua", | ||
| "联系": "Liên hệ", | ||
| "联系方式": "Thông tin liên hệ", | ||
| "联系管理员": "Liên hệ quản trị viên", | ||
| "自动": "Tự động", | ||
| "自动去重": "Tự động loại bỏ trùng lặp", | ||
| "自动去重模式": "Chế độ tự động loại bỏ trùng lặp", | ||
| "自动生成": "Tự động tạo", | ||
| "自动禁用关键字": "Từ khóa tự động vô hiệu hóa", | ||
| "自动禁用开启": "Bật tự động vô hiệu hóa", | ||
| "自动续费": "Tự động gia hạn", | ||
| "自定义图标": "Biểu tượng tùy chỉnh", | ||
| "自定义图标 URL": "URL biểu tượng tùy chỉnh", | ||
| "自定义模型": "Mô hình tùy chỉnh", | ||
| "自定义渠道": "Kênh tùy chỉnh", | ||
| "自定义规则": "Quy tắc tùy chỉnh", | ||
| "自定义设置": "Cài đặt tùy chỉnh", | ||
| "自适应": "Thích ứng", | ||
| "节点": "Nút", | ||
| "若不填则自动生成": "Nếu để trống, nó sẽ được tạo tự động", | ||
| "若未收到邮件,请检查垃圾箱": "Nếu bạn không nhận được email, vui lòng kiểm tra thư mục thư rác", | ||
| "范围": "Phạm vi", | ||
| "草稿": "Bản nháp", | ||
| "获取": "Lấy", | ||
| "获取中...": "Đang lấy...", | ||
| "获取代码": "Lấy mã", | ||
| "获取失败": "Lấy thất bại", | ||
| "获取成功": "Lấy thành công", | ||
| "获取更多": "Lấy thêm", | ||
| "菜单": "Menu", | ||
| "蓝": "Xanh dương", | ||
| "蓝色": "Màu xanh dương", | ||
| "被封禁": "Bị cấm", | ||
| "被禁用": "Bị vô hiệu hóa", | ||
| "覆盖原模型": "Ghi đè mô hình gốc", | ||
| "覆盖模式": "Chế độ ghi đè", | ||
| "触发": "Kích hoạt", | ||
| "触发关键词": "Từ khóa kích hoạt", | ||
| "触发词": "Từ kích hoạt", | ||
| "计费": "Thanh toán", | ||
| "计费规则": "Quy tắc thanh toán", | ||
| "认证": "Xác thực", | ||
| "认证失败": "Xác thực thất bại", | ||
| "认证成功": "Xác thực thành công", | ||
| "认证设置": "Cài đặt xác thực", | ||
| "设计版本": "b80c3466cb6feafeb3990c7820e10e50", | ||
| "评价": "Đánh giá", | ||
| "评论": "Bình luận", | ||
| "试用": "Dùng thử", | ||
| "详细信息": "Thông tin chi tiết", | ||
| "语言": "Ngôn ngữ", | ||
| "语言模型": "Mô hình ngôn ngữ", | ||
| "语言设置": "Cài đặt ngôn ngữ", | ||
| "请上传": "Vui lòng tải lên", | ||
| "请上传图片": "Vui lòng tải lên hình ảnh", | ||
| "请上传文件": "Vui lòng tải lên tệp", | ||
| "请先登录": "Vui lòng đăng nhập trước", | ||
| "请先登录!": "Vui lòng đăng nhập trước!", | ||
| "请先阅读并同意用户协议": "Vui lòng đọc và đồng ý với thỏa thuận người dùng trước", | ||
| "请再次输入密码": "Vui lòng nhập lại mật khẩu", | ||
| "请务必保存好您的密码,否则将无法找回": "Vui lòng đảm bảo lưu mật khẩu của bạn, nếu không bạn sẽ không thể khôi phục nó", | ||
| "请勿重复提交": "Vui lòng không gửi lại", | ||
| "请填写": "Vui lòng điền", | ||
| "请填写正确的邮箱地址": "Vui lòng điền địa chỉ email chính xác", | ||
| "请填写邮箱地址": "Vui lòng điền địa chỉ email", | ||
| "请填写验证码": "Vui lòng điền mã xác minh", | ||
| "请妥善保存": "Vui lòng giữ nó an toàn", | ||
| "请妥善保存您的密钥,一旦丢失将无法找回": "Vui lòng giữ khóa của bạn an toàn, một khi bị mất sẽ không thể khôi phục", | ||
| "请妥善保管好您的密码,请勿告诉他人": "Vui lòng giữ mật khẩu của bạn an toàn và không nói cho người khác biết", | ||
| "请将此链接发送给用户,用户打开链接后即可进行充值": "Vui lòng gửi liên kết này cho người dùng, người dùng có thể nạp tiền sau khi mở liên kết", | ||
| "请求": "Yêu cầu", | ||
| "请求 ID": "ID yêu cầu", | ||
| "请求 URL": "URL yêu cầu", | ||
| "请求体": "Thân yêu cầu", | ||
| "请求内容": "Nội dung yêu cầu", | ||
| "请求列表": "Danh sách yêu cầu", | ||
| "请求参数": "Tham số yêu cầu", | ||
| "请求失败,请重试": "Yêu cầu thất bại, vui lòng thử lại", | ||
| "请求头": "Tiêu đề yêu cầu", | ||
| "请求成功": "Yêu cầu thành công", | ||
| "请求成功!": "Yêu cầu thành công!", | ||
| "请求时间": "Thời gian yêu cầu", | ||
| "请求模式": "Chế độ yêu cầu", | ||
| "请求状态": "Trạng thái yêu cầu", | ||
| "请求详情": "Chi tiết yêu cầu", | ||
| "请求超时": "Yêu cầu hết thời gian", | ||
| "请求量": "Khối lượng yêu cầu", | ||
| "请求频率": "Tần suất yêu cầu", | ||
| "请求频率限制": "Giới hạn tần suất yêu cầu", | ||
| "请确认": "Vui lòng xác nhận", | ||
| "请确认是否删除": "Vui lòng xác nhận xóa", | ||
| "请确认是否重置": "Vui lòng xác nhận đặt lại", | ||
| "请稍候...": "Vui lòng đợi...", | ||
| "请输入": "Vui lòng nhập", | ||
| "请输入 ID": "Vui lòng nhập ID", | ||
| "请输入 URL": "Vui lòng nhập URL", | ||
| "请输入个人简介": "Vui lòng nhập tiểu sử", | ||
| "请输入充值金额": "Vui lòng nhập số tiền nạp", | ||
| "请输入公告标题": "Vui lòng nhập tiêu đề thông báo", | ||
| "请输入关键字": "Vui lòng nhập từ khóa", | ||
| "请输入关键字搜索": "Vui lòng nhập từ khóa để tìm kiếm", | ||
| "请输入分组名称": "Vui lòng nhập tên nhóm", | ||
| "请输入地址": "Vui lòng nhập địa chỉ", | ||
| "请输入域名": "Vui lòng nhập tên miền", | ||
| "请输入搜索关键字": "Vui lòng nhập từ khóa tìm kiếm", | ||
| "请输入搜索内容": "Vui lòng nhập nội dung tìm kiếm", | ||
| "请输入支付金额": "Vui lòng nhập số tiền thanh toán", | ||
| "请输入新的密码": "Vui lòng nhập mật khẩu mới", | ||
| "请输入旧密码": "Vui lòng nhập mật khẩu cũ", | ||
| "请输入标题": "Vui lòng nhập tiêu đề", | ||
| "请输入渠道名称": "Vui lòng nhập tên kênh", | ||
| "请输入用户 ID": "Vui lòng nhập ID người dùng", | ||
| "请输入用户名或邮箱": "Vui lòng nhập tên người dùng hoặc email", | ||
| "请输入登录密码": "Vui lòng nhập mật khẩu đăng nhập", | ||
| "请输入确认密码": "Vui lòng nhập mật khẩu xác nhận", | ||
| "请输入私有令牌": "Vui lòng nhập mã thông báo riêng tư", | ||
| "请输入简介": "Vui lòng nhập phần giới thiệu", | ||
| "请输入账号": "Vui lòng nhập tài khoản", | ||
| "请输入转账金额": "Vui lòng nhập số tiền chuyển", | ||
| "请输入邮箱": "Vui lòng nhập email", | ||
| "请输入重置后的新密码": "Vui lòng nhập mật khẩu mới sau khi đặt lại", | ||
| "请输入链接": "Vui lòng nhập liên kết", | ||
| "请选择": "Vui lòng chọn", | ||
| "请选择一个文件": "Vui lòng chọn một tệp", | ||
| "请选择图片": "Vui lòng chọn hình ảnh", | ||
| "请选择文件": "Vui lòng chọn tệp", | ||
| "请选择日期": "Vui lòng chọn ngày", | ||
| "请选择时间": "Vui lòng chọn thời gian", | ||
| "请选择渠道": "Vui lòng chọn kênh", | ||
| "请选择用户": "Vui lòng chọn người dùng", | ||
| "请选择类型": "Vui lòng chọn loại", | ||
| "请选择要上传的文件": "Vui lòng chọn tệp để tải lên", | ||
| "请选择要删除的记录": "Vui lòng chọn hồ sơ để xóa", | ||
| "请选择要导出的数据": "Vui lòng chọn dữ liệu để xuất", | ||
| "请选择语言": "Vui lòng chọn ngôn ngữ", | ||
| "请阅读并同意": "Vui lòng đọc và đồng ý", | ||
| "读取": "Đọc", | ||
| "读取失败": "Đọc thất bại", | ||
| "财务": "Tài chính", | ||
| "账号": "Tài khoản", | ||
| "账号设置": "Cài đặt tài khoản", | ||
| "账户": "Tài khoản", | ||
| "账户余额": "Số dư tài khoản", | ||
| "账户信息": "Thông tin tài khoản", | ||
| "账户安全": "Bảo mật tài khoản", | ||
| "账户已封禁": "Tài khoản đã bị cấm", | ||
| "账户已激活": "Tài khoản đã được kích hoạt", | ||
| "账户已禁用": "Tài khoản đã bị vô hiệu hóa", | ||
| "账户状态": "Trạng thái tài khoản", | ||
| "账户类型": "Loại tài khoản", | ||
| "账户设置": "Cài đặt tài khoản", | ||
| "账户详情": "Chi tiết tài khoản", | ||
| "费率": "Tỷ lệ", | ||
| "资费": "Biểu giá", | ||
| "资金": "Quỹ", | ||
| "资金明细": "Chi tiết quỹ", | ||
| "转账": "Chuyển tiền", | ||
| "转账成功": "Chuyển tiền thành công", | ||
| "转账给用户": "Chuyển tiền cho người dùng", | ||
| "转账记录": "Hồ sơ chuyển tiền", | ||
| "软件版本": "Phiên bản phần mềm", | ||
| "输入新密码": "Nhập mật khẩu mới", | ||
| "输入旧密码": "Nhập mật khẩu cũ", | ||
| "运行状态": "Trạng thái chạy", | ||
| "运行环境": "Môi trường chạy", | ||
| "返回": "Quay lại", | ||
| "返回上级": "Quay lại cấp trên", | ||
| "返回列表": "Quay lại danh sách", | ||
| "返回首页": "Quay lại trang chủ", | ||
| "进入": "Nhập", | ||
| "退出全屏": "Thoát toàn màn hình", | ||
| "退出登录": "Đăng xuất", | ||
| "选填": "Tùy chọn", | ||
| "选择": "Chọn", | ||
| "选择主题": "Chọn chủ đề", | ||
| "选择充值套餐": "Chọn gói nạp tiền", | ||
| "选择全部": "Chọn tất cả", | ||
| "选择图片": "Chọn hình ảnh", | ||
| "选择头像": "Chọn ảnh đại diện", | ||
| "选择文件": "Chọn tệp", | ||
| "选择日期": "Chọn ngày", | ||
| "选择渠道": "Chọn kênh", | ||
| "选择用户": "Chọn người dùng", | ||
| "选择类型": "Chọn loại", | ||
| "选择角色": "Chọn vai trò", | ||
| "选项": "Tùy chọn", | ||
| "通用": "Chung", | ||
| "通过": "Thông qua", | ||
| "通过 GitHub 登录": "Đăng nhập qua GitHub", | ||
| "通过 Google 登录": "Đăng nhập qua Google", | ||
| "通过 Telegram 登录": "Đăng nhập qua Telegram", | ||
| "通过 WeChat 登录": "Đăng nhập qua WeChat", | ||
| "通过邮箱重置密码": "Đặt lại mật khẩu qua email", | ||
| "通过验证码重置密码": "Đặt lại mật khẩu qua mã xác minh", | ||
| "通道": "Kênh", | ||
| "通道 ID": "ID kênh", | ||
| "通道测试": "Kiểm tra kênh", | ||
| "通道状态": "Trạng thái kênh", | ||
| "通道管理": "Quản lý kênh", | ||
| "通道类型": "Loại kênh", | ||
| "通道设置": "Cài đặt kênh", | ||
| "邀请列表": "Danh sách mời", | ||
| "邀请链接已复制到剪贴板": "Liên kết mời đã được sao chép vào khay nhớ tạm", | ||
| "邮箱域名白名单": "Danh sách trắng tên miền email", | ||
| "邮箱已激活": "Email đã được kích hoạt", | ||
| "邮箱已绑定": "Email đã được liên kết", | ||
| "邮箱已验证": "Email đã được xác minh", | ||
| "邮箱找回密码": "Khôi phục mật khẩu qua email", | ||
| "邮箱注册": "Đăng ký email", | ||
| "邮箱登录": "Đăng nhập email", | ||
| "邮箱设置": "Cài đặt email", | ||
| "邮箱验证": "Xác minh email", | ||
| "邮箱验证码": "Mã xác minh email", | ||
| "配置信息": "Thông tin cấu hình", | ||
| "配置列表": "Danh sách cấu hình", | ||
| "配置名称": "Tên cấu hình", | ||
| "配置已保存": "Cấu hình đã lưu", | ||
| "配置已更新": "Cấu hình đã cập nhật", | ||
| "配置成功": "Cấu hình thành công", | ||
| "配置管理": "Quản lý cấu hình", | ||
| "配置设置": "Cài đặt cấu hình", | ||
| "配置详情": "Chi tiết cấu hình", | ||
| "重发": "Gửi lại", | ||
| "重发验证码": "Gửi lại mã xác minh", | ||
| "重命名": "Đổi tên", | ||
| "重定向": "Chuyển hướng", | ||
| "重定向 URL": "URL chuyển hướng", | ||
| "重定向地址": "Địa chỉ chuyển hướng", | ||
| "重置密码": "Đặt lại mật khẩu", | ||
| "重置密码链接已发送到您的邮箱": "Liên kết đặt lại mật khẩu đã được gửi đến email của bạn", | ||
| "重置密钥": "Đặt lại khóa", | ||
| "重置成功": "Đặt lại thành công", | ||
| "重置所有": "Đặt lại tất cả", | ||
| "重置数据库": "Đặt lại cơ sở dữ liệu", | ||
| "重置用户密码": "Đặt lại mật khẩu người dùng", | ||
| "重置系统": "Đặt lại hệ thống", | ||
| "重置设置": "Đặt lại cài đặt", | ||
| "钱包": "Ví", | ||
| "链接": "Liên kết", | ||
| "链接地址": "Địa chỉ liên kết", | ||
| "销售": "Bán hàng", | ||
| "锁定": "Khóa", | ||
| "错误信息": "Thông tin lỗi", | ||
| "错误日志": "Nhật ký lỗi", | ||
| "错误码": "Mã lỗi", | ||
| "镜像": "Gương", | ||
| "镜像站": "Trang web gương", | ||
| "长度": "Độ dài", | ||
| "长按": "Nhấn và giữ", | ||
| "门槛": "Ngưỡng", | ||
| "闪购": "Flash Sale", | ||
| "阅读": "Đọc", | ||
| "阅读更多": "Đọc thêm" |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Count zh-TW values that contain Vietnamese-only Latin diacritics (đ, ă, ơ, ư, ê, ô, ạ, ậ, …)
# These characters never appear in legitimate Traditional Chinese values.
python3 - <<'PY'
import json, re
with open('web/src/i18n/locales/zh-TW.json', encoding='utf-8') as f:
data = json.load(f)['translation']
vi_re = re.compile(r'[đĐăĂâÂêÊôÔơƠưƯạảãáàậẩẫấầặẳẵắằộổỗốồớờởỡợệểễếềịỉĩíìụủũúùựửữứừỳỵỷỹý]')
hits = [(k, v) for k, v in data.items() if isinstance(v, str) and vi_re.search(v)]
print(f'Vietnamese-tainted zh-TW values: {len(hits)} / {len(data)}')
for k, v in hits[:10]:
print(f' {k!r} -> {v!r}')
PYRepository: QuantumNous/new-api
Length of output: 970
Remove 561 Vietnamese values from zh-TW.json and replace with proper Traditional Chinese translations.
Analysis of the file reveals 561 keys (12.8% of the locale) have Vietnamese values instead of Traditional Chinese. Examples include "Recharge Quota": "Hạn ngạch nạp tiền" (Vietnamese), "主模型": "Model chính" (Vietnamese), "模型加载中...": "Đang tải mô hình..." (Vietnamese), and hundreds more using Vietnamese-specific diacritics (đ, ă, ơ, ư, ê, ô, ạ, ậ, etc.) that never appear in Chinese.
This causes zh-TW users to see Vietnamese UI text across login, account management, channels, models, requests, and other surfaces—a regression worse than untranslated fallback.
Re-import these keys from zh-CN.json and run proper OpenCC s2t (Simplified-to-Traditional) conversion using the project's i18n tooling (bun run i18n:sync or equivalent). Do not use vi.json as the source.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@web/src/i18n/locales/zh-TW.json` around lines 3788 - 4367, The zh-TW.json
file contains ~561 entries with Vietnamese values (e.g., keys "Recharge Quota",
"主模型", "模型加载中..." showing Vietnamese text) instead of Traditional Chinese; fix
by re-importing the correct translations from zh-CN.json and converting
Simplified-to-Traditional with the project's i18n tooling (run the i18n sync
command such as bun run i18n:sync or the repo's equivalent) ensuring OpenCC s2t
conversion is used (not vi.json), replace the Vietnamese values in zh-TW.json
with the converted Traditional Chinese text and verify keys like "Recharge
Quota", "主模型", "模型加载中..." now contain Traditional Chinese.
| "认证失败": "Xác thực thất bại", | ||
| "认证成功": "Xác thực thành công", | ||
| "认证设置": "Cài đặt xác thực", | ||
| "设计版本": "b80c3466cb6feafeb3990c7820e10e50", |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Confirm the key is referenced in the frontend and check what other locales have.
rg -nP --type=js --type=jsx --type=ts --type=tsx -C2 "t\(\s*['\"]设计版本['\"]"
python3 - <<'PY'
import json, os
for f in ['zh-CN.json','zh-TW.json','en.json','vi.json','ja.json','fr.json','ru.json']:
p = f'web/src/i18n/locales/{f}'
if not os.path.exists(p):
continue
with open(p, encoding='utf-8') as fh:
d = json.load(fh).get('translation', {})
if '设计版本' in d:
print(f'{f}: {d["设计版本"]!r}')
PYRepository: QuantumNous/new-api
Length of output: 376
🏁 Script executed:
# Check zh-CN.json for the key
cat web/src/i18n/locales/zh-CN.json | python3 -c "
import sys, json
data = json.load(sys.stdin)
translation = data.get('translation', {})
if '设计版本' in translation:
print(f'Found in zh-CN.json: {translation[\"设计版本\"]!r}')
else:
print('Key not found in zh-CN.json')
"
# Broader search for the key in all files (not just JS/TS)
echo "=== Broader codebase search ==="
rg -n "设计版本" --max-count=20Repository: QuantumNous/new-api
Length of output: 618
Remove the junk hash entry from zh-TW.json and all other affected locale files.
The key "设计版本" does not exist in zh-CN.json (the source language file), yet it appears in zh-TW.json, en.json, vi.json, ja.json, fr.json, and ru.json—all with the identical value "b80c3466cb6feafeb3990c7820e10e50". This hash value is not a translation; it's data corruption that must be removed. The key is not referenced anywhere in the codebase.
Delete this entry from all affected locale files:
- web/src/i18n/locales/zh-TW.json (line 4160)
- web/src/i18n/locales/en.json (line 2967)
- web/src/i18n/locales/vi.json (line 3280)
- web/src/i18n/locales/ja.json (line 2922)
- web/src/i18n/locales/fr.json (line 2953)
- web/src/i18n/locales/ru.json (line 2973)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@web/src/i18n/locales/zh-TW.json` at line 4160, Remove the corrupted
translation entry with key "设计版本" and value "b80c3466cb6feafeb3990c7820e10e50"
from all locale JSON files where it appears; locate occurrences by searching for
the exact key or hash and delete the key/value pair (ensure trailing commas are
adjusted to keep valid JSON), then run a quick search across the repo to confirm
no code references remain and run the i18n build/check to verify no regressions.
Summary
zh-CN.jsonvia Simplified→Traditional Chinese (s2t) conversionvi.json(vi locale file contained Chinese values that were never synced to zh-CN/zh-TW)Changes
web/src/i18n/locales/zh-TW.json: +729 key-value pairs (1 deletion — likely formatting diff)Risk
Test plan
Notes
Summary by CodeRabbit