返回 oh-my-ppt
en.ts
根目录 / src / renderer / src / i18n / en.ts
1 import type { DeepStringShape } from './index'
2 import { zh } from './zh'
3
4 export const en = {
5 common: {
6 cancel: 'Cancel',
7 delete: 'Delete',
8 edit: 'Edit',
9 preview: 'Preview',
10 save: 'Save',
11 dontSave: "Don't save",
12 saving: 'Saving...',
13 copy: 'Copy',
14 optional: 'Optional',
15 retryLater: 'Please try again later',
16 loading: 'Loading...'
17 },
18 generationNotifications: {
19 untitled: 'Untitled presentation',
20 view: 'View',
21 completed: '"{title}" generation completed',
22 partial: '"{title}" completed with {count} failed page(s)',
23 failed: '"{title}" generation failed'
24 },
25 templateDialog: {
26 createTitle: 'Save as Template',
27 editTitle: 'Edit Template',
28 createDescription: 'Save this deck for future reuse.',
29 editDescription: 'Update the name, description, and tags.',
30 nameLabel: 'Template name',
31 descriptionLabel: 'Description',
32 descriptionPlaceholder: 'Use case, structure, or visual style',
33 tagsLabel: 'Tags',
34 tagsPlaceholder: 'Separate with commas, e.g. business, review, data',
35 update: 'Update'
36 },
37 templates: {
38 eyebrow: 'Templates',
39 title: 'Templates',
40 description: 'Manage saved deck templates and use them to create new presentation sessions.',
41 count: '{count} templates',
42 refresh: 'Refresh',
43 importPptx: 'Import PPTX as template',
44 pageCount: '{count} pages',
45 thumbnailGenerating: 'Preparing cover',
46 pageCountLabel: 'Pages',
47 noDescription: 'No description',
48 use: 'Use',
49 emptyTitle: 'No templates yet',
50 emptyDescription: 'Save reusable layouts here for faster starts.',
51 emptyHint: 'Save from the editor or session list',
52 loadFailed: 'Failed to load templates',
53 settingsRequiredTitle: 'Setup required',
54 settingsRequiredDescription: 'Please configure storage, model, and API key first.',
55 goToSettings: 'Go to settings',
56 documentSingleOnly: 'Upload one reference document at a time.',
57 documentCountExceeded: 'Too many documents',
58 documentTooLargeTitle: 'Document too large',
59 documentTooLarge: 'Document must be under {maxSize}MB.',
60 documentPathFailedTitle: 'Failed to read document',
61 documentPathFailed: 'Cannot read the document path. Please choose again.',
62 referenceAttached: 'Reference document attached',
63 referenceProcessingWait:
64 'The reference file is still processing. Please wait before generating.',
65 referenceAttachFailed: 'Failed to attach reference document',
66 removeReference: 'Remove reference document',
67 documentParsed: 'Document parsed',
68 documentParsedDescription:
69 'Processed {count} source item(s) and filled the title, pages, and outline',
70 documentParseFailed: 'Failed to parse document',
71 pptxSingleOnlyTitle: 'Too many files',
72 pptxSingleOnly: 'Import one PPTX at a time.',
73 unsupportedPptxTitle: 'Unsupported file',
74 unsupportedPptx: 'Please choose a .pptx file.',
75 pptxTooLargeTitle: 'PPTX too large',
76 pptxTooLarge: 'PPTX must be under {maxSize}MB.',
77 pptxPathFailedTitle: 'Failed to read PPTX',
78 pptxPathFailed: 'Cannot read the PPTX path. Please choose again.',
79 pptxTemplatePreparing: 'Preparing import',
80 importingPptxTemplate: 'Importing PPTX template',
81 pptxTemplateImported: 'PPTX template imported',
82 pptxTemplateImportedDescription: 'Added to the template library with {pageCount} pages',
83 pptxTemplateImportedWithWarnings:
84 'Added to the template library with {pageCount} pages and {warningCount} warning(s)',
85 pptxTemplateImportFailed: 'Failed to import PPTX template',
86 briefRequired: 'Please enter a brief or upload a document outline first.',
87 sessionCreated: 'Session created from template',
88 sessionCreatedDescription: 'Regenerating content with the selected template',
89 directEditCreatedDescription: 'Template pages copied and ready to edit',
90 createFailed: 'Failed to create from template',
91 deleted: 'Template deleted',
92 deleteFailed: 'Failed to delete template',
93 updated: 'Template updated',
94 updateFailed: 'Failed to update template',
95 previewTitle: 'Template preview',
96 previewDescription: '{count} pages. Scan the full structure and visual rhythm.',
97 pageFallback: 'Page {pageNumber}',
98 useDialogTitle: 'Create session from template',
99 useDialogDescription:
100 'Enter a content direction or upload a document outline. Generation uses the source document and keeps the template visuals.',
101 sessionTitleLabel: 'Session title',
102 briefLabel: 'Brief / outline',
103 parsed: 'Parsed',
104 briefPlaceholder:
105 'Describe the topic, audience, structure, and priorities, or upload a document to parse an outline.',
106 parsingDocument: 'Parsing...',
107 processingDocument: 'Processing...',
108 uploadDocument: 'Upload reference document',
109 uploadDocumentTooltip:
110 'Supports txt, md, csv, and docx (≤{maxSize}MB). Uploading only attaches a reference document and does not change the form. Use "AI analyze and fill" to analyze it with the selected model and suggest the title, page count, and outline.',
111 analyzeDocument: 'AI analyze and fill',
112 analyzeDocumentTooltip:
113 'Analyze the uploaded reference document with the selected model and suggest a title, page count, and outline. Nothing is written to the form until you confirm.',
114 analyzingDocument: 'Parsing...',
115 supportedDocuments: 'Supports md/txt/csv/docx, up to {maxSize}MB',
116 creating: 'Creating...',
117 creatingEditable: 'Creating editable session',
118 createEditable: 'Create for editing',
119 createAndGenerate: 'Create and generate',
120 deleteTitle: 'Delete template',
121 deleteDescription: 'Delete "{name}"? Existing sessions will not be affected.',
122 deleting: 'Deleting...'
123 },
124 app: {
125 updateAvailable: 'New version {version} available',
126 updateAvailableDescription: 'Current version: {currentVersion}. Click to download.',
127 updateAvailableTitle: 'New version {version} available',
128 updateAvailableDialogDescription:
129 'Current version: {currentVersion}. You can download the update now.',
130 currentVersion: 'Current version',
131 latestVersion: 'Latest version',
132 download: 'Download',
133 downloadHome: 'Official download',
134 changeLog: 'Changelog',
135 later: 'Later',
136 open: 'Open'
137 },
138 nav: {
139 home: 'Home',
140 sessions: 'Sessions',
141 editHtml: 'Web Editor',
142 templates: 'Templates',
143 styles: 'Styles',
144 fonts: 'Fonts',
145 tokenUsage: 'Token usage',
146 settings: 'Settings',
147 helpDocs: 'Help docs',
148 backToSessions: 'Back to sessions',
149 newPresentation: 'New presentation',
150 tagline: 'AI presentation workbench'
151 },
152 home: {
153 eyebrow: 'Unleash your creativity',
154 title: 'Start a new presentation task',
155 description:
156 'Built-in 70+ styles, custom style support, Chart.js charts, anime.js animation, and a progressive workflow from task brief to session refinement.',
157 uploadDocument: 'Upload document/image',
158 uploadReference: 'Upload reference file',
159 processingReference: 'Processing...',
160 uploadReferenceTooltip:
161 'Supports txt, md, csv, docx (≤{maxSize}MB), and png/jpg/webp images (≤{imageMaxSize}MB). Uploading only attaches source material and does not change the form. For images, click "Parse" on the image tag first so the app can turn them into generation-ready reference content.',
162 referenceAttached: 'Reference file attached',
163 imageReferenceAttachedNeedsParse:
164 'Image uploaded. Parse it into a readable reference document first.',
165 imageReferenceNeedsParse:
166 'The uploaded image cannot be used directly as a reference file. Click "Parse" on the image tag first.',
167 imageReferenceNeedsParseShort: 'Image cannot be used until parsed',
168 imageReferenceTagTooltip:
169 'This image is pending parsing and cannot be passed to generation directly. Click "Parse" to create a readable reference document.',
170 parseImageReference: 'Parse',
171 parsingImageReference: 'Parsing',
172 imageReferenceParsed: 'Image parsed into a readable reference document',
173 referenceProcessingWait:
174 'The reference file is still processing. Please wait before generating.',
175 referenceAttachFailed: 'Failed to attach reference file',
176 removeReference: 'Remove reference file',
177 revealReferenceFile: 'Show reference file',
178 revealReferenceFileTooltip: 'Reveal this reference file in its folder without opening it',
179 revealReferenceFileFailed: 'Failed to show reference file',
180 analyzeReference: 'AI analyze and fill',
181 analyzeReferenceTooltip:
182 'Use the selected model to analyze the reference file and suggest a title, page count, and brief. Nothing is written to the form until you confirm.',
183 analyzingReference: 'Analyzing...',
184 referenceAttachHint:
185 'Upload only attaches source material; AI analysis consumes model tokens and suggests form values.',
186 analysisSuggestionTitle: 'Suggestions',
187 currentValue: 'Current',
188 emptyValue: 'Empty',
189 applyEmptyFields: 'Fill empty fields',
190 applySelectedFields: 'Apply selected',
191 parsingDocument: 'Parsing...',
192 uploadDocumentTooltip:
193 'Supports txt, md, csv, docx (≤{maxSize}MB), and png/jpg/webp images (≤{imageMaxSize}MB). Parsing fills in the topic, page count, and detailed brief; documents remain available as generation references, while images are turned into an editable creation brief and a custom style.',
194 importPptx: 'Import PPTX for AI editing',
195 importingPptx: 'Importing and parsing...',
196 importPptxTooltip:
197 'Import an existing PPTX — it converts to editable pages and extracts a reusable style template.',
198 parsed: 'Parsed',
199 localOnly: 'Documents/images are parsed into AI-readable context for the current task.',
200 topic: 'Topic',
201 topicPlaceholder: 'Example: 2026 AI Agent product roadmap',
202 style: 'Style',
203 stylePlaceholder: 'Select style',
204 fontScheme: 'Font scheme',
205 fontSchemeAuto: 'Auto match',
206 fontSchemeAutoHint: 'AI will choose title and body fonts based on the topic and style.',
207 fontSchemeManualHint: 'Uses the selected fonts as title and body fonts.',
208 fontSchemePartialHint:
209 'Choose both title and body fonts to lock the pair; otherwise AI will keep matching fonts automatically.',
210 fontPairTitle: 'Title',
211 fontPairBody: 'Body',
212 fontPairBoth: 'Title/Body',
213 fontSourceUploaded: 'User',
214 fontSourceBuiltIn: 'Built-in',
215 pageCount: 'Pages',
216 slideSize: 'Canvas size',
217 slideSizeWide: 'Widescreen 16:9',
218 slideSizeVertical: 'Vertical 9:16',
219 slideSizeStandard: 'Standard 4:3',
220 slideSizeSquare: 'Square 1:1',
221 slideSizePortrait: 'Portrait 3:4',
222 slideSizeXiaohongshu: 'Xiaohongshu',
223 enableImageGeneration: 'Enable image generation',
224 imageGenerationHint: 'Pages generate images only when a layout visual slot benefits from one.',
225 imageModel: 'Image model',
226 imageModelPlaceholder: 'Select an image model',
227 imageModelRequired: 'Select an available image model before enabling image generation.',
228 imageModelUnavailable: 'Configure an available image model in Settings first.',
229 brief: 'Detailed brief',
230 animationPreferences: 'Animation preferences',
231 animationPreferenceOptions: {
232 fade: 'Soft fade',
233 'fade-up': 'Fade up',
234 'fade-down': 'Fade down',
235 'fade-left': 'Fade from right',
236 'fade-right': 'Fade from left',
237 'scale-in': 'Soft scale in',
238 'slide-up': 'Slide up',
239 'slide-down': 'Slide down',
240 'slide-left': 'Slide left',
241 'slide-right': 'Slide right',
242 'fly-in': 'Directional fly-in',
243 wipe: 'Wipe reveal',
244 'zoom-in': 'Zoom in',
245 'spin-in': 'Soft spin in',
246 'pulse-soft': 'Soft pulse',
247 pulse: 'Pulse',
248 'pulse-strong': 'Strong pulse',
249 'grow-shrink-soft': 'Soft grow-shrink',
250 'grow-shrink': 'Grow-shrink',
251 'grow-shrink-strong': 'Strong grow-shrink'
252 },
253 animationPreferenceLimitReached: 'Select up to 3 animation preferences',
254 documentOutline: 'Document outline',
255 outlinePageCount: '{count} pages',
256 outlineRoleChapter: 'Chapter',
257 outlineRoleContent: 'Content',
258 outlineItemTitle: 'Title',
259 outlineItemContent: 'Brief summary',
260 outlineSourceRange: 'Source lines {start}-{end}',
261 briefPlaceholder:
262 'You can include:\n- The outline structure and what each section or page should cover\n- Which parts of the source document matter most, including conclusions, data, or examples to keep\n- How each page should present the content, such as chart, comparison, process, or summary; for click animation, say "click to reveal items", "keyboard reveal", "step-by-step narration", "expand item by item", or "presentation pacing control"\n- How to organize the source material, such as background, solution, then summary\n- Anything to emphasize, de-emphasize, or avoid',
263 creating: 'Creating...',
264 createAndStart: 'Create session and start',
265 unnamedTopic: 'Untitled topic',
266 defaultPrompt: 'Create a {pageCount}-page presentation about "{topic}" in the {style} style.',
267 settingsRequired: 'Please complete model and storage configuration in Settings first.',
268 settingsRequiredTitle: 'Settings incomplete',
269 goToSettings: 'Go to settings',
270 completeInfoTitle: 'Complete the form',
271 validationTopic: 'Please enter a topic.',
272 validationStylesLoading: 'Styles are still loading. Please try again shortly.',
273 validationStyle: 'Please select a style.',
274 validationStyleMissing: 'The selected style no longer exists. Please choose again.',
275 validationPageCount: 'Please enter page count ({min}-{max}).',
276 validationPageCountNumber: 'Page count must be a number.',
277 validationPageCountRange: 'Page count must be between {min} and {max}.',
278 validationBrief: 'Please enter a detailed brief.',
279 styleLoadFailed: 'Failed to load styles',
280 sessionCreated: 'Session created',
281 generationStarted: 'Generation started',
282 sessionCreateFailed: 'Failed to create session',
283 pptxStorageRequiredTitle: 'Storage directory required',
284 pptxStorageRequired: 'Please choose a storage directory in Settings before importing a PPTX.',
285 documentSingleOnly: 'Upload one document or image at a time.',
286 documentCountExceeded: 'Too many documents',
287 documentTooLargeTitle: 'File too large',
288 documentTooLarge:
289 'A single document or image must be under {maxSize}MB. Please compress or split it.',
290 imageTooLarge: 'A single image must be under {maxSize}MB. Please compress it and try again.',
291 documentPathFailedTitle: 'Cannot read file path',
292 documentPathFailed: 'Cannot read the file path. Please choose a local document or image again.',
293 documentParsed: 'Parsed',
294 documentParsedDescription:
295 'Processed {count} source item(s) and filled the topic, page count, and brief',
296 imageParsedWithStyle: 'Processed the image reference and created custom style "{style}"',
297 documentParseFailed: 'Failed to parse file',
298 pptxSingleOnlyTitle: 'Too many PPTX files',
299 pptxSingleOnly: 'Import one PPTX file at a time.',
300 unsupportedFileTitle: 'Unsupported file type',
301 unsupportedPptx: 'Please upload a .pptx file.',
302 pptxTooLargeTitle: 'PPTX file too large',
303 pptxTooLarge: 'A single PPTX must be under {maxSize}MB.',
304 pptxPathFailedTitle: 'Cannot read PPTX path',
305 pptxPathFailed: 'Please choose a local PPTX file again.',
306 pptxPreparing: 'Preparing PPTX import...',
307 pptxImportDone: 'PPTX imported',
308 pptxImportedWithWarnings: 'Imported {pageCount} pages with {warningCount} fallback warning(s).',
309 pptxImported: 'Imported {pageCount} pages.',
310 pptxImportFailed: 'Failed to import PPTX'
311 },
312 sessions: {
313 eyebrow: 'Sessions',
314 title: 'Sessions',
315 newSession: 'New session',
316 importSessionFile: 'Import session file',
317 importSessionFileTooltip:
318 'Supports importing for secondary editing:\n1. slide-pack files exported by OhMyPPT\n2. standard session directory ZIPs (zip the whole session folder)\n(Note: files exported from the editing page)',
319 importing: 'Importing...',
320 importDone: 'Session imported',
321 importedFallbackTitle: 'Imported session',
322 importedDescription: 'Imported "{title}" with {pageCount} pages.',
323 importFailed: 'Failed to import session',
324 emptyTitle: 'No sessions yet',
325 emptyDescription: 'Create your first presentation task',
326 searchButton: 'Search sessions',
327 searchPlaceholder: 'Search session titles',
328 clearSearch: 'Clear search',
329 noSearchResultsTitle: 'No matching sessions',
330 noSearchResultsDescription: 'Try another title keyword.',
331 sourcePptx: 'PPTX import',
332 sourceSessionFile: 'Session import',
333 sourceSaveAsNew: 'Saved as new',
334 sourceDocument: 'Document',
335 sourceAi: 'AI created',
336 sourceThinking: 'Think Mode',
337 sourceTemplate: 'Template',
338 statusComplete: 'Complete',
339 statusPartialComplete: 'Partially complete',
340 statusPartialCompleteTip: 'Enter editor to fix error pages',
341 statusContinuable: 'Can continue',
342 statusRegenerate: 'Regenerate needed',
343 statusQueued: 'Queued',
344 statusGenerating: 'Generating',
345 statusGeneratingProgress: 'Generating {progress}%',
346 actionEnter: 'Open session',
347 actionContinue: 'Continue',
348 actionRegenerate: 'Regenerate',
349 actionViewProgress: 'View progress',
350 editTitle: 'Edit session name',
351 titleEmpty: 'Name cannot be empty',
352 titleTooLong: 'Name too long',
353 titleTooLongDescription: 'Session name cannot exceed 120 characters.',
354 titleUpdated: 'Session name updated',
355 renameFailed: 'Rename failed',
356 deleteConfirmTitle: 'Delete session',
357 deleteConfirmDescription: 'Delete "{title}"? This action cannot be undone.',
358 deleted: 'Session deleted',
359 deleteFailed: 'Failed to delete session',
360 renameDescription:
361 'Only the session name used in lists and exports will change. Page content will not be regenerated.',
362 renamePlaceholder: 'Enter a new session name',
363 pagesCount: '{generated}/{total} pages',
364 failedCount: '{count} failed',
365 saveTemplateTooltipDisabled: 'At least 1 page must be generated before saving as template',
366 saveTemplateTooltip: 'Save as template',
367 editTitleTooltip: 'Edit session name'
368 },
369 settings: {
370 eyebrow: 'Preferences',
371 title: 'Settings',
372 interface: 'Interface',
373 language: 'Interface language',
374 languagePlaceholder: 'Select interface language',
375 chinese: 'Simplified Chinese',
376 english: 'English',
377 generalTab: 'General',
378 modelTab: 'Base model configuration',
379 imageModelTab: 'Image models',
380 advancedTab: 'Advanced',
381 usagePageEyebrow: 'Usage Analytics',
382 usagePageTitle: 'Token usage',
383 usagePageDescription:
384 'Review input, output, and total token trends, plus usage distribution across models(For reference only).',
385 usagePeriod7d: 'Last 7 days',
386 usagePeriod30d: 'Last 30 days',
387 usagePeriodAll: 'All time',
388 usageRefresh: 'Refresh',
389 usageLoading: 'Loading token usage...',
390 usageLoadFailed: 'Failed to load token usage.',
391 usageTotalTokens: 'Total tokens',
392 usageInputTokens: 'Input tokens',
393 usageOutputTokens: 'Output tokens',
394 usageCalls: 'Model calls',
395 usageTrend: 'Daily token trend',
396 usageTodayHourly: "Today's hourly usage",
397 usageByModel: 'Usage by model',
398 usageEmpty: 'No model usage has been recorded yet',
399 modelAccess: 'Base model configuration',
400 imageModelAccess: 'Image models',
401 modelHelpTitle: 'Recommended cloud models',
402 addModel: 'Add model',
403 modelHelpDocs: 'Help docs',
404 addImageModel: 'Add image model',
405 imageModelUsageHint:
406 'Image models are not used for visuals during generation yet. After pages are generated, add visuals separately as needed.',
407 editModel: 'Edit model',
408 editImageModel: 'Edit image model',
409 modelName: 'Alias',
410 modelNamePlaceholder: 'Model alias, anything you like',
411 noModels: 'No model configs yet. Add a model first.',
412 noImageModels: 'No image model configs yet. Add a text-to-image model first.',
413 modelSettingsRequiredTitle: 'Model setup incomplete',
414 modelSettingsRequiredDescription: 'Please add and enable an available model in Settings first.',
415 generationModel: 'Run model',
416 currentActiveModel: 'Default model: {name}',
417 currentActiveImageModel: 'Default image model: {name}',
418 activeModel: 'Default model',
419 activeImageModel: 'Default image model',
420 activateModel: 'Set default',
421 activateImageModel: 'Set default',
422 activeModelUpdated: 'Default model updated',
423 activeImageModelUpdated: 'Default image model updated',
424 activateModelFailed: 'Failed to set default model',
425 activateImageModelFailed: 'Failed to set default image model',
426 deleteModelConfirm: 'Delete "{name}"?',
427 deleteModelFailed: 'Failed to delete model',
428 deleteImageModelFailed: 'Failed to delete image model',
429 modelDeleted: 'Model deleted',
430 imageModelDeleted: 'Image model deleted',
431 providerPreset: 'Provider preset',
432 providerPlaceholder: 'Select Provider',
433 providerOpenAIChatCompletions: 'OpenAI / compatible Chat Completions',
434 providerOpenAIResponses: 'OpenAI Responses',
435 modelHint: 'Any compatible model name for this provider is accepted.',
436 imageModelConfigHint: 'Enter the full provider JSON.',
437 imageModelConfigHintJimeng:
438 'Connect Jimeng 3.0 for single-slide presentation visuals. Example: {"reqKey":"jimeng_t2i_v30","accessKeyId":"...","secretKey":"..."}',
439 imageModelConfigHintJimeng4:
440 'Connect Jimeng 4.0 for higher-quality single-slide illustrations and background assets. Example: {"reqKey":"jimeng_t2i_v40","accessKeyId":"...","secretKey":"...","force_single":true}',
441 imageModelConfigHintAgnes:
442 'Connect Agnes AI for presentation illustrations, backgrounds, and visual elements. Example: {"model":"agnes-image-2.0-flash","apiKey":"...","responseFormat":"url"}',
443 imageModelConfigHintSiliconflow:
444 'Connect SiliconFlow image models and choose a model name for the style and speed you need. Example: {"model":"Tongyi-MAI/Z-Image-Turbo","apiKey":"..."}',
445 imageModelConfigHintOpenAICompatible:
446 'Connect a service with OpenAI Chat Completions image capability and generate slide visuals in the same workflow. Example: {"baseUrl":"https://api.openai.com","apiKey":"...","model":"gpt-image-1"}',
447 imageModelConfigHintGemini:
448 'Connect Gemini image generation for illustrations, backgrounds, and visual concepts based on slide content. Uses Google by default, with baseUrl available for a team service endpoint. Example: {"model":"gemini-3.1-flash-image","apiKey":"..."}',
449 imageModelConfigHintSeedream:
450 'Connect Volcengine Ark Seedream image generation for slide illustrations, backgrounds, and visual assets. Put selectable size values in sizes for the current model. Example: {"baseUrl":"https://ark.cn-beijing.volces.com","model":"doubao-seedream-5-0-260128","apiKey":"...","response_format":"url","sizes":["2K"],"sequential_image_generation":"disabled","stream":false}',
451 imageProviderOfficialDocs: 'Official docs',
452 baseUrlHint: 'Enter a service URL compatible with the selected provider protocol.',
453 baseUrlHintGoogle: 'Leave empty for official Google API. Fill only if using a proxy.',
454 maxTokensHint:
455 'Max output tokens, default 4096. Generally no need to change. Adjust based on model limits.',
456 disableTemperature: 'Disable temperature',
457 disableTemperatureHint:
458 'Keeping temperature enabled is recommended. Disable it only when unsupported, as this may affect generation results.',
459 thinkingParameterMode: 'thinking parameter',
460 thinkingParameterModeHint:
461 'Compatibility setting for OpenAI-compatible services. If the service reports unsupported parameter: thinking, choose omit.',
462 thinkingParameterModeAuto: 'Auto (recommended)',
463 thinkingParameterModeOmit: 'Do not send thinking',
464 timeoutSection: 'Model timeouts (seconds)',
465 timeoutPlanning: 'Outline planning',
466 timeoutDesign: 'Design contract',
467 timeoutAgent: 'Generation/editing',
468 timeoutDocument: 'Document parsing',
469 timeoutSeconds: 'Model call timeout (seconds)',
470 timeoutPlaceholder: 'Example: 300',
471 timeoutHint: 'For local or slower models. Cloud models usually do not need changes here.',
472 timeoutPlanningHint: 'Default 300 seconds. Used for titles, key points, and outlines.',
473 timeoutDesignHint: 'Default 300 seconds. Used for the deck visual direction.',
474 timeoutAgentHint: 'Default 600 seconds. Used for page generation and edits.',
475 timeoutDocumentHint: 'Default 600 seconds. Used for uploaded document outline parsing.',
476 apiKeyPlaceholder: 'Enter {provider} API Key',
477 verifying: 'Verifying...',
478 verify: 'Verify',
479 verifyHint:
480 'Uses the current provider preset, model, api_key, and base_url for a real connectivity check. Local Ollama can use any value.',
481 imageVerifyHint:
482 'Verification generates one real test image at the provider default size and only passes when an image is returned.',
483 imageVerificationPreview: 'Verification image',
484 imageVerificationPreviewAlt: 'Image generated during image model verification',
485 imageVerificationPrompt: 'Test prompt: Generate a cartoon cat',
486 imageVerifyPassed: 'Image model verified',
487 imageVerifyPassedDescription: 'A test image was generated successfully',
488 imageVerifyFailed: 'Image model verification failed',
489 imageVerifyFailedDescription: 'Check the model configuration and API credentials',
490 modelPlaceholder: 'Example: deepseek-v4-flash',
491 imageModelPlaceholder:
492 'Example: Jimeng 3.0 / Jimeng 4.0 / Agnes AI / SiliconFlow / OpenAI compatible / Gemini',
493 imageModelNamePlaceholder: 'Model alias, anything you like',
494 baseUrlPlaceholder: 'Example: https://api.deepseek.com',
495 imageBaseUrlPlaceholder: 'Leave empty for built-in defaults, or enter a compatible service URL',
496 imageBaseUrlHint:
497 'Jimeng 3.0, Jimeng 4.0, Agnes AI, SiliconFlow, OpenAI-compatible image APIs, and Gemini are available.',
498 defaultImageSize: 'Default size',
499 defaultImageQuality: 'Default quality',
500 defaultImageCount: 'Default count',
501 imageExtraJsonHint:
502 'Optional. Override endpoint, headers, requestBody, or other provider-specific fields.',
503 fillImageModelConfig: 'Enter valid model_config JSON.',
504 storage: 'Storage',
505 storagePath: 'Storage path',
506 storagePlaceholder: 'Choose a storage folder first',
507 choose: 'Choose',
508 storageHint: 'New creative generation results will be written to this folder.',
509 saveSettings: 'Save settings',
510 saveModel: 'Save model settings',
511 saveImageModel: 'Save image model',
512 saveTimeouts: 'Save timeouts',
513 saveFailed: 'Failed to save settings',
514 saved: 'Settings saved',
515 savedDescription: 'Configuration has been written locally',
516 modelSaved: 'Model settings saved',
517 imageModelSaved: 'Image model saved',
518 modelSavedDescription: 'Model config has been written locally',
519 imageModelSavedDescription: 'Image model config has been written locally',
520 timeoutSavedDescription: 'Global timeout settings have been written locally',
521 fillModelName: 'Enter an alias first',
522 fillApiKey: 'Enter api_key first',
523 fillModel: 'Enter model first',
524 verifyBeforeSave: 'Verify the model before saving.',
525 verifyImageBeforeSave: 'Generate a test image successfully before saving the image model.',
526 verifyPassed: 'API Key verified',
527 verifyPassedDescription: 'The current configuration can call the model',
528 verifyFailed: 'API Key verification failed',
529 verifyFailedDescription: 'Check model / api_key / base_url',
530 choosePathFailed: 'Failed to choose folder',
531 storagePathUpdated: 'Storage path updated',
532 proxySection: 'Network Proxy',
533 proxyLabel: 'Proxy address',
534 proxyPlaceholder: 'e.g. http://127.0.0.1:7890',
535 proxyHint:
536 'Supports HTTP and SOCKS5 proxies for accessing services like Gemini. Leave empty to disable.',
537 proxySavedDescription: 'Proxy settings saved. Takes effect immediately.'
538 },
539 styles: {
540 eyebrow: 'Style Lab',
541 title: 'Style management',
542 description:
543 'Built-in 70+ styles. Import PPTX, HTML, images, and more to auto-extract styles, or create your own from scratch.',
544 refresh: 'Refresh',
545 newStyle: 'New style',
546 newStyleTooltip: 'Create a new custom style template',
547 importMenu: 'Import Style',
548 importMenuTooltip: 'Import a packaged style ZIP or a style folder.',
549 officialSkillLabel: 'Official style skill: arcsin1/style-generate-skill',
550 supportsImageGeneration: 'Image generation',
551 importPackage: 'Import Style ZIP',
552 importPackageTooltip: 'Import a packaged style ZIP.',
553 importPackageDirectory: 'Import Style Folder',
554 importPackageDirectoryTooltip:
555 'Import a style folder containing only style.json, SKILL.md, and preview.html.',
556 importingPackage: 'Importing...',
557 exportPackage: 'Export ZIP',
558 exportPackageTooltip: 'Export this style as a portable ZIP package',
559 packageZipRequired: 'Choose a .zip style package',
560 packageImported: 'Style package imported',
561 packageImportFailed: 'Failed to import style package',
562 packageExported: 'Style package exported',
563 packageExportFailed: 'Failed to export style package',
564 generatePreview: 'Generate preview',
565 generatePreviewTooltip: 'Generate a visual preview cover for this style',
566 generatingPreview: 'Generating...',
567 previewTooltip: 'View this style preview',
568 editTooltip: 'Edit this style name, description, and prompt',
569 deleteTooltip: 'Delete this style after a confirmation',
570 previewGenerated: 'Preview generated',
571 previewGenerationFailed: 'Failed to generate preview',
572 refreshed: 'Style list refreshed',
573 refreshedDescription: '{count} styles total',
574 loadFailed: 'Failed to load styles',
575 sourceBuiltin: 'builtin',
576 deleted: 'Style deleted',
577 deleteFailed: 'Failed to delete style',
578 deleteConfirmTitle: 'Delete this style?',
579 deleteConfirmDescription:
580 '“{name}” will be removed from the style list. This cannot be undone.',
581 styleCaseFilter: 'Filter by use case',
582 allStyleCases: 'All',
583 noMatchingStyles: 'No styles match this use case',
584 searchPlaceholder: 'Search by name or use case…',
585 clearSearch: 'Clear search',
586 aiRecommend: 'AI Recommend',
587 aiRecommending: 'Recommending…',
588 aiRecommendationTopicRequired: 'Enter a topic first',
589 aiRecommendationFailed: 'AI recommendation failed. Try again.',
590 clearRecommendation: 'Show all styles',
591 favoriteStyles: 'Favorites',
592 favoriteStyle: 'Favorite style',
593 unfavoriteStyle: 'Remove favorite',
594 favoriteStyleTooltip: 'Favorite this style',
595 unfavoriteStyleTooltip: 'Remove this style from favorites',
596 favoriteFailed: 'Failed to update favorite',
597 noFavoriteStyles: 'No favorite styles yet',
598 pagesCount: 'Pages · {count}'
599 },
600 styleEditor: {
601 eyebrow: 'Style Editor',
602 newStyle: 'New style',
603 createTitle: 'Create your style',
604 editTitle: 'Edit style',
605 backToList: 'Back to list',
606 loading: 'Loading style content...',
607 defaultLabel: 'My style',
608 defaultDescription: 'Custom style',
609 defaultCategory: 'Custom',
610 detailLoadFailed: 'Failed to load style details',
611 invalidStyleId: 'Invalid styleId',
612 backAndRetry: 'Go back to the list and try again',
613 fillName: 'Enter a name first',
614 fillPrompt: 'Enter a style prompt first',
615 saved: 'Style saved',
616 savedOverride: 'Saved as a built-in style override',
617 savedCustom: 'Custom style updated',
618 saveFailed: 'Save failed',
619 importStyle: 'Import and parse',
620 importImage: 'Import image and parse',
621 importing: 'Parsing...',
622 importHint:
623 'Import files, PPTX, or images to extract style: .md/.txt/.html (≤{textMaxSize}MB), .pptx (≤{pptxMaxSize}MB), images (≤{imageMaxSize}MB).',
624 importSuccess: 'Style imported and parsed',
625 importFailed: 'Failed to import style',
626 imageFormatInvalidTitle: 'Unsupported image format',
627 imageFormatInvalid: 'Only PNG / JPEG / WEBP images are supported.',
628 imageReadFailed: 'Failed to read image. Please reselect and try again.',
629 fileTooLargeTitle: 'File too large',
630 fileTooLarge: 'A single style file must be under {maxSize}MB.',
631 filePathFailedTitle: 'Cannot read file path',
632 filePathFailed: 'Please choose a local style file again.',
633 deleted: 'Style deleted',
634 deleteFailed: 'Delete failed',
635 name: 'Name',
636 descriptionLabel: 'Description',
637 descriptionPlaceholder: 'Describe this style in one sentence',
638 styleCaseLabel: 'Use cases',
639 styleCasePlaceholder: 'Example: tech talks, product launches, education, annual summaries',
640 writingTips: 'Style Skill writing tips',
641 skillMarkdown: 'Skill Markdown',
642 tipStructure:
643 "Describe the overall mood in flowing prose first, then details. Don't write a cold spec doc.",
644 tipAnimation:
645 'Weave colors into emotional descriptions (e.g. "warm light blue"), list specific imagery (paper boats, umbrellas, clouds).',
646 tipNatural:
647 'Describe fonts by their character (handwritten, rounded, warm) — not just family names or specs.',
648 tipReadable:
649 'State the target audience and use case (e.g. "youth mental health PPT") so the model understands context.',
650 promptReferenceTitle: 'Style Extraction Prompt Reference',
651 promptReferenceSubtitle: '(can be used for generation elsewhere)',
652 promptRef1:
653 'Open with a natural-language paragraph describing the overall visual mood, e.g. "clean, bright, light-toned with generous whitespace"',
654 promptRef2:
655 '## Colors: List primary, background, text colors with hex values, e.g. "background #FFFFFF, text dark gray #1F2937"',
656 promptRef3:
657 '## Typography: Describe font style, weight, size hierarchy, line height, e.g. "bold sans-serif titles, regular body, line height 1.6+"',
658 promptRef4:
659 '## Layout: Specify alignment, information hierarchy, whitespace and density, e.g. "modular sections, centered or left-aligned, moderate density"',
660 promptRef5:
661 '## Animation: Describe entrance animations with public data-anim values, duration, easing, e.g. "fade or gentle slide-up, 0.4s–0.6s, ease-out"',
662 promptRef6:
663 '## Use case: Define target audience and scenario, e.g. "business reports, product intros, project summaries — formal but not dull"',
664 promptRef7:
665 '## Avoid: List elements to avoid, e.g. "no high-saturation clashing colors, no heavy gradients and shadows"',
666 emptyMarkdown: '_No Markdown content_',
667 saveStyle: 'Save style',
668 currentMode: 'Current mode: {mode}',
669 builtinMode: 'Built-in (saving creates an override)',
670 template: `A clean, bright, light-toned style with a pure white or very light gray background and generous whitespace for an open, uncluttered reading experience.
671
672 ## Colors
673 Neutral grays as the primary palette, with a single brand accent color (e.g. blue #2563EB or green #16A34A) for titles and key elements. Background: pure white #FFFFFF. Text: dark gray #1F2937. Restrained yet professional.
674
675 ## Typography
676 Titles use a clean sans-serif font in bold, dark gray or black. Body text uses regular-weight sans-serif at a comfortable size with line height above 1.6 for readability. Clear hierarchy through font size, weight, and color.
677
678 ## Layout
679 Clear modular structure, content centered or left-aligned. Hierarchy established through font size, color, and spacing. Generous whitespace, moderate information density per slide.
680
681 ## Animation
682 Calm and subtle rhythm. Elements fade in or gently slide up over 0.4s–0.6s with ease-out easing. Avoid flashy transitions.
683
684 ## Suitable for
685 Business presentations, product introductions, project summaries — formal but not stiff.
686
687 ## Avoid
688 - Do not use high-saturation colors
689 - Do not stack heavy gradients and shadows
690 - Do not create flickering or large-scale shaking animations`
691 },
692 generating: {
693 stages: {
694 preflight: 'Prepare',
695 planning: 'Plan',
696 rendering: 'Generate',
697 validation: 'Validate'
698 },
699 created: 'Understanding request',
700 currentSession: 'Current session',
701 defaultPrompt: 'Create a clear first draft that can be previewed directly.',
702 pageDetail: 'Page {pageNumber}: {title}',
703 completed: 'Completed',
704 failedRetryOrBack: 'Failed',
705 stillRunning: 'Generating pages',
706 started: 'Generating pages',
707 queued: 'Queued',
708 failed: 'Failed',
709 previousFailed: 'The previous generation for this session failed. You can retry directly.',
710 keptFailed: 'Failed',
711 resumed: 'Generating pages',
712 incompleteSome:
713 'Session incomplete: {generated}/{total} pages finished. Continue generating the remaining pages.',
714 continueRemainingEvent: 'Retrying',
715 incompleteNone: 'Session incomplete: 0/{total} pages finished. Please regenerate.',
716 noValidPagesEvent: 'Failed',
717 backHome: 'Back home',
718 title: 'AI is generating your presentation',
719 expandLog: 'Expand log panel',
720 collapseLog: 'Collapse log panel',
721 logTitle: 'Progress log',
722 progress: 'Progress',
723 growing: 'Generating pages',
724 eyebrow: 'Generating',
725 interrupted: 'Interrupted',
726 cancelGeneration: 'Cancel',
727 failedRetry: 'Generation failed. Please retry.',
728 continueRemaining: 'Continue remaining pages',
729 backToSessions: 'Back to sessions',
730 regenerate: 'Regenerate',
731 enterEditor: 'Enter Editor to Fix'
732 },
733 sessionDetail: {
734 sessionFallback: 'Session',
735 master: 'Master',
736 masterTitle: 'Slide Master',
737 masterDescription: 'Override linked slide backgrounds and fonts.',
738 masterStyle: 'Style master',
739 masterStyleTitle: 'Style master',
740 masterGlobalElements: 'Global elements',
741 masterLayoutLibrary: 'Layout master',
742 layoutMasterTitle: 'Layout master',
743 layoutMasterDescription: 'Choose a default composition for each slide intent.',
744 layoutMasterIntentCover: 'Cover / section',
745 layoutMasterIntentData: 'Data focus',
746 layoutMasterIntentComparison: 'Comparison',
747 layoutMasterIntentTimeline: 'Timeline',
748 layoutMasterIntentConcept: 'Content / concept',
749 layoutMasterIntentProcess: 'Process',
750 layoutMasterIntentSummary: 'Summary / closing',
751 layoutMasterIntentQuote: 'Quote',
752 layoutMasterIntentImage: 'Image focus',
753 layoutMasterReset: 'Restore defaults',
754 layoutMasterSave: 'Save layout mapping',
755 layoutMasterSaved: 'Layout mapping saved for future generated slides',
756 layoutMasterLoadFailed: 'Failed to load layout master',
757 layoutMasterSaveFailed: 'Failed to save layout master',
758 masterElementsTitle: 'Global elements',
759 masterElementsDescription: 'Place a shared logo, footer, page number, and watermark.',
760 masterOverrideBackground: 'Override existing slide backgrounds',
761 masterBackground: 'Slide background',
762 masterBackgroundStyle: 'Background style',
763 masterBackgroundSolid: 'Solid',
764 masterBackgroundGradient: 'Gradient',
765 masterBackgroundImage: 'Image',
766 masterBackgroundImageChoose: 'Choose from library',
767 masterBackgroundImageUpload: 'Upload image',
768 masterBackgroundImageClear: 'Remove image',
769 masterBackgroundImageEmpty: 'Choose a background image',
770 masterBackgroundImageUploadFailed: 'Failed to upload background image',
771 masterGradientPreview: 'Gradient preview',
772 masterGradientConfigure: 'Edit gradient',
773 masterGradientEditorTitle: 'Gradient background',
774 masterGradientEditorDescription: 'Adjust the gradient type, angle, and color stops.',
775 masterGradientType: 'Gradient type',
776 masterGradientLinear: 'Linear',
777 masterGradientRadial: 'Radial',
778 masterGradientAngle: 'Gradient angle',
779 masterGradientPresets: 'Color presets',
780 masterGradientStops: 'Color stops',
781 masterGradientStop: 'Stop {position}%',
782 masterGradientStopColor: 'Stop color',
783 masterGradientAddStop: 'Add color stop',
784 masterGradientRemoveStop: 'Remove color stop',
785 masterGradientConfirm: 'Confirm gradient',
786 masterTitleFont: 'Title font',
787 masterBodyFont: 'Body font',
788 masterTitleFontSize: 'Title font size',
789 masterBodyFontSize: 'Body font size',
790 masterFontSizeInherit: 'Inherit',
791 masterFontInherit: 'Inherit page font',
792 masterFontInheritWithFamily: 'Current: {family}',
793 masterFontSans: 'Sans serif',
794 masterFontSerif: 'Serif',
795 masterFontMono: 'Monospace',
796 masterPageCounts: '{linked} linked, {unlinked} unlinked, {missing} missing.',
797 masterUnlinkedHint:
798 '{count} slide(s) are unlinked. Saving automatically links and applies the master.',
799 masterReset: 'Reset',
800 masterSaveAndApply: 'Save and apply',
801 masterSaved: 'Master saved and applied to all slides',
802 masterLoadFailed: 'Failed to load master',
803 masterSaveFailed: 'Failed to save master',
804 masterElementsReset: 'Reset elements',
805 masterElementLogo: 'Logo',
806 masterLogoEmpty: 'No logo selected',
807 masterLogoChoose: 'Choose logo from library',
808 masterLogoUpload: 'Upload logo',
809 masterLogoClear: 'Remove logo',
810 masterLogoUploadFailed: 'Failed to upload logo',
811 masterFooter: 'Footer',
812 masterWatermark: 'Watermark',
813 masterElementVisible: 'Show',
814 masterElementFontSize: 'Font size',
815 masterElementColor: 'Text color',
816 masterWatermarkRotation: 'Watermark rotation',
817 masterShowPageNumber: 'Show page number',
818 masterHideElementsOnSlide: 'Hide global elements on this slide',
819 masterPageOverrideFailed: 'Failed to update slide master setting',
820 current: 'Current',
821 pagesCount: 'Pages · {count}',
822 pageTab: 'Pages',
823 outlineTab: 'Outline',
824 pageNumber: 'Page {pageNumber}',
825 pagesEmpty: 'No pages yet',
826 outlineEmpty: 'No outline yet',
827 copyOutline: 'Copy outline',
828 outlineCopied: 'Copied',
829 downloadAllOutlines: 'Download all outlines',
830 outlinesExported: 'Outline export succeeded',
831 backToSessions: 'Back to sessions',
832 toolbarExport: 'Export',
833 toolbarMore: 'More',
834 toolbarExportPptxEditable: 'Editable PPTX',
835 toolbarExportPptxImageOnly: 'Image PPTX',
836 toolbarExportPng: 'PNG Image',
837 toolbarExportLongImage: 'PNG Long Image',
838 toolbarExportVideo: 'MP4 Video',
839 toolbarExportPdf: 'PDF File',
840 toolbarExportSlidePack: 'Slide Pack',
841 toolbarExportSlidePackDesc: 'Standalone preview pack',
842 toolbarExportSessionZip: 'Session ZIP',
843 toolbarExportSessionZipDesc: 'Full session directory archive',
844 exportPptx: 'Export PPTX',
845 exportSinglePagePptx: 'Export this slide as editable or image PPTX',
846 exportImagePdf: 'Export Image/PDF',
847 exportPng: 'Export PNG',
848 exportPdf: 'Export PDF',
849 speechScript: 'Speaker Notes',
850 speechScriptTooltip: 'Generate speaker notes from slide content',
851 speechScriptTabConfig: 'Settings',
852 speechScriptTabResult: 'Result',
853 speechScriptScope: 'Scope',
854 speechScriptScopeAll: 'All',
855 speechScriptScopeAllDesc: 'All slides',
856 speechScriptScopeSingle: 'Single',
857 speechScriptScopeSingleDesc: 'Current slide',
858 speechScriptDialogTitle: 'Speaker Notes',
859 speechScriptCopy: 'Copy',
860 speechScriptCopied: 'Copied',
861 speechScriptEmptyHint: 'Click the button above to generate',
862 speechScriptViewFile: 'View file',
863 speechScriptError: 'Failed to generate speaker notes, please try again',
864 speechScriptGenerate: 'Generate',
865 speechScriptRegenerate: 'Regenerate',
866 speechScriptLength: 'Length',
867 speechScriptLengthShort: 'Brief',
868 speechScriptLengthShortDesc: '~1 min per slide',
869 speechScriptLengthMedium: 'Standard',
870 speechScriptLengthMediumDesc: '~2 min per slide',
871 speechScriptLengthLong: 'Detailed',
872 speechScriptLengthLongDesc: '~3 min per slide',
873 speechScriptStyle: 'Style',
874 speechScriptStyleFormal: 'Formal',
875 speechScriptStyleConversational: 'Conversational',
876 speechScriptStyleStorytelling: 'Storytelling',
877 speechScriptStyleCustom: 'Custom',
878 speechScriptStyleCustomPlaceholder:
879 'Describe the style you want, e.g. humorous and engaging, use lots of analogies and examples...',
880 speechScriptGenerating: 'Generating slide {current} of {total}',
881 speechScriptGeneratingSingle: 'Generating slide {pageNumber}',
882 speechScriptGeneratingInit: 'Preparing...',
883 preview: 'Browser Preview',
884 previewTooltip: 'Open in browser — works independently outside the app',
885 present: 'Present',
886 presentTooltip: 'Fullscreen presentation, arrow keys or mouse wheel to navigate, Esc to exit',
887 saveAsNewSession: 'Save as New Session',
888 saveAsNewSessionDefaultName: '{title} Copy',
889 saveAsNewSessionDialogTitle: 'Save as New Session',
890 saveAsNewSessionDialogDescription:
891 'Copies the current session pages and assets into an independent new session. Chat records and version history are not copied.',
892 saveAsNewSessionNameLabel: 'New session name',
893 saveAsNewSessionNamePlaceholder: 'Enter a new session name',
894 saveAsNewSessionSaving: 'Saving...',
895 saveAsNewSessionConfirm: 'Save as New Session',
896 saveAsNewSessionSuccess: 'Saved as new session',
897 saveAsNewSessionFailed: 'Failed to save as new session',
898 saveAsNewSessionTitleRequired: 'Enter a new session name',
899 saveTemplate: 'Save as Template',
900 saveTemplateTooltip: 'Save this presentation as a template',
901 revealFile: 'Show source file',
902 collapseMessages: 'Collapse message panel',
903 expandMessages: 'Expand message panel',
904 chatMode: 'Chat',
905 imageMode: 'Image',
906 messageTitle: 'Messages and input',
907 context: 'Context',
908 contextPlaceholder: 'Select context',
909 currentPage: 'Current page',
910 mainSession: 'Main session',
911 pageContext: 'Current page · P{pageNumber}',
912 mainContext: 'Main session',
913 assetPlaceholder:
914 'Describe how to use these assets, for example: use the first image as the cover background.',
915 pagePlaceholder:
916 'Current-page mode only edits this page. You can use Inspect to select an element, then ask to adjust color or font size.',
917 mainPlaceholder:
918 'Main-session mode: describe changes for the deck pages, such as unifying title styles, changing all backgrounds, or rearranging specific pages.',
919 mainDisabledPlaceholder:
920 'Main-session sending is disabled. Switch Context to Current page first.',
921 emptyMessages: 'No creative messages yet',
922 activityTitle: 'Edit progress',
923 activityDescription: 'Follow page edits, retries, and completion in real time.',
924 activityProcessing: 'Processing edit task',
925 activityCancelling: 'Cancelling and restoring the previous content',
926 pageEditPlanning: 'Understanding this slide edit request',
927 pageEditPlanTitle: 'Edit plan',
928 pageEditPlanConfirm: 'Confirm and edit',
929 pageEditPlanCancel: 'Cancel plan',
930 pageEditPlanRequiresSavedEdits:
931 'Save or discard unsaved adjustments on this slide before confirming the AI edit plan.',
932 pageEditPlanReturnToTarget: 'Return to the slide for this plan before confirming it.',
933 pageEditPlanWaitForJob:
934 'Another slide edit is still running. Finish it before running this plan.',
935 pageEditOtherPageBusy:
936 'AI is editing another slide. You can keep browsing and editing manually, then send a new AI edit when it finishes.',
937 pageEditAssessmentBusy:
938 'Another slide request is being assessed or awaiting confirmation. Resolve it before sending a new one.',
939 activityCompleted: 'Edit completed',
940 activityPartialCompleted: 'Edit completed with {count} failed slide(s)',
941 activityRunFailed: 'Edit task failed',
942 activityPageFailed: 'Slide {page} failed: {title}',
943 activityPageContext: 'Slide {page}: {title}',
944 activityUnknownError: 'No failure reason was returned. Retry or check the main-process log.',
945 activityStatusRunning: 'Generating',
946 activityStatusCompleted: 'Completed',
947 activityStatusCancelled: 'Cancelled',
948 activityStatusFailed: 'Failed',
949 selectorBadge: 'SELECTOR',
950 clearSelector: 'Clear selector',
951 selectorPropertiesReady: '{count} properties read',
952 mainDeckHint: 'Main session edits one or more pages from your instruction.',
953 mainPageScopeAll: 'All pages',
954 mainPageScopeCount: '{count} pages',
955 mainPageScopeMessagePrefix: 'Page scope: {pages}',
956 mainPageScopeConflictWarning:
957 'Specific pages are selected, so this run will only edit those pages. Switch back to All pages to edit the full deck.',
958 mainPageScopeLimitReached: 'You can select at most {count} pages at a time.',
959 mainPageScopeAllLimitReached:
960 'This deck has {count} pages. Select at most {limit} specific pages before editing.',
961 mainPageScopeNotFound:
962 'No matching slide was found in the instruction. Check the slide number or select a scope first.',
963 mainPageStructureUnsupported:
964 'Main-session chat cannot add, delete, or reorder slides yet. Use the slide tools on the left.',
965 mainDisabled:
966 'Main-session sending is disabled. Switch Context to Current page before editing.',
967 removeAsset: 'Remove asset',
968 addAsset: 'Add asset',
969 chooseImage: 'Choose image',
970 chooseVideo: 'Choose video',
971 chooseFileSoon: 'Choose file (soon)',
972 stop: 'Stop',
973 send: 'Send',
974 imageModelPlaceholder: 'Select image model',
975 imageModelRequiredHint: 'Configure an image model in Settings first.',
976 imagePromptPlaceholder:
977 'Describe the image to generate, or click "Outline prompt" to fill a prompt from the current page.',
978 imagePromptFromOutline: 'Outline prompt',
979 imagePromptFromCurrentPage: 'Style prompt',
980 imagePromptGenerating: 'Generating visual...',
981 imagePromptGenerated: 'Visual description generated',
982 imagePromptGenerateFailed: 'Failed to generate visual description',
983 imagePromptRequired: 'Enter an image prompt first',
984 generateImage: 'Generate image',
985 imageGenerating: 'Generating image...',
986 imageGenerated: 'Image generated',
987 imageGeneratedDescription: 'Generated {count} image(s)',
988 imageGenerateFailed: 'Failed to generate image',
989 imageHistoryLoadFailed: 'Failed to load image history',
990 autoImageInProgress: 'Finalizing the automatic illustration for this slide.',
991 autoImageDegraded: 'The illustration failed; the fallback layout was kept.',
992 autoImageLayoutFailed: 'The generated image was not adopted by the current layout.',
993 autoImageCancelled: 'The automatic illustration was cancelled; the original layout was kept.',
994 autoImageRetry: 'Retry illustration',
995 autoImageRetryStarted: 'Retrying failed illustration',
996 autoImageRetryFailed: 'Failed to retry illustration',
997 imageResultEmpty: 'No generated images yet',
998 imagePreviewTitle: 'Image preview',
999 imagePreviewOpen: 'Open larger preview',
1000 addImageToCanvas: 'Add to canvas',
1001 imageAddedToCanvas: 'Image added to canvas',
1002 setImageAsBackground: 'Set as background',
1003 imageSetAsBackground: 'Image set as background',
1004 imageOptions: 'Model + settings',
1005 imageConfigButton: 'Model + settings',
1006 imageConfigTitle: 'Model and settings',
1007 imageSizeLabel: 'Ratio',
1008 imageCountLabel: 'Count',
1009 imageOutlinePromptIntro: 'Generate one presentation-ready visual asset for the current slide.',
1010 imageOutlineTitle: 'Slide title',
1011 imageOutlineContent: 'Slide outline',
1012 imageOutlineConstraints:
1013 'Use this as a slide background or illustration. Avoid garbled text, pseudo-text, random glyph-like marks, and copy unrelated to the current content. Only keep a short, clearly legible phrase when its exact wording is explicitly provided and the scene genuinely needs it. Leave clean space for typography, and do not mention aspect ratios, sizes, or resolutions.',
1014 editText: 'Edit text',
1015 exitTextEdit: 'Exit edit',
1016 previewMode: 'Preview',
1017 browseMode: 'Browse',
1018 browseRequiresSavedEdits: 'Save or discard unsaved edits before entering Browse.',
1019 pageSwitchSaveConfirmTitle: 'Save current page edits first?',
1020 pageSwitchSaveConfirmDescription:
1021 'Save unsaved edits on the current page before switching to “{page}”.',
1022 pageSwitchSaveConfirmAction: 'Save and switch',
1023 workspaceSwitchSaveConfirmTitle: 'Save current page edits first?',
1024 workspaceSwitchSaveConfirmDescription:
1025 'Save unsaved edits on the current page before switching to “{mode}”.',
1026 workspaceSwitchSaveConfirmAction: 'Save and switch',
1027 styleMode: 'Style',
1028 styleRequiresSavedEdits: 'Save or discard unsaved edits before switching styles.',
1029 styleTitle: 'Switch deck style',
1030 styleDescription:
1031 'Redraw every slide while preserving its original text and data, with a newly designed visual layout.',
1032 styleLoading: 'Loading styles...',
1033 styleLoadFailed: 'Failed to load styles',
1034 currentStyle: 'Current style',
1035 styleSwitching: 'Switching',
1036 styleSwitchCompleted: 'Style switched',
1037 styleSwitchFailed: 'Failed to switch style',
1038 styleSwitchCancelFailed: 'Failed to cancel style switch',
1039 styleSwitchConfirmTitle: 'Switch the entire deck style?',
1040 styleSwitchConfirmDescription:
1041 'All slides will be redrawn using “{style}”. Each slide keeps its original text and data, while its layout and visual structure may be redesigned.',
1042 styleSwitchConfirmAction: 'Switch style',
1043 styleSwitchPartial: '{count} slides still failed. Retry only those slides.',
1044 styleSwitchRetry: 'Retry failed slides',
1045 styleSwitchRetrying: 'Retrying',
1046 activityRetryFailedPages: 'Retry failed slides ({count})',
1047 activityRetrying: 'Retrying failed slides',
1048 activityRetryFailed: 'Failed to retry slides',
1049 editMode: 'Edit',
1050 animationTab: 'Animation',
1051 indexTransitionLabel: 'Page transition',
1052 elementAnimationLabel: 'Element animation',
1053 elementAnimationPreview: 'Preview slide',
1054 elementAnimationSelectTarget: 'Select an element',
1055 elementAnimationSelectTargetTitle: 'Select an element on the canvas',
1056 elementAnimationSelectTargetHint:
1057 'Then choose an entrance, emphasis, or exit animation for that element.',
1058 elementAnimationCategoryEntrance: 'Entrance',
1059 elementAnimationCategoryEmphasis: 'Emphasis',
1060 elementAnimationCategoryExit: 'Exit',
1061 elementAnimationClearFirstHint:
1062 'This element already has an animation. Click "None" to clear it before switching types.',
1063 elementAnimationTriggerAuto: 'Auto',
1064 elementAnimationTriggerClick: 'Click',
1065 elementAnimationDuration: 'Duration',
1066 elementAnimationDurationFast: 'Fast 360ms',
1067 elementAnimationDurationStandard: 'Standard 600ms',
1068 elementAnimationDurationSlow: 'Gentle 900ms',
1069 elementAnimationDurationCustom: 'Custom {duration}ms',
1070 elementAnimationDirection: 'Direction',
1071 elementAnimationDirectionLeft: 'From left',
1072 elementAnimationDirectionRight: 'From right',
1073 elementAnimationDirectionTop: 'From top',
1074 elementAnimationDirectionBottom: 'From bottom',
1075 elementAnimationAdvancedPath: 'Advanced path animation',
1076 elementAnimationExitFade: 'Fade out',
1077 elementAnimationExitScale: 'Scale out',
1078 elementAnimationExitZoom: 'Zoom out',
1079 elementAnimationExitWipe: 'Wipe out',
1080 elementAnimationExitFly: 'Fly out',
1081 elementAnimationSaved: 'Element animation updated',
1082 elementAnimationLoadFailed: 'Failed to load element animation',
1083 elementAnimationSaveFailed: 'Failed to save element animation',
1084 indexTransitionNone: 'None',
1085 indexTransitionFade: 'Fade',
1086 indexTransitionSlideLeft: 'Slide left',
1087 indexTransitionSlideUp: 'Slide up',
1088 indexTransitionPush: 'Push',
1089 indexTransitionWipe: 'Wipe',
1090 indexTransitionZoom: 'Zoom',
1091 indexTransitionFlip: 'Flip',
1092 indexTransitionStack: 'Stack',
1093 indexTransitionRotate: 'Rotate',
1094 indexTransitionCube: 'Cube',
1095 indexTransitionCoverFlow: 'Cover Flow',
1096 indexTransitionBlur: 'Blur',
1097 indexTransitionIris: 'Iris',
1098 indexTransitionSwing: 'Swing',
1099 indexTransitionCenterReveal: 'Center reveal',
1100 indexTransitionSaved: 'Page transition updated',
1101 indexTransitionLoadFailed: 'Failed to load page transition',
1102 indexTransitionSaveFailed: 'Failed to save page transition',
1103 saveCurrentPage: 'Save page',
1104 saveCurrentPageTooltip: 'Save edits on the current page and write a version history entry',
1105 exitEditMode: 'Exit Edit Mode',
1106 elementInspector: 'Inspector',
1107 noElementSelected: 'No element selected',
1108 closeInspector: 'Close inspector',
1109 closeSpeechDrawer: 'Close speech script panel',
1110 textContent: 'Text',
1111 formulaContent: 'Formula',
1112 formulaDisplayMode: 'Display on its own line',
1113 formulaPreview: 'Preview',
1114 formulaPreviewEmpty: 'Enter LaTeX to preview',
1115 chartContent: 'Chart data',
1116 chartType: 'Chart type',
1117 chartTitle: 'Title',
1118 chartLabels: 'X axis',
1119 chartValues: 'Y axis',
1120 chartData: 'Data',
1121 chartImportData: 'Import',
1122 chartImportDataTooltip:
1123 'Import CSV, TSV, JSON, or Excel. The category column becomes the X axis; numeric columns become Y series, and missing values are filled with 0.',
1124 chartImportDataFailed: 'Failed to import data',
1125 chartDataPlaceholder:
1126 '[\n { "x": "Q1", "Revenue": 24, "Profit": 8 },\n { "x": "Q2", "Revenue": 36, "Profit": 0 }\n]',
1127 chartPrimaryColor: 'Primary color',
1128 chartAccentColor: 'Accent color',
1129 chartTextColor: 'Text color',
1130 chartSmoothLine: 'Smooth line',
1131 chartHorizontal: 'Horizontal',
1132 chartStacked: 'Stacked',
1133 chartAreaFill: 'Area fill',
1134 chartShowPoints: 'Show points',
1135 chartShowLegend: 'Show legend',
1136 chartDoughnutCutout: 'Cutout size',
1137 chartRadarFill: 'Area fill',
1138 textColor: 'Color',
1139 textStyle: 'Text style',
1140 textAlign: 'Text alignment',
1141 alignLeft: 'Align left',
1142 alignCenter: 'Align center',
1143 alignRight: 'Align right',
1144 alignJustify: 'Justify',
1145 fontSize: 'Size',
1146 fontWeight: 'Weight',
1147 appearance: 'Appearance',
1148 opacity: 'Opacity',
1149 backgroundColor: 'Background',
1150 visualColor: 'Color',
1151 media: 'Media',
1152 objectFit: 'Object fit',
1153 alt: 'Alt text',
1154 poster: 'Poster',
1155 controls: 'Controls',
1156 muted: 'Muted',
1157 loop: 'Loop',
1158 autoplay: 'Autoplay',
1159 playsInline: 'Inline',
1160 preload: 'Preload',
1161 decrease: 'Decrease',
1162 increase: 'Increase',
1163 cancel: 'Cancel',
1164 save: 'Save',
1165 selectTextElementHint: 'Click a text element on the page to edit content and style here.',
1166 exitWithoutSaving: 'Exit editing',
1167 exitAdjust: 'Exit adjustment',
1168 adjustLayout: 'Adjust position/size',
1169 zIndex: 'Layer order',
1170 zIndexNegativeHint:
1171 'Negative layers sit behind content. Hold Alt / Option to click or drag them.',
1172 saveAdjustments: 'Save adjustments',
1173 copyElement: 'Copy',
1174 copyElementFailed: 'Failed to copy element',
1175 applyElementToAllPages: 'Apply to all pages',
1176 syncElementApplying: 'Applying...',
1177 syncElementApplied: 'Applied to {count} page(s)',
1178 syncElementFailed: 'Failed to apply to all pages',
1179 syncElementReadFailed: 'Could not read the current element. Select it again and retry.',
1180 deleteElement: 'Delete element',
1181 deleteElementConfirm: 'Are you sure you want to delete this element? This cannot be undone.',
1182 nonTextElementHint:
1183 'Still working on this feature.\nYou can use AI mode to inspect and edit elements for now.',
1184 inspectorUnavailable:
1185 'Cannot read this element’s real properties.\nSelect an element inside the page again.',
1186 deleteElementFailed: 'Failed to delete element',
1187 exitInspect: 'Exit inspect',
1188 inspectElement: 'Inspect element',
1189 aiMode: 'AI',
1190 exitAiMode: 'Exit AI',
1191 exitAndSave: 'Exit & Save Version',
1192 undo: 'Undo',
1193 redo: 'Redo',
1194 undoCurrentPageTooltip: 'Undo last action',
1195 redoCurrentPageTooltip: 'Redo last action',
1196 discardAllEditsTooltip: 'Discard all changes',
1197 clickTextToEdit: 'Double-click text to edit',
1198 dblClickTextToEdit: 'Double-click text to edit',
1199 editModeToast: 'Drag to adjust position and size, click to select and edit elements',
1200 animationModeToast: 'Animation mode active — select an element to adjust its animation',
1201 editorSnap: 'Snap',
1202 editorGrid: 'Grid',
1203 editorRulerHint: 'Click the ruler to add a guide',
1204 editorGuideRemoveHint: 'Drag outside the canvas to remove guide',
1205 editorClearGuides: 'Clear guides',
1206 failedPageHint:
1207 'This page failed last time and is showing a recoverable file. Keep the Current page context and describe how to fix or regenerate it.',
1208 clickToSelect: 'Click an element to select it',
1209 emptyPreviewTitle: 'Waiting for your creative draft',
1210 briefHint: 'Enter a brief in the message panel and the preview will appear here.',
1211 imageOnly: 'Only image assets are supported for now',
1212 imagePathFailed: 'Cannot read image path',
1213 mediaOnly: 'Only image/video assets are supported for now',
1214 mediaPathFailed: 'Cannot read media file path',
1215 assetsAdded: 'Added {count} asset(s)',
1216 assetUploadFailed: 'Asset upload failed',
1217 switchToPageFirst: 'Main-session sending is disabled. Switch to Current page first.',
1218 useUploadedAssets: 'Use uploaded assets',
1219 selectPageFirst: 'Select a page before sending',
1220 selectorLocated: '(selected element located)',
1221 exportFailed: 'Export failed',
1222 exportCancelled: 'Export cancelled',
1223 exportProgressPreparing: 'Preparing export...',
1224 exportProgressRendering: 'Processing page {current}/{total}',
1225 exportProgressPackaging: 'Packaging files...',
1226 exportProgressWriting: 'Writing file...',
1227 exportPdfStart: 'Exporting PDF',
1228 exportPdfDescription:
1229 'Large decks or complex charts may take a while. Keep the window open and the result will appear automatically.',
1230 exportSuccessPages: 'PDF export succeeded ({count} pages)',
1231 exportPngStart: 'Exporting PNG images',
1232 exportPngDescription:
1233 'All pages will be saved as high-resolution images, suitable for docs, Notion, or social posts.',
1234 pngExported: 'PNG export succeeded ({count} images)',
1235 exportLongImageStart: 'Exporting long image',
1236 exportLongImageDescription:
1237 'All pages are stitched vertically into a single long image, great for social posts, chat, or long docs.',
1238 longImageExported: 'Long image export succeeded ({count} pages)',
1239 exportVideoStart: 'Exporting MP4 video',
1240 exportVideoDescription:
1241 'This version exports each page as a static video segment and opens the file location when complete.',
1242 videoExported: 'MP4 export succeeded ({count} pages)',
1243 pptxPreparingEditable: 'Preparing editable PPTX',
1244 pptxPreparingEditableDescription:
1245 'Export may take longer while fonts are embedded. Please wait. Preserving all elements editable where possible, including text, shapes, images, and tables.',
1246 pptxPreparingImage: 'Preparing image PPTX',
1247 pptxPreparingImageDescription:
1248 'Each page is exported as a high-resolution image for pixel-perfect fidelity.',
1249 pptxExported: 'PPTX export succeeded ({count} pages)',
1250 pptxEditableDescription: 'All elements were preserved editable where possible.',
1251 pptxImageDescription: 'Each page is a high-resolution image for pixel-perfect fidelity.',
1252 exportPptxEditable: 'Editable Export',
1253 exportPptxImageOnly: 'Image Export',
1254 exportPackage: 'Pack Export',
1255 exportPackageTooltip:
1256 'Export a runnable preview pack, or compress the full session directory as a ZIP package.',
1257 exportSlidePack: 'Export slide-pack file',
1258 exportSlidePackDescription: 'Create a standalone preview pack for sharing a view-only deck.',
1259 exportSessionZip: 'Export ZIP session package',
1260 exportSessionZipDescription:
1261 'Compress the full current session directory for backup, migration, or troubleshooting.',
1262 slidePackPreparing: 'Packaging preview...',
1263 slidePackPreparingDescription: 'Building standalone executable for browser preview',
1264 slidePackExported: 'Preview pack export succeeded',
1265 slidePackExportedDescription: 'Executable generated, double-click to preview in browser',
1266 sessionZipPreparing: 'Compressing session files...',
1267 sessionZipPreparingDescription: 'Packaging the full current session directory as a ZIP file.',
1268 sessionZipExported: 'Session ZIP export succeeded',
1269 sessionZipExportedDescription:
1270 'The ZIP contains the current session directory for backup, migration, or troubleshooting.',
1271 history: 'Version History',
1272 historyTooltip: 'View saved versions from page saves, AI edits, and page management',
1273 historyTitle: 'History versions',
1274 historyRecent: 'Latest 20',
1275 historyLoading: 'Loading history...',
1276 historyEmptyTitle: 'No history yet',
1277 historyEmptyDescription: 'A version is recorded after generation or editing completes.',
1278 historyCurrent: 'Current',
1279 historyRollback: 'Rollback',
1280 historyRollingBack: 'Rolling back...',
1281 historyChangedPages: 'Changed pages: {pages}',
1282 historyLoadFailed: 'Failed to load history',
1283 historyRollbackConfirm:
1284 'This will restore the deck to the selected version. Current files will be replaced, but later history will remain available.',
1285 historyRollbackSuccess: 'Restored history version',
1286 historyRollbackFailed: 'Rollback failed',
1287 pageLoadNotice:
1288 'Some pages took longer to load and were exported from the current view. Please quickly inspect the PPTX.',
1289 noEditableTextNotice:
1290 'Some pages were preserved as full visuals and may need manual text tweaks in PowerPoint.',
1291 exportCheckNotice: 'File exported. Please quickly inspect layout details in the PPTX.',
1292 layoutSaveFailed: 'Failed to save adjustments',
1293 adjustmentsSaved: 'Saved {count} adjustment(s)',
1294 templateSaved: 'Saved as template',
1295 templateSaveFailed: 'Failed to save template',
1296 viewTemplates: 'View templates',
1297 manualAdjustHistory: 'Manual page element adjustment',
1298 discardedAdjustments: 'Discarded unsaved adjustments',
1299 textSaved: 'Text saved',
1300 textSaveFailed: 'Failed to save text',
1301 textSaveEmpty: 'Text cannot be empty',
1302 inspectActiveToast: 'AI mode active — select elements on the page for AI to modify',
1303 addPage: 'Add Page',
1304 addBlankPage: 'Add blank page',
1305 addGeneratedPage: 'Add generated page',
1306 addPagesFromSession: 'Add pages from another session',
1307 mergePagesTitle: 'Add pages from another session',
1308 mergePagesDescription:
1309 'Copy selected pages from another session to the end of this session. The source session will not be changed.',
1310 mergeSearchSessions: 'Search sessions',
1311 mergeNoSessions: 'No sessions available',
1312 mergeUntitledSession: 'Untitled session',
1313 mergeSelectSession: 'Select a session',
1314 mergeSelectSessionHint: 'Choose a session on the left, then select pages to add',
1315 mergeNoPages: 'This session has no available pages',
1316 mergePageCount: '{count} pages',
1317 mergeSelectedCount: '{count}/{max} selected',
1318 mergePageLimitReached: 'You can add up to {count} pages at a time',
1319 mergeSelectAll: 'Select all available',
1320 mergeSelectFirstPages: 'Select first {count}',
1321 mergeClearSelection: 'Clear selection',
1322 mergeAddPages: 'Add {count} pages',
1323 mergeAddingPages: 'Adding pages...',
1324 mergeLoadFailed: 'Failed to load session pages',
1325 mergePagesFailed: 'Failed to add session pages',
1326 mergeErrorInvalidRequest: 'Invalid request. Reopen the dialog and try again.',
1327 mergeErrorSameSession: 'Pages cannot be added from the current session.',
1328 mergeErrorNoPageSelected: 'Select at least one page to add.',
1329 mergeErrorPageLimit: 'The selected pages exceed the allowed limit.',
1330 mergeErrorSessionNotFound: 'The source or current session no longer exists.',
1331 mergeErrorSessionBusy: 'The source or current session is generating. Try again later.',
1332 mergeErrorSlideSizeMismatch:
1333 'The source and current sessions use different canvas sizes and cannot be merged.',
1334 mergeErrorPageNotFound: 'A selected source page no longer exists.',
1335 mergeErrorPageUnavailable: 'A selected source page is incomplete or its file is missing.',
1336 mergeErrorTargetFont: 'The current template font configuration could not be loaded.',
1337 mergeErrorPageCopy: 'A page could not be copied. Check its resources and try again.',
1338 mergeDisabledSessionBusy: 'This session is generating. It can be added when complete.',
1339 mergeDisabledSessionEmpty: 'This session has no pages.',
1340 mergeDisabledSlideSizeMismatch: 'Canvas size differs from the current presentation.',
1341 mergeDisabledPageIncomplete: 'This page has not finished generating.',
1342 mergeDisabledPageMissing: 'The page file is missing.',
1343 addPagesFromTemplate: 'Add pages from a template',
1344 mergeTemplateTitle: 'Add pages from a template',
1345 mergeTemplateDescription:
1346 'Copy selected pages from a template to the end of this presentation, keeping the template styling.',
1347 mergeTemplateSearchTemplates: 'Search templates',
1348 mergeTemplateNoTemplates: 'No templates available',
1349 mergeTemplateUntitled: 'Untitled template',
1350 mergeTemplateSelectTemplate: 'Select a template',
1351 mergeTemplateSelectTemplateHint: 'Choose a template on the left, then select pages to add',
1352 mergeTemplateNoPages: 'This template has no available pages',
1353 mergeTemplatePageCount: '{count} pages',
1354 mergeTemplateSelectedCount: '{count}/{max} selected',
1355 mergeTemplateSelectAll: 'Select all available',
1356 mergeTemplateSelectFirstPages: 'Select first {count}',
1357 mergeTemplateSourceBadge: 'Source',
1358 mergeTemplateAddingPages: 'Adding pages...',
1359 mergeTemplateAddPages: 'Add {count} pages',
1360 mergeTemplateSuccess: 'Added {count} pages from template "{template}"',
1361 mergeTemplateLoadFailed: 'Failed to load templates',
1362 mergeTemplatePagesFailed: 'Failed to add template pages',
1363 mergePagesSuccess: 'Added {count} pages from “{session}”',
1364 collapseSidebar: 'Collapse sidebar',
1365 expandSidebar: 'Expand sidebar',
1366 untitledPage: 'Untitled page',
1367 addBlankPageHint:
1368 'Choose an existing page as the base. It will be copied to the end with only page text cleared.',
1369 addBlankPageCreate: 'Create blank page',
1370 addBlankPageFailed: 'Failed to add blank page',
1371 addPageHint: 'Auto-generated in the current style — just describe the page you want',
1372 addPageDescription: 'Describe the page you want to add',
1373 addPageGenerating: 'Generating new page...',
1374 addPageGenerate: 'Generate',
1375 addPageCancel: 'Cancel',
1376 addPageFailed: 'Failed to add page',
1377 deleteConfirmTitle: 'Delete this page?',
1378 retryFailedPage: 'Regenerate this page',
1379 retryPageGenerating: 'Regenerating page...',
1380 retryPageFailed: 'Failed to regenerate page'
1381 },
1382 pageManagement: {
1383 dragHandle: 'Drag to reorder',
1384 editPageTitle: 'Edit title',
1385 editPageTitleDescription: 'Rename the current page and sync the preview list and history.',
1386 editPageOutline: 'Edit outline',
1387 pageOutlinePlaceholder: 'Enter page outline',
1388 savePageOutline: 'Save outline',
1389 updateOutlineFailed: 'Failed to save page outline',
1390 pageTitleLabel: 'Page title',
1391 pageTitlePlaceholder: 'Enter page title',
1392 pageTitleRequired: 'Please enter a page title',
1393 savePageTitle: 'Save title',
1394 updateTitleFailed: 'Failed to save page title',
1395 deletePage: 'Delete page',
1396 duplicatePage: 'Duplicate page',
1397 deleteConfirmTitle: 'Delete this page?',
1398 deleteConfirmDescription: 'The page will be removed from this presentation.',
1399 deleteConfirmAction: 'Delete',
1400 deleteLastPageError: 'Cannot delete the last page',
1401 reorderFailed: 'Failed to reorder pages',
1402 deleteFailed: 'Failed to delete page',
1403 duplicatePageFailed: 'Failed to duplicate page'
1404 },
1405 editMode: {
1406 addText: 'Plain Text',
1407 defaultText: 'New text',
1408 artText: 'WordArt',
1409 artTextEffect: 'Current effect',
1410 artTextContent: 'Text',
1411 artTextFontSize: 'Font size',
1412 addImage: 'Image',
1413 addVideo: 'Video',
1414 addShape: 'Shape',
1415 addIcon: 'Icon',
1416 shapeRect: 'Rectangle',
1417 shapeRoundedRect: 'Rounded',
1418 shapeEllipse: 'Ellipse',
1419 shapeLine: 'Line',
1420 shapeArrowRight: 'Arrow',
1421 shapeTriangle: 'Triangle',
1422 shapeDiamond: 'Diamond',
1423 shapePentagon: 'Pentagon',
1424 shapeHexagon: 'Hexagon',
1425 shapeParallelogram: 'Parallelogram',
1426 shapeTrapezoid: 'Trapezoid',
1427 shapeStar: 'Star',
1428 shapeChevron: 'Chevron',
1429 iconSectionIcons: 'Icons',
1430 iconSectionNumbers: 'Numbers',
1431 chartBar: 'Bar',
1432 chartLine: 'Line',
1433 chartPie: 'Pie',
1434 chartDoughnut: 'Doughnut',
1435 chartRadar: 'Radar',
1436 chart: 'Chart',
1437 formula: 'Formula',
1438 fromLibrary: 'Choose from Library',
1439 fromLocal: 'Upload from Local',
1440 chooseImage: 'Choose Image',
1441 chooseVideo: 'Choose Video',
1442 assetPickerHint: 'Select an asset then confirm',
1443 loadingAssets: 'Loading...',
1444 noAssets: 'No assets yet. Upload from local first.',
1445 cancel: 'Cancel',
1446 confirmAdd: 'Confirm Add'
1447 },
1448 fonts: {
1449 eyebrow: 'Fonts',
1450 title: 'Font Management',
1451 description:
1452 'Manage locally uploaded fonts. Choose a font scheme on the home page before generating, or let AI auto-match.',
1453 openFolder: 'Open font folder',
1454 upload: 'Upload font',
1455 uploadDialogTitle: 'Upload font',
1456 uploadDialogDescription:
1457 'Only .woff2 format is supported. You can set different weights and styles for each file.',
1458 uploadDialogDownloadPre: 'Visit',
1459 uploadDialogDownloadPost: 'to download free woff2 font files.',
1460 googleFontsHelperLink: 'Google Fonts Helper',
1461 familyName: 'Font family',
1462 familyNamePlaceholder: 'My Brand Sans',
1463 role: 'Usage',
1464 roleBoth: 'Title & Body',
1465 roleTitle: 'Title',
1466 roleBody: 'Body',
1467 roleNone: 'Not set',
1468 scripts: 'Script',
1469 scriptsPlaceholder: 'Select',
1470 scriptsLatin: 'Latin',
1471 scriptsCjk: 'Chinese',
1472 scriptsMixed: 'Mixed',
1473 scriptsNone: 'Not set',
1474 category: 'Category',
1475 categorySans: 'Sans-serif',
1476 categorySerif: 'Serif',
1477 categoryDisplay: 'Display',
1478 categoryHandwriting: 'Handwriting',
1479 categoryMonospace: 'Monospace',
1480 chooseFiles: 'Choose files',
1481 uploadButton: 'Confirm Upload',
1482 removeFile: 'Remove file',
1483 uploadedFonts: 'Uploaded fonts',
1484 fontCount: '{count} font(s)',
1485 loading: 'Loading...',
1486 emptyUpload: 'No fonts uploaded yet. Click the button above to add your brand fonts.',
1487 fileCount: '{count} file(s)',
1488 googleFontsTitle: 'Built-in Google Fonts',
1489 googleFontsDesc: 'Bundled locally. Auto-matched or manually selected during generation.',
1490 loadFailed: 'Failed to load fonts',
1491 chooseFailed: 'Failed to choose font files',
1492 fillFamily: 'Please enter the font family name',
1493 selectFile: 'Please select .woff2 font files',
1494 selectScripts: 'Please select the script',
1495 uploaded: 'Font uploaded',
1496 uploadFailed: 'Font upload failed',
1497 deleted: 'Font deleted',
1498 deleteFailed: 'Failed to delete font',
1499 deleteLabel: 'Delete {family}'
1500 },
1501 thinking: {
1502 homeTitle: 'Start a Presentation',
1503 homeDescription:
1504 'Have a topic or source material ready? Generate a first draft now. Still shaping the idea? Chat first to build the outline.',
1505 quickCreate: 'Quick Create',
1506 quickCreateDescription:
1507 'Already have an outline or clear direction — pick a style, set the page count, and generate an editable draft right away.',
1508 quickCreateBadge: 'Draft fast',
1509 quickCreatePointOne: 'Set topic, pages, and style, with optional source material.',
1510 quickCreatePointTwo: 'Best when you have a direction and want an editable draft quickly.',
1511 startQuickCreate: 'Start generating',
1512 exploreProject: 'Chat to Create',
1513 exploreProjectDescription:
1514 'Still shaping the idea? Chat with AI to refine the outline and page structure, then generate when ready.',
1515 exploreProjectBadge: 'Plan first',
1516 explorePointOne: 'Turn conversation into outline, page structure, and style direction.',
1517 explorePointTwo: 'Upload documents and images as source material.',
1518 startExplore: 'Start chatting',
1519 creatingExplore: 'Creating',
1520 continueExplore: 'Continue your latest chat',
1521 revealWorkspace: 'Show exploration folder',
1522 newWorkspace: 'New chat',
1523 historyTitle: 'History',
1524 historyLoadFailed: 'Failed to load history',
1525 historyEmptyTitle: 'No history yet',
1526 historyEmptyDescription:
1527 'Create a new chat to organize the idea and source material into a generation outline.',
1528 emptyWorkspaceTitle: 'Choose a chat to continue',
1529 emptyWorkspaceDescription:
1530 'Or start a new chat and shape the topic, source material, and page structure from scratch.',
1531 untitledWorkspace: 'Untitled chat',
1532 restoredContextTitle: 'Restored Context',
1533 deleteWorkspace: 'Delete chat',
1534 deleteWorkspaceTitle: 'Delete this history item?',
1535 deleteWorkspaceDescription:
1536 'Delete "{title}"? The related thinking files and source material will be removed permanently.',
1537 deleteWorkspaceDone: 'History item deleted',
1538 deleteWorkspaceFailed: 'Failed to delete history item',
1539 homeNoteOne: 'Use quick create for simple, already-defined tasks.',
1540 homeNoteTwo:
1541 'Use explore for complex material and confirm the outline, page structure, and style direction before generation.',
1542 homeNoteThree: 'Both paths eventually use the same generation flow.',
1543 eyebrow: 'Explore before creating',
1544 title: 'Chat to Create',
1545 description:
1546 'Shape the brief, source material, and page structure through conversation, then generate the deck with 70+ built-in styles, custom styles, Chart.js charts, and anime.js animation.',
1547 chatTitle: 'AI Chat',
1548 thinking: 'Thinking...',
1549 inputPlaceholder: 'Describe the topic and content you want to present...',
1550 welcomeMessage:
1551 'Hi, I can help turn a raw creative idea into a clear content plan.\n\nStart anywhere:\n\n- **Share an idea** and I’ll shape the structure and key points\n- **Upload material** and I’ll pull out what’s useful\n- **Say “generate a creative outline from this”** and I’ll organize the plan before generation\n\nSend over your idea, notes, or direction.',
1552 sourceCount: '{count} sources',
1553 pageCardsTitle: 'Page Outline',
1554 pageCountLabel: '{count} pages',
1555 noPagesYet: 'No pages yet. Start a conversation to build the outline',
1556 noDocumentYet: 'The generation outline has no content yet',
1557 outlineView: 'Outline',
1558 editOutline: 'Edit page outline',
1559 saveOutline: 'Save page outline',
1560 outlineTitle: 'Page title',
1561 outlineObjective: 'Page objective',
1562 outlineSummary: 'Content summary',
1563 outlineKeyPoints: 'Key points',
1564 outlineKeyPointsHint: 'Enter one key point per line',
1565 outlineRequired: 'Complete the title, objective, summary, and key points',
1566 outlineSaved: 'Page outline saved',
1567 outlineSaveFailed: 'Failed to save page outline',
1568 confirmAndGenerate: 'Confirm & Generate',
1569 createFailed: 'Failed to create workspace',
1570 stageCollect: 'Collecting',
1571 stageOutline: 'Outlining',
1572 stageDraft: 'Drafting',
1573 stageRefine: 'Refining',
1574 stageReady: 'Ready',
1575 generationDialogTitle: 'Confirm generation parameters',
1576 generationDialogDescription: 'Confirm the parameters below to start generating',
1577 styleId: 'Style',
1578 fontMode: 'Font',
1579 prepareFailed: 'Failed to prepare generation',
1580 sourceUploaded: 'Source uploaded',
1581 uploadFailed: 'Failed to upload sources',
1582 removeSource: 'Remove source',
1583 removeSourceFailed: 'Failed to remove source',
1584 uploadTooltip:
1585 'Supports .md, .txt, .csv, .docx documents (up to {documentMaxSize}MB each) and .png, .jpg, .webp images (up to {imageMaxSize}MB each)',
1586 sourcePreprocessHint:
1587 'After you send the message, the app will structure the document first, then pass it to AI for outlining.',
1588 needMoreWork: 'Complete the outline before generating'
1589 },
1590 htmlEditor: {
1591 eyebrow: 'Local HTML',
1592 edit: 'Edit',
1593 backToList: 'Back to list',
1594 delete: 'Delete',
1595 emptyTitle: 'Start editing a web page',
1596 emptyHint: 'Choose an HTML file from your computer to begin.',
1597 import: 'Import HTML',
1598 importTooltip: 'Currently supports importing one HTML file at a time.',
1599 thumbnailGenerating: 'Generating preview',
1600 untitled: 'Untitled',
1601 listTitle: 'HTML editor',
1602 searchButton: 'Search HTML files',
1603 searchPlaceholder: 'Search by file name or path',
1604 clearSearch: 'Clear search',
1605 noSearchResultsTitle: 'No matching HTML files',
1606 noSearchResultsDescription: 'Try another file name or path keyword.',
1607 removeFromLibraryTitle: 'Remove from the document library?',
1608 removeFromLibraryDescription:
1609 'This removes the database record for "{name}". The HTML file stays on your computer.',
1610 removedFromLibrary: 'Removed from the document library',
1611 removeFromLibraryFailed: 'Unable to remove the document. Please try again.',
1612 undo: 'Undo',
1613 redo: 'Redo',
1614 discard: 'Discard changes',
1615 save: 'Save',
1616 export: 'Export',
1617 revealFile: 'Show file',
1618 revealFileFailed: 'Unable to show the current HTML file',
1619 preview: 'Preview in browser',
1620 history: 'Version history',
1621 historyEmpty: 'No versions yet',
1622 restore: 'Restore',
1623 discardAll: 'Discard all changes',
1624 exported: 'Exported',
1625 insertText: 'Text',
1626 insertArtText: 'Art text',
1627 insertShape: 'Shape',
1628 insertIcon: 'Icon',
1629 insertChart: 'Chart',
1630 insertImage: 'Insert image',
1631 insertVideo: 'Insert video',
1632 mediaSourceHint: 'Choose from the local media library or enter an accessible external URL.',
1633 mediaSourceLocal: 'Local file',
1634 mediaSourceExternal: 'External URL',
1635 mediaLibrary: 'Local media',
1636 localMediaHint:
1637 "Uploaded files remain in this HTML document's assets directory and can be reused.",
1638 chooseMediaFile: 'Upload local file',
1639 mediaLibraryEmpty: 'No local media yet',
1640 mediaUrlPlaceholder: 'https://example.com/media',
1641 invalidMediaUrl: 'Enter a valid http or https URL.',
1642 insertMediaFailed:
1643 'Unable to insert into the canvas. Please wait for the page to finish loading and try again.',
1644 insertMedia: 'Insert',
1645 insertFormula: 'Formula',
1646 copyElement: 'Copy element',
1647 selectToEdit: 'Select an element to edit its properties',
1648 retry: 'Retry',
1649 aiMode: 'Inspect element',
1650 aiModeButton: 'AI mode',
1651 closeAiMode: 'Close inspect mode',
1652 aiInspectHint: 'Select an element and let AI assist with its redesign',
1653 aiSelectHint:
1654 'Optionally select an element to attach its context; otherwise AI analyzes the whole page.',
1655 selectedElement: 'Inspected element',
1656 clearSelectedElement: 'Clear inspected element',
1657 aiEmpty: 'Ask AI to analyze the whole page, or select an element for a targeted redesign.',
1658 aiThinking: 'AI is thinking...',
1659 aiPlaceholder: 'Describe how you want to redesign this element...',
1660 aiSelectedContext: 'Inspected element attached',
1661 aiDocumentContext: 'Current HTML document',
1662 aiSend: 'Send redesign request',
1663 aiClearConversation: 'Clear conversation',
1664 aiFailed: 'AI request failed. Please try again.',
1665 aiPlanTitle: 'AI-identified redesign plan',
1666 aiIntent: 'Detected intent',
1667 aiIntentInspect: 'Inspect element',
1668 aiIntentRedesign: 'Assist with redesign',
1669 aiIntentStyle: 'Style redesign',
1670 aiIntentLayout: 'Layout redesign',
1671 aiIntentContent: 'Content redesign',
1672 aiIntentOther: 'Other request'
1673 }
1674 } satisfies DeepStringShape<typeof zh>
1675
1675 lines TYPESCRIPT