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": "태그 생성 공급자",
"title": "AI 구성",
"updateFailed": "AI 설정 업데이트 실패",
"updateSuccess": "AI 설정이 성공적으로 업데이트되었습니다"
"updateSuccess": "AI 설정이 성공적으로 업데이트되었습니다",
"bestValue": "최고 가성비",
"bestQuality": "최고 품질",
"providerOllamaOption": "🦙 Ollama (Local & Free)",
"providerOpenAIOption": "🤖 OpenAI (GPT-5, GPT-4)",
"providerCustomOption": "🔧 Custom OpenAI-Compatible",
"saved": "(저장됨)"
},
"aiTest": {
"description": "태그 생성 및 의미 검색 임베딩을 위한 AI 공급자 테스트",
@@ -153,34 +159,36 @@
"analyzing": "AI 분석 중...",
"assistant": "AI 도우미",
"autoLabels": {
"analyzing": "라벨 제안을 위해 메모 분석 중...",
"create": "생성",
"createNewLabel": "Create this new label and add it",
"created": "{count} labels created successfully",
"creating": "라벨 생성 중...",
"description": "I've detected recurring themes in \"{notebookName}\" ({totalNotes} notes). Create labels for them?",
"error": "Failed to fetch label suggestions",
"new": "(새로운)",
"noLabelsSelected": "No labels selected",
"note": "note",
"notes": "notes",
"title": "라벨 제안",
"typeContent": "Type content to get label suggestions..."
"error": "라벨 제안을 가져오지 못했습니다",
"noLabelsSelected": "선택된 라벨이 없습니다",
"created": "{count}개의 라벨이 생성되었습니다",
"analyzing": "노트를 분석 중...",
"title": "라벨 제안",
"description": "\"{notebookName}\"({totalNotes}개의 노트)에서 반복되는 테마를 감지했습니다. 라벨을 만들까요?",
"note": "",
"notes": "",
"typeContent": "라벨 제안을 받으려면 내용을 입력하세요...",
"createNewLabel": "이 새 라벨을 만들고 추가",
"new": "(새)",
"create": "만들기",
"creating": "라벨 만드는 중...",
"notesCount": "{count}개",
"typeForSuggestions": "라벨 제안을 받으려면 내용을 입력하세요..."
},
"batchOrganization": {
"analyzing": "Analyzing your notes...",
"apply": "Apply",
"applyFailed": "Failed to apply organization plan",
"applying": "Applying...",
"description": "AI가 메모를 분석하여 노트북으로 정리할 것을 제안합니다.",
"error": "Failed to create organization plan",
"noNotebooks": "No notebooks available. Create notebooks first to organize your notes.",
"noNotesSelected": "No notes selected",
"noSuggestions": "AI could not find a good way to organize these notes.",
"selectAllIn": "Select all notes in {notebook}",
"selectNote": "Select note: {title}",
"success": "{count} notes moved successfully",
"title": "Organize with AI"
"title": "AI로 정리",
"description": "AI가 노트를 분석하고 노트북으로 정리할 방법을 제안합니다.",
"analyzing": "노트를 분석 중...",
"noNotebooks": "사용 가능한 노트북이 없습니다. 먼저 노트북을 만드세요.",
"noSuggestions": "AI가 이 노트들을 정리할 좋은 방법을 찾지 못했습니다.",
"apply": "적용",
"applying": "적용 중...",
"success": "{count}개의 노트를 성공적으로 이동했습니다",
"error": "정리 계획 생성 실패",
"noNotesSelected": "선택된 노트가 없습니다",
"applyFailed": "정리 계획 적용 실패",
"selectAllIn": "{notebook}의 모든 노트 선택",
"selectNote": "노트 선택: {title}"
},
"clarify": "명확히 하기",
"clickToAddTag": "클릭하여 이 태그 추가",