fix: i18n system overhaul and sidebar UI bugs

- Fix LanguageProvider: add RTL support (ar/fa), translation caching,
  prevent blank flash during load, browser language detection
- Fix detect-user-language: extend whitelist from 5 to all 15 languages
- Remove hardcoded initialLanguage="fr" from auth layout
- Complete fr.json translation (all sections translated from English)
- Add missing admin.ai keys to all 13 non-English locales
- Translate ai.autoLabels, ai.batchOrganization, memoryEcho sections
  for all locales
- Remove duplicate top-level autoLabels/batchOrganization from en.json
- Fix notebook creation: replace window.location.reload() with
  createNotebookOptimistic + router.refresh()
- Fix notebook name truncation in sidebar with min-w-0
- Remove redundant router.refresh() after note creation in page.tsx

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Sepehr Ramezani
2026-03-29 22:14:05 +02:00
parent 8bf56cd8cd
commit 8daf50ac3f
27 changed files with 1210 additions and 936 deletions

View File

@@ -63,7 +63,13 @@
"tagsGenerationProvider": "Proveedor de generación de etiquetas",
"title": "Configuración de IA",
"updateFailed": "Error al actualizar la configuración de IA",
"updateSuccess": "Configuración de IA actualizada correctamente"
"updateSuccess": "Configuración de IA actualizada correctamente",
"bestValue": "Mejor relación calidad/precio",
"bestQuality": "Mejor calidad",
"providerOllamaOption": "🦙 Ollama (Local & Free)",
"providerOpenAIOption": "🤖 OpenAI (GPT-5, GPT-4)",
"providerCustomOption": "🔧 Custom OpenAI-Compatible",
"saved": "(Guardado)"
},
"aiTest": {
"description": "Prueba tus proveedores de IA para generación de etiquetas y embeddings de búsqueda semántica",
@@ -153,35 +159,36 @@
"analyzing": "IA analizando...",
"assistant": "Asistente IA",
"autoLabels": {
"analyzing": "Analizando tus notas para sugerencias de etiquetas...",
"create": "Crear",
"createNewLabel": "Crear nueva etiqueta",
"created": "{count} labels created successfully",
"creating": "Creando etiquetas...",
"description": "I've detected recurring themes in \"{notebookName}\" ({totalNotes} notes). Create labels for them?",
"error": "Failed to fetch label suggestions",
"error": "Error al obtener sugerencias de etiquetas",
"noLabelsSelected": "No se seleccionaron etiquetas",
"created": "{count} etiquetas creadas exitosamente",
"analyzing": "Analizando tus notas...",
"title": "Nuevas sugerencias de etiquetas",
"description": "He detectado temas recurrentes en \"{notebookName}\" ({totalNotes} notas). ¿Crear etiquetas para ellos?",
"note": "nota",
"notes": "notas",
"typeContent": "Escribe contenido para obtener sugerencias de etiquetas...",
"createNewLabel": "Crear esta nueva etiqueta y agregarla",
"new": "(nuevo)",
"noLabelsSelected": "No labels selected",
"note": "note",
"notes": "notes",
"title": "Sugerencias de etiquetas",
"typeContent": "Type content to get label suggestions...",
"typeForSuggestions": "Escribe para obtener sugerencias"
"create": "Crear",
"creating": "Creando etiquetas...",
"notesCount": "{count} notas",
"typeForSuggestions": "Escribe contenido para obtener sugerencias de etiquetas..."
},
"batchOrganization": {
"analyzing": "Analyzing your notes...",
"apply": "Apply",
"applyFailed": "Error al aplicar",
"applying": "Applying...",
"description": "La IA analizará tus notas y sugerirá organizarlas en libretas.",
"error": "Error al organizar",
"noNotebooks": "No notebooks available. Create notebooks first to organize your notes.",
"noNotesSelected": "Sin notas seleccionadas",
"noSuggestions": "AI could not find a good way to organize these notes.",
"selectAllIn": "Seleccionar todo en",
"selectNote": "Seleccionar nota",
"success": "Organización completada",
"title": "Organizar con IA"
"title": "Organizar con IA",
"description": "La IA analizará tus notas y sugerirá organizarlas en cuadernos.",
"analyzing": "Analizando tus notas...",
"noNotebooks": "No hay cuadernos disponibles. Crea cuadernos primero para organizar tus notas.",
"noSuggestions": "La IA no pudo encontrar una buena manera de organizar estas notas.",
"apply": "Aplicar",
"applying": "Aplicando...",
"success": "{count} notas movidas exitosamente",
"error": "Error al crear el plan de organización",
"noNotesSelected": "No se seleccionaron notas",
"applyFailed": "Error al aplicar el plan de organización",
"selectAllIn": "Seleccionar todas las notas en {notebook}",
"selectNote": "Seleccionar nota: {title}"
},
"clarify": "Aclarar",
"clickToAddTag": "Haz clic para agregar esta etiqueta",