feat: Complete internationalization and code cleanup

## Translation Files
- Add 11 new language files (es, de, pt, ru, zh, ja, ko, ar, hi, nl, pl)
- Add 100+ missing translation keys across all 15 languages
- New sections: notebook, pagination, ai.batchOrganization, ai.autoLabels
- Update nav section with workspace, quickAccess, myLibrary keys

## Component Updates
- Update 15+ components to use translation keys instead of hardcoded text
- Components: notebook dialogs, sidebar, header, note-input, ghost-tags, etc.
- Replace 80+ hardcoded English/French strings with t() calls
- Ensure consistent UI across all supported languages

## Code Quality
- Remove 77+ console.log statements from codebase
- Clean up API routes, components, hooks, and services
- Keep only essential error handling (no debugging logs)

## UI/UX Improvements
- Update Keep logo to yellow post-it style (from-yellow-400 to-amber-500)
- Change selection colors to #FEF3C6 (notebooks) and #EFB162 (nav items)
- Make "+" button permanently visible in notebooks section
- Fix grammar and syntax errors in multiple components

## Bug Fixes
- Fix JSON syntax errors in it.json, nl.json, pl.json, zh.json
- Fix syntax errors in notebook-suggestion-toast.tsx
- Fix syntax errors in use-auto-tagging.ts
- Fix syntax errors in paragraph-refactor.service.ts
- Fix duplicate "fusion" section in nl.json

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

Ou une version plus courte si vous préférez :

feat(i18n): Add 15 languages, remove logs, update UI components

- Create 11 new translation files (es, de, pt, ru, zh, ja, ko, ar, hi, nl, pl)
- Add 100+ translation keys: notebook, pagination, AI features
- Update 15+ components to use translations (80+ strings)
- Remove 77+ console.log statements from codebase
- Fix JSON syntax errors in 4 translation files
- Fix component syntax errors (toast, hooks, services)
- Update logo to yellow post-it style
- Change selection colors (#FEF3C6, #EFB162)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-11 22:26:13 +01:00
parent fc2c40249e
commit 7fb486c9a4
183 changed files with 48288 additions and 1290 deletions

507
keep-notes/locales/ja.json Normal file
View File

@@ -0,0 +1,507 @@
{
"auth": {
"signIn": "ログイン",
"signUp": "新規登録",
"email": "メールアドレス",
"password": "パスワード",
"name": "名前",
"emailPlaceholder": "メールアドレスを入力してください",
"passwordPlaceholder": "パスワードを入力してください",
"namePlaceholder": "お名前を入力してください",
"passwordMinChars": "パスワードを入力してください最小6文字",
"resetPassword": "パスワードをリセット",
"resetPasswordInstructions": "パスワードをリセットするためメールアドレスを入力してください",
"forgotPassword": "パスワードをお忘れですか?",
"noAccount": "アカウントをお持ちでない方",
"hasAccount": "すでにアカウントをお持ちの方",
"signInToAccount": "アカウントにログイン",
"createAccount": "アカウントを作成",
"rememberMe": "ログイン状態を保持",
"orContinueWith": "または続ける",
"checkYourEmail": "メールをご確認ください",
"resetEmailSent": "システムに登録されている場合、パスワードリセットリンクをメールでお送りしました。",
"returnToLogin": "ログインに戻る",
"forgotPasswordTitle": "パスワードを忘れた場合",
"forgotPasswordDescription": "メールアドレスを入力すると、パスワードリセット用のリンクをお送りします。",
"sending": "送信中...",
"sendResetLink": "リセットリンクを送信",
"backToLogin": "ログインに戻る"
},
"notes": {
"title": "ノート",
"newNote": "新しいノート",
"untitled": "無題",
"placeholder": "ノートを作成...",
"markdownPlaceholder": "ノートを作成...Markdown対応",
"titlePlaceholder": "タイトル",
"listItem": "リスト項目",
"addListItem": "+ リスト項目",
"newChecklist": "新しいチェックリスト",
"add": "追加",
"adding": "追加中...",
"close": "閉じる",
"confirmDelete": "このノートを削除してもよろしいですか?",
"confirmLeaveShare": "この共有ノートを退出してもよろしいですか?",
"sharedBy": "共有者",
"leaveShare": "退出",
"delete": "削除",
"archive": "アーカイブ",
"unarchive": "アーカイブを解除",
"pin": "ピン留め",
"unpin": "ピン留め解除",
"color": "色",
"changeColor": "色を変更",
"setReminder": "リマインダーを設定",
"setReminderButton": "リマインダーを設定",
"date": "日付",
"time": "時刻",
"reminderDateTimeRequired": "日付と時刻を入力してください",
"invalidDateTime": "無効な日付または時刻",
"reminderMustBeFuture": "リマインダーは未来の日時に設定してください",
"reminderSet": "リマインダーを{datetime}に設定しました",
"reminderPastError": "リマインダーは未来の日時に設定してください",
"reminderRemoved": "リマインダーを削除しました",
"addImage": "画像を追加",
"addLink": "リンクを追加",
"linkAdded": "リンクを追加しました",
"linkMetadataFailed": "リンクのメタデータを取得できませんでした",
"linkAddFailed": "リンクの追加に失敗しました",
"invalidFileType": "無効なファイルタイプ:{fileName}。JPEG、PNG、GIF、WebPのみ使用可能です。",
"fileTooLarge": "ファイルが大きすぎます:{fileName}。最大サイズは{maxSize}です。",
"uploadFailed": "{filename}のアップロードに失敗しました",
"contentOrMediaRequired": "コンテンツを入力するか、リンク/画像を追加してください",
"itemOrMediaRequired": "少なくとも1つの項目またはメディアを追加してください",
"noteCreated": "ノートを作成しました",
"noteCreateFailed": "ノートの作成に失敗しました",
"aiAssistant": "AIアシスタント",
"changeSize": "サイズを変更",
"backgroundOptions": "背景オプション",
"moreOptions": "その他のオプション",
"remindMe": "リマインド",
"markdownMode": "Markdown",
"addCollaborators": "共同編集者を追加",
"duplicate": "複製",
"share": "共有",
"showCollaborators": "共同編集者を表示",
"pinned": "ピン留め済み",
"others": "その他",
"noNotes": "ノートはありません",
"noNotesFound": "ノートが見つかりませんでした",
"createFirstNote": "最初のノートを作成",
"size": "サイズ",
"small": "小",
"medium": "中",
"large": "大",
"shareWithCollaborators": "共同編集者と共有",
"view": "ノートを表示",
"edit": "ノートを編集",
"readOnly": "読み取り専用",
"preview": "プレビュー",
"noContent": "コンテンツなし",
"takeNote": "ノートを作成...",
"takeNoteMarkdown": "ノートを作成...Markdown対応",
"addItem": "項目を追加",
"sharedReadOnly": "このノートは読み取り専用モードで共有されています",
"makeCopy": "コピーを作成",
"saving": "保存中...",
"copySuccess": "ノートをコピーしました!",
"copyFailed": "ノートのコピーに失敗しました",
"copy": "コピー",
"markdownOn": "Markdownオン",
"markdownOff": "Markdownオフ",
"undo": "元に戻す (Ctrl+Z)",
"redo": "やり直し (Ctrl+Y)"
},
"pagination": {
"previous": "←",
"pageInfo": "{currentPage} / {totalPages} ページ",
"next": "→"
},
"labels": {
"title": "ラベル",
"filter": "ラベルでフィルタ",
"manage": "ラベルを管理",
"manageTooltip": "ラベルを管理",
"changeColor": "色を変更",
"changeColorTooltip": "色を変更",
"delete": "削除",
"deleteTooltip": "ラベルを削除",
"confirmDelete": "このラベルを削除してもよろしいですか?",
"newLabelPlaceholder": "新しいラベルを作成",
"namePlaceholder": "ラベル名を入力",
"addLabel": "ラベルを追加",
"createLabel": "ラベルを作成",
"labelName": "ラベル名",
"labelColor": "ラベルの色",
"manageLabels": "ラベルを管理",
"manageLabelsDescription": "このノートのラベルを追加または削除します。ラベルをクリックして色を変更できます。",
"selectedLabels": "選択したラベル",
"allLabels": "すべてのラベル",
"clearAll": "すべてクリア",
"filterByLabel": "ラベルでフィルタ",
"tagAdded": "タグ「{tag}」を追加しました",
"showLess": "折りたたむ",
"showMore": "もっと見る",
"editLabels": "ラベルを編集",
"editLabelsDescription": "ラベルの作成、色の編集、または削除を行います。",
"noLabelsFound": "ラベルが見つかりませんでした。",
"loading": "読み込み中..."
},
"search": {
"placeholder": "検索",
"searchPlaceholder": "ノートを検索...",
"semanticInProgress": "AI検索中...",
"semanticTooltip": "AIセマンティック検索",
"searching": "検索中...",
"noResults": "結果が見つかりませんでした",
"resultsFound": "{count}件のノートが見つかりました",
"exactMatch": "完全一致",
"related": "関連"
},
"collaboration": {
"emailPlaceholder": "メールアドレスを入力",
"addCollaborator": "共同編集者を追加",
"removeCollaborator": "共同編集者を削除",
"owner": "オーナー",
"canEdit": "編集可能",
"canView": "閲覧可能",
"shareNote": "ノートを共有",
"shareWithCollaborators": "共同編集者と共有",
"addCollaboratorDescription": "メールアドレスでこのノートの共同編集者を追加します。",
"viewerDescription": "このノートへのアクセス権があります。オーナーのみが共同編集者を管理できます。",
"emailAddress": "メールアドレス",
"enterEmailAddress": "メールアドレスを入力",
"invite": "招待",
"peopleWithAccess": "アクセス権のあるユーザー",
"noCollaborators": "まだ共同編集者がいません。上で追加してください!",
"noCollaboratorsViewer": "まだ共同編集者がいません。",
"pendingInvite": "保留中の招待",
"pending": "保留中",
"remove": "削除",
"unnamedUser": "名前のないユーザー",
"done": "完了",
"willBeAdded": "{email}はノート作成時に共同編集者として追加されます",
"alreadyInList": "このメールアドレスはすでにリストにあります",
"nowHasAccess": "{name}がこのノートにアクセスできるようになりました",
"accessRevoked": "アクセス権が取り消されました",
"errorLoading": "共同編集者の読み込みエラー",
"failedToAdd": "共同編集者の追加に失敗しました",
"failedToRemove": "共同編集者の削除に失敗しました"
},
"ai": {
"analyzing": "AI分析中...",
"clickToAddTag": "クリックしてこのタグを追加",
"ignoreSuggestion": "この提案を無視",
"generatingTitles": "タイトルを生成中...",
"generateTitlesTooltip": "AIでタイトルを生成",
"poweredByAI": "AI powered",
"languageDetected": "検出された言語",
"processing": "処理中...",
"tagAdded": "タグ「{tag}」を追加しました",
"titleGenerating": "生成中...",
"titleGenerateWithAI": "AIでタイトルを生成",
"titleGenerationMinWords": "タイトルを生成するにはコンテンツが少なくとも10単語必要です現在{count}単語)",
"titleGenerationError": "タイトルの生成エラー",
"titlesGenerated": "💡 {count}個のタイトルを生成しました!",
"titleGenerationFailed": "タイトルの生成に失敗しました",
"titleApplied": "タイトルを適用しました!",
"reformulationNoText": "テキストを選択するかコンテンツを追加してください",
"reformulationSelectionTooShort": "選択が短すぎます。完全なコンテンツを使用します",
"reformulationMinWords": "テキストは少なくとも10単語必要です現在{count}単語)",
"reformulationMaxWords": "テキストは最大500単語までです",
"reformulationError": "リフォーミュレーション中のエラー",
"reformulationFailed": "テキストのリフォーミュレーションに失敗しました",
"reformulationApplied": "リフォーミュレーションされたテキストを適用しました!",
"transformMarkdown": "Markdownに変換",
"transforming": "変換中...",
"transformSuccess": "テキストをMarkdownに正常に変換しました",
"transformError": "変換中のエラー",
"assistant": "AIアシスタント",
"generating": "生成中...",
"generateTitles": "タイトルを生成",
"reformulateText": "テキストをリフォーミュレート",
"reformulating": "リフォーミュレート中...",
"clarify": "明確にする",
"shorten": "短くする",
"improveStyle": "スタイルを改善",
"reformulationComparison": "リフォーミュレーションの比較",
"original": "元のテキスト",
"reformulated": "リフォーミュレート済み"
},
"batchOrganization": {
"error": "組織計画の作成に失敗しました",
"noNotesSelected": "ノートが選択されていません",
"title": "AIで整理",
"description": "AIがートを分析し、ートブックに整理することを提案します。",
"analyzing": "ノートを分析中...",
"notesToOrganize": "{count}個のノートを整理",
"selected": "{count}個選択済み",
"noNotebooks": "利用可能なノートブックがありません。まずノートブックを作成してノートを整理してください。",
"noSuggestions": "AIはこれらのートを整理する良い方法を見つけられませんでした。",
"confidence": "信頼性",
"unorganized": "{count}個のノートを分類できず、「一般ノート」に残ります。",
"applying": "適用中...",
"apply": "適用 ({count})"
},
"autoLabels": {
"error": "ラベルの提案を取得できませんでした",
"noLabelsSelected": "ラベルが選択されていません",
"created": "{count}個のラベルが正常に作成されました",
"analyzing": "ノートを分析中...",
"title": "新しいラベルの提案",
"description": "「{notebookName}」({totalNotes}個のノート)で繰り返し出现するテーマを検出しました。ラベルを作成しますか?",
"note": "ノート",
"notes": "ノート",
"typeContent": "ラベルの提案を取得するためにコンテンツを入力してください...",
"createNewLabel": "この新しいラベルを作成して追加",
"new": "(新規)"
},
"titleSuggestions": {
"available": "タイトルの提案",
"title": "AIの提案",
"generating": "生成中...",
"selectTitle": "タイトルを選択",
"dismiss": "無視"
},
"semanticSearch": {
"exactMatch": "完全一致",
"related": "関連",
"searching": "検索中..."
},
"paragraphRefactor": {
"title": "テキストの改善",
"shorten": "短くする",
"expand": "拡張する",
"improve": "改善する",
"formal": "フォーマル",
"casual": "カジュアル"
},
"memoryEcho": {
"title": "何か気づきました...",
"description": "ノート間のプロアクティブなつながり",
"dailyInsight": "ノートからの毎日の洞察",
"insightReady": "洞察の準備ができました!",
"viewConnection": "つながりを表示",
"helpful": "役に立つ",
"notHelpful": "役に立たない",
"dismiss": "今は無視",
"thanksFeedback": "フィードバックありがとうございます!",
"thanksFeedbackImproving": "ありがとうございます!改善に役立てます。",
"connections": "つながり",
"connection": "つながり",
"connectionsBadge": "{count}個のつながり{plural}",
"fused": "融合済み",
"overlay": {
"title": "つながっているノート",
"searchPlaceholder": "つながりを検索...",
"sortBy": "並び替え:",
"sortSimilarity": "類似度",
"sortRecent": "最新",
"sortOldest": "最古",
"viewAll": "すべて並べて表示",
"loading": "読み込み中...",
"noConnections": "つながりが見つかりませんでした"
},
"comparison": {
"title": "💡 ノートの比較",
"similarityInfo": "これらのノートは{similarity}%の類似性でつながっています",
"highSimilarityInsight": "これらのノートは同じトピックについて高水準の類似性で扱っています。統合または統合することができます。",
"untitled": "無題",
"clickToView": "クリックしてノートを表示",
"helpfulQuestion": "この比較は役に立ちますか?",
"helpful": "役に立つ",
"notHelpful": "役に立たない"
},
"editorSection": {
"title": "⚡ つながっているノート({count}",
"loading": "読み込み中...",
"view": "表示",
"compare": "比較",
"merge": "マージ",
"compareAll": "すべて比較",
"mergeAll": "すべてマージ"
},
"fusion": {
"title": "🔗 インテリジェントな融合",
"mergeNotes": "{count}個のノートをマージ",
"notesToMerge": "📝 マージするノート",
"optionalPrompt": "💬 融合プロンプト(オプション)",
"promptPlaceholder": "AIへのオプションの指示'ート1のフォーマルなスタイルを維持する'...",
"generateFusion": "融合を生成",
"generating": "生成中...",
"previewTitle": "📝 マージされたノートのプレビュー",
"edit": "編集",
"modify": "修正",
"finishEditing": "編集を終了",
"optionsTitle": "融合オプション",
"archiveOriginals": "オリジナルのノートをアーカイブ",
"keepAllTags": "すべてのタグを保持",
"useLatestTitle": "最新のノートをタイトルとして使用",
"createBacklinks": "オリジナルのノートへのバックリンクを作成",
"cancel": "キャンセル",
"confirmFusion": "融合を確認",
"success": "ノートを正常にマージしました!",
"error": "ノートのマージに失敗しました"
}
},
"nav": {
"home": "ホーム",
"notes": "ノート",
"notebooks": "ノートブック",
"generalNotes": "一般ノート",
"archive": "アーカイブ",
"settings": "設定",
"profile": "プロフィール",
"aiSettings": "AI設定",
"logout": "ログアウト",
"login": "ログイン",
"adminDashboard": "管理ダッシュボード",
"diagnostics": "診断",
"trash": "ゴミ箱",
"support": "Mementoをサポート ☕",
"reminders": "リマインダー",
"userManagement": "ユーザー管理",
"accountSettings": "アカウント設定",
"manageAISettings": "AI設定を管理",
"configureAI": "AI機能、プロバイダー、設定を構成します",
"supportDevelopment": "Mementoの開発をサポート ☕",
"supportDescription": "Mementoは100%無料でオープンソースです。あなたのサポートがこの状態を維持するのに役立ちます。",
"buyMeACoffee": "コーヒーをご馳走する",
"donationDescription": "一回限りの寄付をするか、月次サポーターになってください。",
"donateOnKofi": "Ko-fiで寄付",
"donationNote": "プラットフォーム手数料なし • 即時支払い • 安全",
"sponsorOnGithub": "GitHubでスポンサー",
"sponsorDescription": "月次スポンサーになり、認知されましょう。",
"workspace": "ワークスペース",
"quickAccess": "クイックアクセス",
"myLibrary": "マイライブラリ",
"favorites": "お気に入り",
"recent": "最近",
"proPlan": "プロプラン"
},
"settings": {
"title": "設定",
"description": "設定と環境設定を管理",
"account": "アカウント",
"appearance": "外観",
"theme": "テーマ",
"themeLight": "ライト",
"themeDark": "ダーク",
"themeSystem": "システム",
"notifications": "通知",
"language": "言語",
"selectLanguage": "言語を選択",
"privacy": "プライバシー",
"security": "セキュリティ",
"about": "について",
"version": "バージョン",
"settingsSaved": "設定を保存しました",
"settingsError": "設定の保存エラー"
},
"profile": {
"title": "プロフィール",
"description": "個人情報を更新",
"displayName": "表示名",
"email": "メールアドレス",
"changePassword": "パスワードを変更",
"changePasswordDescription": "パスワードを更新します。現在のパスワードが必要です。",
"currentPassword": "現在のパスワード",
"newPassword": "新しいパスワード",
"confirmPassword": "パスワードを確認",
"updatePassword": "パスワードを更新",
"passwordChangeSuccess": "パスワードを変更しました",
"passwordChangeFailed": "パスワードの変更に失敗しました",
"passwordUpdated": "パスワードを更新しました",
"passwordError": "パスワードの更新エラー",
"languagePreferences": "言語設定",
"languagePreferencesDescription": "AI機能とインターフェースの優先言語を選択してください。",
"preferredLanguage": "優先言語",
"selectLanguage": "言語を選択",
"languageDescription": "この言語はAI機能、コンテンツ分析、インターフェーステキストに使用されます。",
"autoDetect": "自動検出",
"updateSuccess": "プロフィールを更新しました",
"updateFailed": "プロフィールの更新に失敗しました",
"languageUpdateSuccess": "言語を更新しました",
"languageUpdateFailed": "言語の更新に失敗しました",
"profileUpdated": "プロフィールを更新しました",
"profileError": "プロフィールの更新エラー",
"accountSettings": "アカウント設定",
"manageAISettings": "AI設定を管理",
"displaySettings": "表示設定",
"displaySettingsDescription": "外観とフォントサイズをカスタマイズします。",
"fontSize": "フォントサイズ",
"selectFontSize": "フォントサイズを選択",
"fontSizeSmall": "小",
"fontSizeMedium": "中",
"fontSizeLarge": "大",
"fontSizeExtraLarge": "特大",
"fontSizeDescription": "読みやすくするためにフォントサイズを調整します。これはインターフェースのすべてのテキストに適用されます。",
"fontSizeUpdateSuccess": "フォントサイズを更新しました",
"fontSizeUpdateFailed": "フォントサイズの更新に失敗しました"
},
"aiSettings": {
"title": "AI設定",
"description": "AI機能と設定を構成",
"features": "AI機能",
"provider": "AIプロバイダー",
"providerAuto": "自動(推奨)",
"providerOllama": "Ollamaローカル",
"providerOpenAI": "OpenAIクラウド",
"frequency": "頻度",
"frequencyDaily": "毎日",
"frequencyWeekly": "毎週",
"saving": "保存中...",
"saved": "設定を更新しました",
"error": "設定の更新に失敗しました"
},
"general": {
"loading": "読み込み中...",
"save": "保存",
"cancel": "キャンセル",
"add": "追加",
"edit": "編集",
"confirm": "確認",
"close": "閉じる",
"back": "戻る",
"next": "次へ",
"previous": "前へ",
"submit": "送信",
"reset": "リセット",
"apply": "適用",
"clear": "クリア",
"select": "選択",
"tryAgain": "もう一度お試しください",
"error": "エラーが発生しました",
"operationSuccess": "操作が成功しました",
"operationFailed": "操作が失敗しました"
},
"colors": {
"default": "デフォルト",
"red": "赤",
"blue": "青",
"green": "緑",
"yellow": "黄",
"purple": "紫",
"pink": "ピンク",
"orange": "オレンジ",
"gray": "グレー"
},
"reminder": {
"title": "リマインダー",
"setReminder": "リマインダーを設定",
"removeReminder": "リマインダーを削除",
"reminderDate": "リマインダー日付",
"reminderTime": "リマインダー時刻",
"save": "リマインダーを設定",
"cancel": "キャンセル"
},
"notebookSuggestion": {
"title": "{icon} {name}に移動しますか?",
"description": "このノートはこのノートブックに属しているようです",
"move": "移動",
"dismiss": "無視",
"dismissIn": "無視({timeLeft}秒で閉じます)",
"moveToNotebook": "ノートブックに移動",
"generalNotes": "一般ノート"
}
}