From 5aea46c214cc584c300f947dfcdea13db1e87854 Mon Sep 17 00:00:00 2001 From: ManishMadan2882 Date: Tue, 14 Jan 2025 15:49:01 +0530 Subject: [PATCH 1/6] (feat:settings) locale lang for analytics and logs --- frontend/src/locale/en.json | 22 ++++++++++- frontend/src/settings/Analytics.tsx | 57 ++++++++++++++++++----------- frontend/src/settings/Logs.tsx | 14 ++++--- 3 files changed, 65 insertions(+), 28 deletions(-) diff --git a/frontend/src/locale/en.json b/frontend/src/locale/en.json index c6ae8023..7be4b568 100644 --- a/frontend/src/locale/en.json +++ b/frontend/src/locale/en.json @@ -69,10 +69,28 @@ "noData": "No existing Chatbots" }, "analytics": { - "label": "Analytics" + "label": "Analytics", + "filterByChatbot": "Filter by chatbot", + "selectChatbot": "Select chatbot", + "filterOptions": { + "hour": "Hour", + "last24Hours": "24 Hours", + "last7Days": "7 Days", + "last15Days": "15 Days", + "last30Days": "30 Days" + }, + "messages": "Messages", + "tokenUsage": "Token Usage", + "feedback": "Feedback", + "filterPlaceholder": "Filter", + "none": "None" }, "logs": { - "label": "Logs" + "label": "Logs", + "filterByChatbot": "Filter by chatbot", + "selectChatbot": "Select chatbot", + "none": "None", + "tableHeader": "API generated / chatbot conversations" }, "tools": { "label": "Tools" diff --git a/frontend/src/settings/Analytics.tsx b/frontend/src/settings/Analytics.tsx index 8baad361..8f3c45bb 100644 --- a/frontend/src/settings/Analytics.tsx +++ b/frontend/src/settings/Analytics.tsx @@ -1,4 +1,5 @@ import React, { useState, useEffect } from 'react'; +import { useTranslation } from 'react-i18next'; import { BarElement, CategoryScale, @@ -28,15 +29,29 @@ ChartJS.register( Legend, ); -const filterOptions = [ - { label: 'Hour', value: 'last_hour' }, - { label: '24 Hours', value: 'last_24_hour' }, - { label: '7 Days', value: 'last_7_days' }, - { label: '15 Days', value: 'last_15_days' }, - { label: '30 Days', value: 'last_30_days' }, -]; - export default function Analytics() { + const { t } = useTranslation(); + + const filterOptions = [ + { label: t('settings.analytics.filterOptions.hour'), value: 'last_hour' }, + { + label: t('settings.analytics.filterOptions.last24Hours'), + value: 'last_24_hour', + }, + { + label: t('settings.analytics.filterOptions.last7Days'), + value: 'last_7_days', + }, + { + label: t('settings.analytics.filterOptions.last15Days'), + value: 'last_15_days', + }, + { + label: t('settings.analytics.filterOptions.last30Days'), + value: 'last_30_days', + }, + ]; + const [messagesData, setMessagesData] = useState

- Filter by chatbot + {t('settings.analytics.filterByChatbot')}

{ setSelectedChatbot( chatbots.find((item) => item.id === chatbot.value), @@ -199,12 +214,12 @@ export default function Analytics() {

- Messages + {t('settings.analytics.messages')}

- Token Usage + {t('settings.analytics.tokenUsage')}

- Feedback + {t('settings.analytics.feedback')}

item.positive, ), backgroundColor: '#7D54D1', }, { - label: 'Negative Feedback', + label: t('settings.analytics.negativeFeedback'), data: Object.values(feedbackData || {}).map( (item) => item.negative, ), diff --git a/frontend/src/settings/Logs.tsx b/frontend/src/settings/Logs.tsx index 1e248d46..df406122 100644 --- a/frontend/src/settings/Logs.tsx +++ b/frontend/src/settings/Logs.tsx @@ -1,4 +1,5 @@ import React, { useState, useEffect, useRef, useCallback } from 'react'; +import { useTranslation } from 'react-i18next'; import userService from '../api/services/userService'; import ChevronRight from '../assets/chevron-right.svg'; @@ -8,6 +9,7 @@ import { APIKeyData, LogData } from './types'; import CoppyButton from '../components/CopyButton'; export default function Logs() { + const { t } = useTranslation(); const [chatbots, setChatbots] = useState([]); const [selectedChatbot, setSelectedChatbot] = useState(); const [logs, setLogs] = useState([]); @@ -66,7 +68,7 @@ export default function Logs() {

- Filter by chatbot + {t('settings.logs.filterByChatbot')}

{loadingChatbots ? ( @@ -78,9 +80,9 @@ export default function Logs() { label: chatbot.name, value: chatbot.id, })), - { label: 'None', value: '' }, + { label: t('settings.logs.none'), value: '' }, ]} - placeholder="Select chatbot" + placeholder={t('settings.logs.selectChatbot')} onSelect={(chatbot: { label: string; value: string }) => { setSelectedChatbot( chatbots.find((item) => item.id === chatbot.value), @@ -120,6 +122,7 @@ type LogsTableProps = { }; function LogsTable({ logs, setPage }: LogsTableProps) { + const { t } = useTranslation(); const observerRef = useRef(); const firstObserver = useCallback((node: HTMLDivElement) => { if (observerRef.current) { @@ -134,7 +137,7 @@ function LogsTable({ logs, setPage }: LogsTableProps) {

- API generated / chatbot conversations + {t('settings.logs.tableHeader')}

chevron-right From cbcb717aee2e05ff37a49bbe08233e52da5d4324 Mon Sep 17 00:00:00 2001 From: ManishMadan2882 Date: Tue, 14 Jan 2025 16:52:35 +0530 Subject: [PATCH 2/6] (feat:locals) sync with en.json --- frontend/src/locale/es.json | 27 ++- frontend/src/locale/jp.json | 27 ++- frontend/src/locale/ru.json | 295 +++++++++++++++------------- frontend/src/locale/zh-TW.json | 29 ++- frontend/src/locale/zh.json | 27 ++- frontend/src/settings/Documents.tsx | 2 +- 6 files changed, 256 insertions(+), 151 deletions(-) diff --git a/frontend/src/locale/es.json b/frontend/src/locale/es.json index 79aa1b3b..d2c087db 100644 --- a/frontend/src/locale/es.json +++ b/frontend/src/locale/es.json @@ -69,10 +69,31 @@ "noData": "No hay chatbots existentes" }, "analytics": { - "label": "Analítica" + "label": "Analítica", + "filterByChatbot": "Filtrar por chatbot", + "selectChatbot": "Seleccionar chatbot", + "filterOptions": { + "hour": "Hora", + "last24Hours": "24 Horas", + "last7Days": "7 Días", + "last15Days": "15 Días", + "last30Days": "30 Días" + }, + "messages": "Mensajes", + "tokenUsage": "Uso de Tokens", + "feedback": "Retroalimentación", + "filterPlaceholder": "Filtrar", + "none": "Ninguno" }, "logs": { - "label": "Registros" + "label": "Registros", + "filterByChatbot": "Filtrar por chatbot", + "selectChatbot": "Seleccionar chatbot", + "none": "Ninguno", + "tableHeader": "Conversaciones generadas por API / chatbot" + }, + "tools": { + "label": "Herramientas" } }, "modals": { @@ -128,7 +149,7 @@ "label": "Crear una página pública para compartir", "note": "El documento original, la información personal y las conversaciones posteriores permanecerán privadas", "create": "Crear", - "option": "Permitir a los usuarios realizar más consultas." + "option": "Permitir a los usuarios realizar más consultas" } }, "sharedConv": { diff --git a/frontend/src/locale/jp.json b/frontend/src/locale/jp.json index 5f572ea4..71aa1e15 100644 --- a/frontend/src/locale/jp.json +++ b/frontend/src/locale/jp.json @@ -69,10 +69,31 @@ "noData": "既存のチャットボットはありません" }, "analytics": { - "label": "分析" + "label": "分析", + "filterByChatbot": "チャットボットでフィルター", + "selectChatbot": "チャットボットを選択", + "filterOptions": { + "hour": "時間", + "last24Hours": "24時間", + "last7Days": "7日間", + "last15Days": "15日間", + "last30Days": "30日間" + }, + "messages": "メッセージ", + "tokenUsage": "トークン使用量", + "feedback": "フィードバック", + "filterPlaceholder": "フィルター", + "none": "なし" }, "logs": { - "label": "ログ" + "label": "ログ", + "filterByChatbot": "チャットボットでフィルター", + "selectChatbot": "チャットボットを選択", + "none": "なし", + "tableHeader": "API生成/チャットボットの会話" + }, + "tools": { + "label": "ツール" } }, "modals": { @@ -86,7 +107,7 @@ "start": "チャットを開始する", "name": "名前", "choose": "ファイルを選択", - "info": ".pdf, .txt, .rst, .docx, .md, .json, .pptx, .zipファイルを25MBまでアップロードしてください", + "info": "25MBまでの.pdf, .txt, .rst, .csv, .xlsx, .docx, .md, .html, .epub, .json, .pptx, .zipファイルをアップロードしてください", "uploadedFiles": "アップロードされたファイル", "cancel": "キャンセル", "train": "トレーニング", diff --git a/frontend/src/locale/ru.json b/frontend/src/locale/ru.json index d23092a1..c5e3deb8 100644 --- a/frontend/src/locale/ru.json +++ b/frontend/src/locale/ru.json @@ -1,142 +1,163 @@ { - "language": "Русский", - "chat": "Чат", - "chats": "Чаты", - "newChat": "Новый чат", - "myPlan": "Мой план", - "about": "О", - "inputPlaceholder": "Введите свое сообщение здесь...", - "tagline": "DocsGPT использует GenAI, пожалуйста, проверьте важную информацию, используя источники.", - "sourceDocs": "Источник", - "none": "Нет", - "cancel": "Отмена", - "demo": [ - { - "header": "Узнайте о DocsGPT", - "query": "Что такое DocsGPT?" - }, - { - "header": "Обобщить документацию", - "query": "Обобщить текущий контекст" - }, - { - "header": "Написать код", - "query": "Написать код для запроса API к /api/answer" - }, - { - "header": "Помощь в обучении", - "query": "Написать потенциальные вопросы для контекста" - } - ], - "settings": { - "label": "Настройки", - "general": { - "label": "Общие", - "selectTheme": "Выбрать тему", - "light": "Светлая", - "dark": "Темная", - "selectLanguage": "Выбрать язык", - "chunks": "Обработанные фрагменты на запрос", - "prompt": "Активная подсказка", - "deleteAllLabel": "Удалить все беседы", - "deleteAllBtn": "Удалить все", - "addNew": "Добавить новый", - "convHistory": "История разговоров", - "none": "Нет", - "low": "Низкий", - "medium": "Средний", - "high": "Высокий", - "unlimited": "Без ограничений", - "default": "по умолчанию" - }, - "documents": { - "label": "Документы", - "name": "Название документа", - "date": "Дата вектора", - "type": "Тип", - "tokenUsage": "Использование токена", - "noData": "Нет существующих документов" - }, - "apiKeys": { - "label": "Чат-боты", - "name": "Название", - "key": "Ключ API", - "sourceDoc": "Исходный документ", - "createNew": "Создать новый", - "noData": "Нет существующих чат-ботов" - }, - "analytics": { - "label": "Analytics" - }, - "logs": { - "label": "Журналы" - } + "language": "Русский", + "chat": "Чат", + "chats": "Чаты", + "newChat": "Новый чат", + "myPlan": "Мой план", + "about": "О", + "inputPlaceholder": "Введите свое сообщение здесь...", + "tagline": "DocsGPT использует GenAI, пожалуйста, проверьте важную информацию, используя источники.", + "sourceDocs": "Источник", + "none": "Нет", + "cancel": "Отмена", + "demo": [ + { + "header": "Узнайте о DocsGPT", + "query": "Что такое DocsGPT?" }, - "modals": { - "uploadDoc": { - "label": "Загрузить новую документацию", - "select": "Выберите способ загрузки документа в DocsGPT", - "file": "Загрузить с устройства", - "back": "Назад", - "wait": "Пожалуйста, подождите ...", - "remote": "Собрать с веб-сайта", - "start": "Начать чат", - "name": "Имя", - "choose": "Выбрать файлы", - "info": "Загрузите .pdf, .txt, .rst, .csv, .xlsx, .docx, .md, .zip с ограничением до 25 МБ", - "uploadedFiles": "Загруженные файлы", - "cancel": "Отмена", - "train": "Обучение", - "link": "Ссылка", - "urlLink": "URL-ссылка", - "repoUrl": "URL-адрес репозитория", - "reddit": { - "id": "ID клиента", - "secret": "Секрет клиента", - "agent": "Агент пользователя", - "searchQueries": "Поисковые запросы", - "numberOfPosts": "Количество сообщений" - }, - "drag": { - "title": "Загрузите исходный файл", - "description": "Перетащите сюда свой файл, чтобы добавить его в качестве источника." - } - }, - "createAPIKey": { - "label": "Создать новый ключ API", - "apiKeyName": "Имя ключа API", - "chunks": "Обработано фрагментов на запрос", - "prompt": "Выбрать активный запрос", - "sourceDoc": "Исходный документ", - "create": "Создать" - }, - "saveKey": { - "note": "Пожалуйста, сохраните свой ключ", - "disclaimer": "Это единственный раз, когда будет показан ваш ключ.", - "copy": "Копировать", - "copied": "Скопировано", - "confirm": "Я сохранил ключ" - }, - "deleteConv": { - "confirm": "Вы уверены, что хотите удалить все разговоры?", - "delete": "Удалить" - }, - "shareConv": { - "label": "Создать публичную страницу для общего доступа", - "note": "Исходный документ, личная информация и дальнейший разговор останутся конфиденциальными", - "create": "Создать", - "option": "Разрешить пользователям запрашивать дальнейшие действия" - } + { + "header": "Обобщить документацию", + "query": "Обобщить текущий контекст" }, - "sharedConv": { - "subtitle": "Создано с помощью", - "button": "Начать работу с DocsGPT", - "meta": "DocsGPT использует GenAI, пожалуйста, проверьте важную информацию с помощью источников." + { + "header": "Написать код", + "query": "Написать код для запроса API к /api/answer" }, - "convTile": { - "share": "Поделиться", - "delete": "Удалить", - "rename": "Переименовать", - "deleteWarning": "Вы уверены, что хотите удалить этот разговор?" + { + "header": "Помощь в обучении", + "query": "Написать потенциальные вопросы для контекста" } -} \ No newline at end of file + ], + "settings": { + "label": "Настройки", + "general": { + "label": "Общие", + "selectTheme": "Выбрать тему", + "light": "Светлая", + "dark": "Темная", + "selectLanguage": "Выбрать язык", + "chunks": "Обработанные фрагменты на запрос", + "prompt": "Активная подсказка", + "deleteAllLabel": "Удалить все беседы", + "deleteAllBtn": "Удалить все", + "addNew": "Добавить новый", + "convHistory": "История разговоров", + "none": "Нет", + "low": "Низкий", + "medium": "Средний", + "high": "Высокий", + "unlimited": "Без ограничений", + "default": "по умолчанию" + }, + "documents": { + "label": "Документы", + "name": "Название документа", + "date": "Дата вектора", + "type": "Тип", + "tokenUsage": "Использование токена", + "noData": "Нет существующих документов" + }, + "apiKeys": { + "label": "Чат-боты", + "name": "Название", + "key": "Ключ API", + "sourceDoc": "Исходный документ", + "createNew": "Создать новый", + "noData": "Нет существующих чат-ботов" + }, + "analytics": { + "label": "Аналитика", + "filterByChatbot": "Фильтровать по чат-боту", + "selectChatbot": "Выбрать чат-бота", + "filterOptions": { + "hour": "Час", + "last24Hours": "24 часа", + "last7Days": "7 дней", + "last15Days": "15 дней", + "last30Days": "30 дней" + }, + "messages": "Сообщения", + "tokenUsage": "Использование токенов", + "feedback": "Обратная связь", + "filterPlaceholder": "Фильтр", + "none": "Нет" + }, + "logs": { + "label": "Журналы", + "filterByChatbot": "Фильтровать по чат-боту", + "selectChatbot": "Выбрать чат-бота", + "none": "Нет", + "tableHeader": "Сгенерированные API / разговоры с чат-ботом" + }, + "tools": { + "label": "Инструменты" + } + }, + "modals": { + "uploadDoc": { + "label": "Загрузить новую документацию", + "select": "Выберите способ загрузки документа в DocsGPT", + "file": "Загрузить с устройства", + "back": "Назад", + "wait": "Пожалуйста, подождите ...", + "remote": "Собрать с веб-сайта", + "start": "Начать чат", + "name": "Имя", + "choose": "Выбрать файлы", + "info": "Загрузите .pdf, .txt, .rst, .csv, .xlsx, .docx, .md, .html, .epub, .json, .pptx, .zip с ограничением до 25 МБ", + "uploadedFiles": "Загруженные файлы", + "cancel": "Отмена", + "train": "Обучение", + "link": "Ссылка", + "urlLink": "URL-ссылка", + "repoUrl": "URL-адрес репозитория", + "reddit": { + "id": "ID клиента", + "secret": "Секрет клиента", + "agent": "Агент пользователя", + "searchQueries": "Поисковые запросы", + "numberOfPosts": "Количество постов" + }, + "drag": { + "title": "Загрузить исходный файл", + "description": "Перетащите файл сюда, чтобы добавить его как источник" + } + }, + "createAPIKey": { + "label": "Создать новый ключ API", + "apiKeyName": "Название ключа API", + "chunks": "Обработанные фрагменты на запрос", + "prompt": "Выбрать активный запрос", + "sourceDoc": "Исходный документ", + "create": "Создать" + }, + "saveKey": { + "note": "Пожалуйста, сохраните свой ключ", + "disclaimer": "Это единственный раз, когда будет показан ваш ключ", + "copy": "Копировать", + "copied": "Скопировано", + "confirm": "Я сохранил ключ" + }, + "deleteConv": { + "confirm": "Вы уверены, что хотите удалить все разговоры?", + "delete": "Удалить" + }, + "shareConv": { + "label": "Создать публичную страницу для общего доступа", + "note": "Исходный документ, личная информация и дальнейший разговор останутся конфиденциальными", + "create": "Создать", + "option": "Разрешить пользователям делать дополнительные запросы" + } + }, + "sharedConv": { + "subtitle": "Создано с помощью", + "button": "Начать работу с DocsGPT", + "meta": "DocsGPT использует GenAI, пожалуйста, проверяйте важную информацию, используя источники" + }, + "convTile": { + "share": "Поделиться", + "delete": "Удалить", + "rename": "Переименовать", + "deleteWarning": "Вы уверены, что хотите удалить этот разговор?" + } +} diff --git a/frontend/src/locale/zh-TW.json b/frontend/src/locale/zh-TW.json index d5f633d2..5e97d883 100644 --- a/frontend/src/locale/zh-TW.json +++ b/frontend/src/locale/zh-TW.json @@ -10,8 +10,8 @@ "sourceDocs": "原始文件", "none": "無", "cancel": "取消", - "help": "聯繫支援", - "emailUs": "寄送電子郵件給我們", + "help": "幫助", + "emailUs": "給我們發電郵", "documentation": "文件", "demo": [ { @@ -67,10 +67,31 @@ "createNew": "新增" }, "analytics": { - "label": "分析" + "label": "分析", + "filterByChatbot": "按聊天機器人篩選", + "selectChatbot": "選擇聊天機器人", + "filterOptions": { + "hour": "小時", + "last24Hours": "24 小時", + "last7Days": "7 天", + "last15Days": "15 天", + "last30Days": "30 天" + }, + "messages": "訊息", + "tokenUsage": "Token 使用量", + "feedback": "回饋", + "filterPlaceholder": "篩選", + "none": "無" }, "logs": { - "label": "日誌" + "label": "日誌", + "filterByChatbot": "按聊天機器人篩選", + "selectChatbot": "選擇聊天機器人", + "none": "無", + "tableHeader": "API 生成 / 聊天機器人會話" + }, + "tools": { + "label": "工具" } }, "modals": { diff --git a/frontend/src/locale/zh.json b/frontend/src/locale/zh.json index 1a0d1f94..afa15f7b 100644 --- a/frontend/src/locale/zh.json +++ b/frontend/src/locale/zh.json @@ -10,7 +10,7 @@ "sourceDocs": "源", "none": "无", "cancel": "取消", - "help": "联系支持", + "help": "帮助", "emailUs": "给我们发邮件", "documentation": "文档", "demo": [ @@ -69,10 +69,31 @@ "noData": "没有现有的聊天机器人" }, "analytics": { - "label": "分析" + "label": "分析", + "filterByChatbot": "按聊天机器人筛选", + "selectChatbot": "选择聊天机器人", + "filterOptions": { + "hour": "小时", + "last24Hours": "24 小时", + "last7Days": "7 天", + "last15Days": "15 天", + "last30Days": "30 天" + }, + "messages": "消息", + "tokenUsage": "令牌使用", + "feedback": "反馈", + "filterPlaceholder": "筛选", + "none": "无" }, "logs": { - "label": "日志" + "label": "日志", + "filterByChatbot": "按聊天机器人筛选", + "selectChatbot": "选择聊天机器人", + "none": "无", + "tableHeader": "API 生成 / 聊天机器人会话" + }, + "tools": { + "label": "工具" } }, "modals": { diff --git a/frontend/src/settings/Documents.tsx b/frontend/src/settings/Documents.tsx index 8e68f226..52a63351 100644 --- a/frontend/src/settings/Documents.tsx +++ b/frontend/src/settings/Documents.tsx @@ -181,7 +181,7 @@ const Documents: React.FC = ({ {loading ? ( ) : ( -
+
From cc78ea7222cc6325508df6fce00e4b2b652bd1d2 Mon Sep 17 00:00:00 2001 From: ManishMadan2882 Date: Thu, 16 Jan 2025 18:24:27 +0530 Subject: [PATCH 3/6] (fix:locales) sync static text --- .../src/components/DocumentPagination.tsx | 16 ++- frontend/src/locale/en.json | 37 +++++- frontend/src/locale/es.json | 20 ++- frontend/src/locale/jp.json | 53 ++++++-- frontend/src/locale/ru.json | 96 +++++++++----- frontend/src/locale/zh-TW.json | 55 ++++++-- frontend/src/locale/zh.json | 37 +++++- frontend/src/modals/ConfigToolModal.tsx | 15 ++- .../src/modals/ShareConversationModal.tsx | 16 ++- frontend/src/preferences/PromptsModal.tsx | 39 +++--- frontend/src/settings/Analytics.tsx | 15 ++- frontend/src/settings/General.tsx | 17 ++- frontend/src/settings/Tools.tsx | 12 +- frontend/src/upload/Upload.tsx | 118 ++++++++---------- 14 files changed, 383 insertions(+), 163 deletions(-) diff --git a/frontend/src/components/DocumentPagination.tsx b/frontend/src/components/DocumentPagination.tsx index f02ef1c0..6958d051 100644 --- a/frontend/src/components/DocumentPagination.tsx +++ b/frontend/src/components/DocumentPagination.tsx @@ -1,4 +1,5 @@ import React, { useState } from 'react'; +import { useTranslation } from 'react-i18next'; import SingleArrowLeft from '../assets/single-left-arrow.svg'; import SingleArrowRight from '../assets/single-right-arrow.svg'; import DoubleArrowLeft from '../assets/double-arrow-left.svg'; @@ -19,6 +20,7 @@ const Pagination: React.FC = ({ onPageChange, onRowsPerPageChange, }) => { + const { t } = useTranslation(); const [isDropdownOpen, setIsDropdownOpen] = useState(false); const rowsPerPageOptions = [5, 10, 20, 50]; @@ -53,7 +55,9 @@ const Pagination: React.FC = ({
{/* Rows per page dropdown */}
- Rows per page: + + {t('pagination.rowsPerPage')}: +
@@ -108,7 +112,7 @@ const Pagination: React.FC = ({ > Previous page @@ -119,7 +123,7 @@ const Pagination: React.FC = ({ > Next page @@ -130,7 +134,7 @@ const Pagination: React.FC = ({ > Last page diff --git a/frontend/src/locale/en.json b/frontend/src/locale/en.json index 7be4b568..2f21445b 100644 --- a/frontend/src/locale/en.json +++ b/frontend/src/locale/en.json @@ -83,7 +83,9 @@ "tokenUsage": "Token Usage", "feedback": "Feedback", "filterPlaceholder": "Filter", - "none": "None" + "none": "None", + "positiveFeedback": "Positive Feedback", + "negativeFeedback": "Negative Feedback" }, "logs": { "label": "Logs", @@ -93,7 +95,12 @@ "tableHeader": "API generated / chatbot conversations" }, "tools": { - "label": "Tools" + "label": "Tools", + "searchPlaceholder": "Search...", + "addTool": "Add Tool", + "noToolsAlt": "No tools found", + "noToolsFound": "No tools found", + "selectToolSetup": "Select a tool to set up" } }, "modals": { @@ -150,6 +157,24 @@ "note": "Source document, personal information and further conversation will remain private", "create": "Create", "option": "Allow users to prompt further" + }, + "configTool": { + "title": "Tool Config", + "type": "Type", + "apiKeyLabel": "API Key / OAuth", + "apiKeyPlaceholder": "Enter API Key / OAuth", + "addButton": "Add Tool", + "closeButton": "Close" + }, + "prompts": { + "addPrompt": "Add Prompt", + "addDescription": "Add your custom prompt and save it to DocsGPT", + "editPrompt": "Edit Prompt", + "editDescription": "Edit your custom prompt and save it to DocsGPT", + "promptName": "Prompt Name", + "promptText": "Prompt Text", + "save": "Save", + "nameExists": "Name already exists" } }, "sharedConv": { @@ -162,5 +187,13 @@ "delete": "Delete", "rename": "Rename", "deleteWarning": "Are you sure you want to delete this conversation?" + }, + "pagination": { + "rowsPerPage": "Rows per page", + "pageOf": "Page {{currentPage}} of {{totalPages}}", + "firstPage": "First page", + "previousPage": "Previous page", + "nextPage": "Next page", + "lastPage": "Last page" } } diff --git a/frontend/src/locale/es.json b/frontend/src/locale/es.json index d2c087db..8d0a3273 100644 --- a/frontend/src/locale/es.json +++ b/frontend/src/locale/es.json @@ -83,7 +83,9 @@ "tokenUsage": "Uso de Tokens", "feedback": "Retroalimentación", "filterPlaceholder": "Filtrar", - "none": "Ninguno" + "none": "Ninguno", + "positiveFeedback": "Retroalimentación Positiva", + "negativeFeedback": "Retroalimentación Negativa" }, "logs": { "label": "Registros", @@ -150,6 +152,14 @@ "note": "El documento original, la información personal y las conversaciones posteriores permanecerán privadas", "create": "Crear", "option": "Permitir a los usuarios realizar más consultas" + }, + "configTool": { + "title": "Configuración de la Herramienta", + "type": "Tipo", + "apiKeyLabel": "Clave API / OAuth", + "apiKeyPlaceholder": "Ingrese la Clave API / OAuth", + "addButton": "Agregar Herramienta", + "closeButton": "Cerrar" } }, "sharedConv": { @@ -162,5 +172,13 @@ "delete": "Eliminar", "rename": "Renombrar", "deleteWarning": "¿Está seguro de que desea eliminar esta conversación?" + }, + "pagination": { + "rowsPerPage": "Filas por página", + "pageOf": "Página {{currentPage}} de {{totalPages}}", + "firstPage": "Primera página", + "previousPage": "Página anterior", + "nextPage": "Página siguiente", + "lastPage": "Última página" } } diff --git a/frontend/src/locale/jp.json b/frontend/src/locale/jp.json index 71aa1e15..e1e27503 100644 --- a/frontend/src/locale/jp.json +++ b/frontend/src/locale/jp.json @@ -58,15 +58,15 @@ "date": "ベクトル日付", "type": "タイプ", "tokenUsage": "トークン使用量", - "noData": "既存のドキュメントはありません" + "noData": "既存のドキュメントがありません" }, "apiKeys": { - "label": "チャットボット", + "label": "APIキー", "name": "名前", "key": "APIキー", "sourceDoc": "ソースドキュメント", "createNew": "新規作成", - "noData": "既存のチャットボットはありません" + "noData": "既存のAPIキーがありません" }, "analytics": { "label": "分析", @@ -74,26 +74,33 @@ "selectChatbot": "チャットボットを選択", "filterOptions": { "hour": "時間", - "last24Hours": "24時間", - "last7Days": "7日間", - "last15Days": "15日間", - "last30Days": "30日間" + "last24Hours": "過去24時間", + "last7Days": "過去7日間", + "last15Days": "過去15日間", + "last30Days": "過去30日間" }, "messages": "メッセージ", "tokenUsage": "トークン使用量", "feedback": "フィードバック", "filterPlaceholder": "フィルター", - "none": "なし" + "none": "なし", + "positiveFeedback": "肯定的なフィードバック", + "negativeFeedback": "否定的なフィードバック" }, "logs": { "label": "ログ", "filterByChatbot": "チャットボットでフィルター", "selectChatbot": "チャットボットを選択", "none": "なし", - "tableHeader": "API生成/チャットボットの会話" + "tableHeader": "API生成 / チャットボットの会話" }, "tools": { - "label": "ツール" + "label": "ツール", + "searchPlaceholder": "検索...", + "addTool": "ツールを追加", + "noToolsAlt": "ツールが見つかりません", + "noToolsFound": "ツールが見つかりません", + "selectToolSetup": "設定するツールを選択してください" } }, "modals": { @@ -150,6 +157,24 @@ "note": "ソースドキュメント、個人情報、および以降の会話は非公開のままになります", "create": "作成", "option": "ユーザーがより多くのクエリを実行できるようにします。" + }, + "configTool": { + "title": "ツール設定", + "type": "タイプ", + "apiKeyLabel": "APIキー / OAuth", + "apiKeyPlaceholder": "APIキー / OAuthを入力してください", + "addButton": "ツールを追加", + "closeButton": "閉じる" + }, + "prompts": { + "addPrompt": "プロンプトを追加", + "addDescription": "カスタムプロンプトを追加してDocsGPTに保存", + "editPrompt": "プロンプトを編集", + "editDescription": "カスタムプロンプトを編集してDocsGPTに保存", + "promptName": "プロンプト名", + "promptText": "プロンプトテキスト", + "save": "保存", + "nameExists": "名前が既に存在します" } }, "sharedConv": { @@ -162,5 +187,13 @@ "delete": "削除", "rename": "名前変更", "deleteWarning": "この会話を削除してもよろしいですか?" + }, + "pagination": { + "rowsPerPage": "1ページあたりの行数", + "pageOf": "ページ {{currentPage}} / {{totalPages}}", + "firstPage": "最初のページ", + "previousPage": "前のページ", + "nextPage": "次のページ", + "lastPage": "最後のページ" } } diff --git a/frontend/src/locale/ru.json b/frontend/src/locale/ru.json index c5e3deb8..f2eb2e87 100644 --- a/frontend/src/locale/ru.json +++ b/frontend/src/locale/ru.json @@ -10,6 +10,9 @@ "sourceDocs": "Источник", "none": "Нет", "cancel": "Отмена", + "help": "Помощь", + "emailUs": "Напишите нам", + "documentation": "Документация", "demo": [ { "header": "Узнайте о DocsGPT", @@ -34,7 +37,7 @@ "label": "Общие", "selectTheme": "Выбрать тему", "light": "Светлая", - "dark": "Темная", + "dark": "Тёмная", "selectLanguage": "Выбрать язык", "chunks": "Обработанные фрагменты на запрос", "prompt": "Активная подсказка", @@ -47,7 +50,7 @@ "medium": "Средний", "high": "Высокий", "unlimited": "Без ограничений", - "default": "по умолчанию" + "default": "По умолчанию" }, "documents": { "label": "Документы", @@ -58,12 +61,12 @@ "noData": "Нет существующих документов" }, "apiKeys": { - "label": "Чат-боты", + "label": "API ключи", "name": "Название", - "key": "Ключ API", - "sourceDoc": "Исходный документ", + "key": "API ключ", + "sourceDoc": "Источник документа", "createNew": "Создать новый", - "noData": "Нет существующих чат-ботов" + "noData": "Нет существующих API ключей" }, "analytics": { "label": "Аналитика", @@ -71,52 +74,59 @@ "selectChatbot": "Выбрать чат-бота", "filterOptions": { "hour": "Час", - "last24Hours": "24 часа", - "last7Days": "7 дней", - "last15Days": "15 дней", - "last30Days": "30 дней" + "last24Hours": "Последние 24 часа", + "last7Days": "Последние 7 дней", + "last15Days": "Последние 15 дней", + "last30Days": "Последние 30 дней" }, "messages": "Сообщения", - "tokenUsage": "Использование токенов", + "tokenUsage": "Использование токена", "feedback": "Обратная связь", "filterPlaceholder": "Фильтр", - "none": "Нет" + "none": "Нет", + "positiveFeedback": "Положительная обратная связь", + "negativeFeedback": "Отрицательная обратная связь" }, "logs": { "label": "Журналы", "filterByChatbot": "Фильтровать по чат-боту", "selectChatbot": "Выбрать чат-бота", "none": "Нет", - "tableHeader": "Сгенерированные API / разговоры с чат-ботом" + "tableHeader": "API сгенерировано / разговоры с чат-ботом" }, "tools": { - "label": "Инструменты" + "label": "Инструменты", + "searchPlaceholder": "Поиск...", + "addTool": "Добавить инструмент", + "noToolsAlt": "Инструменты не найдены", + "noToolsFound": "Инструменты не найдены", + "selectToolSetup": "Выберите инструмент для настройки" } }, "modals": { "uploadDoc": { - "label": "Загрузить новую документацию", + "label": "Загрузить новый документ", "select": "Выберите способ загрузки документа в DocsGPT", "file": "Загрузить с устройства", "back": "Назад", - "wait": "Пожалуйста, подождите ...", + "wait": "Пожалуйста, подождите...", "remote": "Собрать с веб-сайта", "start": "Начать чат", "name": "Имя", "choose": "Выбрать файлы", - "info": "Загрузите .pdf, .txt, .rst, .csv, .xlsx, .docx, .md, .html, .epub, .json, .pptx, .zip с ограничением до 25 МБ", + "info": "Пожалуйста, загрузите файлы .pdf, .txt, .rst, .csv, .xlsx, .docx, .md, .html, .epub, .json, .pptx, .zip размером до 25 МБ", "uploadedFiles": "Загруженные файлы", "cancel": "Отмена", "train": "Обучение", "link": "Ссылка", "urlLink": "URL-ссылка", - "repoUrl": "URL-адрес репозитория", + "repoUrl": "URL репозитория", "reddit": { "id": "ID клиента", "secret": "Секрет клиента", - "agent": "Агент пользователя", + "agent": "Пользовательский агент", "searchQueries": "Поисковые запросы", - "numberOfPosts": "Количество постов" + "numberOfPosts": "Количество сообщений" }, "drag": { "title": "Загрузить исходный файл", @@ -124,16 +134,16 @@ } }, "createAPIKey": { - "label": "Создать новый ключ API", - "apiKeyName": "Название ключа API", + "label": "Создать новый API ключ", + "apiKeyName": "Название API ключа", "chunks": "Обработанные фрагменты на запрос", - "prompt": "Выбрать активный запрос", - "sourceDoc": "Исходный документ", + "prompt": "Выбрать активную подсказку", + "sourceDoc": "Источник документа", "create": "Создать" }, "saveKey": { - "note": "Пожалуйста, сохраните свой ключ", - "disclaimer": "Это единственный раз, когда будет показан ваш ключ", + "note": "Пожалуйста, сохраните ваш ключ", + "disclaimer": "Ваш ключ будет показан только один раз.", "copy": "Копировать", "copied": "Скопировано", "confirm": "Я сохранил ключ" @@ -143,21 +153,47 @@ "delete": "Удалить" }, "shareConv": { - "label": "Создать публичную страницу для общего доступа", - "note": "Исходный документ, личная информация и дальнейший разговор останутся конфиденциальными", + "label": "Создать публичную страницу для совместного использования", + "note": "Исходный документ, личная информация и последующие разговоры останутся приватными", "create": "Создать", - "option": "Разрешить пользователям делать дополнительные запросы" + "option": "Позволить пользователям делать дополнительные запросы." + }, + "configTool": { + "title": "Настройка инструмента", + "type": "Тип", + "apiKeyLabel": "API ключ / OAuth", + "apiKeyPlaceholder": "Введите API ключ / OAuth", + "addButton": "Добавить инструмент", + "closeButton": "Закрыть" + }, + "prompts": { + "addPrompt": "Добавить подсказку", + "addDescription": "Добавить вашу пользовательскую подсказку и сохранить её в DocsGPT", + "editPrompt": "Редактировать подсказку", + "editDescription": "Редактировать вашу пользовательскую подсказку и сохранить её в DocsGPT", + "promptName": "Название подсказки", + "promptText": "Текст подсказки", + "save": "Сохранить", + "nameExists": "Название уже существует" } }, "sharedConv": { "subtitle": "Создано с помощью", "button": "Начать работу с DocsGPT", - "meta": "DocsGPT использует GenAI, пожалуйста, проверяйте важную информацию, используя источники" + "meta": "DocsGPT использует GenAI, пожалуйста, проверьте важную информацию, используя источники." }, "convTile": { "share": "Поделиться", "delete": "Удалить", "rename": "Переименовать", "deleteWarning": "Вы уверены, что хотите удалить этот разговор?" + }, + "pagination": { + "rowsPerPage": "Строк на странице", + "pageOf": "Страница {{currentPage}} из {{totalPages}}", + "firstPage": "Первая страница", + "previousPage": "Предыдущая страница", + "nextPage": "Следующая страница", + "lastPage": "Последняя страница" } } diff --git a/frontend/src/locale/zh-TW.json b/frontend/src/locale/zh-TW.json index 5e97d883..a2bba823 100644 --- a/frontend/src/locale/zh-TW.json +++ b/frontend/src/locale/zh-TW.json @@ -57,14 +57,16 @@ "name": "文件名稱", "date": "向量日期", "type": "類型", - "tokenUsage": "Token 使用量" + "tokenUsage": "Token 使用量", + "noData": "沒有現有的文件" }, "apiKeys": { - "label": "API 金鑰", + "label": "聊天機器人", "name": "名稱", "key": "API 金鑰", "sourceDoc": "來源文件", - "createNew": "新增" + "createNew": "新增", + "noData": "沒有現有的聊天機器人" }, "analytics": { "label": "分析", @@ -81,7 +83,9 @@ "tokenUsage": "Token 使用量", "feedback": "回饋", "filterPlaceholder": "篩選", - "none": "無" + "none": "無", + "positiveFeedback": "正向回饋", + "negativeFeedback": "負向回饋" }, "logs": { "label": "日誌", @@ -91,22 +95,32 @@ "tableHeader": "API 生成 / 聊天機器人會話" }, "tools": { - "label": "工具" + "label": "工具", + "searchPlaceholder": "搜尋...", + "addTool": "新增工具", + "noToolsAlt": "找不到工具", + "noToolsFound": "找不到工具", + "selectToolSetup": "選擇要設定的工具" } }, "modals": { "uploadDoc": { "label": "上傳新文件", + "select": "選擇如何將文件上傳到 DocsGPT", "file": "從檔案", "remote": "遠端", + "back": "返回", + "wait": "請稍候...", + "start": "開始對話", "name": "名稱", "choose": "選擇檔案", - "info": "請上傳 .pdf, .txt, .rst, .docx, .md, .json, .pptx, .zip 檔案,大小限制為 25MB", + "info": "請上傳 .pdf, .txt, .rst, .csv, .xlsx, .docx, .md, .html, .epub, .json, .pptx, .zip 檔案,大小限制為 25MB", "uploadedFiles": "已上傳的檔案", "cancel": "取消", "train": "訓練", "link": "連結", "urlLink": "URL 連結", + "repoUrl": "儲存庫 URL", "reddit": { "id": "用戶端 ID", "secret": "用戶端金鑰", @@ -141,7 +155,26 @@ "shareConv": { "label": "建立公開頁面以分享", "note": "來源文件、個人資訊和後續對話將保持私密", - "create": "建立" + "create": "建立", + "option": "允許使用者進行更多查詢" + }, + "configTool": { + "title": "工具設定", + "type": "類型", + "apiKeyLabel": "API 金鑰 / OAuth", + "apiKeyPlaceholder": "輸入 API 金鑰 / OAuth", + "addButton": "新增工具", + "closeButton": "關閉" + }, + "prompts": { + "addPrompt": "新增提示", + "addDescription": "新增自定義提示並儲存到 DocsGPT", + "editPrompt": "編輯提示", + "editDescription": "編輯自定義提示並儲存到 DocsGPT", + "promptName": "提示名稱", + "promptText": "提示文字", + "save": "儲存", + "nameExists": "名稱已存在" } }, "sharedConv": { @@ -154,5 +187,13 @@ "delete": "刪除", "rename": "重新命名", "deleteWarning": "您確定要刪除這個對話嗎?" + }, + "pagination": { + "rowsPerPage": "每頁行數", + "pageOf": "第 {{currentPage}} 頁,共 {{totalPages}} 頁", + "firstPage": "第一頁", + "previousPage": "上一頁", + "nextPage": "下一頁", + "lastPage": "最後一頁" } } diff --git a/frontend/src/locale/zh.json b/frontend/src/locale/zh.json index afa15f7b..0ca94fe2 100644 --- a/frontend/src/locale/zh.json +++ b/frontend/src/locale/zh.json @@ -83,7 +83,9 @@ "tokenUsage": "令牌使用", "feedback": "反馈", "filterPlaceholder": "筛选", - "none": "无" + "none": "无", + "positiveFeedback": "正向反馈", + "negativeFeedback": "负向反馈" }, "logs": { "label": "日志", @@ -93,7 +95,12 @@ "tableHeader": "API 生成 / 聊天机器人会话" }, "tools": { - "label": "工具" + "label": "工具", + "searchPlaceholder": "搜索...", + "addTool": "添加工具", + "noToolsAlt": "未找到工具", + "noToolsFound": "未找到工具", + "selectToolSetup": "选择要设置的工具" } }, "modals": { @@ -150,6 +157,24 @@ "note": "源文档、个人信息和后续对话将保持私密", "create": "创建", "option": "允许用户进行更多查询。" + }, + "configTool": { + "title": "工具配置", + "type": "类型", + "apiKeyLabel": "API 密钥 / OAuth", + "apiKeyPlaceholder": "输入 API 密钥 / OAuth", + "addButton": "添加工具", + "closeButton": "关闭" + }, + "prompts": { + "addPrompt": "添加提示", + "addDescription": "添加自定义提示并保存到 DocsGPT", + "editPrompt": "编辑提示", + "editDescription": "编辑自定义提示并保存到 DocsGPT", + "promptName": "提示名称", + "promptText": "提示文本", + "save": "保存", + "nameExists": "名称已存在" } }, "sharedConv": { @@ -162,5 +187,13 @@ "delete": "删除", "rename": "重命名", "deleteWarning": "您确定要删除此对话吗?" + }, + "pagination": { + "rowsPerPage": "每页行数", + "pageOf": "第 {{currentPage}} 页,共 {{totalPages}} 页", + "firstPage": "第一页", + "previousPage": "上一页", + "nextPage": "下一页", + "lastPage": "最后一页" } } diff --git a/frontend/src/modals/ConfigToolModal.tsx b/frontend/src/modals/ConfigToolModal.tsx index 96bb15be..4a8ca881 100644 --- a/frontend/src/modals/ConfigToolModal.tsx +++ b/frontend/src/modals/ConfigToolModal.tsx @@ -1,4 +1,5 @@ import React from 'react'; +import { useTranslation } from 'react-i18next'; import Exit from '../assets/exit.svg'; import Input from '../components/Input'; @@ -17,6 +18,7 @@ export default function ConfigToolModal({ tool: AvailableTool | null; getUserTools: () => void; }) { + const { t } = useTranslation(); const [authKey, setAuthKey] = React.useState(''); const handleAddTool = (tool: AvailableTool) => { @@ -52,21 +54,22 @@ export default function ConfigToolModal({

- Tool Config + {t('modals.configTool.title')}

- Type: {tool?.name} + {t('modals.configTool.type')}:{' '} + {tool?.name}

- API Key / Oauth + {t('modals.configTool.apiKeyLabel')} setAuthKey(e.target.value)} borderVariant="thin" - placeholder="Enter API Key / Oauth" + placeholder={t('modals.configTool.apiKeyPlaceholder')} >
@@ -76,7 +79,7 @@ export default function ConfigToolModal({ }} className="rounded-3xl bg-purple-30 px-5 py-2 text-sm text-white transition-all hover:bg-[#6F3FD1]" > - Add Tool + {t('modals.configTool.addButton')}
diff --git a/frontend/src/modals/ShareConversationModal.tsx b/frontend/src/modals/ShareConversationModal.tsx index 3f87839e..44156761 100644 --- a/frontend/src/modals/ShareConversationModal.tsx +++ b/frontend/src/modals/ShareConversationModal.tsx @@ -101,11 +101,17 @@ export const ShareConversationModal = ({ return (
-

{t('modals.shareConv.label')}

-

{t('modals.shareConv.note')}

+

+ {t('modals.shareConv.label')} +

+

+ {t('modals.shareConv.note')} +

- {t('modals.shareConv.option')} -