From 502759fae64d6d1c69e2001ca3a538e862704389 Mon Sep 17 00:00:00 2001 From: n4ze3m Date: Sun, 24 Mar 2024 17:07:21 +0530 Subject: [PATCH] Update language files and fix UI issues --- src/assets/locale/en/common.json | 6 +- src/assets/locale/en/option-playground.json | 1 - src/assets/locale/en/option.json | 6 + src/assets/locale/en/playground.json | 27 +++ src/assets/locale/ml/common.json | 49 ++++ src/assets/locale/ml/option.json | 215 ++++++++++++++++++ src/assets/locale/ml/playground.json | 27 +++ .../Layouts/SettingsOptionLayout.tsx | 2 +- src/components/Option/Models/index.tsx | 8 +- .../Option/Playground/PlaygroundEmpty.tsx | 10 +- .../Option/Playground/PlaygroundForm.tsx | 38 ++-- src/components/Option/Prompt/index.tsx | 3 +- src/components/Option/Settings/other.tsx | 26 +++ src/components/Option/Sidebar.tsx | 12 +- src/entries/background.ts | 19 +- src/entries/options/App.tsx | 15 +- src/entries/sidepanel/App.tsx | 15 +- src/hooks/useI18n.tsx | 17 ++ src/i18n/index.ts | 4 +- src/i18n/lang/en.ts | 4 +- src/i18n/lang/ml.ts | 10 + src/i18n/support-language.ts | 11 + src/public/_locales/en/messages.json | 3 + src/public/_locales/ml/messages.json | 11 + 24 files changed, 485 insertions(+), 54 deletions(-) delete mode 100644 src/assets/locale/en/option-playground.json create mode 100644 src/assets/locale/en/playground.json create mode 100644 src/assets/locale/ml/common.json create mode 100644 src/assets/locale/ml/option.json create mode 100644 src/assets/locale/ml/playground.json create mode 100644 src/hooks/useI18n.tsx create mode 100644 src/i18n/lang/ml.ts create mode 100644 src/i18n/support-language.ts create mode 100644 src/public/_locales/ml/messages.json diff --git a/src/assets/locale/en/common.json b/src/assets/locale/en/common.json index 83bdabe..03f0000 100644 --- a/src/assets/locale/en/common.json +++ b/src/assets/locale/en/common.json @@ -2,6 +2,7 @@ "save": "Save", "saved": "Saved", "cancel": "Cancel", + "retry": "Retry", "share": { "tooltip": { "share": "Share" @@ -41,5 +42,8 @@ "saveAndSubmit": "Save & Submit", "editMessage": { "placeholder": "Type a message..." - } + }, + "submit": "Submit", + "noData": "No data", + "noHistory": "No chat history" } \ No newline at end of file diff --git a/src/assets/locale/en/option-playground.json b/src/assets/locale/en/option-playground.json deleted file mode 100644 index 9e26dfe..0000000 --- a/src/assets/locale/en/option-playground.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/src/assets/locale/en/option.json b/src/assets/locale/en/option.json index 55d3032..523318d 100644 --- a/src/assets/locale/en/option.json +++ b/src/assets/locale/en/option.json @@ -8,6 +8,8 @@ "error": "Error", "somethingWentWrong": "Something went wrong", "validationSelectModel": "Please select a model to continue", + "deleteHistoryConfirmation": "Are you sure you want to delete this history?", + "editHistoryTitle": "Enter a new title", "generalSettings": { "title": "General Settings", "heading": "Web UI Settings", @@ -16,6 +18,10 @@ "label": "Speech Recognition Language", "placeholder": "Select a language" }, + "language": { + "label": "Language", + "placeholder": "Select a language" + }, "darkMode": { "label": "Change Theme", "options": { diff --git a/src/assets/locale/en/playground.json b/src/assets/locale/en/playground.json new file mode 100644 index 0000000..6a91280 --- /dev/null +++ b/src/assets/locale/en/playground.json @@ -0,0 +1,27 @@ +{ + "ollamaState": { + "searching": "Searching for Your Ollama ๐Ÿฆ™", + "running": "Ollama is running ๐Ÿฆ™", + "notRunning": "Unable to connect to Ollama ๐Ÿฆ™" + }, + "formError": { + "noModel": "Please select a model", + "noEmbeddingModel": "Please set an embedding model on the Settings > Ollama page" + }, + "form": { + "textarea": { + "placeholder": "Type a message..." + }, + "webSearch": { + "on": "On", + "off": "Off" + } + }, + "tooltip": { + "searchInternet": "Search Internet", + "speechToText": "Speech to Text", + "uploadImage": "Upload Image", + "stopStreaming": "Stop Streaming" + }, + "sendWhenEnter": "Send when Enter pressed" +} \ No newline at end of file diff --git a/src/assets/locale/ml/common.json b/src/assets/locale/ml/common.json new file mode 100644 index 0000000..0b96d83 --- /dev/null +++ b/src/assets/locale/ml/common.json @@ -0,0 +1,49 @@ +{ + "save": "เดธเต‡เดตเต เดšเต†เดฏเตเดฏเตเด•", + "saved": "เดธเด‚เดฐเด•เตเดทเดฟเดšเตเดšเต", + "cancel": "เดฑเดฆเตเดฆเดพเด•เตเด•เตเด•", + "retry": "เดตเต€เดฃเตเดŸเตเด‚ เดถเตเดฐเดฎเดฟเด•เตเด•เตเด•", + "share": { + "tooltip": { + "share": "เดชเด™เตเด•เดฟเดŸเตเด•" + }, + "modal": { + "title": "เดšเดพเดฑเตเดฑเต เดฒเดฟเด™เตเด•เต เดชเด™เตเด•เดฟเดŸเตเด•" + }, + "form": { + "defaultValue": { + "name": "เด…เดœเตเดžเดพเดคเดจเตโ€", + "title": "เดชเต‡เดฐเดฟเดฒเตเดฒเดพเดคเตเดค เดšเดพเดฑเตเดฑเต" + }, + "title": { + "label": "เดšเดพเดฑเตเดฑเต เดคเดฒเด•เตเด•เต†เดŸเตเดŸเต", + "placeholder": "เดšเดพเดฑเตเดฑเต เดคเดฒเด•เตเด•เต†เดŸเตเดŸเต เดจเดฒเตเด•เตเด•", + "required": "เดšเดพเดฑเตเดฑเต เดคเดฒเด•เตเด•เต†เดŸเตเดŸเต เด†เดตเดถเตเดฏเดฎเดพเดฃเต" + }, + "name": { + "label": "เดจเดฟเด™เตเด™เดณเตเดŸเต† เดชเต‡เดฐเต", + "placeholder": "เดจเดฟเด™เตเด™เดณเตเดŸเต† เดชเต‡เดฐเต เดจเดฒเตเด•เตเด•", + "required": "เดจเดฟเด™เตเด™เดณเตเดŸเต† เดชเต‡เดฐเต เด†เดตเดถเตเดฏเดฎเดพเดฃเต" + }, + "btn": { + "save": "เดฒเดฟเด™เตเด•เต เดœเดจเดฑเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเด•", + "saving": "เดฒเดฟเด™เตเด•เต เดœเดจเดฑเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเดจเตเดจเต..." + } + }, + "notification": { + "successGenerate": "เดฒเดฟเด™เตเด•เต เด•เตเดฒเดฟเดชเตเดฌเต‹เดฐเตโ€เดกเดฟเดฒเต‡เด•เตเด•เต เดชเด•เดฐเตโ€เดคเตเดคเดฟ", + "failGenerate": "เดฒเดฟเด™เตเด•เต เดœเดจเดฑเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดฒเตโ€ เดชเดฐเดพเดœเดฏเดชเตเดชเต†เดŸเตเดŸเต" + } + }, + "copyToClipboard": "เด•เตเดฒเดฟเดชเตเดฌเต‹เดฐเตโ€เดกเดฟเดฒเต‡เด•เตเด•เต เดชเด•เดฐเตโ€เดคเตเดคเตเด•", + "webSearch": "เดตเต†เดฌเต เดคเดฟเดฐเดฏเตเดจเตเดจเต", + "regenerate": "เดตเต€เดฃเตเดŸเตเด‚ เดœเดจเดฑเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเด•", + "edit": "เดŽเดกเดฟเดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเด•", + "saveAndSubmit": "เดธเต‡เดตเต เดšเต†เดฏเตเดคเต เดธเดฎเดฐเตโ€เดชเตเดชเดฟเด•เตเด•เตเด•", + "editMessage": { + "placeholder": "เด’เดฐเต เดธเดจเตเดฆเต‡เดถเด‚ เดŸเตˆเดชเตเดชเต เดšเต†เดฏเตเดฏเตเด•..." + }, + "submit": "เดธเดฎเตผเดชเตเดชเดฟเด•เตเด•เตเด•", + "noData": "เดกเดพเดฑเตเดฑ เดฒเดญเตเดฏเดฎเดฒเตเดฒ", + "noHistory": "เดšเดพเดฑเตเดฑเต เดšเดฐเดฟเดคเตเดฐเด‚ เดฒเดญเตเดฏเดฎเดฒเตเดฒ" +} \ No newline at end of file diff --git a/src/assets/locale/ml/option.json b/src/assets/locale/ml/option.json new file mode 100644 index 0000000..7e17e77 --- /dev/null +++ b/src/assets/locale/ml/option.json @@ -0,0 +1,215 @@ +{ + "newChat": "เดชเตเดคเดฟเดฏ เดšเดพเดฑเตเดฑเต", + "selectAModel": "เด’เดฐเต เดฎเต‹เดกเดฒเตโ€ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเด•", + "selectAPrompt": "เด’เดฐเต เดชเตเดฐเต‹เด‚เดชเตเดฑเตเดฑเต เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเด•", + "githubRepository": "เด—เดฟเดฑเตเดฑเตเดนเดฌเต เดฑเต†เดชเตเดชเต‹เดธเดฟเดฑเตเดฑเดฑเดฟ", + "settings": "เด•เตเดฐเดฎเต€เด•เดฐเดฃเด™เตเด™เดณเตโ€", + "sidebarTitle": "เดšเดพเดฑเตเดฑเต เดšเดฐเดฟเดคเตเดฐเด‚", + "error": "เดชเดฟเดถเด•เต", + "somethingWentWrong": "เดŽเดจเตเดคเต‹ เดคเต†เดฑเตเดฑเดพเดฏเดฟ", + "deleteHistoryConfirmation": "เดจเดฟเด™เตเด™เดณเตเดŸเต† เดšเดพเดฑเตเดฑเต เดšเดฐเดฟเดคเตเดฐเด‚ เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เดฃเดฎเต†เดจเตเดจเต เดคเต€เตผเดšเตเดšเดฏเดพเดฃเต‹?", + "editHistoryTitle": "เดšเดพเดฑเตเดฑเต title เดŽเดกเดฟเดฑเตเดฑเตเดšเต†เดฏเตเดฏเตเด•", + "validationSelectModel": "เดคเตเดŸเดฐเตเดจเตเดจเดคเดฟเดจเต เด’เดฐเต เดฎเต‹เดกเดฒเตโ€ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเด•", + "generalSettings": { + "title": "เดชเตŠเดคเตเดตเดพเดฏ เด•เตเดฐเดฎเต€เด•เดฐเดฃเด™เตเด™เดณเตโ€", + "heading": "เดตเต†เดฌเต UI เด•เตเดฐเดฎเต€เด•เดฐเดฃเด™เตเด™เดณเตโ€", + "settings": { + "speechRecognitionLang": { + "label": "เดธเด‚เดญเดพเดทเดฃ เดคเดฟเดฐเดฟเดšเตเดšเดฑเดฟเดฏเดฒเตโ€ เดญเดพเดท", + "placeholder": "เด’เดฐเต เดญเดพเดท เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเด•" + }, + "language": { + "label": "เดญเดพเดท", + "placeholder": "เด’เดฐเต เดญเดพเดท เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเด•" + }, + "darkMode": { + "label": "เดคเต€เด‚ เดฎเดพเดฑเตเดฑเตเด•", + "options": { + "light": "เดฒเตˆเดฑเตเดฑเต", + "dark": "เดกเดพเดฐเตโ€เด•เตเด•เต" + } + }, + "searchMode": { + "label": "เดธเดพเดงเดพเดฐเดฃ เด‡เดจเตเดฑเตผเดจเต†เดฑเตเดฑเต เด…เดจเตเดตเต‡เดทเดฃเด‚ เดจเดŸเดคเตเดคเตเด•" + }, + "deleteChatHistory": { + "label": "เดšเดพเดฑเตเดฑเต เดšเดฐเดฟเดคเตเดฐเด‚ เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เตเด•", + "button": "เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เตเด•", + "confirm": "เดจเดฟเด™เตเด™เดณเตเดŸเต† เดšเดพเดฑเตเดฑเต เดšเดฐเดฟเดคเตเดฐเด‚ เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เดฃเดฎเต†เดจเตเดจเต เดคเต€เตผเดšเตเดšเดฏเดพเดฃเต‹? เดˆ เดชเตเดฐเดตเตผเดคเตเดคเดจเด‚ เดชเดฟเดจเตเดจเต€เดŸเต เดชเดฟเตปเดตเดฒเดฟเด•เตเด•เดพเดจเดพเด•เดฟเดฒเตเดฒ." + } + } + }, + "manageModels": { + "title": "เดฎเต‹เดกเดฒเตเด•เดณเตโ€ เด•เตˆเด•เดพเดฐเตเดฏเด‚ เดšเต†เดฏเตเดฏเตเด•", + "addBtn": "เดชเตเดคเดฟเดฏ เดฎเต‹เดกเดฒเตโ€ เดšเต‡เดฐเตโ€เด•เตเด•เตเด•", + "columns": { + "name": "เดชเต‡เดฐเต", + "digest": "เดกเตˆเดœเดธเตเดฑเตเดฑเต", + "modifiedAt": "เด…เดตเดธเดพเดจเดฎเดพเดฏเดฟ เดชเดฐเดฟเดทเตโ€Œเด•เดฐเดฟเดšเตเดšเดคเต", + "size": "เดตเดฒเตเดชเตเดชเด‚", + "actions": "เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เตพ" + }, + "expandedColumns": { + "parentModel": "เดชเดพเดฐเดจเตเดฑเต เดฎเต‹เดกเดฒเตโ€", + "format": "เดซเต‹เดฐเตโ€เดฎเดพเดฑเตเดฑเต", + "family": "เด•เตเดŸเตเด‚เดฌเด‚", + "parameterSize": "เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฐเตโ€ เดตเดฒเตเดชเตเดชเด‚", + "quantizationLevel": "เด•เตเดตเดพเดฃเตเดŸเตˆเดธเต‡เดทเดจเตโ€ เดฒเต†เดตเดฒเตโ€" + }, + "tooltip": { + "delete": "เดฎเต‹เดกเดฒเตโ€ เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เตเด•", + "repull": "เดฎเต‹เดกเดฒเตโ€ เดตเต€เดฃเตเดŸเตเด‚ เดฒเดญเตเดฏเดฎเดพเด•เตเด•เตเด•" + }, + "confirm": { + "delete": "เดˆ เดฎเต‹เดกเดฒเตโ€ เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เดฃเดฎเต†เดจเตเดจเต เดคเต€เตผเดšเตเดšเดฏเดพเดฃเต‹?", + "repull": "เดˆ เดฎเต‹เดกเดฒเตโ€ เดตเต€เดฃเตเดŸเตเด‚ เดฒเดญเตเดฏเดฎเดพเด•เตเด•เดฃเดฎเต†เดจเตเดจเต เดคเต€เตผเดšเตเดšเดฏเดพเดฃเต‹?" + }, + "modal": { + "title": "เดชเตเดคเดฟเดฏ เดฎเต‹เดกเดฒเตโ€ เดšเต‡เดฐเตโ€เด•เตเด•เตเด•", + "placeholder": "เดฎเต‹เดกเดฒเตโ€ เดชเต‡เดฐเต เดจเดฒเตโ€เด•เตเด•", + "pull": "เดฎเต‹เดกเดฒเตโ€ เดฒเดญเตเดฏเดฎเดพเด•เตเด•เตเด•" + }, + "notification": { + "pullModel": "เดฎเต‹เดกเดฒเตโ€ เดฒเดญเตเดฏเดฎเดพเด•เตเด•เตเดจเตเดจเต", + "pullModelDescription": "{{modelName}} เดฎเต‹เดกเดฒเตโ€ เดฒเดญเตเดฏเดฎเดพเด•เตเด•เตเดจเตเดจเต. เด•เต‚เดŸเตเดคเดฒเตโ€ เดตเดฟเดตเดฐเด™เตเด™เดณเตโ€เด•เตเด•เดพเดฏเดฟ เดŽเด•เตโ€Œเดธเตเดฑเตเดฑเต†เดจเตโ€เดทเดจเตโ€ เดเด•เตเด•เดฃเตโ€ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเด•.", + "success": "เดตเดฟเดœเดฏเด‚", + "error": "เดชเดฟเดถเด•เต", + "successDescription": "เดฎเต‹เดกเดฒเตโ€ เดตเดฟเดœเดฏเด•เดฐเดฎเดพเดฏเดฟ เดฒเดญเตเดฏเดฎเดพเด•เตเด•เดฟ", + "successDeleteDescription": "เดฎเต‹เดกเดฒเตโ€ เดตเดฟเดœเดฏเด•เดฐเดฎเดพเดฏเดฟ เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เดฟ", + "someError": "เดŽเดจเตเดคเต‹ เดคเต†เดฑเตเดฑเดพเดฏเดฟ. เดฆเดฏเดตเดพเดฏเดฟ เดชเดฟเดจเตเดจเต€เดŸเต เดตเต€เดฃเตเดŸเตเด‚ เดถเตเดฐเดฎเดฟเด•เตเด•เตเด•" + } + }, + "managePrompts": { + "title": "เดชเตเดฐเต‹เด‚เดชเตเดฑเตเดฑเตเด•เดณเตโ€ เด•เตˆเด•เดพเดฐเตเดฏเด‚ เดšเต†เดฏเตเดฏเตเด•", + "addBtn": "เดชเตเดคเดฟเดฏ เดชเตเดฐเต‹เด‚เดชเตเดฑเตเดฑเต เดšเต‡เดฐเตโ€เด•เตเด•เตเด•", + "columns": { + "title": "เดคเดฒเด•เตเด•เต†เดŸเตเดŸเต", + "prompt": "เดชเตเดฐเต‹เด‚เดชเตเดฑเตเดฑเต", + "type": "เดชเตเดฐเต‹เด‚เดชเตเดฑเตเดฑเต เดคเดฐเด‚", + "actions": "เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เตพ" + }, + "systemPrompt": "เดธเดฟเดธเตเดฑเตเดฑเด‚ เดชเตเดฐเต‹เด‚เดชเตเดฑเตเดฑเต", + "quickPrompt": "เดตเต‡เด—เดคเตเดคเดฟเดฒเตเดณเตเดณ เดชเตเดฐเต‹เด‚เดชเตเดฑเตเดฑเต", + "tooltip": { + "delete": "เดชเตเดฐเต‹เด‚เดชเตเดฑเตเดฑเต เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เตเด•", + "edit": "เดชเตเดฐเต‹เด‚เดชเตเดฑเตเดฑเต เดŽเดกเดฟเดฑเตเดฑเตเดšเต†เดฏเตเดฏเตเด•" + }, + "confirm": { + "delete": "เดˆ เดชเตเดฐเต‹เด‚เดชเตเดฑเตเดฑเต เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เดฃเดฎเต†เดจเตเดจเต เดคเต€เตผเดšเตเดšเดฏเดพเดฃเต‹? เดˆ เดชเตเดฐเดตเตผเดคเตเดคเดจเด‚ เดชเดฟเดจเตเดจเต€เดŸเต เดชเดฟเตปเดตเดฒเดฟเด•เตเด•เดพเดจเดพเด•เดฟเดฒเตเดฒ." + }, + "modal": { + "addTitle": "เดชเตเดคเดฟเดฏ เดชเตเดฐเต‹เด‚เดชเตเดฑเตเดฑเต เดšเต‡เดฐเตโ€เด•เตเด•เตเด•", + "editTitle": "เดชเตเดฐเต‹เด‚เดชเตเดฑเตเดฑเต เดŽเดกเดฟเดฑเตเดฑเตเดšเต†เดฏเตเดฏเตเด•" + }, + "form": { + "title": { + "label": "เดคเดฒเด•เตเด•เต†เดŸเตเดŸเต", + "placeholder": "เดŽเดจเตโ€เดฑเต† เด…เดคเตเดฒเตเดฏเดฎเดพเดฏ เดชเตเดฐเต‹เด‚เดชเตเดฑเตเดฑเต", + "required": "เดฆเดฏเดตเดพเดฏเดฟ เด’เดฐเต เดคเดฒเด•เตเด•เต†เดŸเตเดŸเต เดจเดฒเตเด•เตเด•" + }, + "prompt": { + "label": "เดชเตเดฐเต‹เด‚เดชเตเดฑเตเดฑเต", + "placeholder": "เดชเตเดฐเต‹เด‚เดชเตเดฑเตเดฑเต เดจเดฒเตเด•เตเด•", + "required": "เดฆเดฏเดตเดพเดฏเดฟ เด’เดฐเต เดชเตเดฐเต‹เด‚เดชเตเดฑเตเดฑเต เดจเดฒเตเด•เตเด•", + "help": "เดจเดฟเด™เตเด™เดณเตโ€เด•เตเด•เต {key} เดŽเดจเตเดจ เดฐเต€เดคเดฟเดฏเดฟเดฒเตโ€ เดชเตเดฐเต‹เด‚เดชเตเดฑเตเดฑเดฟเดฒเตโ€ เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเตเด•เดณเตโ€ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเดตเตเดจเตเดจเดคเดพเดฃเต." + }, + "isSystem": { + "label": "เดธเดฟเดธเตเดฑเตเดฑเด‚ เดชเตเดฐเต‹เด‚เดชเตเดฑเตเดฑเต เด†เดฃเต‹" + }, + "btnSave": { + "saving": "เดชเตเดฐเต‹เด‚เดชเตเดฑเตเดฑเต เดšเต‡เดฐเตโ€เด•เตเด•เตเดจเตเดจเต...", + "save": "เดชเตเดฐเต‹เด‚เดชเตเดฑเตเดฑเต เดšเต‡เดฐเตโ€เด•เตเด•เตเด•" + }, + "btnEdit": { + "saving": "เดชเตเดฐเต‹เด‚เดชเตเดฑเตเดฑเต เด…เดชเตเดกเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเดจเตเดจเต...", + "save": "เดชเตเดฐเต‹เด‚เดชเตเดฑเตเดฑเต เด…เดชเตเดกเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเด•" + } + }, + "notification": { + "addSuccess": "เดชเตเดฐเต‹เด‚เดชเตเดฑเตเดฑเต เดšเต‡เตผเดคเตเดคเต", + "addSuccessDesc": "เดชเตเดฐเต‹เด‚เดชเตเดฑเตเดฑเต เดตเดฟเดœเดฏเด•เดฐเดฎเดพเดฏเดฟ เดšเต‡เตผเดคเตเดคเต", + "error": "เดชเดฟเดถเด•เต", + "someError": "เดŽเดจเตเดคเต‹ เดคเต†เดฑเตเดฑเดพเดฏเดฟ. เดฆเดฏเดตเดพเดฏเดฟ เดชเดฟเดจเตเดจเต€เดŸเต เดตเต€เดฃเตเดŸเตเด‚ เดถเตเดฐเดฎเดฟเด•เตเด•เตเด•", + "updatedSuccess": "เดชเตเดฐเต‹เด‚เดชเตเดฑเตเดฑเต เด…เดชเตเดกเต‡เดฑเตเดฑเต เดšเต†เดฏเตโ€Œเดคเต", + "updatedSuccessDesc": "เดชเตเดฐเต‹เด‚เดชเตเดฑเตเดฑเต เดตเดฟเดœเดฏเด•เดฐเดฎเดพเดฏเดฟ เด…เดชเตเดกเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดคเต", + "deletedSuccess": "เดชเตเดฐเต‹เด‚เดชเตเดฑเตเดฑเต เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เดฟ", + "deletedSuccessDesc": "เดชเตเดฐเต‹เด‚เดชเตเดฑเตเดฑเต เดตเดฟเดœเดฏเด•เดฐเดฎเดพเดฏเดฟ เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เดฟ" + } + }, + "manageShare": { + "title": "เดชเด™เตเด•เดฟเดŸเตเดจเตเดจเดคเต เด•เตˆเด•เดพเดฐเตเดฏเด‚ เดšเต†เดฏเตเดฏเตเด•", + "heading": "เดชเต‡เดœเต เดชเด™เตเด•เดฟเดŸเดพเดจเตเดณเตเดณ URL เด•เต‹เตบเดซเดฟเด—เตผ เดšเต†เดฏเตเดฏเตเด•", + "form": { + "url": { + "label": "เดชเต‡เดœเต เดชเด™เตเด•เดฟเดŸเดพเดจเตเดณเตเดณ URL", + "placeholder": "เดชเต‡เดœเต เดชเด™เตเด•เดฟเดŸเดพเดจเตเดณเตเดณ URL เดจเดฒเตเด•เตเด•", + "required": "เดฆเดฏเดตเดพเดฏเดฟ เดจเดฟเด™เตเด™เดณเตเดŸเต† เดชเต‡เดœเต เดชเด™เตเด•เดฟเดŸเดพเดจเตเดณเตเดณ URL เดจเดฒเตเด•เตเด•!", + "help": "เดธเตเดตเด•เดพเดฐเตเดฏเดคเด•เตเด•เดพเดฏเดฟ, เดจเดฟเด™เตเด™เดณเตโ€เด•เตเด•เต เดธเตเดตเดจเตเดคเดฎเดพเดฏเดฟ เดชเต‡เดœเต เดชเด™เตเด•เดฟเดŸเตเดจเตเดจ เดธเต—เด•เดฐเตเดฏเด‚ เดนเต‹เดธเตเดฑเตเดฑเต เดšเต†เดฏเตเดฏเดพเดจเตเด‚ เด…เดตเดฟเดŸเต†เดฏเตเดณเตเดณ URL เด‡เดตเดฟเดŸเต† เดจเดฒเตเด•เดพเดจเตเด‚ เด•เดดเดฟเดฏเตเด‚. เด•เต‚เดŸเตเดคเดฒเตโ€ เด…เดฑเดฟเดฏเตเด•." + } + }, + "webshare": { + "heading": "เดตเต†เดฌเต เดชเด™เตเด•เดฟเดŸเดฒเตโ€", + "columns": { + "title": "เดคเดฒเด•เตเด•เต†เดŸเตเดŸเต", + "url": "URL", + "actions": "เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เตพ" + }, + "tooltip": { + "delete": "เดชเด™เตเด•เดฟเดŸเดฒเตโ€ เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เตเด•" + }, + "confirm": { + "delete": "เดˆ เดชเด™เตเด•เดฟเดŸเดฒเตโ€ เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เดฃเดฎเต†เดจเตเดจเต เดคเต€เตผเดšเตเดšเดฏเดพเดฃเต‹? เดˆ เดชเตเดฐเดตเตผเดคเตเดคเดจเด‚ เดชเดฟเดจเตเดจเต€เดŸเต เดชเดฟเตปเดตเดฒเดฟเด•เตเด•เดพเดจเดพเด•เดฟเดฒเตเดฒ." + } + }, + "notification": { + "pageShareSuccess": "เดชเต‡เดœเต เดชเด™เตเด•เดฟเดŸเดพเดจเตเดณเตเดณ URL เดตเดฟเดœเดฏเด•เดฐเดฎเดพเดฏเดฟ เด…เดชเตเดกเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดคเต", + "someError": "เดŽเดจเตเดคเต‹ เดคเต†เดฑเตเดฑเดพเดฏเดฟ. เดฆเดฏเดตเดพเดฏเดฟ เดชเดฟเดจเตเดจเต€เดŸเต เดตเต€เดฃเตเดŸเตเด‚ เดถเตเดฐเดฎเดฟเด•เตเด•เตเด•", + "webShareDeleteSuccess": "เดตเต†เดฌเต เดชเด™เตเด•เดฟเดŸเดฒเตโ€ เดตเดฟเดœเดฏเด•เดฐเดฎเดพเดฏเดฟ เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เดฟ" + } + }, + "ollamaSettings": { + "title": "เด’เดฒเตเดฒเดพเดฎเดพ เด•เตเดฐเดฎเต€เด•เดฐเดฃเด™เตเด™เดณเตโ€", + "heading": "เด’เดฒเตเดฒเดพเดฎเดพ เด•เต‹เตบเดซเดฟเด—เตผ เดšเต†เดฏเตเดฏเตเด•", + "settings": { + "ollamaUrl": { + "label": "เด’เดฒเตเดฒเดพเดฎเดพ URL", + "placeholder": "เด’เดฒเตเดฒเดพเดฎเดพ URL เดจเดฒเตเด•เตเด•" + }, + "ragSettings": { + "label": "RAG เด•เตเดฐเดฎเต€เด•เดฐเดฃเด™เตเด™เดณเตโ€", + "model": { + "label": "เดŽเด‚เดฌเต†เดกเดฟเด‚เด—เต เดฎเต‹เดกเดฒเตโ€", + "required": "เดฆเดฏเดตเดพเดฏเดฟ เด’เดฐเต เดฎเต‹เดกเดฒเตโ€ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเด•", + "help": "`nomic-embed-text` เดชเต‹เดฒเตเดณเตเดณ เดŽเด‚เดฌเต†เดกเดฟเด‚เด—เต เดฎเต‹เดกเดฒเตเด•เดณเตโ€ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเต เดตเดณเดฐเต† เดจเดจเตเดจเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด‚.", + "placeholder": "เด’เดฐเต เดฎเต‹เดกเดฒเตโ€ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเด•" + }, + "chunkSize": { + "label": "เดšเด™เตเด•เต เดตเดฒเตเดชเตเดชเด‚", + "placeholder": "เดšเด™เตเด•เต เดตเดฒเตเดชเตเดชเด‚ เดจเดฒเตเด•เตเด•", + "required": "เดฆเดฏเดตเดพเดฏเดฟ เดšเด™เตเด•เต เดตเดฒเตเดชเตเดชเด‚ เดจเดฒเตเด•เตเด•" + }, + "chunkOverlap": { + "label": "เดšเด™เตเด•เต เด“เดตเดฐเตโ€เดฒเดพเดชเตเดชเต", + "placeholder": "เดšเด™เตเด•เต เด“เดตเดฐเตโ€เดฒเดพเดชเตเดชเต เดจเดฒเตเด•เตเด•", + "required": "เดฆเดฏเดตเดพเดฏเดฟ เดšเด™เตเด•เต เด“เดตเดฐเตโ€เดฒเดพเดชเตเดชเต เดจเดฒเตเด•เตเด•" + } + }, + "prompt": { + "label": "RAG เดชเตเดฐเต‹เด‚เดชเตเดฑเตเดฑเต เด•เต‹เตบเดซเดฟเด—เตผ เดšเต†เดฏเตเดฏเตเด•", + "option1": "เดธเดพเดงเดพเดฐเดฃ", + "option2": "เดตเต†เดฌเต", + "alert": "เดธเดฟเดธเตเดฑเตเดฑเด‚ เดชเตเดฐเต‹เด‚เดชเตเดฑเตเดฑเต เด‡เดตเดฟเดŸเต† เด•เต‹เตบเดซเดฟเด—เตผ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต เดชเดดเดฏเต—เด–เดฟเด•เดฎเดพเดฏเดฟ. เดฆเดฏเดตเดพเดฏเดฟ เดชเตเดฐเต‹เด‚เดชเตเดฑเตเดฑเตเด•เดณเตโ€ เดšเต‡เดฐเตโ€เด•เตเด•เดพเดจเต‹ เดŽเดกเดฟเดฑเตเดฑเตเดšเต†เดฏเตเดฏเดพเดจเต‹ เดฎเดพเดจเต‡เดœเต เดชเตเดฐเต‹เด‚เดชเตเดฑเตเดฑเตโ€Œเดธเต เดธเต†เด•เตเดทเดจเตโ€ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด•. เดˆ เดธเต†เด•เตเดทเดจเตโ€ เดญเดพเดตเดฟเดฏเดฟเดฒเตโ€ เดจเต€เด•เตเด•เด‚ เดšเต†เดฏเตเดฏเดชเตเดชเต†เดŸเตเด‚.", + "systemPrompt": "เดธเดฟเดธเตเดฑเตเดฑเด‚ เดชเตเดฐเต‹เด‚เดชเตเดฑเตเดฑเต", + "systemPromptPlaceholder": "เดธเดฟเดธเตเดฑเตเดฑเด‚ เดชเตเดฐเต‹เด‚เดชเตเดฑเตเดฑเต เดจเดฒเตเด•เตเด•", + "webSearchPrompt": "เดตเต†เดฌเต เดคเดฟเดฐเดฏเดฒเตโ€ เดชเตเดฐเต‹เด‚เดชเตเดฑเตเดฑเต", + "webSearchPromptHelp": "เดชเตเดฐเต‹เด‚เดชเตเดฑเตเดฑเดฟเดฒเตโ€ เดจเดฟเดจเตเดจเต `{search_results}` เดจเต€เด•เตเด•เด‚ เดšเต†เดฏเตเดฏเดฐเตเดคเต.", + "webSearchPromptError": "เดฆเดฏเดตเดพเดฏเดฟ เด’เดฐเต เดตเต†เดฌเต เดคเดฟเดฐเดฏเดฒเตโ€ เดชเตเดฐเต‹เด‚เดชเตเดฑเตเดฑเต เดจเดฒเตเด•เตเด•", + "webSearchPromptPlaceholder": "เดตเต†เดฌเต เดคเดฟเดฐเดฏเดฒเตโ€ เดชเตเดฐเต‹เด‚เดชเตเดฑเตเดฑเต เดจเดฒเตเด•เตเด•", + "webSearchFollowUpPrompt": "เดตเต†เดฌเต เดคเดฟเดฐเดฏเดฒเตโ€ เดคเตเดŸเดฐเตโ€เดชเตเดฐเต‹เด‚เดชเตเดฑเตเดฑเต", + "webSearchFollowUpPromptHelp": "เดชเตเดฐเต‹เด‚เดชเตเดฑเตเดฑเดฟเดฒเตโ€ เดจเดฟเดจเตเดจเต `{chat_history}` เดฏเตเด‚ `{question}` เดฏเตเด‚ เดจเต€เด•เตเด•เด‚ เดšเต†เดฏเตเดฏเดฐเตเดคเต.", + "webSearchFollowUpPromptError": "เดฆเดฏเดตเดพเดฏเดฟ เดจเดฟเด™เตเด™เดณเตเดŸเต† เดตเต†เดฌเต เดคเดฟเดฐเดฏเดฒเตโ€ เดคเตเดŸเดฐเตโ€เดชเตเดฐเต‹เด‚เดชเตเดฑเตเดฑเต เดจเดฒเตเด•เตเด•!", + "webSearchFollowUpPromptPlaceholder": "เดจเดฟเด™เตเด™เดณเตเดŸเต† เดตเต†เดฌเต เดคเดฟเดฐเดฏเดฒเตโ€ เดคเตเดŸเดฐเตโ€เดชเตเดฐเต‹เด‚เดชเตเดฑเตเดฑเต" + } + } + } +} \ No newline at end of file diff --git a/src/assets/locale/ml/playground.json b/src/assets/locale/ml/playground.json new file mode 100644 index 0000000..691618b --- /dev/null +++ b/src/assets/locale/ml/playground.json @@ -0,0 +1,27 @@ +{ + "ollamaState": { + "searching": "เดจเดฟเด™เตเด™เดณเตเดŸเต† เด’เดฒเตเดฒเดพเดฎเดฏเตเด•เตเด•เดพเดฏเดฟ เดคเดฟเดฐเดฏเตเดจเตเดจเต ๐Ÿฆ™", + "running": "เด’เดฒเตเดฒเดพเดฎ เดชเตเดฐเดตเดฐเตโ€เดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต ๐Ÿฆ™", + "notRunning": "เด’เดฒเตเดฒเดพเดฎเดฏเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดฟเดชเตเดชเดฟเด•เตเด•เดพเดจเตโ€ เด•เดดเดฟเดฏเตเดจเตเดจเดฟเดฒเตเดฒ ๐Ÿฆ™" + }, + "formError": { + "noModel": "เดฆเดฏเดตเดพเดฏเดฟ เด’เดฐเต เดฎเต‹เดกเดฒเตโ€ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเด•", + "noEmbeddingModel": "เด•เตเดฐเดฎเต€เด•เดฐเดฃเด™เตเด™เดณเตโ€ > เด’เดฒเตเดฒเดพเดฎ เดชเต‡เดœเดฟเดฒเตเดณเตเดณ เดŽเด‚เดฌเต†เดกเดฟเด‚เด—เต เดฎเต‹เดกเดฒเตโ€ เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เตเด•" + }, + "form": { + "textarea": { + "placeholder": "เด’เดฐเต เดธเดจเตเดฆเต‡เดถเด‚ เดŸเตˆเดชเตเดชเต เดšเต†เดฏเตเดฏเตเด•..." + }, + "webSearch": { + "on": "เด“เดฃเตโ€", + "off": "เด“เดซเต" + } + }, + "tooltip": { + "searchInternet": "เด‡เดจเตเดฑเดฐเตโ€เดจเต†เดฑเตเดฑเต เดคเดฟเดฐเดฏเตเด•", + "speechToText": "เดธเด‚เดญเดพเดทเดฃเด‚ เดŸเต†เด•เตเดธเตเดฑเตเดฑเดพเดฏเดฟ", + "uploadImage": "เด‡เดฎเต‡เดœเต เด…เดชเตโ€Œเดฒเต‹เดกเต เดšเต†เดฏเตเดฏเตเด•", + "stopStreaming": "เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เต เดจเดฟเตผเดคเตเดคเตเด•" + }, + "sendWhenEnter": "เดŽเดจเตเดฑเดฐเตโ€ เด…เดฎเดฐเตโ€เดคเตเดคเตเดฎเตเดชเต‹เดณเตโ€ เด…เดฏเดฏเตเด•เตเด•เตเด•" +} \ No newline at end of file diff --git a/src/components/Layouts/SettingsOptionLayout.tsx b/src/components/Layouts/SettingsOptionLayout.tsx index 627e295..d984fbc 100644 --- a/src/components/Layouts/SettingsOptionLayout.tsx +++ b/src/components/Layouts/SettingsOptionLayout.tsx @@ -26,7 +26,7 @@ const LinkComponent = (item: { item.current === item.href ? "bg-gray-100 text-gray-600 dark:bg-[#262626] dark:text-white" : "text-gray-700 hover:text-gray-600 hover:bg-gray-100 dark:text-gray-200 dark:hover:text-white dark:hover:bg-[#262626]", - "group flex gap-x-3 rounded-md py-2 pl-2 pr-3 text-sm leading-6 font-semibold" + "group flex gap-x-3 rounded-md py-2 pl-2 pr-3 text-sm font-semibold" )}> { const queryClient = useQueryClient() const [open, setOpen] = useState(false) - const { t } = useTranslation("option") + const { t } = useTranslation(["option", "common"]) const form = useForm({ initialValues: { @@ -188,9 +188,13 @@ export const ModelsBody = () => { } ]} dataSource={[record.details]} + locale={{ + emptyText: t("common:noData") + }} /> ), - defaultExpandAllRows: false + defaultExpandAllRows: false, + }} bordered dataSource={data} diff --git a/src/components/Option/Playground/PlaygroundEmpty.tsx b/src/components/Option/Playground/PlaygroundEmpty.tsx index 07214dc..81771da 100644 --- a/src/components/Option/Playground/PlaygroundEmpty.tsx +++ b/src/components/Option/Playground/PlaygroundEmpty.tsx @@ -1,6 +1,7 @@ import { useQuery } from "@tanstack/react-query" import { RotateCcw } from "lucide-react" import { useEffect, useState } from "react" +import { useTranslation } from "react-i18next" import { getOllamaURL, isOllamaRunning, @@ -9,6 +10,7 @@ import { export const PlaygroundEmpty = () => { const [ollamaURL, setOllamaURL] = useState("") + const { t } = useTranslation(["playground", "common"]) const { data: ollamaInfo, status: ollamaStatus, @@ -40,7 +42,7 @@ export const PlaygroundEmpty = () => {

- Searching for Your Ollama ๐Ÿฆ™ + {t("ollamaState.searching")}

)} @@ -49,7 +51,7 @@ export const PlaygroundEmpty = () => {

- Ollama is running ๐Ÿฆ™ + {t("ollamaState.running")}

) : ( @@ -57,7 +59,7 @@ export const PlaygroundEmpty = () => {

- Unable to connect to Ollama ๐Ÿฆ™ + {t("ollamaState.notRunning")}

@@ -75,7 +77,7 @@ export const PlaygroundEmpty = () => { }} className="inline-flex mt-4 items-center rounded-md border border-transparent bg-black px-2 py-2 text-sm font-medium leading-4 text-white shadow-sm hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 dark:bg-white dark:text-gray-800 dark:hover:bg-gray-100 dark:focus:ring-gray-500 dark:focus:ring-offset-gray-100 disabled:opacity-50 "> - Retry + {t("common:retry")} ) diff --git a/src/components/Option/Playground/PlaygroundForm.tsx b/src/components/Option/Playground/PlaygroundForm.tsx index 64b2af4..d9e0158 100644 --- a/src/components/Option/Playground/PlaygroundForm.tsx +++ b/src/components/Option/Playground/PlaygroundForm.tsx @@ -11,12 +11,14 @@ import { useWebUI } from "~/store/webui" import { defaultEmbeddingModelForRag } from "~/services/ollama" import { ImageIcon, MicIcon, StopCircleIcon, X } from "lucide-react" import { getVariable } from "~/utils/select-varaible" +import { useTranslation } from "react-i18next" type Props = { dropedFile: File | undefined } export const PlaygroundForm = ({ dropedFile }: Props) => { + const { t } = useTranslation(["playground", "common"]) const inputRef = React.useRef(null) const [typing, setTyping] = React.useState(false) const { @@ -117,13 +119,13 @@ export const PlaygroundForm = ({ dropedFile }: Props) => { }) const handleKeyDown = (e: React.KeyboardEvent) => { - if (e.key === "Process" || e.key === "229" ) return + if (e.key === "Process" || e.key === "229") return if ( !typing && e.key === "Enter" && !e.shiftKey && !isSending && - sendWhenEnter + sendWhenEnter ) { e.preventDefault() form.onSubmit(async (value) => { @@ -131,16 +133,13 @@ export const PlaygroundForm = ({ dropedFile }: Props) => { return } if (!selectedModel || selectedModel.length === 0) { - form.setFieldError("message", "Please select a model") + form.setFieldError("message", t("formError.noModel")) return } if (webSearch) { const defaultEM = await defaultEmbeddingModelForRag() if (!defaultEM) { - form.setFieldError( - "message", - "Please set an embedding model on the Settings > Ollama page" - ) + form.setFieldError("message", t("formError.noEmbeddingModel")) return } } @@ -181,16 +180,13 @@ export const PlaygroundForm = ({ dropedFile }: Props) => {
{ if (!selectedModel || selectedModel.length === 0) { - form.setFieldError("message", "Please select a model") + form.setFieldError("message", t("formError.noModel")) return } if (webSearch) { const defaultEM = await defaultEmbeddingModelForRag() if (!defaultEM) { - form.setFieldError( - "message", - "Please set an embedding model on the Settings > Ollama page" - ) + form.setFieldError("message", t("formError.noEmbeddingModel")) return } } @@ -223,12 +219,12 @@ export const PlaygroundForm = ({ dropedFile }: Props) => { rows={1} style={{ minHeight: "60px" }} tabIndex={0} - placeholder="Type a message..." + placeholder={t("form.textarea.placeholder")} {...form.getInputProps("message")} />
- +
{ setWebSearch(e)} - checkedChildren="On" - unCheckedChildren="Off" + checkedChildren={t("form.webSearch.on")} + unCheckedChildren={t("form.webSearch.off")} />
- + - +
) : ( - +
+
+ + {t("generalSettings.settings.language.label")} + + +