This commit is contained in:
2025-12-01 17:21:38 +08:00
parent 32fee2b8ab
commit fab8c13cb3
7511 changed files with 996300 additions and 0 deletions

View File

@@ -0,0 +1,98 @@
const translation = {
title: 'Chú thích',
name: 'Chú thích cho câu trả lời',
editBy: 'Câu trả lời được chỉnh sửa bởi {{author}}',
noData: {
title: 'Không có chú thích',
description: 'Bạn có thể chỉnh sửa chú thích trong phần gỡ lỗi ứng dụng hoặc nhập hàng loạt chú thích vào đây để có phản hồi chất lượng cao.',
},
table: {
header: {
question: 'câu hỏi',
answer: 'câu trả lời',
createdAt: 'tạo lúc',
hits: 'lượt truy cập',
actions: 'hành động',
addAnnotation: 'Thêm chú thích',
bulkImport: 'Nhập hàng loạt',
bulkExport: 'Xuất hàng loạt',
clearAll: 'Xóa tất cả chú thích',
clearAllConfirm: 'Xóa tất cả các chú thích?',
},
},
editModal: {
title: 'Chỉnh sửa chú thích câu trả lời',
queryName: 'Câu hỏi của người dùng',
answerName: 'Câu trả lời của AI',
yourAnswer: 'Câu trả lời của bạn',
answerPlaceholder: 'Nhập câu trả lời của bạn vào đây',
yourQuery: 'Câu hỏi của bạn',
queryPlaceholder: 'Nhập câu hỏi của bạn ở đây',
removeThisCache: 'Xóa chú thích này',
createdAt: 'Được tạo lúc',
},
addModal: {
title: 'Thêm chú thích câu trả lời',
queryName: 'Câu hỏi',
answerName: 'Câu trả lời',
answerPlaceholder: 'Nhập câu trả lời vào đây',
queryPlaceholder: 'Nhập câu hỏi ở đây',
createNext: 'Thêm chú thích khác',
},
batchModal: {
title: 'Nhập hàng loạt',
csvUploadTitle: 'Kéo và thả tệp CSV của bạn vào đây hoặc ',
browse: 'chọn tệp',
tip: 'Tệp CSV phải tuân theo cấu trúc sau:',
question: 'câu hỏi',
answer: 'câu trả lời',
contentTitle: 'tiêu đề nội dung',
content: 'nội dung',
template: 'Tải mẫu tại đây',
cancel: 'Hủy',
run: 'Chạy hàng loạt',
runError: 'Chạy hàng loạt thất bại',
processing: 'Đang xử lý hàng loạt',
completed: 'Nhập hoàn tất',
error: 'Lỗi khi nhập',
ok: 'OK',
},
errorMessage: {
answerRequired: 'Câu trả lời là bắt buộc',
queryRequired: 'Câu hỏi là bắt buộc',
},
viewModal: {
annotatedResponse: 'Câu trả lời đã chú thích',
hitHistory: 'Lịch sử truy cập',
hit: 'Lượt truy cập',
hits: 'Lượt truy cập',
noHitHistory: 'Không có lịch sử truy cập',
},
hitHistoryTable: {
query: 'Câu hỏi',
match: 'Độ chính xác',
response: 'Phản hồi',
source: 'Nguồn',
score: 'Điểm',
time: 'Thời gian',
},
initSetup: {
title: 'Thiết lập ban đầu cho chú thích câu trả lời',
configTitle: 'Thiết lập chú thích câu trả lời',
confirmBtn: 'Lưu & Kích hoạt',
configConfirmBtn: 'Lưu',
},
embeddingModelSwitchTip: 'Mô hình vector hóa văn bản chú thích, việc chuyển đổi mô hình sẽ dẫn đến việc nhúng lại, có thể phát sinh thêm chi phí.',
list: {
delete: {
title: 'Bạn có chắc chắn muốn xóa không?',
},
},
batchAction: {
delete: 'Xóa',
cancel: 'Hủy',
selected: 'Được chọn',
},
}
export default translation

View File

@@ -0,0 +1,85 @@
const translation = {
apiServer: 'Máy chủ API',
apiKey: 'Khóa API',
status: 'Trạng thái',
disabled: 'Đã tắt',
ok: 'Đang hoạt động',
copy: 'Sao chép',
copied: 'Đã sao chép',
play: 'Chạy',
pause: 'Tạm dừng',
playing: 'Đang chạy',
merMaid: {
rerender: 'Vẽ lại',
},
never: 'Không bao giờ',
apiKeyModal: {
apiSecretKey: 'Khóa bí mật API',
apiSecretKeyTips: 'Để ngăn chặn việc lạm dụng API, hãy bảo vệ Khóa API của bạn. Tránh sử dụng nó dưới dạng văn bản thuần trong mã giao diện người dùng.',
createNewSecretKey: 'Tạo khóa bí mật mới',
secretKey: 'Khóa bí mật',
created: 'ĐÃ TẠO',
lastUsed: 'SỬ DỤNG LẦN CUỐI',
generateTips: 'Hãy lưu giữ khóa này ở nơi an toàn và dễ tiếp cận.',
},
actionMsg: {
deleteConfirmTitle: 'Xóa khóa bí mật này?',
deleteConfirmTips: 'Hành động này không thể hoàn tác.',
ok: 'OK',
},
completionMode: {
title: 'API ứng dụng hoàn thành',
info: 'Đối với việc tạo văn bản chất lượng cao như bài viết, tóm tắt và dịch thuật, hãy sử dụng API hoàn thành tin nhắn với đầu vào từ người dùng. Việc tạo văn bản dựa trên các thông số mô hình và mẫu đề xuất được thiết lập trong Dify Prompt Engineering.',
createCompletionApi: 'Tạo tin nhắn hoàn thành',
createCompletionApiTip: 'Tạo một tin nhắn hoàn thành để hỗ trợ chế độ câu hỏi và trả lời.',
inputsTips: '(Tùy chọn) Cung cấp các trường đầu vào người dùng dưới dạng cặp khóa-giá trị, tương ứng với các biến trong Prompt Eng. Khóa là tên biến, Giá trị là giá trị tham số. Nếu loại trường là Lựa chọn, Giá trị đã gửi phải là một trong các lựa chọn đã thiết lập trước.',
queryTips: 'Nội dung văn bản đầu vào của người dùng.',
blocking: 'Loại chặn, đợi để thực hiện hoàn tất và trả kết quả. (Yêu cầu có thể bị gián đoạn nếu quá trình kéo dài)',
streaming: 'trả về dữ liệu theo luồng. Thực hiện trả dữ liệu theo luồng dựa trên SSE (Sự kiện được gửi từ máy chủ).',
messageFeedbackApi: 'Phản hồi tin nhắn (thích)',
messageFeedbackApiTip: 'Đánh giá các tin nhắn nhận được thay mặt cho người dùng cuối với các lựa chọn thích hoặc không thích. Dữ liệu này hiển thị trên trang Nhật ký & Chú thích và được sử dụng cho việc điều chỉnh mô hình trong tương lai.',
messageIDTip: 'ID tin nhắn',
ratingTip: 'thích hoặc không thích, null là hủy bỏ',
parametersApi: 'Thu thập thông tin tham số ứng dụng',
parametersApiTip: 'Truy xuất các tham số Đầu vào được cấu hình, bao gồm tên biến, tên trường, loại và giá trị mặc định. Thường được sử dụng để hiển thị các trường này trong một biểu mẫu hoặc điền vào các giá trị mặc định sau khi máy khách tải.',
},
chatMode: {
title: 'API ứng dụng trò chuyện',
info: 'Đối với ứng dụng trò chuyện linh hoạt sử dụng định dạng Câu hỏi và Trả lời, gọi API tin nhắn trò chuyện để bắt đầu cuộc trò chuyện. Duy trì cuộc trò chuyện liên tục bằng cách chuyển conversation_id đã trả về. Các tham số phản hồi và mẫu phụ thuộc vào các cài đặt của Dify Prompt Eng.',
createChatApi: 'Tạo tin nhắn trò chuyện',
createChatApiTip: 'Tạo một tin nhắn trò chuyện mới hoặc tiếp tục một cuộc trò chuyện đang tồn tại.',
inputsTips: '(Tùy chọn) Cung cấp các trường đầu vào người dùng dưới dạng cặp khóa-giá trị, tương ứng với các biến trong Prompt Eng. Khóa là tên biến, Giá trị là giá trị tham số. Nếu loại trường là Lựa chọn, Giá trị đã gửi phải là một trong các lựa chọn đã thiết lập trước.',
queryTips: 'Nội dung câu hỏi của người dùng',
blocking: 'Loại chặn, đợi để thực hiện hoàn tất và trả kết quả. (Yêu cầu có thể bị gián đoạn nếu quá trình kéo dài)',
streaming: 'trả về dữ liệu theo luồng. Thực hiện trả dữ liệu theo luồng dựa trên SSE (Sự kiện được gửi từ máy chủ).',
conversationIdTip: '(Tùy chọn) ID cuộc trò chuyện: để trống cho cuộc trò chuyện lần đầu; chuyển conversation_id từ ngữ cảnh để tiếp tục cuộc trò chuyện.',
messageFeedbackApi: 'Phản hồi của người dùng cuối về tin nhắn',
messageFeedbackApiTip: 'Đánh giá các tin nhắn nhận được thay mặt cho người dùng cuối với các lựa chọn thích hoặc không thích. Dữ liệu này hiển thị trên trang Nhật ký & Chú thích và được sử dụng cho việc điều chỉnh mô hình trong tương lai.',
messageIDTip: 'ID tin nhắn',
ratingTip: 'thích hoặc không thích, null là hủy bỏ',
chatMsgHistoryApi: 'Lấy lịch sử tin nhắn trò chuyện',
chatMsgHistoryApiTip: 'Trang đầu tiên trả về `limit` tin nhắn mới nhất, được sắp xếp theo thứ tự ngược lại.',
chatMsgHistoryConversationIdTip: 'ID Cuộc trò chuyện',
chatMsgHistoryFirstId: 'ID của bản ghi trò chuyện đầu tiên trên trang hiện tại. Giá trị mặc định là không có.',
chatMsgHistoryLimit: 'Số lượng cuộc trò chuyện được trả về trong một yêu cầu',
conversationsListApi: 'Lấy danh sách cuộc trò chuyện',
conversationsListApiTip: 'Lấy danh sách phiên của người dùng hiện tại. Theo mặc định, trả về 20 phiên cuối cùng.',
conversationsListFirstIdTip: 'ID của bản ghi cuối cùng trên trang hiện tại, mặc định không có.',
conversationsListLimitTip: 'Số lượng cuộc trò chuyện được trả về trong một yêu cầu',
conversationRenamingApi: 'Đổi tên cuộc trò chuyện',
conversationRenamingApiTip: 'Đổi tên cuộc trò chuyện; tên sẽ được hiển thị trong giao diện nhiều phiên.',
conversationRenamingNameTip: 'Tên mới',
parametersApi: 'Thu thập thông tin tham số ứng dụng',
parametersApiTip: 'Truy xuất các tham số Đầu vào được cấu hình, bao gồm tên biến, tên trường, loại và giá trị mặc định. Thường được sử dụng để hiển thị các trường này trong một biểu mẫu hoặc điền vào các giá trị mặc định sau khi máy khách tải.',
},
develop: {
requestBody: 'Nội dung yêu cầu',
pathParams: 'Tham số đường dẫn',
query: 'Truy vấn',
toc: 'Nội dung',
},
loading: 'Tải',
regenerate: 'Tái tạo',
}
export default translation

View File

@@ -0,0 +1,568 @@
const translation = {
pageTitle: {
line1: 'YÊU CẦU',
line2: 'KỸ THUẬT',
},
orchestrate: 'Điều phối',
promptMode: {
simple: 'Chuyển sang Chế độ Chuyên gia để chỉnh sửa toàn bộ YÊU CẦU',
advanced: 'Chế độ Chuyên gia',
switchBack: 'Quay lại',
advancedWarning: {
title: 'Bạn đã chuyển sang Chế độ Chuyên gia. Sau khi sửa đổi YÊU CẦU, bạn KHÔNG THỂ quay lại chế độ cơ bản.',
description: 'Trong Chế độ Chuyên gia, bạn có thể chỉnh sửa toàn bộ YÊU CẦU.',
learnMore: 'Tìm hiểu thêm',
ok: 'Đồng ý',
},
operation: {
addMessage: 'Thêm tin nhắn',
},
contextMissing: 'Thiếu thành phần Ngữ cảnh, hiệu quả của yêu cầu có thể không tốt.',
},
operation: {
applyConfig: 'Áp dụng',
resetConfig: 'Đặt lại',
debugConfig: 'Gỡ lỗi',
addFeature: 'Thêm tính năng',
automatic: 'Tự động',
stopResponding: 'Dừng phản hồi',
agree: 'thích',
disagree: 'không thích',
cancelAgree: 'Bỏ thích',
cancelDisagree: 'Bỏ không thích',
userAction: 'Hành động người dùng ',
},
notSetAPIKey: {
title: 'Chưa thiết lập khóa API của nhà cung cấp LLM',
trailFinished: 'Kết thúc dùng thử',
description: 'Chưa thiết lập khóa API của nhà cung cấp LLM. Cần thiết lập trước khi gỡ lỗi.',
settingBtn: 'Đi đến cài đặt',
},
trailUseGPT4Info: {
title: 'Hiện không hỗ trợ GPT-4',
description: 'Để sử dụng GPT-4, vui lòng thiết lập API Key.',
},
feature: {
groupChat: {
title: 'Nâng cao trò chuyện',
description: 'Thêm cài đặt trước cho cuộc trò chuyện có thể cải thiện trải nghiệm người dùng.',
},
groupExperience: {
title: 'Nâng cao trải nghiệm',
},
conversationOpener: {
title: 'Mở đầu cuộc trò chuyện',
description: 'Trong ứng dụng trò chuyện, câu nói đầu tiên mà AI tự động nói với người dùng thường được sử dụng như một lời chào.',
},
suggestedQuestionsAfterAnswer: {
title: 'Câu hỏi gợi ý',
description: 'Thiết lập đề xuất câu hỏi tiếp theo có thể tạo ra cuộc trò chuyện tốt hơn cho người dùng.',
resDes: '3 đề xuất cho câu hỏi tiếp theo của người dùng.',
tryToAsk: 'Thử hỏi',
},
moreLikeThis: {
title: 'Thêm tương tự',
description: 'Tạo nhiều văn bản cùng một lúc, sau đó chỉnh sửa và tiếp tục tạo ra.',
generateNumTip: 'Số lượng mỗi lần tạo',
tip: 'Sử dụng tính năng này sẽ tiêu tốn thêm token.',
},
speechToText: {
title: 'Chuyển đổi giọng nói thành văn bản',
description: 'Khi được bật, bạn có thể sử dụng đầu vào bằng giọng nói.',
resDes: 'Đã bật đầu vào bằng giọng nói',
},
textToSpeech: {
title: 'Chuyển đổi văn bản thành giọng nói',
description: 'Khi được bật, văn bản có thể được chuyển đổi thành giọng nói.',
resDes: 'Đã bật chuyển đổi văn bản thành âm thanh',
},
citation: {
title: 'Trích dẫn và chú thích',
description: 'Khi được bật, hiển thị nguồn tài liệu và phần được trích dẫn của nội dung được tạo ra.',
resDes: 'Đã bật trích dẫn và chú thích',
},
annotation: {
title: 'Phản hồi có chú thích',
description: 'Bạn có thể thêm phản hồi chất lượng cao vào bộ nhớ cache để ưu tiên phù hợp với các câu hỏi tương tự của người dùng.',
resDes: 'Đã bật phản hồi có chú thích',
scoreThreshold: {
title: 'Ngưỡng điểm',
description: 'Được sử dụng để đặt ngưỡng tương đồng cho phản hồi có chú thích.',
easyMatch: 'Khớp dễ dàng',
accurateMatch: 'Khớp chính xác',
},
matchVariable: {
title: 'Biến khớp',
choosePlaceholder: 'Chọn biến khớp',
},
cacheManagement: 'Quản lý chú thích',
cached: 'Đã lưu cache',
remove: 'Xóa',
removeConfirm: 'Xóa chú thích này?',
add: 'Thêm chú thích',
edit: 'Chỉnh sửa chú thích',
},
dataSet: {
title: 'Ngữ cảnh',
noData: 'Bạn có thể nhập dữ liệu làm ngữ cảnh',
selectTitle: 'Chọn kiến thức tham khảo',
selected: 'Kiến thức đã chọn',
noDataSet: 'Không tìm thấy kiến thức',
toCreate: 'Tạo mới',
notSupportSelectMulti: 'Hiện chỉ hỗ trợ một kiến thức',
queryVariable: {
title: 'Biến truy vấn',
tip: 'Biến này sẽ được sử dụng làm đầu vào truy vấn để truy xuất ngữ cảnh, lấy thông tin ngữ cảnh liên quan đến đầu vào của biến này.',
choosePlaceholder: 'Chọn biến truy vấn',
noVar: 'Không có biến',
noVarTip: 'Vui lòng tạo một biến trong phần Biến',
unableToQueryDataSet: 'Không thể truy vấn kiến thức',
unableToQueryDataSetTip: 'Không thể truy vấn kiến thức thành công, vui lòng chọn một biến truy vấn ngữ cảnh trong phần ngữ cảnh.',
ok: 'Đồng ý',
contextVarNotEmpty: 'Biến truy vấn ngữ cảnh không thể trống',
deleteContextVarTitle: 'Xóa biến "{{varName}}"?',
deleteContextVarTip: 'Biến này đã được thiết lập là biến truy vấn ngữ cảnh, và việc xóa nó sẽ ảnh hưởng đến việc sử dụng bình thường của kiến thức. Nếu bạn vẫn cần xóa nó, vui lòng chọn lại biến khác trong phần ngữ cảnh.',
},
},
tools: {
title: 'Công cụ',
tips: 'Công cụ cung cấp phương thức gọi API tiêu chuẩn, sử dụng đầu vào của người dùng hoặc biến làm tham số yêu cầu để truy vấn dữ liệu bên ngoài như ngữ cảnh.',
toolsInUse: 'Đang sử dụng {{count}} công cụ',
modal: {
title: 'Công cụ',
toolType: {
title: 'Loại công cụ',
placeholder: 'Vui lòng chọn loại công cụ',
},
name: {
title: 'Tên',
placeholder: 'Vui lòng nhập tên',
},
variableName: {
title: 'Tên biến',
placeholder: 'Vui lòng nhập tên biến',
},
},
},
conversationHistory: {
title: 'Lịch sử cuộc trò chuyện',
description: 'Đặt tiền tố cho các vai trò trong cuộc trò chuyện',
tip: 'Lịch sử cuộc trò chuyện chưa được bật, vui lòng thêm <histories> vào phần prompt ở trên.',
learnMore: 'Tìm hiểu thêm',
editModal: {
title: 'Chỉnh sửa tên vai trò trong cuộc trò chuyện',
userPrefix: 'Tiền tố người dùng',
assistantPrefix: 'Tiền tố trợ lý',
},
},
toolbox: {
title: 'HỘP CÔNG CỤ',
},
moderation: {
title: 'Kiểm duyệt nội dung',
description: 'Bảo vệ đầu ra của mô hình bằng cách sử dụng API kiểm duyệt hoặc danh sách từ nhạy cảm.',
allEnabled: 'Đã bật kiểm duyệt nội dung ĐẦU VÀO/ĐẦU RA',
inputEnabled: 'Đã bật kiểm duyệt nội dung ĐẦU VÀO',
outputEnabled: 'Đã bật kiểm duyệt nội dung ĐẦU RA',
modal: {
title: 'Cài đặt kiểm duyệt nội dung',
provider: {
title: 'Nhà cung cấp',
openai: 'Kiểm duyệt OpenAI',
openaiTip: {
prefix: 'Kiểm duyệt OpenAI yêu cầu cấu hình khóa API OpenAI trong ',
suffix: '.',
},
keywords: 'Từ khóa',
},
keywords: {
tip: 'Mỗi dòng một từ khóa, phân tách bằng dòng mới. Tối đa 100 ký tự mỗi dòng.',
placeholder: 'Mỗi dòng một từ khóa, phân tách bằng dòng mới',
line: 'Dòng',
},
content: {
input: 'Kiểm duyệt nội dung ĐẦU VÀO',
output: 'Kiểm duyệt nội dung ĐẀU RA',
preset: 'Câu trả lời mẫu',
placeholder: 'Nội dung câu trả lời mẫu ở đây',
condition: 'Đã bật ít nhất một kiểm duyệt nội dung ĐẦU VÀO và ĐẦU RA',
fromApi: 'Câu trả lời mẫu được trả về bởi API',
errorMessage: 'Câu trả lời mẫu không thể trống',
supportMarkdown: 'Hỗ trợ Markdown',
},
openaiNotConfig: {
before: 'Kiểm duyệt OpenAI yêu cầu cấu hình khóa API OpenAI trong',
after: '',
},
},
contentEnableLabel: 'Đã bật nội dung kiểm duyệt',
},
fileUpload: {
title: 'Tải lên tệp',
description: 'Hộp nhập chat cho phép tải lên hình ảnh, tài liệu và các tệp khác.',
supportedTypes: 'Các loại tệp được hỗ trợ',
numberLimit: 'Số lượng tối đa có thể tải lên',
modalTitle: 'Cài đặt tải lên tệp',
},
imageUpload: {
title: 'Tải lên hình ảnh',
description: 'Cho phép tải lên hình ảnh.',
supportedTypes: 'Các loại tệp được hỗ trợ',
numberLimit: 'Số lượng tối đa có thể tải lên',
modalTitle: 'Cài đặt tải lên hình ảnh',
},
bar: {
empty: 'Bật tính năng để cải thiện trải nghiệm người dùng ứng dụng web',
enableText: 'Tính năng đã được bật',
manage: 'Quản lý',
},
documentUpload: {
title: 'Tài liệu',
description: 'Bật tài liệu sẽ cho phép mô hình nhận tài liệu và trả lời các câu hỏi về chúng.',
},
audioUpload: {
title: 'Âm thanh',
description: 'Bật âm thanh sẽ cho phép mô hình xử lý các tệp âm thanh để phiên âm và phân tích.',
},
},
automatic: {
},
resetConfig: {
title: 'Xác nhận đặt lại?',
message: 'Đặt lại sẽ loại bỏ các thay đổi, khôi phục cấu hình đã xuất bản lần cuối.',
},
errorMessage: {
nameOfKeyRequired: 'Tên của khóa: {{key}} là bắt buộc',
valueOfVarRequired: 'Giá trị {{key}} không thể trống',
queryRequired: 'Văn bản yêu cầu là bắt buộc.',
waitForResponse: 'Vui lòng đợi phản hồi của tin nhắn trước để hoàn thành.',
waitForBatchResponse: 'Vui lòng đợi phản hồi của tác vụ hàng loạt để hoàn thành.',
notSelectModel: 'Vui lòng chọn một mô hình',
waitForImgUpload: 'Vui lòng đợi hình ảnh được tải lên',
waitForFileUpload: 'Vui lòng đợi tệp / tệp tải lên',
},
chatSubTitle: 'Hướng dẫn',
completionSubTitle: 'Tiền tố lời nhắc',
promptTip: 'Lời nhắc hướng dẫn các phản hồi của AI với hướng dẫn và ràng buộc. Chèn biến như {{input}}. Lời nhắc này sẽ không được hiển thị cho người dùng.',
formattingChangedTitle: 'Định dạng đã thay đổi',
formattingChangedText: 'Thay đổi định dạng sẽ đặt lại khu vực gỡ lỗi, bạn có chắc chắn không?',
variableTitle: 'Biến',
variableTip: 'Người dùng điền các biến vào một biểu mẫu, tự động thay thế các biến trong lời nhắc.',
notSetVar: 'Biến cho phép người dùng đưa ra từ khóa lời nhắc hoặc mở đầu khi điền vào biểu mẫu. Bạn có thể thử nhập "{{input}}" trong các từ khóa lời nhắc.',
autoAddVar: 'Phát hiện biến không xác định được tham chiếu trong tiền-lời nhắc, bạn có muốn thêm chúng vào biểu mẫu đầu vào người dùng không?',
variableTable: {
key: 'Khóa biến',
name: 'Tên trường nhập liệu người dùng',
type: 'Loại nhập liệu',
action: 'Hành động',
typeString: 'Chuỗi',
typeSelect: 'Lựa chọn',
},
varKeyError: {
canNoBeEmpty: '{{key}} là bắt buộc',
tooLong: '{{key}} quá dài. Không thể dài hơn 30 ký tự',
notValid: '{{key}} không hợp lệ. Chỉ có thể chứa chữ cái, số, và dấu gạch dưới',
notStartWithNumber: '{{key}} không thể bắt đầu bằng số',
keyAlreadyExists: '{{key}} đã tồn tại',
},
otherError: {
promptNoBeEmpty: 'Lời nhắc không thể trống',
historyNoBeEmpty: 'Lịch sử cuộc trò chuyện phải được thiết lập trong lời nhắc',
queryNoBeEmpty: 'Truy vấn phải được thiết lập trong lời nhắc',
},
variableConfig: {
'addModalTitle': 'Thêm trường nhập',
'editModalTitle': 'Chỉnh sửa trường nhập',
'description': 'Cài đặt cho biến {{varName}}',
'fieldType': 'Loại trường',
'string': 'Văn bản ngắn',
'text-input': 'Văn bản ngắn',
'paragraph': 'Đoạn văn',
'select': 'Lựa chọn',
'number': 'Số',
'notSet': 'Chưa thiết lập, hãy thử nhập {{input}} trong gợi ý tiền tố',
'stringTitle': 'Tùy chọn hộp văn bản biểu mẫu',
'maxLength': 'Độ dài tối đa',
'options': 'Tùy chọn',
'addOption': 'Thêm tùy chọn',
'apiBasedVar': 'Biến dựa trên API',
'varName': 'Tên biến',
'labelName': 'Tên nhãn',
'inputPlaceholder': 'Vui lòng nhập',
'required': 'Bắt buộc',
'hide': 'Ẩn',
'errorMsg': {
labelNameRequired: 'Tên nhãn là bắt buộc',
varNameCanBeRepeat: 'Tên biến không được trùng lặp',
atLeastOneOption: 'Cần ít nhất một tùy chọn',
optionRepeat: 'Có các tùy chọn trùng lặp',
},
'defaultValue': 'Giá trị mặc định',
'noDefaultValue': 'Không có giá trị mặc định',
'selectDefaultValue': 'Chọn giá trị mặc định',
'file': {
image: {
name: 'Ảnh',
},
audio: {
name: 'Âm thanh',
},
document: {
name: 'Tài liệu',
},
video: {
name: 'Video',
},
custom: {
description: 'Chỉ định các loại tệp khác.',
name: 'Các loại tệp khác',
createPlaceholder: ' Phần mở rộng tệp, ví dụ: .doc',
},
supportFileTypes: 'Các loại tệp hỗ trợ',
},
'both': 'Cả hai',
'uploadFileTypes': 'Tải lên các loại tệp',
'localUpload': 'Tải lên cục bộ',
'single-file': 'Tệp đơn',
'content': 'Nội dung',
'multi-files': 'Danh sách tập tin',
'maxNumberOfUploads': 'Số lượt tải lên tối đa',
'maxNumberTip': 'Tài liệu < {{docLimit}}, hình ảnh < {{imgLimit}}, âm thanh < {{audioLimit}}, video < {{videoLimit}}',
'json': 'Mã JSON',
'checkbox': 'Hộp kiểm',
'optional': 'tùy chọn',
'jsonSchema': 'Sơ đồ JSON',
'unit': 'Đơn vị',
'startChecked': 'Bắt đầu kiểm tra',
'displayName': 'Tên hiển thị',
'startSelectedOption': 'Bắt đầu tùy chọn đã chọn',
'noDefaultSelected': 'Không chọn',
'tooltipsPlaceholder': 'Nhập văn bản hữu ích được hiển thị khi di chuột qua nhãn',
'unitPlaceholder': 'Đơn vị hiển thị sau số, ví dụ: mã thông báo',
'defaultValuePlaceholder': 'Nhập giá trị mặc định để điền trước trường',
'tooltips': 'Chú giải công cụ',
'placeholderPlaceholder': 'Nhập văn bản để hiển thị khi trường trống',
'uploadMethod': 'Phương pháp tải lên',
'showAllSettings': 'Hiển thị tất cả cài đặt',
'placeholder': 'Trình giữ chỗ',
},
vision: {
name: 'Thị giác',
description: 'Cho phép tính năng thị giác sẽ cho phép mô hình nhận diện hình ảnh và trả lời các câu hỏi về chúng.',
settings: 'Cài đặt',
visionSettings: {
title: 'Cài đặt thị giác',
resolution: 'Độ phân giải',
resolutionTooltip: `Độ phân giải thấp sẽ cho phép mô hình nhận một phiên bản hình ảnh 512 x 512 thấp hơn, và đại diện cho hình ảnh với ngân sách 65 token. Điều này cho phép API trả về phản hồi nhanh hơn và tiêu thụ ít token đầu vào cho các trường hợp sử dụng không yêu cầu chi tiết cao.
\n
Độ phân giải cao sẽ đầu tiên cho phép mô hình nhìn thấy hình ảnh thấp hơn và sau đó tạo ra các cắt chi tiết của hình ảnh đầu vào dưới dạng hình vuông 512px dựa trên kích thước hình ảnh đầu vào. Mỗi cắt chi tiết sử dụng hai lần ngân sách token cho tổng cộng 129 token.`,
high: 'Cao',
low: 'Thấp',
uploadMethod: 'Phương thức tải lên',
both: 'Cả hai',
localUpload: 'Tải lên nội bộ',
url: 'URL',
uploadLimit: 'Giới hạn tải lên',
},
onlySupportVisionModelTip: 'Chỉ hỗ trợ các mô hình thị giác',
},
voice: {
name: 'Giọng nói',
defaultDisplay: 'Giọng mặc định',
description: 'Cài đặt chuyển đổi văn bản thành giọng nói',
settings: 'Cài đặt',
voiceSettings: {
title: 'Cài đặt giọng nói',
language: 'Ngôn ngữ',
resolutionTooltip: 'Chuyển đổi văn bản thành giọng nói hỗ trợ ngôn ngữ.',
voice: 'Giọng nói',
autoPlay: 'Tự động phát',
autoPlayEnabled: 'Đã bật',
autoPlayDisabled: 'Đã tắt',
},
},
openingStatement: {
title: 'Mở đầu cuộc trò chuyện',
add: 'Thêm',
writeOpener: 'Viết câu mở đầu',
placeholder: 'Viết thông điệp mở đầu của bạn ở đây, bạn có thể sử dụng biến, hãy thử nhập {{biến}}.',
openingQuestion: 'Câu hỏi mở đầu',
openingQuestionPlaceholder: 'Bạn có thể sử dụng biến, hãy thử nhập {{variable}}.',
noDataPlaceHolder: 'Bắt đầu cuộc trò chuyện với người dùng có thể giúp AI thiết lập mối quan hệ gần gũi hơn với họ trong các ứng dụng trò chuyện.',
varTip: 'Bạn có thể sử dụng biến, hãy thử nhập {{biến}}',
tooShort: 'Cần ít nhất 20 từ trong lời nhắc ban đầu để tạo ra các câu mở đầu cho cuộc trò chuyện.',
notIncludeKey: 'Lời nhắc ban đầu không bao gồm biến: {{key}}. Vui lòng thêm nó vào lời nhắc ban đầu.',
},
modelConfig: {
model: 'Mô hình',
setTone: 'Thiết lập giọng điệu của phản hồi',
title: 'Mô hình và tham số',
modeType: {
chat: 'Trò chuyện',
completion: 'Hoàn thành',
},
},
inputs: {
title: 'Gỡ lỗi và xem trước',
noPrompt: 'Hãy thử viết một số lời nhắc trong trường tiền-lời nhắc',
userInputField: 'Trường nhập liệu người dùng',
noVar: 'Điền vào giá trị của biến, nó sẽ tự động thay thế từ khóa lời nhắc mỗi khi bắt đầu phiên mới.',
chatVarTip: 'Điền vào giá trị của biến, nó sẽ tự động thay thế từ khóa lời nhắc mỗi khi bắt đầu phiên mới',
completionVarTip: 'Điền vào giá trị của biến, nó sẽ tự động thay thế từ khóa lời nhắc mỗi khi một câu hỏi được gửi.',
previewTitle: 'Xem trước lời nhắc',
queryTitle: 'Nội dung truy vấn',
queryPlaceholder: 'Vui lòng nhập văn bản yêu cầu.',
run: 'CHẠY',
},
result: 'Văn bản đầu ra',
datasetConfig: {
settingTitle: 'Cài đặt truy xuất',
knowledgeTip: 'Nhấn vào nút "+" để thêm kiến thức',
retrieveOneWay: {
title: 'Truy xuất N-to-1',
description: 'Dựa trên ý định của người dùng và mô tả kiến thức, Agent tự động chọn kiến thức tốt nhất để truy vấn. Phù hợp nhất cho các ứng dụng có kiến thức cụ thể, giới hạn.',
},
retrieveMultiWay: {
title: 'Truy xuất đa hướng',
description: 'Dựa trên ý định của người dùng, truy vấn qua tất cả kiến thức, truy xuất văn bản liên quan từ nhiều nguồn và chọn ra kết quả tốt nhất phù hợp với truy vấn của người dùng sau khi sắp xếp lại. Yêu cầu cấu hình của API mô hình Rerank.',
},
rerankModelRequired: 'Mô hình Rerank là bắt buộc',
params: 'Tham số',
top_k: 'Top K',
top_kTip: 'Sử dụng để lọc các phần chính xác nhất với câu hỏi của người dùng. Hệ thống cũng sẽ tự động điều chỉnh giá trị của Top K, theo max_tokens của mô hình đã chọn.',
score_threshold: 'Ngưỡng điểm',
score_thresholdTip: 'Sử dụng để thiết lập ngưỡng tương đồng cho việc lọc các phần.',
retrieveChangeTip: 'Thay đổi chế độ chỉ mục và chế độ truy xuất có thể ảnh hưởng đến các ứng dụng liên quan đến kiến thức này.',
embeddingModelRequired: 'Cần có Mô hình nhúng được định cấu hình',
},
debugAsSingleModel: 'Gỡ lỗi như một mô hình',
debugAsMultipleModel: 'Gỡ lỗi như nhiều mô hình',
duplicateModel: 'Sao chép',
publishAs: 'Xuất bản dưới dạng',
assistantType: {
name: 'Loại trợ lý',
chatAssistant: {
name: 'Trợ lý cơ bản',
description: 'Xây dựng một trợ lý dựa trên trò chuyện sử dụng một Mô hình Ngôn ngữ Lớn.',
},
agentAssistant: {
name: 'Trợ lý tác nhân',
description: 'Xây dựng một tác nhân thông minh có thể tự động chọn các công cụ để hoàn thành các nhiệm vụ.',
},
},
agent: {
agentMode: 'Chế độ tác nhân',
agentModeDes: 'Thiết lập loại chế độ suy luận cho tác nhân',
agentModeType: {
ReACT: 'ReAct',
functionCall: 'Gọi hàm',
},
setting: {
name: 'Thiết lập tác nhân',
description: 'Thiết lập tác nhân cho phép cấu hình chế độ tác nhân và các tính năng nâng cao như lời nhắc tích hợp sẵn, chỉ có sẵn trong loại Tác nhân.',
maximumIterations: {
name: 'Số lần lặp tối đa',
description: 'Giới hạn số lần lặp mà một trợ lý tác nhân có thể thực hiện',
},
},
buildInPrompt: 'Lời nhắc tích hợp',
firstPrompt: 'Lời nhắc đầu tiên',
nextIteration: 'Lần lặp tiếp theo',
promptPlaceholder: 'Viết lời nhắc của bạn ở đây',
tools: {
name: 'Công cụ',
description: 'Sử dụng công cụ có thể mở rộng khả năng của LLM, như tìm kiếm trên internet hoặc thực hiện các phép tính khoa học',
enabled: 'Đã kích hoạt',
},
},
codegen: {
generate: 'Đẻ ra',
instruction: 'Chỉ thị',
generatedCodeTitle: 'Mã được tạo',
loading: 'Đang tạo mã...',
title: 'Trình tạo mã',
instructionPlaceholder: 'Nhập mô tả chi tiết về mã bạn muốn tạo.',
overwriteConfirmMessage: 'Hành động này sẽ ghi đè lên mã hiện có. Bạn có muốn tiếp tục không?',
description: 'Trình tạo mã sử dụng các mô hình đã định cấu hình để tạo mã chất lượng cao dựa trên hướng dẫn của bạn. Vui lòng cung cấp hướng dẫn rõ ràng và chi tiết.',
resTitle: 'Mã được tạo',
apply: 'Áp dụng',
overwriteConfirmTitle: 'Ghi đè mã hiện có?',
applyChanges: 'Áp dụng thay đổi',
noDataLine1: 'Mô tả trường hợp sử dụng của bạn ở bên trái,',
noDataLine2: 'Bản xem trước mã sẽ hiển thị ở đây.',
},
generate: {
template: {
pythonDebugger: {
instruction: 'Một bot có thể tạo và gỡ lỗi mã của bạn dựa trên hướng dẫn của bạn',
name: 'Trình gỡ lỗi Python',
},
translation: {
name: 'Dịch',
instruction: 'Một dịch giả có thể dịch nhiều ngôn ngữ',
},
professionalAnalyst: {
name: 'Chuyên viên phân tích chuyên nghiệp',
instruction: 'Trích xuất thông tin chi tiết, xác định rủi ro và chắt lọc thông tin quan trọng từ các báo cáo dài thành một bản ghi nhớ duy nhất',
},
excelFormulaExpert: {
name: 'Chuyên gia công thức Excel',
instruction: 'Một chatbot có thể giúp người dùng mới hiểu, sử dụng và tạo công thức Excel dựa trên hướng dẫn của người dùng',
},
travelPlanning: {
instruction: 'Trợ lý lập kế hoạch du lịch là một công cụ thông minh được thiết kế để giúp người dùng dễ dàng lên kế hoạch cho các chuyến đi của họ',
name: 'Lập kế hoạch du lịch',
},
SQLSorcerer: {
instruction: 'Chuyển đổi ngôn ngữ hàng ngày thành truy vấn SQL',
name: 'SQL sorcerer',
},
GitGud: {
name: 'Git gud',
instruction: 'Tạo các lệnh Git thích hợp dựa trên các hành động kiểm soát phiên bản được người dùng mô tả',
},
meetingTakeaways: {
name: 'Bài học rút ra trong cuộc họp',
instruction: 'Chắt lọc các cuộc họp thành các bản tóm tắt ngắn gọn bao gồm các chủ đề thảo luận, bài học chính và các mục hành động',
},
writingsPolisher: {
name: 'Máy đánh bóng viết',
instruction: 'Sử dụng các kỹ thuật chỉnh sửa nội dung nâng cao để cải thiện bài viết của bạn',
},
},
generate: 'Đẻ ra',
tryIt: 'Dùng thử',
apply: 'Áp dụng',
instruction: 'Chỉ thị',
title: 'Trình tạo nhắc nhở',
resTitle: 'Lời nhắc được tạo',
loading: 'Sắp xếp ứng dụng cho bạn...',
description: 'Trình tạo lời nhắc sử dụng mô hình được định cấu hình để tối ưu hóa lời nhắc cho chất lượng cao hơn và cấu trúc tốt hơn. Vui lòng viết hướng dẫn rõ ràng và chi tiết.',
overwriteMessage: 'Áp dụng lời nhắc này sẽ ghi đè cấu hình hiện có.',
overwriteTitle: 'Ghi đè cấu hình hiện có?',
versions: 'Phiên bản',
optimizationNote: 'Chú thích tối ưu hóa',
to: 'đến',
version: 'Phiên bản',
idealOutput: 'Đầu ra lý tưởng',
press: 'Báo chí',
optimizePromptTooltip: 'Tối ưu hóa trong trình tạo prompt',
optional: 'Tùy chọn',
insertContext: 'Chèn ngữ cảnh',
instructionPlaceHolderLine3: 'Giọng điệu quá nghiêm khắc, hãy làm cho nó thân thiện hơn.',
dismiss: 'Bỏ qua',
instructionPlaceHolderTitle: 'Mô tả cách bạn muốn cải thiện câu lệnh này. Ví dụ:',
latest: 'Mới nhất',
instructionPlaceHolderLine1: 'Làm cho đầu ra ngắn gọn hơn, giữ lại các điểm chính.',
newNoDataLine1: 'Viết một hướng dẫn trong cột bên trái và nhấp vào Tạo để xem phản hồi.',
idealOutputPlaceholder: 'Mô tả định dạng phản hồi lý tưởng của bạn, độ dài, giọng điệu và yêu cầu về nội dung...',
codeGenInstructionPlaceHolderLine: 'Càng chi tiết phản hồi, chẳng hạn như các loại dữ liệu đầu vào và đầu ra cũng như cách các biến được xử lý, thì việc tạo mã sẽ càng chính xác.',
instructionPlaceHolderLine2: 'Định dạng đầu ra không chính xác, vui lòng tuân thủ nghiêm ngặt định dạng JSON.',
},
warningMessage: {
timeoutExceeded: 'Kết quả không được hiển thị do hết thời gian chờ. Vui lòng tham khảo nhật ký để thu thập kết quả đầy đủ.',
},
noResult: 'Đầu ra sẽ được hiển thị ở đây.',
}
export default translation

View File

@@ -0,0 +1,112 @@
const translation = {
title: 'Nhật ký',
description: 'Nhật ký ghi lại trạng thái hoạt động của ứng dụng, bao gồm đầu vào của người dùng và phản hồi của trí tuệ nhân tạo.',
dateTimeFormat: 'MM/DD/YYYY hh:mm:ss A',
table: {
header: {
updatedTime: 'Thời gian cập nhật',
time: 'Thời gian tạo',
endUser: 'Người dùng cuối hoặc tài khoản',
input: 'Đầu vào',
output: 'Đầu ra',
summary: 'Tóm tắt',
messageCount: 'Số lượng tin nhắn',
userRate: 'Đánh giá người dùng',
adminRate: 'Đánh giá quản trị viên',
startTime: 'THỜI GIAN BẮT ĐẦU',
status: 'TRẠNG THÁI',
runtime: 'THỜI GIAN CHẠY',
tokens: 'TOKEN',
user: 'NGƯỜI DÙNG CUỐI HOẶC TÀI KHOẢN',
version: 'PHIÊN BẢN',
triggered_from: 'KÍCH HOẠT BỞI',
},
pagination: {
previous: 'Trước',
next: 'Sau',
},
empty: {
noChat: 'Chưa có cuộc trò chuyện',
noOutput: 'Không có đầu ra',
element: {
title: 'Chưa có dữ liệu',
content: 'Quan sát và chú thích các tương tác giữa người dùng cuối và ứng dụng trí tuệ nhân tạo ở đây để liên tục cải thiện độ chính xác của AI. Bạn có thể thử <shareLink>chia sẻ</shareLink> hoặc <testLink>kiểm tra</testLink> ứng dụng Web, sau đó quay lại trang này.',
},
},
},
detail: {
time: 'Thời gian',
conversationId: 'ID cuộc trò chuyện',
promptTemplate: 'Mẫu lời nhắc',
promptTemplateBeforeChat: 'Mẫu lời nhắc trước trò chuyện · Tin nhắn hệ thống',
annotationTip: 'Cải thiện được đánh dấu bởi {{user}}',
timeConsuming: '',
second: 'giây',
tokenCost: 'Chi phí token',
loading: 'Đang tải',
operation: {
like: 'Thích',
dislike: 'Không thích',
addAnnotation: 'Thêm chú thích',
editAnnotation: 'Chỉnh sửa chú thích',
annotationPlaceholder: 'Nhập câu trả lời mong muốn từ AI. Điều này sẽ được sử dụng để điều chỉnh mô hình và cải thiện chất lượng sinh văn bản trong tương lai.',
},
variables: 'Biến',
uploadImages: 'Ảnh đã tải lên',
modelParams: 'Thông số mô hình',
},
filter: {
period: {
today: 'Hôm nay',
last7days: '7 ngày qua',
last4weeks: '4 tuần qua',
last3months: '3 tháng qua',
last12months: '12 tháng qua',
monthToDate: 'Tháng hiện tại',
quarterToDate: 'Quý hiện tại',
yearToDate: 'Năm hiện tại',
allTime: 'Tất cả thời gian',
custom: 'Tùy chỉnh',
last30days: '30 Ngày Qua',
},
annotation: {
all: 'Tất cả',
annotated: 'Đã chú thích ({{count}} mục)',
not_annotated: 'Chưa chú thích',
},
sortBy: 'Sắp xếp theo:',
descending: 'giảm dần',
ascending: 'tăng dần',
},
workflowTitle: 'Nhật ký quy trình làm việc',
workflowSubtitle: 'Nhật ký ghi lại hoạt động của Tự động hóa.',
runDetail: {
title: 'Nhật ký cuộc trò chuyện',
workflowTitle: 'Chi tiết nhật ký',
fileListDetail: 'Chi tiết',
fileListLabel: 'Chi tiết tệp',
testWithParams: 'Kiểm tra với các tham số',
},
promptLog: 'Nhật ký lời nhắc',
viewLog: 'Xem nhật ký',
agentLogDetail: {
toolUsed: 'Công cụ đã sử dụng',
iterations: 'Số lần lặp',
iteration: 'Lần lặp',
finalProcessing: 'Xử lý cuối cùng',
agentMode: 'Chế độ đại lý',
},
agentLog: 'Nhật ký đại lý',
dateFormat: 'MM/DD/YYYY',
triggerBy: {
debugging: 'Gỡ lỗi',
appRun: 'Ứng dụng web',
webhook: 'Webhook',
schedule: 'Lịch trình',
plugin: 'Tiện ích mở rộng',
ragPipelineRun: 'Chuỗi Xử lý RAG',
ragPipelineDebugging: 'Gỡ lỗi RAG',
},
}
export default translation

View File

@@ -0,0 +1,189 @@
const translation = {
welcome: {
firstStepTip: 'Để bắt đầu,',
enterKeyTip: 'nhập khóa API OpenAI của bạn bên dưới',
getKeyTip: 'Lấy khóa API từ bảng điều khiển OpenAI',
placeholder: 'Khóa API OpenAI của bạn (ví dụ: sk-xxxx)',
},
apiKeyInfo: {
cloud: {
trial: {
title: 'Bạn đang sử dụng gói dùng thử của {{providerName}}.',
description: 'Gói dùng thử được cung cấp để bạn kiểm tra. Trước khi hết lượt gọi của gói dùng thử, vui lòng thiết lập nhà cung cấp mô hình riêng hoặc mua thêm hạn mức.',
},
exhausted: {
title: 'Gói dùng thử của bạn đã hết, vui lòng thiết lập khóa API của bạn.',
description: 'Gói dùng thử của bạn đã hết. Vui lòng thiết lập nhà cung cấp mô hình riêng hoặc mua thêm hạn mức.',
},
},
selfHost: {
title: {
row1: 'Để bắt đầu,',
row2: 'hãy thiết lập nhà cung cấp mô hình của bạn trước.',
},
},
callTimes: 'Số lần gọi',
usedToken: 'Token đã sử dụng',
setAPIBtn: 'Thiết lập nhà cung cấp mô hình',
tryCloud: 'Hoặc dùng thử phiên bản đám mây của Dify với gói miễn phí',
},
overview: {
title: 'Tổng quan',
appInfo: {
explanation: 'Ứng dụng web AI sẵn sàng sử dụng',
accessibleAddress: 'Địa chỉ công khai',
preview: 'Xem trước',
regenerate: 'Tạo lại',
regenerateNotice: 'Bạn có muốn tạo lại địa chỉ công khai không?',
preUseReminder: 'Vui lòng kích hoạt ứng dụng web trước khi tiếp tục.',
settings: {
entry: 'Cài đặt',
title: 'Cài đặt ứng dụng web',
webName: 'Tên ứng dụng web',
webDesc: 'Mô tả ứng dụng web',
webDescTip: 'Văn bản này sẽ hiển thị ở phía người dùng, cung cấp hướng dẫn cơ bản về cách sử dụng ứng dụng',
webDescPlaceholder: 'Nhập mô tả của ứng dụng web',
language: 'Ngôn ngữ',
workflow: {
title: 'Các bước quy trình',
show: 'Hiển thị',
hide: 'Ẩn',
showDesc: 'Hiển thị hoặc ẩn chi tiết dòng công việc trong web app',
subTitle: 'Chi tiết quy trình làm việc',
},
chatColorTheme: 'Giao diện màu trò chuyện',
chatColorThemeDesc: 'Thiết lập giao diện màu của chatbot',
chatColorThemeInverted: 'Đảo ngược',
invalidHexMessage: 'Giá trị mã màu không hợp lệ',
invalidPrivacyPolicy: 'Liên kết chính sách bảo mật không hợp lệ. Vui lòng sử dụng liên kết hợp lệ bắt đầu bằng http hoặc https',
more: {
entry: 'Hiển thị thêm cài đặt',
copyright: 'Bản quyền',
copyRightPlaceholder: 'Nhập tên tác giả hoặc tổ chức',
privacyPolicy: 'Chính sách bảo mật',
privacyPolicyPlaceholder: 'Nhập liên kết chính sách bảo mật',
privacyPolicyTip: 'Giúp người dùng hiểu dữ liệu mà ứng dụng thu thập, xem <privacyPolicyLink>Chính sách bảo mật</privacyPolicyLink> của Dify.',
customDisclaimer: 'Tuyên bố từ chối trách nhiệm tùy chỉnh',
customDisclaimerPlaceholder: 'Nhập liên kết tuyên bố từ chối trách nhiệm',
customDisclaimerTip: 'Liên kết này sẽ hiển thị ở phía người dùng, cung cấp thông tin về trách nhiệm của ứng dụng',
copyrightTip: 'Hiển thị thông tin bản quyền trong ứng dụng web',
copyrightTooltip: 'Vui lòng nâng cấp lên gói Professional trở lên',
},
sso: {
title: 'SSO ứng dụng web',
description: 'Tất cả người dùng được yêu cầu đăng nhập bằng SSO trước khi sử dụng web app',
tooltip: 'Liên hệ với quản trị viên để bật SSO web app',
label: 'Xác thực SSO',
},
modalTip: 'Cài đặt ứng dụng web phía máy khách.',
},
embedded: {
entry: 'Nhúng',
title: 'Nhúng vào trang web',
explanation: 'Chọn cách nhúng ứng dụng trò chuyện vào trang web của bạn',
iframe: 'Để thêm ứng dụng trò chuyện vào bất kỳ đâu trên trang web của bạn, hãy thêm iframe này vào mã HTML của bạn.',
scripts: 'Để thêm ứng dụng trò chuyện vào góc dưới bên phải của trang web, thêm mã này vào mã HTML của bạn.',
chromePlugin: 'Cài đặt tiện ích mở rộng Dify Chatbot cho Chrome',
copied: 'Đã sao chép',
copy: 'Sao chép',
},
qrcode: {
title: 'Mã QR để chia sẻ',
scan: 'Quét và chia sẻ ứng dụng',
download: 'Tải xuống mã QR',
},
customize: {
way: 'cách',
entry: 'Tùy chỉnh',
title: 'Tùy chỉnh ứng dụng web AI',
explanation: 'Bạn có thể tùy chỉnh giao diện của ứng dụng web để phù hợp với kịch bản và phong cách mong muốn.',
way1: {
name: 'Fork mã nguồn phía client, sửa đổi và triển khai lên Vercel (khuyến nghị)',
step1: 'Fork mã nguồn phía client và sửa đổi',
step1Tip: 'Nhấp vào đây để fork mã nguồn vào tài khoản GitHub của bạn và sửa đổi',
step1Operation: 'Dify-WebClient',
step2: 'Triển khai lên Vercel',
step2Tip: 'Nhấp vào đây để nhập kho lưu trữ vào Vercel và triển khai',
step2Operation: 'Nhập kho lưu trữ',
step3: 'Cấu hình biến môi trường',
step3Tip: 'Thêm các biến môi trường sau vào Vercel',
},
way2: {
name: 'Viết mã phía client để gọi API và triển khai lên máy chủ',
operation: 'Tài liệu',
},
},
launch: 'Phóng',
enableTooltip: {
description: 'Để kích hoạt tính năng này, vui lòng thêm một nút Nhập Người Dùng vào bảng điều khiển. (Có thể đã tồn tại trong bản nháp, có hiệu lực sau khi xuất bản)',
learnMore: 'Tìm hiểu thêm',
},
title: 'Ứng dụng web',
},
apiInfo: {
title: 'API dịch vụ backend',
explanation: 'Dễ dàng tích hợp vào ứng dụng của bạn',
accessibleAddress: 'Điểm cuối dịch vụ API',
doc: 'Tài liệu tham khảo API',
},
status: {
running: 'Đang hoạt động',
disable: 'Đã tắt',
},
triggerInfo: {
title: 'Nguyên nhân kích hoạt',
explanation: 'Quản lý kích hoạt quy trình làm việc',
triggersAdded: '{{count}} Kích hoạt đã được thêm',
noTriggerAdded: 'Chưa thêm trình kích hoạt',
triggerStatusDescription: 'Trạng thái nút kích hoạt sẽ hiển thị ở đây. (Có thể đã tồn tại trong bản nháp, có hiệu lực sau khi xuất bản)',
learnAboutTriggers: 'Tìm hiểu về Các trình kích hoạt',
},
disableTooltip: {
triggerMode: 'Tính năng {{feature}} không được hỗ trợ trong chế độ Nút Kích hoạt.',
},
},
analysis: {
title: 'Phân tích',
ms: 'ms',
tokenPS: 'Token/giây',
totalMessages: {
title: 'Tổng số tin nhắn',
explanation: 'Số lượng tương tác AI hàng ngày.',
},
totalConversations: {
title: 'Tổng số cuộc hội thoại',
explanation: 'Số lượng cuộc hội thoại AI hàng ngày; không bao gồm kỹ thuật/gỡ lỗi prompt.',
},
activeUsers: {
title: 'Người dùng hoạt động',
explanation: 'Số người dùng duy nhất tham gia trò chuyện với AI; không tính việc tạo lại/lặp lại câu hỏi.',
},
tokenUsage: {
title: 'Sử dụng token',
explanation: 'Phản ánh việc sử dụng mô hình ngôn ngữ hàng ngày cho ứng dụng, hữu ích cho mục đích kiểm soát chi phí.',
consumed: 'Đã sử dụng',
},
avgSessionInteractions: {
title: 'Trung bình tương tác mỗi phiên',
explanation: 'Số lần giao tiếp liên tục giữa người dùng và AI; áp dụng cho các ứng dụng dựa trên trò chuyện.',
},
avgUserInteractions: {
title: 'Trung bình tương tác mỗi người dùng',
explanation: 'Phản ánh tần suất sử dụng hàng ngày của người dùng. Chỉ số này cho biết mức độ gắn kết của người dùng.',
},
userSatisfactionRate: {
title: 'Tỷ lệ hài lòng của người dùng',
explanation: 'Số lượt thích trên mỗi 1.000 tin nhắn. Chỉ số này cho biết tỷ lệ câu trả lời mà người dùng rất hài lòng.',
},
avgResponseTime: {
title: 'Thời gian phản hồi trung bình',
explanation: 'Thời gian (ms) để AI xử lý/phản hồi; áp dụng cho các ứng dụng dựa trên văn bản.',
},
tps: {
title: 'Tốc độ đầu ra token',
explanation: 'Đo lường hiệu suất của LLM. Đếm tốc độ đầu ra token của LLM từ khi bắt đầu yêu cầu đến khi hoàn thành đầu ra.',
},
},
}
export default translation

349
dify/web/i18n/vi-VN/app.ts Normal file
View File

@@ -0,0 +1,349 @@
const translation = {
createApp: 'TẠO ỨNG DỤNG',
types: {
all: 'Tất cả',
chatbot: 'Chatbot',
agent: 'Tác nhân',
workflow: 'Quy trình',
completion: 'Hoàn thành',
advanced: 'Dòng trò chuyện',
basic: 'Cơ bản',
},
duplicate: 'Sao chép',
duplicateTitle: 'Sao chép ứng dụng',
export: 'Xuất DSL',
exportFailed: 'Xuất DSL thất bại.',
importDSL: 'Nhập tệp DSL',
createFromConfigFile: 'Tạo từ tệp DSL',
deleteAppConfirmTitle: 'Xóa ứng dụng này?',
deleteAppConfirmContent:
'Việc xóa ứng dụng là không thể hoàn tác. Người dùng sẽ không thể truy cập vào ứng dụng của bạn nữa và tất cả cấu hình cũng như nhật ký nhắc sẽ bị xóa vĩnh viễn.',
appDeleted: 'Ứng dụng đã bị xóa',
appDeleteFailed: 'Không thể xóa ứng dụng',
join: 'Tham gia cộng đồng',
communityIntro:
'Thảo luận với các thành viên nhóm, người đóng góp và nhà phát triển trên các kênh khác nhau.',
roadmap: 'Xem lộ trình của chúng tôi',
newApp: {
startFromBlank: 'Tạo mới',
startFromTemplate: 'Tạo từ mẫu',
workflowWarning: 'Hiện đang trong phiên bản beta',
captionName: 'Biểu tượng và tên ứng dụng',
appNamePlaceholder: 'Đặt tên cho ứng dụng của bạn',
captionDescription: 'Mô tả',
appDescriptionPlaceholder: 'Nhập mô tả của ứng dụng',
useTemplate: 'Sử dụng mẫu này',
previewDemo: 'Xem trước demo',
chatApp: 'Trợ lý',
chatAppIntro:
'Tôi muốn xây dựng một ứng dụng trò chuyện. Ứng dụng này sử dụng định dạng hỏi đáp, cho phép nhiều vòng trò chuyện liên tục.',
agentAssistant: 'Trợ lý tác nhân mới',
completeApp: 'Máy tạo văn bản',
completeAppIntro:
'Tôi muốn tạo một ứng dụng tạo văn bản chất lượng cao dựa trên gợi ý, như tạo bài viết, tóm tắt, dịch thuật và nhiều hơn nữa.',
showTemplates: 'Tôi muốn chọn từ mẫu',
hideTemplates: 'Quay lại chế độ lựa chọn',
Create: 'Tạo',
Cancel: 'Hủy',
nameNotEmpty: 'Tên không được để trống',
appTemplateNotSelected: 'Vui lòng chọn một mẫu',
appTypeRequired: 'Vui lòng chọn loại ứng dụng',
appCreated: 'Ứng dụng đã được tạo',
appCreateFailed: 'Không thể tạo ứng dụng',
Confirm: 'Xác nhận',
caution: 'Thận trọng',
appCreateDSLErrorPart1: 'Một sự khác biệt đáng kể trong các phiên bản DSL đã được phát hiện. Buộc nhập có thể khiến ứng dụng bị trục trặc.',
appCreateDSLErrorPart2: 'Bạn có muốn tiếp tục không?',
appCreateDSLErrorTitle: 'Phiên bản không tương thích',
appCreateDSLErrorPart3: 'Phiên bản DSL ứng dụng hiện tại:',
appCreateDSLWarning: 'Phạt cảnh cáo: Sự khác biệt về phiên bản DSL có thể ảnh hưởng đến một số tính năng nhất định',
appCreateDSLErrorPart4: 'Phiên bản DSL được hệ thống hỗ trợ:',
forBeginners: 'Các loại ứng dụng cơ bản hơn',
chooseAppType: 'Chọn loại ứng dụng',
chatbotShortDescription: 'Chatbot dựa trên LLM với thiết lập đơn giản',
noTemplateFoundTip: 'Hãy thử tìm kiếm bằng các từ khóa khác nhau.',
workflowShortDescription: 'Luồng tác nhân cho tự động hóa thông minh',
optional: 'Tùy chọn',
advancedShortDescription: 'Quy trình làm việc cho các cuộc đối thoại nhiều lượt phức tạp với bộ nhớ',
workflowUserDescription: 'Xây dựng trực quan quy trình AI tự động bằng kéo thả đơn giản.',
foundResults: '{{count}} Kết quả',
chatbotUserDescription: 'Nhanh chóng xây dựng chatbot dựa trên LLM với cấu hình đơn giản. Bạn có thể chuyển sang Chatflow sau.',
agentUserDescription: 'Một tác nhân thông minh có khả năng suy luận lặp đi lặp lại và sử dụng công cụ tự động để đạt được mục tiêu nhiệm vụ.',
noIdeaTip: 'Không có ý tưởng? Kiểm tra các mẫu của chúng tôi',
advancedUserDescription: 'Quy trình với tính năng bộ nhớ bổ sung và giao diện chatbot.',
forAdvanced: 'DÀNH CHO NGƯỜI DÙNG NÂNG CAO',
foundResult: '{{count}} Kết quả',
agentShortDescription: 'Quy trình nâng cao cho hội thoại nhiều lượt',
noTemplateFound: 'Không tìm thấy mẫu',
noAppsFound: 'Không tìm thấy ứng dụng nào',
learnMore: 'Tìm hiểu thêm',
completionShortDescription: 'Trợ lý AI cho các tác vụ tạo văn bản',
completionUserDescription: 'Nhanh chóng xây dựng trợ lý AI cho các tác vụ tạo văn bản với cấu hình đơn giản.',
dropDSLToCreateApp: 'Kéo tệp DSL vào đây để tạo ứng dụng',
import: 'Nhập khẩu',
},
editApp: 'Chỉnh sửa thông tin',
editAppTitle: 'Chỉnh sửa thông tin ứng dụng',
editDone: 'Thông tin ứng dụng đã được cập nhật',
editFailed: 'Không thể cập nhật thông tin ứng dụng',
iconPicker: {
ok: 'Đồng ý',
cancel: 'Hủy',
emoji: 'Biểu tượng cảm xúc',
image: 'Hình ảnh',
},
switch: 'Chuyển sang quản lý quy trình',
switchTipStart: 'Một bản sao ứng dụng mới sẽ được tạo và chuyển sang quản lý quy trình. Bản sao mới sẽ ',
switchTip: 'không thể',
switchTipEnd: ' chuyển lại quản lý cơ bản.',
switchLabel: 'Bản sao ứng dụng sẽ được tạo',
removeOriginal: 'Xóa ứng dụng gốc',
switchStart: 'Bắt đầu chuyển',
typeSelector: {
all: 'Tất cả loại',
chatbot: 'Chatbot',
agent: 'Tác nhân',
workflow: 'Quy trình',
completion: 'Hoàn thành',
advanced: 'Dòng trò chuyện',
},
tracing: {
title: 'Theo dõi hiệu suất ứng dụng',
description: 'Cấu hình nhà cung cấp LLMOps bên thứ ba và theo dõi hiệu suất ứng dụng.',
config: 'Cấu hình',
collapse: 'Thu gọn',
expand: 'Mở rộng',
tracing: 'Theo dõi',
disabled: 'Đã tắt',
disabledTip: 'Vui lòng cấu hình nhà cung cấp trước',
enabled: 'Đang hoạt động',
tracingDescription: 'Ghi lại toàn bộ ngữ cảnh thực thi ứng dụng, bao gồm các cuộc gọi LLM, ngữ cảnh, lời nhắc, yêu cầu HTTP và nhiều hơn nữa, đến một nền tảng theo dõi của bên thứ ba.',
configProviderTitle: {
configured: 'Đã cấu hình',
notConfigured: 'Cấu hình nhà cung cấp để bật theo dõi',
moreProvider: 'Thêm nhà cung cấp',
},
arize: {
title: 'Arize',
description: 'Khả năng quan sát LLM cấp doanh nghiệp, đánh giá trực tuyến và ngoại tuyến, giám sát và thử nghiệm—được hỗ trợ bởi OpenTelemetry. Được thiết kế đặc biệt cho các ứng dụng dựa trên LLM và tác nhân.',
},
phoenix: {
title: 'Phoenix',
description: 'Nền tảng mã nguồn mở và dựa trên OpenTelemetry cho khả năng quan sát, đánh giá, kỹ thuật prompt và thử nghiệm cho quy trình làm việc và tác nhân LLM của bạn.',
},
langsmith: {
title: 'LangSmith',
description: 'Nền tảng phát triển tất cả trong một cho mọi bước của vòng đời ứng dụng được hỗ trợ bởi LLM.',
},
langfuse: {
title: 'Langfuse',
description: 'Theo dõi, đánh giá, quản lý lời nhắc và số liệu để gỡ lỗi và cải thiện ứng dụng LLM của bạn.',
},
inUse: 'Đang sử dụng',
configProvider: {
title: 'Cấu hình ',
placeholder: 'Nhập {{key}} của bạn',
project: 'Dự án',
publicKey: 'Khóa công khai',
secretKey: 'Khóa bí mật',
viewDocsLink: 'Xem tài liệu {{key}}',
removeConfirmTitle: 'Xóa cấu hình {{key}}?',
removeConfirmContent: 'Cấu hình hiện tại đang được sử dụng, việc xóa nó sẽ tắt tính năng Theo dõi.',
username: 'Tên người dùng',
password: 'Mật khẩu',
clientId: 'ID Khách Hàng OAuth',
databricksHost: 'URL Workspace của Databricks',
trackingUri: 'URI theo dõi',
clientSecret: 'Bí mật Khách hàng OAuth',
personalAccessToken: 'Mã truy cập cá nhân (cũ)',
experimentId: 'Mã thí nghiệm',
},
view: 'Cảnh',
opik: {
description: 'Opik là một nền tảng mã nguồn mở để đánh giá, thử nghiệm và giám sát các ứng dụng LLM.',
title: 'Opik',
},
weave: {
title: 'Dệt',
description: 'Weave là một nền tảng mã nguồn mở để đánh giá, thử nghiệm và giám sát các ứng dụng LLM.',
},
aliyun: {
title: 'Giám sát Đám mây',
description: 'Nền tảng quan sát được quản lý hoàn toàn và không cần bảo trì do Alibaba Cloud cung cấp, cho phép giám sát, theo dõi và đánh giá các ứng dụng Dify ngay lập tức.',
},
mlflow: {
title: 'MLflow',
description: 'Nền tảng LLMOps mã nguồn mở cho theo dõi thử nghiệm, khả năng quan sát và đánh giá, để xây dựng ứng dụng AI/LLM với sự tự tin.',
},
databricks: {
title: 'Databricks',
description: 'Databricks cung cấp MLflow được quản lý hoàn toàn với quản trị mạnh mẽ và bảo mật để lưu trữ dữ liệu theo dõi.',
},
tencent: {
title: 'Tencent APM',
description: 'Giám sát hiệu suất ứng dụng của Tencent cung cấp khả năng theo dõi toàn diện và phân tích đa chiều cho các ứng dụng LLM.',
},
},
answerIcon: {
description: 'Có nên sử dụng biểu tượng web app để thay thế 🤖 trong ứng dụng được chia sẻ hay không',
descriptionInExplore: 'Có nên sử dụng biểu tượng web app để thay thế 🤖 trong Khám phá hay không',
title: 'Sử dụng biểu tượng web app để thay thế 🤖',
},
importFromDSLFile: 'Từ tệp DSL',
importFromDSL: 'Nhập từ DSL',
importFromDSLUrlPlaceholder: 'Dán liên kết DSL vào đây',
dslUploader: {
button: 'Kéo và thả tệp, hoặc',
browse: 'Duyệt',
},
importFromDSLUrl: 'Từ URL',
mermaid: {
handDrawn: 'Vẽ tay',
classic: 'Cổ điển',
},
openInExplore: 'Mở trong Khám phá',
newAppFromTemplate: {
sidebar: {
Recommended: 'Khuyến cáo',
Assistant: 'Phó',
Writing: 'Văn',
Workflow: 'Quy trình làm việc',
Agent: 'Người đại lý',
Programming: 'Chương trình',
HR: 'HR',
},
searchAllTemplate: 'Tìm kiếm tất cả các mẫu...',
byCategories: 'THEO DANH MỤC',
},
showMyCreatedAppsOnly: 'Chỉ hiển thị ứng dụng do tôi tạo',
appSelector: {
params: 'THÔNG SỐ ỨNG DỤNG',
placeholder: 'Chọn một ứng dụng...',
noParams: 'Không cần thông số',
label: 'Ứng dụng',
},
structOutput: {
configure: 'Cấu hình',
required: 'Yêu cầu',
notConfiguredTip: 'Đầu ra có cấu trúc chưa được cấu hình.',
modelNotSupported: 'Mô hình không được hỗ trợ',
LLMResponse: 'Phản hồi của LLM',
structured: 'Cấu trúc',
structuredTip: 'Đầu ra có cấu trúc là một tính năng đảm bảo rằng mô hình sẽ luôn tạo ra các phản hồi tuân theo sơ đồ JSON mà bạn cung cấp.',
modelNotSupportedTip: 'Mô hình hiện tại không hỗ trợ tính năng này và tự động bị hạ cấp xuống việc tiêm lệnh.',
moreFillTip: 'Hiển thị tối đa 10 cấp độ lồng ghép',
},
accessItemsDescription: {
anyone: 'Mọi người đều có thể truy cập ứng dụng web.',
specific: 'Chỉ những nhóm hoặc thành viên cụ thể mới có thể truy cập ứng dụng web.',
organization: 'Bất kỳ ai trong tổ chức đều có thể truy cập ứng dụng web.',
external: 'Chỉ những người dùng bên ngoài đã xác thực mới có thể truy cập vào ứng dụng Web.',
},
accessControlDialog: {
accessItems: {
anyone: 'Ai có liên kết',
specific: 'Các nhóm hoặc thành viên cụ thể',
organization: 'Chỉ các thành viên trong doanh nghiệp',
external: 'Người dùng bên ngoài được xác thực',
},
operateGroupAndMember: {
searchPlaceholder: 'Tìm kiếm nhóm và thành viên',
allMembers: 'Tất cả các thành viên',
expand: 'Mở rộng',
noResult: 'Không có kết quả',
},
title: 'Kiểm soát truy cập ứng dụng web',
description: 'Cài đặt quyền truy cập ứng dụng web',
accessLabel: 'Ai có quyền truy cập',
groups_one: '{{count}} NHÓM',
groups_other: '{{count}} NHÓM',
members_one: '{{count}} THÀNH VIÊN',
members_other: '{{count}} THÀNH VIÊN',
noGroupsOrMembers: 'Không có nhóm hoặc thành viên nào được chọn',
webAppSSONotEnabledTip: 'Vui lòng liên hệ với quản trị viên doanh nghiệp để cấu hình phương thức xác thực ứng dụng web.',
updateSuccess: 'Cập nhật thành công',
},
publishApp: {
title: 'Ai có thể truy cập ứng dụng web',
notSet: 'Chưa đặt',
notSetDesc: 'Hiện tại không ai có thể truy cập ứng dụng web. Vui lòng thiết lập quyền truy cập.',
},
noAccessPermission: 'Không được phép truy cập ứng dụng web',
accessControl: 'Kiểm soát truy cập ứng dụng web',
maxActiveRequestsPlaceholder: 'Nhập 0 để không giới hạn',
maxActiveRequests: 'Số yêu cầu đồng thời tối đa',
maxActiveRequestsTip: 'Số yêu cầu hoạt động đồng thời tối đa cho mỗi ứng dụng (0 để không giới hạn)',
gotoAnything: {
actions: {
searchPlugins: 'Tìm kiếm Plugin',
searchPluginsDesc: 'Tìm kiếm và điều hướng đến plugin của bạn',
searchKnowledgeBases: 'Tìm kiếm cơ sở kiến thức',
searchApplicationsDesc: 'Tìm kiếm và điều hướng đến các ứng dụng của bạn',
searchWorkflowNodesHelp: 'Tính năng này chỉ hoạt động khi xem quy trình làm việc. Điều hướng đến quy trình làm việc trước.',
searchWorkflowNodes: 'Tìm kiếm các nút quy trình làm việc',
searchApplications: 'Tìm kiếm ứng dụng',
searchWorkflowNodesDesc: 'Tìm và chuyển đến các nút trong quy trình làm việc hiện tại theo tên hoặc loại',
searchKnowledgeBasesDesc: 'Tìm kiếm và điều hướng đến cơ sở kiến thức của bạn',
themeCategoryTitle: 'Chủ đề',
themeSystem: 'Chủ đề hệ thống',
themeDarkDesc: 'Sử dụng giao diện tối',
themeLight: 'Chủ đề sáng',
runTitle: 'Lệnh',
languageCategoryTitle: 'Ngôn ngữ',
themeLightDesc: 'Sử dụng giao diện sáng',
themeDark: 'Chủ đề tối',
languageChangeDesc: 'Thay đổi ngôn ngữ giao diện',
languageCategoryDesc: 'Chuyển đổi ngôn ngữ giao diện',
themeSystemDesc: 'Theo giao diện của hệ điều hành của bạn',
runDesc: 'Chạy các lệnh nhanh (chủ đề, ngôn ngữ, ... )',
themeCategoryDesc: 'Chuyển đổi giao diện ứng dụng',
slashDesc: 'Thực hiện các lệnh như /theme, /lang',
feedbackDesc: 'Thảo luận phản hồi cộng đồng mở',
accountDesc: 'Đi đến trang tài khoản',
docDesc: 'Mở tài liệu trợ giúp',
communityDesc: 'Mở cộng đồng Discord',
},
emptyState: {
noWorkflowNodesFound: 'Không tìm thấy nút quy trình làm việc',
noKnowledgeBasesFound: 'Không tìm thấy cơ sở kiến thức',
noPluginsFound: 'Không tìm thấy plugin',
noAppsFound: 'Không tìm thấy ứng dụng nào',
tryDifferentTerm: 'Thử từ khóa tìm kiếm khác hoặc xóa bộ lọc {{mode}}',
trySpecificSearch: 'Thử {{shortcuts}} để tìm kiếm cụ thể',
},
groups: {
plugins: 'Plugin',
workflowNodes: 'Nút quy trình làm việc',
knowledgeBases: 'Cơ sở kiến thức',
apps: 'Ứng dụng',
commands: 'Lệnh',
},
searchTemporarilyUnavailable: 'Tìm kiếm tạm thời không khả dụng',
clearToSearchAll: 'Xóa @ để tìm kiếm tất cả',
noResults: 'Không tìm thấy kết quả',
searching: 'Tìm kiếm...',
searchPlaceholder: 'Tìm kiếm hoặc nhập @ cho các lệnh...',
searchTitle: 'Tìm kiếm bất cứ thứ gì',
searchFailed: 'Tìm kiếm không thành công',
useAtForSpecific: 'Sử dụng @ cho các loại cụ thể',
someServicesUnavailable: 'Một số dịch vụ tìm kiếm không khả dụng',
servicesUnavailableMessage: 'Một số dịch vụ tìm kiếm có thể gặp sự cố. Thử lại trong giây lát.',
searchHint: 'Bắt đầu nhập để tìm kiếm mọi thứ ngay lập tức',
commandHint: 'Nhập @ để duyệt theo danh mục',
selectSearchType: 'Chọn nội dung để tìm kiếm',
resultCount: '{{count}} kết quả',
resultCount_other: '{{count}} kết quả',
inScope: 'trong {{scope}}s',
tryDifferentSearch: 'Thử một cụm từ tìm kiếm khác',
noMatchingCommands: 'Không tìm thấy lệnh phù hợp',
slashHint: 'Gõ / để xem tất cả các lệnh có sẵn',
selectToNavigate: 'Chọn để điều hướng',
startTyping: 'Bắt đầu gõ để tìm kiếm',
pressEscToClose: 'Nhấn ESC để đóng',
tips: 'Nhấn ↑↓ để duyệt',
},
noUserInputNode: 'Thiếu nút nhập liệu của người dùng',
notPublishedYet: 'Ứng dụng chưa được phát hành',
}
export default translation

View File

@@ -0,0 +1,203 @@
const translation = {
currentPlan: 'Kế hoạch Hiện tại',
upgradeBtn: {
plain: 'Nâng cấp Kế hoạch',
encourage: 'Nâng cấp Ngay',
encourageShort: 'Nâng cấp',
},
viewBilling: 'Quản lý thanh toán và đăng ký',
buyPermissionDeniedTip: 'Vui lòng liên hệ với quản trị viên doanh nghiệp của bạn để đăng ký',
plansCommon: {
yearlyTip: 'Nhận 2 tháng miễn phí khi đăng ký hàng năm!',
mostPopular: 'Phổ biến nhất',
planRange: {
monthly: 'Hàng tháng',
yearly: 'Hàng năm',
},
month: 'tháng',
year: 'năm',
save: 'Tiết kiệm ',
free: 'Miễn phí',
currentPlan: 'Kế hoạch Hiện tại',
contractSales: 'Liên hệ bộ phận bán hàng',
contractOwner: 'Liên hệ quản lý nhóm',
startForFree: 'Bắt đầu miễn phí',
contactSales: 'Liên hệ Bán hàng',
talkToSales: 'Nói chuyện với Bộ phận Bán hàng',
modelProviders: 'Nhà cung cấp Mô hình',
buildApps: 'Xây dựng Ứng dụng',
vectorSpace: 'Không gian Vector',
vectorSpaceTooltip: 'Không gian Vector là hệ thống bộ nhớ dài hạn cần thiết cho LLMs để hiểu dữ liệu của bạn.',
documentProcessingPriority: 'Ưu tiên Xử lý Tài liệu',
documentProcessingPriorityUpgrade: 'Xử lý nhiều dữ liệu với độ chính xác cao và tốc độ nhanh hơn.',
priority: {
'standard': 'Tiêu chuẩn',
'priority': 'Ưu tiên',
'top-priority': 'Ưu tiên Cao nhất',
},
logsHistory: 'Lịch sử Nhật ký',
customTools: 'Công cụ Tùy chỉnh',
unavailable: 'Không có sẵn',
days: 'ngày',
unlimited: 'Không giới hạn',
support: 'Hỗ trợ',
supportItems: {
communityForums: 'Diễn đàn cộng đồng',
emailSupport: 'Hỗ trợ qua email',
priorityEmail: 'Hỗ trợ qua email & chat ưu tiên',
logoChange: 'Thay đổi Logo',
SSOAuthentication: 'Xác thực SSO',
personalizedSupport: 'Hỗ trợ cá nhân hóa',
dedicatedAPISupport: 'Hỗ trợ API dành riêng',
customIntegration: 'Tích hợp và hỗ trợ tùy chỉnh',
ragAPIRequest: 'Yêu cầu API RAG',
bulkUpload: 'Tải lên tài liệu hàng loạt',
agentMode: 'Chế độ Đại lý',
workflow: 'Quy trình làm việc',
llmLoadingBalancing: 'Cân bằng tải LLM',
llmLoadingBalancingTooltip: 'Thêm nhiều khóa API vào mô hình, vượt qua giới hạn tốc độ API một cách hiệu quả.',
},
comingSoon: 'Sắp ra mắt',
member: 'Thành viên',
memberAfter: 'Thành viên',
messageRequest: {
title: 'Số Lượng Tin Nhắn',
tooltip: 'Hạn mức triệu hồi tin nhắn cho các kế hoạch sử dụng mô hình OpenAI (ngoại trừ gpt4). Các tin nhắn vượt quá giới hạn sẽ sử dụng Khóa API OpenAI của bạn.',
titlePerMonth: '{{count,number}} tin nhắn/tháng',
},
annotatedResponse: {
title: 'Hạn Mức Quota Phản hồi Đã được Ghi chú',
tooltip: 'Chỉnh sửa và ghi chú thủ công các phản hồi cung cấp khả năng trả lời câu hỏi chất lượng cao có thể tùy chỉnh cho các ứng dụng. (Chỉ áp dụng trong các ứng dụng trò chuyện)',
},
ragAPIRequestTooltip: 'Đề cập đến số lượng cuộc gọi API triệu hồi chỉ khả năng xử lý cơ sở kiến thức của Dify.',
receiptInfo: 'Chỉ chủ nhóm và quản trị viên nhóm có thể đăng ký và xem thông tin thanh toán',
annotationQuota: 'Hạn ngạch chú thích',
priceTip: 'mỗi không gian làm việc/',
documentsTooltip: 'Hạn ngạch số lượng tài liệu được nhập từ Nguồn Dữ liệu Kiến thức.',
apiRateLimitTooltip: 'Giới hạn tần suất API áp dụng cho tất cả các yêu cầu được thực hiện thông qua API Dify, bao gồm tạo văn bản, cuộc trò chuyện, thực thi quy trình làm việc và xử lý tài liệu.',
teamMember_one: '{{count,number}} thành viên trong nhóm',
apiRateLimit: 'Giới hạn tần suất API',
annualBilling: 'Hóa đơn hàng năm',
cloud: 'Dịch vụ đám mây',
documentsRequestQuota: '{{count,number}}/phút Giới Hạn Tỷ Lệ Yêu Cầu Kiến Thức',
self: 'Tự lưu trữ',
comparePlanAndFeatures: 'So sánh các kế hoạch & tính năng',
freeTrialTip: 'dùng thử miễn phí 200 cuộc gọi OpenAI.',
freeTrialTipPrefix: 'Đăng ký và nhận một',
unlimitedApiRate: 'Không giới hạn tỷ lệ API',
teamWorkspace: '{{count,number}} Không gian làm việc của Đội',
teamMember_other: '{{count,number}} thành viên trong nhóm',
documents: '{{count,number}} Tài liệu Kiến thức',
getStarted: 'Bắt đầu',
apiRateLimitUnit: '{{count,number}}',
freeTrialTipSuffix: 'Không cần thẻ tín dụng',
documentsRequestQuotaTooltip: 'Chỉ định tổng số hành động mà một không gian làm việc có thể thực hiện mỗi phút trong cơ sở tri thức, bao gồm tạo mới tập dữ liệu, xóa, cập nhật, tải tài liệu lên, thay đổi, lưu trữ và truy vấn cơ sở tri thức. Chỉ số này được sử dụng để đánh giá hiệu suất của các yêu cầu cơ sở tri thức. Ví dụ, nếu một người dùng Sandbox thực hiện 10 lần kiểm tra liên tiếp trong một phút, không gian làm việc của họ sẽ bị hạn chế tạm thời không thực hiện các hành động sau trong phút tiếp theo: tạo mới tập dữ liệu, xóa, cập nhật và tải tài liệu lên hoặc thay đổi.',
startBuilding: 'Bắt đầu xây dựng',
taxTipSecond: 'Nếu khu vực của bạn không có yêu cầu thuế áp dụng, sẽ không có thuế xuất hiện trong quá trình thanh toán của bạn và bạn sẽ không bị tính bất kỳ khoản phí bổ sung nào trong suốt thời gian đăng ký.',
taxTip: 'Tất cả giá đăng ký (hàng tháng/hàng năm) chưa bao gồm các loại thuế áp dụng (ví dụ: VAT, thuế bán hàng).',
triggerEvents: {
unlimited: 'Sự kiện Kích hoạt Không giới hạn',
tooltip: 'Số lượng sự kiện tự động kích hoạt quy trình làm việc thông qua Plugin, Lịch trình hoặc Webhook.',
sandbox: '{{count,number}} Kích hoạt Sự kiện',
professional: '{{count,number}} Sự kiện kích hoạt/tháng',
},
workflowExecution: {
faster: 'Thực hiện quy trình làm việc nhanh hơn',
priority: 'Thực thi Quy trình Làm việc Ưu tiên',
tooltip: 'Ưu tiên và tốc độ hàng đợi thực thi quy trình làm việc.',
standard: 'Thực thi Quy trình Làm việc Chuẩn',
},
startNodes: {
unlimited: 'Kích hoạt/quy trình làm việc không giới hạn',
limited: 'Tối đa {{count}} kích hoạt/quy trình',
},
title: {
plans: 'kế hoạch',
description: 'Chọn gói phù hợp nhất với nhu cầu của đội bạn.',
},
},
plans: {
sandbox: {
name: 'Hộp Cát',
description: 'Thử nghiệm miễn phí 200 lần GPT',
for: 'Dùng thử miễn phí các tính năng cốt lõi',
},
professional: {
name: 'Chuyên nghiệp',
description: 'Dành cho cá nhân và các nhóm nhỏ để mở khóa nhiều sức mạnh với giá cả phải chăng.',
for: 'Dành cho các nhà phát triển độc lập/nhóm nhỏ',
},
team: {
name: 'Nhóm',
description: 'Hợp tác mà không giới hạn và tận hưởng hiệu suất hạng nhất.',
for: 'Dành cho các đội nhóm vừa',
},
enterprise: {
name: 'Doanh nghiệp',
description: 'Nhận toàn bộ khả năng và hỗ trợ cho các hệ thống quan trọng cho nhiệm vụ quy mô lớn.',
includesTitle: 'Tất cả trong kế hoạch Nhóm, cộng thêm:',
features: ['Giải pháp triển khai mở rộng cấp doanh nghiệp', 'Giấy phép thương mại', 'Tính năng Doanh nghiệp Độc quyền', 'Nhiều Không Gian Làm Việc & Quản Lý Doanh Nghiệp', 'Đăng nhập một lần', 'Các SLA đã được đàm phán bởi các Đối tác Dify', 'Bảo mật & Kiểm soát Nâng cao', 'Cập nhật và Bảo trì bởi Dify chính thức', 'Hỗ trợ Kỹ thuật Chuyên nghiệp'],
price: 'Tùy chỉnh',
for: 'Dành cho các đội lớn',
priceTip: 'Chỉ thanh toán hàng năm',
btnText: 'Liên hệ với Bộ phận Bán hàng',
},
community: {
features: ['Tất cả các Tính năng Cốt lõi được Phát hành Dưới Kho Lưu trữ Công khai', 'Không gian làm việc đơn', 'Tuân thủ Giấy phép Mã nguồn mở Dify'],
description: 'Dành cho người dùng cá nhân, nhóm nhỏ hoặc các dự án phi thương mại',
name: 'Cộng đồng',
btnText: 'Bắt đầu với Cộng đồng',
price: 'Miễn phí',
for: 'Dành cho người dùng cá nhân, nhóm nhỏ hoặc các dự án phi thương mại',
includesTitle: 'Tính năng miễn phí:',
},
premium: {
features: ['Độ tin cậy tự quản lý bởi các nhà cung cấp đám mây khác nhau', 'Không gian làm việc đơn', 'Tùy chỉnh Logo & Thương hiệu WebApp', 'Hỗ trợ Email & Trò chuyện Ưu tiên'],
comingSoon: 'Hỗ trợ Microsoft Azure & Google Cloud Sẽ Đến Sớm',
priceTip: 'Dựa trên Thị trường Đám mây',
btnText: 'Nhận Premium trong',
description: 'Dành cho các tổ chức và nhóm vừa',
price: 'Có thể mở rộng',
includesTitle: 'Mọi thứ từ Cộng đồng, cộng thêm:',
for: 'Dành cho các tổ chức và nhóm vừa',
name: 'Cao cấp',
},
},
vectorSpace: {
fullTip: 'Không gian Vector đã đầy.',
fullSolution: 'Nâng cấp kế hoạch của bạn để có thêm không gian.',
},
apps: {
contactUs: 'Liên hệ với chúng tôi',
fullTip2: 'Đã đạt giới hạn kế hoạch',
fullTip1des: 'Bạn đã đạt đến giới hạn xây dựng ứng dụng trên kế hoạch này.',
fullTip1: 'Nâng cấp để tạo thêm ứng dụng',
fullTip2des: 'Chúng tôi khuyên bạn nên xóa các ứng dụng không hoạt động để giải phóng dung lượng, hoặc liên hệ với chúng tôi.',
},
annotatedResponse: {
fullTipLine1: 'Nâng cấp kế hoạch của bạn để',
fullTipLine2: 'ghi chú thêm cuộc trò chuyện.',
quotaTitle: 'Hạn Mức Quota Phản hồi Đã được Ghi chú',
},
usagePage: {
documentsUploadQuota: 'Hạn ngạch tải lên tài liệu',
annotationQuota: 'Hạn ngạch chú thích',
vectorSpaceTooltip: 'Các tài liệu với chế độ lập chỉ mục Chất lượng Cao sẽ tiêu tốn tài nguyên Lưu trữ Dữ liệu Kiến thức. Khi Lưu trữ Dữ liệu Kiến thức đạt giới hạn, các tài liệu mới sẽ không được tải lên.',
teamMembers: 'Các thành viên trong nhóm',
vectorSpace: 'Lưu trữ dữ liệu kiến thức',
buildApps: 'Xây dựng ứng dụng',
triggerEvents: 'Các sự kiện kích hoạt',
perMonth: 'mỗi tháng',
resetsIn: 'Đặt lại sau {{count,number}} ngày',
},
teamMembers: 'Các thành viên trong nhóm',
triggerLimitModal: {
upgrade: 'Nâng cấp',
dismiss: 'Đóng',
usageTitle: 'SỰ KIỆN KÍCH HOẠT',
description: 'Bạn đã đạt đến giới hạn kích hoạt sự kiện quy trình cho gói này.',
title: 'Nâng cấp để mở khóa thêm nhiều sự kiện kích hoạt',
},
}
export default translation

View File

@@ -0,0 +1,788 @@
const translation = {
api: {
success: 'Thành công',
actionSuccess: 'Thành công',
saved: 'Đã lưu',
create: 'Tạo',
remove: 'Xóa',
},
operation: {
create: 'Tạo mới',
confirm: 'Xác nhận',
cancel: 'Hủy bỏ',
clear: 'Xóa',
save: 'Lưu',
saveAndEnable: 'Lưu & Kích hoạt',
edit: 'Chỉnh sửa',
add: 'Thêm',
added: 'Đã thêm',
refresh: 'Làm mới',
reset: 'Đặt lại',
search: 'Tìm kiếm',
change: 'Thay đổi',
remove: 'Xóa',
send: 'Gửi',
copy: 'Sao chép',
lineBreak: 'Ngắt dòng',
sure: 'Tôi chắc chắn',
download: 'Tải xuống',
delete: 'Xóa',
settings: 'Cài đặt',
setup: 'Thiết lập',
getForFree: 'Nhận miễn phí',
reload: 'Tải lại',
ok: 'OK',
log: 'Nhật ký',
learnMore: 'Tìm hiểu thêm',
params: 'Tham số',
duplicate: 'Nhân bản',
rename: 'Đổi tên',
audioSourceUnavailable: 'AudioSource không khả dụng',
copyImage: 'Sao chép hình ảnh',
zoomOut: 'Thu nhỏ',
zoomIn: 'Phóng to',
openInNewTab: 'Mở trong tab mới',
regenerate: 'Tái tạo',
close: 'Đóng',
saveAndRegenerate: 'Lưu và tạo lại các phần con',
view: 'Cảnh',
viewMore: 'XEM THÊM',
submit: 'Trình',
skip: 'Tàu',
imageCopied: 'Hình ảnh sao chép',
deleteApp: 'Xóa ứng dụng',
viewDetails: 'Xem chi tiết',
copied: 'Sao chép',
in: 'trong',
more: 'Hơn',
downloadFailed: 'Tải xuống thất bại. Vui lòng thử lại sau.',
format: 'Định dạng',
downloadSuccess: 'Tải xuống đã hoàn thành.',
deSelectAll: 'Bỏ chọn tất cả',
selectAll: 'Chọn Tất Cả',
config: 'Cấu hình',
no: 'Không',
yes: 'Vâng',
deleteConfirmTitle: 'Xóa?',
confirmAction: 'Vui lòng xác nhận hành động của bạn.',
noSearchResults: 'Không tìm thấy {{content}} nào',
resetKeywords: 'Đặt lại từ khóa',
selectCount: '{{count}} Đã chọn',
searchCount: 'Tìm {{count}} {{content}}',
noSearchCount: '0 {{content}}',
now: 'Bây giờ',
},
placeholder: {
input: 'Vui lòng nhập',
select: 'Vui lòng chọn',
search: 'Tìm kiếm...',
},
voice: {
language: {
zhHans: 'Tiếng Trung',
zhHant: 'Tiếng Trung phồn thể',
enUS: 'Tiếng Anh',
deDE: 'Tiếng Đức',
frFR: 'Tiếng Pháp',
esES: 'Tiếng Tây Ban Nha',
itIT: 'Tiếng Ý',
thTH: 'Tiếng Thái',
idID: 'Tiếng Indonesia',
jaJP: 'Tiếng Nhật',
koKR: 'Tiếng Hàn',
ptBR: 'Tiếng Bồ Đào Nha',
ruRU: 'Tiếng Nga',
ukUA: 'Tiếng Ukraina',
viVN: 'Tiếng Việt',
plPL: 'Tiếng Ba Lan',
roRO: 'Tiếng Rumani',
hiIN: 'Tiếng Hindi',
trTR: 'Tiếng Thổ Nhĩ Kỳ',
faIR: 'Tiếng Ba Tư',
},
},
unit: {
char: 'ký tự',
},
actionMsg: {
noModification: 'Hiện không có sự thay đổi.',
modifiedSuccessfully: 'Chỉnh sửa thành công',
modifiedUnsuccessfully: 'Chỉnh sửa không thành công',
copySuccessfully: 'Đã sao chép thành công',
paySucceeded: 'Thanh toán thành công',
payCancelled: 'Thanh toán đã hủy',
generatedSuccessfully: 'Tạo thành công',
generatedUnsuccessfully: 'Tạo không thành công',
},
model: {
params: {
temperature: 'Độ sáng tạo',
temperatureTip:
'Kiểm soát độ ngẫu nhiên: Giảm độ sáng tạo dẫn đến ít kết quả ngẫu nhiên hơn. Khi độ sáng tạo gần bằng 0, mô hình sẽ trở nên xác định và lặp lại.',
top_p: 'Top P',
top_pTip:
'Kiểm soát đa dạng thông qua lấy mẫu nhân nhóm: 0.5 có nghĩa là nửa số tùy chọn có khả năng cao được xem xét.',
presence_penalty: 'Phạt sự hiện diện',
presence_penaltyTip:
'Độ lớn của sự phạt cho các token mới dựa trên việc chúng có xuất hiện trong văn bản cho đến nay hay không.\nTăng khả năng của mô hình để nói về các chủ đề mới.',
frequency_penalty: 'Phạt tần suất',
frequency_penaltyTip:
'Độ lớn của sự phạt cho các token mới dựa trên tần suất hiện tại của chúng trong văn bản cho đến nay.\nGiảm khả năng của mô hình để lặp lại cùng một dòng văn bản.',
max_tokens: 'Max token',
max_tokensTip:
'Sử dụng để giới hạn độ dài tối đa của câu trả lời, theo token. \nGiá trị lớn có thể giới hạn không gian còn lại cho từ khóa khởi đầu, nhật ký trò chuyện và Kiến thức. \nKhuyến nghị đặt giá trị dưới hai phần ba của gpt-4-1106-preview, gpt-4-vision-preview max token (đầu vào 128k đầu ra 4k)',
maxTokenSettingTip: 'Cài đặt max token của bạn quá cao, có thể hạn chế không gian cho từ khóa, truy vấn và dữ liệu. Xem xét đặt nó dưới 2/3.',
setToCurrentModelMaxTokenTip: 'Max token được cập nhật đến 80% token tối đa của mô hình hiện tại {{maxToken}}.',
stop_sequences: 'Chuỗi dừng',
stop_sequencesTip: 'Lên đến bốn chuỗi nơi API sẽ dừng việc tạo ra các token tiếp theo. Văn bản được trả về sẽ không chứa chuỗi dừng.',
stop_sequencesPlaceholder: 'Nhập chuỗi và nhấn Tab',
},
tone: {
Creative: 'Sáng tạo',
Balanced: 'Cân bằng',
Precise: 'Chính xác',
Custom: 'Tùy chỉnh',
},
addMoreModel: 'Điều chỉnh cài đặt để thêm mô hình',
settingsLink: 'Cài đặt nhà cung cấp mô hình',
capabilities: 'Khả năng đa phương thức',
},
menus: {
status: 'beta',
explore: 'Khám phá',
apps: 'Studio',
plugins: 'Plugins',
pluginsTips: 'Tích hợp các plugin bên thứ ba hoặc tạo ra các AI-Plugin tương thích với ChatGPT.',
datasets: 'Kiến thức',
datasetsTips: 'SẮP RA MẮT: Nhập dữ liệu văn bản của bạn hoặc cập nhật dữ liệu theo thời gian thực thông qua Webhook để cải thiện ngữ cảnh LLM.',
newApp: 'Ứng dụng mới',
newDataset: 'Tạo Kiến thức',
tools: 'Công cụ',
exploreMarketplace: 'Khám phá Marketplace',
appDetail: 'Chi tiết ứng dụng',
account: 'báo cáo',
},
userProfile: {
settings: 'Cài đặt',
emailSupport: 'Hỗ trợ qua Email',
workspace: 'Không gian làm việc',
createWorkspace: 'Tạo Không gian làm việc',
helpCenter: 'Trung tâm trợ giúp',
roadmap: 'Lộ trình',
community: 'Cộng đồng',
about: 'Về chúng tôi',
logout: 'Đăng xuất',
compliance: 'Tuân thủ',
github: 'GitHub',
support: 'Hỗ trợ',
contactUs: 'Liên hệ với chúng tôi',
forum: 'Diễn đàn',
},
settings: {
accountGroup: 'TÀI KHOẢN',
workplaceGroup: 'KHÔNG GIAN LÀM VIỆC',
account: 'Tài khoản của tôi',
members: 'Thành viên',
billing: 'Thanh toán',
integrations: 'Tích hợp',
language: 'Ngôn ngữ',
provider: 'Nhà cung cấp mô hình',
dataSource: 'Nguồn dữ liệu',
plugin: 'Plugins',
apiBasedExtension: 'Mở rộng dựa trên API',
generalGroup: 'TỔNG QUÁT',
},
account: {
avatar: 'Ảnh đại diện',
name: 'Tên',
email: 'Email',
password: 'Mật khẩu',
passwordTip: 'Bạn có thể đặt một mật khẩu cố định nếu bạn không muốn sử dụng mã đăng nhập tạm thời',
setPassword: 'Đặt mật khẩu',
resetPassword: 'Đặt lại mật khẩu',
currentPassword: 'Mật khẩu hiện tại',
newPassword: 'Mật khẩu mới',
confirmPassword: 'Xác nhận mật khẩu',
notEqual: 'Hai mật khẩu không giống nhau.',
langGeniusAccount: 'Tài khoản Dify',
langGeniusAccountTip: 'Tài khoản Dify của bạn và dữ liệu người dùng liên quan.',
editName: 'Chỉnh sửa Tên',
showAppLength: 'Hiển thị {{length}} ứng dụng',
delete: 'Xóa tài khoản',
deleteTip: 'Xóa tài khoản của bạn sẽ xóa vĩnh viễn tất cả dữ liệu của bạn và không thể khôi phục được.',
studio: 'Dify Studio',
myAccount: 'Tài khoản của tôi',
account: 'Tài khoản',
deletePrivacyLinkTip: 'Để biết thêm thông tin về cách chúng tôi xử lý dữ liệu của bạn, vui lòng xem',
deletePrivacyLink: 'Chính sách bảo mật.',
deleteSuccessTip: 'Tài khoản của bạn cần thời gian để xóa xong. Chúng tôi sẽ gửi email cho bạn khi tất cả hoàn tất.',
deleteLabel: 'Để xác nhận, vui lòng nhập email của bạn bên dưới',
deletePlaceholder: 'Vui lòng nhập email của bạn',
sendVerificationButton: 'Gửi mã xác minh',
verificationLabel: 'Mã xác minh',
verificationPlaceholder: 'Dán mã gồm 6 chữ số',
permanentlyDeleteButton: 'Xóa vĩnh viễn tài khoản',
feedbackTitle: 'Phản hồi',
feedbackLabel: 'Hãy cho chúng tôi biết lý do tại sao bạn xóa tài khoản của mình?',
feedbackPlaceholder: 'Tùy chọn',
workspaceIcon: 'Biểu tượng không gian làm việc',
workspaceName: 'Tên không gian làm việc',
editWorkspaceInfo: 'Chỉnh sửa thông tin không gian làm việc',
changeEmail: {
existingEmail: 'Một người dùng với email này đã tồn tại.',
title: 'Đổi Email',
resendTip: 'Không nhận được mã sao?',
resend: 'Gửi lại',
emailLabel: 'Email mới',
verifyNew: 'Xác minh email mới của bạn',
newEmail: 'Tạo một địa chỉ email mới',
emailPlaceholder: 'Nhập một email mới',
changeTo: 'Thay đổi thành {{email}}',
content1: 'Nếu bạn tiếp tục, chúng tôi sẽ gửi một mã xác minh đến <email>{{email}}</email> để xác thực lại.',
codeLabel: 'Mã xác thực',
content3: 'Nhập một email mới và chúng tôi sẽ gửi cho bạn một mã xác minh.',
sendVerifyCode: 'Gửi mã xác minh',
content4: 'Chúng tôi vừa gửi cho bạn một mã xác minh tạm thời đến <email>{{email}}</email>.',
resendCount: 'Gửi lại sau {{count}} giây',
continue: 'Tiếp tục',
content2: 'Email hiện tại của bạn là <email>{{email}}</email>. Mã xác minh đã được gửi đến địa chỉ email này.',
verifyEmail: 'Xác minh email hiện tại của bạn',
codePlaceholder: 'Dán mã 6 chữ số',
authTip: 'Khi email của bạn được thay đổi, các tài khoản Google hoặc GitHub liên kết với email cũ của bạn sẽ không còn có thể đăng nhập vào tài khoản này.',
unAvailableEmail: 'Email này hiện không khả dụng tạm thời.',
},
},
members: {
team: 'Nhóm',
invite: 'Mời',
name: 'TÊN',
lastActive: 'HOẠT ĐỘNG GẦN ĐÂY',
role: 'VAI TRÒ',
pending: 'Đang chờ...',
owner: 'Chủ sở hữu',
admin: 'Quản trị viên',
adminTip: 'Có thể xây dựng ứng dụng và quản lý cài đặt nhóm',
normal: 'Bình thường',
normalTip: 'Chỉ có thể sử dụng ứng dụng, không thể xây dựng ứng dụng',
editor: 'Biên tập viên',
editorTip: 'Có thể xây dựng ứng dụng, không thể quản lý cài đặt nhóm',
inviteTeamMember: 'Mời thành viên nhóm',
inviteTeamMemberTip: 'Sau khi đăng nhập, họ có thể truy cập trực tiếp vào dữ liệu nhóm của bạn.',
emailNotSetup: 'Máy chủ email chưa được thiết lập, vì vậy không thể gửi email mời. Vui lòng thông báo cho người dùng về liên kết mời sẽ được phát hành sau khi mời.',
email: 'Email',
emailInvalid: 'Định dạng Email không hợp lệ',
emailPlaceholder: 'Vui lòng nhập email',
sendInvite: 'Gửi Lời mời',
invitedAsRole: 'Được mời với vai trò {{role}}',
invitationSent: 'Lời mời đã được gửi',
invitationSentTip: 'Lời mời đã được gửi, và họ có thể đăng nhập vào Dify để truy cập vào dữ liệu nhóm của bạn.',
invitationLink: 'Liên kết Lời mời',
failedInvitationEmails: 'Dưới đây là danh sách email không gửi được lời mời',
ok: 'OK',
removeFromTeam: 'Xóa khỏi nhóm',
removeFromTeamTip: 'Sẽ xóa quyền truy cập nhóm',
setAdmin: 'Đặt làm quản trị viên',
setMember: 'Đặt thành viên bình thường',
setEditor: 'Đặt làm biên tập viên',
disInvite: 'Hủy lời mời',
deleteMember: 'Xóa thành viên',
you: '(Bạn)',
datasetOperatorTip: 'Chỉ có thể quản lý cơ sở kiến thức',
builderTip: 'Có thể xây dựng và chỉnh sửa ứng dụng của riêng mình',
builder: 'Chủ thầu',
datasetOperator: 'Quản trị viên kiến thức',
setBuilder: 'Đặt làm trình tạo',
transferModal: {
resend: 'Gửi lại',
resendTip: 'Chưa nhận được mã?',
continue: 'Tiếp tục',
verifyEmail: 'Xác minh email hiện tại của bạn',
title: 'Chuyển quyền sở hữu không gian làm việc',
transferPlaceholder: 'Chọn một thành viên trong không gian làm việc…',
transferLabel: 'Chuyển quyền sở hữu không gian làm việc cho',
warningTip: 'Bạn sẽ trở thành thành viên quản trị, và chủ sở hữu mới sẽ có toàn quyền kiểm soát.',
verifyContent: 'Email hiện tại của bạn là <email>{{email}}</email>.',
warning: 'Bạn sắp chuyển quyền sở hữu của "{{workspace}}". Điều này có hiệu lực ngay lập tức và không thể hoàn tác.',
codePlaceholder: 'Dán mã 6 chữ số',
transfer: 'Chuyển quyền sở hữu không gian làm việc',
sendVerifyCode: 'Gửi mã xác minh',
resendCount: 'Gửi lại sau {{count}} giây',
codeLabel: 'Mã xác thực',
sendTip: 'Nếu bạn tiếp tục, chúng tôi sẽ gửi một mã xác minh đến <email>{{email}}</email> để xác thực lại.',
verifyContent2: 'Chúng tôi sẽ gửi một mã xác minh tạm thời đến email này để thực hiện xác thực lại.',
},
transferOwnership: 'Chuyển quyền sở hữu',
},
integrations: {
connected: 'Đã kết nối',
google: 'Google',
googleAccount: 'Đăng nhập bằng tài khoản Google',
github: 'GitHub',
githubAccount: 'Đăng nhập bằng tài khoản GitHub',
connect: 'Kết nối',
},
language: {
displayLanguage: 'Ngôn ngữ hiển thị',
timezone: 'Múi giờ',
},
provider: {
apiKey: 'Khóa API',
enterYourKey: 'Nhập khóa API của bạn ở đây',
invalidKey: 'Khóa API OpenAI không hợp lệ',
validatedError: 'Xác minh thất bại: ',
validating: 'Đang xác minh khóa...',
saveFailed: 'Lưu khóa API thất bại',
apiKeyExceedBill: 'Khóa API này không có lượng truy vấn khả dụng, vui lòng đọc',
addKey: 'Thêm Khóa',
comingSoon: 'Sắp Ra Mắt',
editKey: 'Chỉnh sửa',
invalidApiKey: 'Khóa API không hợp lệ',
azure: {
apiBase: 'Cơ sở API',
apiBasePlaceholder: 'URL cơ sở API của điểm cuối Azure OpenAI của bạn.',
apiKey: 'Khóa API',
apiKeyPlaceholder: 'Nhập khóa API của bạn ở đây',
helpTip: 'Tìm hiểu Dịch vụ Azure OpenAI',
},
openaiHosted: {
openaiHosted: 'OpenAI đang lưu trữ',
onTrial: 'DÙNG THỬ',
exhausted: 'HẾT QUOTA',
desc: 'Dịch vụ lưu trữ OpenAI được cung cấp bởi Dify cho phép bạn sử dụng các mô hình như GPT-3.5. Trước khi hết lượng truy vấn dùng thử, bạn cần thiết lập các nhà cung cấp mô hình khác.',
callTimes: 'Số lần gọi',
usedUp: 'Quota dùng thử đã hết. Thêm nhà cung cấp Mô hình của riêng bạn.',
useYourModel: 'Hiện đang sử dụng nhà cung cấp Mô hình của riêng bạn.',
close: 'Đóng',
},
anthropicHosted: {
anthropicHosted: 'Anthropic Claude',
onTrial: 'DÙNG THỬ',
exhausted: 'HẾT QUOTA',
desc: 'Mô hình mạnh mẽ, vượt trội trong một loạt các nhiệm vụ từ trò chuyện phức tạp và tạo nội dung sáng tạo đến hướng dẫn chi tiết.',
callTimes: 'Số lần gọi',
usedUp: 'Quota dùng thử đã hết. Thêm nhà cung cấp Mô hình của riêng bạn.',
useYourModel: 'Hiện đang sử dụng nhà cung cấp Mô hình của riêng bạn.',
close: 'Đóng',
trialQuotaTip: 'Hạn ngạch dùng thử Anthropic của bạn sẽ hết hạn vào 2025/03/11 và sẽ không còn khả dụng sau đó. Vui lòng sử dụng nó kịp thời.',
},
anthropic: {
using: 'Khả năng nhúng đang sử dụng',
enableTip: 'Để kích hoạt mô hình Anthrop, bạn cần ràng buộc với Dịch vụ OpenAI hoặc Azure OpenAI trước.',
notEnabled: 'Chưa được kích hoạt',
keyFrom: 'Nhận khóa API của bạn từ Anthrop',
},
encrypted: {
front: 'Khóa API của bạn sẽ được mã hóa và lưu trữ bằng',
back: ' công nghệ.',
},
},
modelProvider: {
notConfigured: 'Mô hình hệ thống vẫn chưa được cấu hình hoàn toàn và một số chức năng có thể không khả dụng.',
systemModelSettings: 'Cài đặt Mô hình Hệ thống',
systemModelSettingsLink: 'Tại sao cần thiết phải thiết lập mô hình hệ thống?',
selectModel: 'Chọn mô hình của bạn',
setupModelFirst: 'Vui lòng thiết lập mô hình của bạn trước',
systemReasoningModel: {
key: 'Mô hình lập luận hệ thống',
tip: 'Thiết lập mô hình suy luận mặc định sẽ được sử dụng để tạo ứng dụng. Các tính năng như tạo tên cuộc trò chuyện và đề xuất câu hỏi tiếp theo cũng sẽ sử dụng mô hình suy luận mặc định này.',
},
embeddingModel: {
key: 'Mô hình nhúng',
tip: 'Thiết lập mô hình mặc định cho việc xử lý nhúng tài liệu của Kiến thức, cả hai phương tiện truy xuất và nhập của Kiến thức đều sử dụng mô hình nhúng này cho xử lý vector hóa. Chuyển đổi sẽ làm cho kích thước vector giữa Kiến thức được nhập và câu hỏi không nhất quán, dẫn đến việc truy xuất thất bại. Để tránh truy xuất thất bại, vui lòng không chuyển đổi mô hình này tùy ý.',
required: 'Mô hình nhúng là bắt buộc',
},
speechToTextModel: {
key: 'Mô hình Chuyển đổi Văn bản thành Tiếng nói',
tip: 'Thiết lập mô hình mặc định cho đầu vào chuyển đổi tiếng nói thành văn bản trong cuộc trò chuyện.',
},
ttsModel: {
key: 'Mô hình Văn bản thành Tiếng nói',
tip: 'Thiết lập mô hình mặc định cho đầu vào văn bản thành tiếng nói trong cuộc trò chuyện.',
},
rerankModel: {
key: 'Mô hình Sắp xếp lại',
tip: 'Mô hình sắp xếp lại sẽ sắp xếp lại danh sách tài liệu ứng cử viên dựa trên sự phù hợp ngữ nghĩa với truy vấn của người dùng, cải thiện kết quả của việc xếp hạng ngữ nghĩa',
},
quota: 'Hạn mức',
searchModel: 'Mô hình tìm kiếm',
noModelFound: 'Không tìm thấy mô hình cho {{model}}',
models: 'Mô hình',
showMoreModelProvider: 'Hiển thị thêm nhà cung cấp mô hình',
selector: {
tip: 'Mô hình này đã bị xóa. Vui lòng thêm một mô hình hoặc chọn mô hình khác.',
emptyTip: 'Không có mô hình khả dụng',
emptySetting: 'Vui lòng vào cài đặt để cấu hình',
rerankTip: 'Vui lòng thiết lập mô hình sắp xếp lại',
},
card: {
quota: 'QUOTA',
onTrial: 'Thử nghiệm',
paid: 'Đã thanh toán',
quotaExhausted: 'Quota đã hết',
callTimes: 'Số lần gọi',
tokens: 'Tokens',
buyQuota: 'Mua Quota',
priorityUse: 'Ưu tiên sử dụng',
removeKey: 'Remove API Key',
tip: 'Ưu tiên sẽ được trao cho hạn ngạch đã thanh toán. Hạn ngạch dùng thử sẽ được sử dụng sau khi hết hạn ngạch trả phí.',
},
item: {
deleteDesc: 'Các mô hình {{modelName}} đang được sử dụng như là các mô hình lập luận hệ thống. Một số chức năng sẽ không khả dụng sau khi loại bỏ. Vui lòng xác nhận.',
freeQuota: 'QUYỀN LỢI MIỄN PHÍ',
},
addApiKey: 'Thêm khóa API của bạn',
invalidApiKey: 'Khóa API không hợp lệ',
encrypted: {
front: 'Khóa API CỦA BẠN sẽ được mã hóa và lưu trữ bằng',
back: ' công nghệ.',
},
freeQuota: {
howToEarn: 'Cách kiếm',
},
addMoreModelProvider: 'THÊM NHÀ CUNG CẤP MÔ HÌNH',
addModel: 'Thêm Mô hình',
modelsNum: '{{num}} Mô hình',
showModels: 'Hiện Mô hình',
showModelsNum: 'Hiện {{num}} Mô hình',
collapse: 'Thu gọn',
config: 'Cấu hình',
modelAndParameters: 'Mô hình và Tham số',
model: 'Mô hình',
featureSupported: '{{feature}} được hỗ trợ',
callTimes: 'Số lần gọi',
credits: 'Tín dụng Tin nhắn',
buyQuota: 'Mua Quyền lợi',
getFreeTokens: 'Nhận mã thông báo miễn phí',
priorityUsing: 'Ưu tiên sử dụng',
deprecated: 'Đã lỗi thời',
confirmDelete: 'Xác nhận xóa?',
quotaTip: 'Số lượng mã thông báo miễn phí còn lại',
loadPresets: 'Tải Cài đặt trước',
parameters: 'THAM SỐ',
loadBalancingHeadline: 'Cân bằng tải',
loadBalancing: 'Cân bằng tải',
configLoadBalancing: 'Cấu hình cân bằng tải',
defaultConfig: 'Cấu hình mặc định',
modelHasBeenDeprecated: 'Mô hình này đã bị phản đối',
providerManagedDescription: 'Sử dụng bộ thông tin đăng nhập duy nhất do nhà cung cấp mô hình cung cấp.',
apiKeyStatusNormal: 'Trạng thái APIKey bình thường',
editConfig: 'Chỉnh sửa cấu hình',
loadBalancingInfo: 'Theo mặc định, cân bằng tải sử dụng chiến lược Vòng tròn. Nếu giới hạn tốc độ được kích hoạt, thời gian hồi chiêu 1 phút sẽ được áp dụng.',
addConfig: 'Thêm cấu hình',
loadBalancingDescription: 'Giảm áp lực với nhiều bộ thông tin xác thực.',
apiKey: 'KHÓA API',
providerManaged: 'Nhà cung cấp được quản lý',
apiKeyRateLimit: 'Đã đạt đến giới hạn tốc độ, có sẵn sau {{giây}} giây',
upgradeForLoadBalancing: 'Nâng cấp gói của bạn để bật Cân bằng tải.',
loadBalancingLeastKeyWarning: 'Để bật cân bằng tải, ít nhất 2 phím phải được bật.',
toBeConfigured: 'Được cấu hình',
emptyProviderTitle: 'Nhà cung cấp mô hình chưa được thiết lập',
discoverMore: 'Khám phá thêm trong',
emptyProviderTip: 'Vui lòng cài đặt nhà cung cấp mô hình trước.',
installProvider: 'Cài đặt nhà cung cấp mô hình',
configureTip: 'Thiết lập api-key hoặc thêm mô hình để sử dụng',
auth: {
apiKeyModal: {
addModel: 'Thêm mô hình',
title: 'Cấu hình ủy quyền khóa API',
desc: 'Sau khi cấu hình thông tin xác thực, tất cả các thành viên trong không gian làm việc có thể sử dụng mô hình này khi điều phối các ứng dụng.',
},
addNewModel: 'Thêm mô hình mới',
addCredential: 'Thêm thông tin đăng nhập',
configLoadBalancing: 'Cấu hình cân bằng tải',
apiKeys: 'Chìa khóa API',
authorizationError: 'Lỗi xác thực',
configModel: 'Cấu hình mô hình',
modelCredentials: 'Chứng chỉ của mô hình',
unAuthorized: 'Không có quyền truy cập',
addApiKey: 'Thêm khóa API',
providerManagedTip: 'Cấu hình hiện tại được lưu trữ bởi nhà cung cấp.',
specifyModelCredential: 'Xác định thông tin xác thực của mô hình',
specifyModelCredentialTip: 'Sử dụng thông tin xác thực của mô hình đã cấu hình.',
addModelCredential: 'Thêm thông tin đăng nhập mô hình',
authRemoved: 'Chính quyền đã loại bỏ',
providerManaged: 'Nhà cung cấp đã được quản lý',
modelCredential: 'Thông tin đăng nhập mô hình',
addModel: 'Thêm mô hình',
removeModel: 'Loại bỏ mô hình',
manageCredentials: 'Quản lý thông tin đăng nhập',
editModelCredential: 'Chỉnh sửa thông tin xác thực mô hình',
customModelCredentials: 'Thông tin đăng nhập mô hình tùy chỉnh',
customModelCredentialsDeleteTip: 'Thông tin đăng nhập đang được sử dụng và không thể xóa',
addNewModelCredential: 'Thêm thông tin xác thực mô hình mới',
selectModelCredential: 'Chọn thông tin xác thực mô hình',
},
parametersInvalidRemoved: 'Một số tham số không hợp lệ và đã được loại bỏ',
installDataSourceProvider: 'Cài đặt các nhà cung cấp nguồn dữ liệu',
},
dataSource: {
add: 'Thêm nguồn dữ liệu',
connect: 'Kết nối',
notion: {
title: 'Notion',
description: 'Sử dụng Notion như một nguồn dữ liệu cho Kiến thức.',
connectedWorkspace: 'Không gian làm việc đã kết nối',
addWorkspace: 'Thêm không gian làm việc',
connected: 'Đã kết nối',
disconnected: 'Đã ngắt kết nối',
changeAuthorizedPages: 'Thay đổi trang được ủy quyền',
pagesAuthorized: 'Các trang được ủy quyền',
sync: 'Đồng bộ',
remove: 'Xóa',
selector: {
pageSelected: 'Các trang đã chọn',
searchPages: 'Tìm kiếm trang...',
noSearchResult: 'Không có kết quả tìm kiếm',
addPages: 'Thêm trang',
preview: 'Xem trước',
},
integratedAlert: 'Notion được tích hợp thông qua thông tin xác thực nội bộ, không cần phải ủy quyền lại.',
},
website: {
title: 'Trang mạng',
inactive: 'Không hoạt động',
with: 'Với',
active: 'Hoạt động',
configuredCrawlers: 'Trình thu thập thông tin đã định cấu hình',
description: 'Nhập nội dung từ các trang web bằng trình thu thập dữ liệu web.',
},
configure: 'Cấu hình',
},
plugin: {
serpapi: {
apiKey: 'Khóa API',
apiKeyPlaceholder: 'Nhập khóa API của bạn',
keyFrom: 'Nhận khóa SerpAPI của bạn từ Trang tài khoản SerpAPI',
},
},
apiBasedExtension: {
title: 'Các tiện ích API cung cấp quản lý API tập trung, giúp cấu hình dễ dàng sử dụng trên các ứng dụng của Dify.',
link: 'Tìm hiểu cách phát triển Phần mở rộng API của riêng bạn.',
add: 'Thêm Phần mở rộng API',
selector: {
title: 'Phần mở rộng API',
placeholder: 'Vui lòng chọn phần mở rộng API',
manage: 'Quản lý Phần mở rộng API',
},
modal: {
title: 'Thêm Phần mở rộng API',
editTitle: 'Chỉnh sửa Phần mở rộng API',
name: {
title: 'Tên',
placeholder: 'Vui lòng nhập tên',
},
apiEndpoint: {
title: 'Điểm cuối API',
placeholder: 'Vui lòng nhập điểm cuối API',
},
apiKey: {
title: 'Khóa API',
placeholder: 'Vui lòng nhập khóa API',
lengthError: 'Độ dài khóa API không được nhỏ hơn 5 ký tự',
},
},
type: 'Loại',
},
about: {
changeLog: 'Nhật ký thay đổi',
updateNow: 'Cập nhật ngay',
nowAvailable: 'Dify {{version}} hiện đã có sẵn.',
latestAvailable: 'Dify {{version}} là phiên bản mới nhất hiện có.',
},
appMenus: {
overview: 'Giám sát',
promptEng: 'Orchestrate',
apiAccess: 'Truy cập API',
logAndAnn: 'Nhật ký & Thông báo',
logs: 'Nhật ký',
},
environment: {
testing: 'TESTING',
development: 'DEVELOPMENT',
},
appModes: {
completionApp: 'Ứng dụng Tạo văn bản',
chatApp: 'Ứng dụng Trò chuyện',
},
datasetMenus: {
documents: 'Tài liệu',
hitTesting: 'Kiểm tra truy vấn',
settings: 'Cài đặt',
emptyTip: 'Kiến thức chưa được liên kết, vui lòng đi đến ứng dụng hoặc plug-in để hoàn thành liên kết.',
viewDoc: 'Xem tài liệu',
relatedApp: 'các ứng dụng liên kết',
noRelatedApp: 'Không có ứng dụng được liên kết',
pipeline: 'Đường ống',
},
voiceInput: {
speaking: 'Hãy nói...',
converting: 'Chuyển đổi thành văn bản...',
notAllow: 'micro không được ủy quyền',
},
modelName: {
'gpt-3.5-turbo': 'GPT-3.5-Turbo',
'gpt-3.5-turbo-16k': 'GPT-3.5-Turbo-16K',
'gpt-4': 'GPT-4',
'gpt-4-32k': 'GPT-4-32K',
'text-davinci-003': 'Text-Davinci-003',
'text-embedding-ada-002': 'Text-Embedding-Ada-002',
'whisper-1': 'Whisper-1',
'claude-instant-1': 'Claude-Instant',
'claude-2': 'Claude-2',
},
chat: {
renameConversation: 'Đổi tên Cuộc trò chuyện',
conversationName: 'Tên cuộc trò chuyện',
conversationNamePlaceholder: 'Vui lòng nhập tên cuộc trò chuyện',
conversationNameCanNotEmpty: 'Yêu cầu nhập tên cuộc trò chuyện',
citation: {
title: 'THAM KHẢO',
linkToDataset: 'Liên kết tới Kiến thức',
characters: 'Ký tự:',
hitCount: 'Số lượt truy xuất:',
vectorHash: 'Vector hash:',
hitScore: 'Điểm truy xuất:',
},
inputPlaceholder: 'Nói chuyện với {{botName}}',
thought: 'Tư duy',
thinking: 'Suy nghĩ...',
resend: 'Gửi lại',
},
promptEditor: {
placeholder: 'Viết từ khóa của bạn ở đây, nhập \'{\' để chèn một biến, nhập \'/\' để chèn một khối nội dung nhắc nhở',
context: {
item: {
title: 'Bối cảnh',
desc: 'Chèn mẫu bối cảnh',
},
modal: {
title: '{{num}} Kiến thức trong Bối cảnh',
add: 'Thêm Bối cảnh',
footer: 'Bạn có thể quản lý các bối cảnh trong phần Bối cảnh bên dưới.',
},
},
history: {
item: {
title: 'Lịch sử Cuộc trò chuyện',
desc: 'Chèn mẫu tin nhắn lịch sử',
},
modal: {
title: 'VÍ DỤ',
user: 'Xin chào',
assistant: 'Xin chào! Tôi có thể giúp gì cho bạn hôm nay?',
edit: 'Chỉnh sửa Tên Vai trò Cuộc trò chuyện',
},
},
variable: {
item: {
title: 'Biến & Công cụ Bên ngoài',
desc: 'Chèn Biến & Công cụ Bên ngoài',
},
outputToolDisabledItem: {
title: 'Công cụ Bên ngoài',
desc: 'Công cụ Bên ngoài không thể chèn vào đây',
},
modal: {
add: 'Biến mới',
addTool: 'Công cụ mới',
},
},
query: {
item: {
title: 'Truy vấn',
desc: 'Chèn mẫu truy vấn người dùng',
},
},
existed: 'Đã tồn tại trong tin nhắn',
},
imageUploader: {
uploadFromComputer: 'Tải lên từ Máy tính',
uploadFromComputerReadError: 'Đọc ảnh thất bại, vui lòng thử lại.',
uploadFromComputerUploadError: 'Tải ảnh lên thất bại, vui lòng tải lên lại.',
uploadFromComputerLimit: 'Ảnh tải lên không được vượt quá {{size}} MB',
pasteImageLink: 'Dán liên kết ảnh',
pasteImageLinkInputPlaceholder: 'Dán liên kết ảnh ở đây',
pasteImageLinkInvalid: 'Liên kết ảnh không hợp lệ',
imageUpload: 'Tải ảnh lên',
},
tag: {
placeholder: 'Tất cả các thẻ',
addNew: 'Thêm thẻ mới',
noTag: 'Không có thẻ',
noTagYet: 'Chưa có thẻ',
addTag: 'thêm thẻ',
editTag: 'Chỉnh sửa thẻ',
manageTags: 'Quản lý thẻ',
selectorPlaceholder: 'Nhập để tìm kiếm hoặc tạo',
create: 'Tạo',
delete: 'Xóa thẻ',
deleteTip: 'Thẻ đang được sử dụng, xóa nó đi?',
created: 'Thẻ được tạo thành công',
failed: 'Tạo thẻ không thành công',
},
errorMsg: {
fieldRequired: '{{trường}} là bắt buộc',
urlError: 'URL phải bắt đầu bằng http:// hoặc https://',
},
fileUploader: {
uploadFromComputer: 'Tải lên cục bộ',
pasteFileLink: 'Dán liên kết tệp',
pasteFileLinkInputPlaceholder: 'Nhập URL...',
uploadFromComputerLimit: 'Tải lên tệp không được vượt quá {{size}}',
fileExtensionNotSupport: 'Phần mở rộng tệp không được hỗ trợ',
pasteFileLinkInvalid: 'Liên kết tệp không hợp lệ',
uploadFromComputerUploadError: 'Tải lên tệp không thành công, vui lòng tải lên lại.',
uploadFromComputerReadError: 'Đọc tệp không thành công, vui lòng thử lại.',
fileExtensionBlocked: 'Loại tệp này bị chặn vì lý do bảo mật',
},
license: {
expiring_plural: 'Hết hạn sau {{count}} ngày',
expiring: 'Hết hạn trong một ngày',
unlimited: 'Vô hạn',
},
pagination: {
perPage: 'Mục trên mỗi trang',
},
theme: {
auto: 'hệ thống',
theme: 'Chủ đề',
light: 'ánh sáng',
dark: 'tối',
},
compliance: {
iso27001: 'Chứng nhận ISO 27001:2022',
gdpr: 'GDPR DPA',
soc2Type1: 'Báo cáo loại SOC 2 Type I',
professionalUpgradeTooltip: 'Chỉ có sẵn với gói Team hoặc cao hơn.',
sandboxUpgradeTooltip: 'Chỉ có sẵn với gói Chuyên nghiệp hoặc Nhóm.',
soc2Type2: 'Báo cáo SOC 2 Type II',
},
imageInput: {
supportedFormats: 'Hỗ trợ PNG, JPG, JPEG, WEBP và GIF',
dropImageHere: 'Kéo hình ảnh của bạn vào đây, hoặc',
browse: 'duyệt',
},
you: 'Bạn',
avatar: {
deleteTitle: 'Xóa Ảnh Đại Diện',
deleteDescription: 'Bạn có chắc chắn muốn xóa ảnh đại diện của mình không? Tài khoản của bạn sẽ sử dụng avatar mặc định.',
},
feedback: {
content: 'Nội dung phản hồi',
title: 'Cung cấp phản hồi',
placeholder: 'Xin vui lòng miêu tả những gì đã xảy ra không đúng hoặc chúng tôi có thể cải thiện như thế nào...',
subtitle: 'Xin vui lòng cho chúng tôi biết điều gì đã sai với phản hồi này',
},
label: {
optional: '(tùy chọn)',
},
noData: 'Không có dữ liệu',
dynamicSelect: {
error: 'Tải tùy chọn thất bại',
noData: 'Không có tùy chọn nào',
loading: 'Đang tải tùy chọn...',
selected: '{{count}} đã chọn',
},
}
export default translation

View File

@@ -0,0 +1,32 @@
const translation = {
custom: 'Tùy chỉnh',
upgradeTip: {
prefix: 'Nâng cấp gói của bạn để',
suffix: 'tùy chỉnh thương hiệu.',
des: 'Nâng cấp kế hoạch của bạn để tùy chỉnh thương hiệu của bạn',
title: 'Nâng cấp gói của bạn',
},
webapp: {
title: 'Tùy chỉnh thương hiệu web app',
removeBrand: 'Xóa "Được hỗ trợ bởi Dify"',
changeLogo: 'Thay đổi logo "Được hỗ trợ bởi"',
changeLogoTip: 'Định dạng SVG hoặc PNG với kích thước tối thiểu 40x40px',
},
app: {
title: 'Tùy chỉnh thương hiệu tiêu đề ứng dụng',
changeLogoTip: 'Định dạng SVG hoặc PNG với kích thước tối thiểu 80x80px',
},
upload: 'Tải lên',
uploading: 'Đang tải lên',
uploadedFail: 'Tải ảnh lên thất bại, vui lòng thử lại.',
change: 'Thay đổi',
apply: 'Áp dụng',
restore: 'Khôi phục mặc định',
customize: {
contactUs: 'liên hệ với chúng tôi',
prefix: 'Để tùy chỉnh logo thương hiệu trong ứng dụng, vui lòng',
suffix: 'để nâng cấp lên phiên bản Doanh nghiệp.',
},
}
export default translation

View File

@@ -0,0 +1,217 @@
const translation = {
steps: {
header: {
fallbackRoute: 'Kiến thức',
},
one: 'Chọn nguồn dữ liệu',
two: 'Tiền xử lý và làm sạch văn bản',
three: 'Thực hiện và hoàn thành',
},
error: {
unavailable: 'Kiến thức này không khả dụng',
},
stepOne: {
filePreview: 'Xem trước tệp',
pagePreview: 'Xem trước trang',
dataSourceType: {
file: 'Nhập từ tệp văn bản',
notion: 'Đồng bộ từ Notion',
web: 'Đồng bộ từ trang web',
},
uploader: {
title: 'Tải lên tệp văn bản',
button: 'Kéo và thả các tập tin hoặc thư mục, hoặc',
buttonSingleFile: 'Kéo và thả tệp hoặc',
browse: 'Chọn tệp',
tip: 'Hỗ trợ {{supportTypes}}. Tối đa {{size}}MB mỗi tệp.',
validation: {
typeError: 'Loại tệp không được hỗ trợ',
size: 'Tệp quá lớn. Tối đa là {{size}}MB',
count: 'Không hỗ trợ tải lên nhiều tệp',
filesNumber: 'Bạn đã đạt đến giới hạn tải lên lô của {{filesNumber}} tệp.',
},
cancel: 'Hủy',
change: 'Thay đổi',
failed: 'Tải lên thất bại',
},
notionSyncTitle: 'Notion chưa được kết nối',
notionSyncTip: 'Để đồng bộ với Notion, trước tiên cần thiết lập kết nối với Notion.',
connect: 'Đi đến kết nối',
button: 'tiếp theo',
emptyDatasetCreation: 'Tôi muốn tạo Kiến thức trống',
modal: {
title: 'Tạo Kiến thức trống',
tip: 'Một Kiến thức trống sẽ không chứa tài liệu nào, và bạn có thể tải lên tài liệu bất kỳ lúc nào.',
input: 'Tên Kiến thức',
placeholder: 'Vui lòng nhập',
nameNotEmpty: 'Tên không thể để trống',
nameLengthInvalid: 'Tên phải từ 1 đến 40 ký tự',
cancelButton: 'Hủy',
confirmButton: 'Tạo',
failed: 'Tạo thất bại',
},
website: {
fireCrawlNotConfigured: 'Firecrawl không được cấu hình',
limit: 'Giới hạn',
run: 'Chạy',
firecrawlDoc: 'Tài liệu Firecrawl',
fireCrawlNotConfiguredDescription: 'Định cấu hình Firecrawl bằng khóa API để sử dụng.',
configure: 'Cấu hình',
scrapTimeInfo: 'Tổng cộng {{tổng}} trang được thu thập trong vòng {{thời gian}}',
options: 'Tùy chọn',
unknownError: 'Lỗi không xác định',
extractOnlyMainContent: 'Chỉ trích xuất nội dung chính (không có đầu trang, điều hướng, chân trang, v.v.)',
exceptionErrorTitle: 'Một ngoại lệ xảy ra trong khi chạy tác vụ Firecrawl:',
selectAll: 'Chọn tất cả',
firecrawlTitle: 'Trích xuất nội dung web bằng 🔥Firecrawl',
totalPageScraped: 'Tổng số trang được cạo:',
excludePaths: 'Loại trừ đường dẫn',
includeOnlyPaths: 'Chỉ bao gồm đường dẫn',
maxDepth: 'Độ sâu tối đa',
preview: 'Download',
resetAll: 'Đặt lại tất cả',
crawlSubPage: 'Thu thập dữ liệu các trang phụ',
maxDepthTooltip: 'Độ sâu tối đa cần thu thập dữ liệu so với URL đã nhập. Độ sâu 0 chỉ cần cạo trang của url đã nhập, độ sâu 1 cạo url và mọi thứ sau khi nhậpURL + một /, v.v.',
jinaReaderTitle: 'Chuyển đổi toàn bộ trang web thành Markdown',
jinaReaderDoc: 'Tìm hiểu thêm về Jina Reader',
useSitemap: 'Sử dụng sơ đồ trang web',
chooseProvider: 'Chọn nhà cung cấp',
jinaReaderDocLink: 'https://jina.ai/reader',
jinaReaderNotConfigured: 'Jina Reader không được cấu hình',
jinaReaderNotConfiguredDescription: 'Thiết lập Jina Reader bằng cách nhập khóa API miễn phí của bạn để truy cập.',
useSitemapTooltip: 'Thực hiện theo sơ đồ trang web để thu thập dữ liệu trang web. Nếu không, Jina Reader sẽ thu thập dữ liệu lặp đi lặp lại dựa trên mức độ liên quan của trang, mang lại ít trang hơn nhưng chất lượng cao hơn.',
configureWatercrawl: 'Cấu hình Watercrawl',
configureFirecrawl: 'Cấu hình Firecrawl',
configureJinaReader: 'Cấu hình Jina Reader',
waterCrawlNotConfiguredDescription: 'Cấu hình Watercrawl với khóa API để sử dụng nó.',
watercrawlTitle: 'Trích xuất nội dung web bằng Watercrawl',
watercrawlDoc: 'Tài liệu Watercrawl',
waterCrawlNotConfigured: 'Watercrawl chưa được cấu hình',
running: 'Chạy',
},
cancel: 'Hủy',
},
stepTwo: {
segmentation: 'Cài đặt phân đoạn',
auto: 'Tự động',
autoDescription: 'Tự động thiết lập quy tắc phân đoạn và tiền xử lý. Khuyến nghị cho người dùng mới.',
custom: 'Tùy chỉnh',
customDescription: 'Tùy chỉnh quy tắc phân đoạn, độ dài đoạn và quy tắc tiền xử lý, v.v.',
separator: 'Ký tự phân đoạn',
separatorPlaceholder: 'Ví dụ, dòng mới (\\\\n) hoặc ký tự đặc biệt (như "***")',
maxLength: 'Độ dài tối đa của đoạn',
overlap: 'Độ chồng lấp đoạn',
overlapTip: 'Thiết lập chồng lấp đoạn có thể duy trì sự liên quan ngữ nghĩa giữa chúng, tăng cường hiệu quả truy xuất. Đề xuất thiết lập từ 10% đến 25% của kích thước đoạn tối đa.',
overlapCheck: 'Độ chồng lấp đoạn không nên lớn hơn độ dài tối đa của đoạn',
rules: 'Quy tắc tiền xử lý văn bản',
removeExtraSpaces: 'Thay thế khoảng trắng liên tục, dòng mới và tab',
removeUrlEmails: 'Xóa tất cả URL và địa chỉ email',
removeStopwords: 'Loại bỏ các từ dừng như "một", "và", "những"',
preview: 'Xác nhận & Xem trước',
reset: 'Đặt lại',
indexMode: 'Chế độ chỉ mục',
qualified: 'Chất lượng cao',
recommend: 'Khuyến nghị',
qualifiedTip: 'Sử dụng giao diện nhúng hệ thống mặc định để xử lý, cung cấp độ chính xác cao hơn khi người dùng truy vấn.',
warning: 'Vui lòng thiết lập khóa API nhà cung cấp mô hình trước.',
click: 'Đi đến cài đặt',
economical: 'Tiết kiệm',
economicalTip: 'Sử dụng các động cơ vector ngoại tuyến, chỉ mục từ khóa, v.v. để giảm độ chính xác mà không tốn token',
QATitle: 'Phân đoạn theo định dạng Câu hỏi & Trả lời',
QATip: 'Bật tùy chọn này sẽ tiêu tốn thêm token',
QALanguage: 'Phân đoạn bằng',
estimateCost: 'Ước tính',
estimateSegment: 'Số đoạn ước tính',
segmentCount: 'đoạn',
calculating: 'Đang tính toán...',
fileSource: 'Tiền xử lý tài liệu',
notionSource: 'Tiền xử lý trang',
other: 'và ',
fileUnit: ' tệp',
notionUnit: ' trang',
previousStep: 'Quay lại',
nextStep: 'Lưu & Xử lý',
save: 'Lưu & Xử lý',
cancel: 'Hủy',
sideTipTitle: 'Tại sao phải phân đoạn và tiền xử lý?',
sideTipP1: 'Khi xử lý dữ liệu văn bản, phân đoạn và làm sạch là hai bước tiền xử lý quan trọng.',
sideTipP2: 'Phân đoạn chia nhỏ văn bản dài thành các đoạn để mô hình hiểu được tốt hơn. Điều này cải thiện chất lượng và tính liên quan của kết quả mô hình.',
sideTipP3: 'Làm sạch loại bỏ các ký tự và định dạng không cần thiết, làm cho Kiến thức trở nên sạch sẽ và dễ dàng phân tích hơn.',
sideTipP4: 'Phân đoạn và làm sạch đúng cách cải thiện hiệu suất của mô hình, cung cấp kết quả chính xác và có giá trị hơn.',
previewTitle: 'Xem trước',
previewTitleButton: 'Xem trước',
previewButton: 'Chuyển sang dạng Câu hỏi & Trả lời',
previewSwitchTipStart: 'Xem trước đoạn hiện tại đang ở định dạng văn bản, chuyển sang xem trước dạng câu hỏi và trả lời sẽ',
previewSwitchTipEnd: ' tiêu tốn thêm token',
characters: 'ký tự',
indexSettingTip: 'Để thay đổi phương pháp chỉ mục, vui lòng đi tới ',
retrievalSettingTip: 'Để thay đổi phương pháp truy xuất, vui lòng đi tới ',
datasetSettingLink: 'cài đặt Kiến thức.',
websiteSource: 'Trang web tiền xử lý',
webpageUnit: 'Trang',
separatorTip: 'Dấu phân cách là ký tự được sử dụng để phân tách văn bản. \\n\\n và \\n là dấu phân cách thường được sử dụng để tách các đoạn văn và dòng. Kết hợp với dấu phẩy (\\n\\n,\\n), các đoạn văn sẽ được phân đoạn theo các dòng khi vượt quá độ dài đoạn tối đa. Bạn cũng có thể sử dụng dấu phân cách đặc biệt do chính bạn xác định (ví dụ: ***).',
maxLengthCheck: 'Chiều dài đoạn tối đa phải nhỏ hơn {{limit}}',
fullDocTip: 'Toàn bộ tài liệu được sử dụng làm phần cha và được truy xuất trực tiếp. Xin lưu ý rằng vì lý do hiệu suất, văn bản vượt quá 10000 mã thông báo sẽ tự động bị cắt bớt.',
parentChild: 'Cha mẹ-con cái',
general: 'Tổng quát',
parentChildTip: 'Khi sử dụng chế độ cha-con, phần con được sử dụng để truy xuất và phần cha được sử dụng để gọi lại dưới dạng ngữ cảnh.',
fullDoc: 'Tài liệu đầy đủ',
notAvailableForQA: 'Không có sẵn cho Chỉ số Hỏi & Đáp',
notAvailableForParentChild: 'Không có sẵn cho Chỉ số cha mẹ-con',
previewChunk: 'Xem trước Chunk',
previewChunkTip: 'Nhấp vào nút \'Preview Chunk\' ở bên trái để tải bản xem trước',
childChunkForRetrieval: 'Child-chunk để truy xuất',
highQualityTip: 'Sau khi hoàn tất việc nhúng ở chế độ Chất lượng cao, không thể hoàn nguyên về chế độ Tiết kiệm.',
useQALanguage: 'Chunk sử dụng định dạng Q & A trong',
generalTip: 'Chế độ phân đoạn văn bản chung, các đoạn được truy xuất và gọi lại là như nhau.',
qaSwitchHighQualityTipTitle: 'Định dạng Q & A yêu cầu phương pháp lập chỉ mục chất lượng cao',
qaSwitchHighQualityTipContent: 'Hiện tại, chỉ có phương pháp chỉ mục chất lượng cao mới hỗ trợ phân đoạn định dạng Q&A. Bạn có muốn chuyển sang chế độ chất lượng cao không?',
switch: 'Chuyển',
paragraph: 'Đoạn',
parentChunkForContext: 'Parent-chunk cho ngữ cảnh',
previewChunkCount: '{{đếm}} Khối ước tính',
parentChildDelimiterTip: 'Dấu phân cách là ký tự được sử dụng để phân tách văn bản. \\n\\n được khuyến nghị để chia tài liệu gốc thành các phần lớn của cha mẹ. Bạn cũng có thể sử dụng các dấu phân cách đặc biệt do chính bạn xác định.',
parentChildChunkDelimiterTip: 'Dấu phân cách là ký tự được sử dụng để phân tách văn bản. \\n được khuyến nghị để chia các chunk cha thành các chunk con nhỏ. Bạn cũng có thể sử dụng các dấu phân cách đặc biệt do chính bạn xác định.',
paragraphTip: 'Chế độ này chia văn bản thành các đoạn văn dựa trên dấu phân cách và độ dài khối tối đa, sử dụng văn bản được tách làm phần gốc để truy xuất.',
qaTip: 'Khi sử dụng dữ liệu Hỏi đáp có cấu trúc, bạn có thể tạo tài liệu ghép câu hỏi với câu trả lời. Các tài liệu này được lập chỉ mục dựa trên phần câu hỏi, cho phép hệ thống truy xuất các câu trả lời có liên quan dựa trên sự tương đồng của truy vấn.',
},
stepThree: {
creationTitle: '🎉 Kiến thức đã được tạo',
creationContent: 'Chúng tôi đã tự động đặt tên cho Kiến thức, bạn có thể sửa đổi nó bất kỳ lúc nào',
label: 'Tên Kiến thức',
additionTitle: '🎉 Tài liệu đã được tải lên',
additionP1: 'Tài liệu đã được tải lên Kiến thức',
additionP2: ', bạn có thể tìm thấy nó trong danh sách tài liệu của Kiến thức.',
stop: 'Dừng xử lý',
resume: 'Tiếp tục xử lý',
navTo: 'Đi đến tài liệu',
sideTipTitle: 'Tiếp theo là gì',
sideTipContent: 'Sau khi tài liệu hoàn thành chỉ mục, Kiến thức có thể được tích hợp vào ứng dụng như một ngữ cảnh, bạn có thể tìm cài đặt ngữ cảnh trong trang điều chỉnh prompt. Bạn cũng có thể tạo nó như một plugin chỉ mục ChatGPT độc lập để phát hành.',
modelTitle: 'Bạn có chắc chắn muốn dừng việc nhúng?',
modelContent: 'Nếu bạn cần tiếp tục xử lý sau này, bạn sẽ tiếp tục từ vị trí bạn đã dừng lại.',
modelButtonConfirm: 'Xác nhận',
modelButtonCancel: 'Hủy',
},
firecrawl: {
getApiKeyLinkText: 'Lấy khóa API của bạn từ firecrawl.dev',
configFirecrawl: 'Định cấu hình 🔥Firecrawl',
apiKeyPlaceholder: 'Khóa API từ firecrawl.dev',
},
jinaReader: {
getApiKeyLinkText: 'Nhận khóa API miễn phí của bạn tại jina.ai',
configJinaReader: 'Định cấu hình Jina Reader',
apiKeyPlaceholder: 'Khóa API từ jina.ai',
},
otherDataSource: {
title: 'Kết nối với các nguồn dữ liệu khác?',
description: 'Hiện tại, cơ sở tri thức của Dify chỉ có nguồn dữ liệu hạn chế. Đóng góp nguồn dữ liệu vào cơ sở kiến thức Dify là một cách tuyệt vời để giúp nâng cao tính linh hoạt và sức mạnh của nền tảng cho tất cả người dùng. Hướng dẫn đóng góp của chúng tôi giúp bạn dễ dàng bắt đầu. Vui lòng nhấp vào liên kết bên dưới để tìm hiểu thêm.',
learnMore: 'Tìm hiểu thêm',
},
watercrawl: {
configWatercrawl: 'Cấu hình Watercrawl',
apiKeyPlaceholder: 'Khóa API từ watercrawl.dev',
getApiKeyLinkText: 'Lấy mã API của bạn từ watercrawl.dev',
},
}
export default translation

View File

@@ -0,0 +1,406 @@
const translation = {
list: {
title: 'Tài liệu',
desc: 'Tất cả các tệp của Kiến thức được hiển thị ở đây. Toàn bộ Kiến thức có thể được liên kết với trích dẫn của Dify hoặc được lập chỉ mục thông qua plugin Chat.',
addFile: 'Thêm tệp',
addPages: 'Thêm trang',
table: {
header: {
fileName: 'TÊN TỆP',
words: 'SỐ TỪ',
hitCount: 'SỐ LẦN TRUY VẤN',
uploadTime: 'THỜI GIAN TẢI LÊN',
status: 'TRẠNG THÁI',
action: 'THAO TÁC',
chunkingMode: 'CHẾ ĐỘ CHUNKING',
},
rename: 'Rename',
name: 'Tên',
},
action: {
uploadFile: 'Tải lên tệp mới',
settings: 'Cài đặt phân đoạn',
addButton: 'Thêm đoạn',
add: 'Thêm một đoạn',
batchAdd: 'Thêm hàng loạt',
archive: 'Lưu trữ',
unarchive: 'Khôi phục',
delete: 'Xóa',
enableWarning: 'Tệp đã lưu trữ không thể được kích hoạt',
sync: 'Đồng bộ',
pause: 'Tạm dừng',
resume: 'Tiếp tục',
},
index: {
enable: 'Kích hoạt',
disable: 'Vô hiệu hóa',
all: 'Tất cả',
enableTip: 'Tệp có thể được lập chỉ mục',
disableTip: 'Tệp không thể được lập chỉ mục',
},
status: {
queuing: 'Đang chờ',
indexing: 'Đang lập chỉ mục',
paused: 'Tạm dừng',
error: 'Lỗi',
available: 'Có sẵn',
enabled: 'Đã kích hoạt',
disabled: 'Đã vô hiệu hóa',
archived: 'Đã lưu trữ',
},
empty: {
title: 'Chưa có tài liệu',
upload: {
tip: 'Bạn có thể tải lên tệp, đồng bộ từ trang web, hoặc từ ứng dụng web như Notion, GitHub, v.v.',
},
sync: {
tip: 'Dify sẽ định kỳ tải xuống tệp từ Notion của bạn và hoàn tất xử lý.',
},
},
delete: {
title: 'Bạn có chắc chắn muốn xóa?',
content: 'Nếu bạn cần tiếp tục xử lý sau này, bạn sẽ tiếp tục từ vị trí bạn đã dừng lại',
},
batchModal: {
title: 'Thêm đoạn hàng loạt',
csvUploadTitle: 'Kéo và thả tệp CSV của bạn vào đây, hoặc ',
browse: 'duyệt',
tip: 'Tệp CSV phải tuân thủ cấu trúc sau:',
question: 'câu hỏi',
answer: 'trả lời',
contentTitle: 'nội dung đoạn',
content: 'nội dung',
template: 'Tải mẫu ở đây',
cancel: 'Hủy',
run: 'Chạy hàng loạt',
runError: 'Chạy hàng loạt thất bại',
processing: 'Đang xử lý hàng loạt',
completed: 'Nhập hoàn tất',
error: 'Lỗi nhập',
ok: 'OK',
},
addUrl: 'Thêm URL',
learnMore: 'Tìm hiểu thêm',
sort: {
uploadTime: 'Thời gian tải lên',
hitCount: 'Số lần truy xuất',
},
},
metadata: {
title: 'Siêu dữ liệu',
desc: 'Gắn nhãn siêu dữ liệu cho các tài liệu cho phép AI truy cập chúng kịp thời và tiết lộ nguồn của các tài liệu tham chiếu cho người dùng.',
dateTimeFormat: 'D MMMM, YYYY hh:mm A',
docTypeSelectTitle: 'Vui lòng chọn loại tài liệu',
docTypeChangeTitle: 'Thay đổi loại tài liệu',
docTypeSelectWarning: 'Nếu thay đổi loại tài liệu, các siêu dữ liệu hiện tại sẽ không được bảo toàn',
firstMetaAction: 'Bắt đầu',
placeholder: {
add: 'Thêm ',
select: 'Chọn ',
},
source: {
upload_file: 'Tải lên tệp',
notion: 'Đồng bộ từ Notion',
github: 'Đồng bộ từ Github',
online_document: 'Tài liệu trực tuyến',
website_crawl: 'Thu thập dữ liệu trang web',
local_file: 'Tệp cục bộ',
},
type: {
book: 'Sách',
webPage: 'Trang web',
paper: 'Bài báo',
socialMediaPost: 'Bài đăng mạng xã hội',
personalDocument: 'Tài liệu cá nhân',
businessDocument: 'Tài liệu doanh nghiệp',
IMChat: 'Trò chuyện tin nhắn',
wikipediaEntry: 'Bài viết Wikipedia',
notion: 'Đồng bộ từ Notion',
github: 'Đồng bộ từ Github',
technicalParameters: 'Tham số kỹ thuật',
},
field: {
processRule: {
processDoc: 'Xử lý tài liệu',
segmentRule: 'Quy tắc phân đoạn',
segmentLength: 'Độ dài đoạn',
processClean: 'Quy tắc làm sạch văn bản',
},
book: {
title: 'Tiêu đề',
language: 'Ngôn ngữ',
author: 'Tác giả',
publisher: 'Nhà xuất bản',
publicationDate: 'Ngày xuất bản',
ISBN: 'ISBN',
category: 'Thể loại',
},
webPage: {
title: 'Tiêu đề',
url: 'URL',
language: 'Ngôn ngữ',
authorPublisher: 'Tác giả/Nhà xuất bản',
publishDate: 'Ngày xuất bản',
topicKeywords: 'Chủ đề/Từ khóa',
description: 'Mô tả',
},
paper: {
title: 'Tiêu đề',
language: 'Ngôn ngữ',
author: 'Tác giả',
publishDate: 'Ngày xuất bản',
journalConferenceName: 'Tên tạp chí/Hội nghị',
volumeIssuePage: 'Tập/Số/Trang',
DOI: 'DOI',
topicsKeywords: 'Chủ đề/Từ khóa',
abstract: 'Tóm tắt',
},
socialMediaPost: {
platform: 'Nền tảng',
authorUsername: 'Tác giả/Tên người dùng',
publishDate: 'Ngày đăng',
postURL: 'URL bài đăng',
topicsTags: 'Chủ đề/Thẻ',
},
personalDocument: {
title: 'Tiêu đề',
author: 'Tác giả',
creationDate: 'Ngày tạo',
lastModifiedDate: 'Ngày sửa đổi cuối',
documentType: 'Loại tài liệu',
tagsCategory: 'Thẻ/Danh mục',
},
businessDocument: {
title: 'Tiêu đề',
author: 'Tác giả',
creationDate: 'Ngày tạo',
lastModifiedDate: 'Ngày sửa đổi cuối',
documentType: 'Loại tài liệu',
departmentTeam: 'Phòng ban/Nhóm',
},
IMChat: {
chatPlatform: 'Nền tảng trò chuyện',
chatPartiesGroupName: 'Người tham gia/Tên nhóm',
participants: 'Người tham gia',
startDate: 'Ngày bắt đầu',
endDate: 'Ngày kết thúc',
topicsKeywords: 'Chủ đề/Từ khóa',
fileType: 'Loại tệp',
},
wikipediaEntry: {
title: 'Tiêu đề',
language: 'Ngôn ngữ',
webpageURL: 'URL trang web',
editorContributor: 'Biên tập viên/Người đóng góp',
lastEditDate: 'Ngày chỉnh sửa cuối',
summaryIntroduction: 'Tóm tắt/Giới thiệu',
},
notion: {
title: 'Tiêu đề',
language: 'Ngôn ngữ',
author: 'Tác giả',
createdTime: 'Thời gian tạo',
lastModifiedTime: 'Thời gian sửa đổi cuối',
url: 'URL',
tag: 'Thẻ',
description: 'Mô tả',
},
github: {
repoName: 'Tên kho lưu trữ',
repoDesc: 'Mô tả kho lưu trữ',
repoOwner: 'Chủ sở hữu kho lưu trữ',
fileName: 'Tên tệp',
filePath: 'Đường dẫn tệp',
programmingLang: 'Ngôn ngữ lập trình',
url: 'URL',
license: 'Giấy phép',
lastCommitTime: 'Thời gian commit cuối',
lastCommitAuthor: 'Tác giả commit cuối',
},
originInfo: {
originalFilename: 'Tên tệp gốc',
originalFileSize: 'Kích thước tệp gốc',
uploadDate: 'Ngày tải lên',
lastUpdateDate: 'Ngày cập nhật cuối',
source: 'Nguồn',
},
technicalParameters: {
segmentSpecification: 'Đặc tả đoạn',
segmentLength: 'Độ dài đoạn',
avgParagraphLength: 'Độ dài trung bình đoạn văn',
paragraphs: 'Số đoạn văn',
hitCount: 'Số lần truy vấn',
embeddingTime: 'Thời gian nhúng',
embeddedSpend: 'Chi phí nhúng',
},
},
languageMap: {
zh: 'Tiếng Trung',
en: 'Tiếng Anh',
es: 'Tiếng Tây Ban Nha',
fr: 'Tiếng Pháp',
de: 'Tiếng Đức',
ja: 'Tiếng Nhật',
ko: 'Tiếng Hàn',
ru: 'Tiếng Nga',
ar: 'Tiếng Ả Rập',
pt: 'Tiếng Bồ Đào Nha',
it: 'Tiếng Ý',
nl: 'Tiếng Hà Lan',
pl: 'Tiếng Ba Lan',
sv: 'Tiếng Thụy Điển',
tr: 'Tiếng Thổ Nhĩ Kỳ',
he: 'Tiếng Do Thái',
hi: 'Tiếng Hindi',
da: 'Tiếng Đan Mạch',
fi: 'Tiếng Phần Lan',
no: 'Tiếng Na Uy',
hu: 'Tiếng Hungary',
el: 'Tiếng Hy Lạp',
cs: 'Tiếng Séc',
th: 'Tiếng Thái',
id: 'Tiếng Indonesia',
},
categoryMap: {
book: {
fiction: 'Tiểu thuyết',
biography: 'Tiểu sử',
history: 'Lịch sử',
science: 'Khoa học',
technology: 'Công nghệ',
education: 'Giáo dục',
philosophy: 'Triết học',
religion: 'Tôn giáo',
socialSciences: 'Khoa học xã hội',
art: 'Nghệ thuật',
travel: 'Du lịch',
health: 'Sức khỏe',
selfHelp: 'Tự lực',
businessEconomics: 'Kinh doanh và kinh tế',
cooking: 'Nấu ăn',
childrenYoungAdults: 'Thiếu nhi và thanh thiếu niên',
comicsGraphicNovels: 'Truyện tranh và tiểu thuyết đồ họa',
poetry: 'Thơ ca',
drama: 'Kịch',
other: 'Khác',
},
personalDoc: {
notes: 'Ghi chú',
blogDraft: 'Bản nháp blog',
diary: 'Nhật ký',
researchReport: 'Báo cáo nghiên cứu',
bookExcerpt: 'Trích đoạn sách',
schedule: 'Lịch trình',
list: 'Danh sách',
projectOverview: 'Tổng quan dự án',
photoCollection: 'Bộ sưu tập ảnh',
creativeWriting: 'Viết sáng tạo',
codeSnippet: 'Đoạn mã',
designDraft: 'Bản phác thảo thiết kế',
personalResume: 'Sơ yếu lý lịch cá nhân',
other: 'Khác',
},
businessDoc: {
meetingMinutes: 'Biên bản cuộc họp',
researchReport: 'Báo cáo nghiên cứu',
proposal: 'Đề xuất',
employeeHandbook: 'Sổ tay nhân viên',
trainingMaterials: 'Tài liệu đào tạo',
requirementsDocument: 'Tài liệu yêu cầu',
designDocument: 'Tài liệu thiết kế',
productSpecification: 'Thông số kỹ thuật sản phẩm',
financialReport: 'Báo cáo tài chính',
marketAnalysis: 'Phân tích thị trường',
projectPlan: 'Kế hoạch dự án',
teamStructure: 'Cấu trúc nhóm',
policiesProcedures: 'Chính sách và quy trình',
contractsAgreements: 'Hợp đồng và thỏa thuận',
emailCorrespondence: 'Thư từ trao đổi',
other: 'Khác',
},
},
},
embedding: {
processing: 'Đang nhúng...',
paused: 'Đã tạm dừng nhúng',
completed: 'Hoàn tất nhúng',
error: 'Lỗi khi nhúng',
docName: 'Đang xử lý văn bản',
mode: 'Quy tắc phân đoạn',
segmentLength: 'Độ dài đoạn',
textCleaning: 'Định nghĩa và làm sạch văn bản',
segments: 'Đoạn',
highQuality: 'Chế độ chất lượng cao',
economy: 'Chế độ tiết kiệm',
estimate: 'Ước tính tiêu thụ',
stop: 'Dừng xử lý',
resume: 'Tiếp tục xử lý',
automatic: 'Tự động',
custom: 'Tùy chỉnh',
previewTip: 'Xem trước đoạn sẽ có sẵn sau khi việc nhúng hoàn tất',
parentMaxTokens: 'Cha mẹ',
pause: 'Tạm dừng',
childMaxTokens: 'Con',
hierarchical: 'Cha mẹ-con cái',
waiting: 'Đang chờ nhúng...',
},
segment: {
paragraphs: 'Đoạn văn',
keywords: 'Từ khóa',
addKeyWord: 'Thêm từ khóa',
keywordError: 'Độ dài tối đa của từ khóa là 20',
hitCount: 'Số lần truy vấn',
vectorHash: 'Mã băm vector: ',
questionPlaceholder: 'thêm câu hỏi ở đây',
questionEmpty: 'Câu hỏi không thể trống',
answerPlaceholder: 'thêm câu trả lời ở đây',
answerEmpty: 'Câu trả lời không thể trống',
contentPlaceholder: 'thêm nội dung ở đây',
contentEmpty: 'Nội dung không thể trống',
newTextSegment: 'Đoạn văn bản mới',
newQaSegment: 'Đoạn hỏi đáp mới',
delete: 'Xóa đoạn này?',
childChunks_one: 'KHỐI TRẺ',
searchResults_zero: 'KẾT QUẢ',
empty: 'Không tìm thấy Chunk',
newChunk: 'Khối mới',
childChunk: 'Khối trẻ em',
regeneratingMessage: 'Quá trình này có thể mất một lúc, vui lòng đợi...',
regenerationSuccessMessage: 'Bạn có thể đóng cửa sổ này.',
regenerationSuccessTitle: 'Hoàn thành tái tạo',
characters_other: 'Ký tự',
chunks_one: 'KHÚC',
chunkAdded: '1 miếng được thêm vào',
editChildChunk: 'Chỉnh sửa phần con',
characters_one: 'nhân vật',
expandChunks: 'Mở rộng các đoạn',
chunks_other: 'KHỐI',
editedAt: 'Chỉnh sửa tại',
dateTimeFormat: 'DD/MM/YYYY HH:mm',
addAnother: 'Thêm một cái khác',
regenerationConfirmTitle: 'Bạn có muốn tái tạo các chunk con không?',
searchResults_one: 'KẾT QUẢ',
regeneratingTitle: 'Tái tạo các chunk con',
editParentChunk: 'Chỉnh sửa phần cha',
collapseChunks: 'Thu gọn các đoạn',
searchResults_other: 'KẾT QUẢ',
parentChunks_one: 'PHẦN CHA MẸ',
newChildChunk: 'Khối con mới',
parentChunk: 'Phần cha mẹ',
parentChunks_other: 'PHẦN CHA MẸ',
regenerationConfirmMessage: 'Tạo lại các chunk con sẽ ghi đè lên các chunk con hiện tại, bao gồm các chunk đã chỉnh sửa và chunk mới được thêm vào. Sự tái sinh không thể hoàn tác.',
childChunkAdded: '1 phần con được thêm vào',
addChunk: 'Thêm Chunk',
chunkDetail: 'Chi tiết khối',
childChunks_other: 'KHỐI CON',
editChunk: 'Chỉnh sửa Chunk',
addChildChunk: 'Thêm phần con',
clearFilter: 'Bộ lọc rõ ràng',
chunk: 'Khúc',
edited: 'EDITED',
keywordDuplicate: 'Từ khóa đã tồn tại',
keywordEmpty: 'Từ khóa không được để trống',
},
}
export default translation

View File

@@ -0,0 +1,34 @@
const translation = {
title: 'Kiểm tra truy vấn',
desc: 'Kiểm tra hiệu quả truy xuất của Kiến thức dựa trên văn bản truy vấn đã cho.',
dateTimeFormat: 'MM/DD/YYYY hh:mm A',
table: {
header: {
source: 'Nguồn',
text: 'Văn bản',
time: 'Thời gian',
},
},
input: {
title: 'Văn bản nguồn',
placeholder: 'Vui lòng nhập một văn bản, khuyến nghị sử dụng một câu khẳng định ngắn.',
countWarning: 'Tối đa 200 ký tự.',
indexWarning: 'Chỉ có sẵn trong Kiến thức chất lượng cao.',
testing: 'Đang kiểm tra',
},
hit: {
title: 'CÁC ĐOẠN VĂN ĐƯỢC TRUY XUẤT',
emptyTip: 'Kết quả kiểm tra truy vấn sẽ hiển thị ở đây',
},
noRecentTip: 'Không có kết quả truy vấn gần đây',
viewChart: 'Xem BIỂU ĐỒ VECTOR',
settingTitle: 'Cài đặt truy xuất',
viewDetail: 'Xem chi tiết',
records: 'Hồ sơ',
open: 'Mở',
keyword: 'Từ khoá',
hitChunks: 'Nhấn {{num}} đoạn con',
chunkDetail: 'Chi tiết khối',
}
export default translation

View File

@@ -0,0 +1,166 @@
const translation = {
creation: {
createFromScratch: {
title: 'Quy trình kiến thức trống',
description: 'Tạo quy trình tùy chỉnh từ đầu với toàn quyền kiểm soát cấu trúc và xử lý dữ liệu.',
},
backToKnowledge: 'Quay lại kiến thức',
caution: 'Thận trọng',
importDSL: 'Nhập từ tệp DSL',
createKnowledge: 'Tạo kiến thức',
errorTip: 'Không thể tạo Cơ sở kiến thức',
successTip: 'Tạo thành công Cơ sở tri thức',
},
templates: {
customized: 'Tùy chỉnh',
},
operations: {
process: 'Quá trình',
choose: 'Chọn',
preview: 'Download',
backToDataSource: 'Quay lại nguồn dữ liệu',
details: 'Chi tiết',
dataSource: 'Nguồn dữ liệu',
editInfo: 'Chỉnh sửa thông tin',
exportPipeline: 'Đường ống xuất khẩu',
saveAndProcess: 'Lưu & xử lý',
useTemplate: 'Sử dụng quy trình kiến thức này',
convert: 'Convert',
},
deletePipeline: {
content: 'Xóa mẫu quy trình là không thể đảo ngược.',
title: 'Bạn có chắc chắn xóa mẫu quy trình này không?',
},
publishPipeline: {
success: {
message: 'Knowledge Pipeline đã xuất bản',
tip: '<CustomLink>Đi tới Tài liệu</CustomLink> để thêm hoặc quản lý các tài liệu.',
},
error: {
message: 'Không thể xuất bản quy trình kiến thức',
},
},
publishTemplate: {
success: {
learnMore: 'Tìm hiểu thêm',
message: 'Mẫu đường ống đã được xuất bản',
tip: 'Bạn có thể sử dụng mẫu này trên trang tạo.',
},
error: {
message: 'Không xuất bản được mẫu quy trình',
},
},
exportDSL: {
successTip: 'Xuất DSL quy trình thành công',
errorTip: 'Không thể xuất DSL đường ống',
},
details: {
structure: 'Cấu trúc',
structureTooltip: 'Chunk Structure xác định cách các tài liệu được phân tách và lập chỉ mục — cung cấp các chế độ General, Parent-Child và Q&A — và là duy nhất cho mỗi cơ sở tri thức.',
createdBy: 'Bởi {{author}}',
},
testRun: {
steps: {
dataSource: 'Nguồn dữ liệu',
documentProcessing: 'Xử lý tài liệu',
},
dataSource: {
localFiles: 'Tệp cục bộ',
},
notion: {
docTitle: 'Tài liệu Notion',
title: 'Chọn trang Notion',
},
title: 'Chạy thử',
tooltip: 'Ở chế độ chạy thử, chỉ được phép nhập một tài liệu tại một thời điểm để gỡ lỗi và quan sát dễ dàng hơn.',
},
inputFieldPanel: {
uniqueInputs: {
title: 'Đầu vào duy nhất cho mỗi lối vào',
tooltip: 'Đầu vào duy nhất chỉ có thể truy cập được vào nguồn dữ liệu đã chọn và các nút xuôi dòng của nó. Người dùng sẽ không cần phải điền vào nó khi chọn các nguồn dữ liệu khác. Chỉ các trường đầu vào được tham chiếu bởi các biến nguồn dữ liệu sẽ xuất hiện trong bước đầu tiên (Nguồn dữ liệu). Tất cả các trường khác sẽ được hiển thị trong bước thứ hai (Tài liệu xử lý).',
},
globalInputs: {
title: 'Đầu vào toàn cầu cho tất cả các lối vào',
tooltip: 'Đầu vào toàn cầu được chia sẻ trên tất cả các nút. Người dùng sẽ cần điền chúng khi chọn bất kỳ nguồn dữ liệu nào. Ví dụ: các trường như dấu phân cách và độ dài khối tối đa có thể được áp dụng đồng nhất trên nhiều nguồn dữ liệu. Chỉ các trường đầu vào được tham chiếu bởi các biến Nguồn dữ liệu mới xuất hiện trong bước đầu tiên (Nguồn dữ liệu). Tất cả các trường khác hiển thị trong bước thứ hai (Tài liệu xử lý).',
},
preview: {
stepOneTitle: 'Nguồn dữ liệu',
stepTwoTitle: 'Quy trình tài liệu',
},
error: {
variableDuplicate: 'Tên biến đã tồn tại. Vui lòng chọn một tên khác.',
},
addInputField: 'Thêm trường đầu vào',
editInputField: 'Chỉnh sửa trường nhập liệu',
title: 'Trường đầu vào của người dùng',
description: 'Các trường đầu vào của người dùng được sử dụng để xác định và thu thập các biến cần thiết trong quá trình thực thi quy trình. Người dùng có thể tùy chỉnh loại trường và linh hoạt cấu hình giá trị đầu vào để đáp ứng nhu cầu của các nguồn dữ liệu hoặc các bước xử lý tài liệu khác nhau.',
},
addDocuments: {
steps: {
processDocuments: 'Quy trình tài liệu',
processingDocuments: 'Xử lý tài liệu',
chooseDatasource: 'Chọn nguồn dữ liệu',
},
stepOne: {
preview: 'Download',
},
stepTwo: {
previewChunks: 'Xem trước Chunks',
chunkSettings: 'Cài đặt Chunk',
},
stepThree: {
learnMore: 'Tìm hiểu thêm',
},
characters: 'Ký tự',
backToDataSource: 'Nguồn dữ liệu',
title: 'Thêm tài liệu',
selectOnlineDocumentTip: 'Xử lý lên đến {{count}} trang',
selectOnlineDriveTip: 'Xử lý tối đa {{count}} tệp, mỗi tệp tối đa {{fileSize}} MB',
},
documentSettings: {
title: 'Cài đặt tài liệu',
},
onlineDocument: {
pageSelectorTitle: '{{name}} trang',
},
onlineDrive: {
breadcrumbs: {
allFiles: 'Tất cả các tập tin',
allBuckets: 'Tất cả các bộ lưu trữ đám mây',
searchPlaceholder: 'Tìm kiếm tệp...',
searchResult: 'Tìm {{searchResultsLength}} mục trong thư mục "{{folderName}}"',
},
emptySearchResult: 'Không có vật phẩm nào được tìm thấy',
notSupportedFileType: 'Loại tệp này không được hỗ trợ',
emptyFolder: 'Thư mục này trống',
resetKeywords: 'Đặt lại từ khóa',
notConnected: '{{name}} không được kết nối',
notConnectedTip: 'Để đồng bộ với {{name}}, trước tiên phải thiết lập kết nối với {{name}}.',
},
credentialSelector: {
name: '{{credentialName}}\'s {{pluginName}}',
},
conversion: {
confirm: {
title: 'Sự xác nhận',
content: 'Hành động này là vĩnh viễn. Bạn sẽ không thể hoàn nguyên về phương pháp trước đó. Vui lòng xác nhận để chuyển đổi.',
},
title: 'Chuyển đổi sang quy trình kiến thức',
warning: 'Hành động này không thể hoàn tác.',
errorMessage: 'Không thể chuyển đổi tập dữ liệu thành quy trình',
descriptionChunk2: '— một cách tiếp cận cởi mở và linh hoạt hơn với quyền truy cập vào các plugin từ thị trường của chúng tôi. Điều này sẽ áp dụng phương pháp xử lý mới cho tất cả các tài liệu trong tương lai.',
successMessage: 'Đã chuyển đổi thành công tập dữ liệu thành một quy trình',
descriptionChunk1: 'Giờ đây, bạn có thể chuyển đổi cơ sở kiến thức hiện có của mình để sử dụng Đường ống kiến thức để xử lý tài liệu',
},
knowledgePermissions: 'Quyền',
inputField: 'Trường đầu vào',
pipelineNameAndIcon: 'Tên đường ống & biểu tượng',
knowledgeDescription: 'Mô tả kiến thức',
knowledgeNameAndIcon: 'Tên kiến thức & biểu tượng',
editPipelineInfo: 'Chỉnh sửa thông tin quy trình',
knowledgeNameAndIconPlaceholder: 'Vui lòng nhập tên của Cơ sở kiến thức',
knowledgeDescriptionPlaceholder: 'Mô tả những gì có trong Cơ sở kiến thức này. Mô tả chi tiết cho phép AI truy cập nội dung của tập dữ liệu chính xác hơn. Nếu trống, Dify sẽ sử dụng chiến lược hit mặc định. (Tùy chọn)',
configurationTip: 'Cấu hình {{pluginName}}',
}
export default translation

View File

@@ -0,0 +1,51 @@
const translation = {
title: 'Cài đặt Kiến thức',
desc: 'Tại đây, bạn có thể sửa đổi các thuộc tính và phương pháp làm việc của Kiến thức.',
form: {
name: 'Tên Kiến thức',
namePlaceholder: 'Vui lòng nhập tên Kiến thức',
nameError: 'Tên không thể để trống',
desc: 'Mô tả Kiến thức',
descInfo: 'Vui lòng viết mô tả rõ ràng về nội dung của Kiến thức. Mô tả này sẽ được sử dụng làm cơ sở cho việc kết hợp khi lựa chọn từ nhiều Kiến thức trong quá trình suy luận.',
descPlaceholder: 'Mô tả những gì có trong Kiến thức này. Một mô tả chi tiết giúp AI truy cập nội dung của Kiến thức một cách hiệu quả. Nếu để trống, Dify sẽ sử dụng chiến lược truy xuất mặc định.',
descWrite: 'Tìm hiểu cách viết mô tả Kiến thức tốt.',
permissions: 'Quyền hạn',
permissionsOnlyMe: 'Chỉ mình tôi',
permissionsAllMember: 'Tất cả thành viên nhóm',
indexMethod: 'Phương pháp chỉ mục',
indexMethodHighQuality: 'Chất lượng cao',
indexMethodHighQualityTip: 'Sử dụng mô hình Embedding để xử lý, cung cấp độ chính xác cao hơn khi người dùng truy vấn.',
indexMethodEconomy: 'Tiết kiệm',
indexMethodEconomyTip: 'Sử dụng các công cụ nhúng vector ngoại tuyến, chỉ mục từ khóa, v.v. để giảm độ chính xác mà không tiêu tốn token',
embeddingModel: 'Mô hình nhúng',
embeddingModelTip: 'Để thay đổi mô hình nhúng, vui lòng đi tới ',
embeddingModelTipLink: 'Cài đặt',
retrievalSetting: {
title: 'Cài đặt truy xuất',
learnMore: 'Tìm hiểu thêm',
description: ' về phương pháp truy xuất.',
longDescription: ' về phương pháp truy xuất. Bạn có thể thay đổi điều này bất kỳ lúc nào trong cài đặt Kiến thức.',
method: 'Phương pháp truy xuất',
},
save: 'Lưu',
permissionsInvitedMembers: 'Thành viên một phần trong nhóm',
me: '(Bạn)',
externalKnowledgeAPI: 'API kiến thức bên ngoài',
retrievalSettings: 'Cài đặt truy xuất',
externalKnowledgeID: 'ID kiến thức bên ngoài',
helpText: 'Tìm hiểu cách viết mô tả tập dữ liệu tốt.',
indexMethodChangeToEconomyDisabledTip: 'Không khả dụng để hạ cấp từ HQ xuống ECO',
upgradeHighQualityTip: 'Sau khi nâng cấp lên chế độ Chất lượng cao, không thể hoàn nguyên về chế độ Tiết kiệm',
searchModel: 'Tìm kiếm mô hình',
chunkStructure: {
title: 'Cấu trúc Chunk',
description: 'về Cấu trúc khối.',
learnMore: 'Tìm hiểu thêm',
},
numberOfKeywords: 'Số lượng từ khóa',
onSearchResults: 'Không có thành viên nào khớp với truy vấn tìm kiếm của bạn.\nHãy thử tìm kiếm lại.',
nameAndIcon: 'Tên & Biểu tượng',
},
}
export default translation

View File

@@ -0,0 +1,243 @@
const translation = {
knowledge: 'Kiến thức',
documentCount: ' tài liệu',
wordCount: ' nghìn từ',
appCount: ' ứng dụng liên kết',
createDataset: 'Tạo bộ kiến thức',
createDatasetIntro: 'Nhập dữ liệu văn bản của bạn hoặc cập nhật dữ liệu theo thời gian thực qua Webhook để tăng cường ngữ cảnh cho LLM.',
deleteDatasetConfirmTitle: 'Xóa bộ kiến thức này?',
deleteDatasetConfirmContent:
'Việc xóa bộ kiến thức là không thể hoàn tác. Người dùng sẽ không còn truy cập được vào bộ kiến thức của bạn, và tất cả cấu hình cùng nhật ký lời nhắc sẽ bị xóa vĩnh viễn.',
datasetUsedByApp: 'Bộ kiến thức này đang được sử dụng bởi một số ứng dụng. Các ứng dụng sẽ không thể sử dụng bộ kiến thức này nữa, và tất cả cấu hình lời nhắc cùng nhật ký sẽ bị xóa vĩnh viễn.',
datasetDeleted: 'Bộ kiến thức đã được xóa',
datasetDeleteFailed: 'Xóa bộ kiến thức không thành công',
didYouKnow: 'Bạn có biết?',
intro1: 'Bộ kiến thức có thể được tích hợp vào ứng dụng Dify ',
intro2: 'như một ngữ cảnh',
intro3: ',',
intro4: 'hoặc ',
intro5: 'có thể được tạo',
intro6: ' dưới dạng một plugin chỉ mục ChatGPT độc lập để xuất bản',
unavailable: 'Không khả dụng',
datasets: 'BỘ KIẾN THỨC',
datasetsApi: 'API',
retrieval: {
semantic_search: {
title: 'Tìm kiếm Vector',
description: 'Tạo các nhúng truy vấn và tìm kiếm đoạn văn bản tương tự nhất với biểu diễn vector của nó.',
},
full_text_search: {
title: 'Tìm kiếm Toàn văn bản',
description: 'Lập chỉ mục cho tất cả các thuật ngữ trong tài liệu, cho phép người dùng tìm kiếm bất kỳ thuật ngữ nào và truy xuất đoạn văn bản liên quan chứa các thuật ngữ đó.',
},
hybrid_search: {
title: 'Tìm kiếm Kết hợp',
description: 'Thực hiện tìm kiếm toàn văn bản và tìm kiếm vector đồng thời, sắp xếp lại để chọn kết quả phù hợp nhất với truy vấn của người dùng. Yêu cầu cấu hình API mô hình Rerank.',
recommend: 'Đề xuất',
},
invertedIndex: {
},
change: 'Thay đổi',
changeRetrievalMethod: 'Thay đổi phương pháp truy xuất',
keyword_search: {
title: 'Chỉ số đảo ngược',
description: 'Chỉ số đảo ngược là một cấu trúc được sử dụng để truy xuất hiệu quả. Được sắp xếp theo thuật ngữ, mỗi thuật ngữ trỏ đến các tài liệu hoặc trang web có chứa nó.',
},
},
docsFailedNotice: 'tài liệu không được lập chỉ mục',
retry: 'Thử lại',
indexingTechnique: {
high_quality: 'CHẤT LƯỢNG',
economy: 'TIẾT KIỆM',
},
indexingMethod: {
semantic_search: 'VECTOR',
full_text_search: 'VĂN BẢN ĐẦY ĐỦ',
hybrid_search: 'KẾT HỢP',
invertedIndex: 'ĐẢO NGƯỢC',
},
mixtureHighQualityAndEconomicTip: 'Mô hình xếp hạng lại là cần thiết cho sự kết hợp của các cơ sở kiến thức chất lượng cao và tiết kiệm.',
inconsistentEmbeddingModelTip: 'Mô hình xếp hạng lại là cần thiết nếu các mô hình nhúng của các cơ sở kiến thức được chọn không nhất quán.',
retrievalSettings: 'Cài đặt truy xuất',
rerankSettings: 'Cài đặt xếp hạng lại',
weightedScore: {
title: 'Điểm số có trọng số',
description: 'Bằng cách điều chỉnh trọng số được gán, chiến lược xếp hạng lại này xác định liệu ưu tiên khớp ngữ nghĩa hay từ khóa.',
semanticFirst: 'Ngữ nghĩa trước',
keywordFirst: 'Từ khóa trước',
customized: 'Tùy chỉnh',
semantic: 'Ngữ nghĩa',
keyword: 'Từ khóa',
},
nTo1RetrievalLegacy: 'Truy xuất N-đến-1 sẽ chính thức bị loại bỏ từ tháng 9. Khuyến nghị sử dụng truy xuất đa đường dẫn mới nhất để có kết quả tốt hơn.',
nTo1RetrievalLegacyLink: 'Tìm hiểu thêm',
nTo1RetrievalLegacyLinkText: 'Truy xuất N-đến-1 sẽ chính thức bị loại bỏ vào tháng 9.',
defaultRetrievalTip: 'Truy xuất nhiều đường dẫn được sử dụng theo mặc định. Kiến thức được lấy từ nhiều cơ sở kiến thức và sau đó được xếp hạng lại.',
editExternalAPIConfirmWarningContent: {
front: 'API Kiến thức Bên ngoài này được liên kết với',
end: 'kiến thức bên ngoài, và sửa đổi này sẽ được áp dụng cho tất cả chúng. Bạn có chắc chắn muốn lưu thay đổi này không?',
},
editExternalAPIFormWarning: {
front: 'API bên ngoài này được liên kết với',
end: 'Kiến thức bên ngoài',
},
deleteExternalAPIConfirmWarningContent: {
title: {
end: '?',
front: 'Xóa',
},
content: {
front: 'API Kiến thức Bên ngoài này được liên kết với',
end: 'kiến thức bên ngoài. Xóa API này sẽ làm mất hiệu lực tất cả chúng. Bạn có chắc chắn muốn xóa API này không?',
},
noConnectionContent: 'Bạn có chắc chắn xóa API này không?',
},
selectExternalKnowledgeAPI: {
placeholder: 'Chọn một API kiến thức bên ngoài',
},
connectDatasetIntro: {
content: {
end: '. Sau đó tìm ID kiến thức tương ứng và điền vào biểu mẫu bên trái. Nếu tất cả thông tin là chính xác, nó sẽ tự động chuyển đến bài kiểm tra truy xuất trong cơ sở kiến thức sau khi nhấp vào nút kết nối.',
front: 'Để kết nối với cơ sở kiến thức bên ngoài, trước tiên bạn cần tạo API bên ngoài. Vui lòng đọc kỹ và tham khảo',
link: 'Tìm hiểu cách tạo API bên ngoài',
},
learnMore: 'Tìm hiểu thêm',
title: 'Cách kết nối với cơ sở kiến thức bên ngoài',
},
connectHelper: {
helper3: '. Chúng tôi thực sự khuyên bạn nên',
helper4: 'Đọc tài liệu trợ giúp',
helper1: 'Kết nối với cơ sở kiến thức bên ngoài thông qua API và ID cơ sở kiến thức. Hiện tại,',
helper2: 'Chỉ hỗ trợ chức năng truy xuất',
helper5: 'cẩn thận trước khi sử dụng tính năng này.',
},
externalKnowledgeForm: {
cancel: 'Hủy',
connect: 'Kết nối',
},
externalAPIForm: {
encrypted: {
end: 'Công nghệ.',
front: 'Mã thông báo API của bạn sẽ được mã hóa và lưu trữ bằng cách sử dụng',
},
apiKey: 'Khóa API',
endpoint: 'Điểm cuối API',
edit: 'Biên tập',
cancel: 'Hủy',
name: 'Tên',
save: 'Cứu',
},
learnHowToWriteGoodKnowledgeDescription: 'Tìm hiểu cách viết mô tả kiến thức tốt',
noExternalKnowledge: 'Chưa có API Kiến thức Bên ngoài, hãy nhấp vào đây để tạo',
connectDataset: 'Kết nối với cơ sở kiến thức bên ngoài',
externalTag: 'Ngoài',
externalAPIPanelTitle: 'API kiến thức bên ngoài',
editExternalAPITooltipTitle: 'KIẾN THỨC LIÊN KẾT',
externalKnowledgeNamePlaceholder: 'Vui lòng nhập tên của cơ sở kiến thức',
createExternalAPI: 'Thêm API kiến thức bên ngoài',
externalKnowledgeDescription: 'Mô tả kiến thức',
externalAPIPanelDocumentation: 'Tìm hiểu cách tạo API Kiến thức Bên ngoài',
allExternalTip: 'Khi chỉ sử dụng kiến thức bên ngoài, người dùng có thể chọn có bật mô hình Xếp hạng lại hay không. Nếu không được bật, các đoạn được truy xuất sẽ được sắp xếp dựa trên điểm số. Khi các chiến lược truy xuất của các cơ sở kiến thức khác nhau không nhất quán, nó sẽ không chính xác.',
editExternalAPIFormTitle: 'Chỉnh sửa API Kiến thức Bên ngoài',
externalKnowledgeId: 'ID kiến thức bên ngoài',
mixtureInternalAndExternalTip: 'Mô hình Rerank là cần thiết cho sự kết hợp giữa kiến thức bên trong và bên ngoài.',
externalAPI: 'API bên ngoài',
externalKnowledgeDescriptionPlaceholder: 'Mô tả nội dung trong Cơ sở Kiến thức này (tùy chọn)',
externalKnowledgeName: 'Tên kiến thức bên ngoài',
externalKnowledgeIdPlaceholder: 'Vui lòng nhập ID kiến thức',
createNewExternalAPI: 'Tạo API Kiến thức Bên ngoài mới',
externalAPIPanelDescription: 'API kiến thức bên ngoài được sử dụng để kết nối với cơ sở kiến thức bên ngoài Dify và truy xuất kiến thức từ cơ sở kiến thức đó.',
chunkingMode: {
general: 'Tổng quát',
parentChild: 'Cha mẹ-con cái',
graph: 'Đồ thị',
qa: 'Hỏi & Đáp',
},
parentMode: {
paragraph: 'Đoạn',
fullDoc: 'Tài liệu đầy đủ',
},
batchAction: {
disable: 'Vô hiệu hóa',
enable: 'Kích hoạt',
delete: 'Xóa',
selected: 'Chọn',
archive: 'Lưu trữ',
cancel: 'Hủy',
},
localDocs: 'Tài liệu địa phương',
enable: 'Kích hoạt',
preprocessDocument: '{{số}} Tiền xử lý tài liệu',
documentsDisabled: '{{num}} tài liệu bị vô hiệu hóa - không hoạt động trong hơn 30 ngày',
allKnowledge: 'Tất cả kiến thức',
allKnowledgeDescription: 'Chọn để hiển thị tất cả kiến thức trong không gian làm việc này. Chỉ Chủ sở hữu không gian làm việc mới có thể quản lý tất cả kiến thức.',
metadata: {
createMetadata: {
name: 'Tên',
namePlaceholder: 'Thêm tên siêu dữ liệu',
type: 'Loại',
title: 'Siêu dữ liệu mới',
back: 'Quay lại',
},
checkName: {
invalid: 'Tên siêu dữ liệu chỉ có thể chứa chữ cái thường, số và dấu gạch dưới, và phải bắt đầu bằng một chữ cái thường.',
empty: 'Tên siêu dữ liệu không được để trống',
tooLong: 'Tên siêu dữ liệu không được vượt quá {{max}} ký tự',
},
batchEditMetadata: {
applyToAllSelectDocumentTip: 'Tự động tạo tất cả các siêu dữ liệu đã chỉnh sửa và mới cho tất cả các tài liệu được chọn, nếu không, việc chỉnh sửa siêu dữ liệu sẽ chỉ áp dụng cho các tài liệu có nó.',
multipleValue: 'Nhiều giá trị',
editDocumentsNum: 'Chỉnh sửa {{num}} tài liệu',
applyToAllSelectDocument: 'Áp dụng cho tất cả các tài liệu đã chọn',
editMetadata: 'Chỉnh sửa siêu dữ liệu',
},
selectMetadata: {
manageAction: 'Quản lý',
search: 'Tìm kiếm siêu dữ liệu',
newAction: 'Siêu dữ liệu mới',
},
datasetMetadata: {
disabled: 'Tắt',
rename: 'Đổi tên',
namePlaceholder: 'Tên siêu dữ liệu',
builtIn: 'Tích hợp sẵn',
deleteTitle: 'Xác nhận để xóa',
name: 'Tên',
values: '{{num}} Giá trị',
description: 'Bạn có thể quản lý tất cả metadata trong kiến thức này ở đây. Những thay đổi sẽ được đồng bộ hóa đến mọi tài liệu.',
deleteContent: 'Bạn có chắc chắn muốn xóa siêu dữ liệu "{{name}}" không?',
builtInDescription: 'Siêu dữ liệu được tích hợp sẵn sẽ tự động được trích xuất và tạo ra. Nó phải được bật trước khi sử dụng và không thể chỉnh sửa.',
addMetaData: 'Thêm siêu dữ liệu',
},
documentMetadata: {
documentInformation: 'Thông tin tài liệu',
technicalParameters: 'Các Thông Số Kỹ Thuật',
metadataToolTip: 'Dữ liệu siêu thông tin đóng vai trò là một bộ lọc quan trọng giúp nâng cao độ chính xác và tính liên quan của việc truy xuất thông tin. Bạn có thể chỉnh sửa và thêm dữ liệu siêu thông tin cho tài liệu này ở đây.',
startLabeling: 'Bắt đầu gán nhãn',
},
addMetadata: 'Thêm siêu dữ liệu',
chooseTime: 'Chọn một thời gian...',
metadata: 'Siêu dữ liệu',
},
embeddingModelNotAvailable: 'Mô hình nhúng không khả dụng.',
updated: 'Cập nhật',
createFromPipeline: 'Tạo từ quy trình kiến thức',
externalKnowledgeBase: 'Cơ sở kiến thức bên ngoài',
serviceApi: {
card: {
title: 'API dịch vụ backend',
endpoint: 'Điểm cuối API dịch vụ',
apiKey: 'Khóa API',
apiReference: 'Tham chiếu API',
},
enabled: 'Đang phục vụ',
disabled: 'Vô hiệu hóa',
title: 'Giao diện lập trình dịch vụ',
},
docAllEnabled_one: 'Tài liệu {{count}} đã được kích hoạt',
docAllEnabled_other: 'Tất cả các tài liệu {{count}} đã được kích hoạt',
partialEnabled_one: 'Tổng cộng {{count}} tài liệu, {{num}} có sẵn',
partialEnabled_other: 'Tổng cộng {{count}} tài liệu, {{num}} có sẵn',
}
export default translation

View File

@@ -0,0 +1,76 @@
const translation = {
toVerifiedTip: {
coupon: 'mã giảm giá độc quyền 100%',
front: 'Bạn hiện đủ điều kiện để có trạng thái Xác minh Giáo dục. Vui lòng nhập thông tin giáo dục của bạn bên dưới để hoàn tất quá trình và nhận một',
end: 'cho Kế hoạch Chuyên nghiệp Dify.',
},
form: {
schoolName: {
placeholder: 'Nhập tên chính thức, không viết tắt của trường bạn',
title: 'Tên Trường Của Bạn',
},
schoolRole: {
option: {
teacher: 'Giáo viên',
student: 'Học sinh',
administrator: 'Quản trị viên trường học',
},
title: 'Vai trò của bạn ở trường',
},
terms: {
desc: {
termsOfService: 'Điều khoản dịch vụ',
privacyPolicy: 'Chính sách bảo mật',
and: 'và',
end: 'Bằng cách gửi:',
front: 'Thông tin của bạn và việc sử dụng trạng thái Được xác minh Giáo dục của chúng tôi thuộc về điều kiện của chúng tôi',
},
option: {
age: 'Tôi xác nhận rằng tôi ít nhất 18 tuổi',
inSchool: 'Tôi xác nhận rằng tôi đã đăng ký hoặc làm việc tại cơ sở đã cung cấp. Dify có thể yêu cầu chứng minh về việc đăng ký/làm việc. Nếu tôi cung cấp thông tin không chính xác về đủ điều kiện của mình, tôi đồng ý trả bất kỳ khoản phí nào ban đầu được miễn dựa trên tình trạng giáo dục của tôi.',
},
title: 'Điều khoản & Thỏa thuận',
},
},
toVerified: 'Xác thực giáo dục',
successTitle: 'Bạn đã được xác minh giáo dục Dify',
submit: 'Gửi',
rejectTitle: 'Yêu cầu xác minh giáo dục Dify của bạn đã bị từ chối',
successContent: 'Chúng tôi đã phát hành một phiếu giảm giá 100% cho gói Dify Professional vào tài khoản của bạn. Phiếu giảm giá có hiệu lực trong một năm, vui lòng sử dụng nó trong thời gian hiệu lực.',
currentSigned: 'HIỆN ĐANG ĐĂNG NHẬP VÀO',
learn: 'Học cách xác minh trình độ giáo dục',
emailLabel: 'Email hiện tại của bạn',
rejectContent: 'Rất tiếc, bạn không đủ điều kiện để nhận trạng thái Xác minh Giáo dục và do đó không thể nhận được mã giảm giá độc quyền 100% cho Kế hoạch Chuyên nghiệp Dify nếu bạn sử dụng địa chỉ email này.',
submitError: 'Gửi mẫu không thành công. Vui lòng thử lại sau.',
notice: {
expired: {
summary: {
line1: 'Bạn vẫn có thể truy cập và sử dụng Dify.',
line2: 'Tuy nhiên, bạn không còn đủ điều kiện để nhận phiếu giảm giá giáo dục mới.',
},
title: 'Tình trạng giáo dục của bạn đã hết hạn',
},
isAboutToExpire: {
summary: 'Đừng lo — điều này sẽ không ảnh hưởng đến gói đăng ký hiện tại của bạn, nhưng bạn sẽ không nhận được giảm giá giáo dục khi nó tự động gia hạn trừ khi bạn xác minh lại trạng thái của mình.',
title: 'Tình trạng giáo dục của bạn sẽ hết hạn vào {{date}}',
},
stillInEducation: {
title: 'Vẫn đang học tập?',
isAboutToExpire: 'Xác minh lại ngay bây giờ để nhận một phiếu giảm giá mới cho năm học sắp tới. Nó sẽ được lưu vào tài khoản của bạn và sẵn sàng sử dụng khi bạn gia hạn tiếp theo.',
expired: 'Xác minh lại ngay bây giờ để nhận một phiếu giảm giá mới cho năm học sắp tới. Chúng tôi sẽ thêm nó vào tài khoản của bạn và bạn có thể sử dụng nó cho lần nâng cấp tiếp theo.',
},
alreadyGraduated: {
title: 'Đã tốt nghiệp rồi sao?',
expired: 'Hãy thoải mái nâng cấp bất kỳ lúc nào để có quyền truy cập đầy đủ vào các tính năng trả phí.',
isAboutToExpire: 'Gói đăng ký hiện tại của bạn vẫn sẽ hoạt động. Khi nó kết thúc, bạn sẽ được chuyển sang gói Sandbox, hoặc bạn có thể nâng cấp bất cứ lúc nào để khôi phục quyền truy cập đầy đủ vào các tính năng trả phí.',
},
action: {
upgrade: 'Nâng cấp',
reVerify: 'Xác minh lại',
dismiss: 'Bỏ qua',
},
dateFormat: 'MM/DD/YYYY',
},
}
export default translation

View File

@@ -0,0 +1,44 @@
const translation = {
title: 'Khám phá',
sidebar: {
discovery: 'Khám phá',
chat: 'Trò chuyện',
workspace: 'Không gian làm việc',
action: {
pin: 'Ghim',
unpin: 'Bỏ ghim',
rename: 'Đổi tên',
delete: 'Xóa',
},
delete: {
title: 'Xóa ứng dụng',
content: 'Bạn có chắc chắn muốn xóa ứng dụng này không?',
},
},
apps: {
title: 'Khám phá ứng dụng bởi Dify',
description: 'Sử dụng ngay các ứng dụng mẫu này hoặc tùy chỉnh ứng dụng của bạn dựa trên các mẫu có sẵn.',
allCategories: 'Tất cả danh mục',
},
appCard: {
addToWorkspace: 'Thêm vào không gian làm việc',
customize: 'Tùy chỉnh',
},
appCustomize: {
title: 'Tạo ứng dụng từ {{name}}',
subTitle: 'Biểu tượng và tên ứng dụng',
nameRequired: 'Vui lòng nhập tên ứng dụng',
},
category: {
Assistant: 'Trợ lý',
Writing: 'Viết lách',
Translate: 'Dịch thuật',
Programming: 'Lập trình',
HR: 'Nhân sự',
Agent: 'Người đại lý',
Workflow: 'Quy trình làm việc',
Entertainment: 'Giải trí',
},
}
export default translation

View File

@@ -0,0 +1,8 @@
const translation = {
sidebar: {
expandSidebar: 'Mở rộng thanh bên',
collapseSidebar: 'Thu gọn thanh bên',
},
}
export default translation

View File

@@ -0,0 +1,126 @@
const translation = {
pageTitle: 'Xin chào, hãy bắt đầu! 👋',
welcome: 'Chào mừng bạn đến với Dify, vui lòng đăng nhập để tiếp tục.',
email: 'Địa chỉ email',
emailPlaceholder: 'Nhập email của bạn',
password: 'Mật khẩu',
passwordPlaceholder: 'Nhập mật khẩu của bạn',
name: 'Tên người dùng',
namePlaceholder: 'Nhập tên người dùng của bạn',
forget: 'Quên mật khẩu?',
signBtn: 'Đăng nhập',
installBtn: 'Cài đặt',
setAdminAccount: 'Thiết lập tài khoản quản trị',
setAdminAccountDesc: 'Tài khoản quản trị có quyền tối đa, có thể tạo ứng dụng và quản lý các nhà cung cấp LLM, v.v.',
createAndSignIn: 'Tạo và đăng nhập',
oneMoreStep: 'Còn một bước nữa',
createSample: 'Dựa trên thông tin này, chúng tôi sẽ tạo một ứng dụng mẫu cho bạn',
invitationCode: 'Mã mời',
invitationCodePlaceholder: 'Nhập mã mời của bạn',
interfaceLanguage: 'Ngôn ngữ giao diện',
timezone: 'Múi giờ',
go: 'Đi đến Dify',
sendUsMail: 'Gửi email giới thiệu cho chúng tôi, chúng tôi sẽ xử lý yêu cầu mời của bạn.',
acceptPP: 'Tôi đã đọc và đồng ý với chính sách bảo mật',
reset: 'Vui lòng chạy lệnh sau để đặt lại mật khẩu của bạn',
withGitHub: 'Tiếp tục với GitHub',
withGoogle: 'Tiếp tục với Google',
rightTitle: 'Khai phá tiềm năng tối đa của LLM',
rightDesc: 'Dễ dàng xây dựng ứng dụng AI hấp dẫn, có thể vận hành và cải thiện được.',
tos: 'Điều khoản dịch vụ',
pp: 'Chính sách bảo mật',
tosDesc: 'Bằng cách đăng ký, bạn đồng ý với',
goToInit: 'Nếu bạn chưa khởi tạo tài khoản, vui lòng chuyển đến trang khởi tạo',
dontHave: 'Chưa có tài khoản?',
invalidInvitationCode: 'Mã mời không hợp lệ',
accountAlreadyInited: 'Tài khoản đã được khởi tạo',
forgotPassword: 'Quên mật khẩu?',
resetLinkSent: 'Đã gửi liên kết đặt lại mật khẩu',
sendResetLink: 'Gửi liên kết đặt lại mật khẩu',
backToSignIn: 'Quay lại đăng nhập',
forgotPasswordDesc: 'Vui lòng nhập địa chỉ email của bạn để đặt lại mật khẩu. Chúng tôi sẽ gửi cho bạn một email hướng dẫn cách đặt lại mật khẩu.',
checkEmailForResetLink: 'Vui lòng kiểm tra email để nhận liên kết đặt lại mật khẩu. Nếu không thấy trong vài phút, hãy kiểm tra thư mục spam.',
passwordChanged: 'Đăng nhập ngay',
changePassword: 'Đổi mật khẩu',
changePasswordTip: 'Vui lòng nhập mật khẩu mới cho tài khoản của bạn',
invalidToken: 'Mã thông báo không hợp lệ hoặc đã hết hạn',
confirmPassword: 'Xác nhận mật khẩu',
confirmPasswordPlaceholder: 'Nhập lại mật khẩu mới của bạn',
passwordChangedTip: 'Mật khẩu của bạn đã được thay đổi thành công',
error: {
emailEmpty: 'Vui lòng nhập địa chỉ email',
emailInValid: 'Vui lòng nhập một địa chỉ email hợp lệ',
nameEmpty: 'Vui lòng nhập tên',
passwordEmpty: 'Vui lòng nhập mật khẩu',
passwordInvalid: 'Mật khẩu phải chứa cả chữ và số, và có độ dài ít nhất 8 ký tự',
passwordLengthInValid: 'Mật khẩu phải có ít nhất 8 ký tự',
registrationNotAllowed: 'Không tìm thấy tài khoản. Vui lòng liên hệ với quản trị viên hệ thống để đăng ký.',
invalidEmailOrPassword: 'Email hoặc mật khẩu không hợp lệ.',
},
license: {
tip: 'Trước khi bắt đầu sử dụng Phiên bản Cộng đồng của Dify, vui lòng đọc',
link: 'Giấy phép mã nguồn mở trên GitHub',
},
join: 'Tham gia',
joinTipStart: 'Mời bạn tham gia',
joinTipEnd: 'đội ngũ tại Dify',
invalid: 'Liên kết đã hết hạn',
explore: 'Khám phá Dify',
activatedTipStart: 'Bạn đã tham gia',
activatedTipEnd: 'đội ngũ',
activated: 'Đăng nhập ngay',
adminInitPassword: 'Mật khẩu khởi tạo quản trị viên',
validate: 'Xác thực',
checkCode: {
checkYourEmail: 'Kiểm tra email của bạn',
verify: 'Xác minh',
resend: 'Gửi lại',
didNotReceiveCode: 'Bạn không nhận được mã?',
validTime: 'Lưu ý rằng mã có hiệu lực trong 5 phút',
invalidCode: 'Mã không hợp lệ',
verificationCode: 'Mã xác minh',
useAnotherMethod: 'Sử dụng phương pháp khác',
emptyCode: 'Mã là bắt buộc',
verificationCodePlaceholder: 'Nhập mã gồm 6 chữ số',
tipsPrefix: 'Chúng tôi gửi mã xác minh đến',
},
back: 'Lưng',
withSSO: 'Tiếp tục với SSO',
continueWithCode: 'Tiếp tục với mã',
changePasswordBtn: 'Đặt mật khẩu',
useVerificationCode: 'Sử dụng mã xác minh',
noLoginMethodTip: 'Vui lòng liên hệ với quản trị viên hệ thống để thêm phương thức xác thực.',
enterYourName: 'Vui lòng nhập tên người dùng của bạn',
setYourAccount: 'Đặt tài khoản của bạn',
backToLogin: 'Quay lại đăng nhập',
noLoginMethod: 'Phương thức xác thực không được cấu hình',
or: 'HOẶC',
resetPasswordDesc: 'Nhập email bạn đã sử dụng để đăng ký trên Dify và chúng tôi sẽ gửi cho bạn email đặt lại mật khẩu.',
usePassword: 'Sử dụng mật khẩu',
resetPassword: 'Đặt lại mật khẩu',
sendVerificationCode: 'Gửi mã xác minh',
licenseInactive: 'Giấy phép không hoạt động',
licenseLost: 'Mất giấy phép',
licenseInactiveTip: 'Giấy phép Dify Enterprise cho không gian làm việc của bạn không hoạt động. Vui lòng liên hệ với quản trị viên của bạn để tiếp tục sử dụng Dify.',
licenseExpired: 'Giấy phép đã hết hạn',
licenseExpiredTip: 'Giấy phép Dify Enterprise cho không gian làm việc của bạn đã hết hạn. Vui lòng liên hệ với quản trị viên của bạn để tiếp tục sử dụng Dify.',
licenseLostTip: 'Không thể kết nối máy chủ cấp phép Dify. Vui lòng liên hệ với quản trị viên của bạn để tiếp tục sử dụng Dify.',
webapp: {
noLoginMethod: 'Phương thức xác thực chưa được cấu hình cho ứng dụng web',
noLoginMethodTip: 'Vui lòng liên hệ với quản trị viên hệ thống để thêm phương thức xác thực.',
disabled: 'Xác thực webapp đã bị vô hiệu hóa. Vui lòng liên hệ với quản trị hệ thống để kích hoạt nó. Bạn có thể thử sử dụng ứng dụng trực tiếp.',
login: 'Đăng nhập',
},
signup: {
signIn: 'Đăng nhập',
haveAccount: 'Bạn đã có tài khoản chưa?',
noAccount: 'Bạn chưa có tài khoản?',
createAccount: 'Tạo tài khoản của bạn',
signUp: 'Đăng ký',
verifyMail: 'Tiếp tục với mã xác minh',
welcome: '👋 Chào mừng! Vui lòng điền vào các chi tiết để bắt đầu.',
},
pageTitleForE: 'Này, hãy bắt đầu nào!',
}
export default translation

View File

@@ -0,0 +1,27 @@
const translation = {
tips: {
needLogin: 'Vui lòng đăng nhập để xác thực',
notLoggedIn: 'Ứng dụng này muốn truy cập vào tài khoản Dify Cloud của bạn',
loggedIn: 'Ứng dụng này muốn truy cập thông tin sau từ tài khoản Dify Cloud của bạn.',
common: 'Chúng tôi tôn trọng quyền riêng tư của bạn và sẽ chỉ sử dụng thông tin này để cải thiện trải nghiệm của bạn với các công cụ phát triển của chúng tôi.',
},
scopes: {
timezone: 'Múi giờ',
languagePreference: 'Sở thích ngôn ngữ',
name: 'Tên',
email: 'Email',
avatar: 'Avatar',
},
error: {
authorizeFailed: 'Ủy quyền không thành công',
authAppInfoFetchFailed: 'Không thể lấy thông tin ứng dụng để xác thực',
invalidParams: 'Tham số không hợp lệ',
},
login: 'Đăng nhập',
switchAccount: 'Chuyển tài khoản',
connect: 'Kết nối với',
continue: 'Tiếp tục',
unknownApp: 'Ứng dụng không xác định',
}
export default translation

View File

@@ -0,0 +1,40 @@
const translation = {
common: {
publishAsPipeline: {
descriptionPlaceholder: 'Vui lòng nhập mô tả của Quy trình kiến thức này. (Tùy chọn)',
name: 'Tên đường ống & biểu tượng',
description: 'Mô tả kiến thức',
namePlaceholder: 'Vui lòng nhập tên của Quy trình kiến thức này. (Bắt buộc)',
},
reRun: 'Chạy lại',
preparingDataSource: 'Chuẩn bị nguồn dữ liệu',
confirmPublish: 'Xác nhận xuất bản',
testRun: 'Chạy thử',
goToAddDocuments: 'Đi tới thêm tài liệu',
processing: 'Xử lý',
publishAs: 'Xuất bản dưới dạng quy trình kiến thức',
confirmPublishContent: 'Sau khi xuất bản thành công quy trình tri thức, không thể sửa đổi cấu trúc chunk của cơ sở tri thức này. Bạn có chắc chắn muốn xuất bản nó không?',
},
inputField: {
manage: 'Điều khiển',
create: 'Tạo trường nhập liệu của người dùng',
},
publishToast: {
title: 'Đường ống này vẫn chưa được xuất bản',
desc: 'Khi quy trình không được phát hành, bạn có thể sửa đổi cấu trúc khối trong nút cơ sở kiến thức và điều phối quy trình và các thay đổi sẽ tự động được lưu dưới dạng bản nháp.',
},
result: {
resultPreview: {
loading: 'Xử lý... Hãy chờ',
error: 'Lỗi xảy ra trong quá trình thực thi',
viewDetails: 'Xem chi tiết',
footerTip: 'Trong chế độ chạy thử, xem trước tối đa {{count}} phần',
},
},
ragToolSuggestions: {
title: 'Gợi ý cho RAG',
noRecommendationPlugins: 'Không có plugin được đề xuất, tìm thêm trong <CustomLink>Chợ</CustomLink>',
},
}
export default translation

View File

@@ -0,0 +1,26 @@
const translation = {
tags: {
education: 'Giáo dục',
medical: 'Y',
business: 'Kinh doanh',
weather: 'Thời tiết',
finance: 'Tài chính',
productivity: 'Năng suất',
design: 'Thiết kế',
videos: 'Video',
utilities: 'Tiện ích',
social: 'Xã hội',
search: 'Tìm kiếm',
news: 'Tin tức',
image: 'Ảnh',
agent: 'Người đại lý',
other: 'Khác',
travel: 'Du lịch',
entertainment: 'Giải trí',
rag: 'GIẺ',
},
searchTags: 'Thẻ tìm kiếm',
allTags: 'Tất cả thẻ',
}
export default translation

View File

@@ -0,0 +1,186 @@
const translation = {
subscription: {
title: 'Đăng ký',
listNum: 'Đăng ký {{num}}',
empty: {
title: 'Không có đăng ký',
button: 'Đăng ký mới',
},
createButton: {
oauth: 'Đăng ký mới với OAuth',
apiKey: 'Đăng ký mới với Khóa API',
manual: 'Dán URL để tạo đăng ký mới',
},
createSuccess: 'Đăng ký đã được tạo thành công',
createFailed: 'Tạo đăng ký thất bại',
maxCount: 'Tối đa {{num}} lượt đăng ký',
selectPlaceholder: 'Chọn gói đăng ký',
noSubscriptionSelected: 'Chưa chọn gói đăng ký',
subscriptionRemoved: 'Đã hủy đăng ký',
list: {
title: 'Đăng ký',
addButton: 'Thêm',
tip: 'Nhận sự kiện qua Đăng ký',
item: {
enabled: 'Đã bật',
disabled: 'Vô hiệu hóa',
credentialType: {
api_key: 'Khóa API',
oauth2: 'OAuth',
unauthorized: 'Hướng dẫn',
},
actions: {
delete: 'Xóa',
deleteConfirm: {
title: 'Xóa {{name}}?',
success: 'Đăng ký {{name}} đã được xóa thành công',
error: 'Không thể xóa đăng ký {{name}}',
content: 'Một khi đã xóa, gói đăng ký này sẽ không thể phục hồi. Vui lòng xác nhận.',
contentWithApps: 'Gói đăng ký hiện tại đang được {{count}} ứng dụng tham chiếu. Xóa nó sẽ khiến các ứng dụng đã cấu hình ngừng nhận các sự kiện từ gói đăng ký.',
confirm: 'Xác nhận xóa',
cancel: 'Hủy',
confirmInputWarning: 'Vui lòng nhập tên chính xác để xác nhận.',
confirmInputPlaceholder: 'Nhập "{{name}}" để xác nhận.',
confirmInputTip: 'Vui lòng nhập “{{name}}” để xác nhận.',
},
},
status: {
active: 'Hoạt động',
inactive: 'Không hoạt động',
},
usedByNum: 'Được sử dụng bởi {{num}} quy trình làm việc',
noUsed: 'Không sử dụng quy trình công việc',
},
},
addType: {
title: 'Thêm đăng ký',
description: 'Chọn cách bạn muốn tạo đăng ký trình kích hoạt của mình',
options: {
apikey: {
title: 'Tạo bằng Khóa API',
description: 'Tự động tạo đăng ký bằng thông tin xác thực API',
},
oauth: {
title: 'Tạo bằng OAuth',
description: 'Ủy quyền với nền tảng bên thứ ba để tạo đăng ký',
clientSettings: 'Cài đặt khách hàng OAuth',
clientTitle: 'Khách hàng OAuth',
default: 'Mặc định',
custom: 'Tùy chỉnh',
},
manual: {
title: 'Cài đặt thủ công',
description: 'Dán URL để tạo đăng ký mới',
tip: 'Cấu hình URL trên nền tảng của bên thứ ba thủ công',
},
},
},
},
modal: {
steps: {
verify: 'Xác minh',
configuration: 'Cấu hình',
},
common: {
cancel: 'Hủy',
back: 'Quay lại',
next: 'Tiếp theo',
create: 'Tạo',
verify: 'Xác minh',
authorize: 'Ủy quyền',
creating: 'Đang tạo...',
verifying: 'Đang xác minh...',
authorizing: 'Đang cấp quyền...',
},
oauthRedirectInfo: 'Vì không tìm thấy bí mật khách hàng hệ thống cho nhà cung cấp công cụ này, cần phải thiết lập thủ công, đối với redirect_uri, vui lòng sử dụng',
apiKey: {
title: 'Tạo bằng Khóa API',
verify: {
title: 'Xác minh thông tin đăng nhập',
description: 'Vui lòng cung cấp thông tin xác thực API của bạn để xác minh quyền truy cập',
error: 'Xác minh thông tin không thành công. Vui lòng kiểm tra lại khóa API của bạn.',
success: 'Thông tin đăng nhập đã được xác minh thành công',
},
configuration: {
title: 'Cấu hình đăng ký',
description: 'Thiết lập các tham số đăng ký của bạn',
},
},
oauth: {
title: 'Tạo bằng OAuth',
authorization: {
title: 'Ủy quyền OAuth',
description: 'Cho phép Dify truy cập vào tài khoản của bạn',
redirectUrl: 'Chuyển hướng URL',
redirectUrlHelp: 'Sử dụng URL này trong cấu hình ứng dụng OAuth của bạn',
authorizeButton: 'Ủy quyền với {{provider}}',
waitingAuth: 'Đang chờ cấp quyền...',
authSuccess: 'Ủy quyền thành công',
authFailed: 'Không thể lấy thông tin xác thực OAuth',
waitingJump: 'Được phép, đang chờ nhảy',
},
configuration: {
title: 'Cấu hình đăng ký',
description: 'Thiết lập các thông số đăng ký của bạn sau khi được cấp quyền',
success: 'Cấu hình OAuth thành công',
failed: 'Cấu hình OAuth thất bại',
},
remove: {
success: 'Xóa OAuth thành công',
failed: 'Xóa OAuth thất bại',
},
save: {
success: 'Cấu hình OAuth đã được lưu thành công',
},
},
manual: {
title: 'Cài đặt thủ công',
description: 'Cấu hình đăng ký webhook của bạn thủ công',
logs: {
title: 'Nhật ký yêu cầu',
request: 'Yêu cầu',
loading: 'Đang chờ yêu cầu từ {{pluginName}}...',
},
},
form: {
subscriptionName: {
label: 'Tên thuê bao',
placeholder: 'Nhập tên gói đăng ký',
required: 'Tên đăng ký là bắt buộc',
},
callbackUrl: {
label: 'URL gọi lại',
description: 'URL này sẽ nhận các sự kiện webhook',
tooltip: 'Cung cấp một endpoint có thể truy cập công khai để nhận các yêu cầu gọi lại từ nhà cung cấp kích hoạt.',
placeholder: 'Đang tạo...',
privateAddressWarning: 'URL này có vẻ là một địa chỉ nội bộ, điều này có thể khiến các yêu cầu webhook thất bại. Bạn có thể thay đổi TRIGGER_URL sang một địa chỉ công khai.',
},
},
errors: {
createFailed: 'Tạo đăng ký thất bại',
verifyFailed: 'Xác minh thông tin đăng nhập thất bại',
authFailed: 'Ủy quyền thất bại',
networkError: 'Lỗi mạng, vui lòng thử lại',
},
},
events: {
title: 'Các sự kiện có sẵn',
description: 'Các sự kiện mà plugin kích hoạt này có thể đăng ký',
empty: 'Không có sự kiện nào',
event: 'Sự kiện',
events: 'Sự kiện',
actionNum: '{{num}} {{event}} ĐÃ BAO GỒM',
item: {
parameters: 'tham số {{count}}',
noParameters: 'Không có tham số',
},
output: 'Đầu ra',
},
node: {
status: {
warning: 'Ngắt kết nối',
},
},
}
export default translation

View File

@@ -0,0 +1,320 @@
const translation = {
category: {
all: 'Tất cả',
bundles: 'Bó',
extensions: 'Phần mở rộng',
tools: 'Công cụ',
agents: 'Chiến lược đại lý',
models: 'Mô hình',
datasources: 'Nguồn dữ liệu',
triggers: 'Kích hoạt',
},
categorySingle: {
agent: 'Chiến lược đại lý',
tool: 'Công cụ',
extension: 'Phần mở rộng',
model: 'Mẫu',
bundle: 'Bó',
datasource: 'Nguồn dữ liệu',
trigger: 'Kích hoạt',
},
list: {
source: {
marketplace: 'Cài đặt từ Marketplace',
local: 'Cài đặt từ tệp gói cục bộ',
github: 'Cài đặt từ GitHub',
},
noInstalled: 'Không có plugin nào được cài đặt',
notFound: 'Không tìm thấy plugin',
},
source: {
marketplace: 'Chợ',
local: 'Tệp gói cục bộ',
github: 'GitHub',
},
detailPanel: {
categoryTip: {
local: 'Plugin cục bộ',
debugging: 'Plugin gỡ lỗi',
marketplace: 'Được cài đặt từ Marketplace',
github: 'Cài đặt từ Github',
},
operation: {
detail: 'Chi tiết',
update: 'Cập nhật',
viewDetail: 'xem chi tiết',
info: 'Thông tin plugin',
remove: 'Triệt',
install: 'Cài đặt',
checkUpdate: 'Kiểm tra cập nhật',
back: 'Quay lại',
},
toolSelector: {
descriptionPlaceholder: 'Mô tả ngắn gọn về mục đích của công cụ, ví dụ: lấy nhiệt độ cho một vị trí cụ thể.',
params: 'CẤU HÌNH LÝ LUẬN',
toolLabel: 'Công cụ',
descriptionLabel: 'Mô tả công cụ',
unsupportedContent2: 'Nhấp để chuyển đổi phiên bản.',
auto: 'Tự động',
placeholder: 'Chọn một công cụ...',
paramsTip1: 'Kiểm soát các tham số suy luận LLM.',
uninstalledTitle: 'Công cụ chưa được cài đặt',
unsupportedContent: 'Phiên bản plugin đã cài đặt không cung cấp hành động này.',
uninstalledContent: 'Plugin này được cài đặt từ kho lưu trữ cục bộ / GitHub. Vui lòng sử dụng sau khi cài đặt.',
paramsTip2: 'Khi tắt \'Tự động\', giá trị mặc định sẽ được sử dụng.',
uninstalledLink: 'Quản lý trong Plugins',
title: 'Thêm công cụ',
settings: 'CÀI ĐẶT NGƯỜI DÙNG',
empty: 'Nhấp vào nút \'+\' để thêm công cụ. Bạn có thể thêm nhiều công cụ.',
unsupportedTitle: 'Hành động không được hỗ trợ',
toolSetting: 'Cài đặt công cụ',
unsupportedMCPTool: 'Phiên bản plugin chiến lược đại lý được chọn hiện tại không hỗ trợ công cụ MCP.',
},
switchVersion: 'Chuyển đổi phiên bản',
endpointDisableTip: 'Tắt điểm cuối',
endpointDeleteTip: 'Xóa điểm cuối',
configureApp: 'Định cấu hình ứng dụng',
configureModel: 'Định cấu hình mô hình',
endpointsTip: 'Plugin này cung cấp các chức năng cụ thể thông qua các điểm cuối và bạn có thể định cấu hình nhiều bộ điểm cuối cho không gian làm việc hiện tại.',
endpointDisableContent: 'Bạn có muốn vô hiệu hóa {{name}} không?',
strategyNum: '{{số}} {{chiến lược}} BAO GỒM',
endpoints: 'Điểm cuối',
actionNum: '{{số}} {{hành động}} BAO GỒM',
configureTool: 'Công cụ định cấu hình',
modelNum: '{{số}} CÁC MÔ HÌNH BAO GỒM',
serviceOk: 'Dịch vụ OK',
endpointsDocLink: 'Xem tài liệu',
endpointsEmpty: 'Nhấp vào nút \'+\' để thêm điểm cuối',
endpointModalDesc: 'Sau khi định cấu hình, các tính năng do plugin cung cấp thông qua điểm cuối API có thể được sử dụng.',
endpointDeleteContent: 'Bạn có muốn xóa {{name}} không?',
endpointModalTitle: 'Điểm cuối thiết lập',
disabled: 'Tàn tật',
deprecation: {
reason: {
noMaintainer: 'không có người bảo trì',
ownershipTransferred: 'quyền sở hữu được chuyển nhượng',
businessAdjustments: 'điều chỉnh kinh doanh',
},
noReason: 'Plugin này đã bị loại bỏ và sẽ không còn được cập nhật.',
onlyReason: 'Plugin này đã bị ngừng hỗ trợ do {{deprecatedReason}} và sẽ không còn được cập nhật nữa.',
fullMessage: 'Plugin này đã bị ngừng sử dụng do {{deprecatedReason}}, và sẽ không còn được cập nhật nữa. Vui lòng sử dụng <CustomLink href=\'https://example.com/\'>{{-alternativePluginId}}</CustomLink> thay thế.',
},
},
debugInfo: {
title: 'Gỡ lỗi',
viewDocs: 'Xem tài liệu',
},
privilege: {
whoCanInstall: 'Ai có thể cài đặt và quản lý plugin?',
everyone: 'Ai ai',
whoCanDebug: 'Ai có thể gỡ lỗi plugin?',
title: 'Tùy chọn plugin',
admins: 'Quản trị viên',
noone: 'Không ai',
},
pluginInfoModal: {
release: 'Phát hành',
repository: 'Kho',
title: 'Thông tin plugin',
packageName: 'Gói',
},
action: {
delete: 'Xóa plugin',
deleteContentRight: 'plugin?',
usedInApps: 'Plugin này đang được sử dụng trong các ứng dụng {{num}}.',
pluginInfo: 'Thông tin plugin',
checkForUpdates: 'Kiểm tra thông tin cập nhật',
deleteContentLeft: 'Bạn có muốn xóa',
},
installModal: {
labels: {
package: 'Gói',
repository: 'Kho',
version: 'Phiên bản',
},
close: 'Đóng',
installFailedDesc: 'Plugin đã được cài đặt không thành công.',
cancel: 'Hủy',
install: 'Cài đặt',
dropPluginToInstall: 'Thả gói plugin vào đây để cài đặt',
readyToInstallPackage: 'Giới thiệu cài đặt plugin sau',
uploadingPackage: 'Tải lên {{packageName}}...',
installing: 'Cài đặt...',
installedSuccessfully: 'Cài đặt thành công',
readyToInstall: 'Giới thiệu cài đặt plugin sau',
next: 'Sau',
readyToInstallPackages: 'Chuẩn bị cài đặt các plugin {{num}} sau',
pluginLoadErrorDesc: 'Plugin này sẽ không được cài đặt',
fromTrustSource: 'Hãy đảm bảo rằng bạn chỉ cài đặt các plugin từ <trustSource>một nguồn đáng tin cậy</trustSource>.',
installedSuccessfullyDesc: 'Plugin đã được cài đặt thành công.',
uploadFailed: 'Tải lên không thành công',
installPlugin: 'Cài đặt Plugin',
installFailed: 'Cài đặt không thành công',
installComplete: 'Cài đặt hoàn tất',
back: 'Lưng',
pluginLoadError: 'Lỗi tải plugin',
installWarning: 'Plugin này không được phép cài đặt.',
},
installFromGitHub: {
installFailed: 'Cài đặt không thành công',
updatePlugin: 'Cập nhật plugin từ GitHub',
gitHubRepo: 'Kho lưu trữ GitHub',
selectPackage: 'Chọn gói',
selectVersionPlaceholder: 'Vui lòng chọn một phiên bản',
installedSuccessfully: 'Cài đặt thành công',
installPlugin: 'Cài đặt plugin từ GitHub',
uploadFailed: 'Tải lên không thành công',
selectPackagePlaceholder: 'Vui lòng chọn một gói',
selectVersion: 'Chọn phiên bản',
installNote: 'Hãy đảm bảo rằng bạn chỉ cài đặt các plugin từ một nguồn đáng tin cậy.',
},
upgrade: {
upgrade: 'Cài đặt',
upgrading: 'Cài đặt...',
successfulTitle: 'Cài đặt thành công',
title: 'Cài đặt Plugin',
usedInApps: 'Được sử dụng trong các ứng dụng {{num}}',
description: 'Giới thiệu cài đặt plugin sau',
close: 'Đóng',
},
error: {
noReleasesFound: 'Không tìm thấy bản phát hành. Vui lòng kiểm tra kho lưu trữ GitHub hoặc URL đầu vào.',
fetchReleasesError: 'Không thể truy xuất bản phát hành. Vui lòng thử lại sau.',
inValidGitHubUrl: 'URL GitHub không hợp lệ. Vui lòng nhập URL hợp lệ theo định dạng: https://github.com/owner/repo',
},
marketplace: {
sortOption: {
newlyReleased: 'Mới phát hành',
mostPopular: 'Phổ biến nhất',
firstReleased: 'Phát hành lần đầu tiên',
recentlyUpdated: 'Cập nhật gần đây',
},
empower: 'Hỗ trợ phát triển AI của bạn',
viewMore: 'Xem thêm',
difyMarketplace: 'Thị trường Dify',
discover: 'Khám phá',
pluginsResult: '{{num}} kết quả',
moreFrom: 'Các ứng dụng khác từ Marketplace',
sortBy: 'Thành phố đen',
noPluginFound: 'Không tìm thấy plugin nào',
and: 'và',
verifiedTip: 'Được xác nhận bởi Dify',
partnerTip: 'Được xác nhận bởi một đối tác của Dify',
},
task: {
installingWithError: 'Cài đặt {{installingLength}} plugins, {{successLength}} thành công, {{errorLength}} không thành công',
installing: 'Cài đặt {{installingLength}} plugins, 0 xong.',
installingWithSuccess: 'Cài đặt {{installingLength}} plugins, {{successLength}} thành công.',
installError: '{{errorLength}} plugin không cài đặt được, nhấp để xem',
installedError: '{{errorLength}} plugin không cài đặt được',
clearAll: 'Xóa tất cả',
},
from: 'Từ',
installAction: 'Cài đặt',
searchInMarketplace: 'Tìm kiếm trên Marketplace',
endpointsEnabled: '{{num}} bộ điểm cuối được kích hoạt',
install: '{{num}} lượt cài đặt',
findMoreInMarketplace: 'Tìm thêm trong Marketplace',
search: 'Tìm kiếm',
searchCategories: 'Danh mục tìm kiếm',
installPlugin: 'Cài đặt plugin',
searchPlugins: 'Tìm kiếm plugin',
fromMarketplace: 'Từ Marketplace',
allCategories: 'Tất cả các danh mục',
searchTools: 'Công cụ tìm kiếm...',
installFrom: 'CÀI ĐẶT TỪ',
metadata: {
title: 'Plugin',
},
difyVersionNotCompatible: 'Phiên bản Dify hiện tại không tương thích với plugin này, vui lòng nâng cấp lên phiên bản tối thiểu cần thiết: {{minimalDifyVersion}}',
requestAPlugin: 'Yêu cầu một plugin',
publishPlugins: 'Xuất bản plugin',
auth: {
custom: 'Tùy chỉnh',
saveOnly: 'Chỉ lưu lại',
authorizationName: 'Tên ủy quyền',
addOAuth: 'Thêm OAuth',
oauthClient: 'Khách hàng OAuth',
useOAuth: 'Sử dụng OAuth',
saveAndAuth: 'Lưu và Xác nhận',
authorizations: 'Chấp thuận',
setupOAuth: 'Thiết lập OAuth Client',
authRemoved: 'Chính quyền đã loại bỏ',
useOAuthAuth: 'Sử dụng ủy quyền OAuth',
authorization: 'Ủy quyền',
useApiAuth: 'Cấu hình ủy quyền khóa API',
default: 'Mặc định',
addApi: 'Thêm khóa API',
oauthClientSettings: 'Cài đặt khách hàng OAuth',
workspaceDefault: 'Mặc định không gian làm việc',
useApi: 'Sử dụng khóa API',
setDefault: 'Đặt làm mặc định',
useApiAuthDesc: 'Sau khi cấu hình thông tin xác thực, tất cả các thành viên trong không gian làm việc có thể sử dụng công cụ này khi điều phối các ứng dụng.',
clientInfo: 'Vì không tìm thấy bí mật khách hàng hệ thống cho nhà cung cấp công cụ này, cần thiết lập thủ công, đối với redirect_uri, vui lòng sử dụng',
unavailable: 'Không có sẵn',
customCredentialUnavailable: 'Thông tin đăng nhập tùy chỉnh hiện không khả dụng',
credentialUnavailable: 'Thông tin đăng nhập hiện không khả dụng. Vui lòng liên hệ với quản trị viên.',
credentialUnavailableInButton: 'Thông tin xác thực không khả dụng',
emptyAuth: 'Vui lòng định cấu hình xác thực',
connectedWorkspace: 'Không gian làm việc được kết nối',
},
deprecated: 'Đã bị ngưng sử dụng',
autoUpdate: {
strategy: {
disabled: {
name: 'Khuyết tật',
description: 'Các plugin sẽ không tự động cập nhật',
},
fixOnly: {
name: 'Chỉ sửa chữa',
selectedDescription: 'Tự động cập nhật chỉ cho các phiên bản bản vá',
description: 'Tự động cập nhật chỉ cho các phiên bản vá (ví dụ: 1.0.1 → 1.0.2). Thay đổi phiên bản nhỏ sẽ không kích hoạt cập nhật.',
},
latest: {
name: 'Mới nhất',
description: 'Luôn cập nhật lên phiên bản mới nhất',
selectedDescription: 'Luôn cập nhật lên phiên bản mới nhất',
},
},
upgradeMode: {
partial: 'Chỉ được chọn',
exclude: 'Loại trừ đã chọn',
all: 'Cập nhật tất cả',
},
upgradeModePlaceholder: {
exclude: 'Các plugin được chọn sẽ không tự động cập nhật',
partial: 'Chỉ những plugin được chọn mới tự động cập nhật. Hiện tại không có plugin nào được chọn, vì vậy sẽ không có plugin nào tự động cập nhật.',
},
operation: {
clearAll: 'Xóa tất cả',
select: 'Chọn plugin',
},
pluginDowngradeWarning: {
exclude: 'Loại trừ khỏi cập nhật tự động',
downgrade: 'Giảm cấp vẫn vậy',
description: 'Chức năng tự động cập nhật hiện đang được bật cho plugin này. Việc hạ cấp phiên bản có thể khiến các thay đổi của bạn bị ghi đè trong lần cập nhật tự động tiếp theo.',
title: 'Hạ cấp Plugin',
},
noPluginPlaceholder: {
noInstalled: 'Không có plugin nào được cài đặt',
noFound: 'Không tìm thấy plugin nào',
},
updateTimeTitle: 'Thời gian cập nhật',
updateTime: 'Thời gian cập nhật',
automaticUpdates: 'Cập nhật tự động',
nextUpdateTime: 'Cập nhật tự động tiếp theo: {{time}}',
specifyPluginsToUpdate: 'Chỉ định các plugin để cập nhật',
excludeUpdate: 'Các plugin {{num}} sau đây sẽ không tự động cập nhật',
updateSettings: 'Cập nhật cài đặt',
partialUPdate: 'Chỉ có {{num}} plugin sau đây sẽ tự động cập nhật',
changeTimezone: 'Để thay đổi múi giờ, hãy vào <setTimezone>Cài đặt</setTimezone>',
},
readmeInfo: {
title: 'ĐỌC_TÔI',
needHelpCheckReadme: 'Cần giúp đỡ? Xem tệp README.',
noReadmeAvailable: 'Không có README',
failedToFetch: 'Không thể lấy README',
},
}
export default translation

View File

@@ -0,0 +1,4 @@
const translation = {
}
export default translation

View File

@@ -0,0 +1,31 @@
const translation = {
input: 'NHẬP',
result: 'KẾT QUẢ',
detail: 'CHI TIẾT',
tracing: 'THEO DÕI',
resultPanel: {
status: 'TRẠNG THÁI',
time: 'THỜI GIAN',
tokens: 'TỔNG SỐ TOKEN',
},
meta: {
title: 'DỮ LIỆU META',
status: 'Trạng thái',
version: 'Phiên bản',
executor: 'Người thực thi',
startTime: 'Thời gian bắt đầu',
time: 'Thời gian đã trôi qua',
tokens: 'Tổng số token',
steps: 'Các bước chạy',
},
resultEmpty: {
title: 'Chạy này chỉ xuất ra định dạng JSON,',
tipLeft: 'vui lòng truy cập ',
link: 'bảng chi tiết',
tipRight: ' xem nó.',
},
circularInvocationTip: 'Có lệnh gọi vòng tròn các công cụ/nút trong quy trình làm việc hiện tại.',
actionLogs: 'Nhật ký hành động',
}
export default translation

View File

@@ -0,0 +1,82 @@
const translation = {
common: {
welcome: '',
appUnavailable: 'Ứng dụng không khả dụng',
appUnknownError: 'Ứng dụng gặp lỗi không xác định',
},
chat: {
newChat: 'Cuộc trò chuyện mới',
pinnedTitle: 'Đã ghim',
unpinnedTitle: 'Trò chuyện',
newChatDefaultName: 'Cuộc trò chuyện mới',
resetChat: 'Đặt lại cuộc trò chuyện',
poweredBy: 'Được cung cấp bởi',
prompt: 'Lời nhắc',
privatePromptConfigTitle: 'Cài đặt cuộc trò chuyện',
publicPromptConfigTitle: 'Lời nhắc ban đầu',
configStatusDes: 'Trước khi bắt đầu, bạn có thể chỉnh sửa cài đặt cuộc trò chuyện',
configDisabled: 'Cài đặt của phiên trước đã được sử dụng cho phiên này.',
startChat: 'Bắt đầu trò chuyện',
privacyPolicyLeft: 'Vui lòng đọc ',
privacyPolicyMiddle: 'chính sách bảo mật',
privacyPolicyRight: ' được cung cấp bởi nhà phát triển ứng dụng.',
deleteConversation: {
title: 'Xóa cuộc trò chuyện',
content: 'Bạn có chắc muốn xóa cuộc trò chuyện này không?',
},
tryToSolve: 'Thử giải quyết',
temporarySystemIssue: 'Xin lỗi, hệ thống đang gặp sự cố tạm thời.',
expand: 'Mở rộng',
collapse: 'Thu gọn',
chatFormTip: 'Cài đặt trò chuyện không thể được thay đổi sau khi cuộc trò chuyện đã bắt đầu.',
newChatTip: 'Đã ở trong một cuộc trò chuyện mới',
viewChatSettings: 'Xem cài đặt trò chuyện',
chatSettingsTitle: 'Cài đặt trò chuyện mới',
},
generation: {
tabs: {
create: 'Tạo đơn lẻ',
batch: 'Tạo hàng loạt',
saved: 'Đã lưu',
},
savedNoData: {
title: 'Bạn chưa lưu kết quả nào!',
description: 'Bắt đầu tạo nội dung và tìm kết quả đã lưu của bạn ở đây.',
startCreateContent: 'Bắt đầu tạo nội dung',
},
title: 'Hoàn thiện AI',
queryTitle: 'Nội dung truy vấn',
completionResult: 'Kết quả hoàn thiện',
queryPlaceholder: 'Nhập nội dung truy vấn của bạn...',
run: 'Thực thi',
copy: 'Sao chép',
resultTitle: 'Kết quả AI',
noData: 'AI sẽ hiển thị kết quả ở đây.',
csvUploadTitle: 'Kéo và thả tệp CSV của bạn vào đây, hoặc ',
browse: 'chọn tệp',
csvStructureTitle: 'Tệp CSV phải tuân thủ cấu trúc sau:',
downloadTemplate: 'Tải xuống mẫu tại đây',
field: 'Trường',
batchFailed: {
info: '{{num}} lần thực thi thất bại',
retry: 'Thử lại',
outputPlaceholder: 'Không có nội dung đầu ra',
},
errorMsg: {
empty: 'Vui lòng nhập nội dung vào tệp đã tải lên.',
fileStructNotMatch: 'Cấu trúc tệp CSV tải lên không khớp.',
emptyLine: 'Dòng {{rowIndex}} trống',
invalidLine: 'Dòng {{rowIndex}}: {{varName}} không thể để trống',
moreThanMaxLengthLine: 'Dòng {{rowIndex}}: {{varName}} không thể chứa quá {{maxLength}} ký tự',
atLeastOne: 'Vui lòng nhập ít nhất một dòng vào tệp đã tải lên.',
},
execution: 'Chạy',
executions: '{{num}} lần chạy',
stopRun: 'Dừng thực thi',
},
login: {
backToHome: 'Trở về Trang Chủ',
},
}
export default translation

View File

@@ -0,0 +1,44 @@
const translation = {
daysInWeek: {
Mon: 'Môn',
Sat: 'Ngồi',
Wed: 'Thứ Tư',
Sun: 'Mặt trời',
Tue: 'Thứ Ba',
Fri: 'Thứ Sáu',
Thu: 'Thu',
},
months: {
April: 'Tháng Tư',
June: 'Tháng Sáu',
September: 'Tháng Chín',
March: 'Tháng Ba',
February: 'Tháng Hai',
August: 'Tháng Tám',
May: 'Tháng Năm',
October: 'Tháng Mười',
December: 'Tháng Mười Hai',
January: 'Tháng Một',
July: 'Tháng Bảy',
November: 'Tháng Mười Một',
},
operation: {
ok: 'Được rồi',
pickDate: 'Chọn Ngày',
now: 'Bây giờ',
cancel: 'Hủy bỏ',
},
title: {
pickTime: 'Chọn Thời Gian',
},
defaultPlaceholder: 'Chọn một thời gian...',
dateFormats: {
input: 'YYYY-MM-DD',
displayWithTime: 'MMMM D, YYYY hh:mm A',
display: 'MMMM D, YYYY',
outputWithTime: 'YYYY-MM-DDTHH:mm:ss.SSSZ',
output: 'YYYY-MM-DD',
},
}
export default translation

View File

@@ -0,0 +1,257 @@
const translation = {
title: 'Công cụ',
createCustomTool: 'Tạo công cụ tùy chỉnh',
type: {
builtIn: 'Tích hợp sẵn',
custom: 'Tùy chỉnh',
workflow: 'Quy trình làm việc',
},
contribute: {
line1: 'Tôi quan tâm đến việc ',
line2: 'đóng góp công cụ cho Dify.',
viewGuide: 'Xem hướng dẫn',
},
author: 'Tác giả',
auth: {
authorized: 'Đã xác thực',
setup: 'Thiết lập xác thực để sử dụng',
setupModalTitle: 'Thiết lập xác thực',
setupModalTitleDescription: 'Sau khi cấu hình thông tin đăng nhập, tất cả thành viên trong không gian làm việc có thể sử dụng công cụ này khi triển khai ứng dụng.',
},
includeToolNum: 'Bao gồm {{num}} công cụ',
createTool: {
title: 'Tạo công cụ tùy chỉnh',
editAction: 'Cấu hình',
editTitle: 'Chỉnh sửa công cụ tùy chỉnh',
name: 'Tên',
toolNamePlaceHolder: 'Nhập tên công cụ',
schema: 'Schema',
schemaPlaceHolder: 'Nhập schema OpenAPI của bạn vào đây',
viewSchemaSpec: 'Xem chi tiết OpenAPI-Swagger',
importFromUrl: 'Nhập từ URL',
importFromUrlPlaceHolder: 'https://...',
urlError: 'Vui lòng nhập URL hợp lệ',
examples: 'Ví dụ',
exampleOptions: {
json: 'Thời tiết (JSON)',
yaml: 'Cửa hàng thú cưng (YAML)',
blankTemplate: 'Mẫu trống',
},
availableTools: {
title: 'Công cụ hiện có',
name: 'Tên',
description: 'Mô tả',
method: 'Phương thức',
path: 'Đường dẫn',
action: 'Hành động',
test: 'Kiểm tra',
},
authMethod: {
title: 'Phương thức xác thực',
type: 'Loại xác thực',
keyTooltip: 'Khóa tiêu đề HTTP, bạn có thể để trống nếu không biết hoặc đặt một giá trị tùy chỉnh',
types: {
none: 'Không',
apiKeyPlaceholder: 'Tên tiêu đề HTTP cho Khóa API',
apiValuePlaceholder: 'Nhập Khóa API',
api_key_query: 'Tham số truy vấn',
api_key_header: 'Tiêu đề',
queryParamPlaceholder: 'Tên tham số truy vấn cho khóa API',
},
key: 'Khóa',
value: 'Giá trị',
queryParam: 'Tham số truy vấn',
queryParamTooltip: 'Tên tham số truy vấn của API key để truyền vào, ví dụ: "key" trong "https://example.com/test?key=API_KEY".',
},
authHeaderPrefix: {
title: 'Loại xác thực',
types: {
basic: 'Cơ bản',
bearer: 'Bearer',
custom: 'Tùy chỉnh',
},
},
privacyPolicy: 'Chính sách bảo mật',
privacyPolicyPlaceholder: 'Vui lòng nhập chính sách bảo mật',
customDisclaimer: 'Tuyên bố từ chối trách nhiệm tùy chỉnh',
customDisclaimerPlaceholder: 'Vui lòng nhập tuyên bố từ chối trách nhiệm tùy chỉnh',
deleteToolConfirmTitle: 'Xóa công cụ này?',
deleteToolConfirmContent: 'Xóa công cụ là không thể hoàn tác. Người dùng sẽ không thể truy cập lại công cụ của bạn.',
toolInput: {
label: 'Tags',
methodParameter: 'Thông số',
name: 'Tên',
descriptionPlaceholder: 'Mô tả ý nghĩa của tham số',
methodSetting: 'Khung cảnh',
title: 'Công cụ nhập liệu',
methodSettingTip: 'Người dùng điền vào cấu hình công cụ',
required: 'Bắt buộc',
method: 'Phương pháp',
methodParameterTip: 'LLM lấp đầy trong quá trình suy luận',
description: 'Sự miêu tả',
labelPlaceholder: 'Chọn thẻ (tùy chọn)',
},
nameForToolCallTip: 'Chỉ hỗ trợ số, chữ cái và dấu gạch dưới.',
nameForToolCall: 'Công cụ gọi tên',
nameForToolCallPlaceHolder: 'Được sử dụng để nhận dạng máy, chẳng hạn như getCurrentWeather, list_pets',
descriptionPlaceholder: 'Mô tả ngắn gọn về mục đích của công cụ, ví dụ: lấy nhiệt độ cho một vị trí cụ thể.',
description: 'Sự miêu tả',
confirmTitle: 'Xác nhận để lưu ?',
confirmTip: 'Các ứng dụng sử dụng công cụ này sẽ bị ảnh hưởng',
},
test: {
title: 'Kiểm tra',
parametersValue: 'Tham số & Giá trị',
parameters: 'Tham số',
value: 'Giá trị',
testResult: 'Kết quả kiểm tra',
testResultPlaceholder: 'Kết quả kiểm tra sẽ hiển thị ở đây',
},
thought: {
using: 'Đang sử dụng',
used: 'Đã sử dụng',
requestTitle: 'Yêu cầu đến',
responseTitle: 'Phản hồi từ',
},
setBuiltInTools: {
info: 'Thông tin',
setting: 'Cài đặt',
toolDescription: 'Mô tả công cụ',
parameters: 'Tham số',
string: 'chuỗi',
number: 'số',
required: 'Bắt buộc',
infoAndSetting: 'Thông tin & Cài đặt',
file: 'tệp',
},
noCustomTool: {
title: 'Chưa có công cụ tùy chỉnh!',
content: 'Thêm và quản lý các công cụ tùy chỉnh của bạn ở đây để xây dựng ứng dụng AI.',
createTool: 'Tạo công cụ',
},
noSearchRes: {
title: 'Xin lỗi, không có kết quả!',
content: 'Chúng tôi không tìm thấy công cụ nào phù hợp với tìm kiếm của bạn.',
reset: 'Đặt lại tìm kiếm',
},
builtInPromptTitle: 'Lời nhắc',
toolRemoved: 'Công cụ đã bị xóa',
notAuthorized: 'Công cụ chưa được xác thực',
howToGet: 'Cách nhận',
addToolModal: {
category: 'loại',
type: 'kiểu',
added: 'Thêm',
custom: {
title: 'Không có công cụ tùy chỉnh nào',
tip: 'Tạo một công cụ tùy chỉnh',
},
workflow: {
title: 'Không có công cụ quy trình nào',
tip: 'Xuất bản các quy trình dưới dạng công cụ trong Studio',
},
mcp: {
title: 'Không có công cụ MCP nào',
tip: 'Thêm máy chủ MCP',
},
agent: {
title: 'Không có chiến lược đại lý nào',
},
},
toolNameUsageTip: 'Tên cuộc gọi công cụ để lý luận và nhắc nhở tổng đài viên',
customToolTip: 'Tìm hiểu thêm về các công cụ tùy chỉnh Dify',
openInStudio: 'Mở trong Studio',
noTools: 'Không tìm thấy công cụ',
copyToolName: 'Sao chép tên',
mcp: {
create: {
cardTitle: 'Thêm Máy chủ MCP (HTTP)',
cardLink: 'Tìm hiểu thêm về tích hợp máy chủ MCP',
},
noConfigured: 'Máy chủ Chưa được Cấu hình',
updateTime: 'Cập nhật',
toolsCount: '{count} công cụ',
noTools: 'Không có công cụ nào',
modal: {
title: 'Thêm Máy chủ MCP (HTTP)',
editTitle: 'Sửa Máy chủ MCP (HTTP)',
name: 'Tên & Biểu tượng',
namePlaceholder: 'Đặt tên máy chủ MCP',
serverUrl: 'URL Máy chủ',
serverUrlPlaceholder: 'URL đến điểm cuối máy chủ',
serverUrlWarning: 'Cập nhật địa chỉ máy chủ có thể làm gián đoạn ứng dụng phụ thuộc vào máy chủ này',
serverIdentifier: 'Định danh Máy chủ',
serverIdentifierTip: 'Định danh duy nhất cho máy chủ MCP trong không gian làm việc. Chỉ chữ thường, số, gạch dưới và gạch ngang. Tối đa 24 ký tự.',
serverIdentifierPlaceholder: 'Định danh duy nhất, VD: my-mcp-server',
serverIdentifierWarning: 'Máy chủ sẽ không được nhận diện bởi ứng dụng hiện có sau khi thay đổi ID',
cancel: 'Hủy',
save: 'Lưu',
confirm: 'Thêm & Ủy quyền',
sseReadTimeout: 'Thời gian chờ Đọc SSE',
timeout: 'Thời gian chờ',
headerKeyPlaceholder: 'ví dụ, Ủy quyền',
timeoutPlaceholder: 'ba mươi',
addHeader: 'Thêm tiêu đề',
headers: 'Tiêu đề',
headerValuePlaceholder: 'ví dụ: mã thông báo Bearer123',
headerKey: 'Tên tiêu đề',
noHeaders: 'Không có tiêu đề tùy chỉnh nào được cấu hình',
headerValue: 'Giá trị tiêu đề',
maskedHeadersTip: 'Các giá trị tiêu đề được mã hóa để đảm bảo an ninh. Các thay đổi sẽ cập nhật các giá trị thực tế.',
headersTip: 'Các tiêu đề HTTP bổ sung để gửi cùng với các yêu cầu máy chủ MCP',
authentication: 'Xác thực',
clientSecret: 'Bí mật của khách hàng',
clientID: 'ID khách hàng',
configurations: 'Cấu hình',
useDynamicClientRegistration: 'Sử dụng Đăng ký Khách hàng Động',
clientSecretPlaceholder: 'Bí mật của khách hàng',
redirectUrlWarning: 'Vui lòng cấu hình URL chuyển hướng OAuth của bạn thành:',
},
delete: 'Xóa Máy chủ MCP',
deleteConfirmTitle: 'Xóa {mcp}?',
operation: {
edit: 'Sửa',
remove: 'Xóa',
},
authorize: 'Ủy quyền',
authorizing: 'Đang ủy quyền...',
authorizingRequired: 'Cần ủy quyền',
authorizeTip: 'Sau khi ủy quyền, công cụ sẽ hiển thị tại đây.',
update: 'Cập nhật',
updating: 'Đang cập nhật...',
gettingTools: 'Đang lấy công cụ...',
updateTools: 'Đang cập nhật công cụ...',
toolsEmpty: 'Công cụ chưa tải',
getTools: 'Lấy công cụ',
toolUpdateConfirmTitle: 'Cập nhật Danh sách Công cụ',
toolUpdateConfirmContent: 'Cập nhật danh sách công cụ có thể ảnh hưởng ứng dụng hiện có. Tiếp tục?',
toolsNum: 'Bao gồm {count} công cụ',
onlyTool: 'Bao gồm 1 công cụ',
identifier: 'Định danh Máy chủ (Nhấn để Sao chép)',
server: {
title: 'Máy chủ MCP',
url: 'URL Máy chủ',
reGen: 'Tạo lại URL máy chủ?',
addDescription: 'Thêm mô tả',
edit: 'Sửa mô tả',
modal: {
addTitle: 'Thêm mô tả để kích hoạt máy chủ MCP',
editTitle: 'Sửa mô tả',
description: 'Mô tả',
descriptionPlaceholder: 'Giải thích chức năng công cụ và cách LLM sử dụng',
parameters: 'Tham số',
parametersTip: 'Thêm mô tả cho từng tham số để giúp LLM hiểu mục đích và ràng buộc.',
parametersPlaceholder: 'Mục đích và ràng buộc của tham số',
confirm: 'Kích hoạt Máy chủ MCP',
},
publishTip: 'Ứng dụng chưa xuất bản. Vui lòng xuất bản ứng dụng trước.',
},
toolItem: {
parameters: 'Các thông số',
noDescription: 'Không có mô tả',
},
},
allTools: 'Tất cả các công cụ',
}
export default translation

File diff suppressed because it is too large Load Diff