Skip to content

Commit efc9ae0

Browse files
dgarcia18danigarfe
andauthored
Add spanish translation (#64)
* Spanish translation Signed-off-by: danigarfe <danigarfe@gmail.com> * Small fix Signed-off-by: dgarcia18 <danigarfenet@gmail.com> --------- Signed-off-by: danigarfe <danigarfe@gmail.com> Signed-off-by: dgarcia18 <danigarfenet@gmail.com> Co-authored-by: danigarfe <danigarfe@gmail.com>
1 parent fd9eeab commit efc9ae0

4 files changed

Lines changed: 303 additions & 0 deletions

File tree

src/components/Setting.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3173,6 +3173,7 @@ function Setting({ open, onClose }: SettingProps) {
31733173
<SelectContent>
31743174
<SelectItem value="en-US">English</SelectItem>
31753175
<SelectItem value="zh-CN">简体中文</SelectItem>
3176+
<SelectItem value="es-ES">Español</SelectItem>
31763177
</SelectContent>
31773178
</Select>
31783179
</FormControl>

src/constants/locales.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
export default {
22
"en-US": "English",
33
"zh-CN": "简体中文",
4+
"es-ES": "Español",
45
} as const;

src/locales/es-ES.json

Lines changed: 299 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,299 @@
1+
{
2+
"title": "Deep Research",
3+
"theme": "Tema",
4+
"openSource": "Código Abierto",
5+
"copyright": "Creado con ❤️ por el equipo de {{name}}",
6+
"searchPlaceholder": "Por favor, introduce palabras clave",
7+
"research": {
8+
"common": {
9+
"startThinking": "Empezar a Pensar",
10+
"rethinking": "Repensar",
11+
"thinkingQuestion": "Procesando Pregunta...",
12+
"writeReportPlan": "Redactar Plan de Informe",
13+
"rewriteReportPlan": "Reescribir Plan de Informe",
14+
"startResearch": "Iniciar Investigación",
15+
"restartResearch": "Reiniciar Investigación",
16+
"writeReport": "Redactar Informe",
17+
"continueResearch": "Continuar Investigación",
18+
"indepthResearch": "Investigación a Fondo",
19+
"rewriteReport": "Reescribir Informe",
20+
"sources": "Fuentes",
21+
"thinking": "Pensando...",
22+
"research": "Investigando...",
23+
"writing": "Redactando...",
24+
"newResearch": "Nueva Investigación",
25+
"addToKnowledgeBase": "Añadir a la Base de Conocimiento",
26+
"addToKnowledgeBaseTip": "Añadido a la Base de Conocimiento",
27+
"restudy": "Reestudiar",
28+
"edit": "Editar",
29+
"save": "Guardar",
30+
"copy": "Copiar",
31+
"export": "Exportar",
32+
"delete": "Eliminar"
33+
},
34+
"topic": {
35+
"title": "1. Definición de la investigación",
36+
"topicLabel": "1.1 Temas de investigación",
37+
"topicPlaceholder": "Detalla el tema o temas de la investigación..."
38+
},
39+
"feedback": {
40+
"title": "2. Formulación de preguntas",
41+
"emptyTip": "Esperando definición de la investigación...",
42+
"feedbackLabel": "Tu Respuesta (Opcional)",
43+
"feedbackPlaceholder": "Puedes responder lo que quieras...",
44+
"questions": "2.1 Preguntas del Sistema",
45+
"reportPlan": "2.2 Plan de informe de la investigación"
46+
},
47+
"searchResult": {
48+
"title": "3. Recopilación de Información",
49+
"emptyTip": "Esperando tarea de investigación...",
50+
"suggestionLabel": "Sugerencias de investigación (Opcional)",
51+
"suggestionPlaceholder": "Indica si deseas añadir nuevos temas o ajustar la dirección de la investigación...",
52+
"references": "Referencias"
53+
},
54+
"finalReport": {
55+
"title": "4. Informe Final",
56+
"emptyTip": "Esperando a que se recopile la información...",
57+
"researchedInfor": "Se investigaron {{total}} sitios web",
58+
"localResearchedInfor": "Se investigaron {{total}} recursos locales",
59+
"writingRequirementLabel": "Requisitos de redacción (opcional)",
60+
"writingRequirementPlaceholder": "Puedes indicar cualquier requisito relacionado con la redacción del informe."
61+
}
62+
},
63+
"history": {
64+
"title": "Historial",
65+
"description": "El historial de investigación se almacena localmente en el navegador y solo guarda las investigaciones completadas.",
66+
"name": "Título",
67+
"emptyTip": "No hay registros en el historial",
68+
"date": "Fecha",
69+
"actions": "Acción",
70+
"import": "Importar",
71+
"importTip": "Importar Investigación",
72+
"importSuccess": "{{title}} importado correctamente.",
73+
"importFailed": "Falló la importación de {{title}}.",
74+
"load": "Cargar",
75+
"export": "Exportar",
76+
"delete": "Eliminar",
77+
"loadMore": "Cargar Más Historial",
78+
"close": "Cerrar",
79+
"noHistory": "No hay registros en el historial"
80+
},
81+
"knowledge": {
82+
"title": "Base de Conocimiento Local",
83+
"description": "Una base de conocimiento almacenada localmente en el navegador.",
84+
"create": "Crear",
85+
"createTip": "Crear nuevo conocimiento",
86+
"emptyTip": "Sin Contenido",
87+
"name": "Nombre",
88+
"size": "Tamaño",
89+
"date": "Fecha",
90+
"action": "Acción",
91+
"add": "Añadir",
92+
"edit": "Editar",
93+
"delete": "Eliminar",
94+
"loadMore": "Cargar Más Conocimientos",
95+
"resource": "Recurso",
96+
"fileInfor": "Subido por el usuario el {{createdAt}}.",
97+
"urlInfor": "Obtenido por el usuario el {{createdAt}}.",
98+
"createInfor": "Creado por el usuario el {{createdAt}}.",
99+
"webCrawler": "Rastreador Web",
100+
"webCrawlerTip": "El rastreador web obtiene el contenido de la página de la URL especificada a través del servidor y devuelve los datos en formato Markdown.",
101+
"urlPlaceholder": "Por favor, introduce la URL...",
102+
"urlError": "Por favor, introduce una URL válida",
103+
"localCrawler": "Rastreador Local",
104+
"clear": "Limpiar",
105+
"fetch": "Obtener",
106+
"localResourceTitle": "1.2 Recursos de investigación locales (opcional)",
107+
"addResource": "Añadir Recurso",
108+
"addResourceMessage": "{{title}} ha sido añadido al recurso.",
109+
"resourceNotFound": "Recurso no encontrado",
110+
"knowledge": "Conocimiento",
111+
"localFile": "Archivo Local",
112+
"webPage": "Página Web",
113+
"editor": {
114+
"title": "Título",
115+
"titlePlaceholder": "Por favor, introduce un título...",
116+
"content": "Contenido (Markdown)",
117+
"back": "Volver",
118+
"reset": "Restablecer",
119+
"submit": "Enviar"
120+
}
121+
},
122+
"artifact": {
123+
"AIWrite": "Escritura con IA",
124+
"writingPromptTip": "Por favor, introduce las indicaciones de escritura...",
125+
"readingLevel": "Nivel de Lectura",
126+
"PhD": "Doctorado",
127+
"college": "Universitario",
128+
"teenager": "Adolescente",
129+
"child": "Infantil",
130+
"pirate": "Pirata",
131+
"adjustLength": "Ajustar Longitud",
132+
"longest": "Más largo",
133+
"long": "Largo",
134+
"shorter": "Más corto",
135+
"shortest": "El más corto",
136+
"translate": "Traducir",
137+
"continuation": "Continuación",
138+
"addEmojis": "Añadir Emojis",
139+
"send": "Enviar"
140+
},
141+
"editor": {
142+
"copy": "Copiar",
143+
"tooltip": {
144+
"bold": "Negrita",
145+
"italic": "Cursiva",
146+
"strikethrough": "Tachado",
147+
"code": "Código",
148+
"math": "Matemáticas",
149+
"link": "Enlace",
150+
"quote": "Cita"
151+
},
152+
"slash": {
153+
"heading": {
154+
"name": "Encabezado",
155+
"description": "Insertar Encabezado"
156+
},
157+
"h1": {
158+
"name": "Encabezado 1",
159+
"description": "Insertar Encabezado 1"
160+
},
161+
"h2": {
162+
"name": "Encabezado 2",
163+
"description": "Insertar Encabezado 2"
164+
},
165+
"h3": {
166+
"name": "Encabezado 3",
167+
"description": "Insertar Encabezado 3"
168+
},
169+
"h4": {
170+
"name": "Encabezado 4",
171+
"description": "Insertar Encabezado 4"
172+
},
173+
"h5": {
174+
"name": "Encabezado 5",
175+
"description": "Insertar Encabezado 5"
176+
},
177+
"h6": {
178+
"name": "Encabezado 6",
179+
"description": "Insertar Encabezado 6"
180+
},
181+
"list": {
182+
"name": "Lista",
183+
"description": "Insertar Lista"
184+
},
185+
"ul": {
186+
"name": "Lista de Viñetas",
187+
"description": "Insertar Elemento de Lista de Viñetas"
188+
},
189+
"ol": {
190+
"name": "Lista Ordenada",
191+
"description": "Insertar Elemento de Lista Ordenada"
192+
},
193+
"todo": {
194+
"name": "Lista de Tareas",
195+
"description": "Insertar Elemento de Lista de Tareas"
196+
},
197+
"advanced": {
198+
"name": "Avanzado",
199+
"description": "Comandos Avanzados"
200+
},
201+
"link": {
202+
"name": "Enlace",
203+
"description": "Insertar Enlace"
204+
},
205+
"image": {
206+
"name": "Imagen",
207+
"description": "Insertar Imagen"
208+
},
209+
"code": {
210+
"name": "Bloque de Código",
211+
"description": "Insertar Bloque de Código"
212+
},
213+
"math": {
214+
"name": "Bloque de Matemáticas",
215+
"description": "Insertar Bloque de Matemáticas"
216+
},
217+
"table": {
218+
"name": "Tabla",
219+
"description": "Insertar una tabla 3x3"
220+
},
221+
"quote": {
222+
"name": "Cita",
223+
"description": "Insertar Cita"
224+
},
225+
"horizontal": {
226+
"name": "Línea Horizontal",
227+
"description": "Insertar Línea Horizontal"
228+
}
229+
},
230+
"placeholder": "Por favor, introduce texto, o escribe \"/ \" para usar comandos"
231+
},
232+
"setting": {
233+
"title": "Configuración",
234+
"description": "Todos los ajustes se guardan en el navegador del usuario.",
235+
"model": "Modelo",
236+
"general": "General",
237+
"provider": "Proveedor de IA",
238+
"providerTip": "Proveedor de servicios de IA. Para servicios de agregación de IA como One Api y New Api, selecciona `Compatible con OpenAI`.",
239+
"openAICompatible": "Compatible con OpenAI",
240+
"free": "Gratuito",
241+
"mode": "Modo de API",
242+
"modeTip": "En modo local, todas las solicitudes se envían directamente desde el navegador. En modo proxy, todas las solicitudes se reenvían a través del servidor proxy.",
243+
"local": "Local",
244+
"proxy": "Proxy",
245+
"apiKeyLabel": "Clave API",
246+
"apiKeyPlaceholder": "Por favor, introduce la clave API del modelo",
247+
"apiUrlLabel": "URL Base de la API",
248+
"apiUrlPlaceholder": "Por favor, introduce la URL base de la API",
249+
"resourceNameLabel": "Nombre del Recurso",
250+
"resourceNamePlaceholder": "Por favor, introduce el nombre del recurso",
251+
"apiVersionLabel": "Versión de la API",
252+
"apiVersionPlaceholder": "Por favor, introduce la versión de la API",
253+
"accessPassword": "Contraseña de Acceso",
254+
"accessPasswordPlaceholder": "Por favor, introduce la contraseña de acceso al servidor",
255+
"accessPasswordTip": "La autenticación API del lado del servidor evita el uso indebido de la API por aplicaciones externas.",
256+
"thinkingModel": "Modelo de Pensamiento",
257+
"thinkingModelTip": "El modelo central utilizado en la investigación profunda, se recomienda utilizar el modelo de pensamiento.",
258+
"networkingModel": "Modelo de Tareas",
259+
"networkingModelTip": "El modelo utilizado para tareas secundarias, se recomiendan modelos de alto rendimiento.",
260+
"recommendedModels": "Modelos Recomendados",
261+
"basicModels": "Modelos Básicos",
262+
"modelListLoadingPlaceholder": "Por favor, selecciona un modelo",
263+
"modelListPlaceholder": "Por favor, introduce el nombre del modelo",
264+
"refresh": "Haz clic para Actualizar Modelo",
265+
"modelListLoading": "Cargando lista de modelos",
266+
"search": "Búsqueda",
267+
"webSearch": "Búsqueda Web",
268+
"webSearchTip": "La búsqueda web permite obtener los datos más recientes y ayuda a reducir las `alucinaciones` del modelo. Se recomienda activarla.",
269+
"enable": "Activar",
270+
"disable": "Desactivar",
271+
"searchProvider": "Proveedor de Búsqueda",
272+
"searchProviderTip": "Proveedores de servicios de búsqueda. Algunos modelos tienen capacidades de búsqueda en red incorporadas, mientras que la mayoría necesita depender de motores de búsqueda de terceros para lograr esta funcionalidad.",
273+
"modelBuiltin": "Integrado en el Modelo",
274+
"bocha": "Bocha",
275+
"parallelSearch": "Búsqueda Paralela",
276+
"parallelSearchTip": "La búsqueda paralela ayuda a acelerar el proceso de recopilación de datos, pero una tasa demasiado alta puede activar el límite de solicitudes por minuto del modelo.",
277+
"searchResults": "Resultados de Búsqueda",
278+
"searchResultsTip": "El número máximo de búsquedas web. Algunos motores de búsqueda no admiten este parámetro.",
279+
"searchApiKeyPlaceholder": "Por favor, introduce tu Clave API",
280+
"searchScope": "Ámbito de Búsqueda",
281+
"all": "Todo",
282+
"academic": "Académico",
283+
"language": "Idioma",
284+
"languageTip": "El sistema seleccionará automáticamente el idioma de la interfaz según el idioma del navegador del usuario. Al mismo tiempo, también afectará el idioma de respuesta del modelo de IA.",
285+
"system": "Sistema",
286+
"light": "Claro",
287+
"dark": "Oscuro",
288+
"debug": "Modo Depuración",
289+
"debugTip": "El modo depuración permite a los usuarios capturar errores con mayor detalle. Normalmente, no se recomienda su activación.",
290+
"resetSetting": "Restablecer Ajustes",
291+
"resetAllSettings": "Restablecer ajustes y limpiar la caché",
292+
"resetSettingWarning": "Esta operación borrará todos los datos e inicializará el proyecto.",
293+
"version": "Versión actual",
294+
"checkForUpdate": "Buscar actualizaciones",
295+
"save": "Guardar",
296+
"confirm": "Confirmar",
297+
"cancel": "Cancelar"
298+
}
299+
}

src/utils/i18n.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ const normalizeLocale = (locale: string) => {
1010
return "en-US";
1111
} else if (locale.startsWith("zh")) {
1212
return "zh-CN";
13+
} else if (locale.startsWith("es")) {
14+
return "es-ES";
1315
} else {
1416
return locale;
1517
}

0 commit comments

Comments
 (0)