diff --git a/.vscode/settings.json b/.vscode/settings.json index 26da56c6..64134715 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -15,6 +15,7 @@ "inputbox", "katex", "khtml", + "languagedetector", "localstorage", "lucide", "maximizable", diff --git a/package.json b/package.json index 7db37c95..3acdd2c7 100644 --- a/package.json +++ b/package.json @@ -19,14 +19,15 @@ "@tauri-apps/plugin-http": "~2.0.1", "@tauri-apps/plugin-os": "^2.2.0", "@tauri-apps/plugin-shell": ">=2.0.0", + "@tauri-apps/plugin-updater": "^2.3.0", "@tauri-apps/plugin-websocket": "~2", "@tauri-apps/plugin-window": "2.0.0-alpha.1", - "@tauri-apps/plugin-updater": "^2.3.0", "ahooks": "^3.8.4", "axios": "^1.7.7", "clsx": "^2.1.1", "dotenv": "^16.4.7", "i18next": "^23.16.2", + "i18next-browser-languagedetector": "^8.0.3", "lodash": "^4.17.21", "lucide-react": "^0.461.0", "mermaid": "^11.4.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2a7b02e6..39e7f04d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -59,6 +59,9 @@ importers: i18next: specifier: ^23.16.2 version: 23.16.2 + i18next-browser-languagedetector: + specifier: ^8.0.3 + version: 8.0.3 lodash: specifier: ^4.17.21 version: 4.17.21 @@ -554,46 +557,55 @@ packages: resolution: {integrity: sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA==} cpu: [arm] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.24.0': resolution: {integrity: sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw==} cpu: [arm] os: [linux] + libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.24.0': resolution: {integrity: sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA==} cpu: [arm64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.24.0': resolution: {integrity: sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw==} cpu: [arm64] os: [linux] + libc: [musl] '@rollup/rollup-linux-powerpc64le-gnu@4.24.0': resolution: {integrity: sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw==} cpu: [ppc64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-gnu@4.24.0': resolution: {integrity: sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg==} cpu: [riscv64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-s390x-gnu@4.24.0': resolution: {integrity: sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g==} cpu: [s390x] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.24.0': resolution: {integrity: sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A==} cpu: [x64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-musl@4.24.0': resolution: {integrity: sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ==} cpu: [x64] os: [linux] + libc: [musl] '@rollup/rollup-win32-arm64-msvc@4.24.0': resolution: {integrity: sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ==} @@ -652,24 +664,28 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [glibc] '@tauri-apps/cli-linux-arm64-musl@2.2.7': resolution: {integrity: sha512-+8HZ+txff/Y3YjAh80XcLXcX8kpGXVdr1P8AfjLHxHdS6QD4Md+acSxGTTNbplmHuBaSHJvuTvZf9tU1eDCTDg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [musl] '@tauri-apps/cli-linux-x64-gnu@2.2.7': resolution: {integrity: sha512-ahlSnuCnUntblp9dG7/w5ZWZOdzRFi3zl0oScgt7GF4KNAOEa7duADsxPA4/FT2hLRa0SvpqtD4IYFvCxoVv3Q==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [glibc] '@tauri-apps/cli-linux-x64-musl@2.2.7': resolution: {integrity: sha512-+qKAWnJRSX+pjjRbKAQgTdFY8ecdcu8UdJ69i7wn3ZcRn2nMMzOO2LOMOTQV42B7/Q64D1pIpmZj9yblTMvadA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [musl] '@tauri-apps/cli-win32-arm64-msvc@2.2.7': resolution: {integrity: sha512-aa86nRnrwT04u9D9fhf5JVssuAZlUCCc8AjqQjqODQjMd4BMA2+d4K9qBMpEG/1kVh95vZaNsLogjEaqSTTw4A==} @@ -1426,6 +1442,9 @@ packages: html-url-attributes@3.0.1: resolution: {integrity: sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==} + i18next-browser-languagedetector@8.0.3: + resolution: {integrity: sha512-beOOLArattPBc2YZG5IXGJytdYFgUR7cS8Wd6HT4IczIoWKgmTspOQ2yasaGklelVo5seLPmnEKvLHR+E/MdWQ==} + i18next@23.16.2: resolution: {integrity: sha512-dFyxwLXxEQK32f6tITBMaRht25mZPJhQ0WbC0p3bO2mWBal9lABTMqSka5k+GLSRWLzeJBKDpH7BeIA9TZI7Jg==} @@ -3607,6 +3626,10 @@ snapshots: html-url-attributes@3.0.1: {} + i18next-browser-languagedetector@8.0.3: + dependencies: + '@babel/runtime': 7.25.9 + i18next@23.16.2: dependencies: '@babel/runtime': 7.25.9 diff --git a/src/components/Assistant/AutoResizeTextarea.tsx b/src/components/Assistant/AutoResizeTextarea.tsx index 26338ca7..9c1a89c1 100644 --- a/src/components/Assistant/AutoResizeTextarea.tsx +++ b/src/components/Assistant/AutoResizeTextarea.tsx @@ -1,4 +1,5 @@ import React, { useEffect, useRef } from "react"; +import { useTranslation } from "react-i18next"; interface AutoResizeTextareaProps { input: string; @@ -11,6 +12,7 @@ const AutoResizeTextarea: React.FC = ({ setInput, handleKeyDown, }) => { + const { t } = useTranslation(); const textareaRef = useRef(null); useEffect(() => { @@ -25,7 +27,7 @@ const AutoResizeTextarea: React.FC = ({