From f367d82ebd9efee49dd5eeab41b56027d3440e61 Mon Sep 17 00:00:00 2001 From: ux-builder <sdh485@gmail.com> Date: Tue, 16 Jul 2024 03:32:57 +0900 Subject: [PATCH] Add Korean translation + add more translation items (#1863) * Add Korean translation * Modal Password translation complement * Add a SettingsSidebar translation * DefaultChat translation complete * New Workspace translation complete --- frontend/src/components/DefaultChat/index.jsx | 91 ++-- .../src/components/Modals/NewWorkspace.jsx | 10 +- .../Modals/Password/MultiUserAuth.jsx | 21 +- .../src/components/SettingsSidebar/index.jsx | 11 +- frontend/src/components/Sidebar/index.jsx | 7 +- frontend/src/locales/en/common.js | 38 ++ frontend/src/locales/es/common.js | 38 ++ frontend/src/locales/fr/common.js | 38 ++ frontend/src/locales/ko/common.js | 483 ++++++++++++++++++ frontend/src/locales/resources.js | 4 + frontend/src/locales/ru/common.js | 41 ++ frontend/src/locales/zh/common.js | 36 ++ 12 files changed, 741 insertions(+), 77 deletions(-) create mode 100644 frontend/src/locales/ko/common.js diff --git a/frontend/src/components/DefaultChat/index.jsx b/frontend/src/components/DefaultChat/index.jsx index ae52a0d2b..4241ed71e 100644 --- a/frontend/src/components/DefaultChat/index.jsx +++ b/frontend/src/components/DefaultChat/index.jsx @@ -17,6 +17,7 @@ import UserIcon from "../UserIcon"; import { userFromStorage } from "@/utils/request"; import { AI_BACKGROUND_COLOR, USER_BACKGROUND_COLOR } from "@/utils/constants"; import useUser from "@/hooks/useUser"; +import { useTranslation, Trans } from "react-i18next"; export default function DefaultChatContainer() { const [mockMsgs, setMockMessages] = useState([]); @@ -28,6 +29,7 @@ export default function DefaultChatContainer() { hideModal: hideNewWsModal, } = useNewWorkspaceModal(); const popMsg = !window.localStorage.getItem("anythingllm_intro"); + const { t } = useTranslation(); useEffect(() => { const fetchData = async () => { @@ -38,7 +40,7 @@ export default function DefaultChatContainer() { }, []); const MESSAGES = [ - <React.Fragment> + <React.Fragment key="msg1"> <div className={`flex justify-center items-end w-full ${AI_BACKGROUND_COLOR} md:mt-0 mt-[40px]`} > @@ -51,18 +53,14 @@ export default function DefaultChatContainer() { <span className={`whitespace-pre-line text-white font-normal text-sm md:text-sm flex flex-col gap-y-1 mt-2`} > - Welcome to AnythingLLM, AnythingLLM is an open-source AI tool by - Mintplex Labs that turns anything into a trained chatbot you can - query and chat with. AnythingLLM is a BYOK (bring-your-own-keys) - software so there is no subscription, fee, or charges for this - software outside of the services you want to use with it. + {t("welcomeMessage.part1")} </span> </div> </div> </div> </React.Fragment>, - <React.Fragment> + <React.Fragment key="msg2"> <div className={`flex justify-center items-end w-full ${AI_BACKGROUND_COLOR}`} > @@ -75,17 +73,14 @@ export default function DefaultChatContainer() { <span className={`whitespace-pre-line text-white font-normal text-sm md:text-sm flex flex-col gap-y-1 mt-2`} > - AnythingLLM is the easiest way to put powerful AI products like - OpenAi, GPT-4, LangChain, PineconeDB, ChromaDB, and other services - together in a neat package with no fuss to increase your - productivity by 100x. + {t("welcomeMessage.part2")} </span> </div> </div> </div> </React.Fragment>, - <React.Fragment> + <React.Fragment key="msg3"> <div className={`flex justify-center items-end w-full ${AI_BACKGROUND_COLOR}`} > @@ -98,20 +93,16 @@ export default function DefaultChatContainer() { <span className={`whitespace-pre-line text-white font-normal text-sm md:text-sm flex flex-col gap-y-1 mt-2`} > - AnythingLLM can run totally locally on your machine with little - overhead you wont even notice it's there! No GPU needed. Cloud - and on-premises installation is available as well. - <br /> - The AI tooling ecosystem gets more powerful everyday. - AnythingLLM makes it easy to use. + {t("welcomeMessage.part3")} </span> <a href={paths.github()} target="_blank" + rel="noreferrer" className="mt-5 w-fit transition-all duration-300 border border-slate-200 px-4 py-2 rounded-lg text-white text-sm items-center flex gap-x-2 hover:bg-slate-200 hover:text-slate-800 focus:ring-gray-800" > <GitMerge className="h-4 w-4" /> - <p>Create an issue on Github</p> + <p>{t("welcomeMessage.githubIssue")}</p> </a> </div> </div> @@ -119,7 +110,7 @@ export default function DefaultChatContainer() { </div> </React.Fragment>, - <React.Fragment> + <React.Fragment key="msg4"> <div className={`flex justify-center items-end w-full ${USER_BACKGROUND_COLOR}`} > @@ -135,14 +126,14 @@ export default function DefaultChatContainer() { <span className={`whitespace-pre-line text-white font-normal text-sm md:text-sm flex flex-col gap-y-1 mt-2`} > - How do I get started?! + {t("welcomeMessage.user1")} </span> </div> </div> </div> </React.Fragment>, - <React.Fragment> + <React.Fragment key="msg5"> <div className={`flex justify-center items-end w-full ${AI_BACKGROUND_COLOR}`} > @@ -155,13 +146,7 @@ export default function DefaultChatContainer() { <span className={`whitespace-pre-line text-white font-normal text-sm md:text-sm flex flex-col gap-y-1 mt-2`} > - It's simple. All collections are organized into buckets we call{" "} - "Workspaces". Workspaces are buckets of files, documents, - images, PDFs, and other files which will be transformed into - something LLM's can understand and use in conversation. - <br /> - <br /> - You can add and remove files at anytime. + {t("welcomeMessage.part4")} </span> {(!user || user?.role !== "default") && ( @@ -170,7 +155,7 @@ export default function DefaultChatContainer() { className="mt-5 w-fit transition-all duration-300 border border-slate-200 px-4 py-2 rounded-lg text-white text-sm items-center flex gap-x-2 hover:bg-slate-200 hover:text-slate-800 focus:ring-gray-800" > <Plus className="h-4 w-4" /> - <p>Create your first workspace</p> + <p>{t("welcomeMessage.createWorkspace")}</p> </button> )} </div> @@ -179,7 +164,7 @@ export default function DefaultChatContainer() { </div> </React.Fragment>, - <React.Fragment> + <React.Fragment key="msg6"> <div className={`flex justify-center items-end w-full ${USER_BACKGROUND_COLOR}`} > @@ -195,15 +180,14 @@ export default function DefaultChatContainer() { <span className={`whitespace-pre-line text-white font-normal text-sm md:text-sm flex flex-col gap-y-1 mt-2`} > - Is this like an AI dropbox or something? What about chatting? It - is a chatbot isn't it? + {t("welcomeMessage.user2")} </span> </div> </div> </div> </React.Fragment>, - <React.Fragment> + <React.Fragment key="msg7"> <div className={`flex justify-center items-end w-full ${AI_BACKGROUND_COLOR}`} > @@ -216,32 +200,20 @@ export default function DefaultChatContainer() { <span className={`whitespace-pre-line text-white font-normal text-sm md:text-sm flex flex-col gap-y-1 mt-2`} > - AnythingLLM is more than a smarter Dropbox. - <br /> - <br /> - AnythingLLM offers two ways of talking with your data: - <br /> - <br /> - <i>Query:</i> Your chats will return data or inferences found with - the documents in your workspace it has access to. Adding more - documents to the Workspace make it smarter! - <br /> - <br /> - <i>Conversational:</i> Your documents + your on-going chat history - both contribute to the LLM knowledge at the same time. Great for - appending real-time text-based info or corrections and - misunderstandings the LLM might have. - <br /> - <br /> - You can toggle between either mode{" "} - <i>in the middle of chatting!</i> + <Trans + i18nKey="welcomeMessage.part5" + components={{ + i: <i />, + br: <br />, + }} + /> </span> </div> </div> </div> </React.Fragment>, - <React.Fragment> + <React.Fragment key="msg8"> <div className={`flex justify-center items-end w-full ${USER_BACKGROUND_COLOR}`} > @@ -257,14 +229,14 @@ export default function DefaultChatContainer() { <span className={`whitespace-pre-line text-white font-normal text-sm md:text-sm flex flex-col gap-y-1 mt-2`} > - Wow, this sounds amazing, let me try it out already! + {t("welcomeMessage.user3")} </span> </div> </div> </div> </React.Fragment>, - <React.Fragment> + <React.Fragment key="msg9"> <div className={`flex justify-center items-end w-full ${AI_BACKGROUND_COLOR}`} > @@ -277,24 +249,25 @@ export default function DefaultChatContainer() { <span className={`whitespace-pre-line text-white font-normal text-sm md:text-sm flex flex-col gap-y-1 mt-2`} > - Have Fun! + {t("welcomeMessage.part6")} </span> <div className="flex flex-col md:flex-row items-start md:items-center gap-1 md:gap-4"> <a href={paths.github()} target="_blank" + rel="noreferrer" className="mt-5 w-fit transition-all duration-300 border border-slate-200 px-4 py-2 rounded-lg text-white text-sm items-center flex gap-x-2 hover:bg-slate-200 hover:text-slate-800 focus:ring-gray-800" > <GithubLogo className="h-4 w-4" /> - <p>Star on GitHub</p> + <p>{t("welcomeMessage.starOnGithub")}</p> </a> <a href={paths.mailToMintplex()} className="mt-5 w-fit transition-all duration-300 border border-slate-200 px-4 py-2 rounded-lg text-white text-sm items-center flex gap-x-2 hover:bg-slate-200 hover:text-slate-800 focus:ring-gray-800" > <EnvelopeSimple className="h-4 w-4" /> - <p>Contact Mintplex Labs</p> + <p>{t("welcomeMessage.contact")}</p> </a> </div> </div> diff --git a/frontend/src/components/Modals/NewWorkspace.jsx b/frontend/src/components/Modals/NewWorkspace.jsx index 01f370633..87edef9d7 100644 --- a/frontend/src/components/Modals/NewWorkspace.jsx +++ b/frontend/src/components/Modals/NewWorkspace.jsx @@ -2,11 +2,13 @@ import React, { useRef, useState } from "react"; import { X } from "@phosphor-icons/react"; import Workspace from "@/models/workspace"; import paths from "@/utils/paths"; +import { useTranslation } from "react-i18next"; const noop = () => false; export default function NewWorkspaceModal({ hideModal = noop }) { const formEl = useRef(null); const [error, setError] = useState(null); + const { t } = useTranslation(); const handleCreate = async (e) => { setError(null); e.preventDefault(); @@ -29,7 +31,9 @@ export default function NewWorkspaceModal({ hideModal = noop }) { <div className="relative w-[500px] max-h-full"> <div className="relative bg-modal-gradient rounded-lg shadow-md border-2 border-accent"> <div className="flex items-start justify-between p-4 border-b rounded-t border-white/10"> - <h3 className="text-xl font-semibold text-white">New Workspace</h3> + <h3 className="text-xl font-semibold text-white"> + {t("new-workspace.title")} + </h3> <button onClick={hideModal} type="button" @@ -46,14 +50,14 @@ export default function NewWorkspaceModal({ hideModal = noop }) { htmlFor="name" className="block mb-2 text-sm font-medium text-white" > - Workspace Name + {t("common.workspaces-name")} </label> <input name="name" type="text" id="name" className="bg-zinc-900 w-full text-white placeholder:text-white/20 text-sm rounded-lg focus:outline-primary-button active:outline-primary-button outline-none block w-full p-2.5" - placeholder="My Workspace" + placeholder={t("new-workspace.placeholder")} required={true} autoComplete="off" /> diff --git a/frontend/src/components/Modals/Password/MultiUserAuth.jsx b/frontend/src/components/Modals/Password/MultiUserAuth.jsx index ca56f3c8e..c89f0cff5 100644 --- a/frontend/src/components/Modals/Password/MultiUserAuth.jsx +++ b/frontend/src/components/Modals/Password/MultiUserAuth.jsx @@ -7,6 +7,7 @@ import ModalWrapper from "@/components/ModalWrapper"; import { useModal } from "@/hooks/useModal"; import RecoveryCodeModal from "@/components/Modals/DisplayRecoveryCodeModal"; import { useTranslation } from "react-i18next"; +import { t } from "i18next"; const RecoveryForm = ({ onSubmit, setShowRecoveryForm }) => { const [username, setUsername] = useState(""); @@ -36,21 +37,23 @@ const RecoveryForm = ({ onSubmit, setShowRecoveryForm }) => { <div className="flex items-start justify-between pt-11 pb-9 w-screen md:w-full md:px-12 px-6 "> <div className="flex flex-col gap-y-4 w-full"> <h3 className="text-4xl md:text-lg font-bold text-white text-center md:text-left"> - Password Reset + {t("login.password-reset.title")} </h3> <p className="text-sm text-white/90 md:text-left md:max-w-[300px] px-4 md:px-0 text-center"> - Provide the necessary information below to reset your password. + {t("login.password-reset.description")} </p> </div> </div> <div className="md:px-12 px-6 space-y-6 flex h-full w-full"> <div className="w-full flex flex-col gap-y-4"> <div className="flex flex-col gap-y-2"> - <label className="text-white text-sm font-bold">Username</label> + <label className="text-white text-sm font-bold"> + {t("login.multi-user.placeholder-username")} + </label> <input name="username" type="text" - placeholder="Username" + placeholder={t("login.multi-user.placeholder-username")} value={username} onChange={(e) => setUsername(e.target.value)} className="bg-zinc-900 text-white placeholder-white/20 text-sm rounded-md p-2.5 w-full h-[48px] md:w-[300px] md:h-[34px]" @@ -59,14 +62,16 @@ const RecoveryForm = ({ onSubmit, setShowRecoveryForm }) => { </div> <div className="flex flex-col gap-y-2"> <label className="text-white text-sm font-bold"> - Recovery Codes + {t("login.password-reset.recovery-codes")} </label> {recoveryCodeInputs.map((code, index) => ( <div key={index}> <input type="text" name={`recoveryCode${index + 1}`} - placeholder={`Recovery Code ${index + 1}`} + placeholder={t("login.password-reset.recovery-code", { + index: index + 1, + })} value={code} onChange={(e) => handleRecoveryCodeChange(index, e.target.value) @@ -84,14 +89,14 @@ const RecoveryForm = ({ onSubmit, setShowRecoveryForm }) => { type="submit" className="md:text-primary-button md:bg-transparent md:w-[300px] text-dark-text text-sm font-bold focus:ring-4 focus:outline-none rounded-md border-[1.5px] border-primary-button md:h-[34px] h-[48px] md:hover:text-white md:hover:bg-primary-button bg-primary-button focus:z-10 w-full" > - Reset Password + {t("login.password-reset.title")} </button> <button type="button" className="text-white text-sm flex gap-x-1 hover:text-primary-button hover:underline -mb-8" onClick={() => setShowRecoveryForm(false)} > - Back to Login + {t("login.password-reset.back-to-login")} </button> </div> </form> diff --git a/frontend/src/components/SettingsSidebar/index.jsx b/frontend/src/components/SettingsSidebar/index.jsx index 723867e2e..bde09e905 100644 --- a/frontend/src/components/SettingsSidebar/index.jsx +++ b/frontend/src/components/SettingsSidebar/index.jsx @@ -116,7 +116,7 @@ export default function SettingsSidebar() { to={paths.settings.privacy()} className="text-darker hover:text-white text-xs leading-[18px] mx-3" > - Privacy & Data + {t("settings.privacy")} </Link> </div> </div> @@ -163,7 +163,7 @@ export default function SettingsSidebar() { to={paths.settings.privacy()} className="text-darker hover:text-white text-xs leading-[18px] mx-3" > - Privacy & Data + {t("settings.privacy")} </Link> </div> </div> @@ -179,6 +179,7 @@ export default function SettingsSidebar() { function SupportEmail() { const [supportEmail, setSupportEmail] = useState(paths.mailToMintplex()); + const { t } = useTranslation(); useEffect(() => { const fetchSupportEmail = async () => { @@ -197,7 +198,7 @@ function SupportEmail() { to={supportEmail} className="text-darker hover:text-white text-xs leading-[18px] mx-3 mt-1" > - Contact Support + {t("settings.contact")} </Link> ); } @@ -234,7 +235,7 @@ const SidebarOptions = ({ user = null, t }) => ( roles: ["admin"], }, { - btnText: "Voice & Speech", + btnText: t("settings.voice-speech"), href: paths.settings.audioPreference(), flex: true, roles: ["admin"], @@ -338,7 +339,7 @@ const SidebarOptions = ({ user = null, t }) => ( /> <HoldToReveal key="exp_features"> <Option - btnText="Experimental Features" + btnText={t("settings.experimental-features")} icon={<Flask className="h-5 w-5 flex-shrink-0" />} href={paths.settings.experimental()} user={user} diff --git a/frontend/src/components/Sidebar/index.jsx b/frontend/src/components/Sidebar/index.jsx index 9e8504421..0daf9f698 100644 --- a/frontend/src/components/Sidebar/index.jsx +++ b/frontend/src/components/Sidebar/index.jsx @@ -11,6 +11,7 @@ import Footer from "../Footer"; import SettingsButton from "../SettingsButton"; import { Link } from "react-router-dom"; import paths from "@/utils/paths"; +import { useTranslation } from "react-i18next"; export default function Sidebar() { const { user } = useUser(); @@ -21,6 +22,7 @@ export default function Sidebar() { showModal: showNewWsModal, hideModal: hideNewWsModal, } = useNewWorkspaceModal(); + const { t } = useTranslation(); return ( <div> @@ -51,7 +53,7 @@ export default function Sidebar() { > <Plus size={18} weight="bold" /> <p className="text-sidebar text-sm font-semibold"> - New Workspace + {t("new-workspace.title")} </p> </button> )} @@ -81,6 +83,7 @@ export function SidebarMobileHeader() { hideModal: hideNewWsModal, } = useNewWorkspaceModal(); const { user } = useUser(); + const { t } = useTranslation(); useEffect(() => { // Darkens the rest of the screen @@ -167,7 +170,7 @@ export function SidebarMobileHeader() { > <Plus className="h-5 w-5" /> <p className="text-sidebar text-sm font-semibold"> - New Workspace + {t("new-workspace.title")} </p> </button> )} diff --git a/frontend/src/locales/en/common.js b/frontend/src/locales/en/common.js index f54521da6..a64d37d84 100644 --- a/frontend/src/locales/en/common.js +++ b/frontend/src/locales/en/common.js @@ -25,6 +25,7 @@ const TRANSLATIONS = { transcription: "Transcription", embedder: "Embedder", "text-splitting": "Text Splitter & Chunking", + "voice-speech": "Voice & Speech", "vector-database": "Vector Database", embeds: "Chat Embed", "embed-chats": "Chat Embed History", @@ -35,6 +36,8 @@ const TRANSLATIONS = { "agent-skills": "Agent Skills", admin: "Admin", tools: "Tools", + "experimental-features": "Experimental Features", + contact: "Contact Support", }, // Page Definitions @@ -52,6 +55,41 @@ const TRANSLATIONS = { start: "Sign in to your", end: "account.", }, + "password-reset": { + title: "Password Reset", + description: + "Provide the necessary information below to reset your password.", + "recovery-codes": "Recovery Codes", + "recovery-code": "Recovery Code {{index}}", + "back-to-login": "Back to Login", + }, + }, + + welcomeMessage: { + part1: + "Welcome to AnythingLLM, AnythingLLM is an open-source AI tool by Mintplex Labs that turns anything into a trained chatbot you can query and chat with. AnythingLLM is a BYOK (bring-your-own-keys) software so there is no subscription, fee, or charges for this software outside of the services you want to use with it.", + part2: + "AnythingLLM is the easiest way to put powerful AI products like OpenAi, GPT-4, LangChain, PineconeDB, ChromaDB, and other services together in a neat package with no fuss to increase your productivity by 100x.", + part3: + "AnythingLLM can run totally locally on your machine with little overhead you wont even notice it's there! No GPU needed. Cloud and on-premises installation is available as well.\nThe AI tooling ecosystem gets more powerful everyday. AnythingLLM makes it easy to use.", + githubIssue: "Create an issue on Github", + user1: "How do I get started?!", + part4: + "It's simple. All collections are organized into buckets we call \"Workspaces\". Workspaces are buckets of files, documents, images, PDFs, and other files which will be transformed into something LLM's can understand and use in conversation.\n\nYou can add and remove files at anytime.", + createWorkspace: "Create your first workspace", + user2: + "Is this like an AI dropbox or something? What about chatting? It is a chatbot isn't it?", + part5: + "AnythingLLM is more than a smarter Dropbox.\n\nAnythingLLM offers two ways of talking with your data:\n\n<i>Query:</i> Your chats will return data or inferences found with the documents in your workspace it has access to. Adding more documents to the Workspace make it smarter! \n\n<i>Conversational:</i> Your documents + your on-going chat history both contribute to the LLM knowledge at the same time. Great for appending real-time text-based info or corrections and misunderstandings the LLM might have. \n\nYou can toggle between either mode \n<i>in the middle of chatting!</i>", + user3: "Wow, this sounds amazing, let me try it out already!", + part6: "Have Fun!", + starOnGithub: "Star on GitHub", + contact: "Contact Mintplex Labs", + }, + + "new-workspace": { + title: "New Workspace", + placeholder: "My Workspace", }, // Workspace Settings menu items diff --git a/frontend/src/locales/es/common.js b/frontend/src/locales/es/common.js index 4430a3cb9..f14f1e81b 100644 --- a/frontend/src/locales/es/common.js +++ b/frontend/src/locales/es/common.js @@ -24,6 +24,7 @@ const TRANSLATIONS = { transcription: "Modelo de transcripción", embedder: "Preferencias de incrustación", "text-splitting": "Divisor y fragmentación de texto", + "voice-speech": "Voz y Habla", "vector-database": "Base de datos de vectores", embeds: "Widgets de chat incrustados", "embed-chats": "Historial de chats incrustados", @@ -34,6 +35,8 @@ const TRANSLATIONS = { "agent-skills": "Habilidades del agente", admin: "Administrador", tools: "Herramientas", + "experimental-features": "Funciones Experimentales", + contact: "Contactar Soporte", }, login: { @@ -50,6 +53,41 @@ const TRANSLATIONS = { start: "Iniciar sesión en tu", end: "cuenta.", }, + "password-reset": { + title: "Restablecer la contraseña", + description: + "Proporcione la información necesaria a continuación para restablecer su contraseña.", + "recovery-codes": "Códigos de recuperación", + "recovery-code": "Código de recuperación {{index}}", + "back-to-login": "Volver al inicio de sesión", + }, + }, + + welcomeMessage: { + part1: + "Bienvenido a AnythingLLM, una herramienta de inteligencia artificial de código abierto creada por Mintplex Labs que convierte cualquier cosa en un chatbot entrenado con el que puedes consultar y conversar. AnythingLLM es un software BYOK (bring-your-own-keys), por lo que no hay suscripciones, tarifas ni cargos por este software, salvo por los servicios que deseas utilizar.", + part2: + "AnythingLLM es la forma más sencilla de integrar productos de inteligencia artificial potentes como OpenAi, GPT-4, LangChain, PineconeDB, ChromaDB y otros servicios en un paquete ordenado, sin complicaciones, para aumentar tu productividad en un 100x.", + part3: + "AnythingLLM puede ejecutarse completamente en tu máquina local con poco impacto, ¡ni siquiera notarás que está ahÃ! No se necesita GPU. También está disponible la instalación en la nube y en instalaciones locales.\nEl ecosistema de herramientas de inteligencia artificial se vuelve más poderoso cada dÃa. AnythingLLM facilita su uso.", + githubIssue: "Crear un problema en Github", + user1: "¿Cómo empiezo?!", + part4: + 'Es simple. Todas las colecciones se organizan en contenedores que llamamos "Workspaces". Los Workspaces son contenedores de archivos, documentos, imágenes, PDFs y otros archivos que se transformarán en algo que los LLM puedan entender y usar en una conversación.\n\nPuedes agregar y eliminar archivos en cualquier momento.', + createWorkspace: "Crea tu primer workspace", + user2: + "¿Es esto como un Dropbox de IA o algo asÃ? ¿Qué hay de chatear? ¿Es un chatbot, no?", + part5: + "AnythingLLM es más que un Dropbox más inteligente.\n\nAnythingLLM ofrece dos formas de interactuar con tus datos:\n\n<i>Consulta:</i> Tus chats devolverán datos o inferencias encontradas con los documentos en tu workspace al que tiene acceso. ¡Agregar más documentos al workspace lo hace más inteligente! \n\n<i>Conversacional:</i> Tus documentos y tu historial de chat en curso contribuyen al conocimiento del LLM al mismo tiempo. Ideal para agregar información en tiempo real basada en texto o correcciones y malentendidos que el LLM pueda tener.\n\n¡Puedes alternar entre ambos modos <i>en medio de una conversación!</i>", + user3: "¡Vaya, esto suena increÃble, déjame probarlo ya!", + part6: "¡Diviértete!", + starOnGithub: "Estrella en GitHub", + contact: "Contactar a Mintplex Labs", + }, + + "new-workspace": { + title: "Nuevo Espacio de Trabajo", + placeholder: "Mi Espacio de Trabajo", }, "workspaces—settings": { diff --git a/frontend/src/locales/fr/common.js b/frontend/src/locales/fr/common.js index 84a27f614..0a3473013 100644 --- a/frontend/src/locales/fr/common.js +++ b/frontend/src/locales/fr/common.js @@ -25,6 +25,7 @@ const TRANSLATIONS = { transcription: "Modèle de transcription", embedder: "Préférences d'intégration", "text-splitting": "Diviseur de texte et découpage", + "voice-speech": "Voix et Parole", "vector-database": "Base de données vectorielle", embeds: "Widgets de chat intégrés", "embed-chats": "Historique des chats intégrés", @@ -35,6 +36,8 @@ const TRANSLATIONS = { "agent-skills": "Compétences de l'agent", admin: "Admin", tools: "Outils", + "experimental-features": "Fonctionnalités Expérimentales", + contact: "Contacter le Support", }, // Page Definitions @@ -52,6 +55,41 @@ const TRANSLATIONS = { start: "Connectez-vous à votre", end: "compte.", }, + "password-reset": { + title: "Réinitialisation du mot de passe", + description: + "Fournissez les informations nécessaires ci-dessous pour réinitialiser votre mot de passe.", + "recovery-codes": "Codes de récupération", + "recovery-code": "Code de récupération {{index}}", + "back-to-login": "Retour à la connexion", + }, + }, + + welcomeMessage: { + part1: + "Bienvenue sur AnythingLLM, un outil d'intelligence artificielle open-source créé par Mintplex Labs qui transforme n'importe quoi en un chatbot entraîné avec lequel vous pouvez interroger et discuter. AnythingLLM est un logiciel BYOK (apportez vos propres clés), il n'y a donc pas d'abonnement, de frais ou de charges pour ce logiciel en dehors des services que vous souhaitez utiliser.", + part2: + "AnythingLLM est le moyen le plus simple de regrouper des produits d'intelligence artificielle puissants tels que OpenAi, GPT-4, LangChain, PineconeDB, ChromaDB et d'autres services dans un package soigné, sans tracas, pour augmenter votre productivité de 100x.", + part3: + "AnythingLLM peut fonctionner totalement localement sur votre machine avec peu d'impact, vous ne remarquerez même pas qu'il est là ! Pas besoin de GPU. L'installation en cloud et sur site est également disponible.\nL'écosystème des outils d'IA devient plus puissant chaque jour. AnythingLLM le rend facile à utiliser.", + githubIssue: "Créer un problème sur Github", + user1: "Comment commencer?!", + part4: + 'C\'est simple. Toutes les collections sont organisées en compartiments que nous appelons "Workspaces". Les Workspaces sont des compartiments de fichiers, documents, images, PDFs et autres fichiers qui seront transformés en quelque chose que les LLM peuvent comprendre et utiliser dans une conversation.\n\nVous pouvez ajouter et supprimer des fichiers à tout moment.', + createWorkspace: "Créez votre premier workspace", + user2: + "Est-ce comme un Dropbox IA ou quelque chose comme ça ? Et le chat ? C'est bien un chatbot, non ?", + part5: + "AnythingLLM est plus qu'un Dropbox plus intelligent.\n\nAnythingLLM offre deux façons de parler avec vos données:\n\n<i>Interrogation :</i> Vos chats renverront des données ou des inférences trouvées avec les documents dans votre workspace auquel il a accès. Ajouter plus de documents au workspace le rend plus intelligent !\n\n<i>Conversationnel :</i> Vos documents et votre historique de chat en cours contribuent tous deux aux connaissances du LLM en même temps. Idéal pour ajouter des informations en temps réel basées sur du texte ou des corrections et des malentendus que le LLM pourrait avoir.\n\nVous pouvez basculer entre les deux modes <i>en plein milieu d'une conversation !</i>", + user3: "Wow, cela semble incroyable, laissez-moi l'essayer tout de suite !", + part6: "Amusez-vous bien !", + starOnGithub: "Étoile sur GitHub", + contact: "Contacter Mintplex Labs", + }, + + "new-workspace": { + title: "Nouveau Espace de Travail", + placeholder: "Mon Espace de Travail", }, // Workspace Settings menu items diff --git a/frontend/src/locales/ko/common.js b/frontend/src/locales/ko/common.js new file mode 100644 index 000000000..eb5b34dfe --- /dev/null +++ b/frontend/src/locales/ko/common.js @@ -0,0 +1,483 @@ +const TRANSLATIONS = { + common: { + "workspaces-name": "워í¬ìŠ¤íŽ˜ì´ìŠ¤ ì´ë¦„", + error: "오류", + success: "성공", + user: "사용ìž", + selection: "ëª¨ë¸ ì„ íƒ", + saving: "ì €ìž¥ 중...", + save: "ì €ìž¥", + previous: "ì´ì „", + next: "다ìŒ", + }, + + // Setting Sidebar menu items. + settings: { + title: "ì¸ìŠ¤í„´ìŠ¤ ì„¤ì •", + system: "ì¼ë°˜ ì„¤ì •", + invites: "초대", + users: "사용ìž", + workspaces: "워í¬ìŠ¤íŽ˜ì´ìŠ¤", + "workspace-chats": "워í¬ìŠ¤íŽ˜ì´ìŠ¤ 채팅", + customization: "ì‚¬ìš©ìž ì •ì˜", + "api-keys": "ê°œë°œìž API", + llm: "LLM", + transcription: "í…스트 변환", + embedder: "ìž„ë² ë”", + "text-splitting": "í…스트 ë¶„í• ê³¼ ì²í‚¹", + "voice-speech": "ìŒì„±ê³¼ ë§í•˜ê¸°", + "vector-database": "벡터 ë°ì´í„°ë² ì´ìŠ¤", + embeds: "채팅 ìž„ë² ë“œ", + "embed-chats": "채팅 ìž„ë² ë“œ 기ë¡", + security: "보안", + "event-logs": "ì´ë²¤íŠ¸ 로그", + privacy: "사ìƒí™œ 보호와 ë°ì´í„°", + "ai-providers": "AI ì œê³µìž", + "agent-skills": "ì—ì´ì „트 스킬", + admin: "관리ìž", + tools: "ë„구", + "experimental-features": "실험ì 기능", + contact: "지ì›íŒ€ ì—°ë½", + }, + + // Page Definitions + login: { + "multi-user": { + welcome: "ì›°ì»´!", + "placeholder-username": "ì‚¬ìš©ìž ì´ë¦„", + "placeholder-password": "비밀번호", + login: "로그ì¸", + validating: "ìœ íš¨ì„± 검사 중...", + "forgot-pass": "비밀번호를 잊으셨나요", + reset: "ìž¬ì„¤ì •", + }, + "sign-in": { + start: "ì‚¬ìš©ìž ê³„ì •ìœ¼ë¡œ ", + end: "ì— ë¡œê·¸ì¸í•˜ì„¸ìš”.", + }, + "password-reset": { + title: "비밀번호 ìž¬ì„¤ì •", + description: "비밀번호를 ìž¬ì„¤ì •í•˜ë ¤ë©´ ì•„ëž˜ì— í•„ìš”í•œ ì •ë³´ë¥¼ ìž…ë ¥í•˜ì„¸ìš”.", + "recovery-codes": "복구 코드", + "recovery-code": "복구 코드 {{index}}", + "back-to-login": "로그ì¸ìœ¼ë¡œ ëŒì•„가기", + }, + }, + + "new-workspace": { + title: "새 워í¬ìŠ¤íŽ˜ì´ìŠ¤", + placeholder: "ë‚´ 워í¬ìŠ¤íŽ˜ì´ìŠ¤", + }, + + // Workspace Settings menu items + "workspaces—settings": { + general: "ì¼ë°˜ ì„¤ì •", + chat: "채팅 ì„¤ì •", + vector: "벡터 ë°ì´í„°ë² ì´ìŠ¤", + members: "구성ì›", + agent: "ì—ì´ì „트 구성", + }, + + welcomeMessage: { + part1: + "AnythingLLMì— ì˜¤ì‹ ê²ƒì„ í™˜ì˜í•©ë‹ˆë‹¤. AnythingLLMì€ Mintplex Labsì—ì„œ 개발한 오픈 소스 AI ë„구로, ì–´ë–¤ 것ì´ë“ í›ˆë ¨ëœ ì±—ë´‡ìœ¼ë¡œ 변환하여 ì¿¼ë¦¬í•˜ê³ ëŒ€í™”í• ìˆ˜ 있습니다. AnythingLLMì€ BYOK(Bring Your Own Key) 소프트웨어ì´ë¯€ë¡œ ì‚¬ìš©í•˜ë ¤ëŠ” 서비스 외ì—는 구ë…료나 기타 ë¹„ìš©ì´ ì—†ìŠµë‹ˆë‹¤.", + part2: + "AnythingLLMì€ OpenAi, GPT-4, LangChain, PineconeDB, ChromaDB 등 ê°•ë ¥í•œ AI ì œí’ˆì„ ë²ˆê±°ë¡œì›€ ì—†ì´ ê¹”ë”하게 패키지로 묶어 ìƒì‚°ì„±ì„ 100ë°° í–¥ìƒì‹œí‚¤ëŠ” 가장 쉬운 방법입니다.", + part3: + "AnythingLLMì€ ë¡œì»¬ 컴퓨터ì—ì„œ ì™„ì „ížˆ ìž‘ë™í•˜ë©°, ê±°ì˜ ë¦¬ì†ŒìŠ¤ë¥¼ 사용하지 않으므로 존재조차 ëŠë¼ì§€ ëª»í• ê²ƒìž…ë‹ˆë‹¤! GPUê°€ 필요하지 않습니다. í´ë¼ìš°ë“œ ë° ì˜¨í”„ë ˆë¯¸ìŠ¤ ì„¤ì¹˜ë„ ê°€ëŠ¥í•©ë‹ˆë‹¤.\nAI ë„구 ìƒíƒœê³„는 ë‚ ë¡œ ê°•ë ¥í•´ì§€ê³ ìžˆìŠµë‹ˆë‹¤. AnythingLLMì€ ì´ë¥¼ 쉽게 ì‚¬ìš©í• ìˆ˜ 있게 í•´ì¤ë‹ˆë‹¤.", + githubIssue: "Githubì— ì´ìŠˆ ìƒì„±í•˜ê¸°", + user1: "어떻게 시작하나요?!", + part4: + '간단합니다. ëª¨ë“ ì»¬ë ‰ì…˜ì€ "워í¬ìŠ¤íŽ˜ì´ìŠ¤"ë¼ê³ 부르는 버킷으로 구성ë©ë‹ˆë‹¤. 워í¬ìŠ¤íŽ˜ì´ìŠ¤ëŠ” 문서, ì´ë¯¸ì§€, PDF ë° ê¸°íƒ€ 파ì¼ì˜ 버킷으로, LLMì´ ì´í•´í•˜ê³ 대화ì—ì„œ ì‚¬ìš©í• ìˆ˜ 있는 형태로 변환합니다.\n\nì–¸ì œë“ ì§€ 파ì¼ì„ ì¶”ê°€í•˜ê³ ì‚ì œí• ìˆ˜ 있습니다.', + createWorkspace: "첫 번째 워í¬ìŠ¤íŽ˜ì´ìŠ¤ ìƒì„±í•˜ê¸°", + user2: + "ì´ê²ƒì€ AI ë“œë¡ë°•ìŠ¤ì™€ ê°™ì€ ê±´ê°€ìš”? ì±„íŒ…ì€ ì–´ë–¤ê°€ìš”? ì´ê±´ ì±—ë´‡ 아닌가요?", + part5: + "AnythingLLMì€ ë” ìŠ¤ë§ˆíŠ¸í•œ Dropbox ì´ìƒì˜ 것입니다.\n\nAnythingLLMì€ ë°ì´í„°ì™€ ëŒ€í™”í• ìˆ˜ 있는 ë‘ ê°€ì§€ ë°©ë²•ì„ ì œê³µí•©ë‹ˆë‹¤:\n\n<i>쿼리:</i> 워í¬ìŠ¤íŽ˜ì´ìŠ¤ ë‚´ 문서ì—ì„œ 찾아낸 ë°ì´í„°ë‚˜ ì¶”ë¡ ê²°ê³¼ë§Œ 채팅으로 ì œê³µí•©ë‹ˆë‹¤. 워í¬ìŠ¤íŽ˜ì´ìŠ¤ì— 문서를 ë” ë§Žì´ ì¶”ê°€í• ìˆ˜ë¡ ë” ë˜‘ë˜‘í•´ì§‘ë‹ˆë‹¤!\n\n<i>대화:</i> 문서와 실시간 채팅 기ë¡ì´ ë™ì‹œì— LLMì˜ ì§€ì‹ì— 기여합니다. 실시간 í…스트 ì •ë³´ë‚˜ LLMì˜ ì˜¤í•´ë¥¼ 바로잡는 ë° ë§¤ìš° ìœ ìš©í•©ë‹ˆë‹¤.\n\n채팅 ì¤‘ê°„ì— <i>모드를 ì „í™˜í• ìˆ˜ 있습니다!</i>", + user3: "와, ì´ê±° ì •ë§ ë†€ëžë„¤ìš”, 당장 ì‚¬ìš©í•´ë³´ê³ ì‹¶ì–´ìš”!", + part6: "ì¦ê¸°ì„¸ìš”!", + starOnGithub: "GitHubì— ë³„í‘œ 달기", + contact: "Mintplex Labsì— ì—°ë½í•˜ê¸°", + }, + + // General Appearance + general: { + vector: { + title: "벡터 수", + description: "벡터 ë°ì´í„°ë² ì´ìŠ¤ì— 있는 ì´ ë²¡í„° 수입니다.", + }, + names: { + description: "ì´ê²ƒì€ 워í¬ìŠ¤íŽ˜ì´ìŠ¤ì˜ 표시 ì´ë¦„만 변경합니다.", + }, + message: { + title: "ì œì•ˆëœ ì±„íŒ… 메시지", + description: "워í¬ìŠ¤íŽ˜ì´ìŠ¤ 사용ìžê°€ ì‚¬ìš©í• ë©”ì‹œì§€ë¥¼ ìˆ˜ì •í•©ë‹ˆë‹¤.", + add: "새 메시지 추가", + save: "메시지 ì €ìž¥", + heading: "ì €ì—게 설명해주세요", + body: "AnythingLLMì˜ ìž¥ì ", + }, + pfp: { + title: "어시스턴트 프로필 ì´ë¯¸ì§€", + description: "ì´ ì›Œí¬ìŠ¤íŽ˜ì´ìŠ¤ì˜ 어시스턴트 프로필 ì´ë¯¸ì§€ë¥¼ ìˆ˜ì •í•©ë‹ˆë‹¤.", + image: "워í¬ìŠ¤íŽ˜ì´ìŠ¤ ì´ë¯¸ì§€", + remove: "워í¬ìŠ¤íŽ˜ì´ìŠ¤ ì´ë¯¸ì§€ ì œê±°", + }, + delete: { + title: "워í¬ìŠ¤íŽ˜ì´ìŠ¤ ì‚ì œ", + description: + "ì´ ì›Œí¬ìŠ¤íŽ˜ì´ìŠ¤ì™€ ëª¨ë“ ë°ì´í„°ë¥¼ ì‚ì œí•©ë‹ˆë‹¤. ì´ ìž‘ì—…ì€ ëª¨ë“ ì‚¬ìš©ìžì— 대해 워í¬ìŠ¤íŽ˜ì´ìŠ¤ë¥¼ ì‚ì œí•©ë‹ˆë‹¤.", + delete: "워í¬ìŠ¤íŽ˜ì´ìŠ¤ ì‚ì œ", + deleting: "워í¬ìŠ¤íŽ˜ì´ìŠ¤ ì‚ì œ 중...", + "confirm-start": "ì´ ìž‘ì—…ì€", + "confirm-end": + "워í¬ìŠ¤íŽ˜ì´ìŠ¤ ì „ì²´ë¥¼ ì‚ì œí•©ë‹ˆë‹¤. ì´ ìž‘ì—…ì€ ë²¡í„° ë°ì´í„°ë² ì´ìŠ¤ì— 있는 ëª¨ë“ ë²¡í„° ìž„ë² ë”©ì„ ì œê±°í•©ë‹ˆë‹¤.\n\nì›ë³¸ 소스 파ì¼ì€ 그대로 ìœ ì§€ë©ë‹ˆë‹¤. ì´ ìž‘ì—…ì€ ë˜ëŒë¦´ 수 없습니다.", + }, + }, + + // Chat Settings + chat: { + llm: { + title: "워í¬ìŠ¤íŽ˜ì´ìŠ¤ LLM ì œê³µìž", + description: + "ì´ ì›Œí¬ìŠ¤íŽ˜ì´ìŠ¤ì—ì„œ ì‚¬ìš©í• íŠ¹ì • LLM ì œê³µìžì™€ 모ë¸ìž…니다. 기본ì 으로 시스템 LLM ì œê³µìžì™€ ì„¤ì •ì„ ì‚¬ìš©í•©ë‹ˆë‹¤.", + search: "ëª¨ë“ LLM ì œê³µìž ê²€ìƒ‰", + }, + model: { + title: "워í¬ìŠ¤íŽ˜ì´ìŠ¤ 채팅 모ë¸", + description: + "ì´ ì›Œí¬ìŠ¤íŽ˜ì´ìŠ¤ì—ì„œ ì‚¬ìš©í• íŠ¹ì • 채팅 모ë¸ìž…니다. 비어 있으면 시스템 LLM 기본 ì„¤ì •ì„ ì‚¬ìš©í•©ë‹ˆë‹¤.", + wait: "-- ëª¨ë¸ ê¸°ë‹¤ë¦¬ëŠ” 중 --", + }, + mode: { + title: "채팅 모드", + chat: { + title: "채팅", + "desc-start": "문서 ë‚´ìš©ì„ ì°¾ìŠµë‹ˆë‹¤.", + and: "ê·¸ë¦¬ê³ ", + "desc-end": "LLMì˜ ì¼ë°˜ 지ì‹ì„ ê°™ì´ ì‚¬ìš©í•˜ì—¬ ë‹µë³€ì„ ì œê³µí•©ë‹ˆë‹¤", + }, + query: { + title: "쿼리", + "desc-start": "문서 컨í…스트를 ì°¾ì„ ", + only: "때만", + "desc-end": "ë‹µë³€ì„ ì œê³µí•©ë‹ˆë‹¤.", + }, + }, + history: { + title: "채팅 기ë¡", + "desc-start": "ì‘ë‹µì˜ ë‹¨ê¸° ë©”ëª¨ë¦¬ì— í¬í•¨ë ì´ì „ ì±„íŒ…ì˜ ìˆ˜ìž…ë‹ˆë‹¤.", + recommend: "추천 20ê°œ ", + "desc-end": + " 45ê°œ ì´ìƒì€ 메시지 í¬ê¸°ì— ë”°ë¼ ì±„íŒ… 실패가 ë°œìƒí• 수 있습니다.", + }, + prompt: { + title: "프롬프트", + description: + "ì´ ì›Œí¬ìŠ¤íŽ˜ì´ìŠ¤ì—ì„œ ì‚¬ìš©í• í”„ë¡¬í”„íŠ¸ìž…ë‹ˆë‹¤. AIê°€ ì‘ë‹µì„ ìƒì„±í•˜ê¸° 위해 문맥과 ì§€ì¹¨ì„ ì •ì˜í•©ë‹ˆë‹¤. AIê°€ ì§ˆë¬¸ì— ëŒ€í•˜ì—¬ ì •í™•í•œ ì‘ë‹µì„ ìƒì„±í• 수 있ë„ë¡ ì‹ ì¤‘í•˜ê²Œ 프롬프트를 ì œê³µí•´ì•¼ 합니다.", + }, + refusal: { + title: "쿼리 모드 거부 ì‘답 메시지", + "desc-start": "쿼리 모드ì—ì„œ", + query: "ì‘ë‹µì— ì‚¬ìš©í• ìˆ˜ 있는", + "desc-end": "컨í…스트를 ì°¾ì„ ìˆ˜ ì—†ì„ ë•Œ 거부 ì‘답 ë‚´ìš©ì„ ìž‘ì„±í•©ë‹ˆë‹¤.", + }, + temperature: { + title: "LLM 온ë„", + "desc-start": 'ì´ ì„¤ì •ì€ LLM ì‘ë‹µì´ ì–¼ë§ˆë‚˜ "ì°½ì˜ì "ì¼ì§€ë¥¼ ì œì–´í•©ë‹ˆë‹¤.', + "desc-end": + "숫ìžê°€ 높ì„ìˆ˜ë¡ ì°½ì˜ì 입니다. ì¼ë¶€ 모ë¸ì—서는 너무 높게 ì„¤ì •í•˜ë©´ ì¼ê´€ì„± 없는 ì‘ë‹µì´ ë‚˜ì˜¬ 수 있습니다.", + hint: "ëŒ€ë¶€ë¶„ì˜ LLMì€ ìœ íš¨í•œ ê°’ì˜ ë‹¤ì–‘í•œ 허용 범위를 ê°€ì§€ê³ ìžˆìŠµë‹ˆë‹¤. 해당 ì •ë³´ëŠ” LLM ì œê³µìžì—게 문ì˜í•˜ì„¸ìš”.", + }, + }, + + // Vector Database + "vector-workspace": { + identifier: "벡터 ë°ì´í„°ë² ì´ìŠ¤ ì‹ë³„ìž", + snippets: { + title: "최대 문맥 ì¡°ê°", + description: + "ì´ ì„¤ì •ì€ ì±„íŒ… ë˜ëŠ” 쿼리당 LLMì— ì „ì†¡ë 최대 문맥 ì¡°ê° ìˆ˜ë¥¼ ì œì–´í•©ë‹ˆë‹¤.", + recommend: "추천: 4", + }, + doc: { + title: "문서 ìœ ì‚¬ì„± 임계값", + description: + "채팅과 ê´€ë ¨ì´ ìžˆë‹¤ê³ íŒë‹¨ë˜ëŠ” ë¬¸ì„œì˜ ìœ ì‚¬ì„± ì 수입니다. 숫ìžê°€ 높ì„ìˆ˜ë¡ ì§ˆë¬¸ì— ëŒ€í•œ ë¬¸ì„œì˜ ë‚´ìš©ì´ ìœ ì‚¬í•©ë‹ˆë‹¤.", + zero: "ì œí•œ ì—†ìŒ", + low: "ë‚®ìŒ (ìœ ì‚¬ì„± ì 수 ≥ .25)", + medium: "중간 (ìœ ì‚¬ì„± ì 수 ≥ .50)", + high: "ë†’ìŒ (ìœ ì‚¬ì„± ì 수 ≥ .75)", + }, + reset: { + reset: "벡터 ë°ì´í„°ë² ì´ìŠ¤ ìž¬ì„¤ì •", + resetting: "벡터 지우는 중...", + confirm: + "ì´ ì›Œí¬ìŠ¤íŽ˜ì´ìŠ¤ì˜ 벡터 ë°ì´í„°ë² ì´ìŠ¤ë¥¼ ìž¬ì„¤ì •í•˜ë ¤ê³ í•©ë‹ˆë‹¤. 현재 ìž„ë² ë”©ëœ ëª¨ë“ ë²¡í„° ìž„ë² ë”©ì„ ì œê±°í•©ë‹ˆë‹¤.\n\nì›ë³¸ 소스 파ì¼ì€ 그대로 ìœ ì§€ë©ë‹ˆë‹¤. ì´ ìž‘ì—…ì€ ë˜ëŒë¦´ 수 없습니다.", + error: "워í¬ìŠ¤íŽ˜ì´ìŠ¤ 벡터 ë°ì´í„°ë² ì´ìŠ¤ë¥¼ ìž¬ì„¤ì •í• ìˆ˜ 없습니다!", + success: "워í¬ìŠ¤íŽ˜ì´ìŠ¤ 벡터 ë°ì´í„°ë² ì´ìŠ¤ê°€ ìž¬ì„¤ì •ë˜ì—ˆìŠµë‹ˆë‹¤!", + }, + }, + + // Agent Configuration + agent: { + "performance-warning": + "ë„구 í˜¸ì¶œì„ ëª…ì‹œì 으로 지ì›í•˜ì§€ 않는 LLMì˜ ì„±ëŠ¥ì€ ëª¨ë¸ì˜ 기능과 ì •í™•ë„ì— í¬ê²Œ 좌우ë©ë‹ˆë‹¤. ì¼ë¶€ ê¸°ëŠ¥ì€ ì œí•œë˜ê±°ë‚˜ ìž‘ë™í•˜ì§€ ì•Šì„ ìˆ˜ 있습니다.", + provider: { + title: "워í¬ìŠ¤íŽ˜ì´ìŠ¤ ì—ì´ì „트 LLM ì œê³µìž", + description: + "ì´ ì›Œí¬ìŠ¤íŽ˜ì´ìŠ¤ì˜ @agent ì—ì´ì „íŠ¸ì— ì‚¬ìš©í• íŠ¹ì • LLM ì œê³µìž ë° ëª¨ë¸ìž…니다.", + }, + mode: { + chat: { + title: "워í¬ìŠ¤íŽ˜ì´ìŠ¤ ì—ì´ì „트 채팅 모ë¸", + description: + "ì´ ì›Œí¬ìŠ¤íŽ˜ì´ìŠ¤ì˜ @agent ì—ì´ì „íŠ¸ì— ì‚¬ìš©í• íŠ¹ì • 채팅 모ë¸ìž…니다.", + }, + title: "워í¬ìŠ¤íŽ˜ì´ìŠ¤ ì—ì´ì „트 모ë¸", + description: + "ì´ ì›Œí¬ìŠ¤íŽ˜ì´ìŠ¤ì˜ @agent ì—ì´ì „íŠ¸ì— ì‚¬ìš©í• íŠ¹ì • LLM 모ë¸ìž…니다.", + wait: "-- ëª¨ë¸ ê¸°ë‹¤ë¦¬ëŠ” 중 --", + }, + + skill: { + title: "기본 ì—ì´ì „트 스킬", + description: + "기본 ì—ì´ì „íŠ¸ì˜ ëŠ¥ë ¥ì„ ì‚¬ì „ ì •ì˜ëœ ìŠ¤í‚¬ì„ ì‚¬ìš©í•˜ì—¬ í–¥ìƒì‹œí‚µë‹ˆë‹¤. ì´ ì„¤ì •ì€ ëª¨ë“ ì›Œí¬ìŠ¤íŽ˜ì´ìŠ¤ì— ì ìš©ë©ë‹ˆë‹¤.", + rag: { + title: "RAG와 장기 메모리", + description: + 'ì—ì´ì „트가 ì œê³µëœ ë¬¸ì„œë¥¼ 활용하여 ì¿¼ë¦¬ì— ë‹µë³€í•˜ê±°ë‚˜ ì—ì´ì „트ì—게 "기억"í• ë‚´ìš©ì„ ìš”ì²í•˜ì—¬ 장기 메모리 ê²€ìƒ‰ì„ í—ˆìš©í•©ë‹ˆë‹¤.', + }, + view: { + title: "문서 보기 ë° ìš”ì•½", + description: + "ì—ì´ì „트가 현재 ìž„ë² ë”©ëœ ì›Œí¬ìŠ¤íŽ˜ì´ìŠ¤ì˜ 문서 ë‚´ìš©ì„ ë‚˜ì—´í•˜ê³ ìš”ì•½í• ìˆ˜ 있ë„ë¡ í•©ë‹ˆë‹¤.", + }, + scrape: { + title: "웹사ì´íŠ¸ 스í¬ëž˜í•‘", + description: + "ì—ì´ì „트가 웹사ì´íŠ¸ë¥¼ ë°©ë¬¸í•˜ê³ ë‚´ìš©ì„ ìŠ¤í¬ëž˜í•‘í• ìˆ˜ 있ë„ë¡ í•©ë‹ˆë‹¤.", + }, + generate: { + title: "차트 ìƒì„±", + description: + "기본 ì—ì´ì „트가 채팅ì—ì„œ ì œê³µëœ ë°ì´í„°ë¥¼ ì´ìš©í•˜ì—¬ 다양한 ìœ í˜•ì˜ ì°¨íŠ¸ë¥¼ ìƒì„±í• 수 있ë„ë¡ í•©ë‹ˆë‹¤.", + }, + save: { + title: "브ë¼ìš°ì €ì—ì„œ íŒŒì¼ ìƒì„±ê³¼ ì €ìž¥", + description: + "기본 ì—ì´ì „트가 브ë¼ìš°ì €ì—ì„œ 파ì¼ì„ ìƒì„±í•˜ê³ ë‹¤ìš´ë¡œë“œí• ìˆ˜ 있ë„ë¡ í•©ë‹ˆë‹¤.", + }, + web: { + title: "실시간 웹 검색 ë° íƒìƒ‰", + "desc-start": + "ì—ì´ì „트가 ì›¹ì„ ê²€ìƒ‰í•˜ì—¬ ì§ˆë¬¸ì— ë‹µë³€í• ìˆ˜ 있ë„ë¡ í—ˆìš©í•©ë‹ˆë‹¤.", + "desc-end": + "ì—ì´ì „트 세션 중 웹 ê²€ìƒ‰ì€ ì„¤ì •ë˜ì§€ 않으면 ìž‘ë™í•˜ì§€ 않습니다.", + }, + }, + }, + + // Workspace Chats + recorded: { + title: "워í¬ìŠ¤íŽ˜ì´ìŠ¤ 채팅", + description: + "ì´ê²ƒë“¤ì€ 사용ìžë“¤ì´ 보낸 ëª¨ë“ ì±„íŒ…ê³¼ 메시지입니다. ìƒì„± ë‚ ì§œë³„ë¡œ ì •ë ¬ë˜ì–´ 있습니다.", + export: "내보내기", + table: { + id: "ID", + by: "보낸 사람", + workspace: "워í¬ìŠ¤íŽ˜ì´ìŠ¤", + prompt: "프롬프트", + response: "ì‘답", + at: "보낸 ì‹œê°", + }, + }, + + // Appearance + appearance: { + title: "외관", + description: "플랫í¼ì˜ 외관 ì„¤ì •ì„ ìˆ˜ì •í•©ë‹ˆë‹¤.", + logo: { + title: "ì‚¬ìš©ìž ë¡œê³ ", + description: + "사용ìžì˜ ë¡œê³ ë¥¼ 업로드하여 ì±—ë´‡ì„ ìžì‹ ì˜ ê²ƒìœ¼ë¡œ 만드ì‹ì‹œì˜¤.", + add: "ì‚¬ìš©ìž ë¡œê³ ì¶”ê°€", + recommended: "추천 í¬ê¸°: 800 x 200", + remove: "ì œê±°", + replace: "êµì²´", + }, + message: { + title: "ì‚¬ìš©ìž ë©”ì‹œì§€", + description: "사용ìžì—게 표시ë˜ëŠ” ìžë™ 메시지를 작성합니다.", + new: "새로운", + system: "시스템", + user: "사용ìž", + message: "메시지", + assistant: "AnythingLLM 채팅 어시스턴트", + "double-click": "ë”블 í´ë¦í•˜ì—¬ 편집...", + save: "메시지 ì €ìž¥", + }, + icons: { + title: "맞춤형 바닥글 ì•„ì´ì½˜", + description: "사ì´ë“œë°” í•˜ë‹¨ì— í‘œì‹œë˜ëŠ” ì•„ì´ì½˜ì„ ìˆ˜ì •í•©ë‹ˆë‹¤.", + icon: "ì•„ì´ì½˜", + link: "ë§í¬", + }, + }, + + // API Keys + api: { + title: "API 키", + description: + "API 키는 ì†Œìœ ìžê°€ í”„ë¡œê·¸ëž˜ë° ë°©ì‹ìœ¼ë¡œ ì´ AnythingLLM ì¸ìŠ¤í„´ìŠ¤ì— ì•¡ì„¸ìŠ¤í•˜ê³ ê´€ë¦¬í• ìˆ˜ 있ë„ë¡ í•©ë‹ˆë‹¤.", + link: "API 문서 ì½ê¸°", + generate: "새 API 키 ìƒì„±", + table: { + key: "API 키", + by: "ìƒì„±í•œ 사람", + created: "ìƒì„±ì¼", + }, + }, + + llm: { + title: "LLM 기본 ì„¤ì •", + description: + "ì´ê²ƒì€ 채팅과 ìž„ë² ë”©ì„ í•˜ê¸° 위한 ì„ í˜¸í•˜ëŠ” LLM ì œê³µìžì˜ ì¸ì¦ìž…니다. ì´ í‚¤ê°€ 현재 활성 ìƒíƒœì´ê³ ì •í™•í•´ì•¼ AnythingLLMì´ ì œëŒ€ë¡œ ìž‘ë™í•©ë‹ˆë‹¤.", + provider: "LLM ì œê³µìž", + }, + + transcription: { + title: "í…스트 변환 ëª¨ë¸ ê¸°ë³¸ ì„¤ì •", + description: + "ì´ê²ƒì€ ì„ í˜¸í•˜ëŠ” í…스트 변환 ëª¨ë¸ ì œê³µìžì˜ ì¸ì¦ìž…니다. ì´ í‚¤ê°€ 현재 활성 ìƒíƒœì´ê³ ì •í™•í•´ì•¼ 미디어 íŒŒì¼ ë° ì˜¤ë””ì˜¤ê°€ í…스트 변환ë©ë‹ˆë‹¤.", + provider: "í…스트 변환 ì œê³µìž", + "warn-start": + "RAM ë˜ëŠ” CPU ì„±ëŠ¥ì´ ì œí•œëœ ë¨¸ì‹ ì—ì„œ 로컬 ìœ„ìŠ¤í¼ ëª¨ë¸ì„ 사용하면 미디어 파ì¼ì„ ì²˜ë¦¬í• ë•Œ AnythingLLMì´ ì¤‘ë‹¨ë 수 있습니다.", + "warn-recommend": "최소 2GB RAMê³¼ 10Mb 보다 ìž‘ì€ íŒŒì¼ ì—…ë¡œë“œë¥¼ 권장합니다.", + "warn-end": "ë‚´ìž¥ëœ ëª¨ë¸ì€ 첫 번째 사용 ì‹œ ìžë™ìœ¼ë¡œ 다운로드ë©ë‹ˆë‹¤.", + }, + + embedding: { + title: "ìž„ë² ë”© 기본 ì„¤ì •", + "desc-start": + "ìž„ë² ë”© ì—”ì§„ì„ ì§€ì›í•˜ì§€ 않는 LLMì„ ì‚¬ìš©í• ë•Œ í…스트를 ìž„ë² ë”©í•˜ëŠ” ë° ë‹¤ë¥¸ ìž„ë² ë”© 엔진 ì œê³µìžì˜ ì¸ì¦ì´ í•„ìš”í• ìˆ˜ 있습니다.", + "desc-end": + "ìž„ë² ë”©ì€ í…스트를 벡터로 변환하는 ê³¼ì •ìž…ë‹ˆë‹¤. 파ì¼ê³¼ 프롬프트를 AnythingLLMì´ ì²˜ë¦¬í• ìˆ˜ 있는 형ì‹ìœ¼ë¡œ ë³€í™˜í•˜ë ¤ë©´ ì´ëŸ¬í•œ ì¸ì¦ì´ 필요합니다.", + provider: { + title: "ìž„ë² ë”© ì œê³µìž", + description: + "AnythingLLMì˜ ê¸°ë³¸ ìž„ë² ë”© ì—”ì§„ì„ ì‚¬ìš©í• ë•ŒëŠ” ì„¤ì •ì´ í•„ìš”í•˜ì§€ 않습니다.", + }, + }, + + text: { + title: "í…스트 ë¶„í• ë° ì²í‚¹ 기본 ì„¤ì •", + "desc-start": + "새 문서를 벡터 ë°ì´í„°ë² ì´ìŠ¤ì— 삽입하기 ì „ì— ê¸°ë³¸ í…스트 ë¶„í• ë°©ì‹ì„ ë³€ê²½í• ìˆ˜ 있습니다.", + "desc-end": + "í…스트 ë¶„í• ë°©ì‹ê³¼ ê·¸ ì˜í–¥ì„ ì´í•´í•˜ê³ 있는 경우ì—만 ì´ ì„¤ì •ì„ ë³€ê²½í•´ì•¼ 합니다.", + "warn-start": "ì—¬ê¸°ì˜ ë³€ê²½ 사í•ì€", + "warn-center": "새로 ìž„ë² ë”©ë˜ëŠ” 문서", + "warn-end": "ì—만 ì ìš©ë©ë‹ˆë‹¤. 기존 문서ì—는 ì ìš©ë˜ì§€ 않습니다.", + size: { + title: "í…스트 ì²í¬ í¬ê¸°", + description: "ë‹¨ì¼ ë²¡í„°ì— ë“¤ì–´ê°ˆ 수 있는 최대 ë¬¸ìž ê¸¸ì´ìž…니다.", + recommend: "ìž„ë² ë“œ ëª¨ë¸ ìµœëŒ€ 길ì´ëŠ”", + }, + + overlap: { + title: "í…스트 ì²í¬ 겹침", + description: + "ì²í‚¹ ë™ì•ˆ ë‘ ì¸ì ‘ í…스트 ì²í¬ ê°„ì— ê²¹ì¹ ìˆ˜ 있는 최대 ë¬¸ìž ìˆ˜ìž…ë‹ˆë‹¤.", + }, + }, + + // Vector Database + vector: { + title: "벡터 ë°ì´í„°ë² ì´ìŠ¤", + description: + "ì´ê²ƒì€ AnythingLLM ì¸ìŠ¤í„´ìŠ¤ê°€ 벡터 ë°ì´í„°ë² ì´ìŠ¤ ì‚¬ìš©ì„ ìœ„í•œ ì¸ì¦ ì„¤ì •ìž…ë‹ˆë‹¤. ì´ í‚¤ê°€ 활성 ìƒíƒœì´ê³ ì •í™•í•´ì•¼ 합니다.", + provider: { + title: "벡터 ë°ì´í„°ë² ì´ìŠ¤ ì œê³µìž", + description: "LanceDB를 ì„ íƒí•˜ë©´ ì„¤ì •ì´ í•„ìš” 없습니다.", + }, + }, + + // Embeddable Chat Widgets + embeddable: { + title: "ìž„ë² ë“œ 가능한 채팅 ìœ„ì ¯", + description: + "ìž„ë² ë“œ 가능한 채팅 ìœ„ì ¯ì€ í•˜ë‚˜ì˜ ì›Œí¬ìŠ¤íŽ˜ì´ìŠ¤ì— ì—°ê²°ëœ ê³µê°œìš© 채팅방입니다. ì´ë¥¼ 통해 워í¬ìŠ¤íŽ˜ì´ìŠ¤ ì„¤ì •ì´ ì ìš©ëœ ì±„íŒ…ë°©ì„ ì¼ë°˜ì¸ë“¤ì—게 ê³µê°œí• ìˆ˜ 있습니다.", + create: "ìž„ë² ë“œ ìƒì„±", + table: { + workspace: "워í¬ìŠ¤íŽ˜ì´ìŠ¤", + chats: "보낸 채팅", + Active: "활성 ë„ë©”ì¸", + }, + }, + + "embed-chats": { + title: "ìž„ë² ë“œ 채팅", + description: "게시한 ìž„ë² ë“œì—ì„œì˜ ëª¨ë“ ì±„íŒ…ê³¼ ë©”ì‹œì§€ì˜ ê¸°ë¡ìž…니다.", + table: { + embed: "ìž„ë² ë“œ", + sender: "보낸 사람", + message: "메시지", + response: "ì‘답", + at: "보낸 ì‹œê°", + }, + }, + + multi: { + title: "다중 ì‚¬ìš©ìž ëª¨ë“œ", + description: + "다중 ì‚¬ìš©ìž ëª¨ë“œë¥¼ 활성화하여 ì¸ìŠ¤í„´ìŠ¤ê°€ 팀 ì‚¬ìš©ì„ ì§€ì›í•˜ë„ë¡ ì„¤ì •í•©ë‹ˆë‹¤.", + enable: { + "is-enable": "다중 ì‚¬ìš©ìž ëª¨ë“œê°€ 활성화ë˜ì—ˆìŠµë‹ˆë‹¤", + enable: "다중 ì‚¬ìš©ìž ëª¨ë“œ 활성화", + description: + "ë‹¹ì‹ ì€ ê¸°ë³¸ 관리ìžê°€ ë©ë‹ˆë‹¤. 관리ìžë¡œì„œ ëª¨ë“ ì‹ ê·œ ì‚¬ìš©ìž ë˜ëŠ” 관리ìžì˜ ê³„ì •ì„ ìƒì„±í•´ì•¼ 합니다. 비밀번호를 잃어버리면 관리ìžë§Œ 비밀번호를 ìž¬ì„¤ì •í• ìˆ˜ 있습니다.", + username: "ê´€ë¦¬ìž ê³„ì • ì‚¬ìš©ìž ì´ë¦„", + password: "ê´€ë¦¬ìž ê³„ì • 비밀번호", + }, + password: { + title: "비밀번호 보호", + description: + "AnythingLLM ì¸ìŠ¤í„´ìŠ¤ë¥¼ 비밀번호로 보호하ì‹ì‹œì˜¤. ì´ ë¹„ë°€ë²ˆí˜¸ë¥¼ 잊어버리면 복구 ë°©ë²•ì´ ì—†ìœ¼ë¯€ë¡œ 반드시 ì €ìž¥í•˜ì„¸ìš”.", + }, + instance: { + title: "ì¸ìŠ¤í„´ìŠ¤ 비밀번호 보호", + description: + "ë‹¹ì‹ ì€ ê¸°ë³¸ 관리ìžê°€ ë©ë‹ˆë‹¤. 관리ìžë¡œì„œ ëª¨ë“ ì‹ ê·œ ì‚¬ìš©ìž ë˜ëŠ” 관리ìžì˜ ê³„ì •ì„ ìƒì„±í•´ì•¼ 합니다. 비밀번호를 잃어버리면 관리ìžë§Œ 비밀번호를 ìž¬ì„¤ì •í• ìˆ˜ 있습니다.", + password: "ì¸ìŠ¤í„´ìŠ¤ 비밀번호", + }, + }, + + // Event Logs + event: { + title: "ì´ë²¤íŠ¸ 로그", + description: + "모니터ë§ì„ 위해 ì´ ì¸ìŠ¤í„´ìŠ¤ì—ì„œ ë°œìƒí•˜ëŠ” ëª¨ë“ ìž‘ì—…ê³¼ ì´ë²¤íŠ¸ë¥¼ 확ì¸í•©ë‹ˆë‹¤.", + clear: "ì´ë²¤íŠ¸ 로그 지우기", + table: { + type: "ì´ë²¤íŠ¸ ìœ í˜•", + user: "사용ìž", + occurred: "ë°œìƒ ì‹œê°", + }, + }, + + // Privacy & Data-Handling + privacy: { + title: "ê°œì¸ì •ë³´ì™€ ë°ì´í„° 처리", + description: + "ì—°ê²°ëœ íƒ€ì‚¬ ì œê³µìžì™€ AnythingLLMì´ ë°ì´í„°ë¥¼ 처리하는 ë°©ì‹ì„ 구성합니다.", + llm: "LLM ì„ íƒ", + embedding: "ìž„ë² ë”© 기본 ì„¤ì •", + vector: "벡터 ë°ì´í„°ë² ì´ìŠ¤", + anonymous: "ìµëª… ì›ê²© ë¶„ì„ í™œì„±í™”", + }, +}; + +export default TRANSLATIONS; diff --git a/frontend/src/locales/resources.js b/frontend/src/locales/resources.js index 04c06502e..55306cf94 100644 --- a/frontend/src/locales/resources.js +++ b/frontend/src/locales/resources.js @@ -15,6 +15,7 @@ // from the primary dictionary. import English from "./en/common.js"; +import Korean from "./ko/common.js"; import Spanish from "./es/common.js"; import French from "./fr/common.js"; import Mandarin from "./zh/common.js"; @@ -25,6 +26,9 @@ export const resources = { en: { common: English, }, + ko: { + common: Korean, + }, zh: { common: Mandarin, }, diff --git a/frontend/src/locales/ru/common.js b/frontend/src/locales/ru/common.js index a9cbdbc3c..b898c79b2 100644 --- a/frontend/src/locales/ru/common.js +++ b/frontend/src/locales/ru/common.js @@ -10,6 +10,7 @@ const TRANSLATIONS = { previous: "ÐŸÑ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ Ñтраница", next: "Ð¡Ð»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ Ñтраница", }, + settings: { title: "ÐаÑтройки ÑкземплÑра", system: "СиÑтемные наÑтройки", @@ -23,6 +24,7 @@ const TRANSLATIONS = { transcription: "Модель транÑкрипции", embedder: "ÐаÑтройки вÑтраиваниÑ", "text-splitting": "Разделение и ÑÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ñ‚ÐµÐºÑта", + "voice-speech": "Ð“Ð¾Ð»Ð¾Ñ Ð¸ Речь", "vector-database": "Ð’ÐµÐºÑ‚Ð¾Ñ€Ð½Ð°Ñ Ð±Ð°Ð·Ð° данных", embeds: "Виджеты вÑÑ‚Ñ€Ð°Ð¸Ð²Ð°Ð½Ð¸Ñ Ñ‡Ð°Ñ‚Ð°", "embed-chats": "ИÑÑ‚Ð¾Ñ€Ð¸Ñ Ð²ÑÑ‚Ñ€Ð°Ð¸Ð²Ð°Ð½Ð¸Ñ Ñ‡Ð°Ñ‚Ð¾Ð²", @@ -33,7 +35,10 @@ const TRANSLATIONS = { "agent-skills": "Ðавыки агента", admin: "ÐдминиÑтратор", tools: "ИнÑтрументы", + "experimental-features": "ÐкÑпериментальные функции", + contact: "è”系支æŒÐ¡Ð²ÑзатьÑÑ Ñ ÐŸÐ¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¾Ð¹", }, + login: { "multi-user": { welcome: "Добро пожаловать в", @@ -48,7 +53,43 @@ const TRANSLATIONS = { start: "Войти в ваш", end: "аккаунт.", }, + "password-reset": { + title: "Ð¡Ð±Ñ€Ð¾Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ", + description: + "ПредоÑтавьте необходимую информацию ниже, чтобы ÑброÑить ваш пароль.", + "recovery-codes": "Коды воÑÑтановлениÑ", + "recovery-code": "Код воÑÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ {{index}}", + "back-to-login": "ВернутьÑÑ Ðº входу", + }, }, + + welcomeMessage: { + part1: + "Добро пожаловать в AnythingLLM, открытый инÑтрумент иÑкуÑÑтвенного интеллекта от Mintplex Labs, который превращает что угодно в обученный чат-бот, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼ вы можете общатьÑÑ Ð¸ задавать вопроÑÑ‹. AnythingLLM - Ñто ПО BYOK (принеÑи Ñвои ÑобÑтвенные ключи), поÑтому за иÑпользование Ñтого ПО нет подпиÑки, платы или других Ñборов, кроме тех, что вы хотите иÑпользовать.", + part2: + "AnythingLLM - Ñто Ñамый проÑтой ÑпоÑоб объединить мощные продукты ИИ, такие как OpenAi, GPT-4, LangChain, PineconeDB, ChromaDB и другие ÑервиÑÑ‹, в аккуратный пакет без лишних хлопот, чтобы повыÑить вашу продуктивноÑÑ‚ÑŒ в 100 раз.", + part3: + "AnythingLLM может работать полноÑтью локально на вашем компьютере Ñ Ð¼Ð¸Ð½Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð¾Ð¹ нагрузкой, вы даже не заметите его приÑутÑтвиÑ! GPU не требуетÑÑ. Также доÑтупна уÑтановка в облаке и на локальных Ñерверах.\nÐкоÑиÑтема инÑтрументов ИИ ÑтановитÑÑ Ð¼Ð¾Ñ‰Ð½ÐµÐµ Ñ ÐºÐ°Ð¶Ð´Ñ‹Ð¼ днем. AnythingLLM упрощает их иÑпользование.", + githubIssue: "Создать задачу на Github", + user1: "Как начать?!", + part4: + 'Ðто проÑто. Ð’Ñе коллекции организованы в корзины, которые мы называем "Workspaces". Workspaces - Ñто корзины файлов, документов, изображений, PDF и других файлов, которые будут преобразованы в нечто, что LLM Ñможет понÑÑ‚ÑŒ и иÑпользовать в беÑеде.\n\nÐ’Ñ‹ можете добавлÑÑ‚ÑŒ и удалÑÑ‚ÑŒ файлы в любое времÑ.', + createWorkspace: "Создайте Ñвою первую workspace", + user2: + "Ðто что-то вроде ИИ-дропбокÑа? Ркак наÑчет чата? Ðто ведь чат-бот, верно?", + part5: + "AnythingLLM - Ñто больше, чем проÑто умный Dropbox.\n\nAnythingLLM предлагает два ÑпоÑоба Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ñ Ð²Ð°ÑˆÐ¸Ð¼Ð¸ данными:\n\n<i>ЗапроÑ:</i> Ваши чаты будут возвращать данные или выводы, найденные в документах в вашем workspace, к которому у него еÑÑ‚ÑŒ доÑтуп. Добавление большего количеÑтва документов в workspace делает его умнее!\n\n<i>БеÑеда:</i> Ваши документы и иÑÑ‚Ð¾Ñ€Ð¸Ñ Ñ‡Ð°Ñ‚Ð¾Ð² вмеÑте ÑпоÑобÑтвуют знаниÑм LLM одновременно. Отлично подходит Ð´Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ в реальном времени на оÑнове текÑта или иÑÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸ недоразумений, которые может иметь LLM.\n\nÐ’Ñ‹ можете переключатьÑÑ Ð¼ÐµÐ¶Ð´Ñƒ режимами <i>прÑмо во Ð²Ñ€ÐµÐ¼Ñ Ñ‡Ð°Ñ‚Ð°!</i>", + user3: "Вау, Ñто звучит потрÑÑающе, дайте попробовать прÑмо ÑейчаÑ!", + part6: "ВеÑелитеÑÑŒ!", + starOnGithub: "Звезда на GitHub", + contact: "СвÑзатьÑÑ Ñ Mintplex Labs", + }, + + "new-workspace": { + title: "ÐÐ¾Ð²Ð°Ñ Ð Ð°Ð±Ð¾Ñ‡Ð°Ñ ÐžÐ±Ð»Ð°ÑÑ‚ÑŒ", + placeholder: "ÐœÐ¾Ñ Ð Ð°Ð±Ð¾Ñ‡Ð°Ñ ÐžÐ±Ð»Ð°ÑÑ‚ÑŒ", + }, + "workspaces—settings": { general: "Общие наÑтройки", chat: "ÐаÑтройки чата", diff --git a/frontend/src/locales/zh/common.js b/frontend/src/locales/zh/common.js index 8723f7ec9..9392ab11c 100644 --- a/frontend/src/locales/zh/common.js +++ b/frontend/src/locales/zh/common.js @@ -26,6 +26,7 @@ const TRANSLATIONS = { transcription: "Transcription 模型", embedder: "Embedder 首选项", "text-splitting": "文本分割", + "voice-speech": "è¯éŸ³å’Œè®²è¯", "vector-database": "å‘é‡æ•°æ®åº“", embeds: "嵌入å¼å¯¹è¯", "embed-chats": "嵌入å¼å¯¹è¯åŽ†å²", @@ -36,6 +37,8 @@ const TRANSLATIONS = { "agent-skills": "代ç†æŠ€èƒ½", admin: "管ç†å‘˜", tools: "工具", + "experimental-features": "实验功能", + contact: "è”系支æŒ", }, // Page Definitions @@ -53,6 +56,39 @@ const TRANSLATIONS = { start: "ç™»å½•ä½ çš„", end: "账户", }, + "password-reset": { + title: "é‡ç½®å¯†ç ", + description: "请æ供以下必è¦ä¿¡æ¯ä»¥é‡ç½®æ‚¨çš„密ç 。", + "recovery-codes": "æ¢å¤ä»£ç ", + "recovery-code": "æ¢å¤ä»£ç {{index}}", + "back-to-login": "返回登录", + }, + }, + + welcomeMessage: { + part1: + "欢迎使用 AnythingLLM,这是由 Mintplex Labs å¼€å‘çš„å¼€æº AI 工具,å¯ä»¥å°†ä»»ä½•ä¸œè¥¿è½¬æ¢ä¸ºæ‚¨å¯ä»¥æŸ¥è¯¢å’ŒèŠå¤©çš„è®ç»ƒæœ‰ç´ çš„èŠå¤©æœºå™¨äººã€‚AnythingLLM 是一款 BYOKï¼ˆè‡ªå¸¦å¯†é’¥ï¼‰è½¯ä»¶ï¼Œå› æ¤é™¤äº†æ‚¨æƒ³ä½¿ç”¨çš„æœåŠ¡å¤–,æ¤è½¯ä»¶ä¸æ”¶å–订阅费ã€è´¹ç”¨æˆ–其他费用。", + part2: + "AnythingLLM 是将强大的 AI 产å“(如 OpenAiã€GPT-4ã€LangChainã€PineconeDBã€ChromaDB ç‰ï¼‰æ•´åˆåœ¨ä¸€ä¸ªæ•´æ´çš„包ä¸è€Œæ— 需ç¹çæ“作的最简å•æ–¹æ³•ï¼Œå¯ä»¥å°†æ‚¨çš„生产力æ高 100 å€ã€‚", + part3: + "AnythingLLM å¯ä»¥å®Œå…¨åœ¨æ‚¨çš„本地计算机上è¿è¡Œï¼Œå‡ 乎没有开销,您甚至ä¸ä¼šæ³¨æ„到它的å˜åœ¨ï¼æ— 需 GPU。也å¯ä»¥è¿›è¡Œäº‘端和本地安装。\nAI 工具生æ€ç³»ç»Ÿæ¯å¤©éƒ½åœ¨å˜å¾—更强大。AnythingLLM 使其易于使用。", + githubIssue: "在 Github 上创建问题", + user1: "我该如何开始?!", + part4: + "很简å•ã€‚所有集åˆéƒ½ç»„织æˆæˆ‘们称之为“工作区â€çš„桶。工作区是文件ã€æ–‡æ¡£ã€å›¾åƒã€PDF 和其他文件的å˜å‚¨æ¡¶ï¼Œè¿™äº›æ–‡ä»¶å°†è¢«è½¬æ¢ä¸º LLM å¯ä»¥ç†è§£å’Œåœ¨å¯¹è¯ä¸ä½¿ç”¨çš„内容。\n\n您å¯ä»¥éšæ—¶æ·»åŠ å’Œåˆ é™¤æ–‡ä»¶ã€‚", + createWorkspace: "创建您的第一个工作区", + user2: "è¿™åƒæ˜¯ä¸€ä¸ª AI Dropbox å—?那么èŠå¤©å‘¢ï¼Ÿå®ƒæ˜¯ä¸€ä¸ªèŠå¤©æœºå™¨äººï¼Œä¸æ˜¯å—?", + part5: + "AnythingLLM ä¸ä»…仅是一个更智能的 Dropbox。\n\nAnythingLLM æ供了两ç§ä¸Žæ‚¨çš„æ•°æ®äº¤æµçš„æ–¹å¼ï¼š\n\n<i>查询:</i> 您的èŠå¤©å°†è¿”回在您的工作区ä¸è®¿é—®çš„文档ä¸æ‰¾åˆ°çš„æ•°æ®æˆ–推论。å‘å·¥ä½œåŒºæ·»åŠ æ›´å¤šæ–‡æ¡£ä¼šä½¿å…¶æ›´æ™ºèƒ½ï¼\n\n<i>对è¯ï¼š</i> 您的文档和æ£åœ¨è¿›è¡Œçš„èŠå¤©è®°å½•åŒæ—¶ä¸º LLM 知识åšå‡ºè´¡çŒ®ã€‚éžå¸¸é€‚åˆæ·»åŠ 基于文本的实时信æ¯æˆ–çº æ£ LLM å¯èƒ½å˜åœ¨çš„误解。\n\n您å¯ä»¥åœ¨èŠå¤©è¿‡ç¨‹ä¸ <i>切æ¢æ¨¡å¼ï¼</i>", + user3: "哇,这å¬èµ·æ¥å¾ˆæ£’,让我马上试试ï¼", + part6: "玩得开心ï¼", + starOnGithub: "在 GitHub ä¸ŠåŠ æ˜Ÿ", + contact: "è”ç³» Mintplex Labs", + }, + + "new-workspace": { + title: "新工作区", + placeholder: "我的工作区", }, // Workspace Settings menu items -- GitLab