Publication IA: - 4 templates (magazine, brief, essay, simple) avec CSS riche - Rewrite IA (article/exercises/tutorial/reference/mixed) - Modération avec timeout 12s + fallback safe - Quotas publish_enhance par tier (basic=2, pro=15, business=100) - Détection contenu stale (hash) - Migration DB publishedContent/publishedTemplate/publishedSourceHash Fixes: - cheerio v1.2: Element -> AnyNode (domhandler), decodeEntities cast - _isShared ajouté au type Note (champ virtuel serveur) - callout colors PDF export: extraction fonction pure testable - admin/published: guard note.userId null - Cmd+S fonctionne en mode dialog (pas seulement fullPage) i18n: - 23 clés publish* traduites dans les 15 locales - Extension Web Clipper: 13 locales mise à jour Tests: - callout-colors.test.ts (6 tests) - note-visible-in-view.test.ts (5 tests) - entitlements.test.ts + byok-entitlements.test.ts: mock usageLog + unstubAllEnvs - 199/199 tests passent Tracker: user-stories.md sync avec sprint-status.yaml
183 lines
5.7 KiB
JSON
183 lines
5.7 KiB
JSON
{
|
||
"extName": {
|
||
"message": "Веб-клипер Memento"
|
||
},
|
||
"extDescription": {
|
||
"message": "Сохраняйте веб-страницы и выделенный текст в свои блокноты Memento — подключайтесь к вашему собственному серверу Memento."
|
||
},
|
||
"extActionTitle": {
|
||
"message": "Клип на Memento"
|
||
},
|
||
"webClipper": {
|
||
"message": "Веб-клипер"
|
||
},
|
||
"connected": {
|
||
"message": "Подключено"
|
||
},
|
||
"disconnected": {
|
||
"message": "Не подключено"
|
||
},
|
||
"instanceSettings": {
|
||
"message": "URL-адрес момента"
|
||
},
|
||
"instanceUrlLabel": {
|
||
"message": "URL-адрес вашего экземпляра Memento"
|
||
},
|
||
"presetProduction": {
|
||
"message": "Настройки производства · memento-note.com"
|
||
},
|
||
"applyReconnect": {
|
||
"message": "Подать заявку и повторно подключиться"
|
||
},
|
||
"openMomento": {
|
||
"message": "Открыть Моменто"
|
||
},
|
||
"settingsHint": {
|
||
"message": "Вставьте URL-адрес HTTPS (или LAN) вашего сервера Memento. Файлы cookie в этом браузере обрабатывают вход в систему."
|
||
},
|
||
"footerVersion": {
|
||
"message": "Memento Web Clipper <<<ВЕРСИЯ>>>"
|
||
},
|
||
"errPermissionDenied": {
|
||
"message": "Memento не имеет доступа к этой вкладке. Проверьте разрешения для расширения клавиатуры/сайта или откройте боковую панель."
|
||
},
|
||
"notebookUnnamed": {
|
||
"message": "Блокнот без названия"
|
||
},
|
||
"noNotebooks": {
|
||
"message": "Блокнотов пока нет"
|
||
},
|
||
"readingTimeOne": {
|
||
"message": "~1 минута чтения"
|
||
},
|
||
"readingTimeOther": {
|
||
"message": "Прибл. $COUNT$ мин чтения",
|
||
"placeholders": {
|
||
"COUNT": {
|
||
"content": "$1",
|
||
"example": "5"
|
||
}
|
||
}
|
||
},
|
||
"selectionDetected": {
|
||
"message": "Выбор обнаружен"
|
||
},
|
||
"ignore": {
|
||
"message": "игнорировать"
|
||
},
|
||
"selectionHint": {
|
||
"message": "Совет: выделите текст на странице, чтобы выделить его в виде заметки."
|
||
},
|
||
"clipSelection": {
|
||
"message": "Выбор клипа"
|
||
},
|
||
"clipPage": {
|
||
"message": "Вырезать эту страницу"
|
||
},
|
||
"saveLinkOnly": {
|
||
"message": "Сохранить только ссылку"
|
||
},
|
||
"pageNotAccessible": {
|
||
"message": "Невозможно обрезать здесь — эта страница блокирует доступ к расширению."
|
||
},
|
||
"errLoginRequired": {
|
||
"message": "Сначала войдите в Memento в этом браузере."
|
||
},
|
||
"errLoadNotebooks": {
|
||
"message": "Не удалось загрузить блокноты. Попробуйте переподключиться."
|
||
},
|
||
"notebooksLoaded": {
|
||
"message": "Ноутбуки загружены"
|
||
},
|
||
"connecting": {
|
||
"message": "Подключение…"
|
||
},
|
||
"connectedToUrl": {
|
||
"message": "Подключено к $URL$",
|
||
"placeholders": {
|
||
"URL": {
|
||
"content": "$1",
|
||
"example": "https://memento-note.com"
|
||
}
|
||
}
|
||
},
|
||
"restrictedPage": {
|
||
"message": "Страница с ограниченным доступом — вырезайте с помощью панели инструментов Memento или боковой панели."
|
||
},
|
||
"destinationNotebook": {
|
||
"message": "Блокнот назначения"
|
||
},
|
||
"activePage": {
|
||
"message": "Активная страница"
|
||
},
|
||
"previewBeforeSave": {
|
||
"message": "Проверьте перед сохранением"
|
||
},
|
||
"noteTitleLabel": {
|
||
"message": "Заголовок"
|
||
},
|
||
"excerptLabel": {
|
||
"message": "Отрывок"
|
||
},
|
||
"saveToMomento": {
|
||
"message": "Сохранить в Моменто"
|
||
},
|
||
"back": {
|
||
"message": "Назад"
|
||
},
|
||
"analyzingSource": {
|
||
"message": "Анализ источника"
|
||
},
|
||
"statusAnalyzing": {
|
||
"message": "Анализ…"
|
||
},
|
||
"statusSaving": {
|
||
"message": "Сохранение…"
|
||
},
|
||
"processingDetail": {
|
||
"message": "Генерация тегов, семантического резюме и вложений."
|
||
},
|
||
"noteSaved": {
|
||
"message": "Заметка сохранена."
|
||
},
|
||
"sentToNotebook": {
|
||
"message": "Сохранено в $NOTEBOOK$",
|
||
"placeholders": {
|
||
"NOTEBOOK": {
|
||
"content": "$1",
|
||
"example": "Read later"
|
||
}
|
||
}
|
||
},
|
||
"viewInMomento": {
|
||
"message": "Посмотреть в Моменто"
|
||
},
|
||
"clipAnother": {
|
||
"message": "Вырезать другую страницу"
|
||
},
|
||
"failure": {
|
||
"message": "Не удалось завершить"
|
||
},
|
||
"genericError": {
|
||
"message": "Что-то пошло не так при получении вашего экземпляра Memento."
|
||
},
|
||
"retry": {
|
||
"message": "Повторить попытку"
|
||
},
|
||
"errNoSelection": {
|
||
"message": "Сначала выделите текст или вырежьте всю страницу."
|
||
},
|
||
"errAnalyzeFailed": {
|
||
"message": "Не удалось проанализировать эту страницу."
|
||
},
|
||
"errSaveFailed": {
|
||
"message": "Не удалось сохранить заметку."
|
||
},
|
||
"errNetwork": {
|
||
"message": "Проблема с сетью. Проверьте подключение и URL-адрес Memento."
|
||
},
|
||
"bannerPickText": {
|
||
"message": "Выделите текст на странице или вырежьте всю страницу."
|
||
}
|
||
}
|