feat: rename keep-notes to memento-note, migrate to PostgreSQL, fix MCP bugs

- Rename directory keep-notes -> memento-note with all code references
- Prisma: SQLite -> PostgreSQL (both app and MCP server schemas)
- Sync MCP schema with main app (add missing fields, relations, indexes)
- Delete 17 SQLite migrations (clean slate for PostgreSQL)
- Remove SQLite dependencies (@libsql/client, better-sqlite3, etc.)
- Fix MCP server: hardcoded Windows DB paths -> DATABASE_URL env var
- Fix MCP server: .dockerignore excluded index-sse.js (SSE mode broken)
- MCP Dockerfile: node:20 -> node:22
- Docker Compose: add postgres service, remove SQLite volume
- Generate favicon.ico, icon-192.png, icon-512.png, apple-icon.png
- Update layout.tsx icons and manifest.json for PNG icons
- Update all .env files for PostgreSQL
- Rewrite README.md with updated sections
- Remove mcp-server/node_modules and prisma/client-generated from git tracking

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Sepehr Ramezani
2026-04-20 20:58:04 +02:00
parent e2ddfa53d4
commit aa6a214f37
3548 changed files with 440 additions and 516800 deletions

View File

@@ -0,0 +1,989 @@
{
"about": {
"appDescription": "Мощное приложение для заметок с функциями на базе ИИ",
"appName": "Keep Notes",
"buildDate": "Дата сборки",
"description": "Информация о приложении",
"features": {
"description": "Возможности на базе ИИ",
"dragDrop": "Управление заметками перетаскиванием",
"labelSystem": "Система меток",
"memoryEcho": "Ежедневные идеи Memory Echo",
"multipleProviders": "Несколько провайдеров ИИ (OpenAI, Ollama)",
"notebookOrganization": "Организация по блокнотам",
"paragraphReformulation": "Реформулировка абзацев",
"semanticSearch": "Семантический поиск с эмбеддингами",
"title": "Функции",
"titleSuggestions": "Предложения заголовков с ИИ"
},
"platform": "Платформа",
"platformWeb": "Веб",
"support": {
"description": "Получите помощь и оставьте отзыв",
"documentation": "Документация",
"feedback": "Отзыв",
"reportIssues": "Сообщить о проблемах",
"title": "Поддержка"
},
"technology": {
"ai": "ИИ",
"authentication": "Аутентификация",
"backend": "Бэкенд",
"database": "База данных",
"description": "Создано с использованием современных технологий",
"frontend": "Фронтенд",
"testing": "Тестирование",
"title": "Технологический стек",
"ui": "UI"
},
"title": "О программе",
"version": "Версия"
},
"admin": {
"ai": {
"apiKey": "API Key",
"baseUrl": "Base URL",
"commonEmbeddingModels": "Common embedding models for OpenAI-compatible APIs",
"commonModelsDescription": "Common models for OpenAI-compatible APIs",
"description": "Configure AI providers for auto-tagging and semantic search. Use different providers for optimal performance.",
"embeddingsDescription": "AI provider for semantic search embeddings. Recommended: OpenAI (best quality).",
"embeddingsProvider": "Embeddings Provider",
"model": "Model",
"modelRecommendations": "gpt-4o-mini = Best value • gpt-4o = Best quality",
"openAIKeyDescription": "Your OpenAI API key from platform.openai.com",
"openTestPanel": "Open AI Test Panel",
"provider": "Provider",
"providerEmbeddingRequired": "AI_PROVIDER_EMBEDDING is required",
"providerTagsRequired": "AI_PROVIDER_TAGS is required",
"saveSettings": "Save AI Settings",
"saving": "Saving...",
"selectEmbeddingModel": "Select an embedding model installed on your system",
"selectOllamaModel": "Select an Ollama model installed on your system",
"tagsGenerationDescription": "AI provider for automatic tag suggestions. Recommended: Ollama (free, local).",
"tagsGenerationProvider": "Tags Generation Provider",
"title": "AI Configuration",
"updateFailed": "Failed to update AI settings",
"updateSuccess": "AI Settings updated successfully"
},
"aiTest": {
"description": "Test your AI providers for tag generation and semantic search embeddings",
"embeddingDimensions": "Embedding Dimensions:",
"embeddingsTestDescription": "Test the AI provider responsible for semantic search embeddings",
"embeddingsTestTitle": "Embeddings Test",
"error": "Error:",
"first5Values": "First 5 values:",
"generatedTags": "Generated Tags:",
"howItWorksTitle": "How Testing Works",
"model": "Model:",
"provider": "Provider:",
"responseTime": "Response time: {time}ms",
"runTest": "Run Test",
"tagsTestDescription": "Test the AI provider responsible for automatic tag suggestions",
"tagsTestTitle": "Tags Generation Test",
"testError": "Test Error: {error}",
"testFailed": "Test Failed",
"testPassed": "Test Passed",
"testing": "Testing...",
"tipDescription": "Use the AI Test Panel to diagnose configuration issues before testing.",
"tipTitle": "Tip:",
"title": "AI Provider Testing",
"vectorDimensions": "vector dimensions"
},
"aiTesting": "AI Testing",
"security": {
"allowPublicRegistration": "Allow Public Registration",
"allowPublicRegistrationDescription": "If disabled, new users can only be added by an Administrator via the User Management page.",
"description": "Manage access control and registration policies.",
"title": "Security Settings",
"updateFailed": "Failed to update security settings",
"updateSuccess": "Security Settings updated"
},
"settings": "Admin Settings",
"smtp": {
"description": "Configure email server for password resets.",
"forceSSL": "Force SSL/TLS (usually for port 465)",
"fromEmail": "From Email",
"host": "Host",
"ignoreCertErrors": "Ignore Certificate Errors (Self-hosted/Dev only)",
"password": "Password",
"port": "Port",
"saveSettings": "Save SMTP Settings",
"sending": "Sending...",
"testEmail": "Test Email",
"testFailed": "Failed: {error}",
"testSuccess": "Test email sent successfully!",
"title": "SMTP Configuration",
"updateFailed": "Failed to update SMTP settings",
"updateSuccess": "SMTP Settings updated",
"username": "Username"
},
"title": "Admin Dashboard",
"userManagement": "User Management",
"users": {
"addUser": "Add User",
"confirmDelete": "Вы уверены, что хотите удалить этого пользователя?",
"createFailed": "Failed to create user",
"createSuccess": "User created successfully",
"createUser": "Create User",
"createUserDescription": "Add a new user to the system.",
"deleteFailed": "Failed to delete",
"deleteSuccess": "User deleted",
"demote": "Понизить",
"email": "Email",
"name": "Name",
"password": "Password",
"promote": "Повысить",
"role": "Role",
"roleUpdateFailed": "Failed to update role",
"roleUpdateSuccess": "User role updated to {role}",
"roles": {
"admin": "Администратор",
"user": "Пользователь"
},
"table": {
"actions": "Actions",
"createdAt": "Created At",
"email": "Email",
"name": "Name",
"role": "Role"
}
}
},
"ai": {
"analyzing": "AI analyzing...",
"assistant": "AI Assistant",
"autoLabels": {
"analyzing": "Анализ ваших заметок для предложений меток...",
"create": "Создать",
"createNewLabel": "Создать новую метку",
"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...",
"typeForSuggestions": "Введите для предложений"
},
"batchOrganization": {
"analyzing": "Analyzing your notes...",
"apply": "Apply",
"applyFailed": "Ошибка применения",
"applying": "Applying...",
"description": "ИИ проанализирует ваши заметки и предложит организовать их в блокноты.",
"error": "Ошибка организации",
"noNotebooks": "No notebooks available. Create notebooks first to organize your notes.",
"noNotesSelected": "Нет выбранных заметок",
"noSuggestions": "AI could not find a good way to organize these notes.",
"selectAllIn": "Выбрать всё в",
"selectNote": "Выбрать заметку",
"success": "Организация завершена",
"title": "Пакетная организация"
},
"clarify": "Clarify",
"clickToAddTag": "Click to add this tag",
"generateTitles": "Generate titles",
"generateTitlesTooltip": "Generate titles with AI",
"generating": "Generating...",
"generatingTitles": "Generating titles...",
"ignoreSuggestion": "Ignore this suggestion",
"improveStyle": "Improve style",
"languageDetected": "Language detected",
"notebookSummary": {
"regenerate": "Перегенерировать Сводку",
"regenerating": "Перегенерация сводки..."
},
"original": "Original",
"poweredByAI": "Powered by AI",
"processing": "Processing...",
"reformulateText": "Reformulate text",
"reformulated": "Reformulated",
"reformulating": "Reformulating...",
"reformulationApplied": "Reformulated text applied!",
"reformulationComparison": "Reformulation Comparison",
"reformulationError": "Error during reformulation",
"reformulationFailed": "Failed to reformulate text",
"reformulationMaxWords": "Text must have maximum 500 words",
"reformulationMinWords": "Text must have at least 10 words (current: {count} words)",
"reformulationNoText": "Please select text or add content",
"reformulationSelectionTooShort": "Selection too short, using full content",
"shorten": "Shorten",
"tagAdded": "Tag \"{tag}\" added",
"titleApplied": "Title applied!",
"titleGenerateWithAI": "Generate titles with AI",
"titleGenerating": "Generating...",
"titleGenerationError": "Error generating titles",
"titleGenerationFailed": "Failed to generate titles",
"titleGenerationMinWords": "Content must have at least 10 words to generate titles (current: {count} words)",
"titlesGenerated": "💡 {count} titles generated!",
"transformError": "Error during transformation",
"transformMarkdown": "Transform to Markdown",
"transformSuccess": "Text transformed to Markdown successfully!",
"transforming": "Transforming..."
},
"aiSettings": {
"description": "Настройте функции и предпочтения на базе ИИ",
"error": "Не удалось обновить настройку",
"features": "Функции ИИ",
"frequency": "Частота",
"frequencyDaily": "Ежедневно",
"frequencyWeekly": "Еженедельно",
"provider": "Провайдер ИИ",
"providerAuto": "Авто (Рекомендуется)",
"providerOllama": "Ollama (Локальный)",
"providerOpenAI": "OpenAI (Облачный)",
"saved": "Настройка обновлена",
"saving": "Сохранение...",
"title": "Настройки ИИ",
"titleSuggestionsDesc": "Предлагать заголовки для заметок без названия после 50+ слов",
"paragraphRefactorDesc": "Параметры улучшения текста с помощью ИИ",
"frequencyDesc": "Как часто анализировать связи между заметками",
"providerDesc": "Выберите предпочитаемого провайдера ИИ",
"providerAutoDesc": "Ollama при наличии, иначе OpenAI",
"providerOllamaDesc": "100% приватно, работает локально на вашем устройстве",
"providerOpenAIDesc": "Наиболее точно, требует API-ключ"
},
"appearance": {
"description": "Настройте внешний вид приложения",
"title": "Внешний вид"
},
"auth": {
"backToLogin": "Вернуться ко входу",
"checkYourEmail": "Проверьте вашу почту",
"createAccount": "Создайте свой аккаунт",
"email": "Эл. почта",
"emailPlaceholder": "Введите адрес электронной почты",
"forgotPassword": "Забыли пароль?",
"forgotPasswordDescription": "Введите адрес электронной почты, и мы отправим вам ссылку для сброса пароля.",
"forgotPasswordTitle": "Забыли пароль",
"hasAccount": "Уже есть аккаунт?",
"name": "Имя",
"namePlaceholder": "Введите ваше имя",
"noAccount": "Нет аккаунта?",
"orContinueWith": "Или продолжить с",
"password": "Пароль",
"passwordMinChars": "Введите пароль (минимум 6 символов)",
"passwordPlaceholder": "Введите пароль",
"rememberMe": "Запомнить меня",
"resetEmailSent": "Мы отправили ссылку для сброса пароля на вашу почту, если она существует в нашей системе.",
"resetPassword": "Сбросить пароль",
"resetPasswordInstructions": "Введите вашу почту для сброса пароля",
"returnToLogin": "Вернуться ко входу",
"sendResetLink": "Отправить ссылку для сброса",
"sending": "Отправка...",
"signIn": "Войти",
"signInToAccount": "Войдите в свой аккаунт",
"signOut": "Sign out",
"signUp": "Зарегистрироваться"
},
"autoLabels": {
"analyzing": "Анализ ваших заметок...",
"createNewLabel": "Создать эту новую метку и добавить ее",
"created": "Меток успешно создано: {count}",
"description": "Я обнаружил повторяющиеся темы в \"{notebookName}\" ({totalNotes} заметок). Создать метки для них?",
"error": "Не удалось получить предложения меток",
"new": "(новая)",
"noLabelsSelected": "Меток не выбраны",
"note": "заметка",
"notes": "заметки",
"title": "Новые предложения меток",
"typeContent": "Введите контент для получения предложений меток..."
},
"batch": {
"organize": "Организовать",
"organizeWithAI": "Организовать с ИИ"
},
"batchOrganization": {
"analyzing": "Анализ ваших заметок...",
"apply": "Применить ({count})",
"applying": "Применение...",
"confidence": "уверенность",
"description": "ИИ проанализирует ваши заметки и предложит организовать их в блокноты.",
"error": "Не удалось создать план организации",
"noNotebooks": "Нет доступных блокнотов. Создайте сначала блокноты для организации ваших заметок.",
"noNotesSelected": "Нет выбранных заметок",
"noSuggestions": "ИИ не нашел хорошего способа организации этих заметок.",
"notesToOrganize": "{count} заметок для организации",
"selected": "{count} выбрано",
"title": "Организовать с ИИ",
"unorganized": "{count} заметок не удалось категоризовать и останутся в общих заметках."
},
"collaboration": {
"accessRevoked": "Доступ был отозван",
"addCollaborator": "Добавить соавтора",
"addCollaboratorDescription": "Добавьте людей для совместной работы над этой заметкой по их адресу электронной почты.",
"alreadyInList": "Этот адрес уже в списке",
"canEdit": "Может редактировать",
"canView": "Может просматривать",
"done": "Готово",
"emailAddress": "Адрес электронной почты",
"emailPlaceholder": "Введите адрес электронной почты",
"enterEmailAddress": "Введите адрес электронной почты",
"errorLoading": "Ошибка загрузки соавторов",
"failedToAdd": "Не удалось добавить соавтора",
"failedToRemove": "Не удалось удалить соавтора",
"invite": "Пригласить",
"noCollaborators": "Соавторов пока нет. Добавьте кого-нибудь выше!",
"noCollaboratorsViewer": "Соавторов пока нет.",
"nowHasAccess": "{name} теперь имеет доступ к этой заметке",
"owner": "Владелец",
"pending": "Ожидает",
"pendingInvite": "Ожидающее приглашение",
"peopleWithAccess": "Люди с доступом",
"remove": "Удалить",
"removeCollaborator": "Удалить соавтора",
"shareNote": "Поделиться заметкой",
"shareWithCollaborators": "Поделиться с соавторами",
"unnamedUser": "Безымянный пользователь",
"viewerDescription": "У вас есть доступ к этой заметке. Только владелец может управлять соавторами.",
"willBeAdded": "{email} будет добавлен как соавтор при создании заметки"
},
"colors": {
"blue": "Синий",
"default": "По умолчанию",
"gray": "Серый",
"green": "Зелёный",
"orange": "Оранжевый",
"pink": "Розовый",
"purple": "Фиолетовый",
"red": "Красный",
"yellow": "Жёлтый"
},
"common": {
"add": "Добавить",
"cancel": "Отмена",
"close": "Закрыть",
"confirm": "Подтвердить",
"delete": "Удалить",
"edit": "Редактировать",
"error": "Ошибка",
"loading": "Загрузка...",
"noResults": "Нет результатов",
"notAvailable": "Недоступно",
"optional": "Необязательно",
"remove": "Удалить",
"required": "Обязательно",
"save": "Сохранить",
"search": "Поиск",
"success": "Успешно",
"unknown": "Неизвестно"
},
"connection": {
"clickToView": "Нажмите для просмотра заметки",
"helpful": "Полезно",
"isHelpful": "Эта связь полезна?",
"memoryEchoDiscovery": "Обнаружение Memory Echo",
"notHelpful": "Не полезно",
"similarityInfo": "Эти заметки связаны на {similarity}% сходства"
},
"dataManagement": {
"cleanup": {
"button": "Cleanup",
"description": "Remove labels and connections that reference deleted notes.",
"failed": "Error during cleanup",
"title": "Cleanup Orphaned Data"
},
"cleanupComplete": "Очистка завершена",
"cleanupError": "Ошибка очистки",
"dangerZone": "Опасная зона",
"dangerZoneDescription": "Эти действия необратимы",
"delete": {
"button": "Delete All Notes",
"confirm": "Are you sure? This will permanently delete all your notes.",
"description": "Permanently delete all your notes. This action cannot be undone.",
"failed": "Failed to delete notes",
"success": "All notes deleted",
"title": "Delete All Notes"
},
"deleting": "Удаление...",
"export": {
"button": "Export Notes",
"description": "Download all your notes as a JSON file. This includes all content, labels, and metadata.",
"failed": "Failed to export notes",
"success": "Notes exported successfully",
"title": "Export All Notes"
},
"exporting": "Экспорт...",
"import": {
"button": "Import Notes",
"description": "Upload a JSON file to import notes. This will add to your existing notes, not replace them.",
"failed": "Failed to import notes",
"success": "Imported {count} notes",
"title": "Import Notes"
},
"importing": "Импорт...",
"indexing": {
"button": "Rebuild Index",
"description": "Regenerate embeddings for all notes to improve semantic search.",
"failed": "Error during indexing",
"success": "Indexing complete: {count} notes processed",
"title": "Rebuild Search Index"
},
"indexingComplete": "Индексация завершена",
"indexingError": "Ошибка индексации",
"title": "Data Management",
"toolsDescription": "Tools to maintain your database health"
},
"demoMode": {
"activated": "Демо-режим активирован! Memory Echo будет работать мгновенно.",
"createNotesTip": "Создайте 2+ похожие заметки и увидьте Memory Echo в действии!",
"deactivated": "Демо-режим деактивирован. Обычные параметры восстановлены.",
"delayBetweenNotes": "Задержка 0 дней между заметками (обычно 7 дней)",
"description": "Ускоряет Memory Echo для тестирования. Связи появляются мгновенно.",
"parametersActive": "Активные демо-параметры:",
"similarityThreshold": "Порог сходства 50% (обычно 75%)",
"title": "Демо-режим",
"toggleFailed": "Ошибка переключения демо-режима",
"unlimitedInsights": "Неограниченные идеи (без ограничений частоты)"
},
"diagnostics": {
"apiStatus": "Статус API",
"checking": "Checking...",
"configuredProvider": "Настроенный провайдер",
"description": "Check your AI provider connection status",
"errorStatus": "Error",
"operational": "Operational",
"testDetails": "Детали теста:",
"tip1": "Убедитесь, что Ollama запущен (ollama serve)",
"tip2": "Проверьте, что модель установлена (ollama pull llama3)",
"tip3": "Проверьте ваш API-ключ для OpenAI",
"tip4": "Проверьте сетевое подключение",
"title": "Диагностика",
"troubleshootingTitle": "Советы по устранению неполадок:"
},
"favorites": {
"noFavorites": "Нет избранного",
"pinToFavorite": "Добавить в избранное",
"title": "Избранное",
"toggleSection": "Переключить раздел"
},
"footer": {
"openSource": "Open Source клон",
"privacy": "Конфиденциальность",
"terms": "Условия"
},
"general": {
"add": "Добавить",
"apply": "Применить",
"back": "Назад",
"cancel": "Отмена",
"clean": "Clean",
"clear": "Очистить",
"close": "Закрыть",
"confirm": "Подтвердить",
"edit": "Редактировать",
"error": "Произошла ошибка",
"indexAll": "Index All",
"loading": "Загрузка...",
"next": "Далее",
"operationFailed": "Операция не удалась",
"operationSuccess": "Операция успешна",
"preview": "Предпросмотр",
"previous": "Назад",
"reset": "Сбросить",
"save": "Сохранить",
"select": "Выбрать",
"submit": "Отправить",
"testConnection": "Test Connection",
"tryAgain": "Пожалуйста, попробуйте снова"
},
"generalSettings": {
"description": "Общие настройки приложения",
"title": "Общие настройки"
},
"labels": {
"addLabel": "Add label",
"allLabels": "All Labels",
"changeColor": "Change Color",
"changeColorTooltip": "Change color",
"clearAll": "Clear all",
"confirmDelete": "Are you sure you want to delete this label?",
"count": "{count} меток",
"createLabel": "Create label",
"delete": "Delete",
"deleteTooltip": "Delete label",
"editLabels": "Edit Labels",
"editLabelsDescription": "Create, edit colors, or delete labels.",
"filter": "Filter by Label",
"filterByLabel": "Filter by label",
"labelColor": "Label color",
"labelName": "Label name",
"loading": "Loading...",
"manage": "Manage Labels",
"manageLabels": "Manage labels",
"manageLabelsDescription": "Add or remove labels for this note. Click on a label to change its color.",
"manageTooltip": "Manage Labels",
"namePlaceholder": "Enter label name",
"newLabelPlaceholder": "Create new label",
"noLabels": "Нет меток",
"noLabelsFound": "No labels found.",
"notebookRequired": "⚠️ Labels are only available in notebooks. Move this note to a notebook first.",
"selectedLabels": "Selected Labels",
"showLess": "Show less",
"showMore": "Show more",
"tagAdded": "Tag \"{tag}\" added",
"title": "Labels"
},
"memoryEcho": {
"clickToView": "Нажмите для просмотра",
"comparison": {
"clickToView": "Click to view note",
"helpful": "Helpful",
"helpfulQuestion": "Is this comparison helpful?",
"highSimilarityInsight": "These notes deal with the same topic with a high degree of similarity. They could be merged or consolidated.",
"notHelpful": "Not Helpful",
"similarityInfo": "These notes are connected by {similarity}% similarity",
"title": "💡 Note Comparison",
"untitled": "Untitled"
},
"connection": "connection",
"connections": "Connections",
"connectionsBadge": "{count} connection{plural}",
"dailyInsight": "Daily insight from your notes",
"description": "Proactive connections between your notes",
"dismiss": "Dismiss for now",
"editorSection": {
"close": "Закрыть",
"compare": "Compare",
"compareAll": "Compare all",
"loading": "Loading...",
"merge": "Merge",
"mergeAll": "Merge all",
"title": "⚡ Connected Notes ({count})",
"view": "View"
},
"fused": "Fused",
"fusion": {
"archiveOriginals": "Archive original notes",
"cancel": "Cancel",
"confirmFusion": "Confirm fusion",
"createBacklinks": "Create backlink to original notes",
"edit": "Edit",
"error": "Failed to merge notes",
"finishEditing": "Finish editing",
"generateError": "Failed to generate fusion",
"generateFusion": "Generate the fusion",
"generating": "Generating...",
"keepAllTags": "Keep all tags",
"mergeNotes": "Merge {count} note(s)",
"modify": "Modify",
"noContentReturned": "No fusion content returned from API",
"notesToMerge": "📝 Notes to merge",
"optionalPrompt": "💬 Fusion prompt (optional)",
"optionsTitle": "Fusion options",
"previewTitle": "📝 Preview of merged note",
"promptPlaceholder": "Optional instructions for AI (e.g., 'Keep the formal style of note 1')...",
"success": "Notes merged successfully!",
"title": "🔗 Intelligent Fusion",
"unknownDate": "Unknown date",
"useLatestTitle": "Use latest note as title"
},
"helpful": "Helpful",
"insightReady": "Your insight is ready!",
"notHelpful": "Not Helpful",
"overlay": {
"error": "Ошибка",
"loading": "Loading...",
"noConnections": "No connections found",
"searchPlaceholder": "Search connections...",
"sortBy": "Sort by:",
"sortOldest": "Oldest",
"sortRecent": "Recent",
"sortSimilarity": "Similarity",
"title": "Connected Notes",
"viewAll": "View all side by side"
},
"thanksFeedback": "Thanks for your feedback!",
"thanksFeedbackImproving": "Thanks! We'll use this to improve.",
"title": "I noticed something...",
"viewConnection": "View Connection"
},
"nav": {
"accountSettings": "Настройки аккаунта",
"adminDashboard": "Панель администратора",
"aiSettings": "Настройки ИИ",
"archive": "Архив",
"buyMeACoffee": "Купить мне кофе",
"configureAI": "Настройте функции на базе ИИ, провайдера и предпочтения",
"diagnostics": "Диагностика",
"donateOnKofi": "Пожертвовать на Ko-fi",
"donationDescription": "Сделайте единовременное пожертвование или станьте ежемесячным сторонником.",
"donationNote": "Без комиссий платформы • Мгновенные выплаты • Безопасно",
"favorites": "Избранное",
"generalNotes": "Общие заметки",
"home": "Главная",
"login": "Войти",
"logout": "Выйти",
"manageAISettings": "Управление настройками ИИ",
"myLibrary": "Моя библиотека",
"notebooks": "Блокноты",
"notes": "Заметки",
"proPlan": "Про-план",
"profile": "Профиль",
"quickAccess": "Быстрый доступ",
"recent": "Недавние",
"reminders": "Напоминания",
"settings": "Настройки",
"sponsorDescription": "Станьте ежемесячным спонсором и получите признание.",
"sponsorOnGithub": "Спонсорировать на GitHub",
"support": "Поддержать Memento ☕",
"supportDescription": "Memento на 100% бесплатен и открыт. Ваша поддержка помогает сохранить это.",
"supportDevelopment": "Поддержать разработку Memento ☕",
"trash": "Корзина",
"userManagement": "Управление пользователями",
"workspace": "Рабочее пространство"
},
"notebook": {
"cancel": "Отмена",
"create": "Создать блокнот",
"createDescription": "Начните новую коллекцию для эффективной организации ваших заметок, идей и проектов.",
"createNew": "Создать новый блокнот",
"creating": "Создание...",
"delete": "Удалить блокнот",
"deleteConfirm": "Удалить",
"deleteWarning": "Вы уверены, что хотите удалить этот блокнот? Заметки будут перемещены в Общие заметки.",
"edit": "Редактировать блокнот",
"editDescription": "Измените название, значок и цвет вашего блокнота.",
"generating": "Генерация сводки...",
"labels": "Метки",
"name": "Название блокнота",
"noLabels": "Нет меток",
"selectColor": "Цвет",
"selectIcon": "Значок",
"summary": "Сводка блокнота",
"summaryDescription": "Сгенерируйте сводку на основе ИИ всех заметок в этом блокноте.",
"summaryError": "Ошибка генерации сводки"
},
"notebookSuggestion": {
"description": "Эта заметка, похоже, принадлежит этому блокноту",
"dismiss": "Отклонить",
"dismissIn": "Отклонить (закроется через {timeLeft}с)",
"generalNotes": "Общие заметки",
"move": "Переместить",
"moveToNotebook": "Переместить в блокнот",
"title": "Переместить в {icon} {name}?"
},
"notebooks": {
"allNotebooks": "Все блокноты",
"create": "Создать блокнот",
"createFirst": "Создайте свой первый блокнот",
"noNotebooks": "Нет блокнотов"
},
"notes": {
"add": "Добавить",
"addCollaborators": "Добавить соавторов",
"addImage": "Добавить изображение",
"addItem": "Добавить элемент",
"addLink": "Добавить ссылку",
"addListItem": "+ Элемент списка",
"addNote": "Добавить заметку",
"adding": "Добавление...",
"aiAssistant": "ИИ-помощник",
"archive": "Архивировать",
"backgroundOptions": "Параметры фона",
"changeColor": "Изменить цвет",
"changeSize": "Изменить размер",
"clarifyFailed": "Ошибка уточнения",
"close": "Закрыть",
"color": "Цвет",
"confirmDelete": "Вы уверены, что хотите удалить эту заметку?",
"confirmLeaveShare": "Вы уверены, что хотите покинуть эту общую заметку?",
"contentOrMediaRequired": "Пожалуйста, введите содержимое или добавьте ссылку/изображение",
"copy": "Копировать",
"copyFailed": "Не удалось скопировать заметку",
"copySuccess": "Заметка успешно скопирована!",
"createFirstNote": "Создайте свою первую заметку",
"date": "Дата",
"delete": "Удалить",
"dragToReorder": "Перетащите для изменения порядка",
"duplicate": "Дублировать",
"edit": "Редактировать заметку",
"emptyState": "Здесь нет заметок",
"fileTooLarge": "Файл слишком большой: {fileName}. Максимальный размер - {maxSize}.",
"improveFailed": "Ошибка улучшения",
"inNotebook": "В блокноте",
"invalidDateTime": "Недействительная дата или время",
"invalidFileType": "Недопустимый тип файла: {fileName}. Разрешены только JPEG, PNG, GIF и WebP.",
"itemOrMediaRequired": "Пожалуйста, добавьте хотя бы один элемент или медиа",
"large": "Большой",
"leaveShare": "Покинуть",
"linkAddFailed": "Не удалось добавить ссылку",
"linkAdded": "Ссылка добавлена",
"linkMetadataFailed": "Не удалось получить метаданные ссылки",
"listItem": "Элемент списка",
"makeCopy": "Сделать копию",
"markdown": "Markdown",
"markdownMode": "Markdown",
"markdownOff": "Markdown ВЫКЛ",
"markdownOn": "Markdown ВКЛ",
"markdownPlaceholder": "Сделайте заметку... (Поддерживается Markdown)",
"medium": "Средний",
"more": "Ещё",
"moreOptions": "Больше параметров",
"moveFailed": "Ошибка перемещения",
"newChecklist": "Новый контрольный список",
"newNote": "Новая заметка",
"noContent": "Нет содержимого",
"noNotes": "Нет заметок",
"noNotesFound": "Заметки не найдены",
"noteCreateFailed": "Не удалось создать заметку",
"noteCreated": "Заметка успешно создана",
"others": "Другие",
"pin": "Закрепить",
"pinned": "Закреплённые",
"pinnedNotes": "Закреплённые заметки",
"placeholder": "Сделайте заметку...",
"preview": "Предпросмотр",
"readOnly": "Только чтение",
"recent": "Недавние",
"redo": "Повторить (Ctrl+Y)",
"redoShortcut": "Повторить (Ctrl+Y)",
"remindMe": "Напомнить мне",
"reminderDateTimeRequired": "Пожалуйста, введите дату и время",
"reminderMustBeFuture": "Напоминание должно быть в будущем",
"reminderPastError": "Напоминание должно быть в будущем",
"reminderRemoved": "Напоминание удалено",
"reminderSet": "Напоминание установлено на {datetime}",
"remove": "Remove",
"saving": "Сохранение...",
"setReminder": "Установить напоминание",
"setReminderButton": "Установить напоминание",
"share": "Поделиться",
"shareWithCollaborators": "Поделиться с соавторами",
"sharedBy": "Поделился",
"sharedReadOnly": "Эта заметка предоставлена вам в режиме только для чтения",
"shortenFailed": "Ошибка сокращения",
"showCollaborators": "Показать соавторов",
"size": "Размер",
"small": "Маленький",
"takeNote": "Сделайте заметку...",
"takeNoteMarkdown": "Сделайте заметку... (Поддерживается Markdown)",
"time": "Время",
"title": "Заметки",
"titlePlaceholder": "Заголовок",
"transformFailed": "Ошибка преобразования",
"unarchive": "Разархивировать",
"undo": "Отменить (Ctrl+Z)",
"undoShortcut": "Отменить (Ctrl+Z)",
"unpin": "Открепить",
"unpinned": "Откреплённая",
"untitled": "Без названия",
"uploadFailed": "Не удалось загрузить {filename}",
"view": "Просмотреть заметку"
},
"pagination": {
"next": "→",
"pageInfo": "Страница {currentPage} / {totalPages}",
"previous": "←"
},
"paragraphRefactor": {
"casual": "Непринуждённый",
"expand": "Расширить",
"formal": "Формальный",
"improve": "Улучшить",
"shorten": "Сократить",
"title": "Улучшение текста"
},
"profile": {
"accountSettings": "Настройки аккаунта",
"autoDetect": "Автоопределение",
"changePassword": "Изменить пароль",
"changePasswordDescription": "Обновите ваш пароль. Вам понадобится ваш текущий пароль.",
"confirmPassword": "Подтвердите пароль",
"currentPassword": "Текущий пароль",
"description": "Обновите вашу личную информацию",
"displayName": "Отображаемое имя",
"displaySettings": "Настройки отображения",
"displaySettingsDescription": "Настройте внешний вид и размер шрифта.",
"email": "Эл. почта",
"fontSize": "Размер шрифта",
"fontSizeDescription": "Настройте размер шрифта для лучшей читаемости. Это применяется ко всему тексту интерфейса.",
"fontSizeExtraLarge": "Очень большой",
"fontSizeLarge": "Большой",
"fontSizeMedium": "Средний",
"fontSizeSmall": "Маленький",
"fontSizeUpdateFailed": "Не удалось обновить размер шрифта",
"fontSizeUpdateSuccess": "Размер шрифта успешно обновлён",
"languageDescription": "Этот язык будет использоваться для функций на базе ИИ, анализа содержимого и текста интерфейса.",
"languagePreferences": "Языковые предпочтения",
"languagePreferencesDescription": "Выберите предпочитаемый язык для функций ИИ и интерфейса.",
"languageUpdateFailed": "Не удалось обновить язык",
"languageUpdateSuccess": "Язык успешно обновлён",
"manageAISettings": "Управление настройками ИИ",
"newPassword": "Новый пароль",
"passwordChangeFailed": "Не удалось изменить пароль",
"passwordChangeSuccess": "Пароль успешно изменён",
"passwordError": "Ошибка обновления пароля",
"passwordUpdated": "Пароль обновлён",
"preferredLanguage": "Предпочитаемый язык",
"profileError": "Ошибка обновления профиля",
"profileUpdated": "Профиль обновлён",
"recentNotesUpdateFailed": "Failed to update recent notes setting",
"recentNotesUpdateSuccess": "Recent notes setting updated successfully",
"selectFontSize": "Выбрать размер шрифта",
"selectLanguage": "Выберите язык",
"showRecentNotes": "Show Recent Notes Section",
"showRecentNotesDescription": "Display recent notes (last 7 days) on the main page",
"title": "Профиль",
"updateFailed": "Не удалось обновить профиль",
"updatePassword": "Обновить пароль",
"updateSuccess": "Профиль обновлён"
},
"reminder": {
"cancel": "Отмена",
"reminderDate": "Дата напоминания",
"reminderTime": "Время напоминания",
"removeReminder": "Удалить напоминание",
"save": "Установить напоминание",
"setReminder": "Установить напоминание",
"title": "Напоминание"
},
"resetPassword": {
"confirmNewPassword": "Подтвердите новый пароль",
"description": "Введите ваш новый пароль ниже.",
"invalidLinkDescription": "Эта ссылка для сброса пароля недействительна или истекла.",
"invalidLinkTitle": "Недействительная ссылка",
"loading": "Загрузка...",
"newPassword": "Новый пароль",
"passwordMismatch": "Пароли не совпадают",
"requestNewLink": "Запросить новую ссылку",
"resetPassword": "Сбросить пароль",
"resetting": "Сброс...",
"success": "Пароль успешно сброшен. Теперь вы можете войти.",
"title": "Сброс пароля"
},
"search": {
"exactMatch": "Точное совпадение",
"noResults": "Результаты не найдены",
"placeholder": "Поиск",
"related": "Связанные",
"resultsFound": "Найдено заметок: {count}",
"searchPlaceholder": "Поиск в заметках...",
"searching": "Поиск...",
"semanticInProgress": "ИИ-поиск...",
"semanticTooltip": "Семантический поиск с ИИ"
},
"semanticSearch": {
"exactMatch": "Точное совпадение",
"related": "Связанные",
"searching": "Поиск..."
},
"settings": {
"about": "About",
"account": "Account",
"appearance": "Appearance",
"cleanTags": "Clean Orphan Tags",
"cleanTagsDescription": "Remove tags that are no longer used by any notes",
"description": "Manage your settings and preferences",
"language": "Language",
"languageAuto": "Автоматически",
"maintenance": "Maintenance",
"maintenanceDescription": "Tools to maintain your database health",
"notifications": "Notifications",
"privacy": "Privacy",
"profile": "Профиль",
"searchNoResults": "Результаты не найдены",
"security": "Security",
"selectLanguage": "Select language",
"semanticIndexing": "Semantic Indexing",
"semanticIndexingDescription": "Generate vectors for all notes to enable intent-based search",
"settingsError": "Error saving settings",
"settingsSaved": "Settings saved",
"theme": "Theme",
"themeDark": "Dark",
"themeLight": "Light",
"themeSystem": "System",
"title": "Settings",
"version": "Version"
},
"sidebar": {
"archive": "Archive",
"editLabels": "Edit labels",
"labels": "Labels",
"notes": "Notes",
"reminders": "Reminders",
"trash": "Trash"
},
"support": {
"aiApiCosts": "Расходы на API ИИ:",
"buyMeACoffee": "Купить мне кофе",
"contributeCode": "Внести вклад в код",
"description": "Memento на 100% бесплатен и с открытым кодом. Ваша поддержка помогает сохранить это.",
"directImpact": "Прямое влияние",
"domainSSL": "Домен и SSL:",
"donateOnKofi": "Пожертвовать на Ko-fi",
"donationDescription": "Сделайте разовое пожертвование или станьте ежемесячным сторонником.",
"githubDescription": "Регулярная поддержка • Публичное признание • Ориентировано на разработчиков",
"hostingServers": "Хостинг и серверы:",
"howSupportHelps": "Как помогает ваша поддержка",
"kofiDescription": "Без комиссий платформы • Мгновенные выплаты • Безопасно",
"otherWaysTitle": "Другие способы поддержки",
"reportBug": "Сообщить об ошибке",
"shareTwitter": "Поделиться в Twitter",
"sponsorDescription": "Станьте ежемесячным спонсором и получите признание.",
"sponsorOnGithub": "Спонсировать на GitHub",
"sponsorPerks": "Преимущества спонсора",
"starGithub": "Поставить звезду на GitHub",
"title": "Поддержать разработку Memento",
"totalExpenses": "Общие расходы:",
"transparency": "Прозрачность",
"transparencyDescription": "Я верю в полную прозрачность. Вот как используются пожертвования:"
},
"testPages": {
"titleSuggestions": {
"analyzing": "Анализ...",
"contentLabel": "Содержимое (нужно более 50 слов):",
"error": "Ошибка:",
"idle": "Ожидание",
"noSuggestions": "Пока нет предложений. Напишите 50+ слов и подождите 2 секунды.",
"placeholder": "Напишите минимум 50 слов здесь...",
"status": "Статус:",
"suggestions": "Предложения ({count}):",
"title": "Тест предложений заголовков",
"wordCount": "Количество слов:"
}
},
"time": {
"daysAgo": "{count} дней назад",
"hoursAgo": "{count} часов назад",
"justNow": "Только что",
"minutesAgo": "{count} минут назад",
"today": "Сегодня",
"tomorrow": "Завтра",
"yesterday": "Вчера"
},
"titleSuggestions": {
"available": "Предложения заголовков",
"dismiss": "Отклонить",
"generating": "Генерация...",
"selectTitle": "Выберите заголовок",
"title": "Предложения ИИ"
},
"toast": {
"feedbackFailed": "Ошибка отправки отзыва",
"notesFusionSuccess": "Заметки успешно объединены!",
"openConnectionFailed": "Ошибка открытия соединения",
"openingConnection": "Открытие соединения...",
"operationFailed": "Операция не удалась",
"operationSuccess": "Операция успешна",
"saveFailed": "Ошибка сохранения настройки",
"saved": "Настройка сохранена",
"thanksFeedback": "Спасибо за ваш отзыв!",
"thanksFeedbackImproving": "Спасибо! Мы используем это для улучшения."
},
"trash": {
"deletePermanently": "Удалить навсегда",
"empty": "Корзина пуста",
"restore": "Восстановить",
"title": "Корзина"
},
"ui": {
"close": "Закрыть",
"collapse": "Свернуть",
"expand": "Развернуть",
"open": "Открыть"
}
}