From 0e353c9569cc16b3f85adb0425752d7886dd57fe Mon Sep 17 00:00:00 2001 From: CandyGZ Date: Sat, 27 Sep 2025 16:21:18 -0600 Subject: [PATCH] adds Spanish languaje --- enjoy/src/i18n/es.json | 945 +++++++++++++++++++++++++++++++++++++ enjoy/src/renderer/i18n.ts | 6 +- 2 files changed, 950 insertions(+), 1 deletion(-) create mode 100644 enjoy/src/i18n/es.json diff --git a/enjoy/src/i18n/es.json b/enjoy/src/i18n/es.json new file mode 100644 index 00000000..169353ae --- /dev/null +++ b/enjoy/src/i18n/es.json @@ -0,0 +1,945 @@ +{ + "models": { + "user": { + "id": "ID", + "name": "Nombre" + }, + "audio": { + "name": "nombre", + "namePlaceholder": "nombra tu audio", + "type": "tipo", + "description": "descripción", + "descriptionPlaceholder": "describe tu audio", + "format": "formato", + "duration": "duración", + "size": "tamaño", + "source": "origen", + "createdAt": "creado el", + "updatedAt": "actualizado el", + "recordingsCount": "conteo de grabaciones", + "recordingsDuration": "duración de grabaciones", + "isTranscribed": "transcrito", + "added": "Audio agregado con éxito", + "removed": "Audio eliminado con éxito", + "notFound": "Audio no encontrado", + "fileTooLarge": "Archivo demasiado grande. Por favor, selecciona un audio de menos de 50MB. {{file}}", + "failedToAdd": "Error al agregar, {{ error }}", + "fileNotFound": "Archivo no encontrado {{file}}", + "fileNotSupported": "Archivo no compatible {{file}}", + "failedToCopyFile": "Error al copiar el archivo {{file}}", + "failedToDownloadFile": "Error al descargar el archivo {{file}}", + "transcriptionFinished": "Transcripción finalizada" + }, + "video": { + "name": "nombre", + "namePlaceholder": "nombra tu video", + "type": "tipo", + "description": "descripción", + "descriptionPlaceholder": "describe tu video", + "format": "formato", + "duration": "duración", + "size": "tamaño", + "source": "origen", + "createdAt": "creado el", + "updatedAt": "actualizado el", + "recordingsCount": "conteo de grabaciones", + "recordingsDuration": "duración de grabaciones", + "isTranscribed": "transcrito", + "added": "Video agregado con éxito", + "removed": "Video eliminado con éxito", + "notFound": "Video no encontrado", + "fileTooLarge": "Archivo demasiado grande. Por favor, selecciona un video de menos de 100MB. {{file}}", + "failedToAdd": "Error al agregar, {{ error }}", + "fileNotFound": "Archivo no encontrado {{file}}", + "fileNotSupported": "Archivo no compatible {{file}}", + "failedToCopyFile": "Error al copiar el archivo {{file}}", + "failedToDownloadFile": "Error al descargar el archivo {{file}}", + "transcriptionFinished": "Transcripción finalizada" + }, + "recording": { + "segmentIndex": "Índice de Segmento", + "segmentText": "Texto del Segmento", + "duration": "Duración", + "durationTooShort": "Duración demasiado corta", + "failedToSave": "Error al guardar la grabación", + "notFound": "Grabación no encontrada", + "cannotDetectAnySound": "No se detecta ningún sonido en la grabación, por favor revisa tu micrófono" + }, + "conversation": { + "name": "Nombre", + "engine": "Motor de IA", + "baseUrl": "Endpoint de solicitud", + "baseUrlDescription": "déjalo en blanco si no tienes uno", + "configuration": "Configuración", + "model": "Modelo de IA", + "type": "Tipo de IA", + "roleDefinition": "Definición de rol", + "roleDefinitionPlaceholder": "Describe el rol de la IA", + "temperature": "Temperatura", + "temperatureDescription": "A mayor temperatura, más creativo será el resultado", + "maxTokens": "Tokens máximos", + "maxTokensDescription": "El número máximo de tokens a generar", + "presencePenalty": "Penalización de presencia", + "presencePenaltyDescription": "Valores positivos penalizan nuevos tokens si ya aparecen en el texto, aumentando la probabilidad de que el modelo hable de nuevos temas.", + "frequencyPenalty": "Penalización de frecuencia", + "frequencyPenaltyDescription": "Valores positivos penalizan nuevos tokens según su frecuencia existente, disminuyendo la probabilidad de que el modelo repita la misma línea.", + "historyBufferSize": "Tamaño del búfer de historial", + "historyBufferSizeDescription": "El número de mensajes del historial a incluir en el contexto", + "numberOfChoices": "Número de opciones", + "numberOfChoicesDescription": "El número de resultados a generar", + "ttsEngine": "Motor TTS", + "ttsModel": "Modelo TTS", + "ttsVoice": "Voz TTS", + "ttsLanguage": "Idioma TTS", + "ttsBaseUrl": "URL base de TTS", + "ttsBaseUrlDescription": "déjalo en blanco si no tienes uno", + "notFound": "Conversación no encontrada", + "contentRequired": "Contenido requerido", + "failedToGenerateResponse": "Error al generar respuesta, por favor intenta de nuevo", + "modelIsRequired": "Se requiere un modelo", + "ttsConfigurationsIsRequired": "Se requieren configuraciones de TTS", + "ttsModelIsRequired": "Se requiere un modelo de TTS", + "ttsEngineIsRequired": "Se requiere un motor de TTS" + }, + "pronunciationAssessment": { + "pronunciationScore": "Puntuación de Pronunciación", + "fluencyScore": "Puntuación de Fluidez", + "completenessScore": "Puntuación de Completitud", + "accuracyScore": "Puntuación de Precisión", + "prosodyScore": "Puntuación de Prosodia", + "grammarScore": "Puntuación de Gramática", + "vocabularyScore": "Puntuación de Vocabulario", + "topicScore": "Puntuación de Tema", + "errors": { + "omission": "Omisión", + "insertion": "Inserción", + "misspronunciation": "Pronunciación incorrecta", + "unexpectedBreak": "Pausa inesperada", + "missingBreak": "Falta de pausa", + "monotone": "Monótono" + }, + "explainations": { + "pronunciationScore": "La puntuación de pronunciación es la puntuación general de la pronunciación, fluidez, completitud y precisión del habla. Se calcula mediante el promedio ponderado de las cuatro puntuaciones.", + "accuracyScore": "La puntuación de precisión es la precisión del habla. Indica qué tan cercano es el habla al texto de referencia.", + "fluencyScore": "La puntuación de fluidez es la fluidez del habla. Indica qué tan fluido es el habla.", + "completenessScore": "La puntuación de completitud es la completitud del habla. Indica qué tan completo es el habla.", + "prosodyScore": "La puntuación de prosodia es la prosodia del habla. Indica qué tan natural es el habla.", + "omission": "Omisión son las palabras que están en el texto de referencia pero no en el habla.", + "insertion": "Inserción son las palabras que están en el habla pero no en el texto de referencia.", + "misspronunciation": "La pronunciación de la palabra no es correcta.", + "unexpectedBreak": "Hay una pausa entre dos palabras cuando no hay puntuación entre ellas.", + "missingBreak": "No hay pausa entre dos palabras cuando hay puntuación entre ellas.", + "monotone": "La palabra es monótona." + } + }, + "chatAgent": { + "notFound": "Agente de chat no encontrado", + "created": "Agente de chat creado", + "updated": "Agente de chat actualizado", + "deleted": "Agente de chat eliminado", + "type": "Tipo", + "typeGptDescription": "El agente GPT puede chatear contigo.", + "typeTtsDescription": "El agente TTS puede convertir texto a voz.", + "typeSttDescription": "El agente STT puede convertir voz a texto.", + "name": "Nombre", + "namePlaceholder": "Asistente Enjoy", + "nameDescription": "Te ayuda a identificar este agente de chat", + "description": "Descripción", + "descriptionPlaceholder": "Pregúntame lo que sea", + "descriptionDescription": "Describe brevemente este agente de chat (No se incluirá en el prompt)", + "prompt": "Prompt", + "promptPlaceholder": "Eres mi asistente de IA, por favor responde a todas mis preguntas.", + "promptDescription": "La definición del rol (prompt) del agente de chat" + }, + "chatMember": { + "prompt": "Prompt Adicional", + "promptDescription": "El prompt adicional se agregará al prompt del sistema del agente de chat. Es útil cuando quieres personalizar el comportamiento del agente en este chat específico.", + "promptPlaceholder": "Por ejemplo: por favor, usa oraciones simples tanto como sea posible y no respondas más de 10 oraciones a la vez.", + "gptSettings": "Configuración de LLM", + "ttsSettings": "Texto a Voz", + "moreSettings": "Más Configuraciones", + "added": "Miembro del chat agregado", + "removed": "Miembro del chat eliminado", + "notFound": "Miembro del chat no encontrado", + "atLeastOneAgent": "El chat debe tener al menos 1 agente.", + "cannotAddMemberToThisChat": "No se puede agregar un miembro a este chat", + "onlyGPTAgentCanBeAddedToThisChat": "Solo se pueden agregar agentes GPT a este chat" + }, + "chat": { + "notFound": "Chat no encontrado", + "created": "Chat creado", + "updated": "Chat actualizado", + "deleted": "Chat eliminado", + "name": "Nombre", + "language": "Idioma", + "topic": "Tema", + "members": "Miembros", + "enableChatAssistant": "Habilitar Asistente de Chat", + "enableChatAssistantDescription": "Cuando está habilitado, puedes usar SUGERIR o REFINAR para ayudarte a chatear con el agente.", + "enableAutoTts": "Habilitar TTS Automático", + "enableAutoTtsDescription": "Cuando está habilitado, todas las respuestas se convertirán a audio automáticamente.", + "generateTopic": "Generar Tema", + "sttAiServicePlaceholder": "Por favor, selecciona", + "sttAiServiceDescription": "Elige un servicio para transcribir tu voz a texto.", + "prompt": "Prompt Adicional", + "promptPlaceholder": "Por ejemplo: el chat es sobre cómo aprender inglés, por favor no te desvíes del tema.", + "promptDescription": "El prompt se agregará al prompt del sistema de todos los agentes en este chat. Es útil para personalizar el comportamiento del agente en este chat específico.", + "chatSettings": "Configuración del Chat", + "moreSettings": "Más Configuraciones", + "memberSettings": "Configuración de Miembros", + "atLeastOneAgent": "El chat debe tener al menos 1 agente.", + "onlyGPTAgentCanBeAddedToThisChat": "Solo se pueden agregar agentes GPT a este chat", + "invalidAgentType": "Tipo de agente inválido", + "invalidMembers": "Miembros inválidos" + }, + "document": { + "fileNotFound": "Archivo no encontrado {{file}}", + "fileNotSupported": "Archivo no compatible {{file}}", + "failedToCopyFile": "Error al copiar el archivo {{file}}" + } + }, + "sidebar": { + "home": "Inicio", + "chats": "Chats", + "courses": "Cursos", + "community": "Comunidad", + "audios": "Audios", + "videos": "Videos", + "stories": "Historias", + "documents": "Documentos", + "books": "Libros", + "vocabulary": "Vocabulario", + "library": "Biblioteca", + "practice": "Práctica", + "reading": "Lectura", + "aiAssistant": "Asistente de IA", + "pronunciationAssessment": "Evaluación", + "mine": "Mi Perfil", + "preferences": "Preferencias", + "profile": "Mi Perfil", + "notes": "Nota", + "help": "Ayuda", + "collapse": "Contraer" + }, + "form": { + "lengthMustBeAtLeast": "{{field}} debe tener al menos {{length}} caracteres", + "lengthMustBeLessThan": "{{field}} debe tener menos de {{length}} caracteres" + }, + "today": "hoy", + "yesterday": "ayer", + "play": "reproducir", + "pause": "pausar", + "switchPlayMode": "cambiar modo de reproducción", + "playSingleSegment": "reproducir un solo segmento", + "playAllSegments": "reproducir todos los segmentos", + "playInLoop": "reproducir en bucle", + "playNextSegment": "reproducir siguiente segmento", + "playPreviousSegment": "reproducir segmento anterior", + "playbackSpeed": "velocidad de reproducción", + "zoomIn": "acercar", + "zoomOut": "alejar", + "zoomToFit": "ajustar a la ventana", + "autoCenter": "centrado automático", + "inlineCaption": "subtítulo en línea", + "autoScroll": "desplazamiento automático", + "translate": "traducir", + "displayIpa": "mostrar AFI", + "displayNotes": "mostrar Notas", + "downloadSegment": "descargar segmento", + "detail": "detalle", + "remove": "eliminar", + "share": "compartir", + "forward": "reenviar", + "loadMore": "Cargar más", + "databaseError": "Error al conectar con la base de datos {{url}}", + "somethingWentWrong": "Algo salió mal", + "actions": "acciones", + "downloads": "descargas", + "info": "Información", + "success": "Éxito", + "warning": "Advertencia", + "error": "Error", + "errors": "Errores", + "cancel": "Cancelar", + "cancelled": "Cancelado", + "canceling": "Cancelando", + "confirm": "Confirmar", + "continue": "continuar", + "save": "Guardar", + "delete": "Eliminar", + "edit": "Editar", + "retry": "Reintentar", + "failedToLogin": "Error al iniciar sesión", + "sendCode": "Enviar código", + "codeSent": "El código ha sido enviado", + "verificationCode": "Código de verificación", + "email": "Correo electrónico", + "phoneNumber": "Número de teléfono", + "mixinId": "ID de Mixin", + "inputMixinId": "Ingresa tu ID de Mixin", + "scanMixinQRCodeDescription": "Escanea el código QR de Mixin en la ventana emergente", + "createMixinAccount": "Crear cuenta de Mixin", + "scanToLogin": "Escanear para iniciar sesión", + "youCanAlsoLoginWith": "También puedes iniciar sesión con", + "downloadTranscript": "Descargar transcripción", + "downloadTranscriptFromCloud": "Descargar transcripción desde la nube", + "transcribe": "Transcribir", + "stillTranscribing": "La IA todavía está trabajando en la transcripción. Por favor, espera un momento.", + "unableToSetLibraryPath": "No se pudo establecer la ruta de la biblioteca a {{path}}", + "nthStep": "Paso {{current}}/{{totalSteps}}", + "open": "Abrir", + "select": "Seleccionar", + "libraryPath": "Ruta de la Biblioteca", + "login": "Iniciar sesión", + "reLogin": "Volver a iniciar sesión", + "loginBeforeYouStart": "Inicia sesión antes de comenzar", + "loginSuccess": "Inicio de sesión exitoso", + "whereYourResourcesAreStored": "Donde se almacenan tus recursos", + "AIModel": "Modelo de IA", + "chooseAIModelToDownload": "Elige el modelo de IA para descargar", + "ffmpegCheck": "Verificación de FFmpeg", + "check": "Verificar", + "ffmpegCommandIsWorking": "El comando FFmpeg está funcionando", + "ffmpegCommandIsNotWorking": "El comando FFmpeg no está funcionando", + "scan": "Escanear", + "checkIfFfmpegIsInstalled": "Verificar si FFmpeg está instalado", + "ffmpegFoundAt": "FFmpeg encontrado en {{path}}", + "ffmpegNotFound": "FFmpeg no encontrado", + "ffmpegInstallSteps": "Pasos de instalación de FFmpeg", + "Install": "Instalar", + "runTheFollowingCommandInTerminal": "Ejecuta el siguiente comando en la terminal", + "click": "Haz clic", + "willAutomaticallyFindFFmpeg": "Enjoy encontrará FFmpeg automáticamente", + "tryingToFindValidFFmepgInTheseDirectories": "Intentando encontrar un FFmpeg válido en estos directorios: {{dirs}}", + "invalidFfmpegPath": "Ruta de FFmpeg inválida", + "usingInstalledFFmpeg": "Usando FFmpeg instalado", + "usingDownloadedFFmpeg": "Usando FFmpeg descargado", + "downloadFfmpeg": "Descargar FFmpeg", + "youAreReadyToGo": "¡Estás listo para empezar!", + "welcomeBack": "¡Bienvenido de nuevo! {{name}}", + "print": "Imprimir", + "download": "Descargar", + "downloadingFile": "Descargando {{file}}", + "downloading": "Descargando", + "importing": "Importando", + "downloadedSuccessfully": "Descargado con éxito", + "downloadFailed": "Descarga fallida", + "chooseAIModelDependingOnYourHardware": "Elige un modelo de IA dependiendo de tu hardware.", + "areYouSureToDownload": "¿Estás seguro de que quieres descargar {{name}}?", + "yourModelsWillBeDownloadedTo": "Tus modelos se descargarán en {{path}}", + "logout": "Cerrar sesión", + "logoutConfirmation": "¿Estás seguro de que quieres cerrar sesión?", + "reset": "Restablecer", + "resetAll": "Restablecer todo", + "resetAllConfirmation": "Se eliminarán todos tus datos personales, ¿estás seguro?", + "resetSettings": "Restablecer configuración", + "resetSettingsConfirmation": "Se restablecerá toda tu configuración, ¿estás seguro? La biblioteca no se verá afectada.", + "settingsReseted": "Configuración restablecida", + "proxySettings": "Configuración de proxy", + "proxyConfigUpdated": "Configuración de proxy actualizada", + "apiSettings": "Configuración de API", + "apiUrlUpdated": "URL de API actualizada", + "logoutAndRemoveAllPersonalData": "Cerrar sesión y eliminar todos los datos personales", + "logoutAndRemoveAllPersonalSettings": "Cerrar sesión y eliminar toda la configuración personal", + "hotkeys": "Atajos de teclado", + "player": "Reproductor", + "quit": "Salir", + "quitApp": "Salir de la APP", + "quitAppDescription": "¿Estás seguro de que quieres salir de la aplicación Enjoy?", + "openPreferences": "Abrir preferencias", + "openCopilot": "Abrir copiloto", + "playOrPause": "Reproducir o pausar", + "playOrPauseRecording": "Reproducir o pausar grabación", + "startOrStopRecording": "iniciar o detener grabación", + "appearance": "Apariencia", + "theme": "Tema", + "light": "Claro", + "dark": "Oscuro", + "system": "Sistema", + "about": "Acerca de", + "currentVersion": "Versión actual", + "checkUpdate": "Buscar actualizaciones", + "checkingLatestVersion": "Buscando la última versión", + "updateDownloaded": "Se ha descargado una nueva versión. Reinicia la aplicación para aplicar las actualizaciones.", + "restart": "Reiniciar", + "later": "Más tarde", + "userGuide": "Guía de usuario", + "feedback": "Comentarios", + "alreadyLatestVersion": "Ya es la última versión", + "initializingApp": "Inicializando APP", + "welcomeTo": "Bienvenido a", + "startToUse": "Comenzar", + "goBack": "Regresar", + "nextStep": "Siguiente", + "previousStep": "Anterior", + "finish": "Finalizar", + "notReadyYet": "Aún no está listo", + "commingSoon": "Próximamente", + "pageNotFound": "Página no encontrada", + "audio": "audio", + "video": "video", + "text": "texto", + "addResource": "agregar recurso", + "addResourceFromUrlOrLocal": "agregar recurso desde url o local", + "resourceAdded": "Recurso agregado", + "resourcesAdded": "{{fulfilled}} recursos agregados, {{rejected}} no se pudieron agregar. {{reasons}}", + "resourcesAddInBatchLimitError": "Solo puedes agregar {{limit}} recursos a la vez", + "editResource": "editar recurso", + "deleteResource": "eliminar recurso", + "deleteResourceConfirmation": "¿Estás seguro de eliminar {{name}}?", + "transcribeMediaConfirmation": "Se eliminará la transcripción anterior. ¿Estás seguro de transcribir {{name}}?", + "localFile": "archivo local", + "resourcesYouAddedRecently": "recursos que agregaste recientemente", + "recentlyAdded": "agregado recientemente", + "recommended": "recomendado", + "resourcesRecommendedByEnjoy": "recursos recomendados por Enjoy Bot", + "fromCommunity": "de la comunidad", + "videoResources": "recursos de video", + "audioResources": "recursos de audio", + "seeMore": "ver más", + "resourcesFromTheCommunity": "recursos de la comunidad", + "noResourcesFound": "no se encontraron recursos", + "allResources": "todos los recursos", + "playbackRate": "velocidad de reproducción", + "transcription": "transcripción", + "transcript": "transcripción", + "regenerate": "regenerar", + "holdAndSpeak": "Mantén presionado y habla", + "releaseToStop": "Suelta para detener", + "deleteRecording": "eliminar grabación", + "deleteRecordingConfirmation": "¿Estás seguro de eliminar esta grabación?", + "myRecordings": "grabaciones", + "noRecordingForThisSegmentYet": "Aún no hay grabaciones para este segmento. Presiona {{key}} para comenzar a grabar.", + "lastYear": "el año pasado", + "less": "menos", + "more": "más", + "total": "total", + "totalRecordingsIn": "{{total}} grabaciones en {{duration}}", + "totalRecordings": "{{total}} grabaciones", + "totalDuration": "duración {{duration}}", + "recordingActivity": "actividad de grabación", + "recordingDetail": "Detalle de la grabación", + "noRecordingActivities": "sin actividades de grabación", + "basicSettingsShort": "Básico", + "basicSettings": "Configuración básica", + "accountSettingsShort": "Cuenta", + "accountSettings": "Configuración de la cuenta", + "advancedSettingsShort": "Avanzado", + "advancedSettings": "Configuración avanzada", + "advanced": "Avanzado", + "language": "Idioma", + "nativeLanguage": "Idioma nativo", + "learningLanguage": "Idioma de aprendizaje", + "editEmail": "Editar correo electrónico", + "editUserName": "Editar nombre de usuario", + "userName": "Nombre de usuario", + "profileUpdated": "Perfil actualizado", + "balance": "Saldo", + "deposit": "Depositar", + "depositDescription": "Deposita en tu cuenta", + "depositDisclaimer": "Después del depósito, tu saldo solo se utiliza para servicios de pago. No es reembolsable.", + "pay": "Pagar", + "pleaseCompletePaymentInPopupWindow": "Por favor, completa el pago en la ventana emergente", + "processor": "Procesador", + "amount": "Monto", + "date": "Fecha", + "status": "Estado", + "recentDeposits": "Depósitos recientes", + "notAvailableYet": "Aún no disponible", + "whisperModel": "Modelo Whisper", + "sttAiService": "Servicio de IA STT", + "local": "Local", + "localSpeechToTextDescription": "Usa el modelo local de Whisper para transcribir. Es gratis.", + "enjoyAzure": "Azure AI (por Enjoy)", + "enjoyAzureSpeechToTextDescription": "Usa Azure AI Speech para transcribir. Es un servicio de pago de Enjoy.", + "enjoyCloudflare": "Cloudflare AI (por Enjoy)", + "enjoyCloudflareSpeechToTextDescription": "Usa Cloudflare AI Worker para transcribir. Está en beta y es gratis por ahora.", + "openaiSpeechToTextDescription": "Usa OpenAI para transcribir usando tu propia clave.", + "uploadSpeechToTextDescription": "Sube un archivo de transcripción o ingresa el texto de la transcripción para alinear.", + "checkingWhisper": "Verificando el estado de Whisper", + "pleaseDownloadWhisperModelFirst": "Por favor, descarga primero el modelo de Whisper", + "whisperIsWorkingGood": "Whisper está funcionando bien", + "whisperIsNotWorking": "Whisper no está funcionando", + "whisperTranscribeFailed": "La transcripción con Whisper falló. Tal vez tu máquina no es compatible. Por favor, usa otro servicio STT. {{error}}", + "openaiTranscribeFailed": "La transcripción con OpenAI falló. {{error}}", + "cloudflareTranscribeFailed": "La transcripción con Cloudflare falló. {{error}}", + "azureTranscribeFailed": "La transcripción con Azure falló. {{error}}", + "transcribeFailed": "La transcripción falló.", + "checkingWhisperModel": "Verificando el modelo de Whisper", + "whisperModelIsWorkingGood": "El modelo de Whisper está funcionando bien", + "whisperModelIsNotWorking": "El modelo de Whisper no está funcionando", + "relaunchIsNeededAfterChanged": "Es necesario reiniciar después del cambio", + "reloadIsNeededAfterChanged": "Es necesario recargar después del cambio", + "defaultAiEngine": "Motor de IA predeterminado", + "aiEngine": "Motor de IA", + "aiEngineNotSupported": "Motor de IA no compatible", + "defaultAiModel": "Modelo de IA predeterminado", + "lookupAiModel": "Búsqueda de IA", + "translateAiModel": "Traducción de IA", + "analyzeAiModel": "Análisis de IA", + "extractStoryAiModel": "Extracción de vocabulario por IA", + "openAiEngineTips": "Usa OpenAI con tu propia clave como motor de IA predeterminado.", + "enjoyAiEngineTips": "Usa EnjoyAI como motor de IA predeterminado. Es un servicio de pago.", + "openaiKeySaved": "Clave de OpenAI guardada", + "openaiConfigSaved": "Configuración de OpenAI guardada", + "openaiKeyRequired": "Se requiere clave de OpenAI, por favor configúrala en los ajustes", + "baseUrl": "URL base", + "customModels": "Modelos personalizados", + "customModelsDescription": "Personaliza tus modelos LLM. Separa con comas.", + "model": "modelo", + "key": "clave", + "leaveEmptyToUseDefault": "Dejar en blanco para usar el predeterminado", + "openaiBaseUrlDescription": "Cualquier endpoint que soporte la API de estilo OpenAI.", + "newConversation": "Nueva conversación", + "selectAiRole": "Seleccionar rol de IA", + "chooseFromPresetGpts": "Elegir de GPTs preestablecidos", + "custom": "Personalizado", + "startConversation": "Iniciar conversación", + "editConversation": "Editar conversación", + "deleteConversation": "Eliminar conversación", + "deleteConversationConfirmation": "¿Estás seguro de eliminar esta conversación, incluyendo todos los mensajes?", + "noConversationsYet": "Aún no hay conversaciones", + "conversationMigrated": "La conversación ha sido migrada a Chat", + "conversationDeleted": "Conversación eliminada", + "translation": "Traducción", + "pressEnterToSend": "Presiona enter para enviar", + "send": "Enviar", + "sending": "Enviando", + "sent": "Enviado", + "copy": "Copiar", + "cut": "cortar", + "paste": "pegar", + "selectAll": "Seleccionar todo", + "copyText": "Copiar texto", + "resend": "Reenviar", + "anotherRequestIsPending": "Hay otra solicitud pendiente", + "selectScenario": "Seleccionar escenario", + "selectAiEngine": "Seleccionar motor de IA", + "selectAiModel": "Seleccionar modelo de IA", + "selectTtsEngine": "Seleccionar motor de TTS", + "selectTtsModel": "Seleccionar modelo de TTS", + "selectTtsVoice": "Seleccionar voz de TTS", + "selectTtsLanguage": "Seleccionar idioma de TTS", + "pleaseSelectTtsVoice": "Por favor, selecciona una voz de TTS", + "youNeedToSetupApiKeyBeforeUsingOpenAI": "Necesitas configurar la clave de API antes de usar OpenAI", + "ensureYouHaveOllamaRunningLocallyAndHasAtLeastOneModel": "Asegúrate de tener Ollama ejecutándose localmente y de tener al menos un modelo", + "creatingSpeech": "Creando voz", + "textToSpeech": "Convertir texto a voz", + "shadowing": "Shadowing", + "shadowingAudio": "Audio para shadowing", + "shadowingVideo": "Video para shadowing", + "shadowingExercise": "Ejercicio de shadowing", + "addingResource": "Agregando recurso", + "pronunciationAssessment": "Evaluación de pronunciación", + "score": "puntuación", + "inputUrlToStartReading": "Ingresa una URL para comenzar a leer", + "read": "leer", + "addStory": "agregar historia", + "context": "contexto", + "keyVocabulary": "vocabulario clave", + "addedStories": "historias agregadas", + "addedAudios": "audios agregados", + "addedVideos": "videos agregados", + "addedDocuments": "documentos agregados", + "document": "documento", + "frontSide": "lado frontal", + "backSide": "lado trasero", + "aiExtractVocabulary": "Extraer vocabulario con IA", + "toggleReadable": "Alternar legible", + "extracting": "Extrayendo", + "extractionFailed": "Extracción fallida", + "extractedSuccessfully": "Extraído con éxito", + "lookup": "Buscar", + "reLookup": "Volver a buscar", + "lookupAll": "Buscar todo", + "lookingUp": "Buscando", + "pending": "Pendiente", + "thereAreLookupsProcessing": "Hay {{count}} búsquedas en proceso", + "thereAreLookupsPending": "Hay {{count}} búsquedas en espera", + "lookupFailed": "Búsqueda fallida", + "lookedUpSuccessfully": "Búsqueda exitosa", + "noRecordsFound": "No se encontraron registros", + "pleaseTryLater": "Por favor, inténtalo más tarde", + "author": "autor", + "narrator": "narrador", + "downloadSample": "Descargar muestra", + "buy": "Comprar", + "from": "de", + "presenter": "presentador", + "downloadAudio": "Descargar audio", + "downloadVideo": "Descargar video", + "recordTooShort": "Grabación demasiado corta", + "rankings": "Clasificaciones", + "dayRankings": "Clasificaciones del día", + "weekRankings": "Clasificaciones de la semana", + "monthRankings": "Clasificaciones del mes", + "allRankings": "Clasificaciones de todos los tiempos", + "noOneHasRecordedYet": "Nadie ha grabado todavía", + "activities": "Actividades", + "square": "Plaza", + "noOneSharedYet": "Nadie ha compartido todavía", + "sharedSuccessfully": "Compartido con éxito", + "shareFailed": "Error al compartir", + "shareAudio": "Compartir audio", + "sharedAudio": "Compartió un recurso de audio", + "areYouSureToShareThisAudioToCommunity": "¿Estás seguro de compartir este audio en la Plaza de la comunidad?", + "shareVideo": "Compartir video", + "sharedVideo": "Compartió un recurso de video", + "cannotShareLocalVideo": "No se puede compartir un video local", + "areYouSureToShareThisVideoToCommunity": "¿Estás seguro de compartir este video en la Plaza de la comunidad?", + "sharePrompt": "Compartir prompt", + "sharedPrompt": "Compartió un prompt", + "areYouSureToShareThisPromptToCommunity": "¿Estás seguro de compartir este prompt en la Plaza de la comunidad?", + "shareRecording": "Compartir grabación", + "sharedRecording": "Compartió una grabación", + "areYouSureToShareThisRecordingToCommunity": "¿Estás seguro de compartir esta grabación en la Plaza de la comunidad?", + "shareStory": "Compartir historia", + "sharedStory": "Compartió una historia", + "areYouSureToShareThisStoryToCommunity": "¿Estás seguro de compartir esta historia en la Plaza de la comunidad?", + "shareGpt": "Compartir GPT", + "sharedGpt": "Compartió un GPT", + "areYouSureToShareThisGptToCommunity": "¿Estás seguro de compartir este GPT en la Plaza de la comunidad?", + "shareNote": "Compartir nota", + "sharedNote": "Compartió una nota", + "areYouSureToShareThisNoteToCommunity": "¿Estás seguro de compartir esta nota en la Plaza de la comunidad?", + "saveAiAssistant": "Guardar este asistente de IA", + "addToLibary": "Agregar a la biblioteca", + "areYouSureToAddThisVideoToYourLibrary": "¿Estás seguro de agregar este video a la biblioteca?", + "areYouSureToAddThisAudioToYourLibrary": "¿Estás seguro de agregar este audio a la biblioteca?", + "audioAlreadyAddedToLibrary": "El audio ya ha sido agregado a la biblioteca", + "videoAlreadyAddedToLibrary": "El video ya ha sido agregado a la biblioteca", + "audioSuccessfullyAddedToLibrary": "Audio agregado a la biblioteca con éxito", + "videoSuccessfullyAddedToLibrary": "Video agregado a la biblioteca con éxito", + "sendToAIAssistant": "Enviar al asistente de IA", + "removeSharing": "Eliminar de compartidos", + "areYouSureToRemoveThisSharing": "¿Estás seguro de eliminar esto de compartidos?", + "removeSharingSuccessfully": "Eliminado de compartidos con éxito", + "removeSharingFailed": "Error al eliminar de compartidos", + "generatingIpa": "Generando AFI", + "generatedIpaSuccessfully": "AFI generado con éxito", + "generatingIpaFailed": "Error al generar AFI: {{error}}", + "translating": "Traduciendo", + "translatedSuccessfully": "Traducido con éxito", + "translationFailed": "Error en la traducción: {{error}}", + "allRecordingsSynced": "Todas las grabaciones sincronizadas", + "syncingRecordings": "Sincronizando {{count}} grabaciones", + "failedToSyncRecordings": "Error al sincronizar grabaciones", + "downloadUrlNotResolved": "URL de descarga no resuelta", + "resolvingDownloadUrl": "Resolviendo URL de descarga", + "waveformIsDecoded": "Forma de onda decodificada", + "decodingWaveform": "Decodificando forma de onda", + "failedToDecodeWaveform": "Error al decodificar la forma de onda", + "transcribedSuccessfully": "Transcrito con éxito", + "transcribing": "Transcribiendo", + "notTranscribedYet": "Aún no transcrito", + "preparingAudio": "Preparando audio", + "preparingVideo": "Preparando video", + "itMayTakeAWhileToPrepareForTheFirstLoad": "Puede tardar un poco en prepararse para la primera carga. Por favor, sé paciente.", + "loadingTranscription": "Cargando transcripción", + "cannotFindMicrophone": "No se puede encontrar el micrófono", + "savingRecording": "Guardando grabación", + "recordingSaved": "Grabación guardada", + "failedToSaveRecording": "Error al guardar la grabación", + "speechNotCreatedYet": "Voz aún no creada", + "goToConversation": "Ir a la conversación", + "mediaInfo": "Información del medio", + "editRegion": "editar región", + "dragRegionBorderToEdit": "Arrastra el borde de la región para editar", + "startRecording": "iniciar grabación", + "stopRecording": "detener grabación", + "playRecording": "reproducir grabación", + "clickAnyWordToSelect": "Haz clic en cualquier palabra para seleccionar. Presiona shift para seleccionar varias palabras.", + "currentRegionIsBeingEdited": "La región actual se está editando", + "compare": "comparar", + "selectRegion": "seleccionar región", + "autoGroup": "agrupar automáticamente", + "captionTabs": { + "selected": "Seleccionado", + "translation": "Traducción", + "analysis": "Análisis", + "note": "Nota" + }, + "translateSentence": "traducir oración", + "reTranslate": "volver a traducir", + "analyzeSentence": "analizar oración", + "useAIAssistantToAnalyze": "Usar asistente de IA para analizar", + "reAnalyze": "volver a analizar", + "aiDictionary": "Diccionario de IA", + "aiLookup": "Búsqueda de IA", + "aiTranslate": "Traducción de IA", + "cambridgeDictionary": "Diccionario de Cambridge", + "customizeShortcuts": "Personalizar atajos", + "customizeShortcutsTip": "Haz clic para cambiar", + "customizeShortcutsRecordingTip": "Grabando nuevo atajo", + "customizeShortcutsInvalidToast": "Tu atajo debe tener como máximo dos modificadores (Ctrl, Alt, Shift o Meta) y una tecla regular, como 'Ctrl+C'.", + "customizeShortcutsConflictToast": "{{input}} entra en conflicto con el atajo existente {{otherHotkeyName}}.", + "customizeShortcutsUpdated": "Cambios guardados", + "following": "siguiendo", + "followers": "seguidores", + "allUsers": "todos los usuarios", + "allTypes": "todos los tipos", + "recordingType": "Grabación", + "mediumType": "Audio/Video", + "storyType": "Historia", + "promptType": "Prompt", + "gptType": "GPT", + "noteType": "Nota", + "follow": "seguir", + "unfollow": "dejar de seguir", + "noFollowersYet": "Aún no hay seguidores", + "notFollowingAnyoneYet": "Aún no sigues a nadie", + "startToNote": "Empezar a tomar notas", + "newNote": "Nueva nota", + "writeNoteHere": "Escribe tu nota aquí", + "deleteNote": "Eliminar nota", + "areYouSureToDeleteThisNote": "¿Estás seguro de eliminar esta nota?", + "notesCount": "{{count}} notas", + "source": "origen", + "noNotesYet": "Aún no hay notas", + "editTranscription": "Editar transcripción", + "saveTranscription": "Guardar transcripción", + "areYouSureToSaveTranscription": "Se realizará una alineación forzada entre el audio y tu transcripción editada. ¿Estás seguro de continuar?", + "summarize": "Resumir", + "noResultsFound": "No se encontraron resultados", + "readThrough": "Leer completo", + "selectCrypto": "Seleccionar cripto", + "newAssessment": "Nueva Evaluación", + "record": "Grabar", + "upload": "Subir", + "noFileOrRecording": "No se ha subido ningún archivo o grabación", + "referenceText": "Texto de referencia", + "inputReferenceTextOrLeaveItBlank": "Ingresa el texto de referencia o déjalo en blanco", + "assessing": "Evaluando", + "assessedSuccessfully": "Evaluado con éxito", + "optinal": "Opcional", + "uploadTranscriptFile": "Subir archivo de transcripción", + "uploadTranscriptFileDescription": "Formatos soportados: txt/srt/vtt.", + "pleaseUploadTranscriptFile": "Por favor, sube un archivo de transcripción", + "onlyTextFileIsSupported": "Solo se admiten archivos de texto", + "isolateVoice": "Aislar voz (Experimental)", + "isolateVoiceDescription": "Aísla la voz de cualquier música o ambiente de fondo. Más preciso pero más lento", + "sortBy": "Ordenar por", + "createdAtDesc": "Fecha de creación desc", + "createdAtAsc": "Fecha de creación asc", + "updatedAtDesc": "Fecha de actualización desc", + "updatedAtAsc": "Fecha de actualización asc", + "scoreDesc": "Puntuación desc", + "scoreAsc": "Puntuación asc", + "recordingsDurationDesc": "Duración de las grabaciones", + "recordingsCountDesc": "Conteo de grabaciones", + "all": "Todos", + "allLanguages": "Todos los idiomas", + "search": "Buscar", + "noData": "Sin datos", + "selectedFiles": "Archivos seleccionados", + "moreOptions": "Más opciones", + "lessOptions": "Menos opciones", + "previousChapter": "Anterior", + "nextChapter": "Siguiente", + "examples": "Ejemplos", + "howToFinishChapter": "Por favor, haz shadowing de los ejemplos y graba tu voz para terminar el capítulo.", + "continueLearning": "Continuar aprendiendo", + "enrollNow": "Inscribirse ahora", + "enrollments": "Inscripciones", + "noLikesYet": "Aún no hay 'me gusta'", + "apiConnectTime": "Tiempo de conexión de la API ({{apiUrl}})", + "storageConnectTime": "Tiempo de conexión del almacenamiento", + "ipInfo": "Información de IP", + "platformInfo": "Información de la plataforma", + "networkState": "Estado de la red", + "connectError": "Error de conexión", + "refresh": "actualizar", + "deleteChat": "Eliminar chat", + "deleteChatConfirmation": "¿Estás seguro de eliminar este chat?", + "deleteChatAgent": "Eliminar agente", + "deleteChatAgentConfirmation": "¿Estás seguro de eliminar este agente de chat?", + "deleteMessage": "Eliminar mensaje", + "deleteMessageConfirmation": "¿Estás seguro de eliminar este mensaje?", + "refine": "Refinar", + "suggestion": "Sugerencia", + "editChat": "Editar chat", + "newChat": "Nuevo chat", + "addChat": "Agregar chat", + "recents": "Recientes", + "agentsManagement": "Gestión de agentes", + "newAgent": "Nuevo agente", + "editAgent": "Editar agente", + "addToChat": "Agregar al chat", + "introduction": "Introducción", + "introduceYourself": "Preséntate", + "prompt": "Prompt", + "extraPromptForChat": "Prompt adicional para este chat", + "promptPreview": "Vista previa del prompt", + "noChatSelected": "Ningún chat seleccionado", + "reRecord": "Volver a grabar", + "quickStart": "Inicio rápido", + "itsYourTurn": "Es tu turno. Por favor, empieza a hablar.", + "displayContent": "Mostrar contenido", + "hideContent": "Ocultar contenido", + "audioInput": "Entrada de audio", + "textInput": "Entrada de texto", + "increasePlaybackRate": "Aumentar velocidad de reproducción", + "descreasePlaybackRate": "Disminuir velocidad de reproducción", + "usage": "Uso", + "cannotFindSourceFile": "No se puede encontrar el archivo de origen", + "cleanUp": "Limpiar", + "cleanUpConfirmation": "¿Estás seguro de eliminar los recursos sin archivo de origen?", + "cleanedUpSuccessfully": "Limpiado con éxito", + "libraryDescriptions": { + "library": "Contiene todos los archivos creados por Enjoy mientras usas la aplicación.", + "database": "Registra todas tus actividades y configuraciones.", + "settings": "Guarda todas tus configuraciones.", + "audios": "Contiene todos los archivos de audio que agregaste.", + "videos": "Contiene todos los archivos de video que agregaste.", + "segments": "Contiene todos los segmentos en los que haces grabaciones o notas.", + "speeches": "Contiene todas las voces creadas por la IA de TTS.", + "recordings": "Contiene todas las grabaciones que hiciste.", + "whisper": "Contiene todos los modelos de Whisper que descargaste.", + "waveforms": "Contiene todas las formas de onda decodificadas de audios/videos. Son para caché. Es seguro eliminarlos.", + "logs": "Contiene algunos registros útiles para la depuración.", + "cache": "Contiene archivos en caché. Se limpiarán automáticamente." + }, + "recordingIsTooLongToAssess": "La grabación es demasiado larga para ser evaluada. La duración máxima es de 60 segundos.", + "recorderConfig": "Configuración de la grabadora", + "recorderConfigSaved": "Configuración de la grabadora guardada", + "recorderConfigDescription": "Configuraciones avanzadas para la grabadora", + "lookupOnMouseOver": "Buscar al hacer clic", + "selectDictFile": "Seleccionar archivos de diccionario (extensión .mdx y .mdd)", + "dictFiles": "Archivos de diccionario", + "dictFileRequired": "No se encontró el archivo de diccionario (la extensión es mdx).", + "dictFileExist": "{{name}} ya ha sido importado", + "dictFileAddSuccess": "Se agregó {{name}} con éxito", + "dictFileRemoveSuccess": "Se eliminó {{name}} con éxito", + "dictFileSetDefaultSuccess": "Se estableció con éxito como diccionario predeterminado", + "dictFileRemoveDefaultSuccess": "Operación exitosa", + "dictionaries": "Diccionarios", + "import": "Importar", + "default": "Predeterminado", + "setDefault": "Establecer como predeterminado", + "dictSettings": "Configuración de diccionarios", + "dictSettingsShort": "Diccionarios", + "importDict": "Importar diccionario", + "failedToImportDict": "Error al importar el diccionario: {{error}}", + "dictRemoved": "Diccionario eliminado con éxito", + "interrupted": "Interrumpido", + "paused": "Pausado", + "completedAndChecking": "Completado (Verificando)", + "decompressing": "Descomprimiendo", + "resume": "Reanudar", + "dictEmpty": "No hay diccionarios importados", + "removing": "Eliminando", + "removeDictTitle": "¿Estás seguro de que quieres eliminar este diccionario? ", + "removeDictDescription": "Se eliminará el archivo del diccionario de tu computadora local y tendrás que volver a descargarlo la próxima vez.", + "downloadingDict": "Descargando", + "removeDefault": "Cancelar predeterminado", + "selectAdaptionDictTitle": "Seleccionar diccionario adaptado", + "selectMdictFileOrDirTitle": "Seleccionar archivos de diccionario (.mdx y opcional .mdd) o carpeta", + "dictImportSlowTip": "Verificando... (Puede tardar más si el archivo del diccionario es grande.)", + "importAdaptionDict": "Importar el diccionario adaptado", + "adaptionDictTip": "Los diccionarios adaptados tienen una mejor usabilidad.", + "howToDownload": "¿Cómo descargar?", + "selectDir": "Seleccionar carpeta", + "selectFile": "Seleccionar archivo", + "importMdictFile": "Importar el archivo de diccionario original", + "mdictFileTip": "Importa directamente archivos en formato .mdx y .mdd (los archivos .mdx son obligatorios, los .mdd son opcionales y puede haber varios).", + "authorizationExpired": "Tu autorización ha expirado. Por favor, inicia sesión de nuevo.", + "selectUser": "Seleccionar usuario", + "export": "Exportar", + "exportRecordings": "Exportar grabación", + "exportRecordingsConfirmation": "Selecciona la puntuación más alta de las grabaciones de cada segmento para exportar como un solo archivo.", + "exportRecordingsSuccess": "Grabaciones exportadas con éxito", + "upgrade": "Actualizar", + "upgradeNotice": "Enjoy App v{{version}} está disponible. Por favor, actualiza a la última versión.", + "downloadedTranscriptionFromCloud": "Transcripción descargada desde la nube", + "gpt": { + "engine": "Motor de IA", + "model": "Modelo de IA", + "temperature": "Temperatura", + "temperatureDescription": "Cuanto mayor sea el valor, más creativo será el texto generado; de lo contrario, será más estable", + "maxCompletionTokens": "Tokens máximos", + "maxCompletionTokensDescription": "El número máximo de tokens consumidos por interacción, -1 significa sin límite", + "presencePenalty": "Penalización de presencia", + "presencePenaltyDescription": "-2.0 ~ 2.0, cuanto mayor sea el valor, más probable es que se expanda a nuevos temas", + "frequencyPenalty": "Penalización de frecuencia", + "frequencyPenaltyDescription": "-2.0 ~ 2.0, cuanto mayor sea el valor, más probable es que se reduzca la repetición", + "historyBufferSize": "Tamaño del búfer de historial", + "historyBufferSizeDescription": "Cuanto más contexto, más coherente será el texto generado y más recursos se consumirán", + "numberOfChoices": "Número de opciones", + "numberOfChoicesDescription": "Cuando es mayor que 1, generará múltiples versiones de texto cada vez" + }, + "tts": { + "engine": "Motor TTS", + "model": "Modelo TTS", + "voice": "Voz TTS", + "language": "Idioma TTS" + }, + "chatMemberUpdated": "Miembro del chat actualizado con éxito", + "chatMemberRemoved": "Miembro del chat eliminado con éxito", + "chatMemberAdded": "Miembro del chat agregado con éxito", + "confirmBeforeSending": "Puedes volver a grabar, modificar el contenido del texto y hacer clic en enviar después de confirmar que no hay errores.", + "chatNoContentYet": "El chat aún no tiene contenido.", + "removeChatMember": "Eliminar miembro", + "removeChatMemberConfirmation": "¿Estás seguro de eliminar a este miembro del chat?", + "addMember": "Agregar miembro", + "added": "Agregado", + "migrateToChat": "Migrar a chat", + "memberJoined": "{{name}} se ha unido al chat.", + "memberLeft": "{{name}} ha abandonado el chat.", + "templates": "plantillas", + "askAgentToReply": "Pedir a @{{name}} que responda", + "inviteAgentInChatAndReply": "Invitar a @{{name}} al chat y responder", + "chatInputPlaceholder": "Enter para enviar, Shift+Enter para nueva línea, @ para mencionar agentes", + "replyOnlyWhenMentioned": "Responder solo cuando se mencione", + "replyOnlyWhenMentionedDescription": "Solo responderá cuando menciones a este agente usando @", + "bulkDelete": "Eliminación masiva", + "deleteRecordingsWithoutAssessment": "Eliminar grabaciones sin evaluación", + "deleteRecordingsWithScoreLessThan90": "Eliminar grabaciones con puntuación inferior a 90", + "deleteRecordingsWithScoreLessThan80": "Eliminar grabaciones con puntuación inferior a 80", + "deleteAllRecordings": "Eliminar todas las grabaciones", + "noRecordingsToDelete": "No hay grabaciones para eliminar", + "recordingsDeletedSuccessfully": "Grabaciones eliminadas con éxito", + "deleting": "Eliminando", + "bulkDeleteRecordingsConfirmation": "Esta operación no se puede deshacer. Tus estadísticas de grabaciones no cambiarán, pero los archivos de grabación se eliminarán permanentemente.", + "diskUsage": "Uso del disco", + "diskUsageDescription": "El uso del disco de la aplicación Enjoy.", + "releaseDiskSpace": "Liberar", + "bulkDeleteRecordings": "Eliminar grabaciones", + "bulkDeleteAborted": "Eliminación masiva abortada", + "notFound": "No encontrado", + "saved": "Guardado", + "deleteDocumentConfirm": "¿Estás seguro de eliminar este documento?", + "documentDeletedSuccessfully": "Documento eliminado con éxito", + "autoTranslate": "Traducción automática", + "autoNextSpeech": "Voz automática", + "failedToLoadLink": "Error al cargar el enlace", + "refreshSpeech": "Actualizar voz", + "locateParagraph": "Localizar párrafo", + "close": "Cerrar", + "config": "Configuración", + "temperature": "Temperatura", + "encoderProvider": "Proveedor de codificador", + "decoderProvider": "Proveedor de decodificador", + "enableGPU": "Habilitar GPU", + "openPackagesDir": "Abrir directorio de modelos", + "whisperModelDescription": "El modelo se descargará la primera vez que se use.", + "whisperEngineDescription": "OpenAI Whisper con inferencia realizada a través del tiempo de ejecución de ONNX.", + "whisperCppEngineDescription": "Port de C++ de la arquitectura Whisper.", + "ttsService": "Servicio de texto a voz", + "openaiTtsServiceDescription": "Usa el servicio OpenAI TTS con tu propia clave.", + "enjoyTtsServiceDescription": "Usa el servicio TTS proporcionado por Enjoy. Se admite OpenAI o Azure.", + "compressMediaBeforeAdding": "Comprimir medios antes de agregar", + "keepOriginalMedia": "Conservar medios originales", + "myPronunciation": "Mi pronunciación", + "originalPronunciation": "Pronunciación original", + "reloadApp": "recargar aplicación", + "exit": "Salir", + "layout": "Diseño", + "horizontal": "Horizontal", + "vertical": "Vertical", + "copied": "Copiado", + "copyFullText": "Copiar texto completo", + "checkingForUpdate": "Buscando actualización", + "updateAvailable": "Actualización disponible", + "quitAndInstall": "Salir e instalar", + "pleaseSelect": "Por favor, selecciona" +} diff --git a/enjoy/src/renderer/i18n.ts b/enjoy/src/renderer/i18n.ts index 57053cb6..ef93ea04 100644 --- a/enjoy/src/renderer/i18n.ts +++ b/enjoy/src/renderer/i18n.ts @@ -1,6 +1,7 @@ import * as i18n from "i18next"; import { initReactI18next } from "react-i18next"; import en from "@/i18n/en.json"; +import es from "@/i18n/es.json"; import zh_CN from "@/i18n/zh-CN.json"; // the translations @@ -10,6 +11,9 @@ const resources = { en: { translation: en, }, + es: { + translation: es, + }, "zh-CN": { translation: zh_CN, }, @@ -20,7 +24,7 @@ i18n .init({ resources, lng: "en", - supportedLngs: ["en", "zh-CN"], + supportedLngs: ["en", "es", "zh-CN"], fallbackLng: "en", interpolation: { escapeValue: false, // react already safes from xss