diff --git a/src/assets/locale/es/common.json b/src/assets/locale/es/common.json
new file mode 100644
index 0000000..e316a0b
--- /dev/null
+++ b/src/assets/locale/es/common.json
@@ -0,0 +1,88 @@
+{
+ "pageAssist": "Page Assist",
+ "selectAModel": "Selecione un Modelo",
+ "save": "Guardar",
+ "saved": "Guardado",
+ "cancel": "Cancelar",
+ "retry": "Reintentar",
+ "share": {
+ "tooltip": {
+ "share": "Compartir"
+ },
+ "modal": {
+ "title": "Compartir enlace para chat"
+ },
+ "form": {
+ "defaultValue": {
+ "name": "Anónimo",
+ "title": "Chat sin título"
+ },
+ "title": {
+ "label": "Título del Chat",
+ "placeholder": "Ingresar el título del Chat",
+ "required": "El título del Chat es obligatorio"
+ },
+ "name": {
+ "label": "Tu nombre",
+ "placeholder": "Ingresar tu nombre",
+ "required": "Tu nombre es obligatorio"
+ },
+ "btn": {
+ "save": "Generar enlace",
+ "saving": "Generando enlace..."
+ }
+ },
+ "notification": {
+ "successGenerate": "Enlace copiado al Clipboard",
+ "failGenerate": "Fallo al generar el enlace"
+ }
+ },
+ "copyToClipboard": "Copiar al clipboard",
+ "webSearch": "Buscando en la web",
+ "regenerate": "Regenerar",
+ "edit": "Editar",
+ "saveAndSubmit": "Guardar y Enviar",
+ "editMessage": {
+ "placeholder": "Ingresar un mensaje..."
+ },
+ "submit": "Enviar",
+ "noData": "Sin datos",
+ "noHistory": "Chat sin histórico",
+ "chatWithCurrentPage": "Conversar con la página actual",
+ "beta": "Beta",
+ "tts": "Leer en voz alta",
+ "currentChatModelSettings": "Configuraciones del Modelo de Chat Actual",
+ "modelSettings": {
+ "label": "Configuraciones del Modelo",
+ "description": "Definir las opciones del modelo globalmente para todos los chats",
+ "form": {
+ "keepAlive": {
+ "label": "Mantener vivo",
+ "help": "controlar cuanto tiempo el modelo permanecera cargado en la memoria luego de su utilización (por defecto: 5m)",
+ "placeholder": "Ingresar duración para mantenerlo vivo (ej: 5m, 10m, 1h)"
+ },
+ "temperature": {
+ "label": "Temperatura",
+ "placeholder": "Ingresar valor de la Temperatura (ej: 0.7, 1.0)"
+ },
+ "numCtx": {
+ "label": "Cantidad de contextos",
+ "placeholder": "Ingresar el valor de tamaño de la ventana de contexto (por defecto: 2048)"
+ },
+ "seed": {
+ "label": "Semilla",
+ "placeholder": "Ingresar el valor de la semilla (ej: 1234)",
+ "help": "Reproductibilidad de la salida del modelo"
+ },
+ "topK": {
+ "label": "Top K",
+ "placeholder": "Ingresar el valor de Top K (ej: 40, 100)"
+ },
+ "topP": {
+ "label": "Top P",
+ "placeholder": "Ingresar el valor de Top P (ej: 0.9, 0.95)"
+ }
+ },
+ "advanced": "Más Configuraciones del Modelo"
+ }
+}
diff --git a/src/assets/locale/es/knowledge.json b/src/assets/locale/es/knowledge.json
new file mode 100644
index 0000000..86ddbf3
--- /dev/null
+++ b/src/assets/locale/es/knowledge.json
@@ -0,0 +1,42 @@
+{
+ "addBtn": "Agregar Nuevo Conocimiento",
+ "columns": {
+ "title": "Título",
+ "status": "Estado",
+ "embeddings": "Modelo de Embedding",
+ "createdAt": "Creado",
+ "action": "Acciones"
+ },
+ "expandedColumns": {
+ "name": "Nombre"
+ },
+ "tooltip": {
+ "delete": "Borrar"
+ },
+ "confirm": {
+ "delete": "¿Esta seguro que desea borrar este conocimiento?"
+ },
+ "deleteSuccess": "Conocimiento borrado",
+ "status": {
+ "pending": "Pendiente",
+ "finished": "Finalizado",
+ "processing": "Procesando"
+ },
+ "addKnowledge": "Agregar Conocimiento",
+ "form": {
+ "title": {
+ "label": "Título del Conocimiento",
+ "placeholder": "Ingresar un título de conocimiento",
+ "required": "El Título de conocimiento es obligatorio"
+ },
+ "uploadFile": {
+ "label": "Subir un Archivo",
+ "uploadText": "Arraste y suelte un archivo aquí o haga click para subirlo",
+ "uploadHint": "Tipos de archivo soportados: .pdf, .csv, .txt, .md, .docx",
+ "required": "El archivo es obligatorio"
+ },
+ "submit": "Enviar",
+ "success": "Conocimiento agregado exitosamente"
+ },
+ "noEmbeddingModel": "Por favor, agregue un modelo de embedding de la página de configuraciones de RAG primero"
+}
diff --git a/src/assets/locale/es/option.json b/src/assets/locale/es/option.json
new file mode 100644
index 0000000..3c48761
--- /dev/null
+++ b/src/assets/locale/es/option.json
@@ -0,0 +1,12 @@
+{
+ "newChat": "Nuevo Chat",
+ "selectAPrompt": "Selecione un Prompt",
+ "githubRepository": "Repositorio de GitHub",
+ "settings": "Configuraciones",
+ "sidebarTitle": "Histórico del Chat",
+ "error": "Error",
+ "somethingWentWrong": "Hubo un error",
+ "validationSelectModel": "Selecione un modelo para continuar",
+ "deleteHistoryConfirmation": "¿Esta seguro que quiere borrar éste histórico?",
+ "editHistoryTitle": "Ingrese un nuevo título"
+}
diff --git a/src/assets/locale/es/playground.json b/src/assets/locale/es/playground.json
new file mode 100644
index 0000000..afc3771
--- /dev/null
+++ b/src/assets/locale/es/playground.json
@@ -0,0 +1,29 @@
+{
+ "ollamaState": {
+ "searching": "Buscando tu Ollama 🦙",
+ "running": "Ollama está funcionando 🦙",
+ "notRunning": "No fue posible conectar con Ollama 🦙",
+ "connectionError": "Hubo un error de conexión. Por favor, consulte la documentación para solucionar el problema."
+ },
+ "formError": {
+ "noModel": "Por favor, selecione un modelo",
+ "noEmbeddingModel": "Por favor, defina un modelo de embedding para la página de configuraciones > RAG"
+ },
+ "form": {
+ "textarea": {
+ "placeholder": "Ingrese un mensaje..."
+ },
+ "webSearch": {
+ "on": "On",
+ "off": "Off"
+ }
+ },
+ "tooltip": {
+ "searchInternet": "Buscar en Internet",
+ "speechToText": "Voz a Texto",
+ "uploadImage": "Subir Imagén",
+ "stopStreaming": "Parar Transmisión",
+ "knowledge": "Conocimiento"
+ },
+ "sendWhenEnter": "Enviar cuando presione Enter"
+}
diff --git a/src/assets/locale/es/settings.json b/src/assets/locale/es/settings.json
new file mode 100644
index 0000000..e8c46cb
--- /dev/null
+++ b/src/assets/locale/es/settings.json
@@ -0,0 +1,289 @@
+{
+ "generalSettings": {
+ "title": "Configuraciones Generales",
+ "settings": {
+ "heading": "Configuraciones de la Interfaz Web",
+ "speechRecognitionLang": {
+ "label": "Idioma de Reconocimiento de Voz",
+ "placeholder": "Selecione un idioma"
+ },
+ "language": {
+ "label": "Idioma",
+ "placeholder": "Selecione un idioma"
+ },
+ "darkMode": {
+ "label": "Cambiar Tema",
+ "options": {
+ "light": "Claro",
+ "dark": "Oscuro"
+ }
+ },
+ "copilotResumeLastChat": {
+ "label": "Retomar el último chat al abrir el Panel Lateral (Copilot)"
+ },
+ "hideCurrentChatModelSettings": {
+ "label": "Ocultar Configuraciones del Modelo de Chat Actual"
+ }
+ },
+ "webSearch": {
+ "heading": "Manejo de la busqueda Web",
+ "searchMode": {
+ "label": "Realizar busquedas Simples en Internet"
+ },
+ "provider": {
+ "label": "Motor de Busqueda",
+ "placeholder": "Selecione un motor de busqueda"
+ },
+ "totalSearchResults": {
+ "label": "Resultados totales de la busqueda",
+ "placeholder": "Ingresar el total de Resultados de la busqueda"
+ }
+ },
+ "system": {
+ "heading": "Configuraciones del Sistema",
+ "deleteChatHistory": {
+ "label": "Borrar Histórico del Chat",
+ "button": "Borrar",
+ "confirm": "¿Esta seguro que desea borrar su histórico del chat? Esta acción no podra ser desecha."
+ },
+ "export": {
+ "label": "Exportar Histórico del Chat, Base de Conocimiento y Prompts",
+ "button": "Exportar Datos",
+ "success": "Exportación exitosa"
+ },
+ "import": {
+ "label": "Importar Histórico del Chat, Base de Conocimiento y Prompts",
+ "button": "Importar Datos",
+ "success": "Importación existosa",
+ "error": "Error de importación"
+ }
+ },
+ "tts": {
+ "heading": "Configuraciones de Text-to-speech",
+ "ttsEnabled": {
+ "label": "Habilitar Texto-a-Voz"
+ },
+ "ttsProvider": {
+ "label": "Proveedor de Text-to-speech",
+ "placeholder": "Selecione un proveedor"
+ },
+ "ttsVoice": {
+ "label": "Voz de Text-to-speech",
+ "placeholder": "Selecione una voz"
+ },
+ "ssmlEnabled": {
+ "label": "Habilitar SSML (Speech Synthesis Markup Language)"
+ }
+ }
+ },
+ "manageModels": {
+ "title": "Administar de Modelos",
+ "addBtn": "Agregar Nuevo Modelo",
+ "columns": {
+ "name": "Nombre",
+ "digest": "Resumen",
+ "modifiedAt": "Modificado",
+ "size": "Tamaño",
+ "actions": "Acciones"
+ },
+ "expandedColumns": {
+ "parentModel": "Modelo Padre",
+ "format": "Formato",
+ "family": "Familia",
+ "parameterSize": "Tamaño de Parametros",
+ "quantizationLevel": "Nível de Quantización"
+ },
+ "tooltip": {
+ "delete": "Borrar Modelo",
+ "repull": "Traer nuevamente el Modelo"
+ },
+ "confirm": {
+ "delete": "¿Esta seguro que desea borrar este modelos?",
+ "repull": "¿Esta seguro que desea traer nuevamente este modelo?"
+ },
+ "modal": {
+ "title": "Traer Nuevo Modelo",
+ "placeholder": "Ingresar el nombre del modelo",
+ "pull": "Traer Modelo"
+ },
+ "notification": {
+ "pullModel": "Trayendo Modelo",
+ "pullModelDescription": "Trayendo modelo {{modelName}}. Para más detalles, verifique el ícono de la extensión.",
+ "success": "Exito",
+ "error": "Error",
+ "successDescription": "Modelo traido exitosamente",
+ "successDeleteDescription": "Modelo borrado exitosamente",
+ "someError": "Hubo un error. Intente nuevamente más tarde"
+ }
+ },
+ "managePrompts": {
+ "title": "Administrar de Prompts",
+ "addBtn": "Agregar Nuevo Prompt",
+ "option1": "Normal",
+ "option2": "RAG",
+ "questionPrompt": "Prompt de Pregunta",
+ "columns": {
+ "title": "Título",
+ "prompt": "Prompt",
+ "type": "Tipo de Prompt",
+ "actions": "Acciones"
+ },
+ "systemPrompt": "Prompt del Sistema",
+ "quickPrompt": "Prompt Rápido",
+ "tooltip": {
+ "delete": "Borrar Prompt",
+ "edit": "Editar Prompt"
+ },
+ "confirm": {
+ "delete": "¿Esta seguro que desea borrar este prompt? Esta acción no tiene vuelta a atrás."
+ },
+ "modal": {
+ "addTitle": "Agregar Nuevo Prompt",
+ "editTitle": "Editar Prompt"
+ },
+ "form": {
+ "title": {
+ "label": "Título",
+ "placeholder": "Mi Prompt genial",
+ "required": "Por favor, ingrese un título"
+ },
+ "prompt": {
+ "label": "Prompt",
+ "placeholder": "Ingrese un prompt",
+ "required": "Por favor, ingrese un prompt",
+ "help": "Puede usar {key} como variable en su prompt."
+ },
+ "isSystem": {
+ "label": "Es un Prompt del Sistema"
+ },
+ "btnSave": {
+ "saving": "Agregando un Prompt...",
+ "save": "Agregar Prompt"
+ },
+ "btnEdit": {
+ "saving": "Actualizando Prompt...",
+ "save": "Actualizar Prompt"
+ }
+ },
+ "notification": {
+ "addSuccess": "Prompt Agregado",
+ "addSuccessDesc": "Prompt agregado exitosamente",
+ "error": "Error",
+ "someError": "Hubo un error. Intente nuevamente más tarde",
+ "updatedSuccess": "Prompt Actualizado",
+ "updatedSuccessDesc": "Prompt actualizado exitosamente",
+ "deletedSuccess": "Prompt Borrado",
+ "deletedSuccessDesc": "Prompt borrado exitosamente"
+ }
+ },
+ "manageShare": {
+ "title": "Administrar los recursos compartidos",
+ "heading": "Configurar URL de Página Compartida",
+ "form": {
+ "url": {
+ "label": "URL de Página compartida",
+ "placeholder": "Ingresar URL de Página compartida",
+ "required": "Por favor, ingrese URL de Página compartida",
+ "help": "Por motivos de privacidad, podes hacer self-host de la página compartida y proveer una URL aqui. Aprende más."
+ }
+ },
+ "webshare": {
+ "heading": "Compartir una Web",
+ "columns": {
+ "title": "Título",
+ "url": "URL",
+ "actions": "Acciones"
+ },
+ "tooltip": {
+ "delete": "Borrar lo compartido"
+ },
+ "confirm": {
+ "delete": "¿Esta seguro de desear borrar esta web compartida? Esta acción no tiene vuelta a atrás."
+ },
+ "label": "Administrar páginas compartidas",
+ "description": "Habilitar o deshabilitar el recurso de páginas compartidas"
+ },
+ "notification": {
+ "pageShareSuccess": "URL compartida actualizada exitosamente",
+ "someError": "Hubo un error. Intente nuevamente más tarde",
+ "webShareDeleteSuccess": "Web compartida borrada exitosamente com sucesso"
+ }
+ },
+ "ollamaSettings": {
+ "title": "Configuraciones de Ollama",
+ "heading": "Configurar Ollama",
+ "settings": {
+ "ollamaUrl": {
+ "label": "URL de Ollama",
+ "placeholder": "Ingrese la URL de Ollama"
+ },
+ "advanced": {
+ "label": "Configuración avanzada de URL de Ollama",
+ "urlRewriteEnabled": {
+ "label": "Habilitar o Deshabilitar URL Personalizada"
+ },
+ "rewriteUrl": {
+ "label": "URL Personalizada",
+ "placeholder": "Ingresar URL Personalizada"
+ },
+ "help": "Si tenes problemas de conexión con Ollama en Page Assist, podes configurar una URL de personalizada. Para saber más sobre la configuración, click aqui."
+ }
+ }
+ },
+ "manageSearch": {
+ "title": "Administrar Busqueda Web",
+ "heading": "Configurar Busqueda Web"
+ },
+ "about": {
+ "title": "Sobre",
+ "heading": "Sobre",
+ "chromeVersion": "Versión de Page Assist",
+ "ollamaVersion": "Versión de Ollama",
+ "support": "Podes apoyar el proyecto Page Assist haciendo donaciones o patrocinarnos a través de las seguientes plataformas:",
+ "koFi": "Apoyar en Ko-fi",
+ "githubSponsor": "Patrocinarnos en GitHub",
+ "githubRepo": "Repositorio de GitHub"
+ },
+ "manageKnowledge": {
+ "title": "Administrar Conocimiento",
+ "heading": "Configurar Bases de Conocimiento"
+ },
+ "rag": {
+ "title": "Configuraciones de RAG",
+ "ragSettings": {
+ "label": "Configuraciones de RAG",
+ "model": {
+ "label": "Modelo de embeddings",
+ "required": "Por favor, selecione un modelo",
+ "help": "Es recomendable usar modelos de embeddings como `nomic-embed-text`.",
+ "placeholder": "Selecione un modelo"
+ },
+ "chunkSize": {
+ "label": "Tamaño del Chunk",
+ "placeholder": "Ingresar el tamaño del chunk",
+ "required": "Por favor, ingrese el tamaño del chunk"
+ },
+ "chunkOverlap": {
+ "label": "Solapamiento del Chunk",
+ "placeholder": "Ingrese el solapamiento del chunk",
+ "required": "Por favor, ingresar el solapamiento del chunk"
+ }
+ },
+ "prompt": {
+ "label": "Configurar el Prompt del RAG",
+ "option1": "Normal",
+ "option2": "Web",
+ "alert": "Es obsoleto configurar aquí el prompt del sistema. Por favor, use la sección de Administrar Prompts para agregar o editar prompts. Esta sección se quitará en una versión futura",
+ "systemPrompt": "Prompt del Sistema",
+ "systemPromptPlaceholder": "Ingresar el prompt del sistema",
+ "webSearchPrompt": "Prompt de la busqueda Web",
+ "webSearchPromptHelp": "No borre `{search_results}` del prompt.",
+ "webSearchPromptError": "Por favor, ingresar un prompt de busqueda web",
+ "webSearchPromptPlaceholder": "Ingrese un prompt de busqueda web",
+ "webSearchFollowUpPrompt": "Prompt de Seguimiento de busqueda Web",
+ "webSearchFollowUpPromptHelp": "No borre `{chat_history}` y `{question}` del prompt.",
+ "webSearchFollowUpPromptError": "Por favor, ingrese el prompt de seguimiento de la busqueda web",
+ "webSearchFollowUpPromptPlaceholder": "Su prompt de seguimiento de busqueda web"
+ }
+ }
+}
diff --git a/src/assets/locale/es/sidepanel.json b/src/assets/locale/es/sidepanel.json
new file mode 100644
index 0000000..214c8b6
--- /dev/null
+++ b/src/assets/locale/es/sidepanel.json
@@ -0,0 +1,7 @@
+{
+ "tooltip": {
+ "embed": "Puede demorar algunos minutos para incluir la página. Por favor, aguarde...",
+ "clear": "Borrar el histórico de conversación",
+ "history": "Histórico de la conversación"
+ }
+}
diff --git a/src/i18n/index.ts b/src/i18n/index.ts
index 525ada9..6c5915f 100644
--- a/src/i18n/index.ts
+++ b/src/i18n/index.ts
@@ -8,6 +8,7 @@ import { ml } from "./lang/ml";
import { zh } from "./lang/zh";
import { ja } from "./lang/ja";
import { it } from "./lang/it";
+import { es } from "./lang/es";
import LanguageDetector from 'i18next-browser-languagedetector';
i18n
@@ -16,6 +17,7 @@ i18n
.init({
resources: {
en: en,
+ es: es,
fr: fr,
"it": it,
ml: ml,
@@ -31,4 +33,4 @@ i18n
lng: localStorage.getItem("i18nextLng") || "en",
})
-export default i18n;
\ No newline at end of file
+export default i18n;
diff --git a/src/i18n/lang/es.ts b/src/i18n/lang/es.ts
new file mode 100644
index 0000000..c666286
--- /dev/null
+++ b/src/i18n/lang/es.ts
@@ -0,0 +1,15 @@
+import option from "@/assets/locale/es/option.json";
+import playground from "@/assets/locale/es/playground.json";
+import common from "@/assets/locale/es/common.json";
+import sidepanel from "@/assets/locale/es/sidepanel.json";
+import settings from "@/assets/locale/es/settings.json";
+import knowledge from "@/assets/locale/es/knowledge.json";
+
+export const es = {
+ option,
+ playground,
+ common,
+ sidepanel,
+ settings,
+ knowledge
+}
diff --git a/src/i18n/support-language.ts b/src/i18n/support-language.ts
index 89b0d97..7cd56a0 100644
--- a/src/i18n/support-language.ts
+++ b/src/i18n/support-language.ts
@@ -4,6 +4,10 @@ export const supportLanguage = [
label: "English",
value: "en"
},
+ {
+ label: "Español",
+ value: "es"
+ },
{
label: "Français",
value: "fr"
@@ -19,7 +23,7 @@ export const supportLanguage = [
{
label: "Português (Brasil)",
value: "pt-BR"
- },
+ },
{
label: "മലയാളം",
value: "ml"
@@ -32,4 +36,4 @@ export const supportLanguage = [
label: "日本語",
value: "ja-JP"
}
-]
\ No newline at end of file
+]