@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": "Regras MORAYA.md ativas ({count} seções)",
63
+ "clear_chat": "Limpar conversa",
64
+ "unconfigured": "A IA não está configurada.",
65
+ "unconfigured_hint": "Abra as Configurações ({shortcut}) e configure sua chave de API para habilitar os recursos de IA.",
66
+ "open_settings": "Abrir configurações de IA",
67
+ "open_image_settings": "Abrir configurações de geração de imagens",
68
+ "text_ai_label": "IA de texto (geração de prompts)",
69
+ "image_ai_label": "IA de imagem (geração de imagens)",
70
+ "welcome_title": "Como posso ajudar?",
71
+ "welcome_hint": "Digite uma mensagem ou use {kbd} para comandos",
72
+ "you": "Você",
73
+ "assistant": "IA",
74
+ "typing": "digitando...",
75
+ "placeholder": "Pergunte qualquer coisa à IA...",
76
+ "placeholder_selection": "Pergunte sobre a seleção...",
77
+ "send": "Enviar (⌘↵)",
78
+ "stop": "Parar (Esc)",
79
+ "retry": "Tentar novamente",
80
+ "interrupted": "Interrompido",
81
+ "insert_to_editor": "Inserir no editor",
82
+ "replace_selection": "Substituir seleção",
83
+ "attach_image": "Anexar imagem",
84
+ "attach_image_max": "Máximo de {max} imagens",
85
+ "remove_image": "Remover imagem",
86
+ "close_preview": "Fechar pré-visualização",
87
+ "more_actions": "Mais ações",
88
+ "voice_transcription": "Transcrição de voz por IA",
89
+ "config": {
90
+ "title": "Configuração de IA",
91
+ "provider": "Provedor",
92
+ "api_key": "Chave de API",
93
+ "api_key_placeholder": "Digite a chave de API do {provider}",
94
+ "api_key_not_required": "Não necessário para Ollama",
95
+ "base_url": "URL base",
96
+ "model": "Modelo",
97
+ "model_placeholder": "Digite o nome do modelo",
98
+ "max_tokens": "Máximo de tokens",
99
+ "temperature": "Temperatura",
100
+ "test_connection": "Testar conexão",
101
+ "testing": "Testando...",
102
+ "connected": "Conectado!",
103
+ "failed": "Falhou",
104
+ "test_failed": "Falha no teste de conexão"
105
+ },
106
+ "providers": {
107
+ "claude": "Anthropic Claude",
108
+ "openai": "OpenAI",
109
+ "gemini": "Google Gemini",
110
+ "deepseek": "DeepSeek",
111
+ "ollama": "Ollama (Local)",
112
+ "custom": "API personalizada",
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": "+ Adicionar modelo",
121
+ "default": "Padrão",
122
+ "set_default": "Definir como padrão",
123
+ "no_models": "Nenhum modelo de IA configurado",
124
+ "no_models_hint": "Adicione um modelo de IA para começar a usar os recursos de IA.",
125
+ "no_image_models": "Nenhum modelo de imagem configurado",
126
+ "no_image_models_hint": "Adicione um modelo de geração de imagens para usar os recursos de imagem por IA."
127
+ },
128
+ "image_config": {
129
+ "title": "IA de geração de imagens",
130
+ "provider": "Provedor",
131
+ "provider_openai": "OpenAI DALL-E",
132
+ "provider_grok": "Grok (xAI)",
133
+ "provider_custom": "Personalizado (compatível com OpenAI)",
134
+ "api_key": "Chave de API",
135
+ "api_key_placeholder": "Digite a chave de API de imagem",
136
+ "base_url": "URL base",
137
+ "model": "Modelo",
138
+ "model_placeholder": "Digite o nome do modelo",
139
+ "default_size": "Tamanho padrão",
140
+ "ratio": "Proporção",
141
+ "size_level": "Tamanho",
142
+ "size_large": "Grande",
143
+ "size_medium": "Médio",
144
+ "size_small": "Pequeno",
145
+ "provider_gemini": "Google Gemini Imagen",
146
+ "provider_qwen": "Qwen (Alibaba)",
147
+ "provider_doubao": "Doubao (ByteDance)"
148
+ },
149
+ "commands": {
150
+ "write": "Escrever",
151
+ "write_desc": "Escrever conteúdo com base no seu prompt",
152
+ "continue": "Continuar escrevendo",
153
+ "continue_desc": "Continuar de onde o texto parou",
154
+ "summarize": "Resumir",
155
+ "summarize_desc": "Resumir o texto selecionado",
156
+ "translate": "Traduzir",
157
+ "translate_desc": "Traduzir texto para outro idioma",
158
+ "improve": "Melhorar",
159
+ "improve_desc": "Melhorar a qualidade da escrita",
160
+ "fix_grammar": "Corrigir gramática",
161
+ "fix_grammar_desc": "Corrigir erros gramaticais e ortográficos",
162
+ "simplify": "Simplificar",
163
+ "simplify_desc": "Simplificar texto complexo",
164
+ "expand": "Expandir",
165
+ "expand_desc": "Expandir sobre o tema",
166
+ "outline": "Gerar esboço",
167
+ "outline_desc": "Gerar um esboço de artigo",
168
+ "explain": "Explicar",
169
+ "explain_desc": "Explicar o texto selecionado"
170
+ },
171
+ "prompts": {
172
+ "empty_response": "Você retornou uma resposta vazia. Por favor, continue a tarefa: faça as chamadas de ferramenta necessárias ou resuma o que foi concluído e liste os itens restantes. Não retorne uma mensagem vazia.",
173
+ "empty_response_continue": "\n\nSua última mensagem foi: \"{lastMessage}\"\nPor favor, continue a partir daí.",
174
+ "truncation_continue": "Sua resposta anterior foi cortada devido ao limite de tamanho de saída. O texto acima foi salvo. Agora, por favor, complete a tarefa fazendo as chamadas de ferramenta necessárias. Não repita o conteúdo — use-o diretamente nos argumentos da ferramenta.",
175
+ "continuation_prompt": "Por favor, continue e faça as chamadas de ferramenta necessárias para concluir a tarefa. Não repita o que já foi dito — prossiga diretamente com as chamadas de ferramenta.",
176
+ "mcp_tool_prompt": "Use a ferramenta {toolName} (de {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": "Eu vou|Preciso|Devo|Deixe-me|Primeiro|Agora|Em seguida",
187
+ "action_verbs": "criar|escrever|ler|atualizar|enviar|gerar|buscar|verificar|testar|usar|executar|enviar|procurar|encontrar|salvar|excluir|editar|configurar|exportar|exibir",
188
+ "continuation_phrases": "Primeiro|Em seguida|Depois|Agora",
189
+ "remaining_phrases": "restante|próximo|passo \\d+",
190
+ "unfinished_phrases": "a fazer|TODO|próximo passo|ainda não|pendente"
191
+ },
192
+ "sections": {
193
+ "image_ai": "IA de imagens",
194
+ "image_aihint": "Configurações do modelo de geração de imagens com IA."
195
+ },
196
+ "generating": "Gerando…",
197
+ "not_configured": "Provedor de IA não configurado"
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": "Inserir imagem da nuvem",
354
+ "title_audio": "Inserir áudio da nuvem",
355
+ "title_video": "Inserir vídeo da nuvem",
356
+ "no_targets": "Nenhum destino Picora configurado. Adicione um em Configurações → Base de conhecimento.",
357
+ "scope_this_kb": "Esta base de conhecimento",
358
+ "scope_all": "Todos os arquivos",
359
+ "scope_no_kb": "Sem base de conhecimento",
360
+ "tab_recent": "Recentes",
361
+ "tab_all": "Todos",
362
+ "tab_favorites": "Favoritos",
363
+ "search_placeholder": "Pesquisar…",
364
+ "grid_view": "Visualização em grade",
365
+ "list_view": "Visualização em lista",
366
+ "error_title": "Falha ao carregar",
367
+ "last_cache": "Último carregamento",
368
+ "empty_title": "Nenhum arquivo encontrado",
369
+ "empty_sub": "Ajuste os filtros ou envie arquivos para o Picora.",
370
+ "loading_more": "Carregando…",
371
+ "selected_count": "{n} selecionado(s)",
372
+ "insert_as_html": "Inserir como HTML",
373
+ "insert_btn": "Inserir",
374
+ "processing": "Processando",
375
+ "public": "Público",
376
+ "private": "Privado",
377
+ "favorite": "Favorito",
378
+ "copy_url": "Copiar URL",
379
+ "privacy_title": "Arquivos privados selecionados",
380
+ "privacy_desc": "{n} arquivo(s) são privados e podem não ser visíveis publicamente.",
381
+ "privacy_warn": "Tornar os arquivos públicos permitirá que qualquer pessoa com o link os visualize.",
382
+ "suppress_privacy": "Não avisar novamente",
383
+ "make_public_insert": "Tornar público e inserir",
384
+ "insert_anyway": "Inserir assim mesmo",
385
+ "copy_markdown": "Copiar Markdown",
386
+ "empty_kb_scoped_sub": "Sem arquivos na KB atual. Uploads anteriores podem não estar marcados com esta KB.",
387
+ "switch_scope_all": "Mostrar todos os arquivos",
388
+ "url_missing": "URL da mídia ausente — o item pode não estar pronto ainda."
389
+ },
390
+ "command_palette": {
391
+ "placeholder": "Pesquisar arquivos, comandos ou base de conhecimento...",
392
+ "files": "Arquivos",
393
+ "commands": "Comandos",
394
+ "semantic_search": "Pesquisa semântica",
395
+ "keyword_search": "Pesquisa por palavras-chave",
396
+ "no_results": "Nenhum resultado encontrado"
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": "Salvar",
414
+ "cancel": "Cancelar",
415
+ "close": "Fechar",
416
+ "add": "Adicionar",
417
+ "remove": "Remover",
418
+ "connect": "Conectar",
419
+ "disconnect": "Desconectar",
420
+ "insert": "Inserir",
421
+ "replace": "Substituir",
422
+ "copy": "Copiar",
423
+ "edit": "Editar",
424
+ "delete": "Excluir",
425
+ "browse": "Alterar",
426
+ "clear": "Redefinir",
427
+ "play": "Reproduzir",
428
+ "stop": "Parar",
429
+ "start": "Iniciar",
430
+ "untitled": "Sem título",
431
+ "retry": "Tentar novamente",
432
+ "refresh": "Atualizar",
433
+ "new": "Novo"
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": "Recortar",
525
+ "copy": "Copiar",
526
+ "paste": "Colar",
527
+ "upload_all_images": "Enviar todas as imagens para o hospedeiro",
528
+ "upload_starting": "Enviando imagens para o hospedeiro...",
529
+ "upload_image_success": "Enviado: {name}",
530
+ "upload_image_failed": "Falha: {name} — {error}",
531
+ "upload_all_complete": "Envio concluído: {success}/{total} com sucesso",
532
+ "upload_no_config": "Por favor, configure um hospedeiro de imagens nas Configurações primeiro",
533
+ "insert_cloud_image": "Inserir imagem da nuvem…",
534
+ "insert_cloud_audio": "Inserir áudio da nuvem…",
535
+ "insert_cloud_video": "Inserir vídeo da nuvem…"
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": "Alterações não salvas",
553
+ "unsaved_new_doc_msg": "Você tem conteúdo não salvo que será perdido. Deseja salvar primeiro?",
554
+ "save_first": "Salvar",
555
+ "discard_changes": "Não salvar",
556
+ "loading": {
557
+ "parsing": "Analisando markdown…",
558
+ "rendering": "Renderizando…"
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": "A IA não está configurada.",
693
+ "ai_request_failed": "Falha na requisição de IA",
694
+ "chat_request_failed": "Falha na requisição de chat",
695
+ "unknown_command": "Comando de IA desconhecido: {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": "Exportar como {format}",
748
+ "pdf": "PDF",
749
+ "html": "HTML (com estilos)",
750
+ "html_plain": "HTML (sem estilos)",
751
+ "image": "Imagem (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": "Preparando...",
762
+ "rendering": "Renderizando...",
763
+ "paginating": "Paginando ({current}/{total})",
764
+ "writing": "Gravando...",
765
+ "done": "Concluído"
766
+ },
767
+ "fallback": {
768
+ "notice": "Modo compat."
769
+ },
770
+ "error": {
771
+ "generic": "Falha na exportação",
772
+ "timeout": "Tempo de exportação esgotado",
773
+ "subprocess_failed": "Subprocesso falhou",
774
+ "native_api_failed": "Impressão nativa falhou"
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": "Vincular repositório Git",
813
+ "repo_url": "URL do repositório",
814
+ "branch": "Branch",
815
+ "token": "Token de acesso pessoal",
816
+ "token_hint": "Token de acesso pessoal ou chave API. Armazenado com segurança no chaveiro do SO.",
817
+ "auth_method": "Método de autenticação",
818
+ "auth_token": "Token de acesso",
819
+ "auth_password": "Nome de utilizador e senha",
820
+ "auth_ssh": "Chave SSH",
821
+ "username": "Nome de utilizador",
822
+ "password": "Senha",
823
+ "ssh_key_path": "Caminho da chave SSH privada",
824
+ "ssh_passphrase": "Frase-passe SSH",
825
+ "ssh_key_path_hint": "Caminho absoluto para a sua chave SSH privada (ex. ~/.ssh/id_ed25519)",
826
+ "ssh_passphrase_hint": "Deixar em branco se a chave não tiver frase-passe",
827
+ "error_username_required": "O nome de utilizador é obrigatório",
828
+ "error_password_required": "A senha é obrigatória",
829
+ "error_ssh_key_required": "O caminho da chave SSH é obrigatório",
830
+ "mode_clone": "Clonar no diretório local",
831
+ "mode_push": "Enviar conteúdo local para o remoto",
832
+ "mode_connect": "Conectar ao repositório existente",
833
+ "detecting": "Detectando...",
834
+ "auto_commit": "Commit automático ao salvar",
835
+ "auto_sync": "Sincronização automática em segundo plano",
836
+ "sync_interval": "Intervalo de sincronização",
837
+ "minutes": "min",
838
+ "confirm_bind": "Vincular repositório",
839
+ "error_url_required": "A URL do repositório é obrigatória",
840
+ "error_token_required": "O token de acesso é obrigatório",
841
+ "bind": "Vincular repositório Git",
842
+ "unbind": "Desvincular Git",
843
+ "unbind_title": "Desvincular repositório Git",
844
+ "unbind_confirm": "Desvincular o repositório Git de \"{name}\"? Os arquivos locais serão mantidos.",
845
+ "synced": "Sincronizado",
846
+ "ahead": "a enviar",
847
+ "behind": "a receber",
848
+ "syncing": "Sincronizando...",
849
+ "committing": "Confirmando...",
850
+ "sync_error": "Falha na sincronização",
851
+ "sync_now": "Sincronizar agora",
852
+ "not_installed": "Git não instalado"
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": "Inserir imagem",
907
+ "url_tab": "URL",
908
+ "file_tab": "Arquivo local",
909
+ "url_placeholder": "https://exemplo.com/imagem.png",
910
+ "alt_placeholder": "Descrição da imagem (opcional)",
911
+ "select_file": "Selecionar imagem...",
912
+ "no_file_selected": "Nenhum arquivo selecionado",
913
+ "insert": "Inserir",
914
+ "cancel": "Cancelar"
915
+ },
916
+ "image_gen": {
917
+ "title": "Geração de imagens por IA",
918
+ "step1_title": "Modo de imagem",
919
+ "step2_title": "Gerar imagens",
920
+ "step3_title": "Inserir no artigo",
921
+ "generating_prompts": "Gerando prompts...",
922
+ "content_too_short": "O conteúdo do artigo é muito curto para geração de imagens.",
923
+ "style_label": "Estilo",
924
+ "count_label": "Quantidade",
925
+ "style_auto": "Automático",
926
+ "style_photo": "Foto",
927
+ "style_illustration": "Ilustração",
928
+ "style_flat": "Flat",
929
+ "style_ink": "Tinta nanquim",
930
+ "style_watercolor": "Aquarela",
931
+ "style_isometric": "Isométrico",
932
+ "style_infographic": "Infográfico",
933
+ "style_editorial": "Editorial",
934
+ "style_cartoon": "Desenho animado",
935
+ "style_render": "Renderização 3D",
936
+ "style_sketch": "Esboço",
937
+ "style_blueprint": "Planta técnica",
938
+ "style_clay": "Modelo de argila",
939
+ "style_wireframe": "Wireframe",
940
+ "style_exploded": "Vista explodida",
941
+ "style_section": "Corte transversal",
942
+ "style_cad": "Desenho CAD",
943
+ "style_prototype": "Protótipo",
944
+ "style_anime": "Anime",
945
+ "style_comic": "Quadrinhos",
946
+ "style_cinematic": "Cinematográfico",
947
+ "style_pixel": "Pixel Art",
948
+ "style_noir": "Film Noir",
949
+ "style_manga": "Mangá",
950
+ "style_realistic": "Realista",
951
+ "style_studio": "Estúdio",
952
+ "style_lifestyle": "Lifestyle",
953
+ "style_flatlay": "Flat Lay",
954
+ "style_macro": "Macro",
955
+ "style_minimalist": "Minimalista",
956
+ "style_packaging": "Embalagem",
957
+ "style_outdoor": "Ao ar livre",
958
+ "style_mood": "Mood",
959
+ "style_abstract": "Abstrato",
960
+ "style_texture": "Textura",
961
+ "style_gradient": "Gradiente",
962
+ "style_collage": "Colagem",
963
+ "style_vintage": "Vintage",
964
+ "style_botanical": "Botânico",
965
+ "style_geometric": "Geométrico",
966
+ "style_ethereal": "Etéreo",
967
+ "style_brutalist": "Brutalista",
968
+ "generate": "Gerar",
969
+ "next": "Próximo",
970
+ "back": "Voltar",
971
+ "insert_confirm": "Inserir",
972
+ "insert_paragraph": "Inserir após o parágrafo correspondente (Recomendado)",
973
+ "insert_end": "Inserir no final do artigo",
974
+ "insert_replace": "Substituir imagens no artigo",
975
+ "insert_clipboard": "Copiar Markdown para a área de transferência",
976
+ "selected": "{count} selecionado(s)",
977
+ "completed": "Imagens geradas",
978
+ "step_description": "Gerar ilustrações para o artigo",
979
+ "mode_article": "Artigo",
980
+ "mode_design": "Design",
981
+ "mode_storyboard": "Storyboard",
982
+ "mode_product": "Produto",
983
+ "mode_moodboard": "Moodboard",
984
+ "mode_portrait": "Retrato",
985
+ "style_portrait": "Retrato",
986
+ "style_headshot": "Foto de rosto",
987
+ "style_fullbody": "Corpo inteiro",
988
+ "style_fashion": "Moda",
989
+ "style_street": "Street",
990
+ "style_glamour": "Glamour",
991
+ "style_environmental": "Ambiental",
992
+ "style_candid": "Espontâneo",
993
+ "style_group": "Grupo",
994
+ "pre_defined_detected": "Detectado(s) {count} prompt(s) pré-definido(s) no documento",
995
+ "use_predefined": "Usar prompts pré-definidos"
996
+ },
997
+ "image_host": {
998
+ "title": "Hospedagem de imagens",
999
+ "provider": "Provedor",
1000
+ "smms": "SM.MS",
1001
+ "imgur": "Imgur",
1002
+ "github": "Repositório GitHub",
1003
+ "custom": "API personalizada",
1004
+ "api_token": "Token de API",
1005
+ "api_token_placeholder": "Digite o token de API",
1006
+ "custom_endpoint": "Endpoint de upload",
1007
+ "custom_endpoint_placeholder": "https://sua-api.com/upload",
1008
+ "custom_headers": "Cabeçalhos personalizados (JSON)",
1009
+ "custom_url_template": "Modelo de URL do resultado",
1010
+ "custom_url_template_placeholder": "https://example.com/i/{id}",
1011
+ "custom_url_template_hint": "Espaços reservados: {id}, {storageKey}, {filename}, {url}. Deixe vazio para detectar automaticamente os campos de URL.",
1012
+ "github_repo_url": "URL do repositório",
1013
+ "github_repo_url_placeholder": "https://github.com/usuario/imagens",
1014
+ "github_branch": "Branch",
1015
+ "github_dir": "Diretório de imagens",
1016
+ "github_token": "Token de acesso pessoal",
1017
+ "github_token_placeholder": "ghp_xxxxxxxxxxxx",
1018
+ "github_cdn": "Formato da URL",
1019
+ "github_cdn_raw": "raw.githubusercontent.com",
1020
+ "github_cdn_jsdelivr": "CDN jsDelivr",
1021
+ "import_from_publish": "Importar do alvo de publicação",
1022
+ "auto_upload": "Upload automático de imagens ao colar/soltar",
1023
+ "test_upload": "Testar upload",
1024
+ "test": "Testar",
1025
+ "testing": "Testando...",
1026
+ "success": "Upload realizado com sucesso!",
1027
+ "failed": "Falha no upload",
1028
+ "add_target": "Adicionar hospedagem de imagem",
1029
+ "target_name": "Nome",
1030
+ "target_name_placeholder": "ex.: CDN do meu blog",
1031
+ "settings_empty": "Nenhuma hospedagem de imagem configurada",
1032
+ "settings_hint": "Adicione um serviço de hospedagem de imagens para habilitar o upload automático.",
1033
+ "default": "Padrão",
1034
+ "set_default": "Definir como padrão",
1035
+ "gitlab": "Repositório GitLab",
1036
+ "git_custom": "Git personalizado (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": "Hospedagem via API",
1043
+ "group_git": "Repositório Git",
1044
+ "group_oss": "Armazenamento de objetos",
1045
+ "gitlab_repo_url": "URL do repositório",
1046
+ "gitlab_branch": "Branch",
1047
+ "gitlab_dir": "Diretório de imagens",
1048
+ "gitlab_token": "Token de acesso pessoal",
1049
+ "gitlab_token_placeholder": "glpat-xxxxxxxxxxxx",
1050
+ "git_custom_repo_url": "URL do repositório",
1051
+ "git_custom_branch": "Branch",
1052
+ "git_custom_dir": "Diretório de imagens",
1053
+ "git_custom_token": "Token de acesso",
1054
+ "git_custom_token_placeholder": "Digite o token",
1055
+ "oss_access_key": "Chave de acesso",
1056
+ "oss_access_key_placeholder": "Digite o ID da chave de acesso",
1057
+ "oss_secret_key": "Chave secreta",
1058
+ "oss_secret_key_placeholder": "Digite a chave secreta",
1059
+ "oss_bucket": "Bucket",
1060
+ "oss_bucket_placeholder": "ex.: meu-bucket-de-imagens",
1061
+ "oss_region": "Região",
1062
+ "oss_region_placeholder": "ex.: cn-east-1, us-east-1",
1063
+ "select_region": "Selecionar região",
1064
+ "oss_endpoint": "Endpoint personalizado (opcional)",
1065
+ "oss_endpoint_placeholder": "ex.: https://s3.custom.com",
1066
+ "oss_cdn_domain": "Domínio CDN (opcional)",
1067
+ "oss_cdn_domain_placeholder": "ex.: https://cdn.exemplo.com",
1068
+ "oss_path_prefix": "Prefixo de caminho (opcional)",
1069
+ "oss_path_prefix_placeholder": "ex.: images/blog/",
1070
+ "required": "Obrigatório",
1071
+ "qiniu_cdn_required": "O Qiniu requer um domínio CDN para gerar URLs de imagem acessíveis.",
1072
+ "picora": "Picora",
1073
+ "picora_one_click": "Importação em um clique",
1074
+ "picora_import_title": "Importar do Picora",
1075
+ "picora_import_hint": "Abra o console do Picora e clique em \"Importar para Moraya\" ao lado de qualquer API Key. Ou insira a chave manualmente abaixo.",
1076
+ "picora_open_console": "Abrir console Picora",
1077
+ "picora_manual_entry": "Já tenho uma API Key — inserir manualmente",
1078
+ "picora_verifying": "Verificando com Picora…",
1079
+ "picora_verify_failed": "Falha na verificação. Verifique o token e tente novamente.",
1080
+ "picora_import_success": "Picora importado ({email})",
1081
+ "picora_featured_badge": "Recomendado",
1082
+ "picora_api_url": "Endpoint Picora",
1083
+ "picora_api_url_placeholder": "https://api.picora.me/v1/images",
1084
+ "picora_img_domain": "Domínio CDN",
1085
+ "picora_img_domain_placeholder": "https://media.picora.me",
1086
+ "picora_api_key": "API Key",
1087
+ "picora_api_key_placeholder": "sk_live_...",
1088
+ "picora_user_email": "Conta Picora",
1089
+ "picora_token_preview": "Pré-visualização do token",
1090
+ "picora_confirm_import": "Confirmar importação",
1091
+ "picora_import_invalid": "Link de importação inválido — tente novamente no console do Picora.",
1092
+ "picora_verify": "Verificar",
1093
+ "picora_hero_desc": "Nosso host SaaS de imagens · configuração em 5 min com um clique",
1094
+ "other_providers": "Outros provedores",
1095
+ "picora_api_key_keychain": "Armazenado no Chaveiro do sistema · digite uma nova chave para substituir",
1096
+ "picora_key_migrated_toast": "{count} chave(s) de API do Picora migrada(s) para o chaveiro do sistema."
1097
+ },
1098
+ "image_menu": {
1099
+ "resize": "Redimensionar",
1100
+ "upload": "Enviar para hospedagem de imagens",
1101
+ "edit_alt": "Editar descrição",
1102
+ "copy_url": "Copiar URL da imagem",
1103
+ "copy_image": "Copiar imagem",
1104
+ "open_in_browser": "Abrir imagem no navegador",
1105
+ "save_as": "Salvar imagem como...",
1106
+ "delete": "Excluir imagem",
1107
+ "original_size": "Tamanho original"
1108
+ },
1109
+ "kb": {
1110
+ "index_all": "Indexar todos os documentos",
1111
+ "index_file": "Indexar arquivo",
1112
+ "indexing": "Indexando...",
1113
+ "index_complete": "Indexação concluída",
1114
+ "search_placeholder": "Pesquisar na base de conhecimento...",
1115
+ "no_index": "Nenhum índice encontrado. Clique com o botão direito na base de conhecimento para criar um.",
1116
+ "stale_index": "O índice está desatualizado. {count} arquivos foram alterados desde a última indexação.",
1117
+ "dimensions": "Dimensões",
1118
+ "auto_index": "Indexar automaticamente ao salvar",
1119
+ "provider": "Provedor de embedding",
1120
+ "model": "Modelo de embedding",
1121
+ "delete_index": "Excluir índice",
1122
+ "reindex_all": "Reindexar tudo",
1123
+ "delete_confirm": "Tem certeza de que deseja excluir o índice?",
1124
+ "use_same_as_ai": "Usar a mesma configuração do chat de IA",
1125
+ "online_model": "Modelo Online",
1126
+ "dimension_warning": "Máximo para este modelo: {max}. Usando: {actual}.",
1127
+ "status": {
1128
+ "indexed": "Indexado ({chunks} fragmentos, {files} arquivos)",
1129
+ "not_indexed": "Não indexado",
1130
+ "stale": "{count} arquivos alterados"
1131
+ },
1132
+ "progress": {
1133
+ "scanning": "Escaneando arquivos...",
1134
+ "chunking": "Dividindo documentos... ({current}/{total})",
1135
+ "embedding": "Gerando embeddings... ({current}/{total})",
1136
+ "indexing": "Construindo índice...",
1137
+ "done": "Concluído"
1138
+ },
1139
+ "provider_no_embedding": "O provedor de chat AI atual não suporta embedding. Selecione um provedor de embedding acima.",
1140
+ "local_models": "Modelos Locais",
1141
+ "download_model": "Baixar",
1142
+ "delete_model": "Excluir Modelo",
1143
+ "select_local_model": "Selecionar um modelo baixado",
1144
+ "no_local_models": "Nenhum modelo baixado. Baixe um abaixo.",
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": "Vincular KB existente"
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": "Erro de sincronização:"
1234
+ },
1235
+ "sync_now": "Sincronizar agora",
1236
+ "error": {
1237
+ "target_missing": "Conta Picora não encontrada — por favor, vincule novamente esta base de conhecimento ou restaure a conta nas Configurações."
1238
+ },
1239
+ "trash": {
1240
+ "title": "Lixeira",
1241
+ "toast_deleted": "Picora excluiu {count} arquivo(s). Movido(s) para a lixeira.",
1242
+ "view": "Ver",
1243
+ "restore_all": "Restaurar tudo",
1244
+ "restore_success": "{count} arquivo(s) restaurado(s).",
1245
+ "restore_failed": "Não foi possível restaurar alguns arquivos.",
1246
+ "restore_conflict_title": "Arquivo já existe",
1247
+ "restore_conflict_body": "{path} já existe. Sobrescrever?",
1248
+ "overwrite": "Sobrescrever",
1249
+ "cancel": "Cancelar",
1250
+ "filter_kb_all": "Todas as BC",
1251
+ "filter_time7d": "Últimos 7 dias",
1252
+ "filter_time30d": "Últimos 30 dias",
1253
+ "filter_time_all": "Todo o tempo",
1254
+ "empty_state": "A lixeira está vazia.",
1255
+ "loading": "Carregando…",
1256
+ "restore": "Restaurar",
1257
+ "delete_forever": "Excluir permanentemente",
1258
+ "delete_forever_confirm": "Excluir permanentemente {path}? Isso não pode ser desfeito.",
1259
+ "purge_all": "Esvaziar lixeira",
1260
+ "purge_all_confirm": "Esvaziar todas as entradas com mais de {days} dias?",
1261
+ "purge_result": "{files} arquivo(s) limpos, {size} liberados.",
1262
+ "auto_purge_hint": "Itens com mais de 7 dias são excluídos automaticamente.",
1263
+ "entry_deleted_at": "Excluído em {date}",
1264
+ "kb_unknown": "BC desconhecida"
1265
+ }
1266
+ },
1267
+ "knowledge_base": {
1268
+ "title": "Base de conhecimento",
1269
+ "add": "Adicionar base de conhecimento",
1270
+ "remove": "Remover",
1271
+ "rename": "Renomear",
1272
+ "manage": "Gerenciar bases de conhecimento...",
1273
+ "empty": "Nenhuma base de conhecimento configurada",
1274
+ "empty_hint": "Adicione uma pasta como base de conhecimento para alternância rápida.",
1275
+ "delete_confirm": "Remover \"{name}\" das bases de conhecimento? A pasta em si não será excluída.",
1276
+ "switch_to": "Alternar base de conhecimento",
1277
+ "save_hint": "Esta pasta não está nas suas bases de conhecimento.",
1278
+ "save_as_kb": "Salvar como base de conhecimento"
1279
+ },
1280
+ "link": {
1281
+ "open": "Abrir link",
1282
+ "remove": "Remover link"
1283
+ },
1284
+ "mcp": {
1285
+ "title": "MCP servers",
1286
+ "tabs": {
1287
+ "servers": "Servidores",
1288
+ "publish": "Publicar",
1289
+ "sync": "Sincronizar",
1290
+ "marketplace": "Mercado"
1291
+ },
1292
+ "ai_services": {
1293
+ "empty": "Nenhum serviço criado pela IA",
1294
+ "hint": "A IA pode criar serviços MCP durante a conversa. Peça para ela interagir com uma API!",
1295
+ "node_required": "Node.js 18+ necessário",
1296
+ "checking_node": "Verificando Node.js...",
1297
+ "temp": "Temporário",
1298
+ "saved": "Salvo",
1299
+ "view_code": "Código",
1300
+ "tools": "{count} ferramentas",
1301
+ "service_created": "A IA criou o serviço \"{name}\" com {count} ferramentas",
1302
+ "service_saved": "Serviço \"{name}\" salvo",
1303
+ "service_removed": "Serviço \"{name}\" removido",
1304
+ "launch_confirm_title": "Aviso de segurança do serviço de IA",
1305
+ "launch_confirm_msg": "A IA gerou um serviço MCP que precisa executar código gerado automaticamente:\n Serviço: {name}\n Ferramentas: {tools}\n\nEste código será executado em um processo Node.js local.\nPor favor, confirme que você confia neste código gerado pela IA.",
1306
+ "launch_confirm_ok": "Executar",
1307
+ "launch_confirm_cancel": "Cancelar"
1308
+ },
1309
+ "servers": {
1310
+ "empty": "Nenhum servidor MCP configurado",
1311
+ "local_mcp": "MCP local",
1312
+ "add_server": "Adicionar servidor",
1313
+ "add_server_plus": "+ Adicionar servidor",
1314
+ "connected": "Conectado",
1315
+ "disconnected": "Desconectado",
1316
+ "server_name": "Nome do servidor",
1317
+ "server_url": "URL do servidor (ex.: http://localhost:3000/mcp)",
1318
+ "http": "HTTP",
1319
+ "sse": "SSE (Server-Sent Events)",
1320
+ "stdio": "stdio (Processo local)",
1321
+ "command": "Comando",
1322
+ "command_placeholder": "Comando (ex.: npx, node, python)",
1323
+ "args_placeholder": "Argumentos (ex.: -y @modelcontextprotocol/server-filesystem /caminho)",
1324
+ "env_placeholder": "ENV_KEY=valor (um por linha)",
1325
+ "presets": "MCP remoto",
1326
+ "presets_hint": "Adicione servidores MCP populares com um clique",
1327
+ "preset_desc": {
1328
+ "filesystem": "Ler, buscar e gerenciar arquivos locais",
1329
+ "fetch": "Buscar páginas web e converter para Markdown",
1330
+ "git": "Ler e pesquisar repositórios Git",
1331
+ "memory": "Grafo de conhecimento persistente para memória da IA",
1332
+ "puppeteer": "Automação de navegador e web scraping",
1333
+ "sqlite": "Consultar e gerenciar bancos de dados SQLite",
1334
+ "slack": "Ler e pesquisar canais e mensagens do Slack",
1335
+ "google_maps": "Geocodificação, rotas e busca de locais",
1336
+ "sequential_thinking": "Raciocínio passo a passo e resolução de problemas",
1337
+ "everything": "Busca de arquivos no Windows via Everything"
1338
+ },
1339
+ "preset_env_title": "Variáveis de ambiente",
1340
+ "preset_env_desc": {
1341
+ "slack_bot_token": "Slack Bot OAuth Token (xoxb-...)",
1342
+ "slack_team_id": "ID da equipe/espaço de trabalho do Slack (opcional)",
1343
+ "google_maps_api_key": "Chave da API do Google Maps"
1344
+ },
1345
+ "preset_add": "Adicionar e conectar",
1346
+ "form_mode": "Formulário",
1347
+ "json_mode": "JSON",
1348
+ "json_placeholder": "Cole a configuração JSON, ex.:\n{\n \"mcpServers\": {\n \"nome\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"@.../server-xxx\"]\n }\n }\n}",
1349
+ "json_no_config": "Nenhuma configuração de servidor MCP válida encontrada",
1350
+ "json_parse_error": "erro de análise",
1351
+ "launch_confirm_title": "Aviso de segurança",
1352
+ "launch_confirm_msg": "Prestes a iniciar programa externo:\n Comando: {command}\n Argumentos: {args}\n\nEste servidor MCP será executado com suas permissões de usuário e pode acessar arquivos locais e rede.\nPor favor, confirme que este servidor MCP é de uma fonte confiável.",
1353
+ "launch_confirm_ok": "Iniciar",
1354
+ "launch_confirm_cancel": "Cancelar",
1355
+ "auto_approve": "Aprovar automaticamente o lançamento de MCP",
1356
+ "auto_approve_hint": "Pular a confirmação de segurança ao conectar servidores MCP e iniciar serviços gerados pela IA. Não recomendado para fontes não confiáveis.",
1357
+ "error_name_required": "O nome do servidor é obrigatório",
1358
+ "error_command_required": "O comando é obrigatório",
1359
+ "error_url_required": "A URL é obrigatória"
1360
+ },
1361
+ "publish": {
1362
+ "empty": "Nenhum alvo de publicação configurado",
1363
+ "hint": "Conecte um servidor MCP com capacidades de publicação primeiro.",
1364
+ "button": "Publicar",
1365
+ "publishing": "Publicando...",
1366
+ "published": "Publicado! {info}",
1367
+ "failed": "Falhou: {message}",
1368
+ "error": "Erro: {message}"
1369
+ },
1370
+ "sync": {
1371
+ "empty": "Nenhuma configuração de sincronização",
1372
+ "hint": "Conecte um servidor MCP primeiro e depois adicione uma configuração de sincronização.",
1373
+ "sync_now": "Sincronizar agora",
1374
+ "add_sync": "+ Adicionar sincronização",
1375
+ "name": "Nome da configuração",
1376
+ "server": "Servidor MCP",
1377
+ "remote_path": "Caminho remoto",
1378
+ "local_path": "Caminho local",
1379
+ "direction": "Direção",
1380
+ "push": "Enviar (local → remoto)",
1381
+ "pull": "Receber (remoto → local)",
1382
+ "bidirectional": "Bidirecional",
1383
+ "last_sync": "Última sincronização: {time}",
1384
+ "syncing": "Sincronizando...",
1385
+ "success": "Sincronização concluída",
1386
+ "error": "Erro de sincronização: {message}"
1387
+ },
1388
+ "marketplace": {
1389
+ "title": "Mercado",
1390
+ "search": "Buscar servidores MCP...",
1391
+ "source": "Fonte",
1392
+ "source_official": "Oficial",
1393
+ "source_lobehub": "LobeHub",
1394
+ "source_smithery": "Smithery",
1395
+ "install": "Instalar",
1396
+ "install_and_connect": "Instalar e conectar",
1397
+ "installing": "Instalando...",
1398
+ "installed": "Instalado",
1399
+ "view_details": "Detalhes",
1400
+ "load_more": "Carregar mais",
1401
+ "no_results": "Nenhum servidor MCP encontrado",
1402
+ "network_error": "Falha ao carregar, verifique a rede",
1403
+ "retry": "Tentar novamente",
1404
+ "env_vars": "Variáveis de ambiente",
1405
+ "env_required": "(obrigatório)",
1406
+ "popularity": "usos",
1407
+ "installs": "Instalações / Usos",
1408
+ "verified": "Verificado",
1409
+ "cancel": "Cancelar"
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": "Arquivo",
1557
+ "edit": "Editar",
1558
+ "paragraph": "Parágrafo",
1559
+ "format": "Formatar",
1560
+ "view": "Visualizar",
1561
+ "window": "Janela",
1562
+ "help": "Ajuda",
1563
+ "new": "Novo",
1564
+ "new_window": "Nova janela",
1565
+ "open": "Abrir...",
1566
+ "save": "Salvar",
1567
+ "save_as": "Salvar como...",
1568
+ "export": "Exportar",
1569
+ "export_html": "HTML",
1570
+ "export_pdf": "PDF",
1571
+ "export_image": "Imagem (PNG)",
1572
+ "export_doc": "Word (.doc)",
1573
+ "heading1": "Título 1",
1574
+ "heading2": "Título 2",
1575
+ "heading3": "Título 3",
1576
+ "heading4": "Título 4",
1577
+ "heading5": "Título 5",
1578
+ "heading6": "Título 6",
1579
+ "table": "Tabela",
1580
+ "code_block": "Bloco de código",
1581
+ "math_block": "Bloco de fórmula",
1582
+ "quote": "Citação",
1583
+ "bullet_list": "Lista com marcadores",
1584
+ "ordered_list": "Lista numerada",
1585
+ "task_list": "Lista de tarefas",
1586
+ "horizontal_rule": "Linha horizontal",
1587
+ "bold": "Negrito",
1588
+ "italic": "Itálico",
1589
+ "strikethrough": "Tachado",
1590
+ "code": "Código",
1591
+ "link": "Link",
1592
+ "image": "Imagem",
1593
+ "visual_mode": "Modo visual",
1594
+ "source_mode": "Modo código-fonte",
1595
+ "split_mode": "Modo dividido",
1596
+ "toggle_sidebar": "Alternar barra lateral",
1597
+ "toggle_aipanel": "Alternar painel de IA",
1598
+ "toggle_outline": "Alternar estrutura de tópicos",
1599
+ "zoom_in": "Ampliar",
1600
+ "zoom_out": "Reduzir",
1601
+ "actual_size": "Tamanho real",
1602
+ "find": "Localizar",
1603
+ "replace": "Substituir",
1604
+ "changelog": "Registro de alterações",
1605
+ "privacy_policy": "Política de privacidade",
1606
+ "official_website": "Site oficial",
1607
+ "about_moraya": "Sobre o Moraya",
1608
+ "feedback": "Feedback",
1609
+ "settings": "Configurações...",
1610
+ "version_info": "Informações da versão",
1611
+ "workflow": "Fluxo de trabalho",
1612
+ "seo_optimization": "Otimização SEO",
1613
+ "ai_image_generation": "Geração de imagens IA",
1614
+ "publish": "Publicar",
1615
+ "mcp_tools": "Ferramentas MCP",
1616
+ "no_mcptools": "Nenhuma ferramenta MCP conectada"
1617
+ },
1618
+ "mermaid": {
1619
+ "loading": "Carregando diagrama...",
1620
+ "error": "Falha ao renderizar o diagrama",
1621
+ "edit": "Editar",
1622
+ "preview": "Pré-visualizar",
1623
+ "empty": "Diagrama vazio"
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": "Conversa apagada",
1713
+ "clear_undone": "Mensagens restauradas",
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": "Predefinição \"{name}\" excluída",
1777
+ "preset_restored": "Predefinição restaurada",
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": "Executar plugin",
2018
+ "run_action": "Executar",
2019
+ "invoking": "Executando...",
2020
+ "success": "Plugin aplicado",
2021
+ "no_changes": "Sem alterações",
2022
+ "no_plugins": "Nenhum plugin em execução"
2023
+ },
2024
+ "plugins": {
2025
+ "tabs": {
2026
+ "preset": "Integradas",
2027
+ "installed": "Instalados",
2028
+ "market": "Marketplace"
2029
+ },
2030
+ "installed": {
2031
+ "empty": "Nenhum plugin instalado ainda."
2032
+ },
2033
+ "sandbox": {
2034
+ "label": "Nível de sandbox",
2035
+ "sandbox": "Sandbox (JS)",
2036
+ "local": "Local (sem rede)",
2037
+ "system": "Sistema (acesso à rede)"
2038
+ },
2039
+ "permissions": {
2040
+ "label": "Permissões"
2041
+ },
2042
+ "market": {
2043
+ "search": "Buscar plugins...",
2044
+ "refresh": "Atualizar",
2045
+ "cat_all": "Todos",
2046
+ "cached": "Mostrando resultados em cache",
2047
+ "loading": "Carregando marketplace...",
2048
+ "empty": "Nenhum plugin encontrado",
2049
+ "install": "Instalar",
2050
+ "installed": "Instalado",
2051
+ "installing": "Instalando..."
2052
+ },
2053
+ "install": {
2054
+ "from_file": "Instalar a partir de .zip",
2055
+ "url_placeholder": "URL do repositório GitHub (https://github.com/...)",
2056
+ "validate": "Importar",
2057
+ "confirm_url": "Instalar plugin a partir da URL?",
2058
+ "author": "Autor",
2059
+ "permissions": "Permissões",
2060
+ "no_permissions": "Sem permissões",
2061
+ "fetching_release": "Buscando informações do lançamento...",
2062
+ "downloading": "Baixando..."
2063
+ },
2064
+ "verified": "Verificado",
2065
+ "enable": "Ativar",
2066
+ "disable": "Desativar",
2067
+ "uninstall": "Desinstalar",
2068
+ "changelog": "Registro de alterações",
2069
+ "view_source": "Código-fonte",
2070
+ "blacklisted": "Na lista negra",
2071
+ "blacklist_warning": "Este plugin foi colocado na lista negra devido a um problema de segurança. Por favor, desinstale-o.",
2072
+ "process_error": "O processo do plugin travou. Alterne para reiniciar.",
2073
+ "error": {
2074
+ "platform_not_supported": "Nenhum download disponível para sua plataforma."
2075
+ },
2076
+ "preset": {
2077
+ "initializing": "Carregando...",
2078
+ "download": "Baixar",
2079
+ "retry": "Tentar novamente",
2080
+ "ready": "Ativado",
2081
+ "downloading": "Baixando...",
2082
+ "loading": "Carregando...",
2083
+ "error": "Erro",
2084
+ "large_bundle": "Pacote grande (>500 KB) — o download pode demorar um momento",
2085
+ "cancel": "Cancelar",
2086
+ "delete": "Excluir"
2087
+ }
2088
+ },
2089
+ "publish": {
2090
+ "settings_empty": "Nenhum alvo de publicação configurado",
2091
+ "settings_hint": "Adicione um repositório GitHub ou endpoint de API personalizado para publicar seus artigos.",
2092
+ "add_target": "Adicionar alvo",
2093
+ "edit_target": "Editar",
2094
+ "delete_target": "Excluir",
2095
+ "test_connection": "Testar conexão",
2096
+ "github": "Repositório GitHub",
2097
+ "custom_api": "API personalizada",
2098
+ "target_name": "Nome",
2099
+ "target_name_placeholder": "ex.: Meu blog",
2100
+ "repo_url": "URL do repositório",
2101
+ "repo_url_placeholder": "https://github.com/usuario/blog",
2102
+ "branch": "Branch",
2103
+ "articles_dir": "Diretório de artigos",
2104
+ "articles_dir_placeholder": "content/posts/",
2105
+ "images_dir": "Diretório de imagens",
2106
+ "images_dir_placeholder": "static/images/",
2107
+ "token": "Token de acesso pessoal",
2108
+ "token_placeholder": "ghp_xxxxxxxxxxxx",
2109
+ "front_matter_template": "Template de front matter",
2110
+ "endpoint": "Endpoint da API",
2111
+ "endpoint_placeholder": "https://api.exemplo.com/artigos",
2112
+ "method": "Método HTTP",
2113
+ "headers": "Cabeçalhos (JSON)",
2114
+ "body_template": "Template do corpo",
2115
+ "template_presets": "Templates predefinidos",
2116
+ "preset_hugo": "Hugo",
2117
+ "preset_hexo": "Hexo",
2118
+ "preset_astro": "Astro",
2119
+ "preset_custom": "Personalizado",
2120
+ "file_name_pattern": "Padrão de nome de arquivo",
2121
+ "file_name_preset": "Predefinição de nome",
2122
+ "file_name_preview": "Pré-visualização",
2123
+ "preset_simple": "Simples (nome do arquivo)",
2124
+ "preset_date_slug": "Data + Slug",
2125
+ "preset_date_filename": "Data + Nome do arquivo",
2126
+ "preset_year_month": "Ano/Mês/Slug",
2127
+ "file_name_variables": "Variáveis: {{date}}, {{year}}, {{month}}, {{day}}, {{slug}}, {{filename}}, {{title}}",
2128
+ "rss_section": "Feed RSS",
2129
+ "rss_enable": "Gerar feed RSS",
2130
+ "rss_enable_hint": "Atualizar automaticamente o feed.xml ao publicar",
2131
+ "rss_feed_path": "Caminho do arquivo de feed",
2132
+ "rss_feed_path_placeholder": "feed.xml",
2133
+ "rss_site_url": "URL do site",
2134
+ "rss_site_url_placeholder": "https://meublog.com",
2135
+ "rss_feed_title": "Título do feed",
2136
+ "rss_feed_title_placeholder": "Meu blog",
2137
+ "rss_feed_description": "Descrição do feed",
2138
+ "rss_feed_description_placeholder": "Artigos sobre...",
2139
+ "rss_language": "Idioma",
2140
+ "rss_author_name": "Autor",
2141
+ "rss_author_name_placeholder": "João Silva",
2142
+ "rss_max_items": "Máximo de itens no feed",
2143
+ "rss_include_full_content": "Incluir conteúdo completo do artigo no feed",
2144
+ "rss_feed_endpoint": "Endpoint do feed RSS",
2145
+ "rss_feed_endpoint_placeholder": "https://api.exemplo.com/rss",
2146
+ "rss_update_failed": "Falha ao atualizar o feed RSS",
2147
+ "progress_title": "Publicando...",
2148
+ "progress_publishing": "Enviando...",
2149
+ "progress_rss": "Atualizando RSS...",
2150
+ "progress_done": "Concluído",
2151
+ "progress_failed": "Falhou",
2152
+ "enable_seo": "Otimização SEO",
2153
+ "enable_seohint": "Gerar título, resumo, tags e meta descrição antes de publicar",
2154
+ "next_seo": "Próximo: SEO →",
2155
+ "back_to_targets": "Voltar",
2156
+ "seo_no_provider": "Nenhum provedor de IA configurado. Configure um provedor de IA nas Configurações."
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": "Revisões",
2199
+ "tab_label": "Revisão",
2200
+ "no_reviews": "Sem revisões ainda",
2201
+ "no_reviews_hint": "Selecione texto no editor e use ⌘⇧R para adicionar uma revisão.",
2202
+ "not_git_bound": "Não vinculado a um repositório Git",
2203
+ "not_git_bound_hint": "Vincule a base de conhecimento a um repositório Git para usar revisões colaborativas.",
2204
+ "bind_git_btn": "Vincular repositório Git",
2205
+ "open_count": "aberto",
2206
+ "resolved_count": "Resolvido",
2207
+ "add_review": "Adicionar revisão",
2208
+ "reply": "Responder",
2209
+ "resolve": "Resolve",
2210
+ "wontfix": "Não será corrigido",
2211
+ "reanchor": "Reancrar",
2212
+ "mark_resolved": "Marcar como resolvido",
2213
+ "resolved": "Resolvido",
2214
+ "wontfix_label": "Não será corrigido",
2215
+ "unanchored": "Posição perdida",
2216
+ "relocated": "Posição movida",
2217
+ "verified_prompt": "O documento foi alterado desde a última verificação. Marcar como revisado?",
2218
+ "mark_verified": "Marcar como revisado",
2219
+ "lock_self": "Você está editando este arquivo",
2220
+ "lock_other": "está editando este arquivo",
2221
+ "lock_expiry": "min restantes",
2222
+ "view_readonly": "Ver somente leitura",
2223
+ "force_unlock": "Forçar desbloqueio",
2224
+ "select_text_first": "Por favor selecione o texto primeiro",
2225
+ "source_mode_limit_hint": "As revisões só estão disponíveis no modo visual",
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": "Diferenciar maiúsculas",
2270
+ "replace": "Replace",
2271
+ "replace_all": "Replace All",
2272
+ "regex": "Usar expressão regular",
2273
+ "regex_error": "Expressão regular inválida",
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": "Otimização SEO",
2346
+ "generating": "Analisando artigo...",
2347
+ "titles": "Candidatos a título",
2348
+ "custom_title": "Título personalizado...",
2349
+ "excerpt": "Resumo",
2350
+ "tags": "Tags",
2351
+ "add_tag": "Adicionar tag...",
2352
+ "slug": "Slug da URL",
2353
+ "meta_description": "Meta descrição",
2354
+ "regenerate": "Regenerar",
2355
+ "apply": "Aplicar",
2356
+ "retry": "Tentar novamente",
2357
+ "content_too_short": "O conteúdo do artigo é muito curto para análise SEO.",
2358
+ "completed": "SEO otimizado",
2359
+ "step_description": "Gerar título, resumo e tags"
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": "Geral",
2382
+ "editor": "Editor",
2383
+ "appearance": "Aparência",
2384
+ "ai": "Chat",
2385
+ "image_ai": "Imagem IA",
2386
+ "mcp": "MCP",
2387
+ "image": "Hospedagem",
2388
+ "publish": "Publicar",
2389
+ "voice": "Voz IA",
2390
+ "knowledge_base": "Base de conhecimento",
2391
+ "plugins": "Plugins",
2392
+ "kb_sync": "Sync KB",
2393
+ "picora": "Picora",
2394
+ "export": "Exportar",
2395
+ "shortcuts": "Atalhos"
2396
+ },
2397
+ "groups": {
2398
+ "general": "Geral",
2399
+ "ai": "Configurações IA",
2400
+ "extensions": "Extensões",
2401
+ "knowledge_base": "Base de Conhecimento",
2402
+ "picora": "Picora"
2403
+ },
2404
+ "tab_desc": {
2405
+ "image": "Configure provedores de armazenamento em nuvem para envio de imagens.",
2406
+ "publish": "Configure destinos de publicação como blog, GitHub Pages ou RSS.",
2407
+ "export": "Configurar exportação de PDF — tamanho da página, margens, fontes e opções de conteúdo."
2408
+ },
2409
+ "language": {
2410
+ "label": "Idioma",
2411
+ "system": "Seguir sistema"
2412
+ },
2413
+ "theme": {
2414
+ "label": "Tema",
2415
+ "system": "Seguir sistema",
2416
+ "light": "Claro",
2417
+ "dark": "Escuro"
2418
+ },
2419
+ "appearance": {
2420
+ "theme_section": "Tema",
2421
+ "dark_mode_section": "Modo escuro",
2422
+ "font_section": "Fonte",
2423
+ "separate_dark_theme": "Usar tema separado para modo escuro",
2424
+ "dark_theme": "Tema do modo escuro",
2425
+ "dark_mode_label": "Aparência"
2426
+ },
2427
+ "font_size": {
2428
+ "label": "Tamanho da fonte"
2429
+ },
2430
+ "auto_save": {
2431
+ "label": "Salvamento automático",
2432
+ "interval": "Intervalo de salvamento automático"
2433
+ },
2434
+ "remember_last_folder": "Lembrar última pasta aberta",
2435
+ "show_cloud_insert_entries": "Mostrar opções de inserção na nuvem",
2436
+ "show_cloud_insert_entries_desc": "Adicionar opções 'Inserir imagem/áudio/vídeo da nuvem' ao menu Formatar e ao menu de contexto.",
2437
+ "rules_history_count": "Versões de histórico MORAYA.md",
2438
+ "rules_history_count_hint": "Número de versões históricas a manter por arquivo de regras (padrão: 10)",
2439
+ "editor": {
2440
+ "line_width": "Largura da linha do editor",
2441
+ "tab_size": "Tamanho da tabulação",
2442
+ "show_line_numbers": "Mostrar números de linha no modo código-fonte"
2443
+ },
2444
+ "version": "Moraya v{version}",
2445
+ "permissions": {
2446
+ "mcp_title": "Permissões MCP",
2447
+ "ai_title": "Configurações de IA",
2448
+ "ai_max_tokens": "Máximo de tokens de saída",
2449
+ "ai_max_tokens_hint": "Número máximo de tokens que a IA pode gerar por resposta. Valores maiores permitem respostas mais longas e chamadas de ferramentas, mas custam mais.",
2450
+ "ai_tool_result_max_chars": "Máximo de caracteres do resultado da ferramenta",
2451
+ "ai_tool_result_max_chars_hint": "Máximo de caracteres mantidos de cada resultado de ferramenta MCP. Valores maiores preservam mais detalhes, mas consomem mais contexto.",
2452
+ "ai_max_tool_rounds": "Máximo de rodadas de chamada de ferramentas",
2453
+ "ai_max_tool_rounds_hint": "Número máximo de rodadas de chamada de ferramentas que a IA pode realizar em um único turno de conversa. Aumente para tarefas complexas com múltiplas etapas."
2454
+ },
2455
+ "voice": {
2456
+ "providers": "Provedores de fala",
2457
+ "add_provider": "Adicionar provedor",
2458
+ "edit_provider": "Editar provedor",
2459
+ "no_providers": "Nenhum provedor de fala configurado.",
2460
+ "provider": "Provedor",
2461
+ "api_key": "Chave de API",
2462
+ "api_key_optional": "Opcional para AWS (use a chave de acesso)",
2463
+ "aws_access_key": "ID da chave de acesso AWS",
2464
+ "aws_secret_key": "Chave secreta AWS",
2465
+ "region": "Região",
2466
+ "model": "Modelo",
2467
+ "model_placeholder": "Digite o nome do modelo",
2468
+ "endpoint_id_placeholder": "Digite o ID do endpoint de inferência",
2469
+ "language": "Idioma",
2470
+ "lang_auto": "Detecção automática",
2471
+ "lang_multi": "Multi-idioma",
2472
+ "base_url": "URL personalizada do WebSocket",
2473
+ "test_connection": "Testar conexão",
2474
+ "testing": "Testando...",
2475
+ "test_ok": "Conectado",
2476
+ "test_failed": "Falha na conexão",
2477
+ "set_active": "Definir como padrão",
2478
+ "active": "Padrão",
2479
+ "custom": "Personalizado",
2480
+ "storage": "Armazenamento",
2481
+ "recording_backup_dir": "Backup de gravação",
2482
+ "recording_backup_hint": "Salvar gravações completas como arquivos WAV após cada sessão.",
2483
+ "voice_sync_dir": "Diretório de sincronização de perfis de voz",
2484
+ "voice_sync_hint": "Sincronize perfis de voz via armazenamento em nuvem (ex.: iCloud, Dropbox). Use o botão Alterar para escolher uma pasta — perfis existentes serão migrados automaticamente.",
2485
+ "sync_default": "Dados do app (padrão)",
2486
+ "disabled": "Desativado",
2487
+ "migrating_profiles": "Migrando...",
2488
+ "migration_failed": "Falha na migração",
2489
+ "profiles": "Perfis de voz",
2490
+ "no_profiles": "Nenhum perfil de voz ainda. Eles são criados automaticamente após sessões de transcrição.",
2491
+ "naming": {
2492
+ "male": "Homem {n}",
2493
+ "female": "Mulher {n}",
2494
+ "bystander": "Espectador {n}",
2495
+ "speaker": "Falante {n}"
2496
+ },
2497
+ "providers_hint": "Configurar provedores de voz para transcrição."
2498
+ },
2499
+ "image_host": {
2500
+ "picora": {
2501
+ "moved_hint": "As configurações do Picora agora estão na aba Picora.",
2502
+ "jump_to_tab": "Ir para a aba Picora"
2503
+ },
2504
+ "subtitle_suffix": "As opções específicas do Picora estão na aba Picora."
2505
+ },
2506
+ "picora": {
2507
+ "account": {
2508
+ "title": "Contas Picora",
2509
+ "add": "Adicionar conta Picora",
2510
+ "add_first": "Começar",
2511
+ "empty": "Ainda não há contas Picora. Conecte sua conta para habilitar inserção de mídia em nuvem e sincronização de KB.",
2512
+ "set_default": "Definir como padrão",
2513
+ "test": "Testar conexão",
2514
+ "edit": "Editar",
2515
+ "remove": "Remover",
2516
+ "quota": "Cota",
2517
+ "unknown_email": "(sem email)",
2518
+ "no_endpoint": "(sem endpoint)",
2519
+ "in_use": "Em uso por {n}",
2520
+ "quota_loading": "Carregando cota…",
2521
+ "quota_unavailable": "Cota indisponível — pressione ↻ para tentar novamente",
2522
+ "data_point_na": "Ponto de dados indisponível",
2523
+ "needs_picora_v017": "Requer Picora v0.17.1+",
2524
+ "not_activated": "Você ainda não ativou um plano Picora.",
2525
+ "activate": "Ativar plano",
2526
+ "remove_confirm_title": "Remover conta Picora",
2527
+ "remove_confirm_body": "Prestes a remover: {email}",
2528
+ "cascade_default": "Esta é a conta Picora padrão — um novo padrão será escolhido automaticamente.",
2529
+ "cascade_image_host": "Este é o hospedeiro de imagens padrão — o padrão será limpo.",
2530
+ "cascade_kb_bindings": "{n} bases de conhecimento serão desvinculadas. Os dados em nuvem são preservados no Picora.",
2531
+ "cloud_data_preserved": "Apenas a configuração local será removida. Os dados em nuvem no Picora são preservados.",
2532
+ "confirm_remove": "Remover"
2533
+ },
2534
+ "edit_title": "Editar conta Picora",
2535
+ "kb_sync": {
2536
+ "title": "Sincronização de KB",
2537
+ "open_manager": "Abrir configurações de sincronização de KB",
2538
+ "empty": "Ainda não há bases de conhecimento.",
2539
+ "missing_target": "(alvo ausente)",
2540
+ "never": "Nunca sincronizado",
2541
+ "error": "erro de sincronização",
2542
+ "unbound_label": "Não vinculado ao Picora:",
2543
+ "bind_action": "Vincular ao padrão"
2544
+ },
2545
+ "resources": {
2546
+ "title": "Navegador de recursos em nuvem",
2547
+ "tabs": {
2548
+ "image": "Imagens",
2549
+ "audio": "Áudio",
2550
+ "video": "Vídeos"
2551
+ }
2552
+ },
2553
+ "advanced": {
2554
+ "title": "Avançado",
2555
+ "img_domain": "Domínio de inserção padrão",
2556
+ "img_domain_hint": "Usado como prefixo de URL pública ao inserir imagens Picora.",
2557
+ "rewrite_base64": "Reescrever automaticamente imagens base64 em documentos para Picora CDN no upload",
2558
+ "sidebar_pin": "Mostrar atalho do Picora na barra lateral principal",
2559
+ "debug": "Ativar log de depuração"
2560
+ },
2561
+ "banner": "Nova aba Picora chegou. Todas as configurações do Picora foram movidas para cá; a aba de hospedagem de imagens ainda funciona.",
2562
+ "banner_dismiss": "Entendi",
2563
+ "welcome": {
2564
+ "title": "Bem-vindo ao Picora — um lar para sua mídia",
2565
+ "body": "Hospede imagens, áudio, vídeo e documentos Markdown em sua própria conta Picora. Sincronize bases de conhecimento entre dispositivos e insira ativos da nuvem do editor com um clique.",
2566
+ "one_click": "Importar com um clique (recomendado)",
2567
+ "manual": "Adicionar manualmente",
2568
+ "or": "ou",
2569
+ "register": "Não tem conta? Registre-se no Picora"
2570
+ },
2571
+ "quota": {
2572
+ "images": "Imagens",
2573
+ "docs": "Documentos",
2574
+ "audio": "Áudio",
2575
+ "videos": "Vídeos",
2576
+ "kbs": "KBs"
2577
+ },
2578
+ "plan": {
2579
+ "none": "Inativo",
2580
+ "trial": "Teste",
2581
+ "pro": "Pro",
2582
+ "pro_plus": "Pro+"
2583
+ }
2584
+ },
2585
+ "export": {
2586
+ "paper_size": "Tamanho do papel",
2587
+ "paper_a4": "A4",
2588
+ "paper_letter": "Letter",
2589
+ "paper_legal": "Legal",
2590
+ "paper_a3": "A3",
2591
+ "paper_a5": "A5",
2592
+ "orientation": "Orientação",
2593
+ "orientation_portrait": "Retrato",
2594
+ "orientation_landscape": "Paisagem",
2595
+ "margins": "Margens (mm)",
2596
+ "margins_top": "Superior",
2597
+ "margins_right": "Direita",
2598
+ "margins_bottom": "Inferior",
2599
+ "margins_left": "Esquerda",
2600
+ "header_footer": "Cabeçalho e rodapé",
2601
+ "header_enabled": "Ativar cabeçalho",
2602
+ "footer_enabled": "Ativar rodapé",
2603
+ "template_hint": "Marcadores: {title} {page} {total} {date}",
2604
+ "typography": "Tipografia",
2605
+ "font_family": "Fonte",
2606
+ "font_family_placeholder": "Padrão do sistema",
2607
+ "font_size": "Tamanho da fonte",
2608
+ "content": "Conteúdo",
2609
+ "enable_highlight": "Realce de sintaxe",
2610
+ "enable_math": "Matemática (KaTeX)",
2611
+ "enable_mermaid": "Diagramas Mermaid",
2612
+ "advanced": "Avançado",
2613
+ "auto_fallback": "Recuar automaticamente para o modo de compatibilidade em caso de falha",
2614
+ "auto_fallback_hint": "Quando o caminho de impressão nativo falhar, repetir com o caminho baseado em canvas. Desative para mostrar os erros e deixar o usuário tentar novamente manualmente."
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 envia"
2843
+ },
2844
+ "enter_send": {
2845
+ "label": "Enter sends"
2846
+ },
2847
+ "default_badge": "Padrão"
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": "Exportar PDF",
2868
+ "export_image": "Exportar imagem",
2869
+ "export_doc": "Exportar 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": "Pressione qualquer combinação de teclas… (Esc para cancelar)",
2919
+ "needs_modifier": "Requer ao menos um modificador (Cmd, Ctrl, Alt ou Shift)",
2920
+ "conflict": "Já usado por outro atalho",
2921
+ "save": "Salvar",
2922
+ "cancel": "Cancelar",
2923
+ "edit_hint": "Clique para gravar um novo atalho",
2924
+ "reset_to_default": "Restaurar padrão",
2925
+ "customized": "Personalizado",
2926
+ "customized_short": "Personal.",
2927
+ "reset_conflict": "O padrão entra em conflito com outro atalho personalizado — altere-o primeiro.",
2928
+ "sync_failed": "Não foi possível atualizar o menu do sistema",
2929
+ "sync_failed_short": "Falha na sincronia",
2930
+ "unbound": "Não definido",
2931
+ "reset_all": "Restaurar tudo",
2932
+ "reset_all_hint": "Restaurar todos os atalhos para os padrões",
2933
+ "reset_all_confirm": "Restaurar os {count} atalho(s) personalizado(s) para os padrões?",
2934
+ "reset_short": "Padrão"
2935
+ },
2936
+ "edit_hint": "Dica: as linhas com contorno tracejado e ícone ✎ podem ser regravadas clicando nas teclas. Outros atalhos (🔒) vêm do menu do sistema e ainda não são personalizáveis.",
2937
+ "mcp": {
2938
+ "intro": "Associe atalhos de teclado a servidores MCP instalados e às ferramentas que eles expõem.",
2939
+ "empty": "Instale primeiro um servidor MCP em «Configurações → MCP» para criar atalhos.",
2940
+ "add_tool": "Adicionar atalho de ferramenta MCP",
2941
+ "remove_tool": "Remover este atalho de ferramenta MCP",
2942
+ "remove_tool_short": "Remover",
2943
+ "remove_stale": "Remover associação inválida",
2944
+ "remove_stale_short": "Remover",
2945
+ "server_kind_short": "Servidor",
2946
+ "server_kind_hint": "Alterna a conexão do servidor MCP",
2947
+ "tool_kind_short": "Ferramenta",
2948
+ "tool_kind_hint": "Abre o painel de IA e pede ao assistente para usar esta ferramenta",
2949
+ "stale_short": "Indisponível",
2950
+ "stale_hint": "O servidor ou ferramenta MCP desta associação não está mais instalado",
2951
+ "server_gone": "O servidor MCP não está mais instalado",
2952
+ "unavailable": "Ferramenta MCP indisponível",
2953
+ "toggled": {
2954
+ "on": "{name} ativado",
2955
+ "off": "{name} desativado"
2956
+ },
2957
+ "dialog": {
2958
+ "title": "Adicionar atalho de ferramenta MCP",
2959
+ "server_label": "Servidor MCP",
2960
+ "tool_label": "Ferramenta",
2961
+ "tool_placeholder": "Selecione uma ferramenta…",
2962
+ "no_tools_for_server": "Este servidor ainda não tem ferramentas — conecte-o nas configurações MCP primeiro.",
2963
+ "duplicate_error": "Já existe um atalho para esta ferramenta.",
2964
+ "add": "Adicionar",
2965
+ "cancel": "Cancelar"
2966
+ }
2967
+ }
2968
+ },
2969
+ "sidebar": {
2970
+ "title": "Sidebar",
2971
+ "open_folder": "Abrir pasta",
2972
+ "no_folder": "Nenhuma pasta aberta",
2973
+ "create_kb": "Criar base de conhecimento",
2974
+ "empty_dir": "Nenhum arquivo neste diretório",
2975
+ "kb_settings": "Configurações da base de conhecimento",
2976
+ "tree_view": "Visualização em árvore",
2977
+ "list_view": "Visualização em lista",
2978
+ "search": "Buscar arquivos...",
2979
+ "context_menu": {
2980
+ "new_file": "Novo arquivo",
2981
+ "new_folder": "Nova pasta",
2982
+ "search_files": "Buscar",
2983
+ "refresh": "Atualizar",
2984
+ "rename": "Renomear",
2985
+ "duplicate": "Criar cópia",
2986
+ "delete": "Excluir",
2987
+ "copy_path": "Copiar caminho",
2988
+ "reveal_in_finder": "Revelar no Finder",
2989
+ "reveal_in_explorer": "Mostrar no Explorador",
2990
+ "history_versions": "Versões históricas"
2991
+ },
2992
+ "history": {
2993
+ "title": "Histórico de versões",
2994
+ "empty": "Nenhuma versão salva",
2995
+ "restore": "Restaurar",
2996
+ "restore_confirm": "Restaurar esta versão? O conteúdo atual do MORAYA.md será substituído."
2997
+ },
2998
+ "new_file_prompt": "Digite o nome do arquivo",
2999
+ "new_folder_prompt": "Digite o nome da pasta",
3000
+ "rename_prompt": "Digite o novo nome",
3001
+ "reserved_dir_title": "Nome reservado",
3002
+ "reserved_dir_name": "\"images\" é um nome de diretório reservado. Por favor, escolha outro nome.",
3003
+ "delete_confirm": "Tem certeza de que deseja excluir \"{name}\"? Esta ação não pode ser desfeita.",
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": "Limpar imagens de disco antigas",
3036
+ "body": "Foram encontradas imagens de disco antigas do Moraya ainda montadas. Mantê-las montadas faz com que várias versões apareçam no menu \"Abrir com\". Ejetar agora?",
3037
+ "eject_all": "Ejetar tudo",
3038
+ "skip": "Agora não",
3039
+ "partial_failure": "Não foi possível ejetar algumas imagens de disco:"
3040
+ },
3041
+ "statusbar": {
3042
+ "words": "Palavras",
3043
+ "characters": "Caracteres",
3044
+ "format": "Markdown",
3045
+ "source_mode": "Código-fonte",
3046
+ "visual_mode": "Visual",
3047
+ "split_mode": "Dividido",
3048
+ "publish_workflow": "Fluxo de trabalho IA",
3049
+ "ai_tooltip": "IA"
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": "Inserir linha acima",
3102
+ "insert_row_below": "Inserir linha abaixo",
3103
+ "delete_row": "Excluir linha",
3104
+ "insert_col_left": "Inserir coluna à esquerda",
3105
+ "insert_col_right": "Inserir coluna à direita",
3106
+ "delete_col": "Excluir coluna",
3107
+ "align_left": "Alinhar à esquerda",
3108
+ "align_center": "Centralizar",
3109
+ "align_right": "Alinhar à direita",
3110
+ "copy_table": "Copiar tabela",
3111
+ "format_table_source": "Formatar fonte da tabela",
3112
+ "delete_table": "Excluir tabela",
3113
+ "copied": "Tabela copiada",
3114
+ "formatted_copied": "Tabela formatada copiada"
3115
+ },
3116
+ "tabs": {
3117
+ "external_change_title": "Arquivo modificado externamente",
3118
+ "external_change_msg": "\"{fileName}\" foi modificado fora do Moraya.",
3119
+ "keep_local": "Manter alterações locais",
3120
+ "load_from_disk": "Carregar do disco",
3121
+ "unsaved_title": "Alterações não salvas",
3122
+ "unsaved_msg": "\"{fileName}\" tem alterações não salvas.",
3123
+ "save": "Salvar",
3124
+ "discard": "Descartar",
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": "Assistente de IA",
3176
+ "search": "Buscar templates...",
3177
+ "back": "Voltar",
3178
+ "start": "Iniciar"
3179
+ },
3180
+ "my_templates": {
3181
+ "name": "Meus Modelos",
3182
+ "desc": "Modelos personalizados importados ou criados por você"
3183
+ },
3184
+ "manage": {
3185
+ "title": "Gerenciar Modelos",
3186
+ "import": "Importar Modelo",
3187
+ "export": "Exportar Modelos",
3188
+ "manage": "Gerenciar Modelos",
3189
+ "delete": "Excluir",
3190
+ "delete_confirm": "Confirmar?",
3191
+ "import_success": "{count} modelo(s) importado(s)",
3192
+ "export_success": "Modelos exportados com sucesso",
3193
+ "no_custom_templates": "Nenhum modelo personalizado ainda",
3194
+ "source_global": "Global",
3195
+ "source_kb": "Base de Conhecimento",
3196
+ "invalid_format": "Formato de modelo inválido",
3197
+ "select_templates": "Selecione os modelos para exportar"
3198
+ },
3199
+ "error": {
3200
+ "no_document": "Por favor, escreva algum conteúdo primeiro",
3201
+ "no_selection": "Por favor, selecione algum texto primeiro",
3202
+ "no_content": "Por favor, escreva algum conteúdo ou selecione texto primeiro"
3203
+ },
3204
+ "writing": {
3205
+ "name": "Escrita",
3206
+ "desc": "Escrita, edição e resumo com IA",
3207
+ "free": {
3208
+ "name": "Escrita livre",
3209
+ "desc": "Digite um tema e a IA gera o conteúdo",
3210
+ "hint": "Digite um tema ou instruções de escrita..."
3211
+ },
3212
+ "continue": {
3213
+ "name": "Continuar escrevendo",
3214
+ "desc": "Continuar do final do documento"
3215
+ },
3216
+ "outline": {
3217
+ "name": "Gerar esboço",
3218
+ "desc": "Criar um esboço de artigo",
3219
+ "hint": "Digite o tema do artigo..."
3220
+ },
3221
+ "summarize": {
3222
+ "name": "Resumir",
3223
+ "desc": "Resumir texto selecionado ou documento completo"
3224
+ },
3225
+ "improve": {
3226
+ "name": "Melhorar",
3227
+ "desc": "Melhorar a qualidade da escrita"
3228
+ },
3229
+ "simplify": {
3230
+ "name": "Simplificar",
3231
+ "desc": "Simplificar texto complexo"
3232
+ },
3233
+ "expand": {
3234
+ "name": "Expandir",
3235
+ "desc": "Adicionar mais detalhes e explicações"
3236
+ },
3237
+ "fix_grammar": {
3238
+ "name": "Corrigir gramática",
3239
+ "desc": "Corrigir erros gramaticais e ortográficos"
3240
+ }
3241
+ },
3242
+ "translation": {
3243
+ "name": "Tradução",
3244
+ "desc": "Tradução e localização multi-idioma",
3245
+ "auto": {
3246
+ "name": "Tradução inteligente",
3247
+ "desc": "Detectar idioma automaticamente e traduzir"
3248
+ },
3249
+ "to_target": {
3250
+ "name": "Traduzir para...",
3251
+ "desc": "Escolher idioma de destino e traduzir"
3252
+ },
3253
+ "explain": {
3254
+ "name": "Traduzir e explicar",
3255
+ "desc": "Traduzir com explicação palavra por palavra"
3256
+ },
3257
+ "polish": {
3258
+ "name": "Localizar",
3259
+ "desc": "Tornar traduções mais naturais"
3260
+ },
3261
+ "compare": {
3262
+ "name": "Múltiplas versões",
3263
+ "desc": "Fornecer múltiplos estilos de tradução"
3264
+ },
3265
+ "target_lang": "Idioma de destino",
3266
+ "lang": {
3267
+ "en": "Inglês",
3268
+ "zh_cn": "Chinês simplificado",
3269
+ "zh_hant": "Chinês tradicional",
3270
+ "ja": "Japonês",
3271
+ "ko": "Coreano",
3272
+ "ar": "Árabe",
3273
+ "fr": "Francês",
3274
+ "de": "Alemão",
3275
+ "es": "Espanhol",
3276
+ "hi": "Hindi",
3277
+ "pt": "Português",
3278
+ "ru": "Russo"
3279
+ }
3280
+ },
3281
+ "student": {
3282
+ "name": "Ajudante de estudos",
3283
+ "desc": "Aprendizado, anotações, compreensão de conceitos",
3284
+ "explain": {
3285
+ "name": "Explicar conceito",
3286
+ "desc": "Explicar um conceito em termos simples",
3287
+ "hint": "Digite um conceito para explicar..."
3288
+ },
3289
+ "notes": {
3290
+ "name": "Notas de estudo",
3291
+ "desc": "Organizar conteúdo em notas estruturadas"
3292
+ },
3293
+ "flashcard": {
3294
+ "name": "Flashcards",
3295
+ "desc": "Extrair flashcards de perguntas e respostas do conteúdo"
3296
+ },
3297
+ "mindmap": {
3298
+ "name": "Mapa mental",
3299
+ "desc": "Gerar um mapa mental em Markdown"
3300
+ },
3301
+ "essay_outline": {
3302
+ "name": "Esboço de redação",
3303
+ "desc": "Gerar um esboço de redação",
3304
+ "hint": "Digite o tema da redação..."
3305
+ },
3306
+ "reading": {
3307
+ "name": "Análise de leitura",
3308
+ "desc": "Análise aprofundada do conteúdo de texto"
3309
+ },
3310
+ "formula": {
3311
+ "name": "Derivação de fórmulas",
3312
+ "desc": "Mostrar etapas de derivação de fórmulas matemáticas",
3313
+ "hint": "Digite o nome ou conteúdo da fórmula..."
3314
+ },
3315
+ "compare": {
3316
+ "name": "Comparar conceitos",
3317
+ "desc": "Comparar dois conceitos lado a lado",
3318
+ "hint": "Digite dois conceitos (ex.: TCP vs UDP)..."
3319
+ }
3320
+ },
3321
+ "kids": {
3322
+ "name": "Aprendizado infantil",
3323
+ "desc": "Histórias, aprendizado divertido, jogos interativos",
3324
+ "story": {
3325
+ "name": "História infantil",
3326
+ "desc": "Gerar uma história a partir de palavras-chave",
3327
+ "hint": "Digite palavras-chave da história (ex.: coelho floresta aventura)..."
3328
+ },
3329
+ "poem": {
3330
+ "name": "Rima infantil",
3331
+ "desc": "Criar uma rima sobre um tema",
3332
+ "hint": "Digite um tema..."
3333
+ },
3334
+ "why": {
3335
+ "name": "Por quê? Por quê? Por quê?",
3336
+ "desc": "A IA responde perguntas intermináveis de 'por quê'"
3337
+ },
3338
+ "alphabet": {
3339
+ "name": "Diversão com o alfabeto",
3340
+ "desc": "Aprendizado interativo de letras"
3341
+ },
3342
+ "math_game": {
3343
+ "name": "Jogo de matemática",
3344
+ "desc": "Aritmética interativa e divertida"
3345
+ },
3346
+ "riddle": {
3347
+ "name": "Adivinhas",
3348
+ "desc": "A IA propõe adivinhas para as crianças resolverem"
3349
+ },
3350
+ "draw_text": {
3351
+ "name": "Falando sobre imagens",
3352
+ "desc": "Descreva uma cena e a IA escreve uma história",
3353
+ "hint": "Descreva uma cena..."
3354
+ },
3355
+ "knowledge": {
3356
+ "name": "Curiosidades",
3357
+ "desc": "Enciclopédia de natureza, ciência e animais"
3358
+ }
3359
+ },
3360
+ "marketing": {
3361
+ "name": "Marketing",
3362
+ "desc": "Redes sociais, anúncios e copywriting SEO",
3363
+ "xiaohongshu": {
3364
+ "name": "Post Xiaohongshu",
3365
+ "desc": "Gerar post no estilo avaliação de lifestyle",
3366
+ "hint": "Digite o produto ou tema..."
3367
+ },
3368
+ "twitter": {
3369
+ "name": "Post Twitter/X",
3370
+ "desc": "Gerar conteúdo no estilo tweet",
3371
+ "hint": "Digite o tema..."
3372
+ },
3373
+ "slogan": {
3374
+ "name": "Slogan publicitário",
3375
+ "desc": "Gerar slogans marcantes para marcas",
3376
+ "hint": "Digite a marca ou produto..."
3377
+ },
3378
+ "email": {
3379
+ "name": "E-mail marketing",
3380
+ "desc": "Configurar público e tom para o e-mail",
3381
+ "hint": "Descreva o conteúdo do e-mail..."
3382
+ },
3383
+ "seo_article": {
3384
+ "name": "Artigo SEO",
3385
+ "desc": "Gerar conteúdo otimizado para SEO",
3386
+ "hint": "Digite as palavras-chave alvo..."
3387
+ },
3388
+ "product_desc": {
3389
+ "name": "Descrição de produto",
3390
+ "desc": "Gerar texto de produto atraente",
3391
+ "hint": "Digite informações do produto..."
3392
+ },
3393
+ "tone": "Tom",
3394
+ "tone.formal": "Formal",
3395
+ "tone.friendly": "Amigável",
3396
+ "tone.urgent": "Urgente",
3397
+ "tone.humorous": "Humorístico"
3398
+ },
3399
+ "professional": {
3400
+ "name": "Profissional",
3401
+ "desc": "E-mails, relatórios, atas de reunião",
3402
+ "email": {
3403
+ "name": "E-mail comercial",
3404
+ "desc": "Configurar cenário e tom para o e-mail",
3405
+ "hint": "Descreva o conteúdo do e-mail..."
3406
+ },
3407
+ "meeting": {
3408
+ "name": "Ata de reunião",
3409
+ "desc": "Organizar anotações em ata formal"
3410
+ },
3411
+ "report": {
3412
+ "name": "Relatório de trabalho",
3413
+ "desc": "Gerar relatório semanal/mensal/trimestral",
3414
+ "hint": "Digite os pontos-chave do relatório..."
3415
+ },
3416
+ "review": {
3417
+ "name": "Revisão de código",
3418
+ "desc": "Revisar código e sugerir melhorias"
3419
+ },
3420
+ "resume": {
3421
+ "name": "Polir currículo",
3422
+ "desc": "Otimizar currículo com método STAR"
3423
+ },
3424
+ "prd": {
3425
+ "name": "Documento PRD",
3426
+ "desc": "Gerar documento de requisitos de produto",
3427
+ "hint": "Digite a descrição do recurso..."
3428
+ },
3429
+ "tone": "Tom",
3430
+ "tone.concise": "Conciso",
3431
+ "report_type": "Tipo de relatório",
3432
+ "report_type.weekly": "Semanal",
3433
+ "report_type.monthly": "Mensal",
3434
+ "report_type.quarterly": "Trimestral"
3435
+ },
3436
+ "personal": {
3437
+ "name": "Crescimento pessoal",
3438
+ "desc": "Diário, metas, tomada de decisão",
3439
+ "journal": {
3440
+ "name": "Assistente de diário",
3441
+ "desc": "Diário guiado e reflexão",
3442
+ "hint": "O que aconteceu hoje?..."
3443
+ },
3444
+ "goal": {
3445
+ "name": "Desmembramento de metas",
3446
+ "desc": "Dividir metas em etapas acionáveis",
3447
+ "hint": "Digite sua meta..."
3448
+ },
3449
+ "habit": {
3450
+ "name": "Construtor de hábitos",
3451
+ "desc": "Criar um plano de construção de hábitos",
3452
+ "hint": "Digite o hábito que deseja construir..."
3453
+ },
3454
+ "decision": {
3455
+ "name": "Análise de decisão",
3456
+ "desc": "Análise de prós e contras para decisões",
3457
+ "hint": "Descreva suas opções..."
3458
+ },
3459
+ "book_notes": {
3460
+ "name": "Notas de leitura",
3461
+ "desc": "Organizar conteúdo em notas de leitura"
3462
+ }
3463
+ },
3464
+ "games_cn": {
3465
+ "name": "Jogos chineses",
3466
+ "desc": "Jogos de poesia, cadeia de provérbios, adivinhas",
3467
+ "feihualing": {
3468
+ "name": "飞花令",
3469
+ "desc": "Revezar recitando poemas com um caractere dado"
3470
+ },
3471
+ "chengyu_chain": {
3472
+ "name": "成语接龙",
3473
+ "desc": "Encadear provérbios pelo último/primeiro caractere"
3474
+ },
3475
+ "riddle": {
3476
+ "name": "猜谜语",
3477
+ "desc": "A IA dá pistas, você adivinha a resposta"
3478
+ },
3479
+ "lantern_riddle": {
3480
+ "name": "猜灯谜",
3481
+ "desc": "Charadas baseadas em caracteres chineses"
3482
+ },
3483
+ "poetry_fill": {
3484
+ "name": "诗词填空",
3485
+ "desc": "Preencher palavras faltantes de poemas"
3486
+ },
3487
+ "story_chain": {
3488
+ "name": "故事接龙",
3489
+ "desc": "Revezar continuando uma história"
3490
+ },
3491
+ "character_game": {
3492
+ "name": "猜字游戏",
3493
+ "desc": "Adivinhar o caractere chinês a partir de pistas"
3494
+ },
3495
+ "brain_teaser": {
3496
+ "name": "脑筋急转弯",
3497
+ "desc": "Charadas divertidas e pegadinhas"
3498
+ },
3499
+ "couplet": {
3500
+ "name": "对联",
3501
+ "desc": "A IA dá o primeiro verso, você completa"
3502
+ },
3503
+ "word_explain": {
3504
+ "name": "你说我猜",
3505
+ "desc": "A IA descreve, você adivinha a palavra"
3506
+ },
3507
+ "ancient_text": {
3508
+ "name": "文言文翻译",
3509
+ "desc": "Traduzir chinês clássico para chinês moderno"
3510
+ },
3511
+ "homophone": {
3512
+ "name": "谐音梗",
3513
+ "desc": "Desafio de trocadilhos homófonos"
3514
+ }
3515
+ },
3516
+ "games_en": {
3517
+ "name": "Jogos em inglês",
3518
+ "desc": "Word Chain, Hangman, Trivia e mais",
3519
+ "word_chain": {
3520
+ "name": "Word Chain",
3521
+ "desc": "A última letra inicia a próxima palavra"
3522
+ },
3523
+ "twenty_questions": {
3524
+ "name": "20 Questions",
3525
+ "desc": "Adivinhe o objeto em 20 perguntas de sim/não"
3526
+ },
3527
+ "hangman": {
3528
+ "name": "Hangman",
3529
+ "desc": "Adivinhe a palavra letra por letra"
3530
+ },
3531
+ "story_builder": {
3532
+ "name": "Story Builder",
3533
+ "desc": "Reveze construindo uma história"
3534
+ },
3535
+ "word_association": {
3536
+ "name": "Word Association",
3537
+ "desc": "Cadeia de associação livre de palavras"
3538
+ },
3539
+ "riddles": {
3540
+ "name": "Riddles",
3541
+ "desc": "Resolva adivinhas em inglês"
3542
+ },
3543
+ "trivia": {
3544
+ "name": "Trivia Quiz",
3545
+ "desc": "Perguntas de conhecimento geral"
3546
+ },
3547
+ "rhyme_time": {
3548
+ "name": "Rhyme Time",
3549
+ "desc": "Crie histórias com palavras que rimam"
3550
+ },
3551
+ "acronym": {
3552
+ "name": "Acronym Game",
3553
+ "desc": "Invente significados para acrônimos aleatórios"
3554
+ },
3555
+ "taboo": {
3556
+ "name": "Taboo",
3557
+ "desc": "Descreva sem usar palavras proibidas"
3558
+ },
3559
+ "sentence_builder": {
3560
+ "name": "Sentence Builder",
3561
+ "desc": "Construa a frase mais longa com palavras dadas"
3562
+ },
3563
+ "emoji_story": {
3564
+ "name": "Emoji Story",
3565
+ "desc": "Conte histórias usando emojis"
3566
+ }
3567
+ },
3568
+ "quiz": {
3569
+ "name": "Quiz e prática",
3570
+ "desc": "Perguntas geradas por IA com pontuação",
3571
+ "practice": {
3572
+ "name": "Quiz universal",
3573
+ "desc": "Escolha disciplina e dificuldade, a IA faz o quiz"
3574
+ },
3575
+ "direction": "Disciplina",
3576
+ "dir": {
3577
+ "programming": "Programação",
3578
+ "math": "Matemática",
3579
+ "english": "Inglês",
3580
+ "science": "Ciências",
3581
+ "history": "História",
3582
+ "interview": "Preparação para entrevista",
3583
+ "custom": "Disciplina personalizada"
3584
+ },
3585
+ "difficulty": "Dificuldade",
3586
+ "diff": {
3587
+ "easy": "Fácil",
3588
+ "medium": "Médio",
3589
+ "hard": "Difícil"
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": "Não salvo",
3620
+ "minimize": "Minimizar",
3621
+ "maximize": "Maximizar",
3622
+ "close": "Fechar",
3623
+ "new_file": "Novo arquivo",
3624
+ "open_file": "Abrir arquivo..."
3625
+ },
3626
+ "transcription": {
3627
+ "title": "Transcrição",
3628
+ "recording": "Gravando",
3629
+ "connecting": "Conectando...",
3630
+ "paused": "Pausado",
3631
+ "stopping": "Parando...",
3632
+ "idle": "Pronto",
3633
+ "start": "Iniciar",
3634
+ "stop": "Parar",
3635
+ "pause": "Pausar",
3636
+ "resume": "Retomar",
3637
+ "back": "Voltar ao chat",
3638
+ "empty_idle": "Clique em Iniciar para começar a gravar e transcrever.",
3639
+ "empty_waiting": "Aguardando fala...",
3640
+ "summarize_with_ai": "Resumir com IA",
3641
+ "save_as_doc": "Salvar como documento",
3642
+ "summarize_prompt": "Por favor, gere um resumo de reunião a partir da transcrição a seguir. Identifique os principais pontos de discussão, decisões tomadas e itens de ação. Formate como Markdown.",
3643
+ "no_speech_config": "Nenhum provedor de fala configurado. Adicione um em Configurações → Voz.",
3644
+ "no_speech_config_hint": "Vá para Configurações → Voz para adicionar um provedor de fala (ex.: Deepgram).",
3645
+ "go_to_voice_settings": "Abrir configurações de voz"
3646
+ },
3647
+ "update": {
3648
+ "title": "Informações da versão",
3649
+ "current_version": "Versão atual",
3650
+ "latest_version": "Versão mais recente",
3651
+ "checking": "Verificando atualizações...",
3652
+ "up_to_date": "Você está usando a versão mais recente!",
3653
+ "check_failed": "Falha ao verificar atualizações",
3654
+ "release_notes": "Novidades",
3655
+ "no_asset": "Nenhum instalador disponível para sua plataforma. Por favor, baixe manualmente.",
3656
+ "upgrade": "Atualizar",
3657
+ "retry": "Tentar novamente",
3658
+ "view_release": "Ver lançamento",
3659
+ "downloading": "Baixando...",
3660
+ "download_failed": "Falha no download",
3661
+ "install_launched": "Instalador iniciado. O Moraya será fechado em breve.",
3662
+ "new_version_available": "Nova versão disponível! Clique para atualizar."
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": "Bem-vindo ao Moraya",
3696
+ "subtitle": "Um editor Markdown minimalista, pronto para IA.",
3697
+ "features_title": "Recursos",
3698
+ "feature_wysiwyg": "Edição Markdown **WYSIWYG**",
3699
+ "feature_math": "Suporte a fórmulas matemáticas: $E = mc^2$",
3700
+ "feature_themes": "Temas escuro e claro",
3701
+ "feature_ai": "Assistente de escrita com IA",
3702
+ "feature_mcp": "Protocolo MCP para publicação e sincronização",
3703
+ "feature_lightweight": "Leve (~5MB instalador)",
3704
+ "math_title": "Exemplo de fórmula",
3705
+ "code_title": "Exemplo de código",
3706
+ "table_title": "Exemplo de tabela",
3707
+ "table_feature": "Recurso",
3708
+ "table_status": "Status",
3709
+ "table_done": "Concluído",
3710
+ "start_writing": "Comece a escrever suas ideias aqui...",
3711
+ "tip": "**Dica:** Pressione `Cmd+I` para abrir o painel do assistente de IA.",
3712
+ "shortcuts_title": "Atalhos de teclado",
3713
+ "shortcut_save": "`Cmd+S` — Salvar documento",
3714
+ "shortcut_open": "`Cmd+O` — Abrir arquivo",
3715
+ "shortcut_new": "`Cmd+N` — Novo documento",
3716
+ "shortcut_toggle_mode": "`Cmd+/` — Alternar modo Visual/Código-fonte",
3717
+ "shortcut_split_mode": "`Cmd+Shift+/` — Alternar modo dividido",
3718
+ "shortcut_sidebar": "`Cmd+\\` — Alternar barra lateral",
3719
+ "shortcut_settings": "`Cmd+,` — Abrir configurações",
3720
+ "shortcut_ai": "`Cmd+Shift+I` — Alternar painel de IA",
3721
+ "shortcut_export": "`Cmd+Shift+E` — Exportar como HTML",
3722
+ "blockquote_title": "Exemplo de citação",
3723
+ "blockquote_content": "A arte de escrever é a arte de descobrir aquilo em que você acredita. — Gustave Flaubert",
3724
+ "advanced_math_title": "Matemática avançada",
3725
+ "list_title": "Exemplo de lista aninhada",
3726
+ "list_item1": "Primeiros passos",
3727
+ "list_item1a": "Instalar o aplicativo",
3728
+ "list_item1b": "Configurar suas preferências",
3729
+ "list_item1c": "Começar a escrever",
3730
+ "list_item2": "Recursos avançados",
3731
+ "list_item2a": "Assistência de escrita com IA",
3732
+ "list_item2b": "Integração com protocolo MCP",
3733
+ "list_item2c": "Múltiplos formatos de exportação",
3734
+ "list_item3": "Personalização",
3735
+ "list_item3a": "Temas e aparência",
3736
+ "list_item3b": "Configurações do editor",
3737
+ "list_item3c": "Atalhos de teclado",
3738
+ "paragraph_title": "Sobre o Moraya",
3739
+ "paragraph1": "Moraya é um editor Markdown moderno e leve, construído com Rust e Tauri. Ele combina a simplicidade de um editor de texto com o poder de uma interface WYSIWYG, oferecendo o melhor dos dois mundos.",
3740
+ "paragraph2": "O nome \"Moraya\" vem da combinação de \"mora\" (latim para \"um momento\") com \"ya\" (chinês para \"elegância\"), simbolizando momentos elegantes de escrita.",
3741
+ "paragraph3": "Seja para escrever documentação técnica, posts de blog, artigos acadêmicos ou notas pessoais, o Moraya oferece um ambiente livre de distrações que permite que você se concentre no que mais importa — seu conteúdo.",
3742
+ "hr_title": "Linhas horizontais",
3743
+ "hr_description": "Você pode usar linhas horizontais para separar diferentes seções do seu documento:"
3744
+ },
3745
+ "workflow": {
3746
+ "title": "Fluxo de trabalho IA",
3747
+ "seo_step": "Otimização SEO",
3748
+ "image_gen_step": "Imagens por IA",
3749
+ "publish_step": "Publicar",
3750
+ "publish_desc": "Enviar para plataformas de destino",
3751
+ "optional_above": "As etapas acima são opcionais",
3752
+ "select_targets": "Selecionar alvos de publicação",
3753
+ "confirm_publish": "Publicar",
3754
+ "publishing": "Publicando...",
3755
+ "publish_success": "Publicado com sucesso!",
3756
+ "publish_failed": "Falha na publicação",
3757
+ "mcp_entry": "MCP IA",
3758
+ "mcp_server_count": "serviços conectados",
3759
+ "mcp_tool_count": "ferramentas",
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
+ }