@moraya/core 0.1.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,3873 @@
1
+ {
2
+ "admin": {
3
+ "__mt": true,
4
+ "title": "Team Admin",
5
+ "tab_members": "Members",
6
+ "tab_kbs": "Knowledge Bases",
7
+ "tab_usage": "Usage",
8
+ "members": "Members",
9
+ "knowledge_bases": "Knowledge Bases",
10
+ "invite_member": "Invite Member",
11
+ "remove_member": "Remove",
12
+ "create_kb": "Create KB",
13
+ "no_members": "No members yet.",
14
+ "no_kbs": "No knowledge bases yet.",
15
+ "col_name": "Name",
16
+ "col_email": "Email",
17
+ "col_role": "Role",
18
+ "col_joined": "Joined",
19
+ "e2e": "E2E",
20
+ "ai": "AI",
21
+ "usage_summary": "Usage Summary",
22
+ "storage": "Storage",
23
+ "notes": "Notes",
24
+ "ai_queries": "AI Queries",
25
+ "active_members": "Active Members",
26
+ "this_month": "this month"
27
+ },
28
+ "agent": {
29
+ "__mt": true,
30
+ "title": "AI Agent",
31
+ "subtitle": "Let AI handle multi-step tasks across your knowledge base",
32
+ "query_placeholder": "Describe a task for the agent to complete...",
33
+ "run": "Run",
34
+ "pause": "Pause",
35
+ "resume": "Resume",
36
+ "cancel": "Cancel",
37
+ "new_task": "New Task",
38
+ "final_answer": "Final Answer",
39
+ "upgrade_required": "AI Agent is available on Personal and above plans.",
40
+ "mode": {
41
+ "react": "ReAct (Adaptive)",
42
+ "plan_execute": "Plan & Execute"
43
+ },
44
+ "history": {
45
+ "title": "Agent History",
46
+ "search_placeholder": "Search tasks...",
47
+ "no_results": "No tasks match your search.",
48
+ "empty": "No agent tasks yet. Start your first task!",
49
+ "steps": "steps"
50
+ },
51
+ "market": {
52
+ "title": "Agent Templates",
53
+ "subtitle": "Browse ready-to-use agent templates",
54
+ "search_placeholder": "Search templates...",
55
+ "no_results": "No templates match your search.",
56
+ "all_tags": "All",
57
+ "use": "Use Template"
58
+ }
59
+ },
60
+ "ai": {
61
+ "title": "AI",
62
+ "rules_active": "Правила MORAYA.md активны ({count} разделов)",
63
+ "clear_chat": "Очистить чат",
64
+ "unconfigured": "AI не настроен.",
65
+ "unconfigured_hint": "Откройте Настройки ({shortcut}) и укажите ваш API-ключ, чтобы включить функции AI.",
66
+ "open_settings": "Открыть настройки AI",
67
+ "open_image_settings": "Открыть настройки AIGC",
68
+ "text_ai_label": "Текстовый AI (генерация промптов)",
69
+ "image_ai_label": "Графический AI (генерация изображений)",
70
+ "welcome_title": "Чем могу помочь?",
71
+ "welcome_hint": "Введите сообщение или используйте {kbd} для команд",
72
+ "you": "Вы",
73
+ "assistant": "AI",
74
+ "typing": "печатает...",
75
+ "placeholder": "Спросите AI что угодно...",
76
+ "placeholder_selection": "Спросите о выделенном...",
77
+ "send": "Отправить (⌘↵)",
78
+ "stop": "Остановить (Esc)",
79
+ "retry": "Повторить",
80
+ "interrupted": "Прервано",
81
+ "insert_to_editor": "Вставить в редактор",
82
+ "replace_selection": "Заменить выделение",
83
+ "attach_image": "Прикрепить изображение",
84
+ "attach_image_max": "Максимум {max} изображений",
85
+ "remove_image": "Удалить изображение",
86
+ "close_preview": "Закрыть предпросмотр",
87
+ "more_actions": "Ещё действия",
88
+ "voice_transcription": "Голосовая транскрипция AI",
89
+ "config": {
90
+ "title": "Настройка AI",
91
+ "provider": "Провайдер",
92
+ "api_key": "API Key",
93
+ "api_key_placeholder": "Введите API-ключ {provider}",
94
+ "api_key_not_required": "Не требуется для Ollama",
95
+ "base_url": "Базовый URL",
96
+ "model": "Модель",
97
+ "model_placeholder": "Введите название модели",
98
+ "max_tokens": "Макс. токенов",
99
+ "temperature": "Температура",
100
+ "test_connection": "Проверить соединение",
101
+ "testing": "Проверка...",
102
+ "connected": "Подключено!",
103
+ "failed": "Ошибка",
104
+ "test_failed": "Ошибка проверки соединения"
105
+ },
106
+ "providers": {
107
+ "claude": "Anthropic Claude",
108
+ "openai": "OpenAI",
109
+ "gemini": "Google Gemini",
110
+ "deepseek": "DeepSeek",
111
+ "ollama": "Ollama (Локальный)",
112
+ "custom": "Пользовательский API",
113
+ "grok": "xAI Grok",
114
+ "mistral": "Mistral AI",
115
+ "glm": "Zhipu GLM",
116
+ "minimax": "MiniMax",
117
+ "doubao": "Doubao (ByteDance)"
118
+ },
119
+ "multi_model": {
120
+ "add_model": "+ Добавить модель",
121
+ "default": "По умолчанию",
122
+ "set_default": "Установить по умолчанию",
123
+ "no_models": "Модели AI не настроены",
124
+ "no_models_hint": "Добавьте модель AI, чтобы начать использовать функции AI.",
125
+ "no_image_models": "Модели для генерации изображений не настроены",
126
+ "no_image_models_hint": "Добавьте модель генерации изображений, чтобы использовать функции AI-изображений."
127
+ },
128
+ "image_config": {
129
+ "title": "AI генерация изображений",
130
+ "provider": "Провайдер",
131
+ "provider_openai": "OpenAI DALL-E",
132
+ "provider_grok": "Grok (xAI)",
133
+ "provider_custom": "Пользовательский (OpenAI-совместимый)",
134
+ "api_key": "API Key",
135
+ "api_key_placeholder": "Введите API-ключ для изображений",
136
+ "base_url": "Базовый URL",
137
+ "model": "Модель",
138
+ "model_placeholder": "Введите название модели",
139
+ "default_size": "Размер по умолчанию",
140
+ "ratio": "Соотношение сторон",
141
+ "size_level": "Размер",
142
+ "size_large": "Большой",
143
+ "size_medium": "Средний",
144
+ "size_small": "Маленький",
145
+ "provider_gemini": "Google Gemini Imagen",
146
+ "provider_qwen": "Qwen (Alibaba)",
147
+ "provider_doubao": "Doubao (ByteDance)"
148
+ },
149
+ "commands": {
150
+ "write": "Написать",
151
+ "write_desc": "Написать содержимое по вашему запросу",
152
+ "continue": "Продолжить",
153
+ "continue_desc": "Продолжить с того места, где остановился текст",
154
+ "summarize": "Резюмировать",
155
+ "summarize_desc": "Резюмировать выделенный текст",
156
+ "translate": "Перевести",
157
+ "translate_desc": "Перевести текст на другой язык",
158
+ "improve": "Улучшить",
159
+ "improve_desc": "Улучшить качество текста",
160
+ "fix_grammar": "Исправить грамматику",
161
+ "fix_grammar_desc": "Исправить грамматические и орфографические ошибки",
162
+ "simplify": "Упростить",
163
+ "simplify_desc": "Упростить сложный текст",
164
+ "expand": "Расширить",
165
+ "expand_desc": "Расширить тему",
166
+ "outline": "Создать план",
167
+ "outline_desc": "Создать план статьи",
168
+ "explain": "Объяснить",
169
+ "explain_desc": "Объяснить выделенный текст"
170
+ },
171
+ "prompts": {
172
+ "empty_response": "Вы вернули пустой ответ. Пожалуйста, продолжите задачу: либо выполните необходимые вызовы инструментов, либо подведите итог выполненного и перечислите оставшиеся пункты. Не возвращайте пустое сообщение.",
173
+ "empty_response_continue": "\n\nВаше последнее сообщение было: «{lastMessage}»\nПожалуйста, продолжите с этого места.",
174
+ "truncation_continue": "Ваш предыдущий ответ был обрезан из-за ограничения длины вывода. Текст выше был сохранён. Теперь, пожалуйста, завершите задачу, выполнив необходимые вызовы инструментов. Не повторяйте содержимое — используйте его напрямую в аргументах инструмента.",
175
+ "continuation_prompt": "Пожалуйста, продолжите и выполните необходимые вызовы инструментов для завершения задачи. Не повторяйте то, что уже было сказано — переходите непосредственно к вызовам инструментов.",
176
+ "mcp_tool_prompt": "Используйте инструмент {toolName} (от {serverName})",
177
+ "review_context": "---\nThis document has {count} pending review comments:\n{items}\n---",
178
+ "review_context_item": "[Line {line}] @{author}: \"{text}\"",
179
+ "review_context_item_unanchored": "[Position lost] @{author}: \"{text}\"",
180
+ "ai_review_request": "Please review the current document and identify issues across four dimensions: logic, expression, fact, and structure. Use the write_ai_reviews tool to return up to 10 structured review comments. For each, provide markedText (an exact text fragment from the document being reviewed), comment (your review), and dimension (one of: logic, expression, fact, structure). If your model does not support tool calls, return the same data as a JSON code block.",
181
+ "ai_improve_request": "The document has {count} pending review comments:\n{items}\n\nPlease apply these reviews and improve the document. Use the update_editor_content tool to write the improved full document. Preserve formatting and original structure where possible.",
182
+ "ai_summary_request": "The document has {count} review comments (including resolved):\n{items}\n\nPlease summarize them across four dimensions (logic / expression / fact / structure), and rate the priority (high / medium / low) for each dimension.",
183
+ "ai_respond_request": "The document contains this text:\n\"{markedText}\"\n\nThe reviewer commented:\n\"{commentText}\"\n\nPlease provide specific suggestions for revision. Do NOT modify the document — give suggestions only."
184
+ },
185
+ "detection": {
186
+ "intent_prefixes": "Я буду|Мне нужно|Я должен|Позвольте мне|Сначала|Теперь|Далее",
187
+ "action_verbs": "создать|написать|прочитать|обновить|загрузить|сгенерировать|получить|проверить|протестировать|использовать|выполнить|отправить|искать|найти|сохранить|удалить|редактировать|настроить|экспортировать|показать",
188
+ "continuation_phrases": "Сначала|Далее|Затем|Теперь",
189
+ "remaining_phrases": "оставшийся|следующий|шаг \\d+",
190
+ "unfinished_phrases": "нужно сделать|TODO|следующий шаг|ещё не|в ожидании"
191
+ },
192
+ "sections": {
193
+ "image_ai": "ИИ изображений",
194
+ "image_aihint": "Конфигурации модели генерации изображений с ИИ."
195
+ },
196
+ "generating": "Генерация…",
197
+ "not_configured": "Поставщик AI не настроен"
198
+ },
199
+ "ai_budget": {
200
+ "__mt": true,
201
+ "title": "AI Budget",
202
+ "description": "Set monthly and per-call spending limits for AI requests routed through Moraya.",
203
+ "monthly_spend": "Monthly Spend",
204
+ "monthly_limit": "Monthly Limit",
205
+ "per_call_limit": "Per-Call Limit",
206
+ "hard_stop": "Hard Stop",
207
+ "hard_stop_hint": "Block all AI calls once the monthly limit is reached.",
208
+ "zero_unlimited": "0 = unlimited",
209
+ "limit_reached": "Monthly budget limit reached. AI calls are blocked.",
210
+ "near_limit": "You have used {pct}% of your monthly budget.",
211
+ "saved": "Settings saved.",
212
+ "save": "Save",
213
+ "reset": "Reset Month",
214
+ "how_it_works": "How It Works",
215
+ "info1": "The router tracks estimated and actual costs per API call.",
216
+ "info2": "Hard stop blocks new calls; soft limit shows warnings only.",
217
+ "info3": "Monthly counters reset on the 1st of each month automatically."
218
+ },
219
+ "ai_history": {
220
+ "__mt": true,
221
+ "title": "AI Call History",
222
+ "total_calls": "Total Calls",
223
+ "month_cost": "This Month",
224
+ "success_rate": "Success Rate",
225
+ "tab_list": "Calls",
226
+ "tab_provider": "By Provider",
227
+ "tab_daily": "By Day",
228
+ "no_records": "No call records yet.",
229
+ "failed": "Failed",
230
+ "provider": "Provider",
231
+ "calls": "Calls",
232
+ "cost": "Cost",
233
+ "share": "Share"
234
+ },
235
+ "app": {
236
+ "__mt": true,
237
+ "name": "Moraya Web",
238
+ "tagline": "Your AI, your data, your cloud."
239
+ },
240
+ "audit": {
241
+ "report_title": "Document Audit Report: {filename}",
242
+ "generated_at": "Generated at",
243
+ "knowledge_base": "Knowledge base",
244
+ "git_repo": "Git repository",
245
+ "branch": "branch",
246
+ "commit_history": "Commit History",
247
+ "col_time": "Time",
248
+ "col_author": "Author",
249
+ "col_summary": "Summary",
250
+ "review_summary": "Review Summary",
251
+ "summary_stats": "Total {total} review(s); {resolved} resolved, {wontfix} won't fix, {open} open",
252
+ "resolved_section": "Resolved ({count})",
253
+ "wontfix_section": "Won't Fix ({count})",
254
+ "open_section": "Open ({count})",
255
+ "resolved_note": "resolved at {date} by {user}",
256
+ "wontfix_note": "marked won't fix at {date} by {user}",
257
+ "no_reviews": "No reviews recorded",
258
+ "showing_last_commits": "(Showing only the last {count} commits)",
259
+ "not_git_bound": "Not linked to a Git repository",
260
+ "line_n": "Line {n}",
261
+ "unanchored_label": "Position lost",
262
+ "export_dialog_title": "Export Audit Report",
263
+ "export_filename": "Filename",
264
+ "export_format": "Format",
265
+ "format_markdown": "Markdown (.md)",
266
+ "include_history": "Commit history (last {count} commits)",
267
+ "include_reviews": "Review summary ({total} reviews, {resolved} resolved)",
268
+ "anonymize_authors": "Anonymize authors (@{name} → @reviewer-1)",
269
+ "include_full_discussion": "Include full review discussion (default: summary only)",
270
+ "privacy_notice": "The report will be saved locally. No data is sent to any external service.",
271
+ "cancel": "Cancel",
272
+ "save": "Save…",
273
+ "title": "Audit Log",
274
+ "events": "events",
275
+ "verify_integrity": "Verify Integrity",
276
+ "chain_valid": "Chain Valid",
277
+ "chain_invalid": "Chain Broken",
278
+ "no_events": "No audit events found.",
279
+ "loading": "Loading audit log…"
280
+ },
281
+ "auth": {
282
+ "__mt": true,
283
+ "login": "Sign in with Picora",
284
+ "logout": "Sign out",
285
+ "logging_in": "Signing in...",
286
+ "login_title": "Welcome to Moraya Web",
287
+ "login_subtitle": "Sign in with your Picora account to access your knowledge base.",
288
+ "continue_offline": "Continue offline (no sync)",
289
+ "connect_picora": "Connect Picora to sync",
290
+ "connected_to_picora": "Connected to Picora",
291
+ "disconnect": "Disconnect",
292
+ "local_only_notice": "You are working locally. Notes are stored on this device only."
293
+ },
294
+ "billing": {
295
+ "__mt": true,
296
+ "title": "Billing",
297
+ "current_plan": "Current Plan",
298
+ "upgrade_title": "Upgrade Your Plan",
299
+ "upgrade_subtitle": "Get more AI calls, unlimited storage, and premium features.",
300
+ "downgrade_title": "Downgrade Plan",
301
+ "downgrade_subtitle": "You can choose to downgrade effective immediately or at the end of your billing period.",
302
+ "cancel_title": "Cancel Subscription",
303
+ "cancel_subtitle": "We're sorry to see you go. You can cancel effective immediately or at the end of your billing period.",
304
+ "plan_personal": "Personal",
305
+ "plan_team": "Team",
306
+ "plan_enterprise": "Enterprise",
307
+ "plan_connect": "Connect (Free)",
308
+ "monthly": "Monthly",
309
+ "yearly": "Yearly",
310
+ "yearly_savings": "Save 2 months",
311
+ "per_seat": "/seat",
312
+ "pay_with_stripe": "Pay with Card (Stripe)",
313
+ "pay_with_alipay": "Pay with Alipay",
314
+ "seats_label": "Number of seats",
315
+ "seats_hint": "Minimum 1 seat",
316
+ "effective_immediate": "Effective immediately",
317
+ "effective_period_end": "At the end of the billing period",
318
+ "cancel_confirm": "I understand my subscription will end",
319
+ "downgrade_confirm": "I understand I may lose access to some features",
320
+ "confirm_cancel": "Cancel Subscription",
321
+ "confirm_downgrade": "Confirm Downgrade",
322
+ "refund_title": "Request Refund",
323
+ "refund_14day": "As a first-time subscriber within 14 days, you qualify for an automatic refund.",
324
+ "refund_request": "Request Refund",
325
+ "refund_pending": "Refund request submitted. Our team will review it.",
326
+ "back_to_billing": "Back to Billing",
327
+ "loading": "Loading...",
328
+ "error": "Something went wrong. Please try again.",
329
+ "checkout_redirect": "Redirecting to checkout...",
330
+ "alipay_scan": "Scan with Alipay app to complete payment",
331
+ "devices_title": "Manage Devices",
332
+ "devices_subtitle": "Devices signed into your account.",
333
+ "device_current": "This device",
334
+ "device_revoke": "Sign out",
335
+ "device_revoke_confirm": "Sign out this device?",
336
+ "device_last_active": "Last active",
337
+ "devices_limit_reached": "You've reached the device limit for your plan.",
338
+ "usage_ai_calls": "AI Calls",
339
+ "usage_kbs": "Knowledge Bases",
340
+ "usage_devices": "Devices",
341
+ "usage_of": "{used} of {limit}",
342
+ "upgrade_prompt_ai": "You've used {used}/{limit} AI calls this month.",
343
+ "upgrade_prompt_kb": "You've reached your KB limit ({limit}).",
344
+ "upgrade_now": "Upgrade Now",
345
+ "plan_features_personal": "Unlimited KBs, 2000 AI calls/month, BYO API key, E2E encryption, BYOC storage",
346
+ "plan_features_team": "Everything in Personal, team collaboration, 5000 AI calls/month, Cloud KMS",
347
+ "currency_usd": "USD ($)",
348
+ "currency_cny": "CNY (¥)",
349
+ "currency_eur": "EUR (€)",
350
+ "change_currency": "Change currency"
351
+ },
352
+ "cloud_picker": {
353
+ "title_image": "Вставить облачное изображение",
354
+ "title_audio": "Вставить облачное аудио",
355
+ "title_video": "Вставить облачное видео",
356
+ "no_targets": "Цель Picora не настроена. Добавьте её в Настройках → База знаний.",
357
+ "scope_this_kb": "Эта база знаний",
358
+ "scope_all": "Все файлы",
359
+ "scope_no_kb": "Без базы знаний",
360
+ "tab_recent": "Последние",
361
+ "tab_all": "Все",
362
+ "tab_favorites": "Избранное",
363
+ "search_placeholder": "Поиск…",
364
+ "grid_view": "Сетка",
365
+ "list_view": "Список",
366
+ "error_title": "Ошибка загрузки",
367
+ "last_cache": "Последняя загрузка",
368
+ "empty_title": "Файлы не найдены",
369
+ "empty_sub": "Измените фильтры или загрузите файлы в Picora.",
370
+ "loading_more": "Загрузка…",
371
+ "selected_count": "Выбрано: {n}",
372
+ "insert_as_html": "Вставить как HTML",
373
+ "insert_btn": "Вставить",
374
+ "processing": "Обработка",
375
+ "public": "Публичный",
376
+ "private": "Приватный",
377
+ "favorite": "В избранное",
378
+ "copy_url": "Копировать URL",
379
+ "privacy_title": "Выбраны приватные файлы",
380
+ "privacy_desc": "{n} файл(ов) являются приватными и могут быть недоступны публично.",
381
+ "privacy_warn": "Публикация файлов позволит любому, у кого есть ссылка, просматривать их.",
382
+ "suppress_privacy": "Больше не предупреждать",
383
+ "make_public_insert": "Сделать публичным и вставить",
384
+ "insert_anyway": "Вставить в любом случае",
385
+ "copy_markdown": "Скопировать Markdown",
386
+ "empty_kb_scoped_sub": "В текущей KB нет файлов. Прежние загрузки могут не быть связаны с этой KB.",
387
+ "switch_scope_all": "Показать все файлы аккаунта",
388
+ "url_missing": "URL медиа отсутствует — элемент может быть ещё не готов."
389
+ },
390
+ "command_palette": {
391
+ "placeholder": "Поиск файлов, команд или базы знаний...",
392
+ "files": "Файлы",
393
+ "commands": "Команды",
394
+ "semantic_search": "Семантический поиск",
395
+ "keyword_search": "Поиск по ключевым словам",
396
+ "no_results": "Результаты не найдены"
397
+ },
398
+ "commands": {
399
+ "__mt": true,
400
+ "palette_title": "Command Palette",
401
+ "placeholder": "Search commands...",
402
+ "no_results": "No commands found",
403
+ "type_to_search": "Type to search commands",
404
+ "go_home": "Go to Home",
405
+ "open_settings": "Open Settings",
406
+ "open_workflows": "Open Workflows",
407
+ "toggle_sidebar": "Toggle Sidebar",
408
+ "sidebar_kb": "Sidebar: Knowledge Bases",
409
+ "sidebar_explorer": "Sidebar: Files",
410
+ "sidebar_outline": "Sidebar: Outline"
411
+ },
412
+ "common": {
413
+ "save": "Сохранить",
414
+ "cancel": "Отмена",
415
+ "close": "Закрыть",
416
+ "add": "Добавить",
417
+ "remove": "Удалить",
418
+ "connect": "Подключить",
419
+ "disconnect": "Отключить",
420
+ "insert": "Вставить",
421
+ "replace": "Заменить",
422
+ "copy": "Копировать",
423
+ "edit": "Редактировать",
424
+ "delete": "Удалить",
425
+ "browse": "Изменить",
426
+ "clear": "Сбросить",
427
+ "play": "Воспроизвести",
428
+ "stop": "Остановить",
429
+ "start": "Запустить",
430
+ "untitled": "Без названия",
431
+ "retry": "Повторить",
432
+ "refresh": "Обновить",
433
+ "new": "Новый"
434
+ },
435
+ "compose": {
436
+ "__mt": true,
437
+ "title": "Compose article",
438
+ "start_over": "Start over",
439
+ "stepper_label": "Compose stages",
440
+ "step": {
441
+ "topic": "Topic",
442
+ "article": "Article",
443
+ "cover": "Cover",
444
+ "review": "Review"
445
+ },
446
+ "topic": {
447
+ "title": "What's the article about?",
448
+ "hint": "Describe the topic, audience, key points — the more specific, the better.",
449
+ "placeholder": "e.g. A deep dive on why Rust's async model handles backpressure better than Go's…",
450
+ "next": "Next: write article →"
451
+ },
452
+ "tone": {
453
+ "title": "Tone",
454
+ "general": "General",
455
+ "marketing": "Marketing",
456
+ "technical": "Technical",
457
+ "story": "Story"
458
+ },
459
+ "length": {
460
+ "title": "Length",
461
+ "short": "Short",
462
+ "medium": "Medium",
463
+ "long": "Long"
464
+ },
465
+ "article": {
466
+ "title": "Write the article",
467
+ "ready": "Ready to generate. Tap below to stream the article.",
468
+ "generate": "Generate article",
469
+ "generating": "Streaming from the model…",
470
+ "cancel": "Stop",
471
+ "regenerate": "Regenerate",
472
+ "next": "Next: cover image →",
473
+ "no_provider": "No AI provider configured. Set one up to generate articles.",
474
+ "configure": "Configure AI provider"
475
+ },
476
+ "cover": {
477
+ "title": "Cover image",
478
+ "prompt_hint": "This prompt was auto-derived from your article. Edit if you want a specific look.",
479
+ "prompt_placeholder": "Cover illustration for: ...",
480
+ "generate": "Generate cover",
481
+ "generating": "Generating…",
482
+ "next": "Next: review →",
483
+ "preview_alt": "Cover image preview",
484
+ "no_provider": "No image generation provider configured. Set one up to make cover images.",
485
+ "configure": "Configure image-gen provider",
486
+ "style": "Style"
487
+ },
488
+ "review": {
489
+ "title": "Review & publish",
490
+ "publish_hint": "Insert into a note, or set up an MCP publish target to send this article to WeChat / RSS / custom platforms.",
491
+ "insert": "Insert into note",
492
+ "configure_publish": "Configure publish target",
493
+ "uploading": "Uploading cover…",
494
+ "cover_upload_failed": "Cover upload failed — inserting without it.",
495
+ "insert_failed": "Insert failed: {err}"
496
+ },
497
+ "publish": {
498
+ "send": "Send to…",
499
+ "opening": "Preparing…",
500
+ "picker_title": "Where to publish?",
501
+ "empty": "No publish targets configured yet.",
502
+ "configure": "Configure publish targets",
503
+ "success": "Published to {target}",
504
+ "failed": "{target} failed: {err}"
505
+ },
506
+ "drafts": {
507
+ "title": "Drafts",
508
+ "new": "New draft",
509
+ "new_sub": "Archive current and start fresh",
510
+ "active": "Active",
511
+ "untitled": "Untitled draft",
512
+ "delete": "Delete draft"
513
+ }
514
+ },
515
+ "conflict": {
516
+ "__mt": true,
517
+ "title": "Conflict Detected",
518
+ "description": "This note was edited on another device.",
519
+ "keep_server": "Keep server version",
520
+ "keep_local": "Keep my version",
521
+ "merge": "Merge manually"
522
+ },
523
+ "context_menu": {
524
+ "cut": "Вырезать",
525
+ "copy": "Копировать",
526
+ "paste": "Вставить",
527
+ "upload_all_images": "Загрузить все изображения на хостинг",
528
+ "upload_starting": "Загрузка изображений на хостинг...",
529
+ "upload_image_success": "Загружено: {name}",
530
+ "upload_image_failed": "Ошибка: {name} — {error}",
531
+ "upload_all_complete": "Загрузка завершена: {success}/{total} успешно",
532
+ "upload_no_config": "Сначала настройте хостинг изображений в Настройках",
533
+ "insert_cloud_image": "Вставить облачное изображение…",
534
+ "insert_cloud_audio": "Вставить облачное аудио…",
535
+ "insert_cloud_video": "Вставить облачное видео…"
536
+ },
537
+ "diff": {
538
+ "title": "{filename} · {hash1} ↔ {hash2}",
539
+ "back_to_edit": "← Back to Edit",
540
+ "no_changes": "The two versions are identical — no differences",
541
+ "binary_file": "This version contains binary content and cannot be displayed as text diff",
542
+ "added_line": "Added line",
543
+ "deleted_line": "Deleted line",
544
+ "stats_line": "+{added} added · -{deleted} deleted",
545
+ "left_label": "Old",
546
+ "right_label": "New"
547
+ },
548
+ "editor": {
549
+ "source_mode": "Source",
550
+ "visual_mode": "Visual",
551
+ "split_mode": "Split",
552
+ "unsaved_title": "Несохранённые изменения",
553
+ "unsaved_new_doc_msg": "У вас есть несохранённое содержимое, которое будет потеряно. Сохранить?",
554
+ "save_first": "Сохранить",
555
+ "discard_changes": "Не сохранять",
556
+ "loading": {
557
+ "parsing": "Анализ Markdown…",
558
+ "rendering": "Отрисовка…"
559
+ },
560
+ "saving": "Saving...",
561
+ "saved": "Saved",
562
+ "offline_cached": "Saved offline",
563
+ "conflict": "Conflict detected",
564
+ "unsaved_changes": "You have unsaved changes. Discard?",
565
+ "discard": "Discard",
566
+ "cancel": "Cancel",
567
+ "words": "words",
568
+ "chars": "chars",
569
+ "new_note": "New note"
570
+ },
571
+ "enterprise": {
572
+ "__mt": true,
573
+ "hsm": {
574
+ "title": "Hardware Security Module (HSM)",
575
+ "subtitle": "Connect your HSM provider for FIPS 140-2 Level 3+ key operations",
576
+ "upgrade_required": "HSM integration requires the Enterprise plan.",
577
+ "providers": {
578
+ "aws": "AWS CloudHSM",
579
+ "aliyun": "Aliyun HSM",
580
+ "pkcs11": "PKCS#11 (Generic)"
581
+ },
582
+ "aws": {
583
+ "cluster_id": "Cluster ID",
584
+ "region": "AWS Region"
585
+ },
586
+ "aliyun": {
587
+ "instance_id": "Instance ID",
588
+ "region": "Region"
589
+ },
590
+ "pkcs11": {
591
+ "lib_path": "Library Path (.so / .dll / .dylib)",
592
+ "slot": "Slot ID",
593
+ "supported_mechanisms": "Supported Mechanisms"
594
+ }
595
+ },
596
+ "orgs": {
597
+ "title": "Multi-Organization Management",
598
+ "subtitle": "Manage seat allocation and cross-org knowledge sharing",
599
+ "upgrade_required": "Multi-org management requires the Enterprise plan.",
600
+ "seat_allocation": "Seat Allocation",
601
+ "total_seats": "Total Seats",
602
+ "allocated": "Allocated",
603
+ "unallocated": "Unallocated",
604
+ "org_list": "Organizations",
605
+ "members": "Members",
606
+ "cross_org_sharing": "Cross-Org Sharing",
607
+ "shares_to": "shares KBs to",
608
+ "kb_ids_placeholder": "kb-1, kb-2, ...",
609
+ "request_share": "Request Share"
610
+ },
611
+ "compliance": {
612
+ "title": "Compliance & Archiving",
613
+ "subtitle": "GDPR, HIPAA, SOC2, ISO 27001 compliance exports and WORM archiving",
614
+ "upgrade_required": "Compliance archiving requires the Enterprise plan.",
615
+ "tabs": {
616
+ "retention": "Retention",
617
+ "worm": "WORM",
618
+ "export": "Export"
619
+ },
620
+ "retention": {
621
+ "title": "7-Year Retention",
622
+ "hint": "Records are retained for 7 years and cannot be deleted during this period.",
623
+ "days_left": "days left",
624
+ "years": "years"
625
+ },
626
+ "worm": {
627
+ "title": "WORM Records",
628
+ "description": "Write-Once-Read-Many records are immutable once created.",
629
+ "immutable_label": "Immutable",
630
+ "immutable_desc": "Records cannot be modified or deleted after creation.",
631
+ "retention_years": "Retention Period"
632
+ },
633
+ "export": {
634
+ "title": "Compliance Export",
635
+ "standard": "Standard",
636
+ "format": "Format",
637
+ "generate": "Generate Export",
638
+ "applicable_events": "Applicable audit events"
639
+ }
640
+ },
641
+ "custom_domain": {
642
+ "title": "Custom Domain",
643
+ "subtitle": "Use your own domain name for the Moraya workspace.",
644
+ "upgrade_required": "Custom domain requires the Enterprise plan.",
645
+ "hostname": "Your Domain",
646
+ "cname_target": "CNAME Target",
647
+ "dns_record": "DNS Record to Add",
648
+ "dns_hint": "Add this CNAME record to your DNS provider and wait for propagation (up to 48h).",
649
+ "save": "Save & Verify",
650
+ "verifying_hint": "Verification in progress. DNS propagation may take up to 48 hours."
651
+ },
652
+ "custom_ai": {
653
+ "title": "Custom AI Endpoint",
654
+ "subtitle": "Connect your own OpenAI-compatible LLM endpoint.",
655
+ "upgrade_required": "Custom AI endpoints require the Enterprise plan.",
656
+ "add_provider": "Add Provider",
657
+ "provider_name": "Provider Name",
658
+ "base_url": "Base URL",
659
+ "api_key_ref": "API Key Reference (Keychain ID)",
660
+ "models_csv": "Models (comma-separated)",
661
+ "add": "Add Provider",
662
+ "saved_providers": "Saved Providers",
663
+ "context_window": "Context window",
664
+ "models": "models",
665
+ "openai_compatible": "OpenAI-compatible",
666
+ "custom_format": "Custom format"
667
+ },
668
+ "data_residency": {
669
+ "title": "Data Residency",
670
+ "subtitle": "Control where your organization's data is stored and processed.",
671
+ "upgrade_required": "Data residency control requires the Enterprise plan.",
672
+ "primary_region": "Primary Region",
673
+ "allowed_regions": "Allowed Regions",
674
+ "restrict_cross_region": "Restrict cross-region data transfers",
675
+ "filter_by_compliance": "Filter by Compliance Standard",
676
+ "all": "All",
677
+ "requirements": "Legal Requirements",
678
+ "save_policy": "Save Policy",
679
+ "policy_saved": "Policy saved"
680
+ }
681
+ },
682
+ "entitlement": {
683
+ "__mt": true,
684
+ "connect": "Connect",
685
+ "personal": "Personal",
686
+ "team": "Team",
687
+ "enterprise": "Enterprise",
688
+ "current_plan": "Current plan",
689
+ "upgrade": "Upgrade"
690
+ },
691
+ "errors": {
692
+ "ai_not_configured": "AI не настроен.",
693
+ "ai_request_failed": "Ошибка запроса к AI",
694
+ "chat_request_failed": "Ошибка запроса чата",
695
+ "unknown_command": "Неизвестная команда AI: {command}",
696
+ "auth": {
697
+ "picora_token_expired": "Session expired. Please sign in again.",
698
+ "picora_plan_expired": "Your Picora plan has expired. Please renew or upgrade.",
699
+ "oauth_state_missing": "Login session not found. Please try again.",
700
+ "csrf_state_mismatch": "Security check failed. Please try again."
701
+ },
702
+ "storage": {
703
+ "network_offline": "You're offline. Changes saved locally.",
704
+ "conflict_detected": "Someone else edited this note. Please resolve the conflict.",
705
+ "not_found": "Note not found.",
706
+ "access_denied": "Access denied.",
707
+ "too_large": "File is too large.",
708
+ "quota_exceeded": "Storage quota exceeded.",
709
+ "rate_limited": "Too many requests. Please wait.",
710
+ "server_error": "Server error. Please try again."
711
+ },
712
+ "editor": {
713
+ "mount_failed": "Editor failed to load. Please refresh the page."
714
+ },
715
+ "browser": {
716
+ "unsupported": "Your browser is not supported. Please use Chrome 96+, Firefox 95+, or Safari 14+."
717
+ },
718
+ "internal": {
719
+ "unknown": "An unexpected error occurred."
720
+ },
721
+ "ai": {
722
+ "e2e_proxy_blocked": "Moraya proxy AI is not available in E2E mode. Please use your own API key.",
723
+ "e2e_rag_blocked": "Server-side RAG requires Cloud KMS mode."
724
+ },
725
+ "kms": {
726
+ "gcp_not_implemented": "GCP KMS is not yet supported."
727
+ }
728
+ },
729
+ "explorer": {
730
+ "__mt": true,
731
+ "title": "Files",
732
+ "filter_placeholder": "Filter notes...",
733
+ "empty": "No notes yet",
734
+ "no_results": "No matching notes",
735
+ "new_note": "New note",
736
+ "new_folder": "New folder",
737
+ "rename": "Rename",
738
+ "delete": "Delete",
739
+ "favorite": "Add to favorites",
740
+ "unfavorite": "Remove from favorites",
741
+ "context_menu": "File options",
742
+ "tags": "Tags",
743
+ "no_tags": "No tags found",
744
+ "untagged": "Untagged"
745
+ },
746
+ "export": {
747
+ "export_as": "Экспорт в {format}",
748
+ "pdf": "PDF",
749
+ "html": "HTML (со стилями)",
750
+ "html_plain": "HTML (без стилей)",
751
+ "image": "Изображение (PNG)",
752
+ "doc": "Word (.doc)",
753
+ "rtf": "RTF",
754
+ "epub": "Epub",
755
+ "latex": "LaTeX",
756
+ "mediawiki": "MediaWiki",
757
+ "rst": "reStructuredText",
758
+ "textile": "Textile",
759
+ "opml": "OPML",
760
+ "progress": {
761
+ "preparing": "Подготовка...",
762
+ "rendering": "Отрисовка...",
763
+ "paginating": "Разбиение на страницы ({current}/{total})",
764
+ "writing": "Запись...",
765
+ "done": "Готово"
766
+ },
767
+ "fallback": {
768
+ "notice": "Реж. совмест."
769
+ },
770
+ "error": {
771
+ "generic": "Ошибка экспорта",
772
+ "timeout": "Тайм-аут экспорта",
773
+ "subprocess_failed": "Сбой подпроцесса",
774
+ "native_api_failed": "Сбой нативной печати"
775
+ }
776
+ },
777
+ "fulltext_search": {
778
+ "__mt": true,
779
+ "title": "Hybrid Search",
780
+ "placeholder": "Search notes, memories, workflows...",
781
+ "clear": "Clear",
782
+ "filters": "Filters",
783
+ "filter_time": "Time",
784
+ "filter_source": "Source",
785
+ "filter_tags": "Tags",
786
+ "time_all": "All time",
787
+ "time_today": "Today",
788
+ "time_7d": "Last 7 days",
789
+ "time_30d": "Last 30 days",
790
+ "time_90d": "Last 90 days",
791
+ "source_all": "All sources",
792
+ "source_note": "Notes",
793
+ "source_memory": "Memory",
794
+ "source_workflow": "Workflows",
795
+ "cross_kb_hint": "Upgrade for cross-KB search",
796
+ "tab_results": "Results",
797
+ "tab_history": "History",
798
+ "tab_saved": "Saved",
799
+ "save_search": "Save search",
800
+ "save_name_prompt": "Name this saved search",
801
+ "searching": "Searching...",
802
+ "no_results": "No results found",
803
+ "start_typing": "Type to search",
804
+ "history_empty": "No search history",
805
+ "saved_empty": "No saved searches",
806
+ "clear_history": "Clear history",
807
+ "hint_navigate": "Navigate",
808
+ "hint_open": "Open",
809
+ "hint_close": "Close"
810
+ },
811
+ "git": {
812
+ "bind_title": "Привязать репозиторий Git",
813
+ "repo_url": "URL репозитория",
814
+ "branch": "Ветка",
815
+ "token": "Персональный токен доступа",
816
+ "token_hint": "Персональный токен доступа или API-ключ. Надёжно хранится в связке ключей ОС.",
817
+ "auth_method": "Метод аутентификации",
818
+ "auth_token": "Токен доступа",
819
+ "auth_password": "Имя пользователя и пароль",
820
+ "auth_ssh": "SSH-ключ",
821
+ "username": "Имя пользователя",
822
+ "password": "Пароль",
823
+ "ssh_key_path": "Путь к закрытому SSH-ключу",
824
+ "ssh_passphrase": "Парольная фраза SSH",
825
+ "ssh_key_path_hint": "Абсолютный путь к закрытому SSH-ключу (например ~/.ssh/id_ed25519)",
826
+ "ssh_passphrase_hint": "Оставьте пустым, если ключ без парольной фразы",
827
+ "error_username_required": "Имя пользователя обязательно",
828
+ "error_password_required": "Пароль обязателен",
829
+ "error_ssh_key_required": "Путь к SSH-ключу обязателен",
830
+ "mode_clone": "Клонировать в локальный каталог",
831
+ "mode_push": "Отправить локальное содержимое на удалённый",
832
+ "mode_connect": "Подключиться к существующему репозиторию",
833
+ "detecting": "Обнаружение...",
834
+ "auto_commit": "Автокоммит при сохранении",
835
+ "auto_sync": "Фоновая автосинхронизация",
836
+ "sync_interval": "Интервал синхронизации",
837
+ "minutes": "мин",
838
+ "confirm_bind": "Привязать репозиторий",
839
+ "error_url_required": "Укажите URL репозитория",
840
+ "error_token_required": "Укажите токен доступа",
841
+ "bind": "Привязать репозиторий Git",
842
+ "unbind": "Отвязать Git",
843
+ "unbind_title": "Отвязать репозиторий Git",
844
+ "unbind_confirm": "Отвязать репозиторий Git от «{name}»? Локальные файлы сохранятся.",
845
+ "synced": "Синхронизировано",
846
+ "ahead": "к отправке",
847
+ "behind": "к получению",
848
+ "syncing": "Синхронизация...",
849
+ "committing": "Фиксация...",
850
+ "sync_error": "Ошибка синхронизации",
851
+ "sync_now": "Синхронизировать сейчас",
852
+ "not_installed": "Git не установлен"
853
+ },
854
+ "history": {
855
+ "tab_label": "History",
856
+ "title": "Commit history of {filename}",
857
+ "export_btn": "Export",
858
+ "view_snapshot": "View Snapshot",
859
+ "compare_with_current": "Compare with Current",
860
+ "compare_with_prev": "Compare with Previous",
861
+ "back_to_list": "← Back to History",
862
+ "blame_toggle": "Show Author Tracking",
863
+ "blame_not_supported_visual": "Blame is only available in Source Mode. Press ⌘/ to switch.",
864
+ "blame_uncommitted": "uncommitted",
865
+ "loading": "Loading…",
866
+ "showing_last": "Showing the last {count} commits",
867
+ "renamed_from": "↪ from {oldPath}",
868
+ "empty": {
869
+ "no_git": "This knowledge base is not linked to Git",
870
+ "no_git_hint": "History requires Git sync support",
871
+ "no_git_action": "Link a Git repository",
872
+ "no_commits": "This file has no commit history yet",
873
+ "no_commits_hint": "Save and sync to Git to view history",
874
+ "no_commits_action": "Save and commit now",
875
+ "error": "Failed to load Git history",
876
+ "error_hint": "Please check repository status",
877
+ "error_retry": "Retry"
878
+ },
879
+ "snapshot": {
880
+ "label": "Snapshot @ {hash}",
881
+ "notice": "This is a historical snapshot (read-only)",
882
+ "copy": "Copy snapshot",
883
+ "compare": "Compare with Current",
884
+ "restore": "Restore this version",
885
+ "confirm_restore": "Restoring will replace the editor content with this snapshot. After saving, a new commit will be created. Continue?"
886
+ },
887
+ "dirty_confirm": "The current document has unsaved changes. Continue anyway?",
888
+ "continue_anyway": "Continue",
889
+ "save_first": "Save first",
890
+ "cancel": "Cancel",
891
+ "merge_blocked": "Repository is in the middle of a merge. Resolve conflicts first."
892
+ },
893
+ "image_ctx": {
894
+ "__mt": true,
895
+ "copy_url": "Copy URL",
896
+ "replace": "Replace Image",
897
+ "edit_alt": "Edit Alt Text",
898
+ "resize": "Resize",
899
+ "delete": "Delete Image",
900
+ "alt_label": "Alt Text",
901
+ "alt_placeholder": "Describe the image...",
902
+ "alt_hint": "Improves accessibility and SEO",
903
+ "save_alt": "Save"
904
+ },
905
+ "image_dialog": {
906
+ "title": "Вставить изображение",
907
+ "url_tab": "URL",
908
+ "file_tab": "Локальный файл",
909
+ "url_placeholder": "https://example.com/image.png",
910
+ "alt_placeholder": "Описание изображения (необязательно)",
911
+ "select_file": "Выбрать изображение...",
912
+ "no_file_selected": "Файл не выбран",
913
+ "insert": "Вставить",
914
+ "cancel": "Отмена"
915
+ },
916
+ "image_gen": {
917
+ "title": "AI Генерация изображений",
918
+ "step1_title": "Режим изображений",
919
+ "step2_title": "Генерация изображений",
920
+ "step3_title": "Вставка в статью",
921
+ "generating_prompts": "Генерация промптов...",
922
+ "content_too_short": "Содержимое статьи слишком короткое для генерации изображений.",
923
+ "style_label": "Стиль",
924
+ "count_label": "Количество",
925
+ "style_auto": "Авто",
926
+ "style_photo": "Фото",
927
+ "style_illustration": "Иллюстрация",
928
+ "style_flat": "Плоский",
929
+ "style_ink": "Тушь",
930
+ "style_watercolor": "Акварель",
931
+ "style_isometric": "Изометрия",
932
+ "style_infographic": "Инфографика",
933
+ "style_editorial": "Редакционный",
934
+ "style_cartoon": "Мультфильм",
935
+ "style_render": "3D Рендер",
936
+ "style_sketch": "Набросок",
937
+ "style_blueprint": "Чертёж",
938
+ "style_clay": "Пластилиновая модель",
939
+ "style_wireframe": "Каркас",
940
+ "style_exploded": "Покомпонентный вид",
941
+ "style_section": "Сечение",
942
+ "style_cad": "CAD Чертёж",
943
+ "style_prototype": "Прототип",
944
+ "style_anime": "Аниме",
945
+ "style_comic": "Комикс",
946
+ "style_cinematic": "Кинематографичный",
947
+ "style_pixel": "Пиксель-арт",
948
+ "style_noir": "Нуар",
949
+ "style_manga": "Манга",
950
+ "style_realistic": "Реалистичный",
951
+ "style_studio": "Студийный",
952
+ "style_lifestyle": "Лайфстайл",
953
+ "style_flatlay": "Раскладка",
954
+ "style_macro": "Макро",
955
+ "style_minimalist": "Минимализм",
956
+ "style_packaging": "Упаковка",
957
+ "style_outdoor": "На открытом воздухе",
958
+ "style_mood": "Настроение",
959
+ "style_abstract": "Абстракция",
960
+ "style_texture": "Текстура",
961
+ "style_gradient": "Градиент",
962
+ "style_collage": "Коллаж",
963
+ "style_vintage": "Винтаж",
964
+ "style_botanical": "Ботанический",
965
+ "style_geometric": "Геометрический",
966
+ "style_ethereal": "Воздушный",
967
+ "style_brutalist": "Брутализм",
968
+ "generate": "Сгенерировать",
969
+ "next": "Далее",
970
+ "back": "Назад",
971
+ "insert_confirm": "Вставить",
972
+ "insert_paragraph": "Вставить после соответствующего абзаца (рекомендуется)",
973
+ "insert_end": "Вставить в конец статьи",
974
+ "insert_replace": "Заменить изображения в статье",
975
+ "insert_clipboard": "Копировать Markdown в буфер обмена",
976
+ "selected": "{count} выбрано",
977
+ "completed": "Изображения сгенерированы",
978
+ "step_description": "Генерация иллюстраций к статье",
979
+ "mode_article": "Статья",
980
+ "mode_design": "Дизайн",
981
+ "mode_storyboard": "Раскадровка",
982
+ "mode_product": "Продукт",
983
+ "mode_moodboard": "Мудборд",
984
+ "mode_portrait": "Портрет",
985
+ "style_portrait": "Портрет",
986
+ "style_headshot": "Крупный план",
987
+ "style_fullbody": "В полный рост",
988
+ "style_fashion": "Мода",
989
+ "style_street": "Уличный",
990
+ "style_glamour": "Гламур",
991
+ "style_environmental": "Средовой",
992
+ "style_candid": "Репортажный",
993
+ "style_group": "Групповой",
994
+ "pre_defined_detected": "Обнаружено {count} предустановленных промптов в документе",
995
+ "use_predefined": "Использовать предустановленные промпты"
996
+ },
997
+ "image_host": {
998
+ "title": "Хостинг изображений",
999
+ "provider": "Провайдер",
1000
+ "smms": "SM.MS",
1001
+ "imgur": "Imgur",
1002
+ "github": "Репозиторий GitHub",
1003
+ "custom": "Пользовательский API",
1004
+ "api_token": "API Token",
1005
+ "api_token_placeholder": "Введите API-токен",
1006
+ "custom_endpoint": "Конечная точка загрузки",
1007
+ "custom_endpoint_placeholder": "https://your-api.com/upload",
1008
+ "custom_headers": "Пользовательские заголовки (JSON)",
1009
+ "custom_url_template": "Шаблон итогового URL",
1010
+ "custom_url_template_placeholder": "https://example.com/i/{id}",
1011
+ "custom_url_template_hint": "Плейсхолдеры: {id}, {storageKey}, {filename}, {url}. Оставьте пустым для автоопределения полей URL.",
1012
+ "github_repo_url": "URL репозитория",
1013
+ "github_repo_url_placeholder": "https://github.com/user/images",
1014
+ "github_branch": "Ветка",
1015
+ "github_dir": "Каталог изображений",
1016
+ "github_token": "Personal Access Token",
1017
+ "github_token_placeholder": "ghp_xxxxxxxxxxxx",
1018
+ "github_cdn": "Формат URL",
1019
+ "github_cdn_raw": "raw.githubusercontent.com",
1020
+ "github_cdn_jsdelivr": "jsDelivr CDN",
1021
+ "import_from_publish": "Импортировать из цели публикации",
1022
+ "auto_upload": "Автозагрузка изображений при вставке/перетаскивании",
1023
+ "test_upload": "Тестовая загрузка",
1024
+ "test": "Тест",
1025
+ "testing": "Тестирование...",
1026
+ "success": "Загрузка успешна!",
1027
+ "failed": "Ошибка загрузки",
1028
+ "add_target": "Добавить хостинг изображений",
1029
+ "target_name": "Название",
1030
+ "target_name_placeholder": "напр., CDN моего блога",
1031
+ "settings_empty": "Хостинги изображений не настроены",
1032
+ "settings_hint": "Добавьте сервис хостинга изображений для включения автозагрузки.",
1033
+ "default": "По умолчанию",
1034
+ "set_default": "Установить по умолчанию",
1035
+ "gitlab": "Репозиторий GitLab",
1036
+ "git_custom": "Пользовательский Git (Gitea/Forgejo)",
1037
+ "qiniu": "Qiniu Kodo",
1038
+ "aliyun_oss": "Aliyun OSS",
1039
+ "tencent_cos": "Tencent COS",
1040
+ "aws_s3": "AWS S3",
1041
+ "google_gcs": "Google Cloud Storage",
1042
+ "group_api": "API Хостинг",
1043
+ "group_git": "Git-репозиторий",
1044
+ "group_oss": "Объектное хранилище",
1045
+ "gitlab_repo_url": "URL репозитория",
1046
+ "gitlab_branch": "Ветка",
1047
+ "gitlab_dir": "Каталог изображений",
1048
+ "gitlab_token": "Personal Access Token",
1049
+ "gitlab_token_placeholder": "glpat-xxxxxxxxxxxx",
1050
+ "git_custom_repo_url": "URL репозитория",
1051
+ "git_custom_branch": "Ветка",
1052
+ "git_custom_dir": "Каталог изображений",
1053
+ "git_custom_token": "Токен доступа",
1054
+ "git_custom_token_placeholder": "Введите токен",
1055
+ "oss_access_key": "Access Key",
1056
+ "oss_access_key_placeholder": "Введите Access Key ID",
1057
+ "oss_secret_key": "Secret Key",
1058
+ "oss_secret_key_placeholder": "Введите Secret Key",
1059
+ "oss_bucket": "Bucket",
1060
+ "oss_bucket_placeholder": "напр., my-images-bucket",
1061
+ "oss_region": "Регион",
1062
+ "oss_region_placeholder": "напр., cn-east-1, us-east-1",
1063
+ "select_region": "Выберите регион",
1064
+ "oss_endpoint": "Пользовательская конечная точка (необязательно)",
1065
+ "oss_endpoint_placeholder": "напр., https://s3.custom.com",
1066
+ "oss_cdn_domain": "CDN домен (необязательно)",
1067
+ "oss_cdn_domain_placeholder": "напр., https://cdn.example.com",
1068
+ "oss_path_prefix": "Префикс пути (необязательно)",
1069
+ "oss_path_prefix_placeholder": "напр., images/blog/",
1070
+ "required": "Обязательно",
1071
+ "qiniu_cdn_required": "Qiniu требует домен CDN для создания доступных URL изображений.",
1072
+ "picora": "Picora",
1073
+ "picora_one_click": "Импорт в один клик",
1074
+ "picora_import_title": "Импорт из Picora",
1075
+ "picora_import_hint": "Откройте консоль Picora и нажмите «Импортировать в Moraya» рядом с любым API-ключом. Или введите ключ вручную ниже.",
1076
+ "picora_open_console": "Открыть консоль Picora",
1077
+ "picora_manual_entry": "У меня уже есть API-ключ — ввести вручную",
1078
+ "picora_verifying": "Проверка через Picora…",
1079
+ "picora_verify_failed": "Проверка не удалась. Проверьте токен и повторите попытку.",
1080
+ "picora_import_success": "Picora импортирован ({email})",
1081
+ "picora_featured_badge": "Рекомендуется",
1082
+ "picora_api_url": "Эндпоинт Picora",
1083
+ "picora_api_url_placeholder": "https://api.picora.me/v1/images",
1084
+ "picora_img_domain": "CDN-домен",
1085
+ "picora_img_domain_placeholder": "https://media.picora.me",
1086
+ "picora_api_key": "API-ключ",
1087
+ "picora_api_key_placeholder": "sk_live_...",
1088
+ "picora_user_email": "Аккаунт Picora",
1089
+ "picora_token_preview": "Предпросмотр токена",
1090
+ "picora_confirm_import": "Подтвердить импорт",
1091
+ "picora_import_invalid": "Неверная ссылка импорта — повторите попытку из консоли Picora.",
1092
+ "picora_verify": "Проверить",
1093
+ "picora_hero_desc": "Наш собственный SaaS-хостинг изображений · настройка за 5 минут в один клик",
1094
+ "other_providers": "Другие провайдеры",
1095
+ "picora_api_key_keychain": "Сохранён в системной связке ключей · введите новый ключ для замены",
1096
+ "picora_key_migrated_toast": "Перенесено {count} ключ(ей) API Picora в системную связку ключей."
1097
+ },
1098
+ "image_menu": {
1099
+ "resize": "Изменить размер",
1100
+ "upload": "Загрузить на хостинг",
1101
+ "edit_alt": "Редактировать описание",
1102
+ "copy_url": "Копировать URL изображения",
1103
+ "copy_image": "Копировать изображение",
1104
+ "open_in_browser": "Открыть изображение в браузере",
1105
+ "save_as": "Сохранить изображение как...",
1106
+ "delete": "Удалить изображение",
1107
+ "original_size": "Исходный размер"
1108
+ },
1109
+ "kb": {
1110
+ "index_all": "Индексировать все документы",
1111
+ "index_file": "Индексировать файл",
1112
+ "indexing": "Индексация...",
1113
+ "index_complete": "Индексация завершена",
1114
+ "search_placeholder": "Поиск по базе знаний...",
1115
+ "no_index": "Индекс не найден. Щёлкните правой кнопкой мыши по базе знаний, чтобы создать индекс.",
1116
+ "stale_index": "Индекс устарел. С момента последней индексации изменилось {count} файлов.",
1117
+ "dimensions": "Размерность",
1118
+ "auto_index": "Автоиндексация при сохранении",
1119
+ "provider": "Провайдер эмбеддингов",
1120
+ "model": "Модель эмбеддингов",
1121
+ "delete_index": "Удалить индекс",
1122
+ "reindex_all": "Переиндексировать всё",
1123
+ "delete_confirm": "Вы уверены, что хотите удалить индекс?",
1124
+ "use_same_as_ai": "Использовать те же настройки, что и в AI-чате",
1125
+ "online_model": "Онлайн модель",
1126
+ "dimension_warning": "Максимум для этой модели: {max}. Используется: {actual}.",
1127
+ "status": {
1128
+ "indexed": "Проиндексировано ({chunks} фрагментов, {files} файлов)",
1129
+ "not_indexed": "Не проиндексировано",
1130
+ "stale": "{count} файлов изменено"
1131
+ },
1132
+ "progress": {
1133
+ "scanning": "Сканирование файлов...",
1134
+ "chunking": "Разделение документов... ({current}/{total})",
1135
+ "embedding": "Генерация эмбеддингов... ({current}/{total})",
1136
+ "indexing": "Построение индекса...",
1137
+ "done": "Готово"
1138
+ },
1139
+ "provider_no_embedding": "Текущий провайдер AI-чата не поддерживает embedding. Выберите провайдер embedding выше.",
1140
+ "local_models": "Локальные модели",
1141
+ "download_model": "Скачать",
1142
+ "delete_model": "Удалить модель",
1143
+ "select_local_model": "Выбрать загруженную модель",
1144
+ "no_local_models": "Модели не загружены. Загрузите модель ниже.",
1145
+ "loading": "Loading knowledge base...",
1146
+ "empty": "No knowledge base found.",
1147
+ "create_in_picora": "Create a KB in Picora",
1148
+ "select_note": "Select a note to edit",
1149
+ "untitled": "Untitled"
1150
+ },
1151
+ "kb_sync": {
1152
+ "card": {
1153
+ "bind": "☁ Picora Sync",
1154
+ "settings": "☁ Bound · Settings"
1155
+ },
1156
+ "bind_dialog": {
1157
+ "title": "Bind Picora Sync — {name}",
1158
+ "step": "Step {current} / {total}",
1159
+ "step1_title": "Select Picora account",
1160
+ "step2_title": "Link or create cloud KB",
1161
+ "step3_title": "Sync strategy",
1162
+ "step4_title": "Preview first sync (dry-run)",
1163
+ "no_picora": "No Picora accounts found. Please add one in Settings → Hosting first.",
1164
+ "loading_kbs": "Loading cloud KBs…",
1165
+ "create_new": "Create new cloud KB",
1166
+ "link_existing": "Link to existing cloud KB",
1167
+ "kb_name": "Name",
1168
+ "kb_slug": "Slug (URL-friendly ID)",
1169
+ "select_kb": "Select a cloud KB…",
1170
+ "back": "← Back",
1171
+ "next": "Next →",
1172
+ "start_sync": "Start Sync ✓",
1173
+ "binding": "Binding…",
1174
+ "previewing": "Scanning local files…",
1175
+ "will_upload": "↑ Upload to cloud ({n} items)",
1176
+ "will_download": "↓ Download to local ({n} items)",
1177
+ "will_delete": "⊘ Delete ({n} items)",
1178
+ "skipped": "⚠ Skipped — exceeds size limit ({n} items)",
1179
+ "first_bind_hint": "No conflicts detected. All local files will be uploaded.",
1180
+ "confirm_label": "I understand — my local KB will be the initial authority",
1181
+ "link_existing_instead": "Связать существующую KB"
1182
+ },
1183
+ "strategy": {
1184
+ "mode": "Trigger",
1185
+ "mode_manual": "Manual only",
1186
+ "mode_on_save": "On save (3s delay)",
1187
+ "mode_interval": "Scheduled",
1188
+ "mode_startup": "On startup & close",
1189
+ "interval60": "Every 1 minute",
1190
+ "interval300": "Every 5 minutes",
1191
+ "interval900": "Every 15 minutes",
1192
+ "interval1800": "Every 30 minutes",
1193
+ "scope": "Scope",
1194
+ "scope_md_only": "Markdown files only (.md / .markdown)",
1195
+ "scope_md_rules": "Markdown + rule files (MORAYA.md / CLAUDE.md / .mdx)",
1196
+ "scope_all": "All text files including hidden directories",
1197
+ "conflict": "Conflict policy",
1198
+ "conflict_prompt": "Prompt me (recommended)",
1199
+ "conflict_local": "Prefer local",
1200
+ "conflict_remote": "Prefer remote"
1201
+ },
1202
+ "settings": {
1203
+ "global_switch": "Enable KB auto-sync on this machine",
1204
+ "global_switch_hint": "When off, all scheduled syncs are paused. Manual \"Sync Now\" still works.",
1205
+ "last_sync": "Last sync",
1206
+ "never": "Never",
1207
+ "unbound": "Not bound to Picora",
1208
+ "sync_now": "Sync Now",
1209
+ "syncing": "Syncing…",
1210
+ "edit_strategy": "Edit strategy",
1211
+ "unbind": "Unbind",
1212
+ "unbind_title": "Unbind Picora Sync",
1213
+ "unbind_confirm": "Remove Picora sync binding for \"{name}\"? Cloud data is preserved.",
1214
+ "view_conflicts": "Conflicts",
1215
+ "bind": "Bind to Picora",
1216
+ "no_kbs": "No knowledge bases added yet."
1217
+ },
1218
+ "conflict": {
1219
+ "title": "Conflict Resolution — {name} ({n} items)",
1220
+ "no_conflicts": "No conflicts to resolve.",
1221
+ "local": "Local version",
1222
+ "remote": "Cloud version",
1223
+ "no_preview": "(no preview)",
1224
+ "keep_local": "Keep local (overwrite cloud)",
1225
+ "keep_remote": "Pull cloud (overwrite local)",
1226
+ "keep_both": "Keep both (cloud copy saved as .conflict.md)",
1227
+ "skip": "Skip",
1228
+ "apply_one": "Apply this",
1229
+ "apply_all": "Apply all selected ({n})"
1230
+ },
1231
+ "statusbar": {
1232
+ "tooltip": "KB Sync status — click for details",
1233
+ "error_label": "Ошибка синхронизации:"
1234
+ },
1235
+ "sync_now": "Синхронизировать сейчас",
1236
+ "error": {
1237
+ "target_missing": "Аккаунт Picora не найден — повторно привяжите эту базу знаний или восстановите аккаунт в настройках."
1238
+ },
1239
+ "trash": {
1240
+ "title": "Корзина",
1241
+ "toast_deleted": "Picora удалил {count} файл(ов). Перемещено в корзину.",
1242
+ "view": "Просмотр",
1243
+ "restore_all": "Восстановить всё",
1244
+ "restore_success": "Восстановлено {count} файл(ов).",
1245
+ "restore_failed": "Не удалось восстановить некоторые файлы.",
1246
+ "restore_conflict_title": "Файл уже существует",
1247
+ "restore_conflict_body": "{path} уже существует. Перезаписать?",
1248
+ "overwrite": "Перезаписать",
1249
+ "cancel": "Отмена",
1250
+ "filter_kb_all": "Все БЗ",
1251
+ "filter_time7d": "Последние 7 дней",
1252
+ "filter_time30d": "Последние 30 дней",
1253
+ "filter_time_all": "Всё время",
1254
+ "empty_state": "Корзина пуста.",
1255
+ "loading": "Загрузка…",
1256
+ "restore": "Восстановить",
1257
+ "delete_forever": "Удалить навсегда",
1258
+ "delete_forever_confirm": "Удалить {path} навсегда? Это нельзя отменить.",
1259
+ "purge_all": "Очистить корзину",
1260
+ "purge_all_confirm": "Очистить все записи старше {days} дней?",
1261
+ "purge_result": "Очищено {files} файл(ов), освобождено {size}.",
1262
+ "auto_purge_hint": "Элементы старше 7 дней удаляются автоматически.",
1263
+ "entry_deleted_at": "Удалено {date}",
1264
+ "kb_unknown": "Неизвестная БЗ"
1265
+ }
1266
+ },
1267
+ "knowledge_base": {
1268
+ "title": "База знаний",
1269
+ "add": "Добавить базу знаний",
1270
+ "remove": "Удалить",
1271
+ "rename": "Переименовать",
1272
+ "manage": "Управление базами знаний...",
1273
+ "empty": "Базы знаний не настроены",
1274
+ "empty_hint": "Добавьте папку как базу знаний для быстрого переключения.",
1275
+ "delete_confirm": "Удалить «{name}» из баз знаний? Сама папка не будет удалена.",
1276
+ "switch_to": "Переключить базу знаний",
1277
+ "save_hint": "Эта папка не в ваших базах знаний.",
1278
+ "save_as_kb": "Сохранить как базу знаний"
1279
+ },
1280
+ "link": {
1281
+ "open": "Открыть ссылку",
1282
+ "remove": "Удалить ссылку"
1283
+ },
1284
+ "mcp": {
1285
+ "title": "MCP servers",
1286
+ "tabs": {
1287
+ "servers": "Серверы",
1288
+ "publish": "Публикация",
1289
+ "sync": "Синхронизация",
1290
+ "marketplace": "Маркет"
1291
+ },
1292
+ "ai_services": {
1293
+ "empty": "Нет AI-сервисов",
1294
+ "hint": "AI может создавать MCP-сервисы во время чата. Попросите его взаимодействовать с API!",
1295
+ "node_required": "Требуется Node.js 18+",
1296
+ "checking_node": "Проверка Node.js...",
1297
+ "temp": "Временный",
1298
+ "saved": "Сохранённый",
1299
+ "view_code": "Код",
1300
+ "tools": "{count} инструментов",
1301
+ "service_created": "AI создал сервис «{name}» с {count} инструментами",
1302
+ "service_saved": "Сервис «{name}» сохранён",
1303
+ "service_removed": "Сервис «{name}» удалён",
1304
+ "launch_confirm_title": "Предупреждение безопасности AI-сервиса",
1305
+ "launch_confirm_msg": "AI сгенерировал MCP-сервис, который должен выполнить автоматически сгенерированный код:\n Сервис: {name}\n Инструменты: {tools}\n\nЭтот код будет выполняться в локальном процессе Node.js.\nПожалуйста, подтвердите, что вы доверяете этому AI-сгенерированному коду.",
1306
+ "launch_confirm_ok": "Запустить",
1307
+ "launch_confirm_cancel": "Отмена"
1308
+ },
1309
+ "servers": {
1310
+ "empty": "MCP-серверы не настроены",
1311
+ "local_mcp": "Локальный MCP",
1312
+ "add_server": "Добавить сервер",
1313
+ "add_server_plus": "+ Добавить сервер",
1314
+ "connected": "Подключён",
1315
+ "disconnected": "Отключён",
1316
+ "server_name": "Имя сервера",
1317
+ "server_url": "URL сервера (напр., http://localhost:3000/mcp)",
1318
+ "http": "HTTP",
1319
+ "sse": "SSE (Server-Sent Events)",
1320
+ "stdio": "stdio (Локальный процесс)",
1321
+ "command": "Команда",
1322
+ "command_placeholder": "Команда (напр., npx, node, python)",
1323
+ "args_placeholder": "Аргументы (напр., -y @modelcontextprotocol/server-filesystem /path)",
1324
+ "env_placeholder": "ENV_KEY=значение (по одному на строку)",
1325
+ "presets": "Удалённые MCP",
1326
+ "presets_hint": "Добавление популярных MCP-серверов в один клик",
1327
+ "preset_desc": {
1328
+ "filesystem": "Чтение, поиск и управление локальными файлами",
1329
+ "fetch": "Загрузка веб-страниц и конвертация в Markdown",
1330
+ "git": "Чтение и поиск по Git-репозиториям",
1331
+ "memory": "Постоянный граф знаний для памяти AI",
1332
+ "puppeteer": "Автоматизация браузера и веб-скрейпинг",
1333
+ "sqlite": "Запросы и управление базами данных SQLite",
1334
+ "slack": "Чтение и поиск каналов и сообщений Slack",
1335
+ "google_maps": "Геокодирование, маршруты и поиск мест",
1336
+ "sequential_thinking": "Пошаговое рассуждение и решение задач",
1337
+ "everything": "Поиск файлов в Windows через Everything"
1338
+ },
1339
+ "preset_env_title": "Переменные окружения",
1340
+ "preset_env_desc": {
1341
+ "slack_bot_token": "Slack Bot OAuth Token (xoxb-...)",
1342
+ "slack_team_id": "ID команды/рабочего пространства Slack (необязательно)",
1343
+ "google_maps_api_key": "Ключ API Google Maps"
1344
+ },
1345
+ "preset_add": "Добавить и подключить",
1346
+ "form_mode": "Форма",
1347
+ "json_mode": "JSON",
1348
+ "json_placeholder": "Вставьте JSON-конфигурацию, напр.:\n{\n \"mcpServers\": {\n \"name\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"@.../server-xxx\"]\n }\n }\n}",
1349
+ "json_no_config": "Допустимая конфигурация MCP-сервера не найдена",
1350
+ "json_parse_error": "ошибка разбора",
1351
+ "launch_confirm_title": "Предупреждение безопасности",
1352
+ "launch_confirm_msg": "Запуск внешней программы:\n Команда: {command}\n Аргументы: {args}\n\nЭтот MCP-сервер будет работать с правами вашего пользователя и может получить доступ к локальным файлам и сети.\nПожалуйста, подтвердите, что этот MCP-сервер из надёжного источника.",
1353
+ "launch_confirm_ok": "Запустить",
1354
+ "launch_confirm_cancel": "Отмена",
1355
+ "auto_approve": "Автоодобрение запуска MCP",
1356
+ "auto_approve_hint": "Пропускать подтверждение безопасности при подключении MCP-серверов и запуске AI-сервисов. Не рекомендуется для ненадёжных источников.",
1357
+ "error_name_required": "Необходимо указать имя сервера",
1358
+ "error_command_required": "Необходимо указать команду",
1359
+ "error_url_required": "Необходимо указать URL"
1360
+ },
1361
+ "publish": {
1362
+ "empty": "Целевые платформы для публикации не настроены",
1363
+ "hint": "Сначала подключите MCP-сервер с возможностью публикации.",
1364
+ "button": "Опубликовать",
1365
+ "publishing": "Публикация...",
1366
+ "published": "Опубликовано! {info}",
1367
+ "failed": "Ошибка: {message}",
1368
+ "error": "Ошибка: {message}"
1369
+ },
1370
+ "sync": {
1371
+ "empty": "Конфигурации синхронизации отсутствуют",
1372
+ "hint": "Сначала подключите MCP-сервер, затем добавьте конфигурацию синхронизации.",
1373
+ "sync_now": "Синхронизировать",
1374
+ "add_sync": "+ Добавить синхронизацию",
1375
+ "name": "Имя конфигурации",
1376
+ "server": "MCP Сервер",
1377
+ "remote_path": "Удалённый путь",
1378
+ "local_path": "Локальный путь",
1379
+ "direction": "Направление",
1380
+ "push": "Отправка (локальный → удалённый)",
1381
+ "pull": "Загрузка (удалённый → локальный)",
1382
+ "bidirectional": "Двунаправленная",
1383
+ "last_sync": "Последняя синхронизация: {time}",
1384
+ "syncing": "Синхронизация...",
1385
+ "success": "Синхронизация завершена",
1386
+ "error": "Ошибка синхронизации: {message}"
1387
+ },
1388
+ "marketplace": {
1389
+ "title": "Маркет",
1390
+ "search": "Поиск MCP-серверов...",
1391
+ "source": "Источник",
1392
+ "source_official": "Официальный",
1393
+ "source_lobehub": "LobeHub",
1394
+ "source_smithery": "Smithery",
1395
+ "install": "Установить",
1396
+ "install_and_connect": "Установить и подключить",
1397
+ "installing": "Установка...",
1398
+ "installed": "Установлено",
1399
+ "view_details": "Подробнее",
1400
+ "load_more": "Загрузить ещё",
1401
+ "no_results": "MCP-серверы не найдены",
1402
+ "network_error": "Не удалось загрузить, проверьте сеть",
1403
+ "retry": "Повторить",
1404
+ "env_vars": "Переменные окружения",
1405
+ "env_required": "(обязательно)",
1406
+ "popularity": "использований",
1407
+ "installs": "Установки / Использования",
1408
+ "verified": "Проверено",
1409
+ "cancel": "Отмена"
1410
+ },
1411
+ "subtitle": "Connect to Model Context Protocol servers to give the AI agent tools and resources.",
1412
+ "settings_card_label": "MCP servers",
1413
+ "empty_state": {
1414
+ "title": "No MCP servers configured",
1415
+ "body": "Add a remote SSE or HTTP MCP server URL. Mobile builds intentionally do not spawn local processes — see the bridging guide below for how to expose a local MCP server (e.g. via Tailscale tailnet or an SSH tunnel) as a remote URL.",
1416
+ "cta": "Add server"
1417
+ },
1418
+ "list": {
1419
+ "add_button": "Add server",
1420
+ "status": {
1421
+ "connected": "Connected",
1422
+ "connecting": "Connecting…",
1423
+ "disconnected": "Disconnected",
1424
+ "error": "Error"
1425
+ },
1426
+ "tool_count": "{count} tools",
1427
+ "resource_count": "{count} resources",
1428
+ "last_connected": "Last connected {when}",
1429
+ "help_button": "How do I connect?"
1430
+ },
1431
+ "edit": {
1432
+ "title_new": "Add MCP server",
1433
+ "title_edit": "Edit MCP server",
1434
+ "name_label": "Name",
1435
+ "name_placeholder": "e.g. WeChat publisher",
1436
+ "transport_label": "Transport",
1437
+ "transport_sse": "SSE (Server-Sent Events)",
1438
+ "transport_http": "HTTP (Streamable)",
1439
+ "url_label": "URL",
1440
+ "url_placeholder_sse": "https://example.com/mcp/sse",
1441
+ "url_placeholder_http": "https://example.com/mcp",
1442
+ "headers_label": "HTTP headers (optional)",
1443
+ "headers_add": "Add header",
1444
+ "header_key_placeholder": "Authorization",
1445
+ "header_value_placeholder": "Bearer …",
1446
+ "enabled_label": "Enable on startup",
1447
+ "save_button": "Save",
1448
+ "cancel_button": "Cancel",
1449
+ "delete_button": "Delete server",
1450
+ "delete_confirm": "Remove this MCP server? Saved tools and any open connection will be cleared.",
1451
+ "validation": {
1452
+ "name_required": "Name is required.",
1453
+ "url_required": "URL is required.",
1454
+ "url_invalid": "URL must start with http:// or https://"
1455
+ }
1456
+ },
1457
+ "detail": {
1458
+ "title": "Server details",
1459
+ "reconnect_button": "Reconnect",
1460
+ "disconnect_button": "Disconnect",
1461
+ "edit_button": "Edit",
1462
+ "tools_heading": "Tools ({count})",
1463
+ "resources_heading": "Resources ({count})",
1464
+ "no_tools": "No tools exposed yet. Connect first.",
1465
+ "no_resources": "No resources exposed.",
1466
+ "error_heading": "Last error",
1467
+ "transport_label": "Transport: {transport}",
1468
+ "url_label": "URL: {url}"
1469
+ },
1470
+ "help": {
1471
+ "title": "How to bridge a local MCP server",
1472
+ "intro": "Mobile builds only speak to remote MCP servers over SSE or HTTP. Local stdio servers must be exposed via an external bridge — Moraya does not embed Tailscale, an SSH tunnel, or any other bridging tool.",
1473
+ "tailscale": {
1474
+ "heading": "Via your own LAN (e.g. Tailscale tailnet)",
1475
+ "body": "Run your stdio MCP server on a laptop with a public-from-your-device hostname, then add a server here with a URL like http://laptop-name.your-tailnet.ts.net:3030/sse. The hostname is whatever your VPN / LAN provides — Moraya does not detect it for you."
1476
+ },
1477
+ "tunnel": {
1478
+ "heading": "Via a remote tunnel (e.g. SSH or Termex)",
1479
+ "body": "Forward a remote server's MCP port to a URL you can reach from the phone, then paste that URL here. Same shape as a local LAN URL — Moraya treats every remote endpoint identically."
1480
+ },
1481
+ "security": {
1482
+ "heading": "Security",
1483
+ "body": "URLs and headers are stored locally on this device. Headers are sent on every request — use a short-lived token if you connect to anything outside your private network. Plain http:// URLs may require an NSAppTransportSecurity exception on iOS; HTTPS is recommended whenever possible."
1484
+ },
1485
+ "close_button": "Got it"
1486
+ },
1487
+ "errors": {
1488
+ "connect_failed": "Failed to connect to {name}: {message}",
1489
+ "tool_call_failed": "Tool call failed: {message}",
1490
+ "server_not_connected": "Server is not connected.",
1491
+ "tool_not_found": "Tool not found on any connected server."
1492
+ }
1493
+ },
1494
+ "media": {
1495
+ "__mt": true,
1496
+ "upload_title": "Media Uploads",
1497
+ "uploading": "Uploading",
1498
+ "upload_done": "Uploaded",
1499
+ "upload_error": "Upload failed",
1500
+ "compressed_from": "Compressed",
1501
+ "compress_auto": "Auto-compress images > 1MB",
1502
+ "size_limit_exceeded": "File exceeds size limit for your plan",
1503
+ "mime_not_allowed": "File type not supported",
1504
+ "quota_warn": "This note has over 10MB of media",
1505
+ "quota_hard": "Media quota exceeded (100MB per note)",
1506
+ "quota_title": "Media Usage",
1507
+ "paste_title": "Paste Media"
1508
+ },
1509
+ "memory": {
1510
+ "__mt": true,
1511
+ "title": "Long-Term Memory",
1512
+ "upgrade_required": "Long-term memory requires Personal plan or above.",
1513
+ "health_title": "Memory Health",
1514
+ "settings_title": "Memory Settings",
1515
+ "half_life_label": "Memory half-life",
1516
+ "half_life_never": "Never (no decay)",
1517
+ "days": "days",
1518
+ "export_import": "Export / Import",
1519
+ "memories_title": "Memories",
1520
+ "search_placeholder": "Search memories...",
1521
+ "filter_all": "All types",
1522
+ "kind_preference": "Preference",
1523
+ "kind_project": "Project",
1524
+ "kind_fact": "Fact",
1525
+ "no_memories": "No memories yet. Use /memorize in chat to add one.",
1526
+ "edit": "Edit",
1527
+ "delete": "Delete",
1528
+ "enable": "Enable",
1529
+ "disable": "Disable",
1530
+ "save": "Save",
1531
+ "cancel": "Cancel",
1532
+ "weight": "Weight",
1533
+ "danger_zone": "Danger Zone",
1534
+ "reset_all": "Reset all memories",
1535
+ "reset_confirm_instruction": "Type RESET to confirm deleting all memories. This cannot be undone.",
1536
+ "confirm_reset": "Delete all memories",
1537
+ "export_title": "Export Memories",
1538
+ "export_hint": "Download all your memories as a JSON file for backup or migration.",
1539
+ "export_btn": "Export memories",
1540
+ "export_invalid_format": "Invalid memory export format.",
1541
+ "import_title": "Import Memories",
1542
+ "import_hint": "Import memories from a previously exported JSON file.",
1543
+ "choose_file": "Choose file (.json)",
1544
+ "import_placeholder": "Or paste JSON here...",
1545
+ "import_btn": "Import",
1546
+ "import_success": "Memories imported successfully.",
1547
+ "memorize_ack": "Memory saved.",
1548
+ "forget_ack": "Memory forgotten.",
1549
+ "forget_not_found": "No matching memories found.",
1550
+ "private_mode_on": "Private mode on — this conversation will not be extracted.",
1551
+ "extract_queued": "{n} memory/memories pending your review.",
1552
+ "conflict_detected": "Conflict detected with existing memory.",
1553
+ "upgrade_memory": "Upgrade to Personal to unlock long-term memory."
1554
+ },
1555
+ "menu": {
1556
+ "file": "Файл",
1557
+ "edit": "Правка",
1558
+ "paragraph": "Абзац",
1559
+ "format": "Формат",
1560
+ "view": "Вид",
1561
+ "window": "Окно",
1562
+ "help": "Справка",
1563
+ "new": "Создать",
1564
+ "new_window": "Новое окно",
1565
+ "open": "Открыть...",
1566
+ "save": "Сохранить",
1567
+ "save_as": "Сохранить как...",
1568
+ "export": "Экспорт",
1569
+ "export_html": "HTML",
1570
+ "export_pdf": "PDF",
1571
+ "export_image": "Изображение (PNG)",
1572
+ "export_doc": "Word (.doc)",
1573
+ "heading1": "Заголовок 1",
1574
+ "heading2": "Заголовок 2",
1575
+ "heading3": "Заголовок 3",
1576
+ "heading4": "Заголовок 4",
1577
+ "heading5": "Заголовок 5",
1578
+ "heading6": "Заголовок 6",
1579
+ "table": "Таблица",
1580
+ "code_block": "Блок кода",
1581
+ "math_block": "Математический блок",
1582
+ "quote": "Цитата",
1583
+ "bullet_list": "Маркированный список",
1584
+ "ordered_list": "Нумерованный список",
1585
+ "task_list": "Список задач",
1586
+ "horizontal_rule": "Горизонтальная линия",
1587
+ "bold": "Полужирный",
1588
+ "italic": "Курсив",
1589
+ "strikethrough": "Зачёркнутый",
1590
+ "code": "Код",
1591
+ "link": "Ссылка",
1592
+ "image": "Изображение",
1593
+ "visual_mode": "Визуальный режим",
1594
+ "source_mode": "Режим исходного кода",
1595
+ "split_mode": "Разделённый режим",
1596
+ "toggle_sidebar": "Показать/скрыть боковую панель",
1597
+ "toggle_aipanel": "Показать/скрыть панель AI",
1598
+ "toggle_outline": "Показать/скрыть план документа",
1599
+ "zoom_in": "Увеличить",
1600
+ "zoom_out": "Уменьшить",
1601
+ "actual_size": "Фактический размер",
1602
+ "find": "Найти",
1603
+ "replace": "Заменить",
1604
+ "changelog": "Журнал изменений",
1605
+ "privacy_policy": "Политика конфиденциальности",
1606
+ "official_website": "Официальный сайт",
1607
+ "about_moraya": "О Moraya",
1608
+ "feedback": "Обратная связь",
1609
+ "settings": "Настройки...",
1610
+ "version_info": "Информация о версии",
1611
+ "workflow": "Рабочий процесс",
1612
+ "seo_optimization": "SEO-оптимизация",
1613
+ "ai_image_generation": "Генерация изображений ИИ",
1614
+ "publish": "Опубликовать",
1615
+ "mcp_tools": "Инструменты MCP",
1616
+ "no_mcptools": "Нет подключённых инструментов MCP"
1617
+ },
1618
+ "mermaid": {
1619
+ "loading": "Загрузка диаграммы...",
1620
+ "error": "Ошибка отрисовки диаграммы",
1621
+ "edit": "Редактировать",
1622
+ "preview": "Предпросмотр",
1623
+ "empty": "Пустая диаграмма"
1624
+ },
1625
+ "mfa": {
1626
+ "__mt": true,
1627
+ "title": "Multi-Factor Authentication",
1628
+ "description": "Configure MFA requirements for team members.",
1629
+ "policy": "MFA Policy",
1630
+ "allowed_types": "Allowed MFA Methods",
1631
+ "grace_period": "Grace Period",
1632
+ "grace_period_hint": "Hours new members have to enroll in MFA after joining.",
1633
+ "hours": "hours",
1634
+ "required_banner": "MFA is required. All members must enroll before accessing team resources.",
1635
+ "save": "Save MFA Settings",
1636
+ "saved_success": "MFA settings saved."
1637
+ },
1638
+ "migration": {
1639
+ "__mt": true,
1640
+ "title": "KB Migration",
1641
+ "subtitle": "Move your knowledge base to a different storage provider",
1642
+ "new_migration": "New Migration",
1643
+ "wizard_title": "New Migration Wizard",
1644
+ "kb_id": "KB ID",
1645
+ "kb_name": "KB Name",
1646
+ "provider": "Provider",
1647
+ "bucket": "Bucket",
1648
+ "prefix": "Prefix",
1649
+ "source": "Source",
1650
+ "target": "Target",
1651
+ "encryption_mode": "Encryption Mode",
1652
+ "dry_run_label": "Dry run (simulate only, no files copied)",
1653
+ "dry_run_badge": "Dry Run",
1654
+ "dry_run_start": "Start Dry Run",
1655
+ "start_migration": "Start Migration",
1656
+ "cancel": "Cancel",
1657
+ "files": "files",
1658
+ "errors": "Errors",
1659
+ "started": "Started",
1660
+ "rollback_deadline": "Rollback deadline",
1661
+ "rollback": "Rollback",
1662
+ "download_log": "Download Log",
1663
+ "history_title": "Migration History",
1664
+ "history_empty": "No migrations yet",
1665
+ "loading": "Loading...",
1666
+ "confirm_delete": "Delete this migration session?"
1667
+ },
1668
+ "mobile": {
1669
+ "__mt": true,
1670
+ "tab": {
1671
+ "nav_label": "Primary navigation",
1672
+ "edit": "Edit",
1673
+ "ai": "AI",
1674
+ "files": "Knowledge Base",
1675
+ "settings": "Settings"
1676
+ },
1677
+ "appbar": {
1678
+ "menu": "Open sidebar",
1679
+ "more": "More actions",
1680
+ "toggle_ai_pane": "Toggle AI pane",
1681
+ "untitled": "Untitled"
1682
+ },
1683
+ "overflow": {
1684
+ "mode_label": "Mode",
1685
+ "mode_visual": "Visual",
1686
+ "mode_source": "Source",
1687
+ "search": "Find & Replace",
1688
+ "outline": "Outline",
1689
+ "export": "Export",
1690
+ "share": "Share"
1691
+ },
1692
+ "format": {
1693
+ "bold": "Bold",
1694
+ "italic": "Italic",
1695
+ "heading": "Heading",
1696
+ "list": "List",
1697
+ "code": "Code",
1698
+ "link": "Link",
1699
+ "link_prompt": "Enter URL",
1700
+ "image": "Image"
1701
+ },
1702
+ "ai": {
1703
+ "title": "AI",
1704
+ "placeholder": "Ask anything or describe what you want to write…",
1705
+ "send": "Send",
1706
+ "voice": "Voice",
1707
+ "model": "Model",
1708
+ "empty_state": "Your AI conversations will appear here.",
1709
+ "thinking": "Thinking…",
1710
+ "clear": "Clear conversation",
1711
+ "clear_confirm": "Clear all messages?",
1712
+ "cleared": "Беседа очищена",
1713
+ "clear_undone": "Сообщения восстановлены",
1714
+ "stub_response": "Hi! I'm a placeholder response. The real AI provider will be wired up in v0.68.",
1715
+ "not_configured_title": "AI is not configured yet",
1716
+ "not_configured_text": "Add an API key or pick a local model in Settings → AI to start chatting.",
1717
+ "not_configured": "AI is not configured. Open Settings to set up an AI model?",
1718
+ "configure_now": "Set up",
1719
+ "stop": "Stop",
1720
+ "error_prefix": "Error",
1721
+ "pick_model": "Switch AI model",
1722
+ "no_providers": "No AI providers configured yet. Tap “Set up” to add one.",
1723
+ "conversations": "Conversations",
1724
+ "new_chat": "New chat",
1725
+ "no_conversations": "No conversations yet. Tap “New chat” to start.",
1726
+ "no_matches": "No conversations match your search.",
1727
+ "search_placeholder": "Search conversations…",
1728
+ "attach_image": "Attach image",
1729
+ "remove_attachment": "Remove attachment",
1730
+ "attached_image": "Attached image",
1731
+ "compressing": "Compressing…",
1732
+ "copy": "Copy",
1733
+ "sync_syncing": "Syncing with Picora…",
1734
+ "sync_idle": "Synced with Picora",
1735
+ "sync_offline": "Offline (will retry)",
1736
+ "sync_error": "Sync error — check connection",
1737
+ "sync_disabled": "Sync disabled",
1738
+ "mention_title": "Mention a note",
1739
+ "mention_search": "Search your notes…",
1740
+ "no_notes": "No notes yet — open one from the Files tab.",
1741
+ "insert_action": "Insert",
1742
+ "insert_title": "Insert into note",
1743
+ "insert_append": "Append to current note",
1744
+ "insert_append_sub": "Add this AI reply to the doc you have open in the Edit tab.",
1745
+ "insert_new": "Create new note",
1746
+ "insert_new_sub": "Make a new doc from this AI reply and open it.",
1747
+ "insert_no_active": "No document is open in the Edit tab.",
1748
+ "insert_failed": "Could not write the note — check storage permissions.",
1749
+ "insert_append_ok": "Appended to current note.",
1750
+ "insert_new_ok": "New note created.",
1751
+ "export": "Export / Share",
1752
+ "export_failed": "Could not export this conversation.",
1753
+ "export_ok": "Conversation exported.",
1754
+ "rag_used": "Referenced {n} past message(s)",
1755
+ "rag_on_title": "History RAG enabled — past conversations may be used as context",
1756
+ "citations_title": "{n} reference(s)",
1757
+ "citations_empty": "No citations attached to this message.",
1758
+ "params_title": "Generation parameters",
1759
+ "params_hint": "Override AI generation settings for this conversation only. Leave blank to use the provider default.",
1760
+ "params_save": "Save",
1761
+ "params_reset": "Reset to defaults",
1762
+ "param_temperature": "Temperature",
1763
+ "param_temperature_sub": "0 = deterministic · 1 = balanced · 2 = creative",
1764
+ "param_max_tokens": "Max output tokens",
1765
+ "param_max_tokens_sub": "Hard cap on the model's reply length",
1766
+ "param_top_p": "Top-P",
1767
+ "param_top_p_sub": "Nucleus sampling threshold (0–1)",
1768
+ "param_stop": "Stop sequences",
1769
+ "param_stop_sub": "Model halts when about to emit any of these. Comma-separated; use \\n for newline.",
1770
+ "param_stop_placeholder": "\\n\\n###, END",
1771
+ "presets_label": "Presets",
1772
+ "preset_save_as": "Save current as preset",
1773
+ "preset_save_prompt": "Name this preset:",
1774
+ "preset_delete_confirm": "Delete preset \"{name}\"?",
1775
+ "preset_delete_aria": "Delete preset",
1776
+ "preset_deleted": "Пресет \"{name}\" удалён",
1777
+ "preset_restored": "Пресет восстановлен",
1778
+ "preset_picker_title": "Pick a preset",
1779
+ "preset_picker_hint": "Switch tone for this conversation. For fine-tuning, use the ⚙ gear.",
1780
+ "preset_picker_custom_note": "Currently using custom values — open ⚙ to view or save them as a preset.",
1781
+ "preset_custom_label": "Custom",
1782
+ "retry_title": "Retry this reply",
1783
+ "retry_action": "Retry",
1784
+ "retry_as_is": "Retry with current params",
1785
+ "retry_with_preset": "Or try a different preset",
1786
+ "retry_done": "Reply regenerating",
1787
+ "retry_undone": "Original reply restored",
1788
+ "undo": "Undo",
1789
+ "presets": {
1790
+ "default": {
1791
+ "label": "Default"
1792
+ },
1793
+ "precise": {
1794
+ "label": "Precise"
1795
+ },
1796
+ "balanced": {
1797
+ "label": "Balanced"
1798
+ },
1799
+ "creative": {
1800
+ "label": "Creative"
1801
+ }
1802
+ },
1803
+ "default": "Default",
1804
+ "quick_actions_header": "Start with",
1805
+ "workflows_header": "Workflows",
1806
+ "wf_steps": "steps",
1807
+ "wf": {
1808
+ "summarize-then-translate": {
1809
+ "name": "Summarize → Translate",
1810
+ "desc": "TL;DR the input, then translate the summary."
1811
+ },
1812
+ "translate-then-polish": {
1813
+ "name": "Translate → Polish",
1814
+ "desc": "Translate input, then smooth the translation."
1815
+ },
1816
+ "step": {
1817
+ "summarize": "Summarizing",
1818
+ "translate": "Translating",
1819
+ "polish": "Polishing",
1820
+ "tone": "Tone",
1821
+ "length": "Length",
1822
+ "article": "Writing article",
1823
+ "cover": "Cover image",
1824
+ "target_lang": "Target language",
1825
+ "dictate": "Dictation",
1826
+ "structurize": "Structuring"
1827
+ },
1828
+ "write-article": {
1829
+ "name": "Write article + cover",
1830
+ "desc": "Topic → tone/length → article → AI cover",
1831
+ "ask_tone": "What tone should the article take?",
1832
+ "ask_length": "How long should it be?",
1833
+ "cover_hint": "Generating a cover image…"
1834
+ },
1835
+ "translate": {
1836
+ "name": "Translate",
1837
+ "desc": "Translate text into a target language",
1838
+ "ask_lang": "Translate into which language?"
1839
+ },
1840
+ "voice-transcribe": {
1841
+ "name": "Voice → note",
1842
+ "desc": "Dictate, then structure into a note",
1843
+ "hint": "Tap done when you finish speaking."
1844
+ },
1845
+ "tone": {
1846
+ "general": "General",
1847
+ "marketing": "Marketing",
1848
+ "technical": "Technical",
1849
+ "story": "Story"
1850
+ },
1851
+ "length": {
1852
+ "short": "Short (~500)",
1853
+ "medium": "Medium (~1500)",
1854
+ "long": "Long (~3000)"
1855
+ },
1856
+ "lang": {
1857
+ "en": "English",
1858
+ "zh": "Chinese",
1859
+ "ja": "Japanese",
1860
+ "ko": "Korean"
1861
+ },
1862
+ "cancel": "Cancel",
1863
+ "listening": "Listening…",
1864
+ "stt_done": "Done",
1865
+ "generating_cover": "Generating cover…",
1866
+ "cover_failed": "Cover generation failed",
1867
+ "skip_cover": "Skip cover",
1868
+ "regenerate": "Regenerate",
1869
+ "insert_with_cover": "Insert article + cover",
1870
+ "no_image_provider": "No image provider — set one up in Settings → Image generation."
1871
+ },
1872
+ "tpl": {
1873
+ "screenshot-to-md": {
1874
+ "name": "Image → Markdown",
1875
+ "desc": "Convert a screenshot, photo, or chart to clean Markdown.",
1876
+ "input": "Add a caption or leave empty — the model uses your image."
1877
+ },
1878
+ "summarize-current": {
1879
+ "name": "Summarize note",
1880
+ "desc": "TL;DR + key terms of the doc open in the Edit tab.",
1881
+ "input": "Optional focus: “key claims only”, “as bullet list”…"
1882
+ },
1883
+ "continue-writing": {
1884
+ "name": "Continue writing",
1885
+ "desc": "Pick up where you left off in the current doc.",
1886
+ "input": "Optional steering: tone, length, next section…"
1887
+ },
1888
+ "translate-zh-en": {
1889
+ "name": "Translate ZH ↔ EN",
1890
+ "desc": "Auto-detects source language. Preserves Markdown.",
1891
+ "input": "Paste the text to translate."
1892
+ }
1893
+ },
1894
+ "rename": "Rename",
1895
+ "rename_prompt": "New title",
1896
+ "delete_confirm": "Delete “{title}”? This cannot be undone.",
1897
+ "conv_deleted": "Deleted “{title}”",
1898
+ "conv_restored": "Conversation restored",
1899
+ "usage_tooltip": "Prompt tokens ↑ Completion tokens ↓",
1900
+ "budget_warn_confirm": "You are nearing your monthly AI budget. Send anyway?",
1901
+ "budget_over_confirm": "You are OVER your monthly AI budget. Send anyway?",
1902
+ "bulk_import": "Import all",
1903
+ "bulk_export": "Export all",
1904
+ "import_ok": "Imported {n} conversation(s).",
1905
+ "import_empty": "No conversations in that file.",
1906
+ "import_failed": "Import failed: {err}",
1907
+ "compose": "Compose article",
1908
+ "commands_title": "Commands",
1909
+ "more_actions": "More actions",
1910
+ "commands_empty": "No matching commands.",
1911
+ "voice_dictate": "Voice input",
1912
+ "voice_stop": "Stop",
1913
+ "voice_read_aloud": "Read aloud",
1914
+ "voice_local_badge": "On-device",
1915
+ "voice_permission_denied": "Microphone or speech permission denied. Enable it in Settings to use voice.",
1916
+ "voice_start_failed": "Could not start voice input.",
1917
+ "voice_speak_failed": "Could not read this message aloud."
1918
+ },
1919
+ "files": {
1920
+ "title": "Knowledge Base",
1921
+ "kb": "Knowledge Bases",
1922
+ "tree": "All Notes",
1923
+ "recent": "Recent",
1924
+ "favorites": "Favorites",
1925
+ "open_local": "Open from device",
1926
+ "open_local_failed": "Could not open this file. Make sure it's a text or Markdown file.",
1927
+ "new": "New document",
1928
+ "no_recent": "No recently opened documents.",
1929
+ "no_favorites": "No favorites yet. Star a document from the editor to add it here.",
1930
+ "empty": "No notes yet. Tap “New document” or “Open from device” to start.",
1931
+ "loading": "Loading…",
1932
+ "new_kb": "New knowledge base",
1933
+ "kb_name_placeholder": "Knowledge base name",
1934
+ "create": "Create",
1935
+ "cancel": "Cancel",
1936
+ "kb_create_failed": "Could not create the knowledge base."
1937
+ },
1938
+ "media": {
1939
+ "title": "Cloud images",
1940
+ "search": "Search images",
1941
+ "loading": "Loading…",
1942
+ "empty": "No cloud images yet.",
1943
+ "insert": "Insert cloud image"
1944
+ }
1945
+ },
1946
+ "notifications": {
1947
+ "__mt": true,
1948
+ "title": "Push Notifications",
1949
+ "subtitle": "Receive alerts when your AI tasks finish or collaborators @ you.",
1950
+ "unsupported": "This browser does not support push notifications.",
1951
+ "permission_status": "Permission",
1952
+ "permission_denied": "Notification permission denied.",
1953
+ "denied_hint": "Open your browser settings to re-enable notifications.",
1954
+ "enable": "Enable",
1955
+ "disable": "Disable",
1956
+ "no_token": "Failed to obtain a device token.",
1957
+ "device_registered": "This device is registered:",
1958
+ "registered_devices": "Registered devices",
1959
+ "no_devices": "No devices registered yet.",
1960
+ "revoke": "Revoke",
1961
+ "revoke_confirm": "Revoke this device? It will stop receiving push notifications immediately.",
1962
+ "platform": {
1963
+ "web": "Web",
1964
+ "ios": "iOS",
1965
+ "android": "Android",
1966
+ "desktop": "Desktop",
1967
+ "unknown": "Unknown"
1968
+ },
1969
+ "registered_at": "Registered {date}",
1970
+ "last_seen": "Last seen {date}",
1971
+ "error_register": "Could not register this device.",
1972
+ "error_list": "Could not load device list."
1973
+ },
1974
+ "offline": {
1975
+ "__mt": true,
1976
+ "cache_enabled": "Offline cache enabled",
1977
+ "cache_disabled": "Offline cache disabled",
1978
+ "cache_size": "{size} cached",
1979
+ "cache_note_count": "{count} notes cached",
1980
+ "cache_expired": "Cache expired",
1981
+ "note_cached": "Note cached for offline",
1982
+ "note_evicted": "Note evicted from cache",
1983
+ "offline_banner": "You are offline. Showing cached content.",
1984
+ "cache_settings": "Offline Cache Settings",
1985
+ "max_notes": "Max cached notes"
1986
+ },
1987
+ "outline": {
1988
+ "empty": "No headings found",
1989
+ "title": "Outline",
1990
+ "expand": "Expand",
1991
+ "collapse": "Collapse"
1992
+ },
1993
+ "perf": {
1994
+ "__mt": true,
1995
+ "memory_warning": "High memory usage detected ({percent}%)",
1996
+ "memory_critical": "Critical memory usage ({percent}%)",
1997
+ "memory_trend_growing": "Memory growing",
1998
+ "memory_trend_stable": "Memory stable",
1999
+ "memory_trend_shrinking": "Memory shrinking",
2000
+ "vitals_score": "Performance score: {score}",
2001
+ "vitals_good": "Good",
2002
+ "vitals_needs_improvement": "Needs improvement",
2003
+ "vitals_poor": "Poor"
2004
+ },
2005
+ "permissions": {
2006
+ "__mt": true,
2007
+ "paste_title": "Allow Clipboard Access?",
2008
+ "paste_desc": "Moraya wants to read image data from your clipboard. This is used only when you paste an image.",
2009
+ "allow_once": "Allow Once",
2010
+ "allow_always": "Always Allow",
2011
+ "deny": "Deny",
2012
+ "granted": "Clipboard access granted",
2013
+ "denied": "Clipboard access denied",
2014
+ "revoke": "Revoke Permission"
2015
+ },
2016
+ "plugin_action": {
2017
+ "title": "Запустить плагин",
2018
+ "run_action": "Запустить",
2019
+ "invoking": "Выполняется...",
2020
+ "success": "Плагин применён",
2021
+ "no_changes": "Нет изменений",
2022
+ "no_plugins": "Нет запущенных плагинов"
2023
+ },
2024
+ "plugins": {
2025
+ "tabs": {
2026
+ "preset": "Встроенные",
2027
+ "installed": "Установленные",
2028
+ "market": "Маркетплейс"
2029
+ },
2030
+ "installed": {
2031
+ "empty": "Плагины ещё не установлены."
2032
+ },
2033
+ "sandbox": {
2034
+ "label": "Уровень песочницы",
2035
+ "sandbox": "Песочница (JS)",
2036
+ "local": "Локальный (без сети)",
2037
+ "system": "Системный (доступ к сети)"
2038
+ },
2039
+ "permissions": {
2040
+ "label": "Разрешения"
2041
+ },
2042
+ "market": {
2043
+ "search": "Поиск плагинов...",
2044
+ "refresh": "Обновить",
2045
+ "cat_all": "Все",
2046
+ "cached": "Показаны кэшированные результаты",
2047
+ "loading": "Загрузка маркетплейса...",
2048
+ "empty": "Плагины не найдены",
2049
+ "install": "Установить",
2050
+ "installed": "Установлено",
2051
+ "installing": "Установка..."
2052
+ },
2053
+ "install": {
2054
+ "from_file": "Установить из .zip",
2055
+ "url_placeholder": "URL репозитория GitHub (https://github.com/...)",
2056
+ "validate": "Импортировать",
2057
+ "confirm_url": "Установить плагин по URL?",
2058
+ "author": "Автор",
2059
+ "permissions": "Разрешения",
2060
+ "no_permissions": "Нет разрешений",
2061
+ "fetching_release": "Получение информации о релизе...",
2062
+ "downloading": "Загрузка..."
2063
+ },
2064
+ "verified": "Проверено",
2065
+ "enable": "Включить",
2066
+ "disable": "Отключить",
2067
+ "uninstall": "Удалить",
2068
+ "changelog": "Журнал изменений",
2069
+ "view_source": "Исходный код",
2070
+ "blacklisted": "В чёрном списке",
2071
+ "blacklist_warning": "Этот плагин добавлен в чёрный список из-за проблемы безопасности. Пожалуйста, удалите его.",
2072
+ "process_error": "Процесс плагина завершился аварийно. Переключите для перезапуска.",
2073
+ "error": {
2074
+ "platform_not_supported": "Нет загрузки для вашей платформы."
2075
+ },
2076
+ "preset": {
2077
+ "initializing": "Загрузка...",
2078
+ "download": "Скачать",
2079
+ "retry": "Повторить",
2080
+ "ready": "Включено",
2081
+ "downloading": "Загрузка...",
2082
+ "loading": "Загрузка...",
2083
+ "error": "Ошибка",
2084
+ "large_bundle": "Большой пакет (>500 КБ) — загрузка может занять некоторое время",
2085
+ "cancel": "Отмена",
2086
+ "delete": "Удалить"
2087
+ }
2088
+ },
2089
+ "publish": {
2090
+ "settings_empty": "Цели публикации не настроены",
2091
+ "settings_hint": "Добавьте репозиторий GitHub или пользовательскую API-конечную точку для публикации статей.",
2092
+ "add_target": "Добавить цель",
2093
+ "edit_target": "Редактировать",
2094
+ "delete_target": "Удалить",
2095
+ "test_connection": "Проверить соединение",
2096
+ "github": "Репозиторий GitHub",
2097
+ "custom_api": "Пользовательский API",
2098
+ "target_name": "Название",
2099
+ "target_name_placeholder": "напр., Мой блог",
2100
+ "repo_url": "URL репозитория",
2101
+ "repo_url_placeholder": "https://github.com/user/blog",
2102
+ "branch": "Ветка",
2103
+ "articles_dir": "Каталог статей",
2104
+ "articles_dir_placeholder": "content/posts/",
2105
+ "images_dir": "Каталог изображений",
2106
+ "images_dir_placeholder": "static/images/",
2107
+ "token": "Personal Access Token",
2108
+ "token_placeholder": "ghp_xxxxxxxxxxxx",
2109
+ "front_matter_template": "Шаблон Front Matter",
2110
+ "endpoint": "API-конечная точка",
2111
+ "endpoint_placeholder": "https://api.example.com/articles",
2112
+ "method": "HTTP-метод",
2113
+ "headers": "Заголовки (JSON)",
2114
+ "body_template": "Шаблон тела запроса",
2115
+ "template_presets": "Шаблоны",
2116
+ "preset_hugo": "Hugo",
2117
+ "preset_hexo": "Hexo",
2118
+ "preset_astro": "Astro",
2119
+ "preset_custom": "Пользовательский",
2120
+ "file_name_pattern": "Шаблон имени файла",
2121
+ "file_name_preset": "Пресет имени",
2122
+ "file_name_preview": "Предпросмотр",
2123
+ "preset_simple": "Простой (имя файла)",
2124
+ "preset_date_slug": "Дата + Slug",
2125
+ "preset_date_filename": "Дата + Имя файла",
2126
+ "preset_year_month": "Год/Месяц/Slug",
2127
+ "file_name_variables": "Переменные: {{date}}, {{year}}, {{month}}, {{day}}, {{slug}}, {{filename}}, {{title}}",
2128
+ "rss_section": "RSS Лента",
2129
+ "rss_enable": "Генерировать RSS-ленту",
2130
+ "rss_enable_hint": "Автоматически обновлять feed.xml при публикации",
2131
+ "rss_feed_path": "Путь к файлу ленты",
2132
+ "rss_feed_path_placeholder": "feed.xml",
2133
+ "rss_site_url": "URL сайта",
2134
+ "rss_site_url_placeholder": "https://myblog.com",
2135
+ "rss_feed_title": "Заголовок ленты",
2136
+ "rss_feed_title_placeholder": "Мой блог",
2137
+ "rss_feed_description": "Описание ленты",
2138
+ "rss_feed_description_placeholder": "Статьи о...",
2139
+ "rss_language": "Язык",
2140
+ "rss_author_name": "Автор",
2141
+ "rss_author_name_placeholder": "Иван Иванов",
2142
+ "rss_max_items": "Макс. элементов в ленте",
2143
+ "rss_include_full_content": "Включать полный текст статьи в ленту",
2144
+ "rss_feed_endpoint": "Конечная точка RSS-ленты",
2145
+ "rss_feed_endpoint_placeholder": "https://api.example.com/rss",
2146
+ "rss_update_failed": "Ошибка обновления RSS-ленты",
2147
+ "progress_title": "Публикация...",
2148
+ "progress_publishing": "Загрузка...",
2149
+ "progress_rss": "Обновление RSS...",
2150
+ "progress_done": "Готово",
2151
+ "progress_failed": "Ошибка",
2152
+ "enable_seo": "SEO-оптимизация",
2153
+ "enable_seohint": "Сгенерировать заголовок, отрывок, теги и мета-описание перед публикацией",
2154
+ "next_seo": "Далее: SEO →",
2155
+ "back_to_targets": "Назад",
2156
+ "seo_no_provider": "Поставщик ИИ не настроен. Пожалуйста, настройте поставщика ИИ в настройках."
2157
+ },
2158
+ "pwa": {
2159
+ "__mt": true,
2160
+ "install_prompt": "Install Moraya Web for a better experience.",
2161
+ "install": "Install",
2162
+ "dismiss": "Not now",
2163
+ "update_available": "A new version is available.",
2164
+ "refresh": "Refresh"
2165
+ },
2166
+ "quickopen": {
2167
+ "__mt": true,
2168
+ "title": "Quick Open",
2169
+ "placeholder": "Search notes...",
2170
+ "no_results": "No notes found",
2171
+ "hint_enter": "↵ Open",
2172
+ "hint_cmd_enter": "⌘↵ Open in new tab"
2173
+ },
2174
+ "rag": {
2175
+ "__mt": true,
2176
+ "title": "AI Knowledge Search (RAG)",
2177
+ "mode_label": "Search Mode",
2178
+ "mode_disabled": "Disabled",
2179
+ "mode_client": "Client-side (E2E compatible)",
2180
+ "mode_server": "Server-side (faster, KMS required)",
2181
+ "index_status": "Index Status",
2182
+ "indexed_notes": "Indexed notes",
2183
+ "rebuild_index": "Rebuild Full Index",
2184
+ "pause_rebuild": "Pause",
2185
+ "rebuilding": "Rebuilding index...",
2186
+ "search_settings": "Search Settings",
2187
+ "top_k_label": "Results (top-K)",
2188
+ "threshold_label": "Min. similarity",
2189
+ "sources_label": "Sources",
2190
+ "sources_count": "{n} note excerpts",
2191
+ "jump_to_source": "Jump to note →",
2192
+ "no_sources": "No sources",
2193
+ "server_mode_warning": "Server mode lets Moraya temporarily decrypt your notes for indexing. Requires Cloud KMS.",
2194
+ "model_version": "Model version",
2195
+ "upgrade_for_cross_kb": "Upgrade to Personal to search across all your knowledge bases."
2196
+ },
2197
+ "review": {
2198
+ "panel_title": "Рецензии",
2199
+ "tab_label": "Рецензия",
2200
+ "no_reviews": "Рецензий пока нет",
2201
+ "no_reviews_hint": "Выделите текст в редакторе и нажмите ⌘⇧R, чтобы добавить рецензию.",
2202
+ "not_git_bound": "Не привязан к репозиторию Git",
2203
+ "not_git_bound_hint": "Привяжите базу знаний к репозиторию Git для совместного рецензирования.",
2204
+ "bind_git_btn": "Привязать репозиторий Git",
2205
+ "open_count": "открыт",
2206
+ "resolved_count": "Решено",
2207
+ "add_review": "Добавить рецензию",
2208
+ "reply": "Ответить",
2209
+ "resolve": "Resolve",
2210
+ "wontfix": "Не будет исправлено",
2211
+ "reanchor": "Перепривязать",
2212
+ "mark_resolved": "Отметить как решённое",
2213
+ "resolved": "Решено",
2214
+ "wontfix_label": "Не будет исправлено",
2215
+ "unanchored": "Позиция потеряна",
2216
+ "relocated": "Позиция изменена",
2217
+ "verified_prompt": "Документ изменился с момента последней проверки. Отметить как проверенное?",
2218
+ "mark_verified": "Отметить как проверенное",
2219
+ "lock_self": "Вы редактируете этот файл",
2220
+ "lock_other": "редактирует этот файл",
2221
+ "lock_expiry": "мин. осталось",
2222
+ "view_readonly": "Просмотр только для чтения",
2223
+ "force_unlock": "Принудительная разблокировка",
2224
+ "select_text_first": "Сначала выберите текст",
2225
+ "source_mode_limit_hint": "Рецензии доступны только в визуальном режиме",
2226
+ "default_comment": "",
2227
+ "ai_improve": "AI Improve",
2228
+ "ai_summary": "AI Summary",
2229
+ "ai_review": "AI Review",
2230
+ "ai_respond": "AI Suggest",
2231
+ "ai_in_progress": "AI is analyzing the document…",
2232
+ "ai_cancel": "Cancel",
2233
+ "ai_no_results": "AI generated no review suggestions",
2234
+ "ai_invalid_filtered": "{count} review(s) had invalid format and were skipped",
2235
+ "ai_author_badge": "AI",
2236
+ "ai_hint_from_tool": "AI returned reviews via tool call",
2237
+ "ai_hint_from_json": "AI returned reviews via JSON fallback",
2238
+ "ai_hint_failed": "This model does not support AI Review. Switch to Claude / GPT-4 / Gemini.",
2239
+ "ai_disclaimer_title": "Enable AI Review — Data Use Notice",
2240
+ "ai_disclaimer_body": "AI Review will send the entire current document and all review comments to your selected AI provider:",
2241
+ "ai_disclaimer_body_details": "Reviews may include team members' names and internal discussion. Please confirm this knowledge base is suitable for cloud processing.",
2242
+ "ai_disclaimer_local_hint": "Want to keep everything local? Switch to an Ollama provider — all processing happens on this machine.",
2243
+ "ai_disclaimer_switch_local": "Switch to local provider",
2244
+ "ai_disclaimer_confirm": "I understand, enable AI Review",
2245
+ "ai_disclaimer_dont_ask": "Don't ask again for this provider",
2246
+ "dimension_logic": "Logic",
2247
+ "dimension_expression": "Expression",
2248
+ "dimension_fact": "Fact",
2249
+ "dimension_structure": "Structure",
2250
+ "ai_inflight_cancelled": "AI Review cancelled because the active file changed",
2251
+ "ai_merge_blocked": "Repository is in the middle of a merge. Resolve conflicts first.",
2252
+ "title": "Reviews",
2253
+ "no_open": "No open reviews.",
2254
+ "resolved_section": "Resolved",
2255
+ "add_comment": "Add a comment…",
2256
+ "send": "Send",
2257
+ "orphaned": "orphaned",
2258
+ "type_suggest": "Suggestion",
2259
+ "type_question": "Question",
2260
+ "type_approve": "Approved",
2261
+ "type_reject": "Rejected",
2262
+ "ai_review_unavailable": "AI Review requires Cloud KMS encryption mode.",
2263
+ "close": "Close"
2264
+ },
2265
+ "search": {
2266
+ "find_placeholder": "Find...",
2267
+ "replace_placeholder": "Replace with...",
2268
+ "no_results": "No results",
2269
+ "case_sensitive": "Учитывать регистр",
2270
+ "replace": "Replace",
2271
+ "replace_all": "Replace All",
2272
+ "regex": "Использовать регулярное выражение",
2273
+ "regex_error": "Некорректное регулярное выражение",
2274
+ "match_status": "{current} / {total}",
2275
+ "toggle_regex": "Toggle regular expression",
2276
+ "toggle_case": "Toggle case-sensitive",
2277
+ "prev": "Previous match",
2278
+ "next": "Next match",
2279
+ "open_replace": "Open replace",
2280
+ "close_replace": "Close replace",
2281
+ "close": "Close search",
2282
+ "invalid_regex": "Invalid regular expression"
2283
+ },
2284
+ "security": {
2285
+ "__mt": true,
2286
+ "title": "Security",
2287
+ "encryption_mode_label": "Encryption Mode",
2288
+ "mode_none": "None",
2289
+ "mode_e2e": "E2E Client Encryption",
2290
+ "mode_kms": "Cloud KMS",
2291
+ "setup_title": "Set Up E2E Encryption",
2292
+ "setup_subtitle": "Your notes will be encrypted before leaving your device. Moraya cannot read your notes.",
2293
+ "passphrase_label": "Passphrase",
2294
+ "passphrase_confirm_label": "Confirm Passphrase",
2295
+ "passphrase_strength_weak": "Too weak",
2296
+ "passphrase_strength_fair": "Fair",
2297
+ "passphrase_strength_strong": "Strong",
2298
+ "passphrase_strength_very_strong": "Very strong",
2299
+ "passphrase_min_length": "Minimum 12 characters",
2300
+ "passphrase_mismatch": "Passphrases do not match",
2301
+ "passphrase_too_weak": "Passphrase is too weak. Use a longer, more complex phrase.",
2302
+ "warning_no_recovery": "⚠️ If you forget your passphrase and lose your recovery code, your data cannot be recovered. Moraya has no backup.",
2303
+ "recovery_code_title": "Your Recovery Code",
2304
+ "recovery_code_subtitle": "Write down these 12 words. You will need them if you forget your passphrase.",
2305
+ "recovery_confirm_instruction": "Enter word #{n} to confirm you wrote it down:",
2306
+ "recovery_confirm_correct": "Correct! Enter word #{n}:",
2307
+ "recovery_confirm_wrong": "Wrong word. Try again.",
2308
+ "recovery_complete": "Recovery code confirmed.",
2309
+ "i_have_written_down": "I have written down my recovery code",
2310
+ "unlock_title": "Unlock Your Notes",
2311
+ "unlock_subtitle": "Enter your passphrase to decrypt your notes.",
2312
+ "unlock_button": "Unlock",
2313
+ "unlock_failed": "Wrong passphrase. Please try again.",
2314
+ "unlock_remember_device": "Remember this device for 7 days",
2315
+ "migrate_title": "Upgrade to Cloud KMS",
2316
+ "migrate_subtitle": "Your notes will be re-encrypted using your cloud KMS. Moraya can use your KMS to assist with AI features.",
2317
+ "migrate_warning": "This is a one-way migration. You cannot revert to E2E mode without exporting and re-importing all data.",
2318
+ "migrate_confirm": "I understand and want to proceed",
2319
+ "migrate_progress": "Migrating {completed}/{total} notes...",
2320
+ "migrate_done": "Migration complete!",
2321
+ "migrate_failed": "Migration failed. Your original data is unchanged.",
2322
+ "kms_provider_label": "KMS Provider",
2323
+ "kms_key_arn_label": "Key ARN / Key ID",
2324
+ "kms_role_arn_label": "Role ARN (for AssumeRole)",
2325
+ "kms_verify": "Verify KMS Connection",
2326
+ "kms_verified": "KMS connection verified",
2327
+ "kms_verify_failed": "KMS connection failed",
2328
+ "back": "Back",
2329
+ "next": "Next",
2330
+ "save": "Save",
2331
+ "cancel": "Cancel",
2332
+ "setup_complete": "E2E encryption enabled",
2333
+ "deriving_key": "Deriving encryption key...",
2334
+ "encrypting": "Encrypting notes...",
2335
+ "current_mode": "Current mode: {mode}",
2336
+ "last_unlock": "Last unlocked: {time}",
2337
+ "use_recovery_code": "Use recovery code instead",
2338
+ "recovery_unlock_title": "Recover Access",
2339
+ "recovery_unlock_subtitle": "Enter your 12-word recovery code to regain access.",
2340
+ "recovery_code_input": "Recovery Code (12 words, space-separated)",
2341
+ "recovery_unlock_button": "Recover",
2342
+ "set_new_passphrase": "Set New Passphrase"
2343
+ },
2344
+ "seo": {
2345
+ "title": "SEO Оптимизация",
2346
+ "generating": "Анализ статьи...",
2347
+ "titles": "Варианты заголовков",
2348
+ "custom_title": "Свой заголовок...",
2349
+ "excerpt": "Аннотация",
2350
+ "tags": "Теги",
2351
+ "add_tag": "Добавить тег...",
2352
+ "slug": "URL Slug",
2353
+ "meta_description": "Мета-описание",
2354
+ "regenerate": "Сгенерировать заново",
2355
+ "apply": "Применить",
2356
+ "retry": "Повторить",
2357
+ "content_too_short": "Содержимое статьи слишком короткое для SEO-анализа.",
2358
+ "completed": "SEO оптимизировано",
2359
+ "step_description": "Генерация заголовка, аннотации и тегов"
2360
+ },
2361
+ "sessions": {
2362
+ "__mt": true,
2363
+ "title": "Active Sessions",
2364
+ "active_sessions": "Active Sessions",
2365
+ "anomaly_alerts": "Security Alerts",
2366
+ "current": "Current",
2367
+ "last_active": "Last active",
2368
+ "revoke": "Revoke",
2369
+ "revoking": "Revoking…",
2370
+ "confirm_revoke": "Revoke this session?",
2371
+ "yes": "Yes",
2372
+ "no": "Cancel",
2373
+ "dismiss": "Dismiss",
2374
+ "just_now": "Just now",
2375
+ "hours_ago": "h ago",
2376
+ "days_ago": "d ago"
2377
+ },
2378
+ "settings": {
2379
+ "title": "Settings",
2380
+ "tabs": {
2381
+ "general": "Основные",
2382
+ "editor": "Редактор",
2383
+ "appearance": "Внешний вид",
2384
+ "ai": "Чат",
2385
+ "image_ai": "Изображение ИИ",
2386
+ "mcp": "MCP",
2387
+ "image": "Хостинг",
2388
+ "publish": "Публикация",
2389
+ "voice": "Голос ИИ",
2390
+ "knowledge_base": "База знаний",
2391
+ "plugins": "Плагины",
2392
+ "kb_sync": "Синхронизация KB",
2393
+ "picora": "Picora",
2394
+ "export": "Экспорт",
2395
+ "shortcuts": "Сочетания клавиш"
2396
+ },
2397
+ "groups": {
2398
+ "general": "Основные",
2399
+ "ai": "Настройки ИИ",
2400
+ "extensions": "Расширения",
2401
+ "knowledge_base": "База знаний",
2402
+ "picora": "Picora"
2403
+ },
2404
+ "tab_desc": {
2405
+ "image": "Настройте облачные хранилища для загрузки изображений.",
2406
+ "publish": "Настройте цели публикации: блог, GitHub Pages, RSS и другие.",
2407
+ "export": "Настройка экспорта PDF — размер страницы, поля, шрифты и переключатели содержимого."
2408
+ },
2409
+ "language": {
2410
+ "label": "Язык",
2411
+ "system": "Системный"
2412
+ },
2413
+ "theme": {
2414
+ "label": "Тема",
2415
+ "system": "Системная",
2416
+ "light": "Светлая",
2417
+ "dark": "Тёмная"
2418
+ },
2419
+ "appearance": {
2420
+ "theme_section": "Тема",
2421
+ "dark_mode_section": "Тёмный режим",
2422
+ "font_section": "Шрифт",
2423
+ "separate_dark_theme": "Использовать отдельную тему для тёмного режима",
2424
+ "dark_theme": "Тема тёмного режима",
2425
+ "dark_mode_label": "Режим оформления"
2426
+ },
2427
+ "font_size": {
2428
+ "label": "Размер шрифта"
2429
+ },
2430
+ "auto_save": {
2431
+ "label": "Автосохранение",
2432
+ "interval": "Интервал автосохранения"
2433
+ },
2434
+ "remember_last_folder": "Запоминать последнюю открытую папку",
2435
+ "show_cloud_insert_entries": "Показывать пункты меню облачной вставки",
2436
+ "show_cloud_insert_entries_desc": "Добавить опции «Вставить облачное изображение/аудио/видео» в меню Формат и контекстное меню.",
2437
+ "rules_history_count": "История версий MORAYA.md",
2438
+ "rules_history_count_hint": "Количество хранимых исторических версий на файл правил (по умолчанию: 10)",
2439
+ "editor": {
2440
+ "line_width": "Ширина строки редактора",
2441
+ "tab_size": "Размер табуляции",
2442
+ "show_line_numbers": "Показывать номера строк в режиме исходного кода"
2443
+ },
2444
+ "version": "Moraya v{version}",
2445
+ "permissions": {
2446
+ "mcp_title": "Разрешения MCP",
2447
+ "ai_title": "Настройки AI",
2448
+ "ai_max_tokens": "Максимум выходных токенов",
2449
+ "ai_max_tokens_hint": "Максимальное количество токенов, которое AI может сгенерировать за один ответ. Большие значения позволяют более длинные ответы и вызовы инструментов, но расходуют больше средств.",
2450
+ "ai_tool_result_max_chars": "Макс. символов в результате инструмента",
2451
+ "ai_tool_result_max_chars_hint": "Максимальное количество символов, сохраняемых из результата каждого MCP-инструмента. Большие значения сохраняют больше деталей, но потребляют больше контекста.",
2452
+ "ai_max_tool_rounds": "Макс. раундов вызова инструментов",
2453
+ "ai_max_tool_rounds_hint": "Максимальное количество раундов вызова инструментов, которое AI может выполнить за один ход диалога. Увеличьте для сложных многошаговых задач."
2454
+ },
2455
+ "voice": {
2456
+ "providers": "Провайдеры распознавания речи",
2457
+ "add_provider": "Добавить провайдера",
2458
+ "edit_provider": "Редактировать провайдера",
2459
+ "no_providers": "Провайдеры распознавания речи не настроены.",
2460
+ "provider": "Провайдер",
2461
+ "api_key": "API Key",
2462
+ "api_key_optional": "Необязательно для AWS (используйте Access Key)",
2463
+ "aws_access_key": "AWS Access Key ID",
2464
+ "aws_secret_key": "AWS Secret Access Key",
2465
+ "region": "Регион",
2466
+ "model": "Модель",
2467
+ "model_placeholder": "Введите название модели",
2468
+ "endpoint_id_placeholder": "Введите ID конечной точки вывода",
2469
+ "language": "Язык",
2470
+ "lang_auto": "Автоопределение",
2471
+ "lang_multi": "Мультиязычный",
2472
+ "base_url": "Пользовательский URL WebSocket",
2473
+ "test_connection": "Проверить соединение",
2474
+ "testing": "Проверка...",
2475
+ "test_ok": "Подключено",
2476
+ "test_failed": "Ошибка подключения",
2477
+ "set_active": "Установить по умолчанию",
2478
+ "active": "По умолчанию",
2479
+ "custom": "Пользовательский",
2480
+ "storage": "Хранилище",
2481
+ "recording_backup_dir": "Резервное копирование записей",
2482
+ "recording_backup_hint": "Сохранять полные записи в формате WAV после каждой сессии.",
2483
+ "voice_sync_dir": "Каталог синхронизации голосовых профилей",
2484
+ "voice_sync_hint": "Синхронизация голосовых профилей через облачное хранилище (например, iCloud, Dropbox). Нажмите «Изменить», чтобы выбрать папку — существующие профили будут перенесены автоматически.",
2485
+ "sync_default": "Данные приложения (по умолчанию)",
2486
+ "disabled": "Отключено",
2487
+ "migrating_profiles": "Перенос...",
2488
+ "migration_failed": "Ошибка переноса",
2489
+ "profiles": "Голосовые профили",
2490
+ "no_profiles": "Голосовых профилей пока нет. Они создаются автоматически после сеансов транскрипции.",
2491
+ "naming": {
2492
+ "male": "Мужчина {n}",
2493
+ "female": "Женщина {n}",
2494
+ "bystander": "Наблюдатель {n}",
2495
+ "speaker": "Говорящий {n}"
2496
+ },
2497
+ "providers_hint": "Настройка поставщиков речи для транскрипции голоса."
2498
+ },
2499
+ "image_host": {
2500
+ "picora": {
2501
+ "moved_hint": "Настройки Picora теперь находятся во вкладке Picora.",
2502
+ "jump_to_tab": "Перейти к вкладке Picora"
2503
+ },
2504
+ "subtitle_suffix": "Специфичные для Picora опции находятся во вкладке Picora."
2505
+ },
2506
+ "picora": {
2507
+ "account": {
2508
+ "title": "Аккаунты Picora",
2509
+ "add": "Добавить аккаунт Picora",
2510
+ "add_first": "Начать",
2511
+ "empty": "Аккаунтов Picora пока нет. Подключите аккаунт, чтобы включить вставку облачных медиа и синхронизацию KB.",
2512
+ "set_default": "Установить по умолчанию",
2513
+ "test": "Проверить соединение",
2514
+ "edit": "Изменить",
2515
+ "remove": "Удалить",
2516
+ "quota": "Квота",
2517
+ "unknown_email": "(нет email)",
2518
+ "no_endpoint": "(нет endpoint)",
2519
+ "in_use": "Используется в {n}",
2520
+ "quota_loading": "Загрузка квоты…",
2521
+ "quota_unavailable": "Квота недоступна — нажмите ↻ для повтора",
2522
+ "data_point_na": "Точка данных недоступна",
2523
+ "needs_picora_v017": "Требуется Picora v0.17.1+",
2524
+ "not_activated": "Вы ещё не активировали план Picora.",
2525
+ "activate": "Активировать план",
2526
+ "remove_confirm_title": "Удалить аккаунт Picora",
2527
+ "remove_confirm_body": "Удаляется: {email}",
2528
+ "cascade_default": "Это аккаунт Picora по умолчанию — новый по умолчанию будет выбран автоматически.",
2529
+ "cascade_image_host": "Это хост изображений по умолчанию — по умолчанию будет сброшен.",
2530
+ "cascade_kb_bindings": "{n} баз знаний будут отвязаны. Облачные данные сохранены на Picora.",
2531
+ "cloud_data_preserved": "Будет удалена только локальная конфигурация. Облачные данные на Picora сохраняются.",
2532
+ "confirm_remove": "Удалить"
2533
+ },
2534
+ "edit_title": "Изменить аккаунт Picora",
2535
+ "kb_sync": {
2536
+ "title": "Синхронизация KB",
2537
+ "open_manager": "Открыть настройки синхронизации KB",
2538
+ "empty": "Баз знаний пока нет.",
2539
+ "missing_target": "(цель отсутствует)",
2540
+ "never": "Не синхронизировано",
2541
+ "error": "ошибка синхронизации",
2542
+ "unbound_label": "Не привязано к Picora:",
2543
+ "bind_action": "Привязать к по умолчанию"
2544
+ },
2545
+ "resources": {
2546
+ "title": "Браузер облачных ресурсов",
2547
+ "tabs": {
2548
+ "image": "Изображения",
2549
+ "audio": "Аудио",
2550
+ "video": "Видео"
2551
+ }
2552
+ },
2553
+ "advanced": {
2554
+ "title": "Дополнительно",
2555
+ "img_domain": "Домен вставки по умолчанию",
2556
+ "img_domain_hint": "Используется как публичный префикс URL при вставке изображений Picora.",
2557
+ "rewrite_base64": "Автоматически переписывать base64-изображения в документах в Picora CDN при загрузке",
2558
+ "sidebar_pin": "Показывать ярлык Picora в главной боковой панели",
2559
+ "debug": "Включить ведение журнала отладки"
2560
+ },
2561
+ "banner": "Новая вкладка Picora. Все настройки Picora перенесены сюда; вкладка хостинга изображений по-прежнему работает.",
2562
+ "banner_dismiss": "Понятно",
2563
+ "welcome": {
2564
+ "title": "Добро пожаловать в Picora — один дом для ваших медиа",
2565
+ "body": "Хостите изображения, аудио, видео и Markdown-документы в собственном аккаунте Picora. Синхронизируйте базы знаний между устройствами и вставляйте облачные ресурсы из редактора одним кликом.",
2566
+ "one_click": "Импорт в один клик (рекомендуется)",
2567
+ "manual": "Добавить вручную",
2568
+ "or": "или",
2569
+ "register": "Нет аккаунта? Зарегистрируйтесь на Picora"
2570
+ },
2571
+ "quota": {
2572
+ "images": "Изображения",
2573
+ "docs": "Документы",
2574
+ "audio": "Аудио",
2575
+ "videos": "Видео",
2576
+ "kbs": "KB"
2577
+ },
2578
+ "plan": {
2579
+ "none": "Неактивен",
2580
+ "trial": "Пробная",
2581
+ "pro": "Pro",
2582
+ "pro_plus": "Pro+"
2583
+ }
2584
+ },
2585
+ "export": {
2586
+ "paper_size": "Размер бумаги",
2587
+ "paper_a4": "A4",
2588
+ "paper_letter": "Letter",
2589
+ "paper_legal": "Legal",
2590
+ "paper_a3": "A3",
2591
+ "paper_a5": "A5",
2592
+ "orientation": "Ориентация",
2593
+ "orientation_portrait": "Книжная",
2594
+ "orientation_landscape": "Альбомная",
2595
+ "margins": "Поля (мм)",
2596
+ "margins_top": "Сверху",
2597
+ "margins_right": "Справа",
2598
+ "margins_bottom": "Снизу",
2599
+ "margins_left": "Слева",
2600
+ "header_footer": "Колонтитулы",
2601
+ "header_enabled": "Включить колонтитул сверху",
2602
+ "footer_enabled": "Включить колонтитул снизу",
2603
+ "template_hint": "Метки: {title} {page} {total} {date}",
2604
+ "typography": "Типографика",
2605
+ "font_family": "Шрифт",
2606
+ "font_family_placeholder": "По умолчанию",
2607
+ "font_size": "Размер шрифта",
2608
+ "content": "Содержимое",
2609
+ "enable_highlight": "Подсветка синтаксиса",
2610
+ "enable_math": "Формулы (KaTeX)",
2611
+ "enable_mermaid": "Диаграммы Mermaid",
2612
+ "advanced": "Дополнительно",
2613
+ "auto_fallback": "Автоматически переключаться в режим совместимости при ошибке",
2614
+ "auto_fallback_hint": "Если нативный путь печати завершится с ошибкой, повторить через canvas. Отключите, чтобы показывать ошибки и давать пользователю повторить вручную."
2615
+ },
2616
+ "account": "Account",
2617
+ "devices": "Devices",
2618
+ "about": "About",
2619
+ "select_section": "Select a settings section from the left.",
2620
+ "ai": {
2621
+ "title": "AI",
2622
+ "cloud_providers": "Cloud Providers",
2623
+ "local_models": "On-device Models",
2624
+ "add": "Add",
2625
+ "edit": "Edit provider",
2626
+ "delete": "Delete",
2627
+ "delete_confirm": "Delete this provider configuration?",
2628
+ "provider_deleted": "Deleted “{label}”",
2629
+ "provider_restored": "Provider restored",
2630
+ "save": "Save",
2631
+ "test": "Test",
2632
+ "testing": "Testing…",
2633
+ "test_ok": "Connection OK",
2634
+ "test_auth_error": "Auth failed — check API key",
2635
+ "test_network_error": "Network error",
2636
+ "test_rate_limited": "Rate limited — try later",
2637
+ "test_unsupported": "Unsupported response",
2638
+ "test_not_configured": "Not configured",
2639
+ "provider": "Provider",
2640
+ "label": "Label",
2641
+ "api_key": "API Key",
2642
+ "api_key_hint": "Stored only on this device.",
2643
+ "base_url": "Base URL (optional)",
2644
+ "base_url_hint": "Custom OpenAI-compatible endpoint, e.g. Ollama: http://192.168.1.10:11434/v1",
2645
+ "default_model": "Default model",
2646
+ "active": "Active",
2647
+ "set_active": "Use",
2648
+ "status_ready": "Ready",
2649
+ "status_not_configured": "Not configured",
2650
+ "empty_cloud": "No cloud providers configured. Tap “Add” to set up OpenAI, Claude, Gemini, DeepSeek, or any OpenAI-compatible endpoint.",
2651
+ "cloud_hint": "Your API keys are stored locally and sent directly to the provider — Moraya never sees them.",
2652
+ "rag": {
2653
+ "title": "History Reference (RAG)",
2654
+ "enabled": "Reference past conversations",
2655
+ "topk": "Snippets per send",
2656
+ "hint": "When on, Moraya finds up to N relevant snippets from your past AI chats and includes them as context. Off by default — increases token usage. Keyword-based search (no embeddings yet)."
2657
+ },
2658
+ "local": {
2659
+ "free_space": "Device free space",
2660
+ "unknown": "Unknown",
2661
+ "estimate_hint": "Estimated from browser quota.",
2662
+ "native_probe_failed": "Could not read native device free space; showing browser estimate.",
2663
+ "browser_only_hint": "On-device models are available only inside the Moraya iOS / Android app.",
2664
+ "browser_only_footer": "Open this page inside the Moraya mobile app to download and run on-device models.",
2665
+ "mobile_only": "On-device models are only available in the Moraya iOS / Android app.",
2666
+ "download": "Download",
2667
+ "cancel": "Cancel",
2668
+ "use": "Use",
2669
+ "delete": "Delete",
2670
+ "delete_confirm": "Delete {name} from this device?",
2671
+ "delete_failed": "Delete failed: {err}",
2672
+ "download_failed": "Download failed: {err}",
2673
+ "now_active": "{name} is now your active AI model.",
2674
+ "installed": "Installed",
2675
+ "too_big": "Too large",
2676
+ "fit_warn_inline": "This download will use more than 70% of your free space.",
2677
+ "fit_warn": "This model ({size}) will use over 70% of your free space and may slow iOS. Continue?",
2678
+ "fit_block": "Not enough free space for this model ({size}).",
2679
+ "engine_pending_title": "Inference engine pending Xcode setup",
2680
+ "engine_pending_text": "Models can be downloaded today. To run them, link MLX-Swift via Xcode → File → Add Package Dependencies (https://github.com/ml-explore/mlx-swift + mlx-swift-examples), or run `ruby scripts/add-mlx-spm.rb` in moraya-mobile/. The plugin auto-detects the link and activates.",
2681
+ "wifi_only": "Wi-Fi only downloads",
2682
+ "on_wifi": "Connected via Wi-Fi.",
2683
+ "on_cellular_blocked": "On cellular — downloads paused. Toggle off to allow.",
2684
+ "on_cellular_ok": "On cellular — downloads allowed.",
2685
+ "offline": "No network connection.",
2686
+ "cellular_blocked": "Downloads are blocked on cellular. Connect to Wi-Fi or turn off “Wi-Fi only”.",
2687
+ "update": "Update",
2688
+ "update_confirm": "Update {name}? The current copy will be deleted and the latest version downloaded."
2689
+ },
2690
+ "custom_templates": "Custom AI Templates",
2691
+ "empty_templates": "No custom templates yet. Tap “Add” to create a reusable system prompt.",
2692
+ "templates_hint": "Your templates appear in the AI tab’s empty-state quick actions alongside the built-ins.",
2693
+ "custom_workflows": "Custom AI Workflows",
2694
+ "empty_workflows": "No custom workflows yet. Tap “Add” to chain multiple AI steps.",
2695
+ "workflows_hint": "Workflows run their steps sequentially, feeding each step’s output into the next.",
2696
+ "wf": {
2697
+ "add": "New workflow",
2698
+ "edit": "Edit workflow",
2699
+ "name_placeholder": "e.g. Translate then bullet-summarize",
2700
+ "desc_placeholder": "Shown under the tile in the AI tab",
2701
+ "step_label_placeholder": "Step label (e.g. “Translate”)",
2702
+ "step_system_placeholder": "System prompt for this step",
2703
+ "input_tpl_hint": "Use {prev} for the previous step's output and {input} for the user's first message.",
2704
+ "add_step": "Add step",
2705
+ "remove_step": "Remove step",
2706
+ "required_name": "Workflow needs a name.",
2707
+ "required_steps": "Workflow needs at least one step with a system prompt.",
2708
+ "delete_confirm": "Delete this workflow?",
2709
+ "deleted": "Deleted “{name}”",
2710
+ "restored": "Workflow restored"
2711
+ },
2712
+ "tpl": {
2713
+ "add": "New template",
2714
+ "edit": "Edit template",
2715
+ "icon": "Icon",
2716
+ "name": "Name",
2717
+ "name_placeholder": "e.g. Code reviewer",
2718
+ "desc": "Short description",
2719
+ "desc_placeholder": "Shown under the tile",
2720
+ "system_prompt": "System prompt",
2721
+ "system_prompt_placeholder": "Behavior guidance the model receives at the start of every conversation using this template.",
2722
+ "requires_image": "Open image picker on tap",
2723
+ "requires_doc": "Auto-mention the open doc",
2724
+ "auto_insert": "Auto-open “Insert into note” when finished",
2725
+ "save": "Save",
2726
+ "delete": "Delete",
2727
+ "delete_confirm": "Delete this template?",
2728
+ "deleted": "Deleted “{name}”",
2729
+ "restored": "Template restored",
2730
+ "required_fields": "Name and system prompt are required.",
2731
+ "import": "Import",
2732
+ "export": "Export",
2733
+ "import_merge_confirm": "Import {n} template(s) and append to your library?",
2734
+ "import_empty": "The file contains no templates.",
2735
+ "import_failed": "Import failed: {err}"
2736
+ },
2737
+ "usage": {
2738
+ "title": "AI Usage",
2739
+ "loading": "Reading conversations…",
2740
+ "empty": "No AI calls this month yet — usage shows up after your first reply.",
2741
+ "tokens": "Tokens",
2742
+ "conversations": "Conversations",
2743
+ "cost": "Cost",
2744
+ "by_model": "By model",
2745
+ "history": "Previous months"
2746
+ },
2747
+ "budget": {
2748
+ "title": "Monthly Budget",
2749
+ "edit": "Edit",
2750
+ "done": "Done",
2751
+ "no_limit": "No monthly limit set.",
2752
+ "usd_limit": "USD limit / month",
2753
+ "cny_limit": "CNY limit / month",
2754
+ "alert_threshold": "Warn at (0–1)",
2755
+ "hint": "Setting either currency to 0 disables that cap. Warn threshold 0 disables warnings."
2756
+ }
2757
+ },
2758
+ "mcp": "MCP servers",
2759
+ "image_gen": {
2760
+ "title": "Image generation",
2761
+ "providers": "Providers",
2762
+ "add": "Add",
2763
+ "edit": "Edit image provider",
2764
+ "delete": "Delete",
2765
+ "save": "Save",
2766
+ "provider": "Provider",
2767
+ "label": "Label",
2768
+ "api_key": "API Key",
2769
+ "api_key_hint": "Stored only on this device. BYO key — never sent to Moraya servers.",
2770
+ "base_url": "Base URL (optional)",
2771
+ "base_url_hint": "Override for OpenAI-compatible image endpoints (Together AI, Cloudflare AI Gateway, on-prem proxies).",
2772
+ "default_model": "Default model",
2773
+ "active": "Active",
2774
+ "set_active": "Use",
2775
+ "status_ready": "Ready",
2776
+ "status_no_key": "No API key",
2777
+ "empty": "No image providers configured. Tap “Add” to set up OpenAI DALL-E or Doubao Seedream.",
2778
+ "hint": "Image-gen providers power workflow `ai.image` nodes and the upcoming Compose Article flow. Configure at least one to enable cover-image generation.",
2779
+ "style": {
2780
+ "section": "Style presets",
2781
+ "add": "Add",
2782
+ "edit": "Edit style preset",
2783
+ "delete": "Delete",
2784
+ "save": "Save",
2785
+ "label": "Label",
2786
+ "label_placeholder": "e.g. Moody noir",
2787
+ "suffix": "Style suffix",
2788
+ "suffix_placeholder": "Appended to “Cover illustration for: <title>. ”",
2789
+ "suffix_hint": "Describe lighting, palette, mood, aspect ratio — anything the model should remember for this style.",
2790
+ "hint": "These presets apply when you tap one in the Compose Cover step. Built-in presets stay available even after you edit them.",
2791
+ "builtin": "Built-in",
2792
+ "builtin_note": "This is a built-in preset. Your changes save as an override and can be reset by deleting (built-ins cannot be removed)."
2793
+ }
2794
+ },
2795
+ "publish": {
2796
+ "title": "Publish targets",
2797
+ "section": "Targets",
2798
+ "add": "Add",
2799
+ "edit": "Edit publish target",
2800
+ "delete": "Delete",
2801
+ "save": "Save",
2802
+ "icon": "Icon",
2803
+ "label": "Label",
2804
+ "label_placeholder": "WeChat 公众号 (主号)",
2805
+ "mcp_tool": "MCP tool",
2806
+ "mcp_tool_hint": "Bare name (`publish`) or namespaced (`mcp.<server-id>.<tool>`). Configure the MCP server itself in Settings → MCP.",
2807
+ "arg_template": "Argument template (JSON)",
2808
+ "arg_template_hint": "Use {title} {body} {topic} {coverKey} {coverPrompt} placeholders. Strings are JSON-escaped before substitution.",
2809
+ "empty": "No publish targets configured. Tap “Add” to wire a target to an MCP tool.",
2810
+ "hint": "Each target points at one MCP tool — e.g. a WeChat 公众号 bridge, a Substack webhook, or your own remote MCP. Compose’s Send menu lists every target."
2811
+ },
2812
+ "voiceai": {
2813
+ "title": "Voice AI",
2814
+ "engine": "Voice engine",
2815
+ "engine_local": "Local (on-device)",
2816
+ "engine_local_desc": "Speech recognition and read-aloud run entirely on your device — no network, no API keys.",
2817
+ "recommended": "Recommended",
2818
+ "external_soon": "External cloud voice — coming soon.",
2819
+ "unavailable": "On-device voice isn't available here — it requires the iOS app.",
2820
+ "stt_section": "Speech input",
2821
+ "stt_locale": "Recognition language",
2822
+ "stt_locale_device": "Follow device",
2823
+ "tts_section": "Read aloud",
2824
+ "auto_speak": "Auto-read AI replies",
2825
+ "voice_label": "Voice",
2826
+ "voice_default": "System default",
2827
+ "enhanced": "Enhanced",
2828
+ "rate": "Speed",
2829
+ "test": "Test voice",
2830
+ "test_sample": "Hello, I'm Moraya's on-device voice assistant."
2831
+ }
2832
+ },
2833
+ "shortcuts": {
2834
+ "title": "Keyboard Shortcuts",
2835
+ "intro": "All keyboard shortcuts in Moraya. Entries marked 🔒 are managed by the native menu and will become user-configurable in a later version.",
2836
+ "ai_chat_behavior": {
2837
+ "title": "AI Chat — Enter Key Behavior",
2838
+ "intro": "Choose how the Enter key behaves in the AI chat input.",
2839
+ "sends_action": "sends message",
2840
+ "newline_action": "newline",
2841
+ "mod_enter_send": {
2842
+ "label": "Cmd/Ctrl + Enter отправляет"
2843
+ },
2844
+ "enter_send": {
2845
+ "label": "Enter sends"
2846
+ },
2847
+ "default_badge": "По умолчанию"
2848
+ },
2849
+ "categories": {
2850
+ "file": "File",
2851
+ "edit": "Edit",
2852
+ "paragraph": "Paragraph",
2853
+ "format": "Format",
2854
+ "view": "View",
2855
+ "ai_chat": "AI Chat",
2856
+ "workflow": "Workflow",
2857
+ "mcp": "MCP"
2858
+ },
2859
+ "actions": {
2860
+ "file": {
2861
+ "new": "New Document",
2862
+ "new_window": "New Window",
2863
+ "open": "Open File",
2864
+ "save": "Save",
2865
+ "save_as": "Save As",
2866
+ "export_html": "Export HTML",
2867
+ "export_pdf": "Экспорт в PDF",
2868
+ "export_image": "Экспорт в изображение",
2869
+ "export_doc": "Экспорт в Word"
2870
+ },
2871
+ "edit": {
2872
+ "undo": "Undo",
2873
+ "redo": "Redo",
2874
+ "find": "Find",
2875
+ "replace": "Replace"
2876
+ },
2877
+ "paragraph": {
2878
+ "h1": "Heading 1",
2879
+ "h2": "Heading 2",
2880
+ "h3": "Heading 3",
2881
+ "h4": "Heading 4",
2882
+ "h5": "Heading 5",
2883
+ "h6": "Heading 6",
2884
+ "code_block": "Code Block",
2885
+ "quote": "Block Quote"
2886
+ },
2887
+ "format": {
2888
+ "bold": "Bold",
2889
+ "italic": "Italic",
2890
+ "strike": "Strikethrough",
2891
+ "code": "Inline Code",
2892
+ "link": "Link",
2893
+ "insert_image": "Insert Image"
2894
+ },
2895
+ "view": {
2896
+ "toggle_mode": "Toggle Visual / Source",
2897
+ "toggle_split": "Toggle Split Mode",
2898
+ "toggle_sidebar": "Toggle Sidebar",
2899
+ "toggle_aipanel": "Toggle AI Panel",
2900
+ "toggle_outline": "Toggle Outline",
2901
+ "open_settings": "Open Settings",
2902
+ "zoom_in": "Zoom In",
2903
+ "zoom_out": "Zoom Out",
2904
+ "zoom_reset": "Reset Zoom"
2905
+ },
2906
+ "workflow": {
2907
+ "quick_open": "Quick Open",
2908
+ "command_palette": "Command Palette"
2909
+ },
2910
+ "ai_chat": {
2911
+ "send": "Send AI Message",
2912
+ "newline": "Insert Newline"
2913
+ }
2914
+ },
2915
+ "locked_hint": "Managed by the native menu — not customizable here yet",
2916
+ "locked_footnote": "🔒 indicates the shortcut is provided by the OS-native menu and is not customizable in this version.",
2917
+ "editor": {
2918
+ "prompt": "Нажмите любую комбинацию клавиш… (Esc для отмены)",
2919
+ "needs_modifier": "Требуется хотя бы один модификатор (Cmd, Ctrl, Alt или Shift)",
2920
+ "conflict": "Уже используется другим сочетанием",
2921
+ "save": "Сохранить",
2922
+ "cancel": "Отмена",
2923
+ "edit_hint": "Нажмите, чтобы записать новое сочетание",
2924
+ "reset_to_default": "Сбросить к умолчанию",
2925
+ "customized": "Изменено",
2926
+ "customized_short": "Польз.",
2927
+ "reset_conflict": "Значение по умолчанию конфликтует с другим пользовательским сочетанием — сначала измените его.",
2928
+ "sync_failed": "Не удалось обновить системное меню",
2929
+ "sync_failed_short": "Сбой синхронизации",
2930
+ "unbound": "Не задано",
2931
+ "reset_all": "Сбросить все",
2932
+ "reset_all_hint": "Восстановить все сочетания по умолчанию",
2933
+ "reset_all_confirm": "Сбросить все {count} пользовательских сочетаний к значениям по умолчанию?",
2934
+ "reset_short": "По умолчанию"
2935
+ },
2936
+ "edit_hint": "Подсказка: строки с пунктирной рамкой и значком ✎ можно перезаписать, кликнув по клавишам. Остальные сочетания (🔒) управляются системным меню и пока не настраиваются.",
2937
+ "mcp": {
2938
+ "intro": "Привязка сочетаний клавиш к установленным серверам MCP и их инструментам.",
2939
+ "empty": "Сначала установите сервер MCP в «Настройки → MCP», чтобы создать сочетания.",
2940
+ "add_tool": "Добавить сочетание для инструмента MCP",
2941
+ "remove_tool": "Удалить это сочетание для инструмента MCP",
2942
+ "remove_tool_short": "Удалить",
2943
+ "remove_stale": "Удалить устаревшую привязку",
2944
+ "remove_stale_short": "Удалить",
2945
+ "server_kind_short": "Сервер",
2946
+ "server_kind_hint": "Переключает соединение с сервером MCP",
2947
+ "tool_kind_short": "Инструмент",
2948
+ "tool_kind_hint": "Открывает панель ИИ и просит ассистента использовать этот инструмент",
2949
+ "stale_short": "Недоступно",
2950
+ "stale_hint": "Сервер или инструмент MCP этой привязки больше не установлен",
2951
+ "server_gone": "Сервер MCP больше не установлен",
2952
+ "unavailable": "Инструмент MCP недоступен",
2953
+ "toggled": {
2954
+ "on": "{name} включён",
2955
+ "off": "{name} отключён"
2956
+ },
2957
+ "dialog": {
2958
+ "title": "Добавить сочетание для инструмента MCP",
2959
+ "server_label": "Сервер MCP",
2960
+ "tool_label": "Инструмент",
2961
+ "tool_placeholder": "Выберите инструмент…",
2962
+ "no_tools_for_server": "У этого сервера ещё нет инструментов — сначала подключитесь к нему в настройках MCP.",
2963
+ "duplicate_error": "Сочетание для этого инструмента уже существует.",
2964
+ "add": "Добавить",
2965
+ "cancel": "Отмена"
2966
+ }
2967
+ }
2968
+ },
2969
+ "sidebar": {
2970
+ "title": "Sidebar",
2971
+ "open_folder": "Открыть папку",
2972
+ "no_folder": "Папка не открыта",
2973
+ "create_kb": "Создать базу знаний",
2974
+ "empty_dir": "В этом каталоге нет файлов",
2975
+ "kb_settings": "Настройки базы знаний",
2976
+ "tree_view": "Древовидный вид",
2977
+ "list_view": "Список",
2978
+ "search": "Поиск файлов...",
2979
+ "context_menu": {
2980
+ "new_file": "Новый файл",
2981
+ "new_folder": "Новая папка",
2982
+ "search_files": "Поиск",
2983
+ "refresh": "Обновить",
2984
+ "rename": "Переименовать",
2985
+ "duplicate": "Создать копию",
2986
+ "delete": "Удалить",
2987
+ "copy_path": "Копировать путь",
2988
+ "reveal_in_finder": "Показать в Finder",
2989
+ "reveal_in_explorer": "Показать в Проводнике",
2990
+ "history_versions": "История версий"
2991
+ },
2992
+ "history": {
2993
+ "title": "История версий",
2994
+ "empty": "Нет сохранённых версий",
2995
+ "restore": "Восстановить",
2996
+ "restore_confirm": "Восстановить эту версию? Текущее содержимое MORAYA.md будет заменено."
2997
+ },
2998
+ "new_file_prompt": "Введите имя файла",
2999
+ "new_folder_prompt": "Введите имя папки",
3000
+ "rename_prompt": "Введите новое имя",
3001
+ "reserved_dir_title": "Зарезервированное имя",
3002
+ "reserved_dir_name": "\"images\" — зарезервированное имя каталога. Пожалуйста, выберите другое имя.",
3003
+ "delete_confirm": "Вы уверены, что хотите удалить «{name}»? Это действие нельзя отменить.",
3004
+ "views": "Sidebar views",
3005
+ "knowledge_bases": "Knowledge Bases",
3006
+ "explorer": "Files",
3007
+ "kb_list": "Knowledge base list",
3008
+ "tag_view": "Tags",
3009
+ "open": "Open sidebar",
3010
+ "close": "Close sidebar",
3011
+ "local_workspace": "Local"
3012
+ },
3013
+ "sso": {
3014
+ "__mt": true,
3015
+ "title": "Single Sign-On",
3016
+ "description": "Configure SSO to let team members authenticate via your identity provider.",
3017
+ "enable_sso": "Enable SSO",
3018
+ "require_sso": "Require SSO for all members",
3019
+ "oidc": "OIDC / OAuth 2.0",
3020
+ "saml": "SAML 2.0",
3021
+ "provider": "Identity Provider",
3022
+ "custom_provider": "Custom",
3023
+ "issuer": "Issuer URL",
3024
+ "client_id": "Client ID",
3025
+ "client_secret": "Client Secret",
3026
+ "scopes": "Scopes",
3027
+ "idp_metadata_url": "IdP Metadata URL",
3028
+ "sp_entity_id": "SP Entity ID",
3029
+ "sp_acs_url": "ACS URL",
3030
+ "signing_cert": "Signing Certificate",
3031
+ "save": "Save SSO Configuration",
3032
+ "saved_success": "SSO configuration saved."
3033
+ },
3034
+ "stale_dmg": {
3035
+ "title": "Очистить старые образы дисков",
3036
+ "body": "Обнаружены старые подключённые образы дисков Moraya. Если их не отключить, в меню «Открыть с помощью» появится несколько версий. Извлечь сейчас?",
3037
+ "eject_all": "Извлечь все",
3038
+ "skip": "Не сейчас",
3039
+ "partial_failure": "Не удалось извлечь некоторые образы дисков:"
3040
+ },
3041
+ "statusbar": {
3042
+ "words": "Слова",
3043
+ "characters": "Символы",
3044
+ "format": "Markdown",
3045
+ "source_mode": "Исходный код",
3046
+ "visual_mode": "Визуальный",
3047
+ "split_mode": "Разделённый",
3048
+ "publish_workflow": "AI Рабочий процесс",
3049
+ "ai_tooltip": "AI"
3050
+ },
3051
+ "storage": {
3052
+ "__mt": true,
3053
+ "title": "Storage",
3054
+ "connected_providers": "Connected Providers",
3055
+ "connect_provider": "Connect Provider",
3056
+ "primary": "Primary",
3057
+ "set_primary": "Set as Primary",
3058
+ "remove": "Remove",
3059
+ "edit": "Edit",
3060
+ "verify": "Verify Connection",
3061
+ "verifying": "Verifying...",
3062
+ "verify_success": "Connection verified",
3063
+ "verify_failed": "Verification failed",
3064
+ "no_providers": "No storage providers connected.",
3065
+ "connect_prompt": "Connect your own cloud storage to keep full control of your data.",
3066
+ "picora_default": "Picora is your storage provider (Connect plan)",
3067
+ "upgrade_for_byoc": "Upgrade to Personal to connect your own storage.",
3068
+ "step_choose": "Choose Provider",
3069
+ "step_setup": "Setup Script",
3070
+ "step_credentials": "Enter Credentials",
3071
+ "step_verify": "Verify",
3072
+ "step_name": "Name & Save",
3073
+ "provider_label": "Provider",
3074
+ "bucket_label": "Bucket Name",
3075
+ "region_label": "Region",
3076
+ "access_key_label": "Access Key ID",
3077
+ "secret_key_label": "Secret Access Key",
3078
+ "role_arn_label": "Role ARN (for STS)",
3079
+ "account_id_label": "Account ID",
3080
+ "key_id_label": "Key ID",
3081
+ "application_key_label": "Application Key",
3082
+ "binding_label": "Display Name",
3083
+ "copy_script": "Copy Script",
3084
+ "copy_policy": "Copy Policy JSON",
3085
+ "copied": "Copied!",
3086
+ "back": "Back",
3087
+ "next": "Next",
3088
+ "save": "Save",
3089
+ "health_ok": "Healthy",
3090
+ "health_degraded": "Degraded",
3091
+ "health_failed": "Failed",
3092
+ "health_unknown": "Unknown",
3093
+ "access_denied": "Access denied.",
3094
+ "bucket_not_found": "Bucket not found.",
3095
+ "bucket_exists": "Bucket already exists.",
3096
+ "clock_skew": "System clock is out of sync. Please check your date/time settings.",
3097
+ "b2_no_sts_warning": "Backblaze B2 does not support STS. Credentials are stored in session only. Enable E2E encryption (v0.43) for better security.",
3098
+ "r2_token_info": "Create an API Token in Cloudflare Dashboard with R2 Read/Write permissions for this bucket."
3099
+ },
3100
+ "table": {
3101
+ "insert_row_above": "Вставить строку выше",
3102
+ "insert_row_below": "Вставить строку ниже",
3103
+ "delete_row": "Удалить строку",
3104
+ "insert_col_left": "Вставить столбец слева",
3105
+ "insert_col_right": "Вставить столбец справа",
3106
+ "delete_col": "Удалить столбец",
3107
+ "align_left": "Выровнять по левому краю",
3108
+ "align_center": "Выровнять по центру",
3109
+ "align_right": "Выровнять по правому краю",
3110
+ "copy_table": "Скопировать таблицу",
3111
+ "format_table_source": "Форматировать источник таблицы",
3112
+ "delete_table": "Удалить таблицу",
3113
+ "copied": "Таблица скопирована",
3114
+ "formatted_copied": "Форматированная таблица скопирована"
3115
+ },
3116
+ "tabs": {
3117
+ "external_change_title": "Файл изменён извне",
3118
+ "external_change_msg": "«{fileName}» был изменён за пределами Moraya.",
3119
+ "keep_local": "Сохранить локальные изменения",
3120
+ "load_from_disk": "Загрузить с диска",
3121
+ "unsaved_title": "Несохранённые изменения",
3122
+ "unsaved_msg": "«{fileName}» содержит несохранённые изменения.",
3123
+ "save": "Сохранить",
3124
+ "discard": "Отменить",
3125
+ "new_tab": "New Tab",
3126
+ "close": "Close Tab",
3127
+ "close_others": "Close Other Tabs",
3128
+ "close_to_right": "Close Tabs to the Right",
3129
+ "close_all": "Close All Tabs",
3130
+ "dirty_confirm": "This tab has unsaved changes. Discard and close?",
3131
+ "discard_close": "Discard & Close",
3132
+ "readonly_banner": "Another tab is editing this note. This tab is read-only.",
3133
+ "takeover": "Take Over",
3134
+ "open_count": "tabs open",
3135
+ "no_tabs": "No open tabs",
3136
+ "upgrade_tabs": "Upgrade to Personal to open multiple tabs.",
3137
+ "rename": "Rename",
3138
+ "rename_placeholder": "Document name",
3139
+ "dirty_dot": "Unsaved changes"
3140
+ },
3141
+ "team": {
3142
+ "__mt": true,
3143
+ "title": "Team Knowledge Bases",
3144
+ "create": "New Team KB",
3145
+ "no_kbs": "You don't have any team knowledge bases yet.",
3146
+ "create_first": "Create your first team KB",
3147
+ "members": "members",
3148
+ "open": "Open",
3149
+ "settings": "Settings",
3150
+ "encryption_kms": "Cloud KMS (AI Review enabled)",
3151
+ "encryption_e2e": "E2E Encryption (AI Review disabled)",
3152
+ "wizard_title": "Create Team Knowledge Base",
3153
+ "step_info": "Name",
3154
+ "step_provider": "Storage",
3155
+ "step_members": "Members",
3156
+ "step_encryption": "Encryption",
3157
+ "step_confirm": "Confirm",
3158
+ "kb_name_label": "Team KB Name",
3159
+ "kb_name_placeholder": "e.g. Engineering Docs",
3160
+ "provider_label": "Provider",
3161
+ "bucket_label": "Bucket",
3162
+ "prefix_label": "Prefix (optional)",
3163
+ "invite_emails_label": "Email addresses (comma-separated)",
3164
+ "invite_role_label": "Role",
3165
+ "mode_kms_name": "Cloud KMS",
3166
+ "mode_kms_desc": "AI Review and server-side features enabled.",
3167
+ "mode_e2e_name": "End-to-End",
3168
+ "mode_e2e_desc": "Maximum privacy. AI Review not available.",
3169
+ "confirm_summary": "Confirm & Create",
3170
+ "creating": "Creating…",
3171
+ "create_kb": "Create Team KB"
3172
+ },
3173
+ "templates": {
3174
+ "gallery": {
3175
+ "title": "AI Ассистент",
3176
+ "search": "Поиск шаблонов...",
3177
+ "back": "Назад",
3178
+ "start": "Начать"
3179
+ },
3180
+ "my_templates": {
3181
+ "name": "Мои шаблоны",
3182
+ "desc": "Пользовательские шаблоны, импортированные или созданные вами"
3183
+ },
3184
+ "manage": {
3185
+ "title": "Управление шаблонами",
3186
+ "import": "Импортировать шаблон",
3187
+ "export": "Экспортировать шаблоны",
3188
+ "manage": "Управление шаблонами",
3189
+ "delete": "Удалить",
3190
+ "delete_confirm": "Подтвердить?",
3191
+ "import_success": "Импортировано шаблонов: {count}",
3192
+ "export_success": "Шаблоны успешно экспортированы",
3193
+ "no_custom_templates": "Пользовательских шаблонов пока нет",
3194
+ "source_global": "Глобальный",
3195
+ "source_kb": "База знаний",
3196
+ "invalid_format": "Недопустимый формат шаблона",
3197
+ "select_templates": "Выберите шаблоны для экспорта"
3198
+ },
3199
+ "error": {
3200
+ "no_document": "Сначала напишите какой-нибудь текст",
3201
+ "no_selection": "Сначала выделите текст",
3202
+ "no_content": "Сначала напишите текст или выделите фрагмент"
3203
+ },
3204
+ "writing": {
3205
+ "name": "Написание",
3206
+ "desc": "AI-написание, редактирование и резюмирование",
3207
+ "free": {
3208
+ "name": "Свободное письмо",
3209
+ "desc": "Введите тему, и AI сгенерирует текст",
3210
+ "hint": "Введите тему или инструкции..."
3211
+ },
3212
+ "continue": {
3213
+ "name": "Продолжить",
3214
+ "desc": "Продолжить с конца документа"
3215
+ },
3216
+ "outline": {
3217
+ "name": "Создать план",
3218
+ "desc": "Создать план статьи",
3219
+ "hint": "Введите тему статьи..."
3220
+ },
3221
+ "summarize": {
3222
+ "name": "Резюмировать",
3223
+ "desc": "Резюмировать выделенный текст или весь документ"
3224
+ },
3225
+ "improve": {
3226
+ "name": "Улучшить",
3227
+ "desc": "Повысить качество текста"
3228
+ },
3229
+ "simplify": {
3230
+ "name": "Упростить",
3231
+ "desc": "Упростить сложный текст"
3232
+ },
3233
+ "expand": {
3234
+ "name": "Расширить",
3235
+ "desc": "Добавить больше деталей и пояснений"
3236
+ },
3237
+ "fix_grammar": {
3238
+ "name": "Исправить грамматику",
3239
+ "desc": "Исправить грамматические и орфографические ошибки"
3240
+ }
3241
+ },
3242
+ "translation": {
3243
+ "name": "Перевод",
3244
+ "desc": "Многоязычный перевод и локализация",
3245
+ "auto": {
3246
+ "name": "Умный перевод",
3247
+ "desc": "Автоматическое определение языка и перевод"
3248
+ },
3249
+ "to_target": {
3250
+ "name": "Перевести на...",
3251
+ "desc": "Выберите целевой язык и переведите"
3252
+ },
3253
+ "explain": {
3254
+ "name": "Перевести и объяснить",
3255
+ "desc": "Перевод с пословным объяснением"
3256
+ },
3257
+ "polish": {
3258
+ "name": "Локализация",
3259
+ "desc": "Сделать перевод более естественным"
3260
+ },
3261
+ "compare": {
3262
+ "name": "Несколько вариантов",
3263
+ "desc": "Предоставить несколько стилей перевода"
3264
+ },
3265
+ "target_lang": "Целевой язык",
3266
+ "lang": {
3267
+ "en": "Английский",
3268
+ "zh_cn": "Упрощённый китайский",
3269
+ "zh_hant": "Традиционный китайский",
3270
+ "ja": "Японский",
3271
+ "ko": "Корейский",
3272
+ "ar": "Арабский",
3273
+ "de": "Немецкий",
3274
+ "es": "Испанский",
3275
+ "fr": "Французский",
3276
+ "hi": "Хинди",
3277
+ "pt": "Португальский",
3278
+ "ru": "Русский"
3279
+ }
3280
+ },
3281
+ "student": {
3282
+ "name": "Помощник в учёбе",
3283
+ "desc": "Обучение, конспектирование, понимание концепций",
3284
+ "explain": {
3285
+ "name": "Объяснить понятие",
3286
+ "desc": "Объяснить понятие простым языком",
3287
+ "hint": "Введите понятие для объяснения..."
3288
+ },
3289
+ "notes": {
3290
+ "name": "Учебные заметки",
3291
+ "desc": "Структурировать материал в конспект"
3292
+ },
3293
+ "flashcard": {
3294
+ "name": "Карточки",
3295
+ "desc": "Извлечь карточки «вопрос-ответ» из материала"
3296
+ },
3297
+ "mindmap": {
3298
+ "name": "Ментальная карта",
3299
+ "desc": "Сгенерировать ментальную карту в Markdown"
3300
+ },
3301
+ "essay_outline": {
3302
+ "name": "План эссе",
3303
+ "desc": "Сгенерировать план эссе",
3304
+ "hint": "Введите тему эссе..."
3305
+ },
3306
+ "reading": {
3307
+ "name": "Анализ текста",
3308
+ "desc": "Глубокий анализ содержания текста"
3309
+ },
3310
+ "formula": {
3311
+ "name": "Вывод формулы",
3312
+ "desc": "Показать пошаговый вывод формулы",
3313
+ "hint": "Введите название или содержание формулы..."
3314
+ },
3315
+ "compare": {
3316
+ "name": "Сравнить понятия",
3317
+ "desc": "Сравнить два понятия рядом",
3318
+ "hint": "Введите два понятия (напр., TCP vs UDP)..."
3319
+ }
3320
+ },
3321
+ "kids": {
3322
+ "name": "Детское обучение",
3323
+ "desc": "Сказки, развлекательное обучение, интерактивные игры",
3324
+ "story": {
3325
+ "name": "Детская сказка",
3326
+ "desc": "Сгенерировать сказку по ключевым словам",
3327
+ "hint": "Введите ключевые слова (напр., зайчик лес приключение)..."
3328
+ },
3329
+ "poem": {
3330
+ "name": "Детский стишок",
3331
+ "desc": "Создать стишок на заданную тему",
3332
+ "hint": "Введите тему..."
3333
+ },
3334
+ "why": {
3335
+ "name": "Почему? Почему? Почему?",
3336
+ "desc": "AI отвечает на бесконечные вопросы «почему»"
3337
+ },
3338
+ "alphabet": {
3339
+ "name": "Весёлый алфавит",
3340
+ "desc": "Интерактивное изучение букв"
3341
+ },
3342
+ "math_game": {
3343
+ "name": "Математическая игра",
3344
+ "desc": "Весёлая интерактивная арифметика"
3345
+ },
3346
+ "riddle": {
3347
+ "name": "Загадки",
3348
+ "desc": "AI загадывает загадки для детей"
3349
+ },
3350
+ "draw_text": {
3351
+ "name": "Картина-рассказ",
3352
+ "desc": "Опишите сцену, AI напишет историю",
3353
+ "hint": "Опишите сцену..."
3354
+ },
3355
+ "knowledge": {
3356
+ "name": "Интересные факты",
3357
+ "desc": "Природа, наука, энциклопедия животных"
3358
+ }
3359
+ },
3360
+ "marketing": {
3361
+ "name": "Маркетинг",
3362
+ "desc": "Социальные сети, реклама и SEO-копирайтинг",
3363
+ "xiaohongshu": {
3364
+ "name": "Пост для Xiaohongshu",
3365
+ "desc": "Сгенерировать пост в стиле лайфстайл-обзора",
3366
+ "hint": "Введите продукт или тему..."
3367
+ },
3368
+ "twitter": {
3369
+ "name": "Пост Twitter/X",
3370
+ "desc": "Сгенерировать контент в стиле твита",
3371
+ "hint": "Введите тему..."
3372
+ },
3373
+ "slogan": {
3374
+ "name": "Рекламный слоган",
3375
+ "desc": "Сгенерировать запоминающиеся слоганы бренда",
3376
+ "hint": "Введите бренд или продукт..."
3377
+ },
3378
+ "email": {
3379
+ "name": "Маркетинговое письмо",
3380
+ "desc": "Настройте аудиторию и тон для письма",
3381
+ "hint": "Опишите содержание письма..."
3382
+ },
3383
+ "seo_article": {
3384
+ "name": "SEO Статья",
3385
+ "desc": "Сгенерировать SEO-оптимизированный контент",
3386
+ "hint": "Введите целевые ключевые слова..."
3387
+ },
3388
+ "product_desc": {
3389
+ "name": "Описание продукта",
3390
+ "desc": "Сгенерировать убедительный текст о продукте",
3391
+ "hint": "Введите информацию о продукте..."
3392
+ },
3393
+ "tone": "Тон",
3394
+ "tone.formal": "Официальный",
3395
+ "tone.friendly": "Дружелюбный",
3396
+ "tone.urgent": "Срочный",
3397
+ "tone.humorous": "Юмористический"
3398
+ },
3399
+ "professional": {
3400
+ "name": "Профессиональное",
3401
+ "desc": "Письма, отчёты, протоколы встреч",
3402
+ "email": {
3403
+ "name": "Деловое письмо",
3404
+ "desc": "Настройте сценарий и тон для письма",
3405
+ "hint": "Опишите содержание письма..."
3406
+ },
3407
+ "meeting": {
3408
+ "name": "Протокол встречи",
3409
+ "desc": "Оформить заметки в формальный протокол"
3410
+ },
3411
+ "report": {
3412
+ "name": "Рабочий отчёт",
3413
+ "desc": "Сгенерировать еженедельный/ежемесячный/квартальный отчёт",
3414
+ "hint": "Введите ключевые пункты для отчёта..."
3415
+ },
3416
+ "review": {
3417
+ "name": "Code Review",
3418
+ "desc": "Проверить код и предложить улучшения"
3419
+ },
3420
+ "resume": {
3421
+ "name": "Доработка резюме",
3422
+ "desc": "Оптимизировать резюме методом STAR"
3423
+ },
3424
+ "prd": {
3425
+ "name": "PRD Документ",
3426
+ "desc": "Сгенерировать документ требований к продукту",
3427
+ "hint": "Введите описание функции..."
3428
+ },
3429
+ "tone": "Тон",
3430
+ "tone.concise": "Лаконичный",
3431
+ "report_type": "Тип отчёта",
3432
+ "report_type.weekly": "Еженедельный",
3433
+ "report_type.monthly": "Ежемесячный",
3434
+ "report_type.quarterly": "Квартальный"
3435
+ },
3436
+ "personal": {
3437
+ "name": "Личностный рост",
3438
+ "desc": "Дневник, цели, принятие решений",
3439
+ "journal": {
3440
+ "name": "Помощник для дневника",
3441
+ "desc": "Направленное ведение дневника и рефлексия",
3442
+ "hint": "Что произошло сегодня?..."
3443
+ },
3444
+ "goal": {
3445
+ "name": "Декомпозиция цели",
3446
+ "desc": "Разбить цели на конкретные шаги",
3447
+ "hint": "Введите вашу цель..."
3448
+ },
3449
+ "habit": {
3450
+ "name": "Формирование привычки",
3451
+ "desc": "Создать план формирования привычки",
3452
+ "hint": "Введите привычку, которую хотите выработать..."
3453
+ },
3454
+ "decision": {
3455
+ "name": "Анализ решений",
3456
+ "desc": "Анализ за и против при принятии решений",
3457
+ "hint": "Опишите ваши варианты..."
3458
+ },
3459
+ "book_notes": {
3460
+ "name": "Заметки о книге",
3461
+ "desc": "Оформить материал в читательские заметки"
3462
+ }
3463
+ },
3464
+ "games_cn": {
3465
+ "name": "Китайские игры",
3466
+ "desc": "Поэтические игры, цепочки идиом, загадки",
3467
+ "feihualing": {
3468
+ "name": "Поэтическое состязание",
3469
+ "desc": "Поочерёдное чтение стихов с заданным иероглифом"
3470
+ },
3471
+ "chengyu_chain": {
3472
+ "name": "Цепочка идиом",
3473
+ "desc": "Цепочка идиом по последнему/первому иероглифу"
3474
+ },
3475
+ "riddle": {
3476
+ "name": "Загадки",
3477
+ "desc": "AI даёт подсказки, вы угадываете ответ"
3478
+ },
3479
+ "lantern_riddle": {
3480
+ "name": "Загадки на фонарях",
3481
+ "desc": "Загадки на основе иероглифов"
3482
+ },
3483
+ "poetry_fill": {
3484
+ "name": "Дополни стихотворение",
3485
+ "desc": "Вставьте пропущенные слова в стихах"
3486
+ },
3487
+ "story_chain": {
3488
+ "name": "Цепочка историй",
3489
+ "desc": "Поочерёдное продолжение истории"
3490
+ },
3491
+ "character_game": {
3492
+ "name": "Угадай иероглиф",
3493
+ "desc": "Угадайте иероглиф по подсказкам"
3494
+ },
3495
+ "brain_teaser": {
3496
+ "name": "Головоломки",
3497
+ "desc": "Весёлые головоломки-загадки"
3498
+ },
3499
+ "couplet": {
3500
+ "name": "Парные надписи",
3501
+ "desc": "AI даёт первую строку, вы подбираете пару"
3502
+ },
3503
+ "word_explain": {
3504
+ "name": "Шарады",
3505
+ "desc": "AI описывает, вы угадываете слово"
3506
+ },
3507
+ "ancient_text": {
3508
+ "name": "Классический китайский",
3509
+ "desc": "Перевод классического текста на современный китайский"
3510
+ },
3511
+ "homophone": {
3512
+ "name": "Омофоны",
3513
+ "desc": "Состязание каламбуров-омофонов"
3514
+ }
3515
+ },
3516
+ "games_en": {
3517
+ "name": "Английские игры",
3518
+ "desc": "Цепочка слов, виселица, викторина и другое",
3519
+ "word_chain": {
3520
+ "name": "Цепочка слов",
3521
+ "desc": "Последняя буква начинает следующее слово"
3522
+ },
3523
+ "twenty_questions": {
3524
+ "name": "20 Вопросов",
3525
+ "desc": "Угадайте предмет за 20 вопросов «да/нет»"
3526
+ },
3527
+ "hangman": {
3528
+ "name": "Виселица",
3529
+ "desc": "Угадайте слово буква за буквой"
3530
+ },
3531
+ "story_builder": {
3532
+ "name": "Конструктор историй",
3533
+ "desc": "Поочерёдное создание истории"
3534
+ },
3535
+ "word_association": {
3536
+ "name": "Ассоциации слов",
3537
+ "desc": "Свободная цепочка ассоциаций"
3538
+ },
3539
+ "riddles": {
3540
+ "name": "Загадки",
3541
+ "desc": "Решайте загадки на английском"
3542
+ },
3543
+ "trivia": {
3544
+ "name": "Викторина",
3545
+ "desc": "Вопросы на общую эрудицию"
3546
+ },
3547
+ "rhyme_time": {
3548
+ "name": "Время рифм",
3549
+ "desc": "Создавайте истории с рифмующимися словами"
3550
+ },
3551
+ "acronym": {
3552
+ "name": "Игра в аббревиатуры",
3553
+ "desc": "Придумайте расшифровку случайных аббревиатур"
3554
+ },
3555
+ "taboo": {
3556
+ "name": "Табу",
3557
+ "desc": "Объясните слово, не используя запретные слова"
3558
+ },
3559
+ "sentence_builder": {
3560
+ "name": "Конструктор предложений",
3561
+ "desc": "Составьте самое длинное предложение из заданных слов"
3562
+ },
3563
+ "emoji_story": {
3564
+ "name": "Эмодзи-история",
3565
+ "desc": "Рассказывайте истории с помощью эмодзи"
3566
+ }
3567
+ },
3568
+ "quiz": {
3569
+ "name": "Тесты и практика",
3570
+ "desc": "AI-вопросы с оценкой",
3571
+ "practice": {
3572
+ "name": "Универсальный тест",
3573
+ "desc": "Выберите предмет и сложность, AI проверит вас"
3574
+ },
3575
+ "direction": "Предмет",
3576
+ "dir": {
3577
+ "programming": "Программирование",
3578
+ "math": "Математика",
3579
+ "english": "Английский язык",
3580
+ "science": "Естественные науки",
3581
+ "history": "История",
3582
+ "interview": "Подготовка к собеседованию",
3583
+ "custom": "Свой предмет"
3584
+ },
3585
+ "difficulty": "Сложность",
3586
+ "diff": {
3587
+ "easy": "Лёгкий",
3588
+ "medium": "Средний",
3589
+ "hard": "Сложный"
3590
+ }
3591
+ }
3592
+ },
3593
+ "theme": {
3594
+ "__mt": true,
3595
+ "title": "Appearance",
3596
+ "mode_title": "Color Mode",
3597
+ "mode_light": "Light",
3598
+ "mode_dark": "Dark",
3599
+ "mode_system": "System",
3600
+ "custom_title": "Custom Themes",
3601
+ "custom_new": "New Theme",
3602
+ "custom_export": "Export",
3603
+ "custom_import": "Import",
3604
+ "custom_delete": "Delete",
3605
+ "custom_activate": "Activate",
3606
+ "custom_deactivate": "Deactivate",
3607
+ "custom_edit": "Edit",
3608
+ "editor_title": "Theme Editor",
3609
+ "name_label": "Theme Name",
3610
+ "no_custom": "No custom themes yet. Create one below.",
3611
+ "groups_base": "Base Colors",
3612
+ "groups_editor": "Editor",
3613
+ "groups_ui": "UI Components",
3614
+ "groups_code": "Code Block",
3615
+ "saved": "Save",
3616
+ "import_error": "Invalid theme file. Please use a valid Moraya theme JSON."
3617
+ },
3618
+ "titlebar": {
3619
+ "unsaved": "Не сохранено",
3620
+ "minimize": "Свернуть",
3621
+ "maximize": "Развернуть",
3622
+ "close": "Закрыть",
3623
+ "new_file": "Новый файл",
3624
+ "open_file": "Открыть файл..."
3625
+ },
3626
+ "transcription": {
3627
+ "title": "Транскрипция",
3628
+ "recording": "Запись",
3629
+ "connecting": "Подключение...",
3630
+ "paused": "Пауза",
3631
+ "stopping": "Остановка...",
3632
+ "idle": "Готово",
3633
+ "start": "Начать",
3634
+ "stop": "Остановить",
3635
+ "pause": "Пауза",
3636
+ "resume": "Продолжить",
3637
+ "back": "Вернуться в чат",
3638
+ "empty_idle": "Нажмите «Начать» для записи и транскрипции.",
3639
+ "empty_waiting": "Ожидание речи...",
3640
+ "summarize_with_ai": "Резюмировать с AI",
3641
+ "save_as_doc": "Сохранить как документ",
3642
+ "summarize_prompt": "Пожалуйста, создайте резюме встречи по следующей транскрипции. Определите ключевые темы обсуждения, принятые решения и задачи. Оформите в формате Markdown.",
3643
+ "no_speech_config": "Провайдер распознавания речи не настроен. Добавьте его в Настройках → Голос.",
3644
+ "no_speech_config_hint": "Перейдите в Настройки → Голос, чтобы добавить провайдера распознавания речи (напр., Deepgram).",
3645
+ "go_to_voice_settings": "Открыть настройки голоса"
3646
+ },
3647
+ "update": {
3648
+ "title": "Информация о версии",
3649
+ "current_version": "Текущая версия",
3650
+ "latest_version": "Последняя версия",
3651
+ "checking": "Проверка обновлений...",
3652
+ "up_to_date": "У вас установлена последняя версия!",
3653
+ "check_failed": "Ошибка проверки обновлений",
3654
+ "release_notes": "Что нового",
3655
+ "no_asset": "Нет установщика для вашей платформы. Пожалуйста, скачайте вручную.",
3656
+ "upgrade": "Обновить",
3657
+ "retry": "Повторить",
3658
+ "view_release": "Посмотреть релиз",
3659
+ "downloading": "Загрузка...",
3660
+ "download_failed": "Ошибка загрузки",
3661
+ "install_launched": "Установщик запущен. Moraya скоро закроется.",
3662
+ "new_version_available": "Доступна новая версия! Нажмите для обновления."
3663
+ },
3664
+ "voice": {
3665
+ "__mt": true,
3666
+ "title": "Voice Capture",
3667
+ "provider": "Provider",
3668
+ "language": "Language",
3669
+ "doubao": "Doubao (Realtime)",
3670
+ "start": "Record",
3671
+ "stop": "Stop",
3672
+ "processing": "Processing...",
3673
+ "transcript": "Transcript",
3674
+ "words": "words",
3675
+ "structurize": "AI Structurize",
3676
+ "view_history": "View History",
3677
+ "untitled": "Untitled",
3678
+ "key_points": "Key Points",
3679
+ "action_items": "Action Items",
3680
+ "save_note": "Save Note",
3681
+ "discard": "Discard",
3682
+ "quota_exceeded": "Monthly voice quota exceeded. Upgrade or wait until next month.",
3683
+ "quota_near": "You are near your monthly voice limit.",
3684
+ "history": {
3685
+ "title": "Voice History",
3686
+ "new_capture": "+ New Recording",
3687
+ "search_placeholder": "Search transcripts...",
3688
+ "no_results": "No transcripts match your search.",
3689
+ "empty": "No recordings yet. Start capturing your voice!",
3690
+ "reprocess": "Re-process",
3691
+ "delete": "Delete"
3692
+ }
3693
+ },
3694
+ "welcome": {
3695
+ "title": "Добро пожаловать в Moraya",
3696
+ "subtitle": "Минималистичный Markdown-редактор с поддержкой AI.",
3697
+ "features_title": "Возможности",
3698
+ "feature_wysiwyg": "**WYSIWYG** редактирование Markdown",
3699
+ "feature_math": "Поддержка математических формул: $E = mc^2$",
3700
+ "feature_themes": "Тёмная и светлая темы",
3701
+ "feature_ai": "AI-ассистент для написания текстов",
3702
+ "feature_mcp": "Протокол MCP для публикации и синхронизации",
3703
+ "feature_lightweight": "Легковесный (~5 МБ установщик)",
3704
+ "math_title": "Пример формулы",
3705
+ "code_title": "Пример кода",
3706
+ "table_title": "Пример таблицы",
3707
+ "table_feature": "Функция",
3708
+ "table_status": "Статус",
3709
+ "table_done": "Готово",
3710
+ "start_writing": "Начните писать свои идеи здесь...",
3711
+ "tip": "**Совет:** Нажмите `Cmd+I`, чтобы открыть панель AI-ассистента.",
3712
+ "shortcuts_title": "Горячие клавиши",
3713
+ "shortcut_save": "`Cmd+S` — Сохранить документ",
3714
+ "shortcut_open": "`Cmd+O` — Открыть файл",
3715
+ "shortcut_new": "`Cmd+N` — Новый документ",
3716
+ "shortcut_toggle_mode": "`Cmd+/` — Переключить Визуальный/Исходный режим",
3717
+ "shortcut_split_mode": "`Cmd+Shift+/` — Переключить разделённый режим",
3718
+ "shortcut_sidebar": "`Cmd+\\` — Показать/скрыть боковую панель",
3719
+ "shortcut_settings": "`Cmd+,` — Открыть настройки",
3720
+ "shortcut_ai": "`Cmd+Shift+I` — Показать/скрыть панель AI",
3721
+ "shortcut_export": "`Cmd+Shift+E` — Экспорт в HTML",
3722
+ "blockquote_title": "Пример цитаты",
3723
+ "blockquote_content": "Искусство писать — это искусство открывать то, во что вы верите. — Гюстав Флобер",
3724
+ "advanced_math_title": "Продвинутая математика",
3725
+ "list_title": "Пример вложенного списка",
3726
+ "list_item1": "Начало работы",
3727
+ "list_item1a": "Установите приложение",
3728
+ "list_item1b": "Настройте параметры",
3729
+ "list_item1c": "Начните писать",
3730
+ "list_item2": "Расширенные возможности",
3731
+ "list_item2a": "AI-ассистент для написания текстов",
3732
+ "list_item2b": "Интеграция протокола MCP",
3733
+ "list_item2c": "Множество форматов экспорта",
3734
+ "list_item3": "Персонализация",
3735
+ "list_item3a": "Темы и внешний вид",
3736
+ "list_item3b": "Настройки редактора",
3737
+ "list_item3c": "Горячие клавиши",
3738
+ "paragraph_title": "О Moraya",
3739
+ "paragraph1": "Moraya — это современный легковесный Markdown-редактор, созданный на Rust и Tauri. Он сочетает простоту текстового редактора с мощью WYSIWYG-интерфейса, давая вам лучшее от обоих подходов.",
3740
+ "paragraph2": "Название «Moraya» образовано от «mora» (лат. «мгновение») и «ya» (кит. «изящество»), символизируя изящные мгновения творчества.",
3741
+ "paragraph3": "Будь то техническая документация, записи в блог, научные статьи или личные заметки — Moraya создаёт свободную от отвлечений среду, позволяющую сосредоточиться на главном — вашем тексте.",
3742
+ "hr_title": "Горизонтальные линии",
3743
+ "hr_description": "Вы можете использовать горизонтальные линии для разделения различных разделов документа:"
3744
+ },
3745
+ "workflow": {
3746
+ "title": "AI Рабочий процесс",
3747
+ "seo_step": "SEO Оптимизация",
3748
+ "image_gen_step": "AI Изображения",
3749
+ "publish_step": "Публикация",
3750
+ "publish_desc": "Отправить на целевые платформы",
3751
+ "optional_above": "Шаги выше необязательны",
3752
+ "select_targets": "Выбрать цели публикации",
3753
+ "confirm_publish": "Опубликовать",
3754
+ "publishing": "Публикация...",
3755
+ "publish_success": "Успешно опубликовано!",
3756
+ "publish_failed": "Ошибка публикации",
3757
+ "mcp_entry": "AI MCP",
3758
+ "mcp_server_count": "сервисов подключено",
3759
+ "mcp_tool_count": "инструментов",
3760
+ "list": {
3761
+ "title": "Workflows",
3762
+ "new_workflow": "New Workflow",
3763
+ "empty_state": "Automate your notes with AI workflows",
3764
+ "no_workflows": "No workflows yet",
3765
+ "run_now": "Run Now",
3766
+ "last_run": "Last run",
3767
+ "never_run": "Never run",
3768
+ "enable": "Enable",
3769
+ "disable": "Disable",
3770
+ "delete": "Delete",
3771
+ "confirm_delete": "Delete this workflow?",
3772
+ "locked_custom": "Custom workflows require Personal plan or above"
3773
+ },
3774
+ "trigger": {
3775
+ "cron": "Scheduled",
3776
+ "manual": "Manual",
3777
+ "note_event": "Note Event",
3778
+ "webhook": "Webhook"
3779
+ },
3780
+ "status": {
3781
+ "running": "Running",
3782
+ "completed": "Completed",
3783
+ "failed": "Failed",
3784
+ "paused": "Paused",
3785
+ "cancelled": "Cancelled",
3786
+ "enabled": "Enabled",
3787
+ "disabled": "Disabled"
3788
+ },
3789
+ "edit": {
3790
+ "title_new": "New Workflow",
3791
+ "title_edit": "Edit Workflow",
3792
+ "save": "Save",
3793
+ "run": "Run",
3794
+ "cancel": "Cancel",
3795
+ "yaml_label": "Workflow YAML",
3796
+ "yaml_placeholder": "Enter workflow YAML...",
3797
+ "nodes_label": "Nodes",
3798
+ "valid": "Valid",
3799
+ "invalid": "Invalid",
3800
+ "engine_client": "Client Engine",
3801
+ "engine_server": "Server Engine (KMS required)",
3802
+ "unsaved_changes": "You have unsaved changes"
3803
+ },
3804
+ "history": {
3805
+ "title": "Execution History",
3806
+ "no_runs": "No runs yet",
3807
+ "trigger": "Trigger",
3808
+ "started": "Started",
3809
+ "duration": "Duration",
3810
+ "status": "Status",
3811
+ "workflow": "Workflow",
3812
+ "node_results": "Node Results",
3813
+ "node_id": "Node",
3814
+ "error_detail": "Error"
3815
+ },
3816
+ "market": {
3817
+ "title": "Workflow Templates",
3818
+ "templates": "Built-in Templates",
3819
+ "use_template": "Use Template",
3820
+ "export": "Export Workflow",
3821
+ "export_select": "Select workflow to export",
3822
+ "import": "Import Workflow",
3823
+ "import_placeholder": "Paste workflow YAML here...",
3824
+ "import_btn": "Import",
3825
+ "import_success": "Workflow imported successfully",
3826
+ "import_error": "Invalid workflow YAML",
3827
+ "search_placeholder": "Search templates..."
3828
+ },
3829
+ "templates": {
3830
+ "daily_summary": {
3831
+ "name": "Daily Summary",
3832
+ "description": "Automatically summarize your notes every evening"
3833
+ },
3834
+ "note_translation": {
3835
+ "name": "Note Translation",
3836
+ "description": "Translate notes to another language on demand"
3837
+ },
3838
+ "auto_tagging": {
3839
+ "name": "Auto Tagging",
3840
+ "description": "Automatically tag newly created notes with AI"
3841
+ },
3842
+ "weekly_review": {
3843
+ "name": "Weekly Review",
3844
+ "description": "Generate a weekly reflection every Sunday evening"
3845
+ },
3846
+ "knowledge_graph": {
3847
+ "name": "Knowledge Graph",
3848
+ "description": "Extract entities and relationships from all notes"
3849
+ }
3850
+ },
3851
+ "nodes": {
3852
+ "ai_call": "AI Call",
3853
+ "rag_search": "RAG Search",
3854
+ "transform": "Transform",
3855
+ "if": "Condition",
3856
+ "notes_write": "Write Note",
3857
+ "notify": "Notify",
3858
+ "tool_call": "Tool Call"
3859
+ },
3860
+ "quota": {
3861
+ "exceeded": "Workflow quota exceeded",
3862
+ "daily_limit": "Daily run limit reached",
3863
+ "ai_quota": "AI call quota exceeded"
3864
+ },
3865
+ "safety": {
3866
+ "write_permission_title": "Allow Workflow to Write Notes?",
3867
+ "write_permission_body": "Workflow \"{{ name }}\" wants to create or modify notes.",
3868
+ "allow_once": "Allow Once",
3869
+ "allow_always": "Always Allow",
3870
+ "deny": "Deny"
3871
+ }
3872
+ }
3873
+ }