fix(i18n): complete Vietnamese dashboard copy QA polish

This commit is contained in:
Tam Nhu Tran
2026-03-03 02:30:00 +07:00
parent f3f315e86a
commit b07c62cc21
+41 -44
View File
@@ -2248,11 +2248,11 @@ const resources = {
cursorIde: 'Cursor IDE',
accounts: 'Tài khoản',
allAccounts: 'Tất cả tài khoản',
sharedData: 'Dữ liệu được chia sẻ',
sharedData: 'Dữ liệu dùng chung',
compatibleClis: 'CLI tương thích',
factoryDroid: 'Factory Droid',
system: 'Hệ thống',
health: 'Trạng thái',
health: 'Sức khỏe',
settings: 'Cài đặt',
openrouterTooltip: 'Hơn 349 mô hình qua OpenRouter',
},
@@ -2260,7 +2260,7 @@ const resources = {
profiles: 'Hồ sơ',
cliproxy: 'CLIProxy',
accounts: 'Tài khoản',
health: 'Trạng thái',
health: 'Sức khỏe',
configurationRequired: 'Cần cấu hình',
},
auth: {
@@ -2276,13 +2276,12 @@ const resources = {
},
commonToast: {
apiKeyRequired: 'Cần có khóa API',
accountAddedPresetFailed:
'Đã thêm tài khoản nhưng không áp dụng được giá trị đặt trước mặc định',
accountAddedPresetFailed: 'Đã thêm tài khoản nhưng không áp dụng được preset mặc định',
settingsCopied: 'Đã sao chép cài đặt vào bảng nhớ tạm',
enterPresetName: 'Vui lòng nhập tên đặt trước để lưu',
enterPresetName: 'Vui lòng nhập tên preset để lưu',
codeCopied: 'Đã sao chép mã vào bảng nhớ tạm',
copyCodeFailed: 'Không sao chép được mã',
appliedModelAllTiers: 'Mô hình áp dụng cho tất cả các tầng',
appliedModelAllTiers: 'Đã áp dụng mô hình cho tất cả các tier',
settingsSaved: 'Đã lưu cài đặt',
defaultTargetUpdated: 'Đã cập nhật mục tiêu mặc định',
failedUpdateDefaultTarget:
@@ -2298,7 +2297,7 @@ const resources = {
apiKey: 'Khóa API',
defaultModel: 'Mô hình mặc định (ANTHROPIC_MODEL)',
defaultModelHint: 'Để trống để sử dụng: {{model}}',
modelMappingTitle: 'Lập bản đồ mô hình (Opus/Sonnet/Haiku)',
modelMappingTitle: 'Ánh xạ mô hình (Opus/Sonnet/Haiku)',
modelMappingDesc:
'Cấu hình ID mô hình riêng cho từng tier. Hữu ích với API proxy định tuyến từng loại mô hình đến backend khác nhau.',
opusModel: 'Mô hình Opus (ANTHROPIC_DEFAULT_OPUS_MODEL)',
@@ -2349,9 +2348,9 @@ const resources = {
skipHint: 'Bỏ qua nếu bạn chỉ muốn thêm tài khoản mà không tạo biến thể',
},
customPresetDialog: {
title: 'Đặt trước tùy chỉnh',
presetNameOptional: 'Tên đặt trước (tùy chọn)',
presetNamePlaceholder: 'ví dụ: Cấu hình tùy chỉnh của tôi',
title: 'Preset tùy chỉnh',
presetNameOptional: 'Tên preset (tùy chọn)',
presetNamePlaceholder: 'ví dụ: Preset tùy chỉnh của tôi',
codexTipPrefix: 'Mẹo Codex: hậu tố',
codexTipSuffix: 'nỗ lực ghim. Các mô hình không có hậu tố sử dụng cài đặt Tư duy.',
defaultModel: 'Mô hình mặc định',
@@ -2363,7 +2362,7 @@ const resources = {
haikuModel: 'Haiku (Nhanh)',
haikuModelDesc: 'Phản hồi nhanh cho các tác vụ đơn giản',
cancel: 'Hủy bỏ',
savePreset: 'Lưu cài đặt trước',
savePreset: 'Lưu preset',
applyPreset: 'Áp dụng cài sẵn',
},
componentModelSelector: {
@@ -2377,7 +2376,7 @@ const resources = {
basicSettings: 'Cài đặt cơ bản',
accountType: 'Loại tài khoản',
accountTypeIndividual: 'Cá nhân',
accountTypeBusiness: 'Doanh nghiệp',
accountTypeBusiness: 'Business',
accountTypeEnterprise: 'Enterprise',
rateLimiting: 'Giới hạn tỷ lệ',
rateLimitSeconds: 'Giới hạn tốc độ (giây)',
@@ -2518,14 +2517,14 @@ const resources = {
ready: 'Sẵn sàng',
noConfig: 'Không có cấu hình',
syncsProfilesDesc: 'Đồng bộ hóa cấu hình API với cấu hình CLIProxy cục bộ',
runDoctorHint: 'Chạy <code>ccs doctor --fix</code> để tạo config.',
runDoctorHint: 'Chạy <code>ccs doctor --fix</code> để tạo cấu hình.',
details: 'Chi tiết',
syncNow: 'Đồng bộ ngay',
},
syncDialog: {
title: 'Đồng bộ hóa hồ sơ với CLIProxy cục bộ',
description: 'Đồng bộ hóa cấu hình API CCS của bạn với CLIProxy config.yaml cục bộ.',
noProfiles: 'Không có cấu hình nào được định cấu hình để đồng bộ hóa.',
noProfiles: 'Không có profile nào để đồng bộ.',
createProfilesFirst: 'Trước tiên hãy tạo hồ sơ API bằng tab Hồ sơ.',
modelLabel: 'Mô hình:',
ready: 'Sẵn sàng',
@@ -2552,7 +2551,7 @@ const resources = {
tabResponse: 'Phản hồi',
tabRaw: 'Raw',
modelLabel: 'Mô hình:',
quotaResetsIn: 'Đặt lại hạn ngạch trong',
quotaResetsIn: 'Quota sẽ được đặt lại sau',
method: 'Phương thức',
provider: 'Nhà cung cấp',
version: 'Phiên bản',
@@ -2650,7 +2649,7 @@ const resources = {
'Bạn có chắc chắn muốn xóa tài khoản "{{name}}" không? Thao tác này sẽ xóa hồ sơ và tất cả dữ liệu phiên của nó. Không thể hoàn tác hành động này.',
cancel: 'Hủy bỏ',
delete: 'Xóa',
sharedGroupStandard: 'được chia sẻ ({{group}}, tiêu chuẩn)',
sharedGroupStandard: 'chia sẻ ({{group}}, tiêu chuẩn)',
sharedGroupDeeper: 'chia sẻ ({{group}}, sâu hơn)',
sharedGroupLegacy: 'chia sẻ ({{group}}, kế thừa tiêu chuẩn)',
isolatedLegacy: 'tách biệt (mặc định cũ)',
@@ -2728,7 +2727,7 @@ const resources = {
quotaLoading: 'Hạn ngạch...',
quota: 'hạn ngạch',
quotaUnavailable: 'Thông tin quota chưa khả dụng',
reauthNeeded: 'Reauth cần thiết',
reauthNeeded: 'Cần xác thực lại',
removeAndReadd: 'Xóa và thêm lại tài khoản',
autoRefreshFailed: 'Tự động làm mới không thành công',
},
@@ -2778,7 +2777,7 @@ const resources = {
placeholderModelId: 'model-id',
placeholderAccountId: 'account-id',
editCompositeTitle: 'Chỉnh sửa biến thể tổng hợp: {{name}}',
editSingleTitle: 'Chỉnh sửa một biến thể: {{name}}',
editSingleTitle: 'Chỉnh sửa biến thể: {{name}}',
},
profileEditor: {
profileInfo: 'Thông tin hồ sơ',
@@ -2810,7 +2809,7 @@ const resources = {
settingsTabs: {
web: 'Web',
env: 'Env',
think: 'Thinking',
think: 'Tư duy',
proxy: 'Proxy',
auth: 'Xác thực',
backup: 'Sao lưu',
@@ -2827,7 +2826,7 @@ const resources = {
'Cấu hình token xác thực CLIProxy. Các thay đổi yêu cầu khởi động lại CLIProxy.',
apiKey: 'Khóa API',
custom: 'Tùy chỉnh',
apiKeyDesc: 'Được sử dụng bởi Claude Code để xác thực bằng CLIProxy',
apiKeyDesc: 'Được Claude Code dùng để xác thực qua CLIProxy',
apiKeyPlaceholder: 'Khóa API',
managementSecret: 'Bí mật quản lý',
managementSecretDesc: 'Được bảng điều khiển CCS sử dụng để truy cập API quản lý CLIProxy',
@@ -2840,13 +2839,13 @@ const resources = {
},
settingsGlobalEnv: {
description:
'Biến môi trường được áp dụng cho tất cả hồ sơ không phải Claude subscription (gemini, codex, agy, ghcp, v.v.)',
'Biến môi trường được áp dụng cho tất cả hồ sơ không dùng Claude subscription (gemini, codex, agy, ghcp, v.v.)',
enabled: 'Đã bật Env toàn cầu',
disabled: 'Env toàn cầu bị vô hiệu hóa',
enabledDesc: 'Biến Env sẽ được áp dụng cho các hồ sơ bên thứ ba',
disabledDesc: 'Biến Env sẽ không được áp dụng',
envVars: 'Biến môi trường',
noneConfigured: 'Không có biến môi trường nào được định cấu hình',
noneConfigured: 'Không có biến môi trường nào được cấu hình',
addNew: 'Thêm biến mới',
keyName: 'KEY_NAME',
value: 'giá trị',
@@ -2878,7 +2877,7 @@ const resources = {
disabled: 'Tìm kiếm trên web bị vô hiệu hóa',
checking: 'Đang kiểm tra trạng thái...',
providers: 'Nhà cung cấp',
noneConfigured: 'Không có nhà cung cấp nào được định cấu hình',
noneConfigured: 'Không có nhà cung cấp nào được cấu hình',
noneConfiguredHint: 'Cài công cụ CLI để bật các nhà cung cấp WebSearch',
checkProviders: 'Kiểm tra các nhà cung cấp',
installed: 'đã cài đặt',
@@ -2909,7 +2908,7 @@ const resources = {
remote: 'Từ xa',
localDesc: 'Chạy nhị phân {{backend}} trên máy này',
remoteDesc: 'Kết nối với máy chủ {{backend}} từ xa',
backendBinary: 'Binary backend',
backendBinary: 'Tệp thực thi backend',
stopProxyToSwitch:
'Dừng proxy đang chạy trong Trạng thái phiên bản trước khi chuyển backend.',
default: 'Mặc định',
@@ -2931,7 +2930,7 @@ const resources = {
step2: 'Bước 2',
typePrefix: 'Nhập',
typeSuffix: 'để kích hoạt.',
typePhraseAria: 'Nhập I ACCEPT RISK để bật chế độ người dùng nâng cao Antigravity',
typePhraseAria: 'Nhập I ACCEPT RISK để bật chế độ power user Antigravity',
exactPhrase: 'Phải nhập chính xác cụm từ.',
enableAgyMode: 'Bật chế độ power user',
toggleAgyMode: 'Chuyển đổi chế độ power user AGY',
@@ -2952,7 +2951,7 @@ const resources = {
remoteConfigTitle: 'Cấu hình máy chủ từ xa',
host: 'Host',
hostPlaceholder: '192.168.1.100 hoặc proxy.example.com',
defaultPort: 'mặc định: {{value}}',
defaultPort: 'mặc định {{value}}',
portPlaceholder: 'Để trống để dùng {{value}}',
protocol: 'Giao thức',
http: 'HTTP',
@@ -2962,8 +2961,7 @@ const resources = {
apiKeyDesc: 'Dùng cho các yêu cầu API đến /v1/chat/completions',
managementKeyOptional: 'Khóa quản lý (tùy chọn)',
managementKeyPlaceholder: 'Đối với điểm cuối /v0/management/*',
managementKeyDesc:
'Được sử dụng cho API quản lý trang tổng quan. Quay trở lại Khóa API nếu không được đặt.',
managementKeyDesc: 'Dùng cho API quản lý dashboard. Nếu bỏ trống sẽ dùng Khóa API.',
testing: 'Đang thử nghiệm...',
testConnection: 'Kiểm tra kết nối',
connectedLatency: 'Đã kết nối ({{value}}ms)',
@@ -3033,7 +3031,7 @@ const resources = {
noProfileMatch: 'Không có hồ sơ nào khớp với "{{query}}"',
profileCount: '{{count}} hồ sơ',
profileCount_other: '{{count}} hồ sơ',
configuredCount: '{{count}} đã được định cấu hình',
configuredCount: '{{count}} đã cấu hình',
deleteProfileTitle: 'Xóa hồ sơ',
deleteProfileDesc:
'Bạn có chắc chắn muốn xóa "{{name}}" không? Thao tác này sẽ xóa tệp cài đặt và không thể hoàn tác.',
@@ -3082,7 +3080,7 @@ const resources = {
tableScopeSuffix: 'để thay đổi chế độ/nhóm/độ sâu.',
accountMatrix: 'Ma trận tài khoản',
sharedTotalDesc:
'Tổng số được chia sẻ: {{count}}. Các hành động bao gồm cài đặt Đồng bộ hóa và xác nhận kế thừa.',
'Tổng số tài khoản chia sẻ: {{count}}. Bao gồm thao tác Sync và xác nhận kế thừa.',
loadingAccounts: 'Đang tải tài khoản...',
},
health: {
@@ -3116,9 +3114,9 @@ const resources = {
doneCount: 'Xong',
searchPlaceholder: 'Tìm kiếm hành động hoặc lệnh',
noNotices: 'Không có thông báo nào khớp với chế độ xem này.',
noUpdates: 'Không có bản cập nhật có sẵn.',
noUpdates: 'Hiện không có bản cập nhật nào.',
published: 'Đã xuất bản {{date}}',
markDone: 'Đánh dấu là xong',
markDone: 'Đánh dấu hoàn tất',
dismiss: 'Ẩn',
reopen: 'Mở lại',
doNext: 'Làm tiếp theo',
@@ -3268,12 +3266,11 @@ const resources = {
defaultModelRequired: 'Mô hình mặc định là bắt buộc',
savedConfig: 'Đã lưu cấu hình Cursor và ánh xạ mô hình',
failedSaveConfig: 'Không lưu được cấu hình',
modelsLoadingWait:
'Các mô hình vẫn đang tải. Vui lòng đợi trước khi áp dụng cài đặt trước.',
modelsLoadingWait: 'Mô hình vẫn đang tải. Vui lòng đợi trước khi áp dụng preset.',
noModelsAvailable: 'Chưa có mô hình nào. Hãy khởi động daemon rồi làm mới.',
appliedCodexPreset: 'Đã áp dụng cài đặt trước Codex GPT-5.3',
appliedClaudePreset: 'Đã áp dụng cài đặt trước Claude 4.6',
appliedGeminiPreset: 'Đã áp dụng cài đặt trước Gemini 3',
appliedCodexPreset: 'Đã áp dụng preset Codex GPT-5.3',
appliedClaudePreset: 'Đã áp dụng preset Claude 4.6',
appliedGeminiPreset: 'Đã áp dụng preset Gemini 3',
integrationEnabled: 'Đã bật tích hợp Cursor',
integrationDisabled: 'Đã tắt tích hợp Cursor',
failedUpdateIntegration: 'Không cập nhật được trạng thái tích hợp',
@@ -3350,24 +3347,24 @@ const resources = {
commands: 'Lệnh',
skills: 'Kỹ năng',
agents: 'Agent',
title: 'Dữ liệu được chia sẻ',
title: 'Dữ liệu dùng chung',
subtitle: 'Các lệnh, kỹ năng và agent được chia sẻ giữa các phiên Claude',
totalShared: 'Tổng số được chia sẻ',
totalShared: 'Tổng số mục dùng chung',
visible: 'Hiển thị',
markdownDetail: 'Chế độ xem chi tiết Markdown',
filterPrefix: 'Lọc:',
configurationRequired: 'Cần cấu hình',
countsUnavailable: 'Số lượng không có sẵn',
countsUnavailable: 'Không có số liệu',
retryCounts: 'Số lần thử lại',
filterPlaceholder: 'Lọc {{tab}} theo tên, mô tả hoặc đường dẫn',
showing: 'Đang hiển thị {{visible}} trong số {{total}} {{tab}}',
showingQuery: 'cho "{{query}}"',
refreshing: '(đang làm mới...)',
loadingShared: 'Đang tải chia sẻ {{tab}}...',
failedLoadShared: 'Không tải được chia sẻ {{tab}}',
loadingShared: 'Đang tải {{tab}} dùng chung...',
failedLoadShared: 'Không tải được danh sách {{tab}} dùng chung',
retry: 'Thử lại',
noSharedFound:
'Không tìm thấy {{tab}} được chia sẻ. Chạy `ccs sync` hoặc thêm các mục trong thư mục dùng chung của bạn.',
'Không tìm thấy {{tab}} dùng chung. Chạy `ccs sync` hoặc thêm mục trong thư mục dùng chung của bạn.',
noMatch: 'Không có {{tab}} khớp với "{{query}}".',
selectOne: 'Chọn {{tab}} để xem toàn bộ nội dung.',
pathLabel: 'Đường dẫn',