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', cursorIde: 'Cursor IDE',
accounts: 'Tài khoản', accounts: 'Tài khoản',
allAccounts: 'Tất cả 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', compatibleClis: 'CLI tương thích',
factoryDroid: 'Factory Droid', factoryDroid: 'Factory Droid',
system: 'Hệ thống', system: 'Hệ thống',
health: 'Trạng thái', health: 'Sức khỏe',
settings: 'Cài đặt', settings: 'Cài đặt',
openrouterTooltip: 'Hơn 349 mô hình qua OpenRouter', openrouterTooltip: 'Hơn 349 mô hình qua OpenRouter',
}, },
@@ -2260,7 +2260,7 @@ const resources = {
profiles: 'Hồ sơ', profiles: 'Hồ sơ',
cliproxy: 'CLIProxy', cliproxy: 'CLIProxy',
accounts: 'Tài khoản', accounts: 'Tài khoản',
health: 'Trạng thái', health: 'Sức khỏe',
configurationRequired: 'Cần cấu hình', configurationRequired: 'Cần cấu hình',
}, },
auth: { auth: {
@@ -2276,13 +2276,12 @@ const resources = {
}, },
commonToast: { commonToast: {
apiKeyRequired: 'Cần có khóa API', apiKeyRequired: 'Cần có khóa API',
accountAddedPresetFailed: accountAddedPresetFailed: 'Đã thêm tài khoản nhưng không áp dụng được preset mặc định',
'Đã thêm tài khoản nhưng không áp dụng được giá trị đặt trước mặc định',
settingsCopied: 'Đã sao chép cài đặt vào bảng nhớ tạm', 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', codeCopied: 'Đã sao chép mã vào bảng nhớ tạm',
copyCodeFailed: 'Không sao chép được 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', settingsSaved: 'Đã lưu cài đặt',
defaultTargetUpdated: 'Đã cập nhật mục tiêu mặc định', defaultTargetUpdated: 'Đã cập nhật mục tiêu mặc định',
failedUpdateDefaultTarget: failedUpdateDefaultTarget:
@@ -2298,7 +2297,7 @@ const resources = {
apiKey: 'Khóa API', apiKey: 'Khóa API',
defaultModel: 'Mô hình mặc định (ANTHROPIC_MODEL)', defaultModel: 'Mô hình mặc định (ANTHROPIC_MODEL)',
defaultModelHint: 'Để trống để sử dụng: {{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: 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.', '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)', 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ể', 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: { customPresetDialog: {
title: 'Đặt trước tùy chỉnh', title: 'Preset tùy chỉnh',
presetNameOptional: 'Tên đặt trước (tùy chọn)', presetNameOptional: 'Tên preset (tùy chọn)',
presetNamePlaceholder: 'ví dụ: Cấu hình tùy chỉnh của tôi', presetNamePlaceholder: 'ví dụ: Preset tùy chỉnh của tôi',
codexTipPrefix: 'Mẹo Codex: hậu tố', 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.', 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', defaultModel: 'Mô hình mặc định',
@@ -2363,7 +2362,7 @@ const resources = {
haikuModel: 'Haiku (Nhanh)', haikuModel: 'Haiku (Nhanh)',
haikuModelDesc: 'Phản hồi nhanh cho các tác vụ đơn giản', haikuModelDesc: 'Phản hồi nhanh cho các tác vụ đơn giản',
cancel: 'Hủy bỏ', cancel: 'Hủy bỏ',
savePreset: 'Lưu cài đặt trước', savePreset: 'Lưu preset',
applyPreset: 'Áp dụng cài sẵn', applyPreset: 'Áp dụng cài sẵn',
}, },
componentModelSelector: { componentModelSelector: {
@@ -2377,7 +2376,7 @@ const resources = {
basicSettings: 'Cài đặt cơ bản', basicSettings: 'Cài đặt cơ bản',
accountType: 'Loại tài khoản', accountType: 'Loại tài khoản',
accountTypeIndividual: 'Cá nhân', accountTypeIndividual: 'Cá nhân',
accountTypeBusiness: 'Doanh nghiệp', accountTypeBusiness: 'Business',
accountTypeEnterprise: 'Enterprise', accountTypeEnterprise: 'Enterprise',
rateLimiting: 'Giới hạn tỷ lệ', rateLimiting: 'Giới hạn tỷ lệ',
rateLimitSeconds: 'Giới hạn tốc độ (giây)', rateLimitSeconds: 'Giới hạn tốc độ (giây)',
@@ -2518,14 +2517,14 @@ const resources = {
ready: 'Sẵn sàng', ready: 'Sẵn sàng',
noConfig: 'Không có cấu hình', 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ộ', 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', details: 'Chi tiết',
syncNow: 'Đồng bộ ngay', syncNow: 'Đồng bộ ngay',
}, },
syncDialog: { syncDialog: {
title: 'Đồng bộ hóa hồ sơ với CLIProxy cục bộ', 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ộ.', 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ơ.', createProfilesFirst: 'Trước tiên hãy tạo hồ sơ API bằng tab Hồ sơ.',
modelLabel: 'Mô hình:', modelLabel: 'Mô hình:',
ready: 'Sẵn sàng', ready: 'Sẵn sàng',
@@ -2552,7 +2551,7 @@ const resources = {
tabResponse: 'Phản hồi', tabResponse: 'Phản hồi',
tabRaw: 'Raw', tabRaw: 'Raw',
modelLabel: 'Mô hình:', 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', method: 'Phương thức',
provider: 'Nhà cung cấp', provider: 'Nhà cung cấp',
version: 'Phiên bản', 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.', '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ỏ', cancel: 'Hủy bỏ',
delete: 'Xóa', 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)', sharedGroupDeeper: 'chia sẻ ({{group}}, sâu hơn)',
sharedGroupLegacy: 'chia sẻ ({{group}}, kế thừa tiêu chuẩn)', sharedGroupLegacy: 'chia sẻ ({{group}}, kế thừa tiêu chuẩn)',
isolatedLegacy: 'tách biệt (mặc định cũ)', isolatedLegacy: 'tách biệt (mặc định cũ)',
@@ -2728,7 +2727,7 @@ const resources = {
quotaLoading: 'Hạn ngạch...', quotaLoading: 'Hạn ngạch...',
quota: 'hạn ngạch', quota: 'hạn ngạch',
quotaUnavailable: 'Thông tin quota chưa khả dụng', 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', 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', autoRefreshFailed: 'Tự động làm mới không thành công',
}, },
@@ -2778,7 +2777,7 @@ const resources = {
placeholderModelId: 'model-id', placeholderModelId: 'model-id',
placeholderAccountId: 'account-id', placeholderAccountId: 'account-id',
editCompositeTitle: 'Chỉnh sửa biến thể tổng hợp: {{name}}', 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: { profileEditor: {
profileInfo: 'Thông tin hồ sơ', profileInfo: 'Thông tin hồ sơ',
@@ -2810,7 +2809,7 @@ const resources = {
settingsTabs: { settingsTabs: {
web: 'Web', web: 'Web',
env: 'Env', env: 'Env',
think: 'Thinking', think: 'Tư duy',
proxy: 'Proxy', proxy: 'Proxy',
auth: 'Xác thực', auth: 'Xác thực',
backup: 'Sao lưu', 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.', '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', apiKey: 'Khóa API',
custom: 'Tùy chỉnh', 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', apiKeyPlaceholder: 'Khóa API',
managementSecret: 'Bí mật quản lý', 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', 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: { settingsGlobalEnv: {
description: 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', enabled: 'Đã bật Env toàn cầu',
disabled: 'Env toàn cầu bị vô hiệu hóa', 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', 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', disabledDesc: 'Biến Env sẽ không được áp dụng',
envVars: 'Biến môi trườ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', addNew: 'Thêm biến mới',
keyName: 'KEY_NAME', keyName: 'KEY_NAME',
value: 'giá trị', value: 'giá trị',
@@ -2878,7 +2877,7 @@ const resources = {
disabled: 'Tìm kiếm trên web bị vô hiệu hóa', disabled: 'Tìm kiếm trên web bị vô hiệu hóa',
checking: 'Đang kiểm tra trạng thái...', checking: 'Đang kiểm tra trạng thái...',
providers: 'Nhà cung cấp', 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', 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', checkProviders: 'Kiểm tra các nhà cung cấp',
installed: 'đã cài đặt', installed: 'đã cài đặt',
@@ -2909,7 +2908,7 @@ const resources = {
remote: 'Từ xa', remote: 'Từ xa',
localDesc: 'Chạy nhị phân {{backend}} trên máy này', 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', remoteDesc: 'Kết nối với máy chủ {{backend}} từ xa',
backendBinary: 'Binary backend', backendBinary: 'Tệp thực thi backend',
stopProxyToSwitch: stopProxyToSwitch:
'Dừng proxy đang chạy trong Trạng thái phiên bản trước khi chuyển backend.', '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', default: 'Mặc định',
@@ -2931,7 +2930,7 @@ const resources = {
step2: 'Bước 2', step2: 'Bước 2',
typePrefix: 'Nhập', typePrefix: 'Nhập',
typeSuffix: 'để kích hoạt.', 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ừ.', exactPhrase: 'Phải nhập chính xác cụm từ.',
enableAgyMode: 'Bật chế độ power user', enableAgyMode: 'Bật chế độ power user',
toggleAgyMode: 'Chuyển đổi chế độ power user AGY', toggleAgyMode: 'Chuyển đổi chế độ power user AGY',
@@ -2952,7 +2951,7 @@ const resources = {
remoteConfigTitle: 'Cấu hình máy chủ từ xa', remoteConfigTitle: 'Cấu hình máy chủ từ xa',
host: 'Host', host: 'Host',
hostPlaceholder: '192.168.1.100 hoặc proxy.example.com', 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}}', portPlaceholder: 'Để trống để dùng {{value}}',
protocol: 'Giao thức', protocol: 'Giao thức',
http: 'HTTP', http: 'HTTP',
@@ -2962,8 +2961,7 @@ const resources = {
apiKeyDesc: 'Dùng cho các yêu cầu API đến /v1/chat/completions', 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)', managementKeyOptional: 'Khóa quản lý (tùy chọn)',
managementKeyPlaceholder: 'Đối với điểm cuối /v0/management/*', managementKeyPlaceholder: 'Đối với điểm cuối /v0/management/*',
managementKeyDesc: managementKeyDesc: 'Dùng cho API quản lý dashboard. Nếu bỏ trống sẽ dùng Khóa API.',
'Đượ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.',
testing: 'Đang thử nghiệm...', testing: 'Đang thử nghiệm...',
testConnection: 'Kiểm tra kết nối', testConnection: 'Kiểm tra kết nối',
connectedLatency: 'Đã kết nối ({{value}}ms)', 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}}"', noProfileMatch: 'Không có hồ sơ nào khớp với "{{query}}"',
profileCount: '{{count}} hồ sơ', profileCount: '{{count}} hồ sơ',
profileCount_other: '{{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ơ', deleteProfileTitle: 'Xóa hồ sơ',
deleteProfileDesc: 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.', '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.', tableScopeSuffix: 'để thay đổi chế độ/nhóm/độ sâu.',
accountMatrix: 'Ma trận tài khoản', accountMatrix: 'Ma trận tài khoản',
sharedTotalDesc: 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...', loadingAccounts: 'Đang tải tài khoản...',
}, },
health: { health: {
@@ -3116,9 +3114,9 @@ const resources = {
doneCount: 'Xong', doneCount: 'Xong',
searchPlaceholder: 'Tìm kiếm hành động hoặc lệnh', 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.', 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}}', published: 'Đã xuất bản {{date}}',
markDone: 'Đánh dấu là xong', markDone: 'Đánh dấu hoàn tất',
dismiss: 'Ẩn', dismiss: 'Ẩn',
reopen: 'Mở lại', reopen: 'Mở lại',
doNext: 'Làm tiếp theo', doNext: 'Làm tiếp theo',
@@ -3268,12 +3266,11 @@ const resources = {
defaultModelRequired: 'Mô hình mặc định là bắt buộc', 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', savedConfig: 'Đã lưu cấu hình Cursor và ánh xạ mô hình',
failedSaveConfig: 'Không lưu được cấu hình', failedSaveConfig: 'Không lưu được cấu hình',
modelsLoadingWait: modelsLoadingWait: 'Mô hình vẫn đang tải. Vui lòng đợi trước khi áp dụng preset.',
'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.',
noModelsAvailable: 'Chưa có mô hình nào. Hãy khởi động daemon rồi làm mới.', 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', appliedCodexPreset: 'Đã áp dụng preset Codex GPT-5.3',
appliedClaudePreset: 'Đã áp dụng cài đặt trước Claude 4.6', appliedClaudePreset: 'Đã áp dụng preset Claude 4.6',
appliedGeminiPreset: 'Đã áp dụng cài đặt trước Gemini 3', appliedGeminiPreset: 'Đã áp dụng preset Gemini 3',
integrationEnabled: 'Đã bật tích hợp Cursor', integrationEnabled: 'Đã bật tích hợp Cursor',
integrationDisabled: 'Đã tắ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', 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', commands: 'Lệnh',
skills: 'Kỹ năng', skills: 'Kỹ năng',
agents: 'Agent', 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', 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ị', visible: 'Hiển thị',
markdownDetail: 'Chế độ xem chi tiết Markdown', markdownDetail: 'Chế độ xem chi tiết Markdown',
filterPrefix: 'Lọc:', filterPrefix: 'Lọc:',
configurationRequired: 'Cần cấu hình', 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', retryCounts: 'Số lần thử lại',
filterPlaceholder: 'Lọc {{tab}} theo tên, mô tả hoặc đường dẫn', filterPlaceholder: 'Lọc {{tab}} theo tên, mô tả hoặc đường dẫn',
showing: 'Đang hiển thị {{visible}} trong số {{total}} {{tab}}', showing: 'Đang hiển thị {{visible}} trong số {{total}} {{tab}}',
showingQuery: 'cho "{{query}}"', showingQuery: 'cho "{{query}}"',
refreshing: '(đang làm mới...)', refreshing: '(đang làm mới...)',
loadingShared: 'Đang tải chia sẻ {{tab}}...', loadingShared: 'Đang tải {{tab}} dùng chung...',
failedLoadShared: 'Không tải được chia sẻ {{tab}}', failedLoadShared: 'Không tải được danh sách {{tab}} dùng chung',
retry: 'Thử lại', retry: 'Thử lại',
noSharedFound: 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}}".', noMatch: 'Không có {{tab}} khớp với "{{query}}".',
selectOne: 'Chọn {{tab}} để xem toàn bộ nội dung.', selectOne: 'Chọn {{tab}} để xem toàn bộ nội dung.',
pathLabel: 'Đường dẫn', pathLabel: 'Đường dẫn',