diff --git a/.i18nrc.js b/.i18nrc.js
index 792fa610a42e..0904d3bc572b 100644
--- a/.i18nrc.js
+++ b/.i18nrc.js
@@ -18,6 +18,7 @@ module.exports = defineConfig({
'it-IT',
'nl-NL',
'pl-PL',
+ 'vi-VN',
],
temperature: 0,
modelName: 'gpt-3.5-turbo-1106',
diff --git a/locales/de-DE/tool.json b/locales/de-DE/tool.json
index cf0cdde90d0a..eaadb6d25850 100644
--- a/locales/de-DE/tool.json
+++ b/locales/de-DE/tool.json
@@ -1,6 +1,7 @@
{
"dalle": {
"autoGenerate": "Automatisch generieren",
+ "downloading": "Die von DallE3 generierten Bildlinks sind nur 1 Stunde lang gültig. Das Bild wird lokal zwischengespeichert...",
"generate": "Generieren",
"generating": "Generiert",
"images": "Bilder:"
diff --git a/locales/en-US/tool.json b/locales/en-US/tool.json
index 5b26c53c7a64..50d725ca0eb4 100644
--- a/locales/en-US/tool.json
+++ b/locales/en-US/tool.json
@@ -1,6 +1,7 @@
{
"dalle": {
"autoGenerate": "Auto Generate",
+ "downloading": "The image links generated by DALL·E3 are only valid for 1 hour, caching the images locally...",
"generate": "Generate",
"generating": "Generating...",
"images": "Images:"
diff --git a/locales/es-ES/tool.json b/locales/es-ES/tool.json
index ce625473cf3c..911f5fb59ae2 100644
--- a/locales/es-ES/tool.json
+++ b/locales/es-ES/tool.json
@@ -1,6 +1,7 @@
{
"dalle": {
"autoGenerate": "Auto-generar",
+ "downloading": "El enlace de la imagen generada por DALL·E 3 solo es válido durante 1 hora, descargando la imagen al dispositivo local...",
"generate": "Generar",
"generating": "Generando...",
"images": "Imágenes:"
diff --git a/locales/fr-FR/tool.json b/locales/fr-FR/tool.json
index 2f726303ff90..42aa797eabf8 100644
--- a/locales/fr-FR/tool.json
+++ b/locales/fr-FR/tool.json
@@ -1,6 +1,7 @@
{
"dalle": {
"autoGenerate": "Auto-générer",
+ "downloading": "Les liens d'image générés par DallE3 ne sont valides que pendant 1 heure. Le téléchargement de l'image est en cours...",
"generate": "Générer",
"generating": "En cours de génération...",
"images": "Images :"
diff --git a/locales/it-IT/tool.json b/locales/it-IT/tool.json
index 8ee17fd49fff..cddcbe53af28 100644
--- a/locales/it-IT/tool.json
+++ b/locales/it-IT/tool.json
@@ -1,6 +1,7 @@
{
"dalle": {
"autoGenerate": "Auto-generato",
+ "downloading": "Il link dell'immagine generata da DALL·E3 è valido solo per 1 ora, sta scaricando l'immagine in locale...",
"generate": "Genera",
"generating": "Generazione in corso...",
"images": "Immagini:"
diff --git a/locales/ja-JP/tool.json b/locales/ja-JP/tool.json
index 5005ccc706ce..e75367969d00 100644
--- a/locales/ja-JP/tool.json
+++ b/locales/ja-JP/tool.json
@@ -1,6 +1,7 @@
{
"dalle": {
"autoGenerate": "自動生成",
+ "downloading": "DallE3 で生成された画像リンクは有効期間が1時間しかありません。画像をローカルにキャッシュしています...",
"generate": "生成する",
"generating": "生成中...",
"images": "画像:"
diff --git a/locales/ko-KR/tool.json b/locales/ko-KR/tool.json
index 38eca1098a5b..682e88328b82 100644
--- a/locales/ko-KR/tool.json
+++ b/locales/ko-KR/tool.json
@@ -1,6 +1,7 @@
{
"dalle": {
"autoGenerate": "자동 생성",
+ "downloading": "DallE3로 생성된 이미지 링크는 1시간 동안 유효하며, 로컬에 이미지를 캐시하는 중입니다...",
"generate": "생성",
"generating": "생성 중...",
"images": "이미지:"
diff --git a/locales/nl-NL/tool.json b/locales/nl-NL/tool.json
index 93dbfe47c759..8a458aaad29e 100644
--- a/locales/nl-NL/tool.json
+++ b/locales/nl-NL/tool.json
@@ -1,6 +1,7 @@
{
"dalle": {
"autoGenerate": "Automatisch genereren",
+ "downloading": "De link naar de afbeelding gegenereerd door DallE3 is slechts 1 uur geldig. De afbeelding wordt lokaal in de cache opgeslagen...",
"generate": "Genereren",
"generating": "Bezig met genereren...",
"images": "Afbeeldingen:"
diff --git a/locales/pl-PL/tool.json b/locales/pl-PL/tool.json
index 9ec9c199bf2a..ced030efea23 100644
--- a/locales/pl-PL/tool.json
+++ b/locales/pl-PL/tool.json
@@ -1,6 +1,7 @@
{
"dalle": {
"autoGenerate": "Automatyczne generowanie",
+ "downloading": "Linki do obrazów wygenerowanych przez DallE3 są ważne tylko przez 1 godzinę. Trwa pobieranie obrazów do lokalnego bufora...",
"generate": "Generuj",
"generating": "Generowanie...",
"images": "Obrazy:"
diff --git a/locales/pt-BR/tool.json b/locales/pt-BR/tool.json
index 58d972f62249..ab839f22144e 100644
--- a/locales/pt-BR/tool.json
+++ b/locales/pt-BR/tool.json
@@ -1,6 +1,7 @@
{
"dalle": {
"autoGenerate": "Auto gerar",
+ "downloading": "O link da imagem gerada pelo DALL·E3 é válido apenas por 1 hora, está baixando a imagem para o armazenamento local...",
"generate": "Gerar",
"generating": "Gerando...",
"images": "Imagens:"
diff --git a/locales/ru-RU/tool.json b/locales/ru-RU/tool.json
index 01b791d90ce9..171136250c3d 100644
--- a/locales/ru-RU/tool.json
+++ b/locales/ru-RU/tool.json
@@ -1,6 +1,7 @@
{
"dalle": {
"autoGenerate": "Автогенерация",
+ "downloading": "Ссылка на изображение, созданное DALL·E3, действительна только в течение 1 часа. Идет кэширование изображения локально...",
"generate": "Создать",
"generating": "Создание...",
"images": "Изображения:"
diff --git a/locales/tr-TR/tool.json b/locales/tr-TR/tool.json
index df77d2b42f02..a22966f74fd7 100644
--- a/locales/tr-TR/tool.json
+++ b/locales/tr-TR/tool.json
@@ -1,6 +1,7 @@
{
"dalle": {
"autoGenerate": "Otomatik Oluştur",
+ "downloading": "DallE3 tarafından oluşturulan resim bağlantıları sadece 1 saat geçerlidir, resim yerel olarak önbelleğe alınıyor...",
"generate": "Oluştur",
"generating": "Oluşturuluyor...",
"images": "Görseller:"
diff --git a/locales/vi-VN/chat.json b/locales/vi-VN/chat.json
new file mode 100644
index 000000000000..e687f9a01964
--- /dev/null
+++ b/locales/vi-VN/chat.json
@@ -0,0 +1,77 @@
+{
+ "agentDefaultMessage": "Xin chào, tôi là **{{name}}**, bạn có thể bắt đầu trò chuyện với tôi ngay lập tức, hoặc đến [Cài đặt trợ lý](/chat/settings#session={{id}}) để hoàn thiện thông tin của tôi.",
+ "agentDefaultMessageWithSystemRole": "Xin chào, tôi là **{{name}}**, {{systemRole}}. Hãy bắt đầu trò chuyện ngay!",
+ "backToBottom": "Quay về dưới cùng",
+ "clearCurrentMessages": "Xóa tin nhắn hiện tại",
+ "confirmClearCurrentMessages": "Bạn sắp xóa tin nhắn hiện tại. Hành động này không thể hoàn tác, vui lòng xác nhận.",
+ "confirmRemoveSessionItemAlert": "Bạn sắp xóa trợ lý này. Hành động này không thể hoàn tác, vui lòng xác nhận.",
+ "defaultAgent": "Trợ lý mặc định",
+ "defaultSession": "Trợ lý mặc định",
+ "historyRange": "Phạm vi lịch sử",
+ "inbox": {
+ "defaultMessage": "Xin chào, tôi là trợ lý thông minh của bạn, bạn có thể hỏi tôi bất kỳ câu hỏi nào và tôi sẽ cố gắng trả lời. Nếu bạn cần một trợ lý chuyên nghiệp hoặc tùy chỉnh hơn, hãy nhấn `+` để tạo trợ lý tùy chỉnh.",
+ "desc": "Kích hoạt cụm não, khơi dậy tia lửa tư duy. Trợ lý thông minh của bạn, ở đây để trò chuyện với bạn về mọi thứ.",
+ "title": "Chuyện phiếm"
+ },
+ "newAgent": "Tạo trợ lý mới",
+ "noDescription": "Chưa có mô tả",
+ "pin": "Ghim",
+ "pinOff": "Bỏ ghim",
+ "regenerate": "Tạo lại",
+ "roleAndArchive": "Vai trò và lưu trữ",
+ "searchAgentPlaceholder": "Tìm kiếm trợ lý và cuộc trò chuyện...",
+ "send": "Gửi",
+ "sendPlaceholder": "Nhập nội dung trò chuyện...",
+ "sessionList": "Danh sách trợ lý",
+ "shareModal": {
+ "download": "Tải xuống ảnh chụp màn hình",
+ "imageType": "Định dạng ảnh",
+ "screenshot": "Ảnh chụp màn hình",
+ "settings": "Cài đặt xuất",
+ "shareToShareGPT": "Tạo liên kết chia sẻ ShareGPT",
+ "withBackground": "Bao gồm hình nền",
+ "withFooter": "Bao gồm chân trang",
+ "withPluginInfo": "Bao gồm thông tin plugin",
+ "withSystemRole": "Bao gồm thiết lập vai trò trợ lý"
+ },
+ "stop": "Dừng",
+ "stt": {
+ "action": "Nhập bằng giọng nói",
+ "loading": "Đang nhận dạng...",
+ "prettifying": "Đang tinh chỉnh..."
+ },
+ "temp": "Tạm thời",
+ "tokenDetail": "Thiết lập vai trò: {{systemRoleToken}} · Tin nhắn cuộc trò chuyện: {{chatsToken}} · Thiết lập công cụ: {{toolsToken}}",
+ "tokenTag": {
+ "overload": "Vượt quá giới hạn",
+ "remained": "Còn lại",
+ "used": "Đã sử dụng"
+ },
+ "topic": {
+ "confirmRemoveAll": "Bạn sắp xóa tất cả chủ đề. Hành động này không thể hoàn tác, vui lòng xác nhận.",
+ "confirmRemoveTopic": "Bạn sắp xóa chủ đề này. Hành động này không thể hoàn tác, vui lòng xác nhận.",
+ "confirmRemoveUnstarred": "Bạn sắp xóa các chủ đề chưa được đánh dấu. Hành động này không thể hoàn tác, vui lòng xác nhận.",
+ "defaultTitle": "Chủ đề mặc định",
+ "openNewTopic": "Mở chủ đề mới",
+ "removeAll": "Xóa tất cả chủ đề",
+ "removeUnstarred": "Xóa chủ đề chưa được đánh dấu",
+ "saveCurrentMessages": "Lưu cuộc trò chuyện hiện tại thành chủ đề",
+ "searchPlaceholder": "Tìm kiếm chủ đề...",
+ "title": "Danh sách chủ đề"
+ },
+ "translate": {
+ "action": "Dịch",
+ "clear": "Xóa dịch"
+ },
+ "tts": {
+ "action": "Đọc bằng giọng nói",
+ "clear": "Xóa giọng nói"
+ },
+ "updateAgent": "Cập nhật thông tin trợ lý",
+ "upload": {
+ "actionTooltip": "Tải lên hình ảnh",
+ "dragDesc": "Kéo và thả tệp vào đây, hỗ trợ tải lên nhiều hình ảnh. Giữ phím Shift để gửi hình ảnh trực tiếp",
+ "dragTitle": "Tải lên hình ảnh"
+ },
+ "warp": "Xuống dòng"
+}
diff --git a/locales/vi-VN/common.json b/locales/vi-VN/common.json
new file mode 100644
index 000000000000..87c89d4ff28b
--- /dev/null
+++ b/locales/vi-VN/common.json
@@ -0,0 +1,113 @@
+{
+ "about": "Giới thiệu",
+ "advanceSettings": "Cài đặt nâng cao",
+ "agentMaxToken": "Số ký tự tối đa của phiên",
+ "agentModel": "Mô hình",
+ "agentProfile": "Hồ sơ trợ lý",
+ "appInitializing": "LobeChat đang khởi động, vui lòng chờ...",
+ "archive": "Lưu trữ",
+ "autoGenerate": "Tự động tạo",
+ "autoGenerateTooltip": "Tự động hoàn thành mô tả trợ lý dựa trên từ gợi ý",
+ "cancel": "Hủy",
+ "changelog": "Nhật ký cập nhật",
+ "close": "Đóng",
+ "confirmRemoveSessionItemAlert": "Bạn sắp xóa trợ lý này. Sau khi xóa, bạn sẽ không thể khôi phục. Vui lòng xác nhận hành động của bạn",
+ "copy": "Sao chép",
+ "copySuccess": "Sao chép thành công",
+ "defaultAgent": "Trợ lý mặc định",
+ "defaultSession": "Phiên mặc định",
+ "delete": "Xóa",
+ "edit": "Chỉnh sửa",
+ "export": "Xuất cấu hình",
+ "exportType": {
+ "agent": "Xuất cấu hình trợ lý",
+ "agentWithMessage": "Xuất trợ lý và tin nhắn",
+ "all": "Xuất cài đặt toàn cầu và tất cả dữ liệu trợ lý",
+ "allAgent": "Xuất tất cả cấu hình trợ lý",
+ "allAgentWithMessage": "Xuất tất cả trợ lý và tin nhắn",
+ "globalSetting": "Xuất cài đặt toàn cầu"
+ },
+ "feedback": "Phản hồi và đề xuất",
+ "historyRange": "Phạm vi lịch sử",
+ "import": "Nhập cấu hình",
+ "importModal": {
+ "finish": {
+ "onlySettings": "Nhập cài đặt hệ thống thành công",
+ "start": "Bắt đầu sử dụng",
+ "subTitle": "Dữ liệu đã được nhập thành công, mất {{duration}} giây. Chi tiết nhập như sau:",
+ "title": "Hoàn tất nhập dữ liệu"
+ },
+ "loading": "Đang nhập dữ liệu, vui lòng chờ...",
+ "result": {
+ "added": "Nhập thành công",
+ "errors": "Lỗi nhập",
+ "messages": "Tin nhắn",
+ "sessions": "Trợ lý",
+ "skips": "Bỏ qua trùng lặp",
+ "topics": "Chủ đề",
+ "type": "Loại dữ liệu"
+ },
+ "title": "Nhập dữ liệu"
+ },
+ "lang": {
+ "bn": "Tiếng Bengal",
+ "cs-CZ": "Tiếng Séc",
+ "da-DK": "Tiếng Đan Mạch",
+ "de-DE": "Tiếng Đức",
+ "el-GR": "Tiếng Hy Lạp",
+ "en": "Tiếng Anh",
+ "en-US": "Tiếng Anh (Mỹ)",
+ "es-ES": "Tiếng Tây Ban Nha",
+ "fi-FI": "Tiếng Phần Lan",
+ "fr-FR": "Tiếng Pháp",
+ "hi-IN": "Tiếng Hin-ddi",
+ "hu-HU": "Tiếng Hungary",
+ "id-ID": "Tiếng Indonesia",
+ "it-IT": "Tiếng Ý",
+ "ja-JP": "Tiếng Nhật",
+ "ko-KR": "Tiếng Hàn",
+ "nl-NL": "Tiếng Hà Lan",
+ "no-NO": "Tiếng Na Uy",
+ "pl-PL": "Tiếng Ba Lan",
+ "pt-BR": "Tiếng Bồ Đào Nha (Braxin)",
+ "pt-PT": "Tiếng Bồ Đào Nha (Bồ Đào Nha)",
+ "ro-RO": "Tiếng Romania",
+ "ru-RU": "Tiếng Nga",
+ "sk-SK": "Tiếng Slovak",
+ "sr-RS": "Tiếng Serbia",
+ "sv-SE": "Tiếng Thụy Điển",
+ "th-TH": "Tiếng Thái",
+ "tr-TR": "Tiếng Thổ Nhĩ Kỳ",
+ "uk-UA": "Tiếng Ukraina",
+ "vi-VN": "Tiếng Việt",
+ "zh": "Tiếng Trung",
+ "zh-CN": "Tiếng Trung (giản thể)",
+ "zh-TW": "Tiếng Trung (phồn thể)"
+ },
+ "layoutInitializing": "Đang tải bố cục...",
+ "noDescription": "Chưa có mô tả",
+ "ok": "Đồng ý",
+ "password": "Mật khẩu",
+ "pin": "Ghim",
+ "pinOff": "Bỏ ghim",
+ "regenerate": "Tạo lại",
+ "rename": "Đổi tên",
+ "reset": "Đặt lại",
+ "retry": "Thử lại",
+ "send": "Gửi",
+ "setting": "Cài đặt",
+ "share": "Chia sẻ",
+ "stop": "Dừng",
+ "tab": {
+ "chat": "Trò chuyện",
+ "market": "Thị trường",
+ "setting": "Cài đặt"
+ },
+ "temp": "Tạm thời",
+ "updateAgent": "Cập nhật thông tin trợ lý",
+ "upgradeVersion": {
+ "action": "Nâng cấp",
+ "hasNew": "Có bản cập nhật mới",
+ "newVersion": "Có phiên bản mới: {{version}}"
+ }
+}
diff --git a/locales/vi-VN/empty.json b/locales/vi-VN/empty.json
new file mode 100644
index 000000000000..f68295f10f0d
--- /dev/null
+++ b/locales/vi-VN/empty.json
@@ -0,0 +1,6 @@
+{
+ "topic": {
+ "desc": "Nhấn vào nút bên trái để lưu cuộc trò chuyện hiện tại như một chủ đề lịch sử và bắt đầu một cuộc trò chuyện mới",
+ "title": "Danh sách chủ đề"
+ }
+}
diff --git a/locales/vi-VN/error.json b/locales/vi-VN/error.json
new file mode 100644
index 000000000000..dc31817a58e4
--- /dev/null
+++ b/locales/vi-VN/error.json
@@ -0,0 +1,53 @@
+{
+ "pluginSettings": {
+ "desc": "Hoàn thành cấu hình sau để bắt đầu sử dụng plugin này",
+ "title": "Cấu hình Plugin {{name}}"
+ },
+ "response": {
+ "400": "Xin lỗi, máy chủ không hiểu yêu cầu của bạn, vui lòng xác nhận tham số yêu cầu của bạn có đúng không",
+ "401": "Xin lỗi, máy chủ từ chối yêu cầu của bạn, có thể do quyền hạn của bạn không đủ hoặc không cung cấp xác thực danh tính hợp lệ",
+ "403": "Xin lỗi, máy chủ từ chối yêu cầu của bạn, bạn không có quyền truy cập nội dung này",
+ "404": "Xin lỗi, máy chủ không tìm thấy trang hoặc tài nguyên bạn yêu cầu, vui lòng xác nhận URL của bạn có đúng không",
+ "405": "Xin lỗi, máy chủ không hỗ trợ phương thức yêu cầu bạn đang sử dụng, vui lòng xác nhận phương thức yêu cầu của bạn có đúng không",
+ "429": "Xin lỗi, yêu cầu của bạn quá nhiều, máy chủ hơi mệt, vui lòng thử lại sau",
+ "500": "Xin lỗi, máy chủ có vẻ gặp một số khó khăn, tạm thời không thể hoàn thành yêu cầu của bạn, vui lòng thử lại sau",
+ "502": "Xin lỗi, máy chủ có vẻ lạc đường, tạm thời không thể cung cấp dịch vụ, vui lòng thử lại sau",
+ "503": "Xin lỗi, máy chủ hiện không thể xử lý yêu cầu của bạn, có thể do quá tải hoặc đang bảo trì, vui lòng thử lại sau",
+ "504": "Xin lỗi, máy chủ không đợi được phản hồi từ máy chủ upstream, vui lòng thử lại sau",
+ "InvalidAccessCode": "Mật khẩu không đúng hoặc trống, vui lòng nhập mật khẩu truy cập đúng, hoặc thêm Khóa API OpenAI tùy chỉnh",
+ "NoAPIKey": "Khóa API OpenAI trống, vui lòng thêm Khóa API OpenAI tùy chỉnh",
+ "OpenAIBizError": "Yêu cầu dịch vụ OpenAI gặp lỗi, vui lòng xác minh hoặc thử lại dựa trên thông tin dưới đây",
+ "PluginApiNotFound": "Xin lỗi, không có API nào trong tệp mô tả plugin, vui lòng kiểm tra phương thức yêu cầu của bạn có khớp với API mô tả plugin không",
+ "PluginApiParamsError": "Xin lỗi, kiểm tra tham số đầu vào yêu cầu của plugin không thông qua, vui lòng kiểm tra tham số đầu vào có khớp với thông tin mô tả API không",
+ "PluginGatewayError": "Xin lỗi, cổng plugin gặp lỗi, vui lòng kiểm tra cấu hình cổng plugin có đúng không",
+ "PluginManifestInvalid": "Xin lỗi, kiểm tra mô tả plugin không thông qua, vui lòng kiểm tra định dạng mô tả có đúng không",
+ "PluginManifestNotFound": "Xin lỗi, máy chủ không tìm thấy tệp mô tả plugin (manifest.json), vui lòng kiểm tra địa chỉ tệp mô tả plugin có đúng không",
+ "PluginMarketIndexInvalid": "Xin lỗi, kiểm tra chỉ mục plugin không thông qua, vui lòng kiểm tra định dạng tệp chỉ mục có đúng không",
+ "PluginMarketIndexNotFound": "Xin lỗi, máy chủ không tìm thấy chỉ mục plugin, vui lòng kiểm tra xem địa chỉ chỉ mục có đúng không",
+ "PluginMetaInvalid": "Xin lỗi, kiểm tra thông tin cấu hình plugin không thông qua, vui lòng kiểm tra định dạng thông tin cấu hình có đúng không",
+ "PluginMetaNotFound": "Xin lỗi, không tìm thấy thông tin cấu hình plugin trong chỉ mục",
+ "PluginOpenApiInitError": "Xin lỗi, khởi tạo khách hàng OpenAPI thất bại, vui lòng kiểm tra thông tin cấu hình OpenAPI có đúng không",
+ "PluginServerError": "Lỗi trả về từ máy chủ plugin, vui lòng kiểm tra tệp mô tả plugin, cấu hình plugin hoặc triển khai máy chủ theo thông tin lỗi dưới đây",
+ "PluginSettingsInvalid": "Plugin cần phải được cấu hình đúng trước khi sử dụng, vui lòng kiểm tra cấu hình của bạn có đúng không"
+ },
+ "stt": {
+ "responseError": "Yêu cầu dịch vụ thất bại, vui lòng kiểm tra cấu hình hoặc thử lại"
+ },
+ "tts": {
+ "responseError": "Yêu cầu dịch vụ thất bại, vui lòng kiểm tra cấu hình hoặc thử lại"
+ },
+ "unlock": {
+ "apikey": {
+ "addProxyUrl": "Thêm địa chỉ proxy OpenAI (tùy chọn)",
+ "description": "Nhập OpenAI API Key của bạn để bắt đầu phiên làm việc. Ứng dụng sẽ không lưu API Key của bạn",
+ "title": "Sử dụng API Key tùy chỉnh"
+ },
+ "closeMessage": "Đóng thông báo",
+ "confirm": "Xác nhận và thử lại",
+ "password": {
+ "description": "Quản trị viên đã kích hoạt mã hóa ứng dụng. Nhập mật khẩu ứng dụng để mở khóa. Chỉ cần nhập mật khẩu một lần",
+ "placeholder": "Nhập mật khẩu",
+ "title": "Nhập mật khẩu để mở khóa ứng dụng"
+ }
+ }
+}
diff --git a/locales/vi-VN/market.json b/locales/vi-VN/market.json
new file mode 100644
index 000000000000..1a5ba9954c42
--- /dev/null
+++ b/locales/vi-VN/market.json
@@ -0,0 +1,30 @@
+{
+ "addAgent": "Thêm trợ lý",
+ "guide": {
+ "func1": {
+ "desc1": "Trong cửa sổ trò chuyện, nhấp vào cài đặt ở góc trên bên phải để vào trang cài đặt trợ lý bạn muốn gửi;",
+ "desc2": "Nhấp vào nút gửi đến thị trường trợ lý ở góc trên bên phải.",
+ "tag": "Phương pháp một",
+ "title": "Gửi thông qua LobeChat"
+ },
+ "func2": {
+ "button": "Đi đến kho trợ lý trên Github",
+ "desc": "Nếu bạn muốn thêm trợ lý vào chỉ mục, hãy sử dụng agent-template.json hoặc agent-template-full.json để tạo mục nhập trong thư mục plugins, viết mô tả ngắn gọn và đánh dấu phù hợp, sau đó tạo một yêu cầu kéo.",
+ "tag": "Phương pháp hai",
+ "title": "Gửi thông qua Github"
+ }
+ },
+ "search": {
+ "placeholder": "Tìm kiếm tên trợ lý, giới thiệu hoặc từ khóa..."
+ },
+ "sidebar": {
+ "comment": "Diễn đàn",
+ "prompt": "Gợi ý",
+ "title": "Chi tiết trợ lý"
+ },
+ "submitAgent": "Gửi trợ lý",
+ "title": {
+ "allAgents": "Tất cả trợ lý",
+ "recentSubmits": "Gần đây thêm mới"
+ }
+}
diff --git a/locales/vi-VN/migration.json b/locales/vi-VN/migration.json
new file mode 100644
index 000000000000..193fc22ca55f
--- /dev/null
+++ b/locales/vi-VN/migration.json
@@ -0,0 +1,45 @@
+{
+ "dbV1": {
+ "action": {
+ "clearDB": "Xóa dữ liệu cục bộ",
+ "downloadBackup": "Tải sao lưu dữ liệu",
+ "reUpgrade": "Tái nâng cấp",
+ "start": "Bắt đầu sử dụng",
+ "upgrade": "Nâng cấp ngay"
+ },
+ "clear": {
+ "confirm": "Dữ liệu cục bộ sẽ được xóa (cài đặt toàn cầu không bị ảnh hưởng), vui lòng xác nhận bạn đã tải sao lưu dữ liệu."
+ },
+ "description": "Trong phiên bản mới, lưu trữ dữ liệu của LobeChat đã có bước tiến lớn. Do đó, chúng tôi cần nâng cấp dữ liệu phiên bản cũ để mang đến trải nghiệm sử dụng tốt hơn cho bạn.",
+ "features": {
+ "capability": {
+ "desc": "Dựa trên công nghệ IndexedDB, đủ lớn để chứa tin nhắn trò chuyện suốt đời của bạn",
+ "title": "Dung lượng lớn"
+ },
+ "performance": {
+ "desc": "Triệu bản tin nhắn tự động được chỉ mục, thời gian phản hồi truy vấn trong mili giây",
+ "title": "Hiệu suất cao"
+ },
+ "use": {
+ "desc": "Hỗ trợ tìm kiếm tiêu đề, mô tả, nhãn, nội dung tin nhắn và cả văn bản dịch, hiệu suất tìm kiếm hàng ngày được cải thiện đáng kể",
+ "title": "Dễ sử dụng hơn"
+ }
+ },
+ "title": "Tiến hóa dữ liệu LobeChat",
+ "upgrade": {
+ "error": {
+ "subTitle": "Rất tiếc, quá trình nâng cấp cơ sở dữ liệu gặp sự cố. Vui lòng thử một trong những cách sau: A. Xóa dữ liệu cục bộ sau đó, nhập lại dữ liệu sao lưu; B. Nhấn nút \"Tái nâng cấp\".
Nếu vẫn gặp sự cố, vui lòng <1>gửi vấn đề1> , chúng tôi sẽ kiểm tra ngay lập tức cho bạn",
+ "title": "Nâng cấp cơ sở dữ liệu thất bại"
+ },
+ "success": {
+ "subTitle": "Cơ sở dữ liệu LobeChat đã được nâng cấp lên phiên bản mới nhất, hãy trải nghiệm ngay",
+ "title": "Nâng cấp cơ sở dữ liệu thành công"
+ }
+ },
+ "upgradeTip": "Quá trình nâng cấp mất khoảng 10~20 giây, trong quá trình nâng cấp vui lòng không đóng LobeChat"
+ },
+ "migrateError": {
+ "missVersion": "Dữ liệu nhập không có số phiên bản, vui lòng kiểm tra lại tệp và thử lại",
+ "noMigration": "Không tìm thấy phương án di chuyển tương ứng với phiên bản hiện tại, vui lòng kiểm tra lại số phiên bản. Nếu vẫn gặp vấn đề, vui lòng gửi phản hồi về vấn đề"
+ }
+}
diff --git a/locales/vi-VN/plugin.json b/locales/vi-VN/plugin.json
new file mode 100644
index 000000000000..34f09a9d5b8e
--- /dev/null
+++ b/locales/vi-VN/plugin.json
@@ -0,0 +1,166 @@
+{
+ "debug": {
+ "arguments": "Tham số gọi",
+ "function_call": "Gọi hàm",
+ "off": "Tắt gỡ lỗi",
+ "on": "Xem thông tin gọi plugin",
+ "response": "Kết quả trả về"
+ },
+ "detailModal": {
+ "info": {
+ "description": "Mô tả API",
+ "name": "Tên API"
+ },
+ "tabs": {
+ "info": "Khả năng plugin",
+ "manifest": "Tệp cài đặt",
+ "settings": "Cài đặt"
+ },
+ "title": "Chi tiết plugin"
+ },
+ "dev": {
+ "confirmDeleteDevPlugin": "Bạn sắp xóa plugin cục bộ này, sau khi xóa sẽ không thể khôi phục, bạn có muốn xóa plugin này không?",
+ "customParams": {
+ "useProxy": {
+ "label": "Cài đặt thông qua proxy (nếu gặp lỗi truy cập qua các miền, hãy thử bật tùy chọn này và cài đặt lại)"
+ }
+ },
+ "deleteSuccess": "Xóa plugin thành công",
+ "manifest": {
+ "identifier": {
+ "desc": "Định danh duy nhất của plugin",
+ "label": "Định danh"
+ },
+ "mode": {
+ "local": "Cấu hình trực quan",
+ "local-tooltip": "Tạm thời không hỗ trợ cấu hình trực quan",
+ "url": "Liên kết trực tuyến"
+ },
+ "name": {
+ "desc": "Tiêu đề plugin",
+ "label": "Tiêu đề",
+ "placeholder": "Tìm kiếm công cụ tìm kiếm"
+ }
+ },
+ "meta": {
+ "author": {
+ "desc": "Tác giả của plugin",
+ "label": "Tác giả"
+ },
+ "avatar": {
+ "desc": "Biểu tượng của plugin, có thể sử dụng Emoji hoặc URL",
+ "label": "Biểu tượng"
+ },
+ "description": {
+ "desc": "Mô tả plugin",
+ "label": "Mô tả",
+ "placeholder": "Tìm kiếm công cụ tìm kiếm để lấy thông tin"
+ },
+ "formFieldRequired": "Trường này là bắt buộc",
+ "homepage": {
+ "desc": "Trang chủ của plugin",
+ "label": "Trang chủ"
+ },
+ "identifier": {
+ "desc": "Định danh duy nhất của plugin, sẽ tự động nhận dạng từ manifest",
+ "errorDuplicate": "Định danh trùng với plugin đã có, vui lòng sửa đổi định danh",
+ "label": "Định danh",
+ "pattenErrorMessage": "Chỉ có thể nhập ký tự tiếng Anh, số, - và _"
+ },
+ "manifest": {
+ "desc": "LobeChat sẽ cài đặt plugin thông qua liên kết này",
+ "label": "Tệp mô tả plugin (Manifest) URL",
+ "preview": "Xem trước Manifest",
+ "refresh": "Làm mới"
+ },
+ "title": {
+ "desc": "Tiêu đề plugin",
+ "label": "Tiêu đề",
+ "placeholder": "Tìm kiếm công cụ tìm kiếm"
+ }
+ },
+ "metaConfig": "Cấu hình thông tin plugin",
+ "modalDesc": "Sau khi thêm plugin tùy chỉnh, có thể sử dụng để xác minh phát triển plugin, cũng có thể sử dụng trực tiếp trong cuộc trò chuyện. Vui lòng tham khảo<1>tài liệu phát triển↗>",
+ "openai": {
+ "importUrl": "Nhập từ liên kết URL",
+ "schema": "Schema"
+ },
+ "preview": {
+ "card": "Xem trước hiệu ứng plugin",
+ "desc": "Xem trước mô tả plugin",
+ "title": "Xem trước tên plugin"
+ },
+ "save": "Cài đặt plugin",
+ "saveSuccess": "Lưu cài đặt plugin thành công",
+ "tabs": {
+ "manifest": "Danh sách mô tả chức năng (Manifest)",
+ "meta": "Thông tin plugin"
+ },
+ "title": {
+ "create": "Thêm plugin tùy chỉnh",
+ "edit": "Chỉnh sửa plugin tùy chỉnh"
+ },
+ "type": {
+ "lobe": "Plugin LobeChat",
+ "openai": "Plugin OpenAI"
+ },
+ "update": "Cập nhật",
+ "updateSuccess": "Cập nhật cài đặt plugin thành công"
+ },
+ "error": {
+ "fetchError": "Lỗi khi yêu cầu liên kết manifest, vui lòng đảm bảo tính hợp lệ của liên kết và kiểm tra xem liên kết có cho phép truy cập qua tên miền khác không",
+ "installError": "Cài đặt plugin {{name}} thất bại",
+ "manifestInvalid": "Manifest không tuân theo quy tắc, kết quả kiểm tra: \n\n {{error}}",
+ "noManifest": "Tệp mô tả không tồn tại",
+ "openAPIInvalid": "OpenAPI phân tích thất bại, lỗi: \n\n {{error}}",
+ "reinstallError": "Làm mới plugin {{name}} thất bại",
+ "urlError": "Liên kết này không trả về nội dung dạng JSON, vui lòng đảm bảo rằng đó là một liên kết hợp lệ"
+ },
+ "list": {
+ "item": {
+ "deprecated.title": "Đã loại bỏ",
+ "local.config": "Cấu hình",
+ "local.title": "Tùy chỉnh"
+ }
+ },
+ "loading": {
+ "content": "Đang gọi plugin...",
+ "plugin": "Plugin đang chạy..."
+ },
+ "pluginList": "Danh sách plugin",
+ "plugins": {
+ "loading": "Đang kiểm tra công cụ...",
+ "unknown": "Công cụ không xác định"
+ },
+ "setting": "Cài đặt plugin",
+ "settings": {
+ "indexUrl": {
+ "title": "Chỉ mục thị trường",
+ "tooltip": "Hiện không hỗ trợ chỉnh sửa trực tuyến, vui lòng thiết lập thông qua biến môi trường khi triển khai"
+ },
+ "modalDesc": "Sau khi cấu hình địa chỉ thị trường plugin, bạn có thể sử dụng thị trường plugin tùy chỉnh",
+ "title": "Cài đặt thị trường plugin"
+ },
+ "store": {
+ "actions": {
+ "confirmUninstall": "Sắp gỡ bỏ plugin này, sau khi gỡ bỏ sẽ xóa cấu hình của plugin này, vui lòng xác nhận hành động của bạn",
+ "detail": "Chi tiết",
+ "install": "Cài đặt",
+ "manifest": "Chỉnh sửa tệp cài đặt",
+ "settings": "Cài đặt",
+ "uninstall": "Gỡ bỏ"
+ },
+ "communityPlugin": "Cộng đồng bên thứ ba",
+ "customPlugin": "Tùy chỉnh",
+ "empty": "Hiện chưa có plugin được cài đặt",
+ "installAllPlugins": "Cài đặt tất cả",
+ "networkError": "Lấy cửa hàng plugin thất bại, vui lòng kiểm tra kết nối mạng và thử lại",
+ "placeholder": "Tìm kiếm tên hoặc mô tả plugin...",
+ "releasedAt": "Đã phát hành vào {{createdAt}}",
+ "tabs": {
+ "all": "Tất cả",
+ "installed": "Đã cài đặt"
+ },
+ "title": "Cửa hàng plugin"
+ }
+}
diff --git a/locales/vi-VN/setting.json b/locales/vi-VN/setting.json
new file mode 100644
index 000000000000..f0f9d44ff848
--- /dev/null
+++ b/locales/vi-VN/setting.json
@@ -0,0 +1,306 @@
+{
+ "danger": {
+ "clear": {
+ "action": "Xóa ngay",
+ "confirm": "Xác nhận xóa tất cả dữ liệu trò chuyện?",
+ "desc": "Dữ liệu cuộc trò chuyện, bao gồm trợ lý, tệp tin, tin nhắn, plugin, sẽ bị xóa",
+ "success": "Đã xóa tất cả tin nhắn cuộc trò chuyện",
+ "title": "Xóa tất cả tin nhắn cuộc trò chuyện"
+ },
+ "reset": {
+ "action": "Đặt lại ngay",
+ "confirm": "Xác nhận đặt lại tất cả cài đặt?",
+ "currentVersion": "Phiên bản hiện tại",
+ "desc": "Đặt lại tất cả cài đặt về giá trị mặc định",
+ "title": "Đặt lại tất cả cài đặt"
+ }
+ },
+ "header": {
+ "global": "Cài đặt toàn cầu",
+ "session": "Cài đặt cuộc trò chuyện",
+ "sessionWithName": "Cài đặt cuộc trò chuyện · {{name}}"
+ },
+ "llm": {
+ "AzureOpenAI": {
+ "endpoint": {
+ "desc": "Giá trị này có thể được tìm thấy trong phần “Khóa và Điểm cuối” khi kiểm tra tài nguyên trên Cổng thông tin Azure",
+ "placeholder": "https://docs-test-001.openai.azure.com",
+ "title": "Địa chỉ API Azure"
+ },
+ "models": {
+ "desc": "Các mô hình được hỗ trợ",
+ "title": "Danh sách mô hình"
+ },
+ "title": "Cài đặt Azure OpenAI",
+ "token": {
+ "desc": "Giá trị này có thể được tìm thấy trong phần “Khóa và Điểm cuối” khi kiểm tra tài nguyên trên Cổng thông tin Azure. Có thể sử dụng KEY1 hoặc KEY2",
+ "placeholder": "Khóa API Azure",
+ "title": "Khóa API"
+ }
+ },
+ "OpenAI": {
+ "azureApiVersion": {
+ "desc": "Phiên bản API của Azure, theo định dạng YYYY-MM-DD, xem chi tiết tại [phiên bản mới nhất](https://learn.microsoft.com/zh-cn/azure/ai-services/openai/reference#chat-completions)",
+ "fetch": "Lấy danh sách",
+ "title": "Phiên bản API Azure"
+ },
+ "check": {
+ "button": "Kiểm tra",
+ "desc": "Kiểm tra xem Khóa API và Địa chỉ proxy đã được điền đúng chưa",
+ "pass": "Kiểm tra thành công",
+ "title": "Kiểm tra kết nối"
+ },
+ "customModelName": {
+ "desc": "Thêm mô hình tùy chỉnh, nhiều mô hình sử dụng dấu phẩy (,)",
+ "placeholder": "mô hình1, mô hình2, mô hình3",
+ "title": "Tên mô hình tùy chỉnh"
+ },
+ "endpoint": {
+ "desc": "Ngoài địa chỉ mặc định, phải bao gồm http(s)://",
+ "placeholder": "https://api.openai.com/v1",
+ "title": "Địa chỉ proxy giao diện"
+ },
+ "models": {
+ "count": "Tổng cộng có {{count}} mô hình",
+ "desc": "Các mô hình được hỗ trợ",
+ "fetch": "Lấy danh sách mô hình",
+ "notSupport": "Azure OpenAI tạm thời không hỗ trợ xem danh sách mô hình",
+ "notSupportTip": "Bạn cần tự đảm bảo rằng tên triển khai và tên mô hình phù hợp nhau",
+ "refetch": "Lấy lại danh sách mô hình",
+ "title": "Danh sách mô hình"
+ },
+ "title": "Cài đặt OpenAI",
+ "token": {
+ "desc": "Sử dụng Khóa OpenAI của riêng bạn",
+ "placeholder": "Khóa API OpenAI",
+ "title": "Khóa API"
+ },
+ "useAzure": {
+ "desc": "Sử dụng dịch vụ OpenAI do Azure cung cấp",
+ "fetch": "Lấy danh sách",
+ "serverConfig": "Quản trị viên đã cấu hình mở Azure OpenAI trên máy chủ, không cho phép chuyển đổi",
+ "title": "Sử dụng Azure OpenAI"
+ }
+ },
+ "waitingForMore": "Có thêm mô hình đang <1>được lên kế hoạch tích hợp1>, hãy chờ đợi ✨"
+ },
+ "plugin": {
+ "addTooltip": "Thêm tiện ích",
+ "clearDeprecated": "Xóa tiện ích không còn hỗ trợ",
+ "empty": "Hiện chưa có tiện ích nào được cài đặt, hãy truy cập <1>cửa hàng tiện ích1> để khám phá",
+ "installStatus": {
+ "deprecated": "Đã gỡ bỏ"
+ },
+ "settings": {
+ "hint": "Vui lòng điền cấu hình dựa trên mô tả",
+ "title": "Cấu hình tiện ích {{id}}",
+ "tooltip": "Cấu hình tiện ích"
+ },
+ "store": "Cửa hàng tiện ích"
+ },
+ "settingAgent": {
+ "avatar": {
+ "title": "Hình đại diện"
+ },
+ "backgroundColor": {
+ "title": "Màu nền"
+ },
+ "description": {
+ "placeholder": "Vui lòng nhập mô tả trợ lý",
+ "title": "Mô tả trợ lý"
+ },
+ "name": {
+ "placeholder": "Vui lòng nhập tên trợ lý",
+ "title": "Tên"
+ },
+ "prompt": {
+ "placeholder": "Vui lòng nhập từ khóa Prompt cho vai diễn",
+ "title": "Thiết lập vai diễn"
+ },
+ "tag": {
+ "placeholder": "Vui lòng nhập nhãn",
+ "title": "Nhãn"
+ },
+ "title": "Thông tin trợ lý"
+ },
+ "settingChat": {
+ "autoCreateTopicThreshold": {
+ "desc": "Khi số tin nhắn hiện tại vượt quá giá trị này, chủ đề sẽ tự động được tạo",
+ "title": "Ngưỡng tự động tạo chủ đề"
+ },
+ "chatStyleType": {
+ "title": "Kiểu cửa sổ trò chuyện",
+ "type": {
+ "chat": "Chế độ trò chuyện",
+ "docs": "Chế độ tài liệu"
+ }
+ },
+ "compressThreshold": {
+ "desc": "Khi số tin nhắn lịch sử chưa được nén vượt quá giá trị này, sẽ thực hiện nén",
+ "title": "Ngưỡng nén độ dài lịch sử"
+ },
+ "enableAutoCreateTopic": {
+ "desc": "Có tự động tạo chủ đề trong quá trình trò chuyện hay không, chỉ áp dụng trong chủ đề tạm thời",
+ "title": "Tự động tạo chủ đề"
+ },
+ "enableCompressThreshold": {
+ "title": "Bật ngưỡng nén độ dài lịch sử"
+ },
+ "enableHistoryCount": {
+ "alias": "Không giới hạn",
+ "limited": "Chỉ chứa {{number}} tin nhắn trò chuyện",
+ "title": "Giới hạn số lượng tin nhắn lịch sử",
+ "unlimited": "Không giới hạn số lượng tin nhắn lịch sử"
+ },
+ "historyCount": {
+ "desc": "Số lượng tin nhắn được gửi mỗi lần yêu cầu (bao gồm cả câu hỏi mới nhất. Mỗi câu hỏi và câu trả lời đều tính là 1)",
+ "title": "Số lượng tin nhắn đi kèm"
+ },
+ "inputTemplate": {
+ "desc": "Tin nhắn mới nhất của người dùng sẽ được điền vào mẫu này",
+ "placeholder": "Mẫu xử lý trước {{text}} sẽ được thay thế bằng thông tin nhập thời gian thực",
+ "title": "Mẫu xử lý đầu vào của người dùng"
+ },
+ "title": "Cài đặt trò chuyện"
+ },
+ "settingModel": {
+ "enableMaxTokens": {
+ "title": "Bật giới hạn phản hồi một lần"
+ },
+ "frequencyPenalty": {
+ "desc": "Giá trị càng cao, càng có khả năng giảm sự lặp lại của từ/cụm từ",
+ "title": "Hình phạt tần suất"
+ },
+ "maxTokens": {
+ "desc": "Số lượng Token tối đa được sử dụng trong mỗi tương tác",
+ "title": "Giới hạn phản hồi một lần"
+ },
+ "model": {
+ "desc": "Mô hình ChatGPT",
+ "list": {
+ "gpt-3.5-turbo": "GPT 3.5",
+ "gpt-3.5-turbo-16k": "GPT 3.5 (16K)",
+ "gpt-4": "GPT 4",
+ "gpt-4-32k": "GPT 4 (32K)"
+ },
+ "title": "Mô hình"
+ },
+ "presencePenalty": {
+ "desc": "Giá trị càng cao, càng có khả năng mở rộng đến chủ đề mới",
+ "title": "Độ mới của chủ đề"
+ },
+ "temperature": {
+ "desc": "Giá trị càng cao, phản hồi càng ngẫu nhiên",
+ "title": "Độ ngẫu nhiên",
+ "titleWithValue": "Độ ngẫu nhiên {{value}}"
+ },
+ "title": "Cài đặt mô hình",
+ "topP": {
+ "desc": "Tương tự như độ ngẫu nhiên, nhưng không nên thay đổi cùng lúc với độ ngẫu nhiên",
+ "title": "Lấy mẫu cốt lõi"
+ }
+ },
+ "settingPlugin": {
+ "title": "Danh sách plugin"
+ },
+ "settingSystem": {
+ "accessCode": {
+ "desc": "Quản trị viên đã bật mã hóa truy cập",
+ "placeholder": "Nhập mật khẩu truy cập",
+ "title": "Mật khẩu truy cập"
+ },
+ "title": "Cài đặt hệ thống"
+ },
+ "settingTTS": {
+ "openai": {
+ "sttModel": "Mô hình nhận dạng giọng nói OpenAI",
+ "ttsModel": "Mô hình tổng hợp giọng nói OpenAI"
+ },
+ "showAllLocaleVoice": {
+ "desc": "Tắt sẽ chỉ hiển thị nguồn âm thanh của ngôn ngữ hiện tại",
+ "title": "Hiển thị tất cả nguồn âm thanh ngôn ngữ"
+ },
+ "stt": "Cài đặt nhận dạng giọng nói",
+ "sttAutoStop": {
+ "desc": "Tắt sẽ không tự động dừng nhận dạng giọng nói, cần phải bấm nút dừng thủ công",
+ "title": "Tự động dừng nhận dạng giọng nói"
+ },
+ "sttLocale": {
+ "desc": "Ngôn ngữ đầu vào cho giọng nói, tùy chọn này có thể cải thiện độ chính xác của nhận dạng giọng nói",
+ "title": "Ngôn ngữ nhận dạng giọng nói"
+ },
+ "sttService": {
+ "desc": "Trong đó, trình duyệt là dịch vụ nhận dạng giọng nói nguyên bản của trình duyệt",
+ "title": "Dịch vụ nhận dạng giọng nói"
+ },
+ "title": "Dịch vụ giọng nói",
+ "tts": "Cài đặt tổng hợp giọng nói",
+ "ttsService": {
+ "desc": "Nếu sử dụng dịch vụ tổng hợp giọng nói OpenAI, cần đảm bảo dịch vụ mô hình OpenAI đã được bật",
+ "title": "Dịch vụ tổng hợp giọng nói"
+ },
+ "voice": {
+ "desc": "Chọn một giọng nói cho trợ lý hiện tại, các dịch vụ TTS khác nhau hỗ trợ các nguồn âm thanh khác nhau",
+ "preview": "Xem trước âm thanh",
+ "title": "Nguồn âm thanh tổng hợp giọng nói"
+ }
+ },
+ "settingTheme": {
+ "avatar": {
+ "title": "Hình đại diện"
+ },
+ "fontSize": {
+ "desc": "Kích cỡ chữ của nội dung trò chuyện",
+ "marks": {
+ "large": "Lớn",
+ "normal": "Bình thường",
+ "small": "Nhỏ"
+ },
+ "title": "Kích cỡ chữ"
+ },
+ "lang": {
+ "autoMode": "Theo hệ thống",
+ "title": "Ngôn ngữ"
+ },
+ "neutralColor": {
+ "desc": "Tùy chỉnh mức xám theo xu hướng màu sắc khác nhau",
+ "title": "Màu trung tính"
+ },
+ "primaryColor": {
+ "desc": "Tùy chỉnh màu chủ đề",
+ "title": "Màu chủ đề"
+ },
+ "themeMode": {
+ "auto": "Tự động",
+ "dark": "Tối",
+ "light": "Sáng",
+ "title": "Chủ đề"
+ },
+ "title": "Cài đặt chủ đề"
+ },
+ "submitAgentModal": {
+ "button": "Gửi trợ lý",
+ "identifier": "Nhận dạng trợ lý",
+ "metaMiss": "Vui lòng điền đầy đủ thông tin trợ lý trước khi gửi, cần bao gồm tên, mô tả và nhãn",
+ "placeholder": "Vui lòng nhập nhận dạng trợ lý, cần phải duy nhất, ví dụ như phát triển web",
+ "tooltips": "Chia sẻ lên thị trường trợ lý"
+ },
+ "tab": {
+ "agent": "Trợ lý mặc định",
+ "common": "Cài đặt chung",
+ "llm": "Mô hình ngôn ngữ",
+ "tts": "Dịch vụ giọng nói"
+ },
+ "tools": {
+ "builtins": {
+ "groupName": "Mở rộng tích hợp sẵn"
+ },
+ "plugins": {
+ "enabled": "Đã kích hoạt {{num}}",
+ "groupName": "Tiện ích",
+ "noEnabled": "Chưa có tiện ích nào được kích hoạt",
+ "store": "Cửa hàng tiện ích"
+ },
+ "title": "Công cụ mở rộng"
+ }
+}
diff --git a/locales/vi-VN/tool.json b/locales/vi-VN/tool.json
new file mode 100644
index 000000000000..d289333ecb56
--- /dev/null
+++ b/locales/vi-VN/tool.json
@@ -0,0 +1,9 @@
+{
+ "dalle": {
+ "autoGenerate": "Tự động tạo",
+ "downloading": "Liên kết hình ảnh được tạo bởi DallE3 chỉ có hiệu lực trong 1 giờ, đang tải hình ảnh xuống máy...",
+ "generate": "Tạo",
+ "generating": "Đang tạo...",
+ "images": "Hình ảnh:"
+ }
+}
diff --git a/locales/vi-VN/welcome.json b/locales/vi-VN/welcome.json
new file mode 100644
index 000000000000..14191a2b9526
--- /dev/null
+++ b/locales/vi-VN/welcome.json
@@ -0,0 +1,14 @@
+{
+ "button": {
+ "import": "Nhập Cấu Hình",
+ "start": "Bắt Đầu Ngay"
+ },
+ "header": "Chào Mừng",
+ "pickAgent": "Hoặc chọn từ các mẫu đại lý sau",
+ "skip": "Bỏ Qua Tạo",
+ "slogan": {
+ "desc1": "Tiên phong trong kỷ nguyên mới của tư duy và sáng tạo. Được xây dựng cho bạn, Siêu Cá Nhân.",
+ "desc2": "Tạo đại lý đầu tiên và bắt đầu nào~",
+ "title": "Khám phá siêu năng lực của bộ não bạn"
+ }
+}
diff --git a/locales/zh-CN/tool.json b/locales/zh-CN/tool.json
index 648d0d9ba48f..a818d01ccf06 100644
--- a/locales/zh-CN/tool.json
+++ b/locales/zh-CN/tool.json
@@ -1,6 +1,7 @@
{
"dalle": {
"autoGenerate": "自动生成",
+ "downloading": "DallE3 生成的图片链接有效期仅1小时,正在缓存图片到本地...",
"generate": "生成",
"generating": "生成中...",
"images": "图片:"
diff --git a/locales/zh-TW/tool.json b/locales/zh-TW/tool.json
index 91392e967a3f..e9a699f61ceb 100644
--- a/locales/zh-TW/tool.json
+++ b/locales/zh-TW/tool.json
@@ -1,6 +1,7 @@
{
"dalle": {
"autoGenerate": "自動生成",
+ "downloading": "DallE3 生成的圖片連結有效期僅1小時,正在快取圖片到本地...",
"generate": "生成",
"generating": "生成中...",
"images": "圖片:"
diff --git a/src/locales/resources.ts b/src/locales/resources.ts
index fa0abcaccfa1..640162dca288 100644
--- a/src/locales/resources.ts
+++ b/src/locales/resources.ts
@@ -12,6 +12,7 @@ export const locales = [
'tr-TR',
'zh-CN',
'zh-TW',
+ 'vi-VN',
] as const;
export type DefaultResources = typeof resources;
@@ -96,6 +97,10 @@ export const localeOptions: LocaleOptions = [
label: 'Italiano',
value: 'it-IT',
},
+ {
+ label: 'Tiếng Việt',
+ value: 'vi-VN',
+ },
] as LocaleOptions;
export const supportLocales: string[] = [...locales, 'en', 'zh'];