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