From 7e34a8af065ff21552c6c5ca11d154212d53b514 Mon Sep 17 00:00:00 2001 From: Ilya Zedgenizov Date: Sun, 15 Oct 2023 21:55:22 +0400 Subject: [PATCH] Saber --- apps/desktop/dist/.keep | 0 .../ChatBody/ConversationMessage/index.tsx | 26 +- .../components/Chat/ChatFooter/NLInput.tsx | 3 +- .../ListNavigation/ListNavigation.stories.tsx | 2 +- .../src/components/LanguageSelector/index.tsx | 4 +- client/src/components/NavBar/index.tsx | 14 +- .../src/components/PromptGuidePopup/index.tsx | 17 +- .../Settings/General/Profile/index.tsx | 63 +-- client/src/components/Settings/index.tsx | 4 +- client/src/components/StatusBar/index.tsx | 15 - client/src/i18n.ts | 14 +- client/src/locales/en.json | 4 +- client/src/locales/es.json | 397 ----------------- client/src/locales/ja.json | 394 ----------------- client/src/locales/ru.json | 356 ++++++++++++++++ client/src/locales/zh-CN.json | 402 ------------------ client/src/pages/HomeTab/Content.tsx | 4 +- .../src/pages/Onboarding/UserForm/index.tsx | 286 +++---------- client/src/pages/Onboarding/index.tsx | 26 +- client/src/services/storage.ts | 4 +- client/src/types/general.ts | 2 +- client/src/types/user.ts | 9 + client/src/utils/index.ts | 10 +- server/bleep/src/agent.rs | 12 +- server/bleep/src/lib.rs | 4 +- server/bleep/src/repo/iterator.rs | 6 +- server/bleep/src/webserver/answer.rs | 17 +- 27 files changed, 487 insertions(+), 1608 deletions(-) delete mode 100644 apps/desktop/dist/.keep delete mode 100644 client/src/locales/es.json delete mode 100644 client/src/locales/ja.json create mode 100644 client/src/locales/ru.json delete mode 100644 client/src/locales/zh-CN.json create mode 100644 client/src/types/user.ts diff --git a/apps/desktop/dist/.keep b/apps/desktop/dist/.keep deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/client/src/components/Chat/ChatBody/ConversationMessage/index.tsx b/client/src/components/Chat/ChatBody/ConversationMessage/index.tsx index af21e0a507..638814b6a9 100644 --- a/client/src/components/Chat/ChatBody/ConversationMessage/index.tsx +++ b/client/src/components/Chat/ChatBody/ConversationMessage/index.tsx @@ -18,12 +18,14 @@ import { getDateFnsLocale } from '../../../../utils'; import MarkdownWithCode from '../../../MarkdownWithCode'; import { AppNavigationContext } from '../../../../context/appNavigationContext'; import { + getJsonFromStorage, getPlainFromStorage, LOADING_STEPS_SHOWN_KEY, - savePlainToStorage, + savePlainToStorage, USER_DATA, } from '../../../../services/storage'; import MessageFeedback from './MessageFeedback'; import FileChip from './FileChip'; +import {User} from "../../../../types/user"; type Props = { author: ChatMessageAuthor; @@ -44,6 +46,8 @@ type Props = { singleFileExplanation?: boolean; }; +const user: User | null = getJsonFromStorage(USER_DATA); + const ConversationMessage = ({ author, message, @@ -160,7 +164,7 @@ const ConversationMessage = ({
{author === ChatMessageAuthor.User ? ( {t('avatar')} ) : ( @@ -203,15 +207,15 @@ const ConversationMessage = ({
)} - + {/**/} ) : error ? (
diff --git a/client/src/components/Chat/ChatFooter/NLInput.tsx b/client/src/components/Chat/ChatFooter/NLInput.tsx index a92a9259f8..a01153f1d3 100644 --- a/client/src/components/Chat/ChatFooter/NLInput.tsx +++ b/client/src/components/Chat/ChatFooter/NLInput.tsx @@ -18,6 +18,7 @@ import { UIContext } from '../../../context/uiContext'; import { DeviceContext } from '../../../context/deviceContext'; import Button from '../../Button'; import InputLoader from './InputLoader'; +import {getJsonFromStorage, PROMPT_GUIDE} from "../../../services/storage"; type Props = { id?: string; @@ -90,7 +91,7 @@ const NLInput = ({ ); const handleInputFocus = useCallback(() => { - if (envConfig?.bloop_user_profile?.prompt_guide !== 'dismissed') { + if (getJsonFromStorage(PROMPT_GUIDE) !== 'dismissed') { setPromptGuideOpen(true); } }, [envConfig?.bloop_user_profile?.prompt_guide]); diff --git a/client/src/components/IdeNavigation/ListNavigation/ListNavigation.stories.tsx b/client/src/components/IdeNavigation/ListNavigation/ListNavigation.stories.tsx index c7edd665c0..e6de2037b9 100644 --- a/client/src/components/IdeNavigation/ListNavigation/ListNavigation.stories.tsx +++ b/client/src/components/IdeNavigation/ListNavigation/ListNavigation.stories.tsx @@ -76,7 +76,7 @@ export const LightNavigation = () => { }, + // { title: 'General', icon: }, { title: 'Preferences', icon: }, { title: 'Repositories', icon: }, ]} diff --git a/client/src/components/LanguageSelector/index.tsx b/client/src/components/LanguageSelector/index.tsx index ae1384b670..61a197086e 100644 --- a/client/src/components/LanguageSelector/index.tsx +++ b/client/src/components/LanguageSelector/index.tsx @@ -6,9 +6,7 @@ import { LocaleType } from '../../types/general'; const localesMap: Record = { en: { name: 'English', icon: '🇬🇧' }, - ja: { name: '日本', icon: '🇯🇵' }, - zhCN: { name: '简体中文', icon: '🇨🇳' }, - es: { name: 'Español', icon: '🇪🇸' }, + ru: { name: 'Russian', icon: '🇷🇺' }, }; const LanguageSelector = () => { diff --git a/client/src/components/NavBar/index.tsx b/client/src/components/NavBar/index.tsx index 4ec25d5277..17cd8b1926 100644 --- a/client/src/components/NavBar/index.tsx +++ b/client/src/components/NavBar/index.tsx @@ -12,6 +12,8 @@ import { getSubscriptionLink, githubLogout } from '../../services/api'; import { PersonalQuotaContext } from '../../context/personalQuotaContext'; import LiteLoaderContainer from '../Loaders/LiteLoader'; import Tab from './Tab'; +import {User} from "../../types/user"; +import {getJsonFromStorage, USER_DATA, USER_DATA_FORM} from "../../services/storage"; type Props = { isSkeleton?: boolean; @@ -29,6 +31,8 @@ const NavBar = ({ isSkeleton, activeTab }: Props) => { const { tabs, handleReorderTabs, setActiveTab } = useContext(TabsContext); const [isFetchingLink, setIsFetchingLink] = useState(false); + const user: User | null = getJsonFromStorage(USER_DATA); + const handleUpgrade = useCallback(() => { setIsFetchingLink(true); getSubscriptionLink() @@ -73,12 +77,6 @@ const NavBar = ({ isSkeleton, activeTab }: Props) => { type: MenuListItemType.DEFAULT, onClick: () => openLink('https://bloop.ai/docs'), }, - { - text: t('Report a bug'), - icon: , - type: MenuListItemType.DEFAULT, - onClick: () => setBugReportModalOpen(true), - }, { text: t('Sign out'), icon: , @@ -141,9 +139,9 @@ const NavBar = ({ isSkeleton, activeTab }: Props) => { - avatar + avatar
) : ( diff --git a/client/src/components/PromptGuidePopup/index.tsx b/client/src/components/PromptGuidePopup/index.tsx index f55ea67ef5..e5870587ce 100644 --- a/client/src/components/PromptGuidePopup/index.tsx +++ b/client/src/components/PromptGuidePopup/index.tsx @@ -7,6 +7,7 @@ import { DeviceContext } from '../../context/deviceContext'; import { UIContext } from '../../context/uiContext'; import { getConfig, putConfig } from '../../services/api'; import PromptSvg from './PromptSvg'; +import {PROMPT_GUIDE, saveJsonToStorage} from "../../services/storage"; const PromptGuidePopup = () => { const { t } = useTranslation(); @@ -17,21 +18,7 @@ const PromptGuidePopup = () => { const handlePromptGuideClose = useCallback(() => { setPromptGuideOpen(false); - setEnvConfig((prev) => ({ - ...prev, - bloop_user_profile: { - ...(prev.bloop_user_profile || {}), - prompt_guide: 'dismissed', - }, - })); - putConfig({ - bloop_user_profile: { - ...(envConfig?.bloop_user_profile || {}), - prompt_guide: 'dismissed', - }, - }).then(() => { - getConfig().then(setEnvConfig); - }); + saveJsonToStorage(PROMPT_GUIDE, 'dismissed'); }, [envConfig?.bloop_user_profile]); return ( diff --git a/client/src/components/Settings/General/Profile/index.tsx b/client/src/components/Settings/General/Profile/index.tsx index d3f82a2fa0..4a07f83a30 100644 --- a/client/src/components/Settings/General/Profile/index.tsx +++ b/client/src/components/Settings/General/Profile/index.tsx @@ -67,68 +67,7 @@ const ProfileSettings = () => { return (
- - -
- - -
-
- - -
- { - if (!EMAIL_REGEX.test(form.email)) { - setForm((prev) => ({ - ...prev, - emailError: t('Email is not valid'), - })); - } - }} - error={form.emailError} - /> -
-
- +
); }; diff --git a/client/src/components/Settings/index.tsx b/client/src/components/Settings/index.tsx index 8d0ef1781b..a2e6f7dd95 100644 --- a/client/src/components/Settings/index.tsx +++ b/client/src/components/Settings/index.tsx @@ -31,7 +31,7 @@ const Settings = () => { const listNavigationItems = useMemo( () => [ - { title: t('General'), icon: }, + // { title: t('General'), icon: }, { title: t('Preferences'), icon: }, // { title: 'Repositories', icon: }, ], @@ -48,7 +48,7 @@ const Settings = () => { style={isSettingsOpen ? backdropFilterVisible : backdropFilterInvisible} onClick={() => { setSettingsOpen(false); - setSettingsSection(SettingSections.GENERAL); + setSettingsSection(SettingSections.PREFERENCES); }} >
{ Documentation - -
); diff --git a/client/src/i18n.ts b/client/src/i18n.ts index 536e725c56..64d6e95e3f 100644 --- a/client/src/i18n.ts +++ b/client/src/i18n.ts @@ -2,9 +2,7 @@ import i18n from 'i18next'; import { initReactI18next } from 'react-i18next'; import backend from 'i18next-http-backend'; import en from './locales/en.json'; -import ja from './locales/ja.json'; -import zhCN from './locales/zh-CN.json'; -import es from './locales/es.json'; +import ru from './locales/ru.json'; import { getPlainFromStorage, LANGUAGE_KEY } from './services/storage'; // the translations @@ -14,14 +12,8 @@ const resources = { en: { translation: en, }, - ja: { - translation: ja, - }, - zhCN: { - translation: zhCN, - }, - es: { - translation: es, + ru: { + translation: ru, }, }; diff --git a/client/src/locales/en.json b/client/src/locales/en.json index 60669e1f5f..6ee48c656c 100644 --- a/client/src/locales/en.json +++ b/client/src/locales/en.json @@ -392,5 +392,7 @@ "No change in payment status identified.": "No change in payment status identified.", "You've upgraded your account!": "You've upgraded your account!", "Unlimited usage and premium features are activated.": "Unlimited usage and premium features are activated.", - "Let's go": "Let's go" + "Let's go": "Let's go", + "Login": "Login", + "Password": "Password" } diff --git a/client/src/locales/es.json b/client/src/locales/es.json deleted file mode 100644 index 8cb40afb15..0000000000 --- a/client/src/locales/es.json +++ /dev/null @@ -1,397 +0,0 @@ -{ - "Documentation": "Documentación", - "Showing # result_zero": "No hubo coincidencias para su búsqueda. ¡Pruebe diferentes combinaciones!", - "Showing # result_one": "Mostrando {{count}} resultado", - "Showing # result_other": "Mostrando {{count}} resultados", - "bloop crashed unexpectedly": "bloop colapsó inesperadamente", - "By submitting this crash report you agree to send it to bloop for investigation.": "Al enviar este informe de error, está aceptando que bloop pueda investigarlo.", - "Close": "Cerrar", - "Describe the bug to help us reproduce it...": "Describe el error para ayudarnos a reproducirlo ...", - "Discord": "Discord", - "Email address": "Dirección de correo electrónico", - "Email is not valid": "El correo no es válido", - "Full name": "Nombre completo", - "General": "General", - "Got it!": "¡Entendido!", - "Offline": "Desconectado", - "Online": "En línea", - "Preferences": "Ajustes", - "Problem details and System configuration": "Detalles del problema y configuración del sistema", - "Provide any steps necessary to reproduce the problem...": "Proporcione los pasos necesarios para reproducir el problema ...", - "Report a bug": "Reportar un error", - "Sign In": "Iniciar sesión", - "Sign in with GitHub": "Iniciar sesión con Github", - "Status": "Estado", - "Submit bug report": "Enviar informe de error", - "Submit crash report": "Enviar informe de bloqueo", - "Thank you!": "¡Gracias!", - "Use GitHub to sign in to your account": "Use GitHub para iniciar sesión", - "We want to make this the best experience for you. If you encountered a bug, please submit this bug report to us. Our team will investigate as soon as possible.": "Queremos hacer de esta la mejor experiencia para usted. Si encontró un error, envíenos un informe de error. Nuestro equipo lo investigará lo antes posible.", - "We’ll investigate and reach out back soon if necessary.": "Lo investigaremos y le comunicaremos pronto si es necesario.", - "Syncing repository": "Sincronizando repositorio", - "Public repository": "Repositorio público", - "key": "clave", - "Add a repository from your local machine": "Añada un repositorio local", - "Your GitHub repository": "Su repositorio de Github", - "Any repository from your private GitHub account": "Cualquier repositorio de su cuenta privada de Github", - "Local repository": "Repositorio local", - "Any public repository hosted on GitHub": "Cualquier repositorio público de GitHub", - "Add": "Añadir", - "All repositories": "Todos los repositorios", - "Sign out": "Cerrar sesión", - "Settings": "Ajustes", - "Manage how you will be called in bloop": "Indique cómo se le llamará en bloop", - "First and last name": "Primer y segundo apellido", - "First name": "Nombre de pila", - "Your name": "Su nombre", - "Last name": "Apellido", - "Your last name": "Tu apellido", - "Used to sign in, syncing and product updates": "Se utiliza para iniciar sesión, sincronizar y actualizaciones de producto", - "Email": "Correo electrónico", - "Your email address": "Su dirección de correo electrónico", - "Save changes": "Guardar cambios", - "Theme": "Tema", - "Select your interface color scheme": "Seleccione la paleta de colores para la interfaz", - "System Preference": "Preferencia del sistema", - "Atom One Dark Pro": "Atom One Dark Pro", - "Solarized Light": "Solarized Light", - "Default": "Tema Predeterminado", - "VSCode Dark": "VSCode Dark", - "Abyss": "Abyss", - "Darcula": "Darcula", - "Dracula": "Dracula", - "Material": "Material", - "GitHub Dark": "GitHub Dark", - "Gruvbox Dark": "Gruvbox Dark", - "Kimbie": "Kimbie", - "Solarized Dark": "Solarized Dark", - "Tomorrow Night Blue": "Tomorrow Night Blue", - "Default Light": "Claro Predeterminado", - "Monokai": "Monokai", - "Night Owl": "Night Owl", - "GitHub Light": "GitHub Light", - "Gruvbox Light": "Gruvbox Light", - "VSCode Light": "VSCode Light", - "Quiet Light": "Quiet Light", - "No repositories": "Sin repositorios", - "As soon as you add a repository it will appear here.": "Cuando añada un repositorio, aparecerá aquí.", - "Last updated ": "Última actualización", - "Re-sync": "Volver a sincronizar", - "Remove": "Eliminar", - "Cloning...": "Clonando...", - "Queued...": "En cola...", - "Cancel": "Cancelar", - "Indexing...": "Indexando...", - "We are syncing your repository to bloop. This might take a couple of minutes": "Estamos sincronizando su repositorio en bloop. Esto podría llevar unos minutos", - "complete": "completo", - "Confirm": "Confirmar", - "Cancelling...": "Cancelando...", - "Cancelled": "Cancelado", - "cancelling": "cancelando", - "done": "hecho", - "cancelled": "cancelado", - "syncing": "sincronizando", - "indexing": "indexando", - "Error": "Error", - "Remote removed ": "Remoto eliminado", - "Not synced": "No sincronizado", - "Removed": "Eliminado", - "Select any private repository you would like to sync": "Seleccione el repositorio privado que desee sincronizar", - "Private repository": "Repositorio privado", - "Search repository...": "Buscar repositorio...", - "Alphabetically": "Alfabéticamente", - "Last updated": "Última actualización", - "No results...": "No hay resultados...", - "Nothing matched your search. Try a different combination!": "No hay coincidencias con tu búsqueda. ¡Prueba una combinación diferente!", - "Already synced": "Ya sincronizado", - "Sync": "Sincronizar", - "Scan a folder to sync it’s repositories.": "Escanee una carpeta para sincronizar sus repositorios. Solo se sincronizarán los directorios con una carpeta .git", - "Select folder": "Seleccione la carpeta", - "Sync local repositories": "Repositorios locales sincronizados", - "Scan a folder": "Escanear una carpeta", - "Change folder": "Cambiar carpeta", - "Select the folders you want to add to bloop. You can always sync, unsync or remove unwanted repositories later.": "Seleccione las carpetas que desee añadir a bloop. Siempre puede sincronizar, dejar de sincronizar o eliminar repositorios no deseados más adelante.", - "Repository url...": "URL de repositorio ...", - "Sync repository": "Sincronizar repositorio", - "Paste a link to any public repository you would like to index.": "Pegue el enlace del repositorio público que desee indexar.", - "This is not a public repository / We couldn't find this repository": "No es un repositorio público / No pudimos encontrar el repositorio", - "Verifying access...": "Verificando acceso...", - "Synced": "Sincronizado", - "Files in": "Archivos", - "Files": "Archivos", - "Copy search query to clipboard": "Copiar texto de búsqueda en el portapapeles", - "Search for code using regex": "Buscar código usando regex", - "Clear search history": "Limpiar historial de búsqueda", - "Search branches...": "Buscar ramas...", - "Switch branch": "Cambiar de rama", - "Upgrade now": "Mejorar ahora", - "Upgrade plan": "Mejorar plan", - "to seamlessly explore code across all branches in your GitHub repositories, maximizing your code discovery capabilities.": "Para explorar sin obstáculos el código en todas las ramas en sus repositorios de GitHub, maximizando sus capacidades y posbilidades sobre código.", - "GitHub Branches": "Ramas de Github", - "Fold everything": "Colapsar todo", - "Reset filters": "Restablecer filtros", - "Hide filters": "Ocultar filtros", - "Filter lang...": "Filtrar por lenguaje...", - "Select all": "Seleccionar todo", - "File Type": "Tipo de archivo", - "View all results": "Ver todos los resultados", - "Query suggestions": "Sugerencias de búsqueda", - "Result suggestions": "Sugerencias de resultados", - "Show fewer results": "Mostrar menos resultados", - "# match_one": "{{count}} coincidencia", - "# match_other": "{{count}} coincidencias", - "Today": "Hoy", - "Expand everything": "Expandir todo", - "Language": "Idioma", - "Results": "Resultados", - "No results": "No hay resultados", - "Suggested combinations": "Combinaciones sugeridas", - "Show filters": "Mostrar filtros", - "Filters": "Filtros", - "Apply filters": "Aplicar filtros", - "Show # more match_one": "Mostrar {{count}} coincidencia más", - "Show # more match_other": "Mostrar {{count}} coincidencias más", - "Show less": "Mostrar menos", - "Previous page": "Página anterior", - "Next page": "Página siguiente", - "Showing page {{page}} of {{totalPages}}": "Mostrando la página {{page}} de {{totalPages}}", - "Deselect all": "Deseleccionar todo", - "File": "Archivo", - "Open in sidebar": "Abrir en la barra lateral", - "Open in full view": "Abrir en vista completa", - "Open in modal": "Abrir en modal", - "The line of code where identifier is defined": "La línea de código donde se define el identificador", - "The line of code where the identifier is referenced": "La línea de código donde se hace referencia al identificador", - "We weren't able to identify any references at the moment": "No pudimos identificar ninguna referencia en este momento", - "No references or definitions found": "No se encontraron referencias ni definiciones", - "Definitions": "Definiciones", - "References": "Referencias", - "definition": "definición", - "reference": "referencia", - "In this file": "En este archivo", - "All conversations": "Todas las conversaciones", - "Sorry, this repository is not ready for search": "Lo siento, este repositorio no está listo para la búsqueda", - "Wait for the repository to finish syncing and try again": "Espere a que el repositorio se termine de sincronizar e intente nuevamente", - "Create new": "Crear nuevo", - "Show": "Mostrar", - "Hide": "Ocultar", - "Conversations": "Conversaciones", - "Delete": "Borrar", - "Answer Ready": "Respuesta lista", - "View": "Vista", - "Reading ": "Leyendo", - "avatar": "avatar", - "Submit": "Enviar", - "Save": "Guardar", - "Generating response...": "Generando respuesta ...", - "Responding...": "Respondiendo ...", - "Reading": "Leyendo", - "Bad": "Mala", - "Good": "Bien", - "Show more": "Mostrar más", - "How would you rate this response?": "¿Cómo calificaría esta respuesta?", - "What was the issue with this response? How could it be improved?": "¿Cuál fue el problema con esta respuesta? ¿Cómo puede ser mejorada?", - "Failed to get a response from OpenAI. Try again in a few moments.": "No se pudo obtener una respuesta de OpenAI. Prueba otra vez en unos instantes.", - "Bad response": "Mala respuesta", - "Explain lines {{lineStart}} - {{lineEnd}} in {{filePath}}": "Explique las líneas {{lineStart}} - {{lineEnd}} en {{filePath}}", - "Select less code": "Seleccione menos código", - "Ask bloop": "Preguntar a bloop", - "Explain": "Explicar", - "Something went wrong": "Algo salió mal", - "chats in bloop": "Chats en bloop", - "Setup bloop": "Configuración de bloop", - "Please log into your GitHub account to complete setup": "Inicie sesión con su cuenta de GitHub para completar la configuración", - "Select color theme:": "Seleccione el tema:", - "Connect account": "Conectar cuenta", - "Continue": "Continuar", - "Back": "Atrás", - "Code expires in {{tokenExpireIn}}": "El código expira en {{tokenExpireIn}}", - "After launching the GitHub login window, you’ll need to perform the following steps:": "Después de la ventana de inicio de sesión de GitHub, deberá realizar los siguientes pasos:", - "or visit: ": "o visitar:", - "Authorise bloop": "Autorizar bloop", - "Enter the device code": "Introduzca el código del dispositivo", - "Note: GitHub OAuth login doesn't support granular repo or organisation level access. The token has a wide scope, but only repos you explicitly choose will be synced, and your account credentials are always stored locally.": "Nota: El inicio de sesión de GitHub OAuth no permite getionar de manera específica el nivel de acceso al repositiorio o de una organización. El token tiene un acceso amplio, pero solo los repositorios escogidos explícitamente se sincronizarán, y las credenciales de su cuenta siempre se almacenan localmente.", - "Launch GitHub Login": "Iniciar sesión con GitHub", - "Copy": "Copiar", - "Copied": "Copiado", - "Waiting for authentication...": "Esperando la autenticación ...", - "Code has expired": "El código ha expirado", - "Generate new code": "Generar nuevo código", - "Relaunch GitHub auth": "Autenticarse de nuevo con Github", - "Disconnect": "Desconectar", - "Terms & conditions": "Términos y condiciones", - "By continuing you accept our": "Al continuar, aceptas nuestros", - "and ": "y", - "Privacy policy": "Política de privacidad", - "Welcome to bloop": "Bienvenido a bloop", - "Ask questions about your codebases in natural language, just like you’d speak to ChatGPT. Get started by syncing a repo, then open the repo and start chatting.": "Haga preguntas sobre sus bases de código en lenguaje natural, al igual que hablaría con ChatGPT. Comience sincronizando un repositorio, luego abra el repositorio y comience a chatear.", - "Generate code using AI": "Generar código usando IA", - "Unlock the value of your existing code, using AI": "Desbloquee el valor de su código existente, utilizando IA", - "Search code in natural language": "Buscar código en lenguaje natural", - "Code studio helps you write scripts, create unit tests, debug issues or generate anything else you can think of using AI! Sync a repo, then create a code studio project.": "¡El estudio de código te ayuda a escribir scripts, crear pruebas unitarias, depurar problemas o generar cualquier otra cosa que puedas imaginar usando IA", - "Available in 10+ languages to help you find references and definitions": "Disponible en más de 10 idiomas para ayudarle a encontrar referencias y definiciones", - "Got it": "Entiendo", - "Precise code navigation": "Navegación de código precisa", - "Show search steps": "Mostrar pasos de búsqueda", - "Hide search steps": "Ocultar pasos de búsqueda", - "To update your app, please visit our releases page on GitHub and download the latest version manually. Thank you for being a valued user of our app.": "Para actualizar la aplicación, visite nuestra página de lanzamientos en GitHub y descargue la última versión manualmente. Gracias por ser un valioso usuario de nuestra aplicación.", - "Update Required": "Actualización necesaria", - "Restart the app": "Reiniciar la aplicación", - "or ": "o", - "visit the downloads page": "Visite la página de descarga", - "Open dropdown": "Abrir desplegable", - "Prompt guide": "Guía de prompts", - "Like ChatGPT, bloop responds best to certain prompts. We’ve compiled a really quick guide on how better to prompt bloop.": "Al igual que ChatGPT, bloop responde mejor a ciertas indicaciones. Hemos recopilado consejos en una breve guía sobre cómo potenciar el uso de bloop.", - "Skip (Not recommended)": "Saltar (no recomendado)", - "We couldn't answer your question. You can try asking again in a few moments, or rephrasing your question.": "No pudimos responder a su pregunta. Puede intentar volver a preguntar en unos momentos o reformular su pregunta.", - "Stop generating": "Parar la generación", - "Take a quick look": "Echar un vistazo", - "Go back": "Volver", - "Repo home": "Repositorio", - "Go forward": "Siguiente", - "History": "Historia", - "Yesterday": "Ayer", - "Regex search...": "Búsqueda regex...", - "Searching...": "Buscando...", - "The folder is empty": "La carpeta está vacía", - "We haven't found any files to index in this folder": "No hemos encontrado ningún archivo para indexar en la carpeta", - "We've made some exciting enhancements to bloop! To continue enjoying the full functionality, including the natural language search feature, please update your app to the latest version.": "¡Hemos añadido algunas mejoras increíbles para bloop! Para seguir disfrutando de todas las funcionalidades, incluida la función de búsqueda de lenguaje natural, actualice la aplicación a la última versión.", - "To update your app, please visit our releases page on GitHub and download the latest version manually. Thank you for using bloop.": "Para actualizar la aplicación, visite nuestra página de lanzamientos en GitHub y descargue la última versión manualmente. Gracias por usar bloop.", - "View in {{viewer}}": "Ver en {{viewer}}", - "Open file": "Abrir documento", - "Edit": "Editar", - "Click to copy": "Haga clic para copiar", - "Editing a previously submitted question will discard all answers and questions following it.": "La edición de una pregunta enviada anteriormente descartará todas las respuestas y preguntas posteriores.", - "Copy link": "Copiar link", - "Search using RegExp": "Buscar con RegExp", - "We’ve updated our auth service to make bloop more secure, please reauthorise your client with GitHub": "Hemos actualizado nuestro servicio de autores para que el Bloop sea más seguro, por favor reanice a su cliente con GitHub", - "Loading...": "Cargando...", - "New code studio": "Nuevo estudio de código", - "Rename": "Rebautizar", - "Last modified": "Última modificación", - "Studio project": "Proyecto de estudio", - "Use generative AI with a user defined context": "Utilice AI generativo con un contexto definido por el usuario", - "All studio projects": "Todos los proyectos de estudio", - "Give a short descriptive name for your new code studio.": "Dé un breve nombre descriptivo para su nuevo estudio de código.", - "Name": "Nombre", - "Context files": "Archivos de contexto", - "Studio Projects": "Proyectos de estudio", - "# of #_one": "{{count}} de {{total}}", - "# of #_other": "{{count}} de {{total}}", - "Add file": "Agregar archivo", - "Studio conversation": "Conversación de estudio", - "My templates": "Mis plantillas", - "Use templates": "Usar plantillas", - "User": "Usuaria", - "Assistant": "Asistente", - "Start typing...": "Empiece a escribir ...", - "View history": "Ver historial", - "Clear conversation": "Borrar conversación", - "Generate": "Generar", - "In Studio Projects you can use generative AI with a user defined context to get more accurate responses. Press <2><0><1> to search for a files or press <6>Open in Studio when creating semantic searches to open in a Studio Project.": "En los proyectos de estudio, puede usar IA generativa con un contexto definido por el usuario para obtener respuestas más precisas. Presione <2> <0> <1> para buscar un archivo o presione <6> Abra en Studio al crear búsquedas semánticas para abrir en un proyecto de estudio.", - "Navigate": "Navegar", - "Add context file": "Agregar archivo de contexto", - "Select repository": "Seleccionar repositorio", - "Search repository": "Buscar repositorio", - "Select": "Seleccionar", - "Search branch...": "Buscar rama...", - "Search file...": "Buscar archivo...", - "Tip: Select code to create ranges for context use.": "Consejo: seleccione código para crear rangos para uso del contexto.", - "Whole file": "Archivo completo", - "Lines # - #": "Líneas {{start}} - {{end}}", - "# ranges_one": "{{count}} ranges", - "# ranges_other": "{{count}} ranges", - "Only the selected lines (# - #) will be used as context.": "Solo las líneas seleccionadas ({{start}} - {{end}}) se utilizarán como contexto.", - "Clear ranges": "Borrar rangos", - "Only the selected ranges will be used as context.": "Solo los rangos seleccionados se utilizarán como contexto.", - "Remove related files": "Eliminar archivos relacionados", - "Imported files": "Archivos importados", - "Referencing target file": "Referencia al archivo objetivo", - "Clear range": "Borrar rango", - "Use file": "Usar archivo", - "Add related files": "Agregar archivos relacionados", - "Add related file": "Agregar archivo relacionado", - "Select branch": "Seleccionar rama", - "Select file": "Seleccionar archivo", - "Use": "Usar", - "Restore": "Restaurar", - "Hide file": "Ocultar archivo", - "Remove file": "Remover archivo", - "Show file": "Mostrar archivo", - "Search repos or Studio projects...": "Buscar repositorios o proyectos de Studio...", - "All": "Toda", - "StudioProjects": "EstudioProyectos", - "View all": "Ver todo", - "+ # more_one": "+ {{count}} más", - "+ # more_other": "+ {{count}} más", - "No Studio projects": "Sin proyectos de estudio", - "Repositories": "Repositorios", - "As soon as you create a new Studio project it will appear here.": "Tan pronto como cree un nuevo proyecto de Studio, aparecerá aquí.", - "Add to Studio context": "Agregar al contexto de Studio", - "Add context": "Agregar contexto", - "Add context in a new Studio project or add it to an existing one.": "Agregue contexto en un nuevo proyecto de Studio o agréguelo a uno existente.", - "New Studio Project": "Nuevo proyecto de estudio", - "Explain the purpose of the file {{filePath}}, from lines {{lineStart}} - {{lineEnd}}": "Explique el propósito del archivo {{filePath}}, de las líneas {{lineStart}} - {{lineEnd}}", - "Create new Studio Project with context": "Crear un nuevo proyecto de estudio con contexto", - "Retry": "Rever", - "Use template": "Usar plantilla", - "Save to templates": "Guardar a las plantillas", - "Clear input": "Borrar entrada", - "Rename code studio": "Cambiar el nombre de Code Studio", - "Can’t open studio project": "No se puede abrir el proyecto de estudio", - "One or more repositories used in this studio project is being indexed. Try again when this process in complete.": "Se están indexando uno o más repositorios utilizados en este proyecto de estudio. Intente nuevamente cuando este proceso esté completo.", - "<0># of # tokens": "<0>{{count}} de {{total}} fichas", - "<0># of # tokens_one": "<0>{{count}} de {{total}} fichas", - "<0># of # tokens_other": "<0>{{count}} de {{total}} fichas", - "Templates": "Plantillas", - "No related files found": "No se encontraron archivos relacionados", - "Unavailable": "Indisponible", - "Token limit exceeded. Reduce the number of context files or messages to enable the ability to generate.": "Límite de token excedido. Reduzca la cantidad de archivos o mensajes de contexto para habilitar la capacidad de generar.", - "Invert": "Invertir", - "uses left_one": "usos restantes", - "uses left_other": "usos restante", - "Upgrade": "Actualizar", - "Your quota resets every 24 hours, upgrade for unlimited uses": "Tu cuota se restablece cada 24 horas, actualiza para solicitudes ilimitadas", - "Manage subscription": "Administrar suscripción", - "Usage resets in": "Restablecimiento de uso en", - "This file is currently unavailable. Ability to generate will be resumed as soon as this issue is resolved.": "Este archivo no está disponible actualmente. La capacidad de generar se reanudará tan pronto como se resuelva este problema.", - "Search code studio...": "Código de búsqueda Studio ...", - "Faster answers may impact the quality of results": "Las respuestas más rápidas pueden afectar la calidad de los resultados", - "Normal": "Normal", - "Answer speed": "Velocidad de respuesta", - "Fast": "Rápida", - "Code Studio": "Estudio de código", - "Watch": "Mirar", - "Code Studio helps hobbyists and engineers working on the largest codebases, alike, to collaborate with AI. We recommend watching the guide to maximise your productivity.": "Estudio de código ayuda a los aficionados e ingenieros que trabajan en las bases de código más grandes, por igual, a colaborar con IA. Recomendamos ver la guía para maximizar su productividad.", - "Open in new tab": "Abrir en una pestaña nueva", - "Show link": "Mostrar enlace", - "or go to the following link": "o ir al siguiente enlace", - "Email is required": "Se requiere correo electrónico", - "Last name is required": "Se requiere apellido", - "First name is required": "Se requiere el primer nombre", - "Connect GitHub account to continue": "Conecte la cuenta GitHub para continuar", - "Save context changes before answer generation": "Guardar cambios de contexto antes de la generación de respuesta", - "Index": "Índice", - "File not indexed": "Archivo no indexado", - "Force index": "Índice de fuerza", - "bloop automatically excludes certain files from indexing. This file might be too big or it might have an excluded file type.": "Bloop excluye automáticamente ciertos archivos de la indexación. Este archivo puede ser demasiado grande o podría tener un tipo de archivo excluido.", - "Recommended: The classic response type": "Recomendado: El tipo de respuesta clásico", - "Experimental: Faster but less accurate": "Experimental: Más rápido pero menos preciso", - "What would you like to know about <2>#repo?": "¿Qué te gustaría saber sobre <2>{{repoName}}?", - "Hi, I'm bloop.": "Hola, soy bloop!", - "Done": "Hecho", - "Send a message": "Envía un mensaje", - "Token limit exceeded": "Límite de token excedido", - "bloop automatically excludes certain files from the indexing. This file might be too big or it might have an excluded file type.": "Bloop excluye automáticamente ciertos archivos de la indexación. Este archivo puede ser demasiado grande o podría tener un tipo de archivo excluido.", - "We use analytics to improve your experience. Please refresh the page after changing the value.": "Utilizamos análisis para mejorar su experiencia. Actualice la página después de cambiar el valor.", - "Allow analytics": "Permitir análisis", - "Complete your transaction in Stripe...": "Complete su transacción en Stripe ...", - "Launch manually": "Lanzar manualmente", - "Check payment status": "Verificar el estado de pago", - "No change in payment status identified.": "No hay cambio en el estado de pago identificado.", - "We've redirected you to Stripe to complete your transaction. Didn't work?": "Te hemos redirigido a rayar para completar su transacción. ¿No funcionó?", - "You've run out of free usage for today, please wait for your quota to reset or upgrade for unlimited usage": "Se ha quedado sin uso gratuito para hoy, espere a que su cuota se reinicie o actualice para un uso ilimitado", - "Unlimited usage and premium features are activated.": "Se activan el uso ilimitado y las características premium.", - "You've upgraded your account!": "¡Has actualizado tu cuenta!", - "Let's go": "Vamos" -} diff --git a/client/src/locales/ja.json b/client/src/locales/ja.json deleted file mode 100644 index a6b3150901..0000000000 --- a/client/src/locales/ja.json +++ /dev/null @@ -1,394 +0,0 @@ -{ - "Documentation": "ドキュメント", - "Showing # result_zero": "検索に一致するものはありませんでした。 別の検索を試してみてください!", - "Showing # result_one": "{{count}} 件の結果を表示します", - "Showing # result_other": "{{count}} 件の結果を表示します", - "bloop crashed unexpectedly": "bloopが予期せずクラッシュしました", - "By submitting this crash report you agree to send it to bloop for investigation.": "このクラッシュレポートを送信すると、調査のためにbloopに送信することに同意したことになります。", - "Close": "閉じる", - "Describe the bug to help us reproduce it...": "再現できるようにバグを説明してください...", - "Discord": "Discord", - "Email address": "メールアドレス", - "Email is not valid": "メールアドレスは無効です", - "Full name": "フルネーム", - "General": "一般", - "Got it!": "理解した!", - "Offline": "オフライン", - "Online": "オンライン", - "Preferences": "設定", - "Problem details and System configuration": "問題の詳細とシステム構成", - "Provide any steps necessary to reproduce the problem...": "問題を再現するために必要な手順を提供してください...", - "Report a bug": "バグを報告する", - "Sign In": "サインイン", - "Sign in with GitHub": "GitHubでサインインする", - "Status": "ステータス", - "Submit bug report": "バグレポートを送信する", - "Submit crash report": "クラッシュレポートを送信する", - "Thank you!": "ありがとうございます!", - "Use GitHub to sign in to your account": "GitHubを使用してアカウントにサインインする", - "We want to make this the best experience for you. If you encountered a bug, please submit this bug report to us. Our team will investigate as soon as possible.": "我々は、皆様にとって最高の体験となるよう努力しています。バグに遭遇した場合は、バグレポートをお送りください。我々のチームはできるだけ早く調査します。", - "We’ll investigate and reach out back soon if necessary.": "調査し、必要に応じてすぐにご連絡いたします。", - "Syncing repository": "リポジトリを同期しています", - "Public repository": "パブリックリポジトリ", - "key": "キー", - "Add a repository from your local machine": "ローカルマシンからリポジトリを追加する", - "Your GitHub repository": "あなたのGitHubリポジトリ", - "Any repository from your private GitHub account": "プライベートGitHubアカウントからのリポジトリ", - "Local repository": "ローカルリポジトリ", - "Any public repository hosted on GitHub": "GitHubでホストされているパブリックリポジトリ", - "Add": "追加", - "All repositories": "すべてのリポジトリ", - "Sign out": "サインアウト", - "Settings": "設定", - "Manage how you will be called in bloop": "bloop内での名前の呼ばれ方を管理します", - "First and last name": "名前", - "First name": "名", - "Your name": "あなたの名前", - "Last name": "姓", - "Your last name": "あなたの名字", - "Used to sign in, syncing and product updates": "サインイン、同期、製品の更新に使用されます", - "Email": "メール", - "Your email address": "あなたのメールアドレス", - "Save changes": "変更内容を保存", - "Theme": "テーマ", - "Select your interface color scheme": "インターフェースの配色を選択してください", - "System Preference": "システム優先", - "Atom One Dark Pro": "Atom One Dark Pro", - "Solarized Light": "Solarized Light", - "Default": "Default", - "VSCode Dark": "VSCode Dark", - "Abyss": "Abyss", - "Darcula": "Darcula", - "Dracula": "Dracula", - "Material": "Material", - "GitHub Dark": "GitHub Dark", - "Gruvbox Dark": "Gruvbox Dark", - "Kimbie": "Kimbie", - "Solarized Dark": "Solarized Dark", - "Tomorrow Night Blue": "Tomorrow Night Blue", - "Default Light": "Default Light", - "Monokai": "Monokai", - "Night Owl": "Night Owl", - "GitHub Light": "GitHub Light", - "Gruvbox Light": "Gruvbox Light", - "VSCode Light": "VSCode Light", - "Quiet Light": "Quiet Light", - "No repositories": "リポジトリはありません", - "As soon as you add a repository it will appear here.": "リポジトリを追加するとこちらに表示されます。", - "Last updated ": "最終更新", - "Re-sync": "再同期", - "Remove": "削除", - "Cloning...": "クローン中...", - "Queued...": "待ち...", - "Cancel": "キャンセル", - "Indexing...": "インデックス中...", - "We are syncing your repository to bloop. This might take a couple of minutes": "あなたのリポジトリをbloopに同期しています。少々を待ちください。", - "complete": "完了", - "Confirm": "確認", - "Cancelling...": "キャンセル中...", - "Cancelled": "キャンセル", - "cancelling": "キャンセル中", - "done": "終わり", - "cancelled": "キャンセル", - "syncing": "同期しています", - "indexing": "インデックス中です", - "Error": "エラー", - "Remote removed ": "リモートで削除されました", - "Not synced": "同期していません", - "Removed": "削除", - "Select any private repository you would like to sync": "同期したいプライベートリポジトリを選択してください", - "Private repository": "プライベートリポジトリ", - "Search repository...": "リポジトリを検索...", - "Alphabetically": "アルファベット順", - "Last updated": "最終更新", - "No results...": "結果が見つかりませんでした...", - "Nothing matched your search. Try a different combination!": "検索条件に一致するものが見つかりませんでした。別の条件を試してみてください!", - "Already synced": "同期済み", - "Sync": "同期", - "Scan a folder to sync it’s repositories.": "フォルダをスキャンしてリポジトリを同期する。.gitフォルダのあるディレクトリのみが同期されます", - "Select folder": "フォルダの選択", - "Sync local repositories": "ローカルリポジトリを同期する", - "Scan a folder": "フォルダをスキャンする", - "Change folder": "フォルダの変更", - "Select the folders you want to add to bloop. You can always sync, unsync or remove unwanted repositories later.": "bloopに追加したいフォルダを選択してください。いつでも同期や同期の解除、不要なリポジトリの削除ができます。", - "Repository url...": "リポジトリのURL ...", - "Sync repository": "リポジトリを同期", - "Paste a link to any public repository you would like to index.": "インデックスを作成したいパブリックリポジトリへのリンクを貼り付けてください", - "This is not a public repository / We couldn't find this repository": "パブリックリポジトリではありません / リポジトリは見つかりませんでした", - "Verifying access...": "アクセスの確認...", - "Synced": "同期済み", - "Files in": "ファイル", - "Files": "ファイル", - "Copy search query to clipboard": "検索クエリをクリップボードにコピーする", - "Search for code using regex": "正規表現を使用してコードを検索する", - "Clear search history": "検索履歴をクリアする", - "Search branches...": "ブランチを検索...", - "Switch branch": "ブランチを切り替える", - "Upgrade now": "今すぐアップグレードする", - "Upgrade plan": "プランをアップグレードする", - "to seamlessly explore code across all branches in your GitHub repositories, maximizing your code discovery capabilities.": "GitHubリポジトリ内の全てのブランチでコードをシームレスに探索できるようにし、コード発見能力を最大化してください。", - "GitHub Branches": "GitHubブランチ", - "Fold everything": "すべて折りたたむ", - "Reset filters": "フィルタをリセットする", - "Hide filters": "フィルタを非表示にする", - "Filter lang...": "言語を絞り込む...", - "Select all": "すべてを選択する", - "File Type": "ファイルの種類", - "View all results": "すべての結果を表示する", - "Query suggestions": "クエリの提案", - "Result suggestions": "結果の提案", - "Show fewer results": "より少ない結果を表示する", - "# match_one": "{{count}} 件", - "# match_other": "{{count}} 件", - "Today": "今日", - "Expand everything": "すべてを拡張する", - "Language": "言語", - "Results": "結果", - "No results": "結果がありません", - "Suggested combinations": "提案された条件", - "Show filters": "フィルタを表示する", - "Filters": "フィルタ", - "Apply filters": "フィルタを適用する", - "Show # more match_other": "さらに {{count}} 件を表示する", - "Show # more match_one": "さらに {{count}} 件を表示する", - "Show less": "表示を減らす", - "Previous page": "前のページ", - "Next page": "次のページ", - "Showing page {{page}} of {{totalPages}}": "{{totalPages}} ページ中 {{page}} ページ目を表示しています", - "Deselect all": "すべての選択を解除", - "File": "ファイル", - "Open in modal": "モーダルで開く", - "Open in full view": "フルページで開く", - "Open in sidebar": "サイドバーで開く", - "The line of code where identifier is defined": "識別子が定義されているコード行", - "The line of code where the identifier is referenced": "識別子が参照されているコードの行", - "We weren't able to identify any references at the moment": "現在、参照を識別することができませんでした", - "No references or definitions found": "参照や定義は見つかりません", - "Definitions": "定義", - "References": "参照", - "definition": "定義", - "reference": "参照", - "In this file": "ファイル内", - "All conversations": "すべての会話", - "Sorry, this repository is not ready for search": "申し訳ありませんが、このリポジトリは検索の準備ができていません", - "Wait for the repository to finish syncing and try again": "リポジトリの同期が終了するのを待ち、再試行してください", - "Create new": "新しく作る", - "Show": "表示", - "Hide": "非表示", - "Conversations": "会話", - "Delete": "消去", - "Answer Ready": "回答準備ができています", - "View": "意見", - "Reading ": "読む", - "avatar": "アバター", - "Submit": "送信", - "Save": "保存", - "Generating response...": "回答を生成中...", - "Responding...": "回答中...", - "Reading": "読む", - "Bad": "悪い", - "Good": "良い", - "Show more": "もっと見る", - "How would you rate this response?": "こちらの回答をどのように評価しますか?", - "What was the issue with this response? How could it be improved?": "こちらの回答の問題は何でしたか?どうすれば改善できますか?", - "Failed to get a response from OpenAI. Try again in a few moments.": "OpenAIからの回答を取得できませんでした。しばらくしてからもう一度試してください。", - "Bad response": "誤回答", - "Explain lines {{lineStart}} - {{lineEnd}} in {{filePath}}": "{{filePath}} の {{lineStart}}行 - {{lineEnd}}行について説明します", - "Select less code": "コード選択範囲を少なくしてください", - "Ask bloop": "bloopに聞く", - "Explain": "説明", - "Something went wrong": "何かがうまくいかなかった", - "chats in bloop": "bloopでチャット", - "Setup bloop": "bloopをセットアップする", - "Please log into your GitHub account to complete setup": "セットアップを完了するため、GitHubアカウントにログインしてください", - "Select color theme:": "カラーテーマを選択する", - "Connect account": "アカウントを接続する", - "Continue": "次へ", - "Back": "戻る", - "Code expires in {{tokenExpireIn}}": "コードは {{tokenExpireIn}} で期限切れになります", - "After launching the GitHub login window, you’ll need to perform the following steps:": "GitHubログインウィンドウを起動した後、次の手順を実行してください。", - "or visit: ": "または訪問:", - "Authorise bloop": "bloopを承認する", - "Enter the device code": "デバイスコードを入力してください", - "Note: GitHub OAuth login doesn't support granular repo or organisation level access. The token has a wide scope, but only repos you explicitly choose will be synced, and your account credentials are always stored locally.": "注:GitHub OAuthログインは、詳細なリポジトリや組織レベルのアクセスをサポートしていません。トークンには幅広い範囲がありますが、明示的に選択するリポジトリのみが同期され、アカウントの資格情報は常にローカルに保存されます。", - "Launch GitHub Login": "GitHubログインを開始する", - "Copy": "コピー", - "Copied": "コピーしました", - "Waiting for authentication...": "認証完了を待っています...", - "Code has expired": "コードの期限が切れました", - "Generate new code": "新しいコードを生成する", - "Relaunch GitHub auth": "GitHub認証を再開する", - "Disconnect": "切断する", - "Terms & conditions": "利用規約", - "By continuing you accept our": "継続することで、次のことを承認します。", - "and ": "と", - "Privacy policy": "プライバシーポリシー", - "Welcome to bloop": "bloopへようこそ", - "Unlock the value of your existing code, using AI": "AIを使用して既存のコードの価値を引き出します", - "Search code in natural language": "自然言語でコードを検索する", - "Ask questions about your codebases in natural language, just like you’d speak to ChatGPT. Get started by syncing a repo, then open the repo and start chatting.": "ChatGPTに話すように、自然言語でコードベースについて質問します。リポジトリを同期して開始し、リポジトリを開いてチャットを開始します。", - "Generate code using AI": "AIを使用してコードを生成する", - "Code studio helps you write scripts, create unit tests, debug issues or generate anything else you can think of using AI! Sync a repo, then create a code studio project.": "Code Studioは、AIを使用してスクリプトを作成したり、ユニットテストを作成したり、問題をデバッグしたり、他に思いつくものを生成するのに役立ちます! リポジトリを同期し、Code Studioプロジェクトを作成します。", - "Got it": "理解しました", - "Precise code navigation": "正確なコードナビゲーション", - "Show search steps": "検索手順を表示する", - "Hide search steps": "検索手順を非表示にする", - "To update your app, please visit our releases page on GitHub and download the latest version manually. Thank you for being a valued user of our app.": "アプリを更新するには、GitHubのリリースページにアクセスして、最新バージョンを手動でダウンロードしてください。アプリの大切なユーザーになってくれてありがとう。", - "Update Required": "アップデートしてください", - "Restart the app": "アプリを再起動してください", - "or ": "または", - "visit the downloads page": "ダウンロードページにアクセスしてください", - "Open dropdown": "ドロップダウンを開く", - "Prompt guide": "プロンプトガイド", - "Like ChatGPT, bloop responds best to certain prompts. We’ve compiled a really quick guide on how better to prompt bloop.": "ChatGPTと同様に、bloopは特定のプロンプトに最もよく応答します。 bloopをプロンプトする方が良い方法に関する非常に簡単なガイドをまとめました。", - "Skip (Not recommended)": "スキップ(非推奨)", - "We couldn't answer your question. You can try asking again in a few moments, or rephrasing your question.": "ご質問に回答できませんでした。しばらくしてからもう一度質問するか、質問を変えてみてください。", - "Stop generating": "生成を停止する", - "Take a quick look": "ちょっと見る", - "Go back": "戻る", - "Repo home": "リポジトリホーム", - "Go forward": "進む", - "History": "履歴", - "Yesterday": "昨日", - "Regex search...": "正規表現検索...", - "Searching...": "検索中...", - "The folder is empty": "フォルダが空です", - "We haven't found any files to index in this folder": "このフォルダにインデックスを作成するファイルが見つかりませんでした", - "We've made some exciting enhancements to bloop! To continue enjoying the full functionality, including the natural language search feature, please update your app to the latest version.": "私たちは、bloopにいくつかのエキサイティングな機能強化を行いました! 自然言語検索機能を含む完全な機能を継続するには、アプリを最新バージョンに更新してください。", - "To update your app, please visit our releases page on GitHub and download the latest version manually. Thank you for using bloop.": "アプリを更新するには、GitHubのリリースページにアクセスして、最新バージョンを手動でダウンロードしてください。 bloopを使用していただきありがとうございます。", - "View in {{viewer}}": "{{viewer}}で表示", - "Open file": "ファイルを開く", - "Edit": "編集", - "Editing a previously submitted question will discard all answers and questions following it.": "以前に提出された質問を編集すると、それに続くすべての回答と質問が破棄されます。", - "Click to copy": "クリックしてコピーします", - "Copy link": "リンクをコピーする", - "Search using RegExp": "正規表現を使用して検索します", - "We’ve updated our auth service to make bloop more secure, please reauthorise your client with GitHub": "bloopをより安全にするために認証サービスを更新しました。GitHubでクライアントを再承認してください", - "Loading...": "読み込み中...", - "Give a short descriptive name for your new code studio.": "新しいコードスタジオに短い説明的な名前を付けてください。", - "Last modified": "最終更新日", - "Studio project": "スタジオプロジェクト", - "All studio projects": "すべてのスタジオプロジェクト", - "Use generative AI with a user defined context": "ユーザー定義のコンテキストで生成AIを使用します", - "Name": "名前", - "Context files": "コンテキストファイル", - "Studio Projects": "スタジオプロジェクト", - "Rename": "名前を変更します", - "# of #_one": "{{count}}の{{total}}", - "# of #_other": "{{count}}の{{total}}", - "Add file": "ファイルを追加します", - "Studio conversation": "スタジオの会話", - "My templates": "私のテンプレート", - "Use templates": "テンプレートを使用します", - "User": "ユーザー", - "Assistant": "アシスタント", - "Start typing...": "タイピングを開始します...", - "View history": "履歴を表示します", - "Clear conversation": "明確な会話", - "Generate": "生成する", - "In Studio Projects you can use generative AI with a user defined context to get more accurate responses. Press <2><0><1> to search for a files or press <6>Open in Studio when creating semantic searches to open in a Studio Project.": "Studioプロジェクトでは、ユーザー定義のコンテキストで生成AIを使用して、より正確な応答を取得できます。 <2> <0> <1> を押して、ファイルを検索するか、Studio で開くファイルを検索するか、スタジオプロジェクトで開くセマンティック検索を作成します。", - "Navigate": "ナビゲートします", - "Add context file": "コンテキストファイルを追加します", - "Select repository": "リポジトリを選択します", - "Search repository": "リポジトリを検索します", - "Select": "選択する", - "Search branch...": "ブランチを検索...", - "Select file": "ファイルを選ぶ", - "Tip: Select code to create ranges for context use.": "ヒント:コードを選択して、コンテキスト使用の範囲を作成します。", - "Whole file": "ファイル全体", - "Lines # - #": "行{{start}} - {{end}}", - "# ranges_one": "{{count}}つの範囲", - "# ranges_other": "{{count}}つの範囲", - "Only the selected lines (# - #) will be used as context.": "選択した行({{start}} - {{end}})のみがコンテキストとして使用されます。", - "Clear ranges": "クリア範囲", - "Only the selected ranges will be used as context.": "選択した範囲のみがコンテキストとして使用されます。", - "Remove related files": "関連ファイルを削除します", - "Imported files": "インポートされたファイル", - "Referencing target file": "ターゲットファイルの参照", - "Clear range": "クリア範囲", - "Use file": "ファイルを使用します", - "Add related files": "関連ファイルを追加します", - "Add related file": "関連ファイルを追加します", - "Select branch": "ブランチを選択", - "Search file...": "ファイルを検索...", - "Use": "使用", - "Restore": "復元する", - "Hide file": "ファイルを隠す", - "Remove file": "ファイルを削除する", - "Show file": "ファイルを表示", - "Search repos or Studio projects...": "リポジトリまたは Studio プロジェクトを検索...", - "All": "全て", - "Repositories": "リポジトリ", - "View all": "すべて見る", - "+ # more_one": "+ さらに {{count}} つ", - "+ # more_other": "+ さらに {{count}} つ", - "As soon as you create a new Studio project it will appear here.": "新しい Studio プロジェクトを作成するとすぐに、ここに表示されます。", - "No Studio projects": "Studio プロジェクトはありません", - "Add to Studio context": "Studio コンテキストに追加", - "Add context": "コンテキストを追加する", - "New Studio Project": "新しいスタジオプロジェクト", - "Explain the purpose of the file {{filePath}}, from lines {{lineStart}} - {{lineEnd}}": "ファイル {{filePath}} の目的を {{lineStart}} から {{lineEnd}} 行まで説明します。", - "Add context in a new Studio project or add it to an existing one.": "新しい Studio プロジェクトにコンテキストを追加するか、既存のプロジェクトにコンテキストを追加します。", - "Create new Studio Project with context": "コンテキストを使用して新しい Studio プロジェクトを作成する", - "Retry": "リトライ", - "Use template": "テンプレートを使用します", - "Save to templates": "テンプレートに保存します", - "Clear input": "入力をクリアします", - "Rename code studio": "コードスタジオの名前を変更します", - "Can’t open studio project": "スタジオプロジェクトを開くことができません", - "One or more repositories used in this studio project is being indexed. Try again when this process in complete.": "このスタジオプロジェクトで使用される1つ以上のリポジトリは、インデックス付けされています。 このプロセスが完全になったら再試行してください。", - "<0># of # tokens": "{{total}} トークン中 <0>{{count}} 個", - "<0># of # tokens_one": "{{total}} トークン中 <0>{{count}} 個", - "<0># of # tokens_other": "{{total}} トークン中 <0>{{count}} 個", - "Templates": "テンプレート", - "No related files found": "関連するファイルは見つかりません", - "Unavailable": "利用できません", - "Token limit exceeded. Reduce the number of context files or messages to enable the ability to generate.": "トークンの制限が超えました。 コンテキストファイルまたはメッセージの数を減らして、生成する機能を有効にします。", - "Invert": "反転", - "uses left_one": "回数", - "uses left_other": "回数", - "Upgrade": "アップグレード", - "Your quota resets every 24 hours, upgrade for unlimited uses": "あなたのクオータは24時間ごとにリセットされます、無制限のリクエストにアップグレードしてください", - "Manage subscription": "サブスクリプションを管理します", - "You've run out of free usage for today, please wait for your quota to reset or upgrade for unlimited usage": "今日は無料の使用法がなくなっています。クォータがリセットまたはアップグレードされるのを待ってください。", - "This file is currently unavailable. Ability to generate will be resumed as soon as this issue is resolved.": "このファイルは現在利用できません。 生成能力は、この問題が解決されるとすぐに再開されます。", - "Search code studio...": "コードスタジオを検索...", - "Code Studio": "コードスタジオ", - "Watch": "時計", - "Code Studio helps hobbyists and engineers working on the largest codebases, alike, to collaborate with AI. We recommend watching the guide to maximise your productivity.": "コードスタジオは、大規模なコードベースに取り組んでいる愛好家やエンジニアが同様に AI と共同作業できるよう支援します。 生産性を最大限に高めるために、ガイドを参照することをお勧めします。", - "Open in new tab": "新しいタブで開きます", - "Faster answers may impact the quality of results": "推奨:クラシックなレスポンスタイプ", - "Recommended: The classic response type": "推奨:クラシックなレスポンスタイプ", - "Experimental: Faster but less accurate": "実験的:速度は速いが精度は低い", - "Normal": "普通", - "Answer speed": "回答速度", - "Fast": "速い", - "Show link": "リンクを表示", - "or go to the following link": "または、次のリンクに移動します", - "Email is required": "メールが必要です", - "First name is required": "名が必要です", - "Last name is required": "姓が必要です", - "Connect GitHub account to continue": "githubアカウントを接続して続行します", - "Save context changes before answer generation": "回答生成の前にコンテキストの変更を保存します", - "Index": "索引", - "File not indexed": "ファイルはインデックス化されていません", - "Force index": "フォースインデックス", - "bloop automatically excludes certain files from indexing. This file might be too big or it might have an excluded file type.": "Bloopは、インデックスから特定のファイルを自動的に除外します。 このファイルが大きすぎるか、除外されたファイルタイプがある場合があります。", - "What would you like to know about <2>#repo?": "<2>{{repoName}}について何を知りたいですか?", - "Hi, I'm bloop.": "こんにちは、私の名前はbloopです。", - "Done": "終わり", - "Send a message": "メッセージを送る", - "Token limit exceeded": "トークンの制限が超えました", - "bloop automatically excludes certain files from the indexing. This file might be too big or it might have an excluded file type.": "Bloopは、インデックスから特定のファイルを自動的に除外します。 このファイルが大きすぎるか、除外されたファイルタイプがある場合があります。", - "Allow analytics": "分析を許可します", - "We use analytics to improve your experience. Please refresh the page after changing the value.": "分析を使用して体験を向上させます。 値を変更した後、ページを更新してください。", - "Complete your transaction in Stripe...": "ストライプでトランザクションを完了してください...", - "We've redirected you to Stripe to complete your transaction. Didn't work?": "トランザクションを完了するために、ストライプにリダイレクトしました。 うまくいかなかった?", - "Check payment status": "支払いステータスを確認してください", - "No change in payment status identified.": "支払いステータスの変更は特定されていません。", - "Launch manually": "手動で起動します", - "Usage resets in": "使用法がリセットされます", - "You've upgraded your account!": "アカウントをアップグレードしました!", - "Unlimited usage and premium features are activated.": "無制限の使用機能とプレミアム機能がアクティブになります。", - "Let's go": "さあ行こう" -} diff --git a/client/src/locales/ru.json b/client/src/locales/ru.json new file mode 100644 index 0000000000..638759162d --- /dev/null +++ b/client/src/locales/ru.json @@ -0,0 +1,356 @@ +{ + "Documentation": "Документация", + "Showing # result_zero": "Не найдено совпадений для вашего запроса. Попробуйте другие комбинации!", + "Showing # result_one": "Показать {{count}} результат", + "Showing # result_other": "Показать все результаты ({{count}})", + "bloop crashed unexpectedly": "Внезапный креш", + "Close": "Закрыть", + "Discord": "Discord", + "General": "General", + "Got it!": "Понял!", + "Offline": "Офлайн", + "Online": "Онлайн", + "Preferences": "Настройки", + "Войти": "Sign In", + "Status": "Статус", + "Thank you!": "Спасибо!", + "Syncing repository": "Синхронизация репозитория", + "Public repository": "Публичный репозеторий", + "key": "ключ", + "Add a repository from your local machine": "Добавить репозиторий с локального диска", + "Your GitHub repository": "Ваш репозиторий на GitHub", + "Any repository from your private GitHub account": "Любой репозиторий из вашего приватного GitHub", + "Local repository": "Локальный репозиторий", + "Any public repository hosted on GitHub": "Любой общедоступный репозиторий, размещенный на GitHub", + "Add": "Добавить", + "All repositories": "Все репозитории", + "Sign out": "Выйти", + "Settings": "Настройки", + "Save changes": "Сохранить изменения", + "Theme": "Тема", + "Select your interface color scheme": "Выберите цветовую тему", + "System Preference": "Системные настройки", + "No repositories": "Нет репозиториев", + "As soon as you add a repository it will appear here.": "Как только вы добавите репозиторий, он появится здесь.", + "Last updated ": "Последний раз обновлен ", + "Re-sync": "Пересинхронизация", + "Remove": "Удалить", + "Cloning...": "Клонирование...", + "Queued...": "В очереди...", + "Cancel": "Отменить", + "Indexing...": "Индексация...", + "We are syncing your repository to bloop. This might take a couple of minutes": "Синхронизация репозитория в bloop. Это может занять несколько минут.", + "complete": "complete", + "Confirm": "Подтвердить", + "Cancelling...": "Отмена...", + "Cancelled": "Отменено", + "cancelling": "Отмена", + "done": "готово", + "cancelled": "отменено", + "syncing": "синхронизация", + "indexing": "индексирование", + "Error": "Ошибка", + "Remote removed ": "Remote удален ", + "Not synced": "Не синхронизировано", + "Removed": "Удалено", + "Select any private repository you would like to sync": "Выберите любой приватный репозиторий, который нужно синхронизировать", + "Private repository": "Приватный репозиторий", + "Search repository...": "Поиск репозитория...", + "Alphabetically": "По алфавиту", + "Last updated": "Последний раз обновлен", + "No results...": "Нет результатов...", + "Nothing matched your search. Try a different combination!": "Nothing matched your search. Try a different combination!", + "Already synced": "Уже синхронизировано", + "Sync": "Синхронизация", + "Scan a folder to sync it’s repositories.": "Scan a folder to sync it’s repositories. Only directories with a .git folder will be synced", + "Select folder": "Выберите папку", + "Sync local repositories": "Синхронизация локального репозитория", + "Scan a folder": "Сканирование пути", + "Change folder": "Изменение пути", + "Select the folders you want to add to bloop. You can always sync, unsync or remove unwanted repositories later.": "Select the folders you want to add to bloop. You can always sync, unsync or remove unwanted repositories later.", + "Repository url...": "Url репозитория...", + "Sync repository": "Синхронизация репозитория", + "Paste a link to any public repository you would like to index.": "Paste a link to any public repository you would like to index.", + "This is not a public repository / We couldn't find this repository": "This is not a public repository / We couldn't find this repository", + "Verifying access...": "Проверка доступа...", + "Synced": "Синхронизиролвано", + "Files in": "Файлы в", + "Files": "Файлы", + "Copy search query to clipboard": "Copy search query to clipboard", + "Search for code using regex": "Search for code using regex", + "Clear search history": "Clear search history", + "Search branches...": "Поиск веток...", + "Switch branch": "Смена ветки", + "Upgrade now": "Обновить сейчас", + "to seamlessly explore code across all branches in your GitHub repositories, maximizing your code discovery capabilities.": "to seamlessly explore code across all branches in your GitHub repositories, maximizing your code discovery capabilities.", + "GitHub Branches": "GitHub Branches", + "Fold everything": "Fold everything", + "Reset filters": "Reset filters", + "Hide filters": "Hide filters", + "Filter lang...": "Filter lang...", + "Select all": "Select all", + "File Type": "File Type", + "View all results": "View all results", + "Query suggestions": "Query suggestions", + "Result suggestions": "Result suggestions", + "Show fewer results": "Show fewer results", + "# match_one": "{{count}} match", + "# match_other": "{{count}} matches", + "Today": "Today", + "Expand everything": "Expand everything", + "Language": "Language", + "Results": "Results", + "No results": "No results", + "Suggested combinations": "Suggested combinations", + "Show filters": "Show filters", + "Filters": "Filters", + "Apply filters": "Apply filters", + "Show # more match_one": "Show {{count}} more match", + "Show # more match_other": "Show {{count}} more matches", + "Show less": "Show less", + "Previous page": "Previous page", + "Next page": "Next page", + "Showing page {{page}} of {{totalPages}}": "Showing page {{page}} of {{totalPages}}", + "Deselect all": "Deselect all", + "File": "File", + "Open in sidebar": "Open in sidebar", + "Open in full view": "Open in full view", + "Open in modal": "Open in modal", + "The line of code where identifier is defined": "The line of code where identifier is defined", + "The line of code where the identifier is referenced": "The line of code where the identifier is referenced", + "We weren't able to identify any references at the moment": "We weren't able to identify any references at the moment", + "No references or definitions found": "No references or definitions found", + "Definitions": "Definitions", + "References": "References", + "definition": "definition", + "reference": "reference", + "In this file": "В текущем файле", + "All conversations": "Все диалоги", + "Sorry, this repository is not ready for search": "Sorry, this repository is not ready for search", + "Wait for the repository to finish syncing and try again": "Wait for the repository to finish syncing and try again", + "Create new": "Создать новый", + "Show": "Show", + "Hide": "Hide", + "Conversations": "Диалог", + "Delete": "Удалить", + "Answer Ready": "Ответ готов", + "View": "View", + "Reading ": "Чтение ", + "avatar": "avatar", + "Submit": "Submit", + "Save": "Save", + "Generating response...": "Генерация ответа...", + "Responding...": "Отвечаем...", + "Reading": "Reading", + "Bad": "Плохо", + "Good": "Хорошо", + "Show more": "Показать ещё", + "How would you rate this response?": "How would you rate this response?", + "What was the issue with this response? How could it be improved?": "What was the issue with this response? How could it be improved?", + "Failed to get a response from OpenAI. Try again in a few moments.": "Failed to get a response from OpenAI. Try again in a few moments.", + "Bad response": "Bad response", + "Explain lines {{lineStart}} - {{lineEnd}} in {{filePath}}": "Обьяснение линии {{lineStart}} - {{lineEnd}} в {{filePath}}", + "Select less code": "Select less code", + "Ask bloop": "Ask bloop", + "Explain": "Обьяснение", + "Something went wrong": "Something went wrong", + "chats in bloop": "chats in bloop", + "Setup bloop": "Setup bloop", + "Please log into your GitHub account to complete setup": "Please log into your GitHub account to complete setup", + "Select color theme:": "Выбрать цветовую схему:", + "Connect account": "Connect account", + "Continue": "Continue", + "Back": "Back", + "Code expires in {{tokenExpireIn}}": "Code expires in {{tokenExpireIn}}", + "After launching the GitHub login window, you’ll need to perform the following steps:": "After launching the GitHub login window, you’ll need to perform the following steps:", + "or visit: ": "or visit: ", + "Authorise bloop": "Authorise bloop", + "Enter the device code": "Enter the device code", + "Note: GitHub OAuth login doesn't support granular repo or organisation level access. The token has a wide scope, but only repos you explicitly choose will be synced, and your account credentials are always stored locally.": "Note: GitHub OAuth login doesn't support granular repo or organisation level access. The token has a wide scope, but only repos you explicitly choose will be synced, and your account credentials are always stored locally.", + "Launch GitHub Login": "Launch GitHub Login", + "Copy": "Copy", + "Copied": "Copied", + "Waiting for authentication...": "Waiting for authentication...", + "Code has expired": "Code has expired", + "Generate new code": "Generate new code", + "Relaunch GitHub auth": "Relaunch GitHub auth", + "Disconnect": "Disconnect", + "Terms & conditions": "Terms & conditions", + "By continuing you accept our": "By continuing you accept our", + "and ": "и ", + "Privacy policy": "Политика конфиденциальности", + "Welcome to bloop": "Добро пожаловать в Bloop AI", + "Ask questions about your codebases in natural language, just like you’d speak to ChatGPT. Get started by syncing a repo, then open the repo and start chatting.": "Задавайте вопросы о ваших наборах кода на естественном языке, так же, как вы разговариваете с ChatGPT. Начните с синхронизации репозитория, затем откройте репозиторий и начните общаться.", + "Generate code using AI": "Генерация кода с помощью искусственного интеллекта", + "Unlock the value of your existing code, using AI": "Разблокируйте ценность вашего кода с помощью ИИ", + "Search code in natural language": "Поиск кода на естественном языке", + "Code studio helps you write scripts, create unit tests, debug issues or generate anything else you can think of using AI! Sync a repo, then create a code studio project.": "Code Studio помогает вам писать скрипты, создавать модульные тесты, отлаживать проблемы или генерировать что угодно с помощью искусственного интеллекта! Синхронизируйте репозиторий, затем создайте проект в Code Studio.", + "Available in 10+ languages to help you find references and definitions": "Доступно на более чем 10 языках, чтобы помочь вам находить ссылки и определения", + "Got it": "Понятно", + "Precise code navigation": "Точная навигация по коду", + "Show search steps": "Показать шаги поиска", + "Hide search steps": "Скрыть шаги поиска", + "To update your app, please visit our releases page on GitHub and download the latest version manually. Thank you for being a valued user of our app.": "Для обновления вашего приложения, пожалуйста, посетите нашу страницу релизов на GitHub и скачайте последнюю версию вручную. Спасибо, что являетесь нашим ценным пользователем.", + "Update Required": "Требуется обновление", + "Restart the app": "Перезапустить приложение", + "or ": "или ", + "visit the downloads page": "visit the downloads page", + "Open dropdown": "Open dropdown", + "Prompt guide": "Prompt guide", + "Like ChatGPT, bloop responds best to certain prompts. We’ve compiled a really quick guide on how better to prompt bloop.": "Like ChatGPT, bloop responds best to certain prompts. We’ve compiled a really quick guide on how better to prompt bloop.", + "Skip (Not recommended)": "Skip (Not recommended)", + "We couldn't answer your question. You can try asking again in a few moments, or rephrasing your question.": "We couldn't answer your question. You can try asking again in a few moments, or rephrasing your question.", + "Stop generating": "Stop generating", + "Take a quick look": "Take a quick look", + "Go back": "Go back", + "Repo home": "Repo home", + "Go forward": "Go forward", + "History": "History", + "Yesterday": "Yesterday", + "Regex search...": "Regex поиск...", + "Searching...": "Ищу...", + "The folder is empty": "The folder is empty", + "We haven't found any files to index in this folder": "We haven't found any files to index in this folder", + "We've made some exciting enhancements to bloop! To continue enjoying the full functionality, including the natural language search feature, please update your app to the latest version.": "We've made some exciting enhancements to bloop! To continue enjoying the full functionality, including the natural language search feature, please update your app to the latest version.", + "To update your app, please visit our releases page on GitHub and download the latest version manually. Thank you for using bloop.": "To update your app, please visit our releases page on GitHub and download the latest version manually. Thank you for using bloop.", + "View in {{viewer}}": "View in {{viewer}}", + "Open file": "Open file", + "Edit": "Edit", + "Editing a previously submitted question will discard all answers and questions following it.": "Editing a previously submitted question will discard all answers and questions following it.", + "Click to copy": "Click to copy", + "Copy link": "Copy link", + "Search using RegExp": "Search using RegExp", + "We’ve updated our auth service to make bloop more secure, please reauthorise your client with GitHub": "We’ve updated our auth service to make bloop more secure, please reauthorise your client with GitHub", + "Loading...": "Loading...", + "New code studio": "New code studio", + "Give a short descriptive name for your new code studio.": "Give a short descriptive name for your new code studio.", + "Name": "Name", + "Studio project": "Студийный проект", + "Use generative AI with a user defined context": "Use generative AI with a user defined context", + "Use generative AI with a user defined context": "Используйте генеративное искусственное интеллектуальное приложение со своим контекстом.", + "All studio projects": "Все Студийные проекты", + "Rename": "Rename", + "Last modified": "Last modified", + "Context files": "Context files", + "Studio Projects": "Студийные Проекты", + "# of #_one": "{{count}} of {{total}}", + "# of #_other": "{{count}} of {{total}}", + "Add file": "Add file", + "Studio conversation": "Studio conversation", + "My templates": "My templates", + "Use templates": "Use templates", + "User": "User", + "Assistant": "Assistant", + "Start typing...": "Start typing...", + "View history": "View history", + "Clear conversation": "Clear conversation", + "Generate": "Generate", + "In Studio Projects you can use generative AI with a user defined context to get more accurate responses. Press <2><0><1> to search for a files or press <6>Open in Studio when creating semantic searches to open in a Studio Project.": "In Studio Projects you can use generative AI with a user defined context to get more accurate responses. Press <2><0><1> to search for a files or press <6>Open in Studio when creating semantic searches to open in a Studio Project.", + "Navigate": "Navigate", + "Add context file": "Add context file", + "Select repository": "Select repository", + "Select": "Select", + "Select branch": "Select branch", + "Search branch...": "Search branch...", + "Select file": "Select file", + "Search file...": "Search file...", + "Tip: Select code to create ranges for context use.": "Tip: Select code to create ranges for context use.", + "Whole file": "Whole file", + "Lines # - #": "Lines {{start}} - {{end}}", + "# ranges_one": "{{count}} ranges", + "# ranges_other": "{{count}} ranges", + "Only the selected lines (# - #) will be used as context.": "Only the selected lines ({{start}} - {{end}}) will be used as context.", + "Clear ranges": "Clear ranges", + "Only the selected ranges will be used as context.": "Only the selected ranges will be used as context.", + "Remove related files": "Remove related files", + "Imported files": "Imported files", + "Referencing target file": "Referencing target file", + "Clear range": "Clear range", + "Use file": "Use file", + "Add related files": "Add related files", + "Add related file": "Add related file", + "Use": "Use", + "Restore": "Restore", + "Hide file": "Hide file", + "Remove file": "Remove file", + "Show file": "Show file", + "Search repos or Studio projects...": "Поиск реп или Студийных проектов...", + "All": "Все", + "Repositories": "Репозитории", + "StudioProjects": "Студийные Проекты", + "View all": "View all", + "+ # more_one": "+ {{count}} more", + "+ # more_other": "+ {{count}} more", + "No Studio projects": "No Studio projects", + "As soon as you create a new Studio project it will appear here.": "Как только вы создадите новый проект в Студии, он появится здесь.", + "Add to Studio context": "Add to Studio context", + "Add context": "Add context", + "Add context in a new Studio project or add it to an existing one.": "Add context in a new Studio project or add it to an existing one.", + "New Studio Project": "New Studio Project", + "Explain the purpose of the file {{filePath}}, from lines {{lineStart}} - {{lineEnd}}": "Explain the purpose of the file {{filePath}}, from lines {{lineStart}} - {{lineEnd}}", + "Create new Studio Project with context": "Create new Studio Project with context", + "Retry": "Retry", + "Use template": "Use template", + "Save to templates": "Save to templates", + "Clear input": "Clear input", + "Rename code studio": "Rename code studio", + "One or more repositories used in this studio project is being indexed. Try again when this process in complete.": "One or more repositories used in this studio project is being indexed. Try again when this process in complete.", + "Can’t open studio project": "Can’t open studio project", + "<0># of # tokens": "<0>{{count}} of {{total}} tokens", + "<0># of # tokens_one": "<0>{{count}} of {{total}} tokens", + "<0># of # tokens_other": "<0>{{count}} of {{total}} tokens", + "Templates": "Templates", + "No related files found": "No related files found", + "Unavailable": "Unavailable", + "Token limit exceeded. Reduce the number of context files or messages to enable the ability to generate.": "Token limit exceeded. Reduce the number of context files or messages to enable the ability to generate.", + "Invert": "Invert", + "uses left_one": "use left", + "uses left_other": "uses left", + "Upgrade": "Upgrade", + "Your quota resets every 24 hours, upgrade for unlimited uses": "Your quota resets every 24 hours, upgrade for unlimited uses", + "Manage subscription": "Manage subscription", + "Usage resets in": "Usage resets in", + "You've run out of free usage for today, please wait for your quota to reset or upgrade for unlimited usage": "You've run out of free usage for today, please wait for your quota to reset or upgrade for unlimited usage", + "This file is currently unavailable. Ability to generate will be resumed as soon as this issue is resolved.": "This file is currently unavailable. Ability to generate will be resumed as soon as this issue is resolved.", + "Search code studio...": "Search code studio...", + "Fast": "Быстрый", + "Answer speed": "Режим ответа", + "Faster answers may impact the quality of results": "Более быстрые ответы могут повлиять на качество результатов.", + "Normal": "Обычный", + "Code Studio": "Code Studio", + "Code Studio helps hobbyists and engineers working on the largest codebases, alike, to collaborate with AI. We recommend watching the guide to maximise your productivity.": "Code Studio helps hobbyists and engineers working on the largest codebases, alike, to collaborate with AI. We recommend watching the guide to maximise your productivity.", + "Watch": "Watch", + "Open in new tab": "Open in new tab", + "Show link": "Show link", + "or go to the following link": "or go to the following link", + "First name is required": "First name is required", + "Last name is required": "Last name is required", + "Email is required": "Email is required", + "Connect GitHub account to continue": "Connect GitHub account to continue", + "Save context changes before answer generation": "Save context changes before answer generation", + "Index": "Index", + "File not indexed": "File not indexed", + "Force index": "Force index", + "bloop automatically excludes certain files from indexing. This file might be too big or it might have an excluded file type.": "bloop automatically excludes certain files from indexing. This file might be too big or it might have an excluded file type.", + "Recommended: The classic response type": "Рекомендуется: Классический режим ответов", + "Experimental: Faster but less accurate": "Экспериментальный: Быстрее, но менее качественный", + "What would you like to know about <2>#repo?": "Что вы хотите знать о <2>{{repoName}}?", + "Hi, I'm bloop.": "Привет, я bloop.", + "Done": "Done", + "Send a message": "Отправить сообщение", + "Token limit exceeded": "Token limit exceeded", + "bloop automatically excludes certain files from the indexing. This file might be too big or it might have an excluded file type.": "bloop automatically excludes certain files from the indexing. This file might be too big or it might have an excluded file type.", + "Allow analytics": "Allow analytics", + "We use analytics to improve your experience. Please refresh the page after changing the value.": "We use analytics to improve your experience. Please refresh the page after changing the value.", + "Complete your transaction in Stripe...": "Complete your transaction in Stripe...", + "We've redirected you to Stripe to complete your transaction. Didn't work?": "We've redirected you to Stripe to complete your transaction. Didn't work?", + "Launch manually": "Launch manually", + "Check payment status": "Check payment status", + "No change in payment status identified.": "No change in payment status identified.", + "You've upgraded your account!": "You've upgraded your account!", + "Unlimited usage and premium features are activated.": "Unlimited usage and premium features are activated.", + "Let's go": "Let's go", + "Login": "Войти", + "Username": "Логин", + "Password": "Пароль" +} diff --git a/client/src/locales/zh-CN.json b/client/src/locales/zh-CN.json deleted file mode 100644 index 3b6f295fbd..0000000000 --- a/client/src/locales/zh-CN.json +++ /dev/null @@ -1,402 +0,0 @@ -{ - "Documentation": "文档", - "Showing # result": "显示 {{count}} 结果", - "Showing # result_zero": "您的搜索没有匹配结果。尝试不同的组合!", - "Showing # result_one": "显示 {{count}} 结果", - "Showing # result_other": "显示 {{count}} 个结果", - "bloop crashed unexpectedly": "bloop意外崩溃", - "By submitting this crash report you agree to send it to bloop for investigation.": "提交此崩溃报告即表示您同意将其发送至bloop以进行调查。", - "Close": "关闭", - "Describe the bug to help us reproduce it...": "描述错误以帮助我们复现它...", - "Discord": "Discord", - "Email address": "电子邮件地址", - "Email is not valid": "电子邮件无效", - "Full name": "全名", - "General": "常规", - "Got it!": "明白了!", - "Offline": "离线", - "Online": "在线", - "Preferences": "偏好设置", - "Problem details and System configuration": "问题详情和系统配置", - "Provide any steps necessary to reproduce the problem...": "提供任何必要的步骤以复现问题...", - "Report a bug": "报告一个错误", - "Sign In": "登录", - "Sign in with GitHub": "使用GitHub登录", - "Status": "状态", - "Submit bug report": "提交错误报告", - "Submit crash report": "提交崩溃报告", - "Thank you!": "谢谢!", - "Use GitHub to sign in to your account": "使用 GitHub 登录您的账户", - "We want to make this the best experience for you. If you encountered a bug, please submit this bug report to us. Our team will investigate as soon as possible.": "我们希望为您提供最好的体验。如果您遇到了错误,请向我们提交错误报告。我们的团队将会尽快调查。", - "We’ll investigate and reach out back soon if necessary.": "如有必要,我们会进行调查并尽快联系您。", - "Syncing repository": "同步仓库", - "Public repository": "公开仓库", - "key": "键", - "Add a repository from your local machine": "从您的本地机器添加一个仓库", - "Your GitHub repository": "您的 GitHub 仓库", - "Any repository from your private GitHub account": "您的私有 GitHub 仓库", - "Local repository": "本地仓库", - "Any public repository hosted on GitHub": "任何托管在 GitHub 上的公开仓库", - "Add": "添加", - "All repositories": "所有仓库", - "Sign out": "退出登录", - "Settings": "设置", - "Manage how you will be called in bloop": "管理 bloop 中如何称呼您", - "First and last name": "姓和名", - "First name": "名", - "Your name": "您的名字", - "Last name": "姓", - "Your last name": "您的姓氏", - "Used to sign in, syncing and product updates": "用于登录、同步和产品更新", - "Email": "电子邮件", - "Your email address": "您的电子邮件地址", - "Save changes": "保存更改", - "Theme": "主题", - "Select your interface color scheme": "选择您的界面颜色方案", - "System Preference": "系统偏好设置", - "Atom One Dark Pro": "Atom One Dark Pro", - "Solarized Light": "Solarized 浅色主题", - "Default": "默认", - "VSCode Dark": "VSCode 暗色", - "Abyss": "深渊", - "Darcula": "Darcula", - "Dracula": "Dracula", - "Material": "Material", - "GitHub Dark": "GitHub 暗色", - "Gruvbox Dark": "Gruvbox 暗色", - "Kimbie": "Kimbie", - "Solarized Dark": "Solarized 深色主题", - "Tomorrow Night Blue": "Tomorrow Night 蓝色主题", - "Default Light": "默认浅色主题", - "Monokai": "Monokai", - "Night Owl": "Night Owl", - "GitHub Light": "GitHub 浅色", - "Gruvbox Light": "Gruvbox 浅色", - "VSCode Light": "VSCode 浅色", - "Quiet Light": "静谧浅色", - "No repositories": "无仓库", - "As soon as you add a repository it will appear here.": "一旦你添加了仓库,它将出现在这里。", - "Last updated ": "最后更新 ", - "Re-sync": "重新同步", - "Remove": "移除", - "Cloning...": "克隆中...", - "Queued...": "已进入队列...", - "Cancel": "取消", - "Indexing...": "索引中...", - "We are syncing your repository to bloop. This might take a couple of minutes": "我们正在将您的仓库同步到 bloop。这可能需要几分钟", - "complete": "完成", - "Confirm": "确认", - "Cancelling...": "正在取消...", - "Cancelled": "已取消", - "cancelling": "正在取消", - "done": "已完成", - "cancelled": "已取消", - "syncing": "同步中", - "indexing": "索引中", - "Error": "错误", - "Remote removed ": "已移除远程仓库", - "Not synced": "未同步", - "Removed": "已移除", - "Select any private repository you would like to sync": "选择您想要同步的任何私有仓库", - "Private repository": "私有仓库", - "Search repository...": "搜索仓库...", - "Alphabetically": "按字母顺序", - "Last updated": "最后更新", - "No results...": "无结果...", - "Nothing matched your search. Try a different combination!": "没有找到匹配您搜索的内容。尝试不同的组合吧!", - "Already synced": "已同步", - "Sync": "同步", - "Scan a folder to sync it’s repositories.": "扫描文件夹以同步其仓库。仅具有 .git 文件夹的目录才会同步", - "Select folder": "选择文件夹", - "Sync local repositories": "同步本地仓库", - "Scan a folder": "扫描文件夹", - "Change folder": "更改文件夹", - "Select the folders you want to add to bloop. You can always sync, unsync or remove unwanted repositories later.": "选择您希望添加至bloop的文件夹。您随时可以同步、解除同步或移除不需要的仓库。", - "Repository url...": "仓库URL...", - "Sync repository": "同步仓库", - "Paste a link to any public repository you would like to index.": "粘贴您希望索引的任何公开仓库的链接。", - "This is not a public repository / We couldn't find this repository": "这不是公开的仓库/我们找不到这个仓库", - "Verifying access...": "正在验证访问权限...", - "Synced": "已同步", - "Files in": "文件在", - "Files": "文件", - "Copy search query to clipboard": "复制搜索查询到剪贴板", - "Search for code using regex": "使用正则表达式搜索代码", - "Clear search history": "清除搜索历史", - "Search branches...": "搜索分支...", - "Switch branch": "切换分支", - "Upgrade now": "现在升级", - "Upgrade plan": "升级计划", - "to seamlessly explore code across all branches in your GitHub repositories, maximizing your code discovery capabilities.": "无缝地探索GitHub仓库中所有分支的代码,最大限度地提升您的代码发现能力。", - "GitHub Branches": "GitHub 分支", - "Fold everything": "折叠全部", - "Reset filters": "重置筛选", - "Hide filters": "隐藏筛选", - "Filter lang...": "筛选语言...", - "Select all": "全选", - "File Type": "文件类型", - "View all results": "查看所有结果", - "Query suggestions": "查询建议", - "Result suggestions": "结果建议", - "Show fewer results": "显示较少的结果", - "# match": "找到 {{count}} 个匹配", - "# match_one": "找到 {{count}} 个匹配", - "# match_other": "找到 {{count}} 个匹配", - "Today": "今天", - "Expand everything": "展开全部", - "Language": "语言", - "Results": "结果", - "No results": "无结果", - "Suggested combinations": "推荐的组合", - "Show filters": "显示筛选", - "Filters": "筛选", - "Apply filters": "应用筛选", - "Show # more match": "显示 {{count}} 更多匹配", - "Show # more match_one": "显示 {{count}} 更多匹配", - "Show # more match_other": "显示 {{count}} 更多匹配", - "Show less": "显示较少", - "Previous page": "上一页", - "Next page": "下一页", - "Showing page {{page}} of {{totalPages}}": "正在显示第{{page}}页,总共{{totalPages}}页", - "Deselect all": "取消全选", - "File": "文件", - "Open in sidebar": "在侧边栏打开", - "Open in full view": "在全屏视图中打开", - "Open in modal": "在模态窗口打开", - "The line of code where identifier is defined": "定义标识符的代码行", - "The line of code where the identifier is referenced": "引用标识符的代码行", - "We weren't able to identify any references at the moment": "我们目前无法找到任何引用", - "No references or definitions found": "找不到任何引用或定义", - "Definitions": "定义", - "References": "引用", - "definition": "定义", - "reference": "引用", - "In this file": "在此文件中", - "All conversations": "所有对话", - "Sorry, this repository is not ready for search": "抱歉,这个仓库还未准备好进行搜索", - "Wait for the repository to finish syncing and try again": "等待仓库完成同步后再试", - "Create new": "新会话", - "Show": "显示", - "Hide": "隐藏", - "Conversations": "对话", - "Delete": "删除", - "Answer Ready": "回答就绪", - "View": "查看", - "Reading ": "正在阅读 ", - "avatar": "头像", - "Submit": "提交", - "Save": "保存", - "Generating response...": "正在生成回答...", - "Responding...": "正在回答...", - "Reading": "阅读", - "Bad": "差", - "Good": "好", - "Show more": "显示更多", - "How would you rate this response?": "您如何评价这个回答?", - "What was the issue with this response? How could it be improved?": "这个回答有什么问题?怎样可以改进?", - "Failed to get a response from OpenAI. Try again in a few moments.": "从OpenAI获取回应失败。请稍后再试。", - "Bad response": "回应不好", - "Explain lines {{lineStart}} - {{lineEnd}} in {{filePath}}": "解释{{filePath}}中的第{{lineStart}}行到第{{lineEnd}}行", - "Select less code": "选择更少的代码", - "Ask bloop": "询问bloop", - "Explain": "解释", - "Something went wrong": "出错了", - "chats in bloop": "在bloop中对话", - "Setup bloop": "设置bloop", - "Please log into your GitHub account to complete setup": "请登录您的GitHub账户以完成设置", - "Select color theme:": "选择颜色主题:", - "Connect account": "连接账户", - "Continue": "继续", - "Back": "返回", - "Code expires in {{tokenExpireIn}}": "代码在{{tokenExpireIn}}后过期", - "After launching the GitHub login window, you’ll need to perform the following steps:": "启动GitHub登录窗口后,您需要执行以下步骤:", - "or visit: ": "或者访问: ", - "Authorise bloop": "授权bloop", - "Enter the device code": "输入设备代码", - "Note: GitHub OAuth login doesn't support granular repo or organisation level access. The token has a wide scope, but only repos you explicitly choose will be synced, and your account credentials are always stored locally.": "注意:GitHub OAuth登录不支持精细的仓库或组织级别的访问。token的范围很广,但只有您明确选择的仓库会被同步,您的账户凭据始终存储在本地。", - "Launch GitHub Login": "启动GitHub登录", - "Copy": "复制", - "Copied": "已复制", - "Waiting for authentication...": "正在等待身份验证...", - "Code has expired": "代码已过期", - "Generate new code": "生成新的代码", - "Relaunch GitHub auth": "重新启动GitHub授权", - "Disconnect": "断开连接", - "Terms & conditions": "条款和条件", - "By continuing you accept our": "继续即表示你接受我们的", - "and ": "和", - "Privacy policy": "隐私政策", - "Welcome to bloop": "欢迎来到bloop", - "Unlock the value of your existing code, using AI": "利用AI解锁您现有代码的价值", - "Search code in natural language": "用自然语言搜索代码", - "Ask questions about your codebases in natural language, just like you’d speak to ChatGPT. Get started by syncing a repo, then open the repo and start chatting.": "用自然语言向您的代码库提问,就像您和ChatGPT对话一样。首先同步一个仓库,然后打开仓库开始聊天。", - "Generate code using AI": "使用AI生成代码", - "Code studio helps you write scripts, create unit tests, debug issues or generate anything else you can think of using AI! Sync a repo, then create a code studio project.": "代码工作室可以帮助您使用AI编写脚本、创建单元测试、调试问题或生成您能想到的任何其他内容!同步一个仓库,然后创建一个代码工作室项目。", - "Got it": "了解了", - "Precise code navigation": "精确的代码导航", - "Show search steps": "显示搜索步骤", - "Hide search steps": "隐藏搜索步骤", - "To update your app, please visit our releases page on GitHub and download the latest version manually. Thank you for being a valued user of our app.": "要更新您的应用,请访问我们在GitHub上的发布页面并手动下载最新版本。感谢您成为我们应用的重要用户。", - "Update Required": "需要更新", - "Restart the app": "重新启动应用", - "or ": "或者 ", - "visit the downloads page": "访问下载页面", - "Open dropdown": "打开下拉菜单", - "Prompt guide": "提示指南", - "Like ChatGPT, bloop responds best to certain prompts. We’ve compiled a really quick guide on how better to prompt bloop.": "像ChatGPT一样,bloop最好的响应是对某些提示的反馈。我们已经编制了一个非常快速的指南,以更好地提示bloop。", - "Skip (Not recommended)": "跳过(不建议)", - "We couldn't answer your question. You can try asking again in a few moments, or rephrasing your question.": "我们无法回答您的问题。您可以尝试在几分钟后再次提问,或者以不同的方式提问。", - "Stop generating": "停止生成", - "Take a quick look": "快速查看", - "Go back": "返回", - "Repo home": "仓库主页", - "Go forward": "前进", - "History": "历史", - "Yesterday": "昨天", - "Regex search...": "正则表达式搜索...", - "Searching...": "搜索中...", - "The folder is empty": "文件夹是空的", - "We haven't found any files to index in this folder": "我们没有在这个文件夹中找到任何可以索引的文件", - "We've made some exciting enhancements to bloop! To continue enjoying the full functionality, including the natural language search feature, please update your app to the latest version.": "我们对bloop进行了一些激动人心的增强功能!为了继续享受全部功能,包括自然语言搜索功能,请更新您的应用到最新版本。", - "To update your app, please visit our releases page on GitHub and download the latest version manually. Thank you for using bloop.": "要更新您的应用,请访问我们在GitHub上的发布页面并手动下载最新版本。感谢您使用bloop。", - "View in {{viewer}}": "在{{viewer}}中查看", - "Open file": "打开文件", - "Edit": "编辑", - "Editing a previously submitted question will discard all answers and questions following it.": "编辑之前提交的问题将丢弃其后的所有答案和问题。", - "Click to copy": "单击复制", - "Copy link": "复制链接", - "Search using RegExp": "使用RegExp搜索", - "We’ve updated our auth service to make bloop more secure, please reauthorise your client with GitHub": "我们已经更新了我们的身份服务以使Bloop更加安全,请使用GitHub重新授权您的客户", - "Loading...": "加载...", - "New code studio": "新代码工作室", - "Last modified": "上一次更改", - "All studio projects": "所有工作室项目", - "Use generative AI with a user defined context": "将生成AI与用户定义的上下文一起使用", - "Give a short descriptive name for your new code studio.": "为您的新代码工作室提供一个简短的描述性名称。", - "Name": "姓名", - "Context files": "上下文文件", - "Studio Projects": "工作室项目", - "Studio project": "Studio Project", - "Rename": "改名", - "# of #": "{{total}} 中的 {{count}}", - "# of #_one": "{{total}} 中的 {{count}}", - "# of #_other": "{{total}} 中的 {{count}}", - "Add file": "添加文件", - "Studio conversation": "工作室对话", - "My templates": "我的模板", - "Use templates": "使用模板", - "User": "用户", - "Assistant": "助手", - "Start typing...": "开始打字...", - "View history": "查看历史", - "Clear conversation": "清除对话", - "Generate": "产生", - "In Studio Projects you can use generative AI with a user defined context to get more accurate responses. Press <2><0><1> to search for a files or press <6>Open in Studio when creating semantic searches to open in a Studio Project.": "在录音室项目中,您可以使用用户定义上下文的生成AI来获得更准确的响应。 按<2> <0> <1> > 搜索文件,或在创建语义搜索在Studio Project中打开时在Studio 中按<6>打开。", - "Navigate": "导航", - "Add context file": "添加上下文文件", - "Select repository": "选择存储库", - "Search repository": "搜索存储库", - "Select": "选择", - "Search branch...": "搜索分支...", - "Select file": "选择文件", - "Tip: Select code to create ranges for context use.": "提示:选择代码以创建范围以供上下文使用。", - "Whole file": "整个文件", - "Lines # - #": "行{{start}} - {{end}}", - "# ranges": "{{count}}个范围", - "# ranges_one": "{{count}}个范围", - "# ranges_other": "{{count}}个范围", - "Only the selected lines (# - #) will be used as context.": "仅选择的行({{start}} - {{end}})将被用作上下文。", - "Clear ranges": "清晰的范围", - "Only the selected ranges will be used as context.": "仅选择的范围将用作上下文。", - "Remove related files": "删除相关文件", - "Imported files": "导入文件", - "Referencing target file": "引用目标文件", - "Clear range": "清除范围", - "Use file": "使用文件", - "Add related files": "添加相关文件", - "Add related file": "添加相关文件", - "Select branch": "选择分行", - "Search file...": "搜索文件...", - "Use": "使用", - "Restore": "恢复", - "Hide file": "隐藏文件", - "Remove file": "删除文件", - "Show file": "显示文件", - "Search repos or Studio projects...": "搜索存储库或 Studio 项目...", - "All": "全部", - "StudioProjects": "工作室项目", - "View all": "查看全部", - "+ # more": "+ {{count}} 更多", - "+ # more_other": "+ {{count}} 更多", - "No Studio projects": "没有工作室项目", - "Repositories": "存储库", - "As soon as you create a new Studio project it will appear here.": "一旦您创建了新的 Studio 项目,它就会出现在此处。", - "Add context": "添加上下文", - "Add context in a new Studio project or add it to an existing one.": "在新的 Studio 项目中添加上下文或将其添加到现有项目中。", - "New Studio Project": "新工作室项目", - "Explain the purpose of the file {{filePath}}, from lines {{lineStart}} - {{lineEnd}}": "解释文件 {{filePath}} 的用途,从第 {{lineStart}} - {{lineEnd}} 行开始", - "Add to Studio context": "添加到 Studio 上下文", - "Create new Studio Project with context": "使用上下文创建新的 Studio 项目", - "Retry": "重试", - "Use template": "使用模板", - "Save to templates": "保存到模板", - "Clear input": "清除输入", - "Rename code studio": "重命名代码工作室", - "One or more repositories used in this studio project is being indexed. Try again when this process in complete.": "该工作室项目中使用的一个或多个存储库正在索引。 完成此过程时,请重试。", - "Can’t open studio project": "无法打开录音室项目", - "<0># of # tokens": "{{total}}个代币中的 <0>{{count}} 个", - "<0># of # tokens_one": "{{total}}个代币中的 <0>{{count}} 个", - "<0># of # tokens_other": "{{total}}个代币中的 <0>{{count}} 个", - "Templates": "模板", - "No related files found": "找不到相关文件", - "Unavailable": "不可用", - "Token limit exceeded. Reduce the number of context files or messages to enable the ability to generate.": "令牌限制超过了。 减少上下文文件的数量或消息,以实现生成能力。", - "Invert": "倒置", - "uses left": "使用左侧", - "uses left_one": "使用左侧", - "uses left_other": "使用左侧", - "Upgrade": "升级", - "Your quota resets every 24 hours, upgrade for unlimited uses": "您的配额每24小时重置一次,升级以获得无限请求", - "Manage subscription": "管理订阅", - "You've run out of free usage for today, please wait for your quota to reset or upgrade for unlimited usage": "您今天的免费使用时间用完了,请等待您的配额重置或升级无限制", - "This file is currently unavailable. Ability to generate will be resumed as soon as this issue is resolved.": "此文件当前不可用。 一旦解决此问题,就会恢复产生的能力。", - "Search code studio...": "搜索代码工作室...", - "Code Studio": "代码工作室", - "Code Studio helps hobbyists and engineers working on the largest codebases, alike, to collaborate with AI. We recommend watching the guide to maximise your productivity.": "代码工作室帮助业余爱好者和从事最大代码库工作的工程师等与人工智能进行协作。 我们建议您观看该指南以最大限度地提高您的工作效率。", - "Watch": "手表", - "Open in new tab": "在新标签中打开", - "Faster answers may impact the quality of results": "更快的答案可能会影响结果的质量", - "Recommended: The classic response type": "推荐:经典的回应类型", - "Experimental: Faster but less accurate": "实验性:更快但准确性较低", - "Answer speed": "答案速度", - "Normal": "普通的", - "Fast": "快速地", - "Show link": "显示链接", - "or go to the following link": "或转到以下链接", - "Email is required": "需要电子邮件", - "First name is required": "需要名字", - "Last name is required": "需要姓氏", - "Connect GitHub account to continue": "连接github帐户继续", - "Save context changes before answer generation": "在回答生成之前保存上下文更改", - "Index": "指数", - "Force index": "力索引", - "bloop automatically excludes certain files from indexing. This file might be too big or it might have an excluded file type.": "Bloop自动将某些文件从索引中排除。 该文件可能太大,或者可能具有排除的文件类型。", - "What would you like to know about <2>#repo?": "你想了解<2>#repo的什么信息?", - "Hi, I'm bloop.": "你好,我是bloop。", - "Done": "已完成", - "Send a message": "发送消息", - "Token limit exceeded": "令牌限制超过了", - "bloop automatically excludes certain files from the indexing. This file might be too big or it might have an excluded file type.": "Bloop自动将某些文件从索引中排除。 该文件可能太大,或者可能具有排除的文件类型。", - "File not indexed": "文件未索引", - "Allow analytics": "允许分析", - "We use analytics to improve your experience. Please refresh the page after changing the value.": "我们使用分析来改善您的经验。 更改值后,请刷新页面。", - "Complete your transaction in Stripe...": "完成您的交易...", - "Launch manually": "手动启动", - "Check payment status": "检查付款状态", - "No change in payment status identified.": "未确定付款状态的变化。", - "We've redirected you to Stripe to complete your transaction. Didn't work?": "我们将您重定向到条纹以完成您的交易。 不起作用吗?", - "Usage resets in": "用法重置", - "Let's go": "我们走吧", - "You've upgraded your account!": "您已经升级了您的帐户!", - "Unlimited usage and premium features are activated.": "无限用法和高级功能被激活。" -} diff --git a/client/src/pages/HomeTab/Content.tsx b/client/src/pages/HomeTab/Content.tsx index 812c2bc76d..66cabd592b 100644 --- a/client/src/pages/HomeTab/Content.tsx +++ b/client/src/pages/HomeTab/Content.tsx @@ -120,8 +120,8 @@ const HomePage = ({ randomKey }: { randomKey?: any }) => { Add
- - + {/**/} + {/**/} {!isSelfServe && ( )} diff --git a/client/src/pages/Onboarding/UserForm/index.tsx b/client/src/pages/Onboarding/UserForm/index.tsx index 487f8a1e75..a15c766cf4 100644 --- a/client/src/pages/Onboarding/UserForm/index.tsx +++ b/client/src/pages/Onboarding/UserForm/index.tsx @@ -7,13 +7,12 @@ import React, { useState, } from 'react'; import { Trans, useTranslation } from 'react-i18next'; -import { BloopLogo, ChevronRight, GitHubLogo } from '../../../icons'; +import { BloopLogo } from '../../../icons'; import TextInput from '../../../components/TextInput'; import { EMAIL_REGEX } from '../../../consts/validations'; import Button from '../../../components/Button'; import { UIContext } from '../../../context/uiContext'; import { DeviceContext } from '../../../context/deviceContext'; -import { getConfig, githubLogout, githubLogin } from '../../../services/api'; import { Form } from '../index'; import Dropdown from '../../../components/Dropdown/Normal'; import { MenuItemType } from '../../../types/general'; @@ -22,6 +21,7 @@ import { themesMap } from '../../../components/Settings/Preferences'; import { copyToClipboard, previewTheme } from '../../../utils'; import LanguageSelector from '../../../components/LanguageSelector'; import Tooltip from '../../../components/Tooltip'; +import axios from "axios"; type Props = { form: Form; @@ -31,127 +31,57 @@ type Props = { const UserForm = ({ form, setForm, onContinue }: Props) => { const { t } = useTranslation(); - const { isGithubConnected, setGithubConnected } = useContext( + const { isGithubConnected } = useContext( UIContext.GitHubConnected, ); const { envConfig, openLink, setEnvConfig } = useContext(DeviceContext); const { theme, setTheme } = useContext(UIContext.Theme); - const [loginUrl, setLoginUrl] = useState(''); - const [isLinkShown, setLinkShown] = useState(false); - const [isBtnClicked, setBtnClicked] = useState(false); - const [isLinkCopied, setLinkCopied] = useState(false); - const [isTimedOut, setIsTimedOut] = useState(false); const [showErrors, setShowErrors] = useState(false); - const handleLogout = useCallback(() => { - githubLogout(); - setGithubConnected(false); - }, []); - - useEffect(() => { - githubLogin().then((data) => { - setLoginUrl(data.authentication_needed.url); - }); - }, []); - - const onClick = useCallback(() => { - if (isGithubConnected) { - handleLogout(); - setBtnClicked(false); - } else { - if (isTimedOut) { - setIsTimedOut(false); - githubLogin().then((data) => { - setLoginUrl(data.authentication_needed.url); - openLink(data.authentication_needed.url); - }); - } else { - openLink(loginUrl); + const getUsernameError = function () { + if (!showErrors) { + return undefined; } - setBtnClicked(true); - } - }, [isGithubConnected, loginUrl, openLink, isTimedOut]); - - const checkGHAuth = useCallback(async () => { - const d = await getConfig(); - setGithubConnected(!!d.user_login); - setEnvConfig((prev) => - JSON.stringify(prev) === JSON.stringify(d) ? prev : d, - ); - return d; - }, []); - - useEffect(() => { - let intervalId: number; - let timerId: number; - if (loginUrl && !isGithubConnected) { - checkGHAuth(); - intervalId = window.setInterval(() => { - checkGHAuth().then((d) => { - if ( - !!d.user_login && - form.firstName && - form.lastName && - form.email && - !form.emailError && - document.activeElement?.tagName !== 'INPUT' - ) { - onContinue(); - } - }); - }, 500); - timerId = window.setTimeout( - () => { - clearInterval(intervalId); - setBtnClicked(false); - setIsTimedOut(true); - }, - 10 * 60 * 1000, - ); - } - return () => { - clearInterval(intervalId); - clearTimeout(timerId); - }; - }, [loginUrl, isGithubConnected, form, checkGHAuth]); + if (!form.username) { + return t('Username is required'); + } - useEffect(() => { - if (loginUrl) { - checkGHAuth(); - } - }, [loginUrl, checkGHAuth]); + if (form.error !== null) { + return t(form.error); + } - const handleCopy = useCallback(() => { - copyToClipboard(loginUrl); - setLinkCopied(true); - setTimeout(() => setLinkCopied(false), 2000); - }, [loginUrl]); + return undefined; + } const handleSubmit = useCallback( (e: React.MouseEvent) => { e.preventDefault(); e.stopPropagation(); if ( - !isGithubConnected || - !form.firstName || - !form.lastName || - !form.email || - !!form.emailError || - !EMAIL_REGEX.test(form.email) + !form.username || + !form.password ) { - if (!EMAIL_REGEX.test(form.email)) { - setForm((prev) => ({ - ...prev, - emailError: t('Email is not valid'), - })); - } setShowErrors(true); return; } - onContinue(); + + axios.post('https://api-dev.saber3d.dev/v1/login', { + password: form.password, + username: form.username, + }).then(response => { + form.user = response.data.authorized_user; + + onContinue(); + }).catch(error => { + setShowErrors(true); + setForm((prev) => ({ + ...prev, + error: t(error.response.data.message), + })); + }) }, - [form, isGithubConnected, onContinue], + [form, onContinue], ); return ( @@ -165,18 +95,10 @@ const UserForm = ({ form, setForm, onContinue }: Props) => {

- Setup bloop + Bloop

- {envConfig.credentials_upgrade && ( -

- - We’ve updated our auth service to make bloop more secure, please - reauthorise your client with GitHub - -

- )}

- Please log into your GitHub account to complete setup + Please log into your Saber account to complete

@@ -185,58 +107,40 @@ const UserForm = ({ form, setForm, onContinue }: Props) => { onSubmit={(e) => e.preventDefault()} > - setForm((prev) => ({ ...prev, firstName: e.target.value })) + setForm((prev) => ({ + ...prev, + username: e.target.value, + error: null, + })) } autoFocus error={ - showErrors && !form.firstName - ? t('First name is required') - : undefined + getUsernameError() } /> - setForm((prev) => ({ ...prev, lastName: e.target.value })) - } - error={ - showErrors && !form.lastName - ? t('Last name is required') - : undefined - } - /> - setForm((prev) => ({ - ...prev, - email: e.target.value, - emailError: null, + ...prev, + password: e.target.value, + error: null, })) } - validate={() => { - if (form.email && !EMAIL_REGEX.test(form.email)) { - setForm((prev) => ({ - ...prev, - emailError: t('Email is not valid'), - })); - } - }} error={ - form.emailError || - (showErrors && !form.email ? t('Email is required') : undefined) + showErrors && !form.password + ? t('Password is required') + : undefined } - name="email" - placeholder={t('Email address')} />
{ }} />
-
- -

- {isGithubConnected ? envConfig.user_login : 'GitHub'} -

- -
- {showErrors && !isGithubConnected && ( -

- Connect GitHub account to continue -

- )} - {!isGithubConnected && ( -
- {isLinkShown ? ( - -

- {loginUrl} -

-
- ) : ( -

- or go to the following link{' '} - -

- )} -
- )} - {isGithubConnected && ( -

- By continuing you accept our -
- {' '} - and - -

- )} ); }; diff --git a/client/src/pages/Onboarding/index.tsx b/client/src/pages/Onboarding/index.tsx index e2c1b1b56e..8f4379fe8f 100644 --- a/client/src/pages/Onboarding/index.tsx +++ b/client/src/pages/Onboarding/index.tsx @@ -17,7 +17,7 @@ import { REFRESH_TOKEN_KEY, saveJsonToStorage, savePlainToStorage, - SESSION_ID_KEY, + SESSION_ID_KEY, USER_DATA, USER_DATA_FORM, } from '../../services/storage'; import { getConfig, getRepos, saveUserData } from '../../services/api'; @@ -26,21 +26,22 @@ import StatusBar from '../../components/StatusBar'; import UserForm from './UserForm'; import FeaturesStep from './FeaturesStep'; import SelfServeStep from './SelfServeStep'; +import {User} from "../../types/user"; export type Form = { - firstName: string; - lastName: string; - email: string; - emailError: string | null; + username: string; + password: string; + user: null | User; + error: string | null, }; const Onboarding = ({ activeTab }: { activeTab: string }) => { const { t } = useTranslation(); const [form, setForm] = useState
({ - firstName: '', - lastName: '', - email: '', - emailError: null, + username: '', + password: '', + user: null, + error: null, ...getJsonFromStorage(USER_DATA_FORM), }); const [shouldShowPopup, setShouldShowPopup] = useState(false); @@ -112,13 +113,8 @@ const Onboarding = ({ activeTab }: { activeTab: string }) => { }, []); const onSubmit = useCallback(() => { - saveUserData({ - email: form.email, - first_name: form.firstName, - last_name: form.lastName, - unique_id: envConfig.tracking_id || '', - }); saveJsonToStorage(USER_DATA_FORM, form); + saveJsonToStorage(USER_DATA, form.user); closeOnboarding(); setTimeout(() => setShouldShowPopup(true), 1000); }, [form, envConfig.tracking_id]); diff --git a/client/src/services/storage.ts b/client/src/services/storage.ts index 4a3d180a1b..5b8358b116 100644 --- a/client/src/services/storage.ts +++ b/client/src/services/storage.ts @@ -23,7 +23,9 @@ export const ONBOARDING_DONE_KEY = 'onboarding_done'; export const IS_ANALYTICS_ALLOWED_KEY = 'is_analytics_allowed'; export const SESSION_ID_KEY = 'session_id'; export const DEVICE_ID = 'device_id'; -export const USER_DATA_FORM = 'user_data_form'; +export const USER_DATA_FORM = 'user_data_form' +export const USER_DATA = 'user_data'; +export const PROMPT_GUIDE = 'prompt_guide' export const THEME = 'theme'; export const TABS_KEY = 'tabs'; export const LAST_ACTIVE_TAB_KEY = 'last_active_tab'; diff --git a/client/src/types/general.ts b/client/src/types/general.ts index e556357f60..cf43e8ee69 100644 --- a/client/src/types/general.ts +++ b/client/src/types/general.ts @@ -345,7 +345,7 @@ export type FileHighlightsType = Record< ({ lines: [number, number]; color: string; index: number } | undefined)[] >; -export type LocaleType = 'en' | 'ja' | 'zhCN' | 'es'; +export type LocaleType = 'en' | 'ru'; export enum StudioConversationMessageAuthor { USER = 'User', diff --git a/client/src/types/user.ts b/client/src/types/user.ts new file mode 100644 index 0000000000..6367d8662a --- /dev/null +++ b/client/src/types/user.ts @@ -0,0 +1,9 @@ + +export type User = { + id: number; + avatar_url: string | null; + department: string | null; + description: string | null; + displayname: string | null; + division: string | null; +}; diff --git a/client/src/utils/index.ts b/client/src/utils/index.ts index dcc3b3cb22..aa17810f12 100644 --- a/client/src/utils/index.ts +++ b/client/src/utils/index.ts @@ -1,6 +1,6 @@ import { MouseEvent } from 'react'; import { v4 as uuidv4 } from 'uuid'; -import { ja, zhCN, es } from 'date-fns/locale'; +import {ru} from 'date-fns/locale'; import { LocaleType, RepoType, RepoUi } from '../types/general'; import langs from './langs.json'; @@ -351,12 +351,8 @@ export function humanNumber(num: number) { export const getDateFnsLocale = (locale: LocaleType) => { switch (locale) { - case 'ja': - return { locale: ja }; - case 'zhCN': - return { locale: zhCN }; - case 'es': - return { locale: es }; + case 'ru': + return { locale: ru }; default: return undefined; } diff --git a/server/bleep/src/agent.rs b/server/bleep/src/agent.rs index 5d1ebf4def..25919a1815 100644 --- a/server/bleep/src/agent.rs +++ b/server/bleep/src/agent.rs @@ -437,14 +437,10 @@ impl Agent { fn store(&mut self) -> impl Future { let sql = Arc::clone(&self.app.sql); let conversation = (self.repo_ref.clone(), self.exchanges.clone()); - let conversation_id = self - .user - .login() - .context("didn't have user ID") - .map(|user_id| ConversationId { - thread_id: self.thread_id, - user_id: user_id.to_owned(), - }); + let conversation_id = Ok(ConversationId { + thread_id: self.thread_id, + user_id: "dead4w".to_owned(), + }); async move { let result = match conversation_id { diff --git a/server/bleep/src/lib.rs b/server/bleep/src/lib.rs index 977446e381..f2a4738c32 100644 --- a/server/bleep/src/lib.rs +++ b/server/bleep/src/lib.rs @@ -352,9 +352,7 @@ impl Application { } fn llm_gateway_client(&self) -> Result { - let answer_api_token = self.answer_api_token()?.map(|s| s.expose_secret().clone()); - - Ok(llm_gateway::Client::new(&self.config.answer_api_url).bearer(answer_api_token)) + Ok(llm_gateway::Client::new(&self.config.answer_api_url)) } fn seal_auth_state(&self, payload: serde_json::Value) -> String { diff --git a/server/bleep/src/repo/iterator.rs b/server/bleep/src/repo/iterator.rs index 102c81224c..cc1421f8ab 100644 --- a/server/bleep/src/repo/iterator.rs +++ b/server/bleep/src/repo/iterator.rs @@ -26,7 +26,7 @@ pub const MAX_FILE_LEN: u64 = AVG_LINE_LEN * MAX_LINE_COUNT; pub const EXT_BLACKLIST: &[&str] = &[ // graphics "png", "jpg", "jpeg", "ico", "bmp", "bpg", "eps", "pcx", "ppm", "tga", "tiff", "wmf", "xpm", - "svg", "riv", + "svg", "riv", "gif", // fonts "ttf", "woff2", "fnt", "fon", "otf", // documents @@ -36,7 +36,9 @@ pub const EXT_BLACKLIST: &[&str] = &[ // compiled "jar", "pyc", "war", "ear", // compression - "tar", "gz", "bz2", "xz", "7z", "bin", "apk", "deb", "rpm", + "tar", "gz", "bz2", "xz", "7z", "bin", "apk", "deb", "rpm", "rar", "zip", + // binary + "pkg", "pyd", "pyz", "lib", "pack", "idx", "dylib", "so", // executable "com", "exe", "out", "coff", "obj", "dll", "app", "class", // misc. diff --git a/server/bleep/src/webserver/answer.rs b/server/bleep/src/webserver/answer.rs index 7c59da9870..a3d1b08fc8 100644 --- a/server/bleep/src/webserver/answer.rs +++ b/server/bleep/src/webserver/answer.rs @@ -95,11 +95,9 @@ pub(super) async fn answer( ) -> super::Result { let query_id = uuid::Uuid::new_v4(); + // FIXME: auth let conversation_id = ConversationId { - user_id: user - .login() - .ok_or_else(|| super::Error::user("didn't have user ID"))? - .to_string(), + user_id: "dead4w".parse().unwrap(), thread_id: params.thread_id, }; @@ -207,14 +205,8 @@ async fn try_execute_agent( > { QueryLog::new(&app.sql).insert(¶ms.q).await?; - let answer_api_token = app - .answer_api_token() - .map_err(|e| super::Error::user(e).with_status(StatusCode::UNAUTHORIZED))? - .map(|s| s.expose_secret().clone()); - let llm_gateway = llm_gateway::Client::new(&app.config.answer_api_url) .temperature(0.0) - .bearer(answer_api_token) .session_reference_id(conversation_id.to_string()); // confirm client compatibility with answer-api @@ -399,10 +391,7 @@ pub async fn explain( let conversation_id = ConversationId { thread_id: params.thread_id, - user_id: user - .login() - .ok_or_else(|| super::Error::user("didn't have user ID"))? - .to_string(), + user_id: "dead4w".parse().unwrap(), }; let mut query = parser::parse_nl(&virtual_req.q)