sepehr 7fb486c9a4 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>
2026-01-11 22:26:13 +01:00

531 lines
20 KiB
JSON

{
"auth": {
"signIn": "Sign In",
"signUp": "Sign Up",
"email": "Email",
"password": "Password",
"name": "Name",
"emailPlaceholder": "Enter your email address",
"passwordPlaceholder": "Enter your password",
"namePlaceholder": "Enter your name",
"passwordMinChars": "Enter password (min 6 chars)",
"resetPassword": "Reset Password",
"resetPasswordInstructions": "Enter your email to reset password",
"forgotPassword": "Forgot password?",
"noAccount": "Don't have an account?",
"hasAccount": "Already have an account?",
"signInToAccount": "Sign in to your account",
"createAccount": "Create your account",
"rememberMe": "Remember me",
"orContinueWith": "Or continue with",
"checkYourEmail": "Check your email",
"resetEmailSent": "We have sent a password reset link to your email address if it exists in our system.",
"returnToLogin": "Return to Login",
"forgotPasswordTitle": "Forgot Password",
"forgotPasswordDescription": "Enter your email address and we'll send you a link to reset your password.",
"sending": "Sending...",
"sendResetLink": "Send Reset Link",
"backToLogin": "Back to login"
},
"notes": {
"title": "Notes",
"newNote": "New note",
"untitled": "Untitled",
"placeholder": "Take a note...",
"markdownPlaceholder": "Take a note... (Markdown supported)",
"titlePlaceholder": "Title",
"listItem": "List item",
"addListItem": "+ List item",
"newChecklist": "New checklist",
"add": "Add",
"adding": "Adding...",
"close": "Close",
"confirmDelete": "Are you sure you want to delete this note?",
"confirmLeaveShare": "Are you sure you want to leave this shared note?",
"sharedBy": "Shared by",
"leaveShare": "Leave",
"delete": "Delete",
"archive": "Archive",
"unarchive": "Unarchive",
"pin": "Pin",
"unpin": "Unpin",
"color": "Color",
"changeColor": "Change color",
"setReminder": "Set reminder",
"setReminderButton": "Set Reminder",
"date": "Date",
"time": "Time",
"reminderDateTimeRequired": "Please enter date and time",
"invalidDateTime": "Invalid date or time",
"reminderMustBeFuture": "Reminder must be in the future",
"reminderSet": "Reminder set for {datetime}",
"reminderPastError": "Reminder must be in the future",
"reminderRemoved": "Reminder removed",
"addImage": "Add image",
"addLink": "Add link",
"linkAdded": "Link added",
"linkMetadataFailed": "Could not fetch link metadata",
"linkAddFailed": "Failed to add link",
"invalidFileType": "Invalid file type: {fileName}. Only JPEG, PNG, GIF, and WebP allowed.",
"fileTooLarge": "File too large: {fileName}. Maximum size is {maxSize}.",
"uploadFailed": "Failed to upload {filename}",
"contentOrMediaRequired": "Please enter some content or add a link/image",
"itemOrMediaRequired": "Please add at least one item or media",
"noteCreated": "Note created successfully",
"noteCreateFailed": "Failed to create note",
"aiAssistant": "AI Assistant",
"changeSize": "Change size",
"backgroundOptions": "Background options",
"moreOptions": "More options",
"remindMe": "Remind me",
"markdownMode": "Markdown",
"addCollaborators": "Add collaborators",
"duplicate": "Duplicate",
"share": "Share",
"showCollaborators": "Show collaborators",
"pinned": "Pinned",
"others": "Others",
"noNotes": "No notes",
"noNotesFound": "No notes found",
"createFirstNote": "Create your first note",
"size": "Size",
"small": "Small",
"medium": "Medium",
"large": "Large",
"shareWithCollaborators": "Share with collaborators",
"view": "View Note",
"edit": "Edit Note",
"readOnly": "Read Only",
"preview": "Preview",
"noContent": "No content",
"takeNote": "Take a note...",
"takeNoteMarkdown": "Take a note... (Markdown supported)",
"addItem": "Add item",
"sharedReadOnly": "This note is shared with you in read-only mode",
"makeCopy": "Make a copy",
"saving": "Saving...",
"copySuccess": "Note copied successfully!",
"copyFailed": "Failed to copy note",
"copy": "Copy",
"markdownOn": "Markdown ON",
"markdownOff": "Markdown OFF",
"undo": "Undo (Ctrl+Z)",
"redo": "Redo (Ctrl+Y)"
},
"pagination": {
"previous": "←",
"pageInfo": "Page {currentPage} / {totalPages}",
"next": "→"
},
"labels": {
"title": "Labels",
"filter": "Filter by Label",
"manage": "Manage Labels",
"manageTooltip": "Manage Labels",
"changeColor": "Change Color",
"changeColorTooltip": "Change color",
"delete": "Delete",
"deleteTooltip": "Delete label",
"confirmDelete": "Are you sure you want to delete this label?",
"newLabelPlaceholder": "Create new label",
"namePlaceholder": "Enter label name",
"addLabel": "Add label",
"createLabel": "Create label",
"labelName": "Label name",
"labelColor": "Label color",
"manageLabels": "Manage labels",
"manageLabelsDescription": "Add or remove labels for this note. Click on a label to change its color.",
"selectedLabels": "Selected Labels",
"allLabels": "All Labels",
"clearAll": "Clear all",
"filterByLabel": "Filter by label",
"tagAdded": "Tag \"{tag}\" added",
"showLess": "Show less",
"showMore": "Show more",
"editLabels": "Edit Labels",
"editLabelsDescription": "Create, edit colors, or delete labels.",
"noLabelsFound": "No labels found.",
"loading": "Loading...",
"notebookRequired": "⚠️ Labels are only available in notebooks. Move this note to a notebook first."
},
"search": {
"placeholder": "Search",
"searchPlaceholder": "Search your notes...",
"semanticInProgress": "AI search in progress...",
"semanticTooltip": "AI semantic search",
"searching": "Searching...",
"noResults": "No results found",
"resultsFound": "{count} notes found",
"exactMatch": "Exact match",
"related": "Related"
},
"collaboration": {
"emailPlaceholder": "Enter email address",
"addCollaborator": "Add collaborator",
"removeCollaborator": "Remove collaborator",
"owner": "Owner",
"canEdit": "Can edit",
"canView": "Can view",
"shareNote": "Share note",
"shareWithCollaborators": "Share with collaborators",
"addCollaboratorDescription": "Add people to collaborate on this note by their email address.",
"viewerDescription": "You have access to this note. Only the owner can manage collaborators.",
"emailAddress": "Email address",
"enterEmailAddress": "Enter email address",
"invite": "Invite",
"peopleWithAccess": "People with access",
"noCollaborators": "No collaborators yet. Add someone above!",
"noCollaboratorsViewer": "No collaborators yet.",
"pendingInvite": "Pending Invite",
"pending": "Pending",
"remove": "Remove",
"unnamedUser": "Unnamed User",
"done": "Done",
"willBeAdded": "{email} will be added as collaborator when note is created",
"alreadyInList": "This email is already in the list",
"nowHasAccess": "{name} now has access to this note",
"accessRevoked": "Access has been revoked",
"errorLoading": "Error loading collaborators",
"failedToAdd": "Failed to add collaborator",
"failedToRemove": "Failed to remove collaborator"
},
"ai": {
"analyzing": "AI analyzing...",
"clickToAddTag": "Click to add this tag",
"ignoreSuggestion": "Ignore this suggestion",
"generatingTitles": "Generating titles...",
"generateTitlesTooltip": "Generate titles with AI",
"poweredByAI": "Powered by AI",
"languageDetected": "Language detected",
"processing": "Processing...",
"tagAdded": "Tag \"{tag}\" added",
"titleGenerating": "Generating...",
"titleGenerateWithAI": "Generate titles with AI",
"titleGenerationMinWords": "Content must have at least 10 words to generate titles (current: {count} words)",
"titleGenerationError": "Error generating titles",
"titlesGenerated": "💡 {count} titles generated!",
"titleGenerationFailed": "Failed to generate titles",
"titleApplied": "Title applied!",
"reformulationNoText": "Please select text or add content",
"reformulationSelectionTooShort": "Selection too short, using full content",
"reformulationMinWords": "Text must have at least 10 words (current: {count} words)",
"reformulationMaxWords": "Text must have maximum 500 words",
"reformulationError": "Error during reformulation",
"reformulationFailed": "Failed to reformulate text",
"reformulationApplied": "Reformulated text applied!",
"transformMarkdown": "Transform to Markdown",
"transforming": "Transforming...",
"transformSuccess": "Text transformed to Markdown successfully!",
"transformError": "Error during transformation",
"assistant": "AI Assistant",
"generating": "Generating...",
"generateTitles": "Generate titles",
"reformulateText": "Reformulate text",
"reformulating": "Reformulating...",
"clarify": "Clarify",
"shorten": "Shorten",
"improveStyle": "Improve style",
"reformulationComparison": "Reformulation Comparison",
"original": "Original",
"reformulated": "Reformulated"
},
"batchOrganization": {
"error": "Failed to create organization plan",
"noNotesSelected": "No notes selected",
"title": "Organize with AI",
"description": "AI will analyze your notes and suggest organizing them into notebooks.",
"analyzing": "Analyzing your notes...",
"notesToOrganize": "{count} notes to organize",
"selected": "{count} selected",
"noNotebooks": "No notebooks available. Create notebooks first to organize your notes.",
"noSuggestions": "AI could not find a good way to organize these notes.",
"confidence": "confidence",
"unorganized": "{count} notes couldn't be categorized and will stay in General Notes.",
"applying": "Applying...",
"apply": "Apply ({count})"
},
"autoLabels": {
"error": "Failed to fetch label suggestions",
"noLabelsSelected": "No labels selected",
"created": "{count} labels created successfully",
"analyzing": "Analyzing your notes...",
"title": "New Label Suggestions",
"description": "I've detected recurring themes in \"{notebookName}\" ({totalNotes} notes). Create labels for them?",
"note": "note",
"notes": "notes",
"typeContent": "Type content to get label suggestions...",
"createNewLabel": "Create this new label and add it",
"new": "(new)"
},
"titleSuggestions": {
"available": "Title suggestions",
"title": "AI suggestions",
"generating": "Generating...",
"selectTitle": "Select a title",
"dismiss": "Dismiss"
},
"semanticSearch": {
"exactMatch": "Exact match",
"related": "Related",
"searching": "Searching..."
},
"paragraphRefactor": {
"title": "Text improvement",
"shorten": "Shorten",
"expand": "Expand",
"improve": "Improve",
"formal": "Formal",
"casual": "Casual"
},
"memoryEcho": {
"title": "I noticed something...",
"description": "Proactive connections between your notes",
"dailyInsight": "Daily insight from your notes",
"insightReady": "Your insight is ready!",
"viewConnection": "View Connection",
"helpful": "Helpful",
"notHelpful": "Not Helpful",
"dismiss": "Dismiss for now",
"thanksFeedback": "Thanks for your feedback!",
"thanksFeedbackImproving": "Thanks! We'll use this to improve.",
"connections": "Connections",
"connection": "connection",
"connectionsBadge": "{count} connection{plural}",
"fused": "Fused",
"overlay": {
"title": "Connected Notes",
"searchPlaceholder": "Search connections...",
"sortBy": "Sort by:",
"sortSimilarity": "Similarity",
"sortRecent": "Recent",
"sortOldest": "Oldest",
"viewAll": "View all side by side",
"loading": "Loading...",
"noConnections": "No connections found"
},
"comparison": {
"title": "💡 Note Comparison",
"similarityInfo": "These notes are connected by {similarity}% similarity",
"highSimilarityInsight": "These notes deal with the same topic with a high degree of similarity. They could be merged or consolidated.",
"untitled": "Untitled",
"clickToView": "Click to view note",
"helpfulQuestion": "Is this comparison helpful?",
"helpful": "Helpful",
"notHelpful": "Not Helpful"
},
"editorSection": {
"title": "⚡ Connected Notes ({count})",
"loading": "Loading...",
"view": "View",
"compare": "Compare",
"merge": "Merge",
"compareAll": "Compare all",
"mergeAll": "Merge all"
},
"fusion": {
"title": "🔗 Intelligent Fusion",
"mergeNotes": "Merge {count} note(s)",
"notesToMerge": "📝 Notes to merge",
"optionalPrompt": "💬 Fusion prompt (optional)",
"promptPlaceholder": "Optional instructions for AI (e.g., 'Keep the formal style of note 1')...",
"generateFusion": "Generate the fusion",
"generating": "Generating...",
"previewTitle": "📝 Preview of merged note",
"edit": "Edit",
"modify": "Modify",
"finishEditing": "Finish editing",
"optionsTitle": "Fusion options",
"archiveOriginals": "Archive original notes",
"keepAllTags": "Keep all tags",
"useLatestTitle": "Use latest note as title",
"createBacklinks": "Create backlink to original notes",
"cancel": "Cancel",
"confirmFusion": "Confirm fusion",
"success": "Notes merged successfully!",
"error": "Failed to merge notes",
"generateError": "Failed to generate fusion",
"noContentReturned": "No fusion content returned from API",
"unknownDate": "Unknown date"
}
},
"nav": {
"home": "Home",
"notes": "Notes",
"notebooks": "Notebooks",
"generalNotes": "General Notes",
"archive": "Archive",
"settings": "Settings",
"profile": "Profile",
"aiSettings": "AI Settings",
"logout": "Logout",
"login": "Login",
"adminDashboard": "Admin Dashboard",
"diagnostics": "Diagnostics",
"trash": "Trash",
"support": "Support Memento ☕",
"reminders": "Reminders",
"userManagement": "User Management",
"accountSettings": "Account Settings",
"manageAISettings": "Manage AI Settings",
"configureAI": "Configure your AI-powered features, provider, and preferences",
"supportDevelopment": "Support Memento Development ☕",
"supportDescription": "Memento is 100% free and open-source. Your support helps keep it that way.",
"buyMeACoffee": "Buy me a coffee",
"donationDescription": "Make a one-time donation or become a monthly supporter.",
"donateOnKofi": "Donate on Ko-fi",
"donationNote": "No platform fees • Instant payouts • Secure",
"sponsorOnGithub": "Sponsor on GitHub",
"sponsorDescription": "Become a monthly sponsor and get recognition.",
"workspace": "Workspace",
"quickAccess": "Quick Access",
"myLibrary": "My Library",
"favorites": "Favorites",
"recent": "Recent",
"proPlan": "Pro Plan"
},
"settings": {
"title": "Settings",
"description": "Manage your settings and preferences",
"account": "Account",
"appearance": "Appearance",
"theme": "Theme",
"themeLight": "Light",
"themeDark": "Dark",
"themeSystem": "System",
"notifications": "Notifications",
"language": "Language",
"selectLanguage": "Select language",
"privacy": "Privacy",
"security": "Security",
"about": "About",
"version": "Version",
"settingsSaved": "Settings saved",
"settingsError": "Error saving settings"
},
"profile": {
"title": "Profile",
"description": "Update your personal information",
"displayName": "Display Name",
"email": "Email",
"changePassword": "Change Password",
"changePasswordDescription": "Update your password. You will need your current password.",
"currentPassword": "Current Password",
"newPassword": "New Password",
"confirmPassword": "Confirm Password",
"updatePassword": "Update Password",
"passwordChangeSuccess": "Password changed successfully",
"passwordChangeFailed": "Failed to change password",
"passwordUpdated": "Password updated",
"passwordError": "Error updating password",
"languagePreferences": "Language Preferences",
"languagePreferencesDescription": "Choose your preferred language for AI features and interface.",
"preferredLanguage": "Preferred Language",
"selectLanguage": "Select a language",
"languageDescription": "This language will be used for AI-powered features, content analysis, and interface text.",
"autoDetect": "Auto-detect",
"updateSuccess": "Profile updated",
"updateFailed": "Failed to update profile",
"languageUpdateSuccess": "Language updated successfully",
"languageUpdateFailed": "Failed to update language",
"profileUpdated": "Profile updated",
"profileError": "Error updating profile",
"accountSettings": "Account Settings",
"manageAISettings": "Manage AI Settings",
"displaySettings": "Display Settings",
"displaySettingsDescription": "Customize the appearance and font size.",
"fontSize": "Font Size",
"selectFontSize": "Select font size",
"fontSizeSmall": "Small",
"fontSizeMedium": "Medium",
"fontSizeLarge": "Large",
"fontSizeExtraLarge": "Extra Large",
"fontSizeDescription": "Adjust the font size for better readability. This applies to all text in the interface.",
"fontSizeUpdateSuccess": "Font size updated successfully",
"fontSizeUpdateFailed": "Failed to update font size"
},
"aiSettings": {
"title": "AI Settings",
"description": "Configure your AI-powered features and preferences",
"features": "AI Features",
"provider": "AI Provider",
"providerAuto": "Auto (Recommended)",
"providerOllama": "Ollama (Local)",
"providerOpenAI": "OpenAI (Cloud)",
"frequency": "Frequency",
"frequencyDaily": "Daily",
"frequencyWeekly": "Weekly",
"saving": "Saving...",
"saved": "Setting updated",
"error": "Failed to update setting"
},
"general": {
"loading": "Loading...",
"save": "Save",
"cancel": "Cancel",
"add": "Add",
"edit": "Edit",
"confirm": "Confirm",
"close": "Close",
"back": "Back",
"next": "Next",
"previous": "Previous",
"submit": "Submit",
"reset": "Reset",
"apply": "Apply",
"clear": "Clear",
"select": "Select",
"tryAgain": "Please try again",
"error": "An error occurred",
"operationSuccess": "Operation successful",
"operationFailed": "Operation failed"
},
"colors": {
"default": "Default",
"red": "Red",
"blue": "Blue",
"green": "Green",
"yellow": "Yellow",
"purple": "Purple",
"pink": "Pink",
"orange": "Orange",
"gray": "Gray"
},
"reminder": {
"title": "Reminder",
"setReminder": "Set reminder",
"removeReminder": "Remove reminder",
"reminderDate": "Reminder date",
"reminderTime": "Reminder time",
"save": "Set reminder",
"cancel": "Cancel"
},
"notebook": {
"create": "Create Notebook",
"createNew": "Create New Notebook",
"createDescription": "Start a new collection to organize your notes, ideas, and projects efficiently.",
"name": "Notebook Name",
"selectIcon": "Icon",
"selectColor": "Color",
"cancel": "Cancel",
"creating": "Creating...",
"edit": "Edit Notebook",
"editDescription": "Change the name, icon, and color of your notebook.",
"delete": "Delete Notebook",
"deleteWarning": "Are you sure you want to delete this notebook? Notes will be moved to General Notes.",
"deleteConfirm": "Delete",
"summary": "Notebook Summary",
"summaryDescription": "Generate an AI-powered summary of all notes in this notebook.",
"generating": "Generating summary...",
"summaryError": "Error generating summary"
},
"notebookSuggestion": {
"title": "Move to {icon} {name}?",
"description": "This note seems to belong to this notebook",
"move": "Move",
"dismiss": "Dismiss",
"dismissIn": "Dismiss (closes in {timeLeft}s)",
"moveToNotebook": "Move to notebook",
"generalNotes": "General Notes"
}
}