返回 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 proxyUsernameLabel: 'Proxy username',
538 proxyUsernamePlaceholder: 'Optional, proxy auth username',
539 proxyPasswordLabel: 'Proxy password',
540 proxyPasswordPlaceholder: 'Optional, proxy auth password',
541 proxyNoProxyLabel: 'Addresses bypassing the proxy',
542 proxyNoProxyPlaceholder: 'e.g. localhost,127.0.0.1,*.corp.internal,10.0.0.0/8',
543 proxyNoProxyHint:
544 'Comma separated. Matching hosts (e.g. intranet model services) connect directly without the proxy. Supports hostnames (subdomains included), IPs, and CIDR ranges; * bypasses everything.',
545 proxySavedDescription: 'Proxy settings saved. Takes effect immediately.',
546 fetchModels: 'Fetch models',
547 fetchingModels: 'Fetching...',
548 fetchModelsSuccess: 'Fetched {count} models',
549 fetchModelsSuccessDescription: 'Pick a model from the list to avoid typos',
550 fetchModelsFailed: 'Failed to fetch the model list',
551 modelListSearchPlaceholder: 'Search models...',
552 modelListEmpty: 'No matching models',
553 modelPickerLabel: 'Pick a model'
554 },
555 styles: {
556 eyebrow: 'Style Lab',
557 title: 'Style management',
558 description:
559 'Built-in 70+ styles. Import PPTX, HTML, images, and more to auto-extract styles, or create your own from scratch.',
560 refresh: 'Refresh',
561 newStyle: 'New style',
562 newStyleTooltip: 'Create a new custom style template',
563 importMenu: 'Import Style',
564 importMenuTooltip: 'Import a packaged style ZIP or a style folder.',
565 officialSkillLabel: 'Official style skill: arcsin1/style-generate-skill',
566 supportsImageGeneration: 'Image generation',
567 importPackage: 'Import Style ZIP',
568 importPackageTooltip: 'Import a packaged style ZIP.',
569 importPackageDirectory: 'Import Style Folder',
570 importPackageDirectoryTooltip:
571 'Import a style folder containing only style.json, SKILL.md, and preview.html.',
572 importingPackage: 'Importing...',
573 exportPackage: 'Export ZIP',
574 exportPackageTooltip: 'Export this style as a portable ZIP package',
575 packageZipRequired: 'Choose a .zip style package',
576 packageImported: 'Style package imported',
577 packageImportFailed: 'Failed to import style package',
578 packageExported: 'Style package exported',
579 packageExportFailed: 'Failed to export style package',
580 generatePreview: 'Generate preview',
581 generatePreviewTooltip: 'Generate a visual preview cover for this style',
582 generatingPreview: 'Generating...',
583 previewTooltip: 'View this style preview',
584 editTooltip: 'Edit this style name, description, and prompt',
585 deleteTooltip: 'Delete this style after a confirmation',
586 previewGenerated: 'Preview generated',
587 previewGenerationFailed: 'Failed to generate preview',
588 refreshed: 'Style list refreshed',
589 refreshedDescription: '{count} styles total',
590 loadFailed: 'Failed to load styles',
591 sourceBuiltin: 'builtin',
592 deleted: 'Style deleted',
593 deleteFailed: 'Failed to delete style',
594 deleteConfirmTitle: 'Delete this style?',
595 deleteConfirmDescription:
596 '“{name}” will be removed from the style list. This cannot be undone.',
597 styleCaseFilter: 'Filter by use case',
598 allStyleCases: 'All',
599 noMatchingStyles: 'No styles match this use case',
600 searchPlaceholder: 'Search by name or use case…',
601 clearSearch: 'Clear search',
602 aiRecommend: 'AI Recommend',
603 aiRecommending: 'Recommending…',
604 aiRecommendationTopicRequired: 'Enter a topic first',
605 aiRecommendationFailed: 'AI recommendation failed. Try again.',
606 clearRecommendation: 'Show all styles',
607 favoriteStyles: 'Favorites',
608 favoriteStyle: 'Favorite style',
609 unfavoriteStyle: 'Remove favorite',
610 favoriteStyleTooltip: 'Favorite this style',
611 unfavoriteStyleTooltip: 'Remove this style from favorites',
612 favoriteFailed: 'Failed to update favorite',
613 noFavoriteStyles: 'No favorite styles yet',
614 pagesCount: 'Pages · {count}'
615 },
616 styleEditor: {
617 eyebrow: 'Style Editor',
618 newStyle: 'New style',
619 createTitle: 'Create your style',
620 editTitle: 'Edit style',
621 backToList: 'Back to list',
622 loading: 'Loading style content...',
623 defaultLabel: 'My style',
624 defaultDescription: 'Custom style',
625 defaultCategory: 'Custom',
626 detailLoadFailed: 'Failed to load style details',
627 invalidStyleId: 'Invalid styleId',
628 backAndRetry: 'Go back to the list and try again',
629 fillName: 'Enter a name first',
630 fillPrompt: 'Enter a style prompt first',
631 saved: 'Style saved',
632 savedOverride: 'Saved as a built-in style override',
633 savedCustom: 'Custom style updated',
634 saveFailed: 'Save failed',
635 importStyle: 'Import and parse',
636 importImage: 'Import image and parse',
637 importing: 'Parsing...',
638 importHint:
639 'Import files, PPTX, or images to extract style: .md/.txt/.html (≤{textMaxSize}MB), .pptx (≤{pptxMaxSize}MB), images (≤{imageMaxSize}MB).',
640 importSuccess: 'Style imported and parsed',
641 importFailed: 'Failed to import style',
642 imageFormatInvalidTitle: 'Unsupported image format',
643 imageFormatInvalid: 'Only PNG / JPEG / WEBP images are supported.',
644 imageReadFailed: 'Failed to read image. Please reselect and try again.',
645 fileTooLargeTitle: 'File too large',
646 fileTooLarge: 'A single style file must be under {maxSize}MB.',
647 filePathFailedTitle: 'Cannot read file path',
648 filePathFailed: 'Please choose a local style file again.',
649 deleted: 'Style deleted',
650 deleteFailed: 'Delete failed',
651 name: 'Name',
652 descriptionLabel: 'Description',
653 descriptionPlaceholder: 'Describe this style in one sentence',
654 styleCaseLabel: 'Use cases',
655 styleCasePlaceholder: 'Example: tech talks, product launches, education, annual summaries',
656 writingTips: 'Style Skill writing tips',
657 skillMarkdown: 'Skill Markdown',
658 tipStructure:
659 "Describe the overall mood in flowing prose first, then details. Don't write a cold spec doc.",
660 tipAnimation:
661 'Weave colors into emotional descriptions (e.g. "warm light blue"), list specific imagery (paper boats, umbrellas, clouds).',
662 tipNatural:
663 'Describe fonts by their character (handwritten, rounded, warm) — not just family names or specs.',
664 tipReadable:
665 'State the target audience and use case (e.g. "youth mental health PPT") so the model understands context.',
666 promptReferenceTitle: 'Style Extraction Prompt Reference',
667 promptReferenceSubtitle: '(can be used for generation elsewhere)',
668 promptRef1:
669 'Open with a natural-language paragraph describing the overall visual mood, e.g. "clean, bright, light-toned with generous whitespace"',
670 promptRef2:
671 '## Colors: List primary, background, text colors with hex values, e.g. "background #FFFFFF, text dark gray #1F2937"',
672 promptRef3:
673 '## Typography: Describe font style, weight, size hierarchy, line height, e.g. "bold sans-serif titles, regular body, line height 1.6+"',
674 promptRef4:
675 '## Layout: Specify alignment, information hierarchy, whitespace and density, e.g. "modular sections, centered or left-aligned, moderate density"',
676 promptRef5:
677 '## Animation: Describe entrance animations with public data-anim values, duration, easing, e.g. "fade or gentle slide-up, 0.4s–0.6s, ease-out"',
678 promptRef6:
679 '## Use case: Define target audience and scenario, e.g. "business reports, product intros, project summaries — formal but not dull"',
680 promptRef7:
681 '## Avoid: List elements to avoid, e.g. "no high-saturation clashing colors, no heavy gradients and shadows"',
682 emptyMarkdown: '_No Markdown content_',
683 saveStyle: 'Save style',
684 currentMode: 'Current mode: {mode}',
685 builtinMode: 'Built-in (saving creates an override)',
686 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.
687
688 ## Colors
689 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.
690
691 ## Typography
692 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.
693
694 ## Layout
695 Clear modular structure, content centered or left-aligned. Hierarchy established through font size, color, and spacing. Generous whitespace, moderate information density per slide.
696
697 ## Animation
698 Calm and subtle rhythm. Elements fade in or gently slide up over 0.4s–0.6s with ease-out easing. Avoid flashy transitions.
699
700 ## Suitable for
701 Business presentations, product introductions, project summaries — formal but not stiff.
702
703 ## Avoid
704 - Do not use high-saturation colors
705 - Do not stack heavy gradients and shadows
706 - Do not create flickering or large-scale shaking animations`
707 },
708 generating: {
709 stages: {
710 preflight: 'Prepare',
711 planning: 'Plan',
712 rendering: 'Generate',
713 validation: 'Validate'
714 },
715 created: 'Understanding request',
716 currentSession: 'Current session',
717 defaultPrompt: 'Create a clear first draft that can be previewed directly.',
718 pageDetail: 'Page {pageNumber}: {title}',
719 completed: 'Completed',
720 failedRetryOrBack: 'Failed',
721 stillRunning: 'Generating pages',
722 started: 'Generating pages',
723 queued: 'Queued',
724 failed: 'Failed',
725 previousFailed: 'The previous generation for this session failed. You can retry directly.',
726 keptFailed: 'Failed',
727 resumed: 'Generating pages',
728 incompleteSome:
729 'Session incomplete: {generated}/{total} pages finished. Continue generating the remaining pages.',
730 continueRemainingEvent: 'Retrying',
731 incompleteNone: 'Session incomplete: 0/{total} pages finished. Please regenerate.',
732 noValidPagesEvent: 'Failed',
733 backHome: 'Back home',
734 title: 'AI is generating your presentation',
735 expandLog: 'Expand log panel',
736 collapseLog: 'Collapse log panel',
737 logTitle: 'Progress log',
738 progress: 'Progress',
739 growing: 'Generating pages',
740 eyebrow: 'Generating',
741 interrupted: 'Interrupted',
742 cancelGeneration: 'Cancel',
743 failedRetry: 'Generation failed. Please retry.',
744 continueRemaining: 'Continue remaining pages',
745 backToSessions: 'Back to sessions',
746 regenerate: 'Regenerate',
747 enterEditor: 'Enter Editor to Fix'
748 },
749 sessionDetail: {
750 sessionFallback: 'Session',
751 master: 'Master',
752 masterTitle: 'Slide Master',
753 masterDescription: 'Override linked slide backgrounds and fonts.',
754 masterStyle: 'Style master',
755 masterStyleTitle: 'Style master',
756 masterGlobalElements: 'Global elements',
757 masterLayoutLibrary: 'Layout master',
758 layoutMasterTitle: 'Layout master',
759 layoutMasterDescription: 'Choose a default composition for each slide intent.',
760 layoutMasterIntentCover: 'Cover / section',
761 layoutMasterIntentData: 'Data focus',
762 layoutMasterIntentComparison: 'Comparison',
763 layoutMasterIntentTimeline: 'Timeline',
764 layoutMasterIntentConcept: 'Content / concept',
765 layoutMasterIntentProcess: 'Process',
766 layoutMasterIntentSummary: 'Summary / closing',
767 layoutMasterIntentQuote: 'Quote',
768 layoutMasterIntentImage: 'Image focus',
769 layoutMasterReset: 'Restore defaults',
770 layoutMasterSave: 'Save layout mapping',
771 layoutMasterSaved: 'Layout mapping saved for future generated slides',
772 layoutMasterLoadFailed: 'Failed to load layout master',
773 layoutMasterSaveFailed: 'Failed to save layout master',
774 masterElementsTitle: 'Global elements',
775 masterElementsDescription: 'Place a shared logo, footer, page number, and watermark.',
776 masterOverrideBackground: 'Override existing slide backgrounds',
777 masterBackground: 'Slide background',
778 masterBackgroundStyle: 'Background style',
779 masterBackgroundSolid: 'Solid',
780 masterBackgroundGradient: 'Gradient',
781 masterBackgroundImage: 'Image',
782 masterBackgroundImageChoose: 'Choose from library',
783 masterBackgroundImageUpload: 'Upload image',
784 masterBackgroundImageClear: 'Remove image',
785 masterBackgroundImageEmpty: 'Choose a background image',
786 masterBackgroundImageUploadFailed: 'Failed to upload background image',
787 masterGradientPreview: 'Gradient preview',
788 masterGradientConfigure: 'Edit gradient',
789 masterGradientEditorTitle: 'Gradient background',
790 masterGradientEditorDescription: 'Adjust the gradient type, angle, and color stops.',
791 masterGradientType: 'Gradient type',
792 masterGradientLinear: 'Linear',
793 masterGradientRadial: 'Radial',
794 masterGradientAngle: 'Gradient angle',
795 masterGradientPresets: 'Color presets',
796 masterGradientStops: 'Color stops',
797 masterGradientStop: 'Stop {position}%',
798 masterGradientStopColor: 'Stop color',
799 masterGradientAddStop: 'Add color stop',
800 masterGradientRemoveStop: 'Remove color stop',
801 masterGradientConfirm: 'Confirm gradient',
802 masterTitleFont: 'Title font',
803 masterBodyFont: 'Body font',
804 masterTitleFontSize: 'Title font size',
805 masterBodyFontSize: 'Body font size',
806 masterFontSizeInherit: 'Inherit',
807 masterFontInherit: 'Inherit page font',
808 masterFontInheritWithFamily: 'Current: {family}',
809 masterFontSans: 'Sans serif',
810 masterFontSerif: 'Serif',
811 masterFontMono: 'Monospace',
812 masterPageCounts: '{linked} linked, {unlinked} unlinked, {missing} missing.',
813 masterUnlinkedHint:
814 '{count} slide(s) are unlinked. Saving automatically links and applies the master.',
815 masterReset: 'Reset',
816 masterSaveAndApply: 'Save and apply',
817 masterSaved: 'Master saved and applied to all slides',
818 masterLoadFailed: 'Failed to load master',
819 masterSaveFailed: 'Failed to save master',
820 masterElementsReset: 'Reset elements',
821 masterElementLogo: 'Logo',
822 masterLogoEmpty: 'No logo selected',
823 masterLogoChoose: 'Choose logo from library',
824 masterLogoUpload: 'Upload logo',
825 masterLogoClear: 'Remove logo',
826 masterLogoUploadFailed: 'Failed to upload logo',
827 masterFooter: 'Footer',
828 masterWatermark: 'Watermark',
829 masterElementVisible: 'Show',
830 masterElementFontSize: 'Font size',
831 masterElementColor: 'Text color',
832 masterWatermarkRotation: 'Watermark rotation',
833 masterShowPageNumber: 'Show page number',
834 masterHideElementsOnSlide: 'Hide global elements on this slide',
835 masterPageOverrideFailed: 'Failed to update slide master setting',
836 current: 'Current',
837 pagesCount: 'Pages · {count}',
838 pageTab: 'Pages',
839 outlineTab: 'Outline',
840 pageNumber: 'Page {pageNumber}',
841 pagesEmpty: 'No pages yet',
842 outlineEmpty: 'No outline yet',
843 copyOutline: 'Copy outline',
844 outlineCopied: 'Copied',
845 downloadAllOutlines: 'Download all outlines',
846 outlinesExported: 'Outline export succeeded',
847 backToSessions: 'Back to sessions',
848 toolbarExport: 'Export',
849 toolbarMore: 'More',
850 toolbarExportPptxEditable: 'Editable PPTX',
851 toolbarExportPptxImageOnly: 'Image PPTX',
852 toolbarExportPng: 'PNG Image',
853 toolbarExportLongImage: 'PNG Long Image',
854 toolbarExportVideo: 'MP4 Video',
855 toolbarExportPdf: 'PDF File',
856 toolbarExportSlidePack: 'Slide Pack',
857 toolbarExportSlidePackDesc: 'Standalone preview pack',
858 toolbarExportSessionZip: 'Session ZIP',
859 toolbarExportSessionZipDesc: 'Full session directory archive',
860 exportPptx: 'Export PPTX',
861 exportSinglePagePptx: 'Export this slide as editable or image PPTX',
862 exportImagePdf: 'Export Image/PDF',
863 exportPng: 'Export PNG',
864 exportPdf: 'Export PDF',
865 speechScript: 'Speaker Notes',
866 speechScriptTooltip: 'Generate speaker notes from slide content',
867 speechScriptTabConfig: 'Settings',
868 speechScriptTabResult: 'Result',
869 speechScriptScope: 'Scope',
870 speechScriptScopeAll: 'All',
871 speechScriptScopeAllDesc: 'All slides',
872 speechScriptScopeSingle: 'Single',
873 speechScriptScopeSingleDesc: 'Current slide',
874 speechScriptDialogTitle: 'Speaker Notes',
875 speechScriptCopy: 'Copy',
876 speechScriptCopied: 'Copied',
877 speechScriptEmptyHint: 'Click the button above to generate',
878 speechScriptViewFile: 'View file',
879 speechScriptError: 'Failed to generate speaker notes, please try again',
880 speechScriptGenerate: 'Generate',
881 speechScriptRegenerate: 'Regenerate',
882 speechScriptLength: 'Length',
883 speechScriptLengthShort: 'Brief',
884 speechScriptLengthShortDesc: '~1 min per slide',
885 speechScriptLengthMedium: 'Standard',
886 speechScriptLengthMediumDesc: '~2 min per slide',
887 speechScriptLengthLong: 'Detailed',
888 speechScriptLengthLongDesc: '~3 min per slide',
889 speechScriptStyle: 'Style',
890 speechScriptStyleFormal: 'Formal',
891 speechScriptStyleConversational: 'Conversational',
892 speechScriptStyleStorytelling: 'Storytelling',
893 speechScriptStyleCustom: 'Custom',
894 speechScriptStyleCustomPlaceholder:
895 'Describe the style you want, e.g. humorous and engaging, use lots of analogies and examples...',
896 speechScriptGenerating: 'Generating slide {current} of {total}',
897 speechScriptGeneratingSingle: 'Generating slide {pageNumber}',
898 speechScriptGeneratingInit: 'Preparing...',
899 preview: 'Browser Preview',
900 previewTooltip: 'Open in browser — works independently outside the app',
901 present: 'Present',
902 presentTooltip: 'Fullscreen presentation, arrow keys or mouse wheel to navigate, Esc to exit',
903 saveAsNewSession: 'Save as New Session',
904 saveAsNewSessionDefaultName: '{title} Copy',
905 saveAsNewSessionDialogTitle: 'Save as New Session',
906 saveAsNewSessionDialogDescription:
907 'Copies the current session pages and assets into an independent new session. Chat records and version history are not copied.',
908 saveAsNewSessionNameLabel: 'New session name',
909 saveAsNewSessionNamePlaceholder: 'Enter a new session name',
910 saveAsNewSessionSaving: 'Saving...',
911 saveAsNewSessionConfirm: 'Save as New Session',
912 saveAsNewSessionSuccess: 'Saved as new session',
913 saveAsNewSessionFailed: 'Failed to save as new session',
914 saveAsNewSessionTitleRequired: 'Enter a new session name',
915 saveTemplate: 'Save as Template',
916 saveTemplateTooltip: 'Save this presentation as a template',
917 revealFile: 'Show source file',
918 collapseMessages: 'Collapse message panel',
919 expandMessages: 'Expand message panel',
920 chatMode: 'Chat',
921 imageMode: 'Image',
922 messageTitle: 'Messages and input',
923 context: 'Context',
924 contextPlaceholder: 'Select context',
925 currentPage: 'Current page',
926 mainSession: 'Main session',
927 pageContext: 'Current page · P{pageNumber}',
928 mainContext: 'Main session',
929 assetPlaceholder:
930 'Describe how to use these assets, for example: use the first image as the cover background.',
931 pagePlaceholder:
932 'Current-page mode only edits this page. You can use Inspect to select an element, then ask to adjust color or font size.',
933 mainPlaceholder:
934 'Main-session mode: describe changes for the deck pages, such as unifying title styles, changing all backgrounds, or rearranging specific pages.',
935 mainDisabledPlaceholder:
936 'Main-session sending is disabled. Switch Context to Current page first.',
937 emptyMessages: 'No creative messages yet',
938 activityTitle: 'Edit progress',
939 activityDescription: 'Follow page edits, retries, and completion in real time.',
940 activityProcessing: 'Processing edit task',
941 activityCancelling: 'Cancelling and restoring the previous content',
942 pageEditPlanning: 'Understanding this slide edit request',
943 pageEditPlanTitle: 'Edit plan',
944 pageEditPlanConfirm: 'Confirm and edit',
945 pageEditPlanCancel: 'Cancel plan',
946 pageEditPlanRequiresSavedEdits:
947 'Save or discard unsaved adjustments on this slide before confirming the AI edit plan.',
948 pageEditPlanReturnToTarget: 'Return to the slide for this plan before confirming it.',
949 pageEditPlanWaitForJob:
950 'Another slide edit is still running. Finish it before running this plan.',
951 pageEditOtherPageBusy:
952 'AI is editing another slide. You can keep browsing and editing manually, then send a new AI edit when it finishes.',
953 pageEditAssessmentBusy:
954 'Another slide request is being assessed or awaiting confirmation. Resolve it before sending a new one.',
955 activityCompleted: 'Edit completed',
956 activityPartialCompleted: 'Edit completed with {count} failed slide(s)',
957 activityRunFailed: 'Edit task failed',
958 activityPageFailed: 'Slide {page} failed: {title}',
959 activityPageContext: 'Slide {page}: {title}',
960 activityUnknownError: 'No failure reason was returned. Retry or check the main-process log.',
961 activityStatusRunning: 'Generating',
962 activityStatusCompleted: 'Completed',
963 activityStatusCancelled: 'Cancelled',
964 activityStatusFailed: 'Failed',
965 selectorBadge: 'SELECTOR',
966 clearSelector: 'Clear selector',
967 selectorPropertiesReady: '{count} properties read',
968 mainDeckHint: 'Main session edits one or more pages from your instruction.',
969 mainPageScopeAll: 'All pages',
970 mainPageScopeCount: '{count} pages',
971 mainPageScopeMessagePrefix: 'Page scope: {pages}',
972 mainPageScopeConflictWarning:
973 'Specific pages are selected, so this run will only edit those pages. Switch back to All pages to edit the full deck.',
974 mainPageScopeLimitReached: 'You can select at most {count} pages at a time.',
975 mainPageScopeAllLimitReached:
976 'This deck has {count} pages. Select at most {limit} specific pages before editing.',
977 mainPageScopeNotFound:
978 'No matching slide was found in the instruction. Check the slide number or select a scope first.',
979 mainPageStructureUnsupported:
980 'Main-session chat cannot add, delete, or reorder slides yet. Use the slide tools on the left.',
981 mainDisabled:
982 'Main-session sending is disabled. Switch Context to Current page before editing.',
983 removeAsset: 'Remove asset',
984 addAsset: 'Add asset',
985 chooseImage: 'Choose image',
986 chooseVideo: 'Choose video',
987 chooseFileSoon: 'Choose file (soon)',
988 stop: 'Stop',
989 send: 'Send',
990 imageModelPlaceholder: 'Select image model',
991 imageModelRequiredHint: 'Configure an image model in Settings first.',
992 imagePromptPlaceholder:
993 'Describe the image to generate, or click "Outline prompt" to fill a prompt from the current page.',
994 imagePromptFromOutline: 'Outline prompt',
995 imagePromptFromCurrentPage: 'Style prompt',
996 imagePromptGenerating: 'Generating visual...',
997 imagePromptGenerated: 'Visual description generated',
998 imagePromptGenerateFailed: 'Failed to generate visual description',
999 imagePromptRequired: 'Enter an image prompt first',
1000 generateImage: 'Generate image',
1001 imageGenerating: 'Generating image...',
1002 imageGenerated: 'Image generated',
1003 imageGeneratedDescription: 'Generated {count} image(s)',
1004 imageGenerateFailed: 'Failed to generate image',
1005 imageHistoryLoadFailed: 'Failed to load image history',
1006 autoImageInProgress: 'Finalizing the automatic illustration for this slide.',
1007 autoImageDegraded: 'The illustration failed; the fallback layout was kept.',
1008 autoImageLayoutFailed: 'The generated image was not adopted by the current layout.',
1009 autoImageCancelled: 'The automatic illustration was cancelled; the original layout was kept.',
1010 autoImageRetry: 'Retry illustration',
1011 autoImageRetryStarted: 'Retrying failed illustration',
1012 autoImageRetryFailed: 'Failed to retry illustration',
1013 imageResultEmpty: 'No generated images yet',
1014 imagePreviewTitle: 'Image preview',
1015 imagePreviewOpen: 'Open larger preview',
1016 addImageToCanvas: 'Add to canvas',
1017 imageAddedToCanvas: 'Image added to canvas',
1018 setImageAsBackground: 'Set as background',
1019 imageSetAsBackground: 'Image set as background',
1020 imageOptions: 'Model + settings',
1021 imageConfigButton: 'Model + settings',
1022 imageConfigTitle: 'Model and settings',
1023 imageSizeLabel: 'Ratio',
1024 imageCountLabel: 'Count',
1025 imageOutlinePromptIntro: 'Generate one presentation-ready visual asset for the current slide.',
1026 imageOutlineTitle: 'Slide title',
1027 imageOutlineContent: 'Slide outline',
1028 imageOutlineConstraints:
1029 '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.',
1030 editText: 'Edit text',
1031 exitTextEdit: 'Exit edit',
1032 previewMode: 'Preview',
1033 browseMode: 'Browse',
1034 browseRequiresSavedEdits: 'Save or discard unsaved edits before entering Browse.',
1035 pageSwitchSaveConfirmTitle: 'Save current page edits first?',
1036 pageSwitchSaveConfirmDescription:
1037 'Save unsaved edits on the current page before switching to “{page}”.',
1038 pageSwitchSaveConfirmAction: 'Save and switch',
1039 workspaceSwitchSaveConfirmTitle: 'Save current page edits first?',
1040 workspaceSwitchSaveConfirmDescription:
1041 'Save unsaved edits on the current page before switching to “{mode}”.',
1042 workspaceSwitchSaveConfirmAction: 'Save and switch',
1043 styleMode: 'Style',
1044 styleRequiresSavedEdits: 'Save or discard unsaved edits before switching styles.',
1045 styleTitle: 'Switch deck style',
1046 styleDescription:
1047 'Redraw every slide while preserving its original text and data, with a newly designed visual layout.',
1048 styleLoading: 'Loading styles...',
1049 styleLoadFailed: 'Failed to load styles',
1050 currentStyle: 'Current style',
1051 styleSwitching: 'Switching',
1052 styleSwitchCompleted: 'Style switched',
1053 styleSwitchFailed: 'Failed to switch style',
1054 styleSwitchCancelFailed: 'Failed to cancel style switch',
1055 styleSwitchConfirmTitle: 'Switch the entire deck style?',
1056 styleSwitchConfirmDescription:
1057 'All slides will be redrawn using “{style}”. Each slide keeps its original text and data, while its layout and visual structure may be redesigned.',
1058 styleSwitchConfirmAction: 'Switch style',
1059 styleSwitchPartial: '{count} slides still failed. Retry only those slides.',
1060 styleSwitchRetry: 'Retry failed slides',
1061 styleSwitchRetrying: 'Retrying',
1062 activityRetryFailedPages: 'Retry failed slides ({count})',
1063 activityRetrying: 'Retrying failed slides',
1064 activityRetryFailed: 'Failed to retry slides',
1065 editMode: 'Edit',
1066 animationTab: 'Animation',
1067 indexTransitionLabel: 'Page transition',
1068 elementAnimationLabel: 'Element animation',
1069 elementAnimationPreview: 'Preview slide',
1070 elementAnimationSelectTarget: 'Select an element',
1071 elementAnimationSelectTargetTitle: 'Select an element on the canvas',
1072 elementAnimationSelectTargetHint:
1073 'Then choose an entrance, emphasis, or exit animation for that element.',
1074 elementAnimationCategoryEntrance: 'Entrance',
1075 elementAnimationCategoryEmphasis: 'Emphasis',
1076 elementAnimationCategoryExit: 'Exit',
1077 elementAnimationClearFirstHint:
1078 'This element already has an animation. Click "None" to clear it before switching types.',
1079 elementAnimationTriggerAuto: 'Auto',
1080 elementAnimationTriggerClick: 'Click',
1081 elementAnimationDuration: 'Duration',
1082 elementAnimationDurationFast: 'Fast 360ms',
1083 elementAnimationDurationStandard: 'Standard 600ms',
1084 elementAnimationDurationSlow: 'Gentle 900ms',
1085 elementAnimationDurationCustom: 'Custom {duration}ms',
1086 elementAnimationDirection: 'Direction',
1087 elementAnimationDirectionLeft: 'From left',
1088 elementAnimationDirectionRight: 'From right',
1089 elementAnimationDirectionTop: 'From top',
1090 elementAnimationDirectionBottom: 'From bottom',
1091 elementAnimationAdvancedPath: 'Advanced path animation',
1092 elementAnimationExitFade: 'Fade out',
1093 elementAnimationExitScale: 'Scale out',
1094 elementAnimationExitZoom: 'Zoom out',
1095 elementAnimationExitWipe: 'Wipe out',
1096 elementAnimationExitFly: 'Fly out',
1097 elementAnimationSaved: 'Element animation updated',
1098 elementAnimationLoadFailed: 'Failed to load element animation',
1099 elementAnimationSaveFailed: 'Failed to save element animation',
1100 indexTransitionNone: 'None',
1101 indexTransitionFade: 'Fade',
1102 indexTransitionSlideLeft: 'Slide left',
1103 indexTransitionSlideUp: 'Slide up',
1104 indexTransitionPush: 'Push',
1105 indexTransitionWipe: 'Wipe',
1106 indexTransitionZoom: 'Zoom',
1107 indexTransitionFlip: 'Flip',
1108 indexTransitionStack: 'Stack',
1109 indexTransitionRotate: 'Rotate',
1110 indexTransitionCube: 'Cube',
1111 indexTransitionCoverFlow: 'Cover Flow',
1112 indexTransitionBlur: 'Blur',
1113 indexTransitionIris: 'Iris',
1114 indexTransitionSwing: 'Swing',
1115 indexTransitionCenterReveal: 'Center reveal',
1116 indexTransitionSaved: 'Page transition updated',
1117 indexTransitionLoadFailed: 'Failed to load page transition',
1118 indexTransitionSaveFailed: 'Failed to save page transition',
1119 saveCurrentPage: 'Save page',
1120 saveCurrentPageTooltip: 'Save edits on the current page and write a version history entry',
1121 exitEditMode: 'Exit Edit Mode',
1122 elementInspector: 'Inspector',
1123 noElementSelected: 'No element selected',
1124 closeInspector: 'Close inspector',
1125 closeSpeechDrawer: 'Close speech script panel',
1126 textContent: 'Text',
1127 formulaContent: 'Formula',
1128 formulaDisplayMode: 'Display on its own line',
1129 formulaPreview: 'Preview',
1130 formulaPreviewEmpty: 'Enter LaTeX to preview',
1131 chartContent: 'Chart data',
1132 chartType: 'Chart type',
1133 chartTitle: 'Title',
1134 chartLabels: 'X axis',
1135 chartValues: 'Y axis',
1136 chartData: 'Data',
1137 chartImportData: 'Import',
1138 chartImportDataTooltip:
1139 '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.',
1140 chartImportDataFailed: 'Failed to import data',
1141 chartDataPlaceholder:
1142 '[\n { "x": "Q1", "Revenue": 24, "Profit": 8 },\n { "x": "Q2", "Revenue": 36, "Profit": 0 }\n]',
1143 chartPrimaryColor: 'Primary color',
1144 chartAccentColor: 'Accent color',
1145 chartTextColor: 'Text color',
1146 chartSmoothLine: 'Smooth line',
1147 chartHorizontal: 'Horizontal',
1148 chartStacked: 'Stacked',
1149 chartAreaFill: 'Area fill',
1150 chartShowPoints: 'Show points',
1151 chartShowLegend: 'Show legend',
1152 chartDoughnutCutout: 'Cutout size',
1153 chartRadarFill: 'Area fill',
1154 textColor: 'Color',
1155 textStyle: 'Text style',
1156 textAlign: 'Text alignment',
1157 alignLeft: 'Align left',
1158 alignCenter: 'Align center',
1159 alignRight: 'Align right',
1160 alignJustify: 'Justify',
1161 fontSize: 'Size',
1162 fontWeight: 'Weight',
1163 appearance: 'Appearance',
1164 opacity: 'Opacity',
1165 backgroundColor: 'Background',
1166 visualColor: 'Color',
1167 media: 'Media',
1168 objectFit: 'Object fit',
1169 alt: 'Alt text',
1170 poster: 'Poster',
1171 controls: 'Controls',
1172 muted: 'Muted',
1173 loop: 'Loop',
1174 autoplay: 'Autoplay',
1175 playsInline: 'Inline',
1176 preload: 'Preload',
1177 decrease: 'Decrease',
1178 increase: 'Increase',
1179 cancel: 'Cancel',
1180 save: 'Save',
1181 selectTextElementHint: 'Click a text element on the page to edit content and style here.',
1182 exitWithoutSaving: 'Exit editing',
1183 exitAdjust: 'Exit adjustment',
1184 adjustLayout: 'Adjust position/size',
1185 zIndex: 'Layer order',
1186 zIndexNegativeHint:
1187 'Negative layers sit behind content. Hold Alt / Option to click or drag them.',
1188 saveAdjustments: 'Save adjustments',
1189 copyElement: 'Copy',
1190 copyElementFailed: 'Failed to copy element',
1191 applyElementToAllPages: 'Apply to all pages',
1192 syncElementApplying: 'Applying...',
1193 syncElementApplied: 'Applied to {count} page(s)',
1194 syncElementFailed: 'Failed to apply to all pages',
1195 syncElementReadFailed: 'Could not read the current element. Select it again and retry.',
1196 deleteElement: 'Delete element',
1197 deleteElementConfirm: 'Are you sure you want to delete this element? This cannot be undone.',
1198 nonTextElementHint:
1199 'Still working on this feature.\nYou can use AI mode to inspect and edit elements for now.',
1200 inspectorUnavailable:
1201 'Cannot read this element’s real properties.\nSelect an element inside the page again.',
1202 deleteElementFailed: 'Failed to delete element',
1203 exitInspect: 'Exit inspect',
1204 inspectElement: 'Inspect element',
1205 aiMode: 'AI',
1206 exitAiMode: 'Exit AI',
1207 exitAndSave: 'Exit & Save Version',
1208 undo: 'Undo',
1209 redo: 'Redo',
1210 undoCurrentPageTooltip: 'Undo last action',
1211 redoCurrentPageTooltip: 'Redo last action',
1212 discardAllEditsTooltip: 'Discard all changes',
1213 clickTextToEdit: 'Double-click text to edit',
1214 dblClickTextToEdit: 'Double-click text to edit',
1215 editModeToast: 'Drag to adjust position and size, click to select and edit elements',
1216 animationModeToast: 'Animation mode active — select an element to adjust its animation',
1217 editorSnap: 'Snap',
1218 editorGrid: 'Grid',
1219 editorRulerHint: 'Click the ruler to add a guide',
1220 editorGuideRemoveHint: 'Drag outside the canvas to remove guide',
1221 editorClearGuides: 'Clear guides',
1222 failedPageHint:
1223 'This page failed last time and is showing a recoverable file. Keep the Current page context and describe how to fix or regenerate it.',
1224 clickToSelect: 'Click an element to select it',
1225 emptyPreviewTitle: 'Waiting for your creative draft',
1226 briefHint: 'Enter a brief in the message panel and the preview will appear here.',
1227 imageOnly: 'Only image assets are supported for now',
1228 imagePathFailed: 'Cannot read image path',
1229 mediaOnly: 'Only image/video assets are supported for now',
1230 mediaPathFailed: 'Cannot read media file path',
1231 assetsAdded: 'Added {count} asset(s)',
1232 assetUploadFailed: 'Asset upload failed',
1233 switchToPageFirst: 'Main-session sending is disabled. Switch to Current page first.',
1234 useUploadedAssets: 'Use uploaded assets',
1235 selectPageFirst: 'Select a page before sending',
1236 selectorLocated: '(selected element located)',
1237 exportFailed: 'Export failed',
1238 exportCancelled: 'Export cancelled',
1239 exportProgressPreparing: 'Preparing export...',
1240 exportProgressRendering: 'Processing page {current}/{total}',
1241 exportProgressPackaging: 'Packaging files...',
1242 exportProgressWriting: 'Writing file...',
1243 exportPdfStart: 'Exporting PDF',
1244 exportPdfDescription:
1245 'Large decks or complex charts may take a while. Keep the window open and the result will appear automatically.',
1246 exportSuccessPages: 'PDF export succeeded ({count} pages)',
1247 exportPngStart: 'Exporting PNG images',
1248 exportPngDescription:
1249 'All pages will be saved as high-resolution images, suitable for docs, Notion, or social posts.',
1250 pngExported: 'PNG export succeeded ({count} images)',
1251 exportLongImageStart: 'Exporting long image',
1252 exportLongImageDescription:
1253 'All pages are stitched vertically into a single long image, great for social posts, chat, or long docs.',
1254 longImageExported: 'Long image export succeeded ({count} pages)',
1255 exportVideoStart: 'Exporting MP4 video',
1256 exportVideoDescription:
1257 'This version exports each page as a static video segment and opens the file location when complete.',
1258 videoExported: 'MP4 export succeeded ({count} pages)',
1259 pptxPreparingEditable: 'Preparing editable PPTX',
1260 pptxPreparingEditableDescription:
1261 'Export may take longer while fonts are embedded. Please wait. Preserving all elements editable where possible, including text, shapes, images, and tables.',
1262 pptxPreparingImage: 'Preparing image PPTX',
1263 pptxPreparingImageDescription:
1264 'Each page is exported as a high-resolution image for pixel-perfect fidelity.',
1265 pptxExported: 'PPTX export succeeded ({count} pages)',
1266 pptxEditableDescription: 'All elements were preserved editable where possible.',
1267 pptxImageDescription: 'Each page is a high-resolution image for pixel-perfect fidelity.',
1268 exportPptxEditable: 'Editable Export',
1269 exportPptxImageOnly: 'Image Export',
1270 exportPackage: 'Pack Export',
1271 exportPackageTooltip:
1272 'Export a runnable preview pack, or compress the full session directory as a ZIP package.',
1273 exportSlidePack: 'Export slide-pack file',
1274 exportSlidePackDescription: 'Create a standalone preview pack for sharing a view-only deck.',
1275 exportSessionZip: 'Export ZIP session package',
1276 exportSessionZipDescription:
1277 'Compress the full current session directory for backup, migration, or troubleshooting.',
1278 slidePackPreparing: 'Packaging preview...',
1279 slidePackPreparingDescription: 'Building standalone executable for browser preview',
1280 slidePackExported: 'Preview pack export succeeded',
1281 slidePackExportedDescription: 'Executable generated, double-click to preview in browser',
1282 sessionZipPreparing: 'Compressing session files...',
1283 sessionZipPreparingDescription: 'Packaging the full current session directory as a ZIP file.',
1284 sessionZipExported: 'Session ZIP export succeeded',
1285 sessionZipExportedDescription:
1286 'The ZIP contains the current session directory for backup, migration, or troubleshooting.',
1287 history: 'Version History',
1288 historyTooltip: 'View saved versions from page saves, AI edits, and page management',
1289 historyTitle: 'History versions',
1290 historyRecent: 'Latest 20',
1291 historyLoading: 'Loading history...',
1292 historyEmptyTitle: 'No history yet',
1293 historyEmptyDescription: 'A version is recorded after generation or editing completes.',
1294 historyCurrent: 'Current',
1295 historyRollback: 'Rollback',
1296 historyRollingBack: 'Rolling back...',
1297 historyChangedPages: 'Changed pages: {pages}',
1298 historyLoadFailed: 'Failed to load history',
1299 historyRollbackConfirm:
1300 'This will restore the deck to the selected version. Current files will be replaced, but later history will remain available.',
1301 historyRollbackSuccess: 'Restored history version',
1302 historyRollbackFailed: 'Rollback failed',
1303 pageLoadNotice:
1304 'Some pages took longer to load and were exported from the current view. Please quickly inspect the PPTX.',
1305 noEditableTextNotice:
1306 'Some pages were preserved as full visuals and may need manual text tweaks in PowerPoint.',
1307 exportCheckNotice: 'File exported. Please quickly inspect layout details in the PPTX.',
1308 layoutSaveFailed: 'Failed to save adjustments',
1309 adjustmentsSaved: 'Saved {count} adjustment(s)',
1310 templateSaved: 'Saved as template',
1311 templateSaveFailed: 'Failed to save template',
1312 viewTemplates: 'View templates',
1313 manualAdjustHistory: 'Manual page element adjustment',
1314 discardedAdjustments: 'Discarded unsaved adjustments',
1315 textSaved: 'Text saved',
1316 textSaveFailed: 'Failed to save text',
1317 textSaveEmpty: 'Text cannot be empty',
1318 inspectActiveToast: 'AI mode active — select elements on the page for AI to modify',
1319 addPage: 'Add Page',
1320 addBlankPage: 'Add blank page',
1321 addGeneratedPage: 'Add generated page',
1322 addPagesFromSession: 'Add pages from another session',
1323 mergePagesTitle: 'Add pages from another session',
1324 mergePagesDescription:
1325 'Copy selected pages from another session to the end of this session. The source session will not be changed.',
1326 mergeSearchSessions: 'Search sessions',
1327 mergeNoSessions: 'No sessions available',
1328 mergeUntitledSession: 'Untitled session',
1329 mergeSelectSession: 'Select a session',
1330 mergeSelectSessionHint: 'Choose a session on the left, then select pages to add',
1331 mergeNoPages: 'This session has no available pages',
1332 mergePageCount: '{count} pages',
1333 mergeSelectedCount: '{count}/{max} selected',
1334 mergePageLimitReached: 'You can add up to {count} pages at a time',
1335 mergeSelectAll: 'Select all available',
1336 mergeSelectFirstPages: 'Select first {count}',
1337 mergeClearSelection: 'Clear selection',
1338 mergeAddPages: 'Add {count} pages',
1339 mergeAddingPages: 'Adding pages...',
1340 mergeLoadFailed: 'Failed to load session pages',
1341 mergePagesFailed: 'Failed to add session pages',
1342 mergeErrorInvalidRequest: 'Invalid request. Reopen the dialog and try again.',
1343 mergeErrorSameSession: 'Pages cannot be added from the current session.',
1344 mergeErrorNoPageSelected: 'Select at least one page to add.',
1345 mergeErrorPageLimit: 'The selected pages exceed the allowed limit.',
1346 mergeErrorSessionNotFound: 'The source or current session no longer exists.',
1347 mergeErrorSessionBusy: 'The source or current session is generating. Try again later.',
1348 mergeErrorSlideSizeMismatch:
1349 'The source and current sessions use different canvas sizes and cannot be merged.',
1350 mergeErrorPageNotFound: 'A selected source page no longer exists.',
1351 mergeErrorPageUnavailable: 'A selected source page is incomplete or its file is missing.',
1352 mergeErrorTargetFont: 'The current template font configuration could not be loaded.',
1353 mergeErrorPageCopy: 'A page could not be copied. Check its resources and try again.',
1354 mergeDisabledSessionBusy: 'This session is generating. It can be added when complete.',
1355 mergeDisabledSessionEmpty: 'This session has no pages.',
1356 mergeDisabledSlideSizeMismatch: 'Canvas size differs from the current presentation.',
1357 mergeDisabledPageIncomplete: 'This page has not finished generating.',
1358 mergeDisabledPageMissing: 'The page file is missing.',
1359 addPagesFromTemplate: 'Add pages from a template',
1360 mergeTemplateTitle: 'Add pages from a template',
1361 mergeTemplateDescription:
1362 'Copy selected pages from a template to the end of this presentation, keeping the template styling.',
1363 mergeTemplateSearchTemplates: 'Search templates',
1364 mergeTemplateNoTemplates: 'No templates available',
1365 mergeTemplateUntitled: 'Untitled template',
1366 mergeTemplateSelectTemplate: 'Select a template',
1367 mergeTemplateSelectTemplateHint: 'Choose a template on the left, then select pages to add',
1368 mergeTemplateNoPages: 'This template has no available pages',
1369 mergeTemplatePageCount: '{count} pages',
1370 mergeTemplateSelectedCount: '{count}/{max} selected',
1371 mergeTemplateSelectAll: 'Select all available',
1372 mergeTemplateSelectFirstPages: 'Select first {count}',
1373 mergeTemplateSourceBadge: 'Source',
1374 mergeTemplateAddingPages: 'Adding pages...',
1375 mergeTemplateAddPages: 'Add {count} pages',
1376 mergeTemplateSuccess: 'Added {count} pages from template "{template}"',
1377 mergeTemplateLoadFailed: 'Failed to load templates',
1378 mergeTemplatePagesFailed: 'Failed to add template pages',
1379 mergePagesSuccess: 'Added {count} pages from “{session}”',
1380 collapseSidebar: 'Collapse sidebar',
1381 expandSidebar: 'Expand sidebar',
1382 untitledPage: 'Untitled page',
1383 addBlankPageHint:
1384 'Choose an existing page as the base. It will be copied to the end with only page text cleared.',
1385 addBlankPageCreate: 'Create blank page',
1386 addBlankPageFailed: 'Failed to add blank page',
1387 addPageHint: 'Auto-generated in the current style — just describe the page you want',
1388 addPageDescription: 'Describe the page you want to add',
1389 addPageGenerating: 'Generating new page...',
1390 addPageGenerate: 'Generate',
1391 addPageCancel: 'Cancel',
1392 addPageFailed: 'Failed to add page',
1393 deleteConfirmTitle: 'Delete this page?',
1394 retryFailedPage: 'Regenerate this page',
1395 retryPageGenerating: 'Regenerating page...',
1396 retryPageFailed: 'Failed to regenerate page'
1397 },
1398 pageManagement: {
1399 dragHandle: 'Drag to reorder',
1400 editPageTitle: 'Edit title',
1401 editPageTitleDescription: 'Rename the current page and sync the preview list and history.',
1402 editPageOutline: 'Edit outline',
1403 pageOutlinePlaceholder: 'Enter page outline',
1404 savePageOutline: 'Save outline',
1405 updateOutlineFailed: 'Failed to save page outline',
1406 pageTitleLabel: 'Page title',
1407 pageTitlePlaceholder: 'Enter page title',
1408 pageTitleRequired: 'Please enter a page title',
1409 savePageTitle: 'Save title',
1410 updateTitleFailed: 'Failed to save page title',
1411 deletePage: 'Delete page',
1412 duplicatePage: 'Duplicate page',
1413 deleteConfirmTitle: 'Delete this page?',
1414 deleteConfirmDescription: 'The page will be removed from this presentation.',
1415 deleteConfirmAction: 'Delete',
1416 deleteLastPageError: 'Cannot delete the last page',
1417 reorderFailed: 'Failed to reorder pages',
1418 deleteFailed: 'Failed to delete page',
1419 duplicatePageFailed: 'Failed to duplicate page'
1420 },
1421 editMode: {
1422 addText: 'Plain Text',
1423 defaultText: 'New text',
1424 artText: 'WordArt',
1425 artTextEffect: 'Current effect',
1426 artTextContent: 'Text',
1427 artTextFontSize: 'Font size',
1428 addImage: 'Image',
1429 addVideo: 'Video',
1430 addShape: 'Shape',
1431 addIcon: 'Icon',
1432 shapeRect: 'Rectangle',
1433 shapeRoundedRect: 'Rounded',
1434 shapeEllipse: 'Ellipse',
1435 shapeLine: 'Line',
1436 shapeArrowRight: 'Arrow',
1437 shapeTriangle: 'Triangle',
1438 shapeDiamond: 'Diamond',
1439 shapePentagon: 'Pentagon',
1440 shapeHexagon: 'Hexagon',
1441 shapeParallelogram: 'Parallelogram',
1442 shapeTrapezoid: 'Trapezoid',
1443 shapeStar: 'Star',
1444 shapeChevron: 'Chevron',
1445 iconSectionIcons: 'Icons',
1446 iconSectionNumbers: 'Numbers',
1447 chartBar: 'Bar',
1448 chartLine: 'Line',
1449 chartPie: 'Pie',
1450 chartDoughnut: 'Doughnut',
1451 chartRadar: 'Radar',
1452 chart: 'Chart',
1453 formula: 'Formula',
1454 fromLibrary: 'Choose from Library',
1455 fromLocal: 'Upload from Local',
1456 chooseImage: 'Choose Image',
1457 chooseVideo: 'Choose Video',
1458 assetPickerHint: 'Select an asset then confirm',
1459 loadingAssets: 'Loading...',
1460 noAssets: 'No assets yet. Upload from local first.',
1461 cancel: 'Cancel',
1462 confirmAdd: 'Confirm Add'
1463 },
1464 fonts: {
1465 eyebrow: 'Fonts',
1466 title: 'Font Management',
1467 description:
1468 'Manage locally uploaded fonts. Choose a font scheme on the home page before generating, or let AI auto-match.',
1469 openFolder: 'Open font folder',
1470 upload: 'Upload font',
1471 uploadDialogTitle: 'Upload font',
1472 uploadDialogDescription:
1473 'Only .woff2 format is supported. You can set different weights and styles for each file.',
1474 uploadDialogDownloadPre: 'Visit',
1475 uploadDialogDownloadPost: 'to download free woff2 font files.',
1476 googleFontsHelperLink: 'Google Fonts Helper',
1477 familyName: 'Font family',
1478 familyNamePlaceholder: 'My Brand Sans',
1479 role: 'Usage',
1480 roleBoth: 'Title & Body',
1481 roleTitle: 'Title',
1482 roleBody: 'Body',
1483 roleNone: 'Not set',
1484 scripts: 'Script',
1485 scriptsPlaceholder: 'Select',
1486 scriptsLatin: 'Latin',
1487 scriptsCjk: 'Chinese',
1488 scriptsMixed: 'Mixed',
1489 scriptsNone: 'Not set',
1490 category: 'Category',
1491 categorySans: 'Sans-serif',
1492 categorySerif: 'Serif',
1493 categoryDisplay: 'Display',
1494 categoryHandwriting: 'Handwriting',
1495 categoryMonospace: 'Monospace',
1496 chooseFiles: 'Choose files',
1497 uploadButton: 'Confirm Upload',
1498 removeFile: 'Remove file',
1499 uploadedFonts: 'Uploaded fonts',
1500 fontCount: '{count} font(s)',
1501 loading: 'Loading...',
1502 emptyUpload: 'No fonts uploaded yet. Click the button above to add your brand fonts.',
1503 fileCount: '{count} file(s)',
1504 googleFontsTitle: 'Built-in Google Fonts',
1505 googleFontsDesc: 'Bundled locally. Auto-matched or manually selected during generation.',
1506 loadFailed: 'Failed to load fonts',
1507 chooseFailed: 'Failed to choose font files',
1508 fillFamily: 'Please enter the font family name',
1509 selectFile: 'Please select .woff2 font files',
1510 selectScripts: 'Please select the script',
1511 uploaded: 'Font uploaded',
1512 uploadFailed: 'Font upload failed',
1513 deleted: 'Font deleted',
1514 deleteFailed: 'Failed to delete font',
1515 deleteLabel: 'Delete {family}'
1516 },
1517 thinking: {
1518 homeTitle: 'Start a Presentation',
1519 homeDescription:
1520 'Have a topic or source material ready? Generate a first draft now. Still shaping the idea? Chat first to build the outline.',
1521 quickCreate: 'Quick Create',
1522 quickCreateDescription:
1523 'Already have an outline or clear direction — pick a style, set the page count, and generate an editable draft right away.',
1524 quickCreateBadge: 'Draft fast',
1525 quickCreatePointOne: 'Set topic, pages, and style, with optional source material.',
1526 quickCreatePointTwo: 'Best when you have a direction and want an editable draft quickly.',
1527 startQuickCreate: 'Start generating',
1528 exploreProject: 'Chat to Create',
1529 exploreProjectDescription:
1530 'Still shaping the idea? Chat with AI to refine the outline and page structure, then generate when ready.',
1531 exploreProjectBadge: 'Plan first',
1532 explorePointOne: 'Turn conversation into outline, page structure, and style direction.',
1533 explorePointTwo: 'Upload documents and images as source material.',
1534 startExplore: 'Start chatting',
1535 creatingExplore: 'Creating',
1536 continueExplore: 'Continue your latest chat',
1537 revealWorkspace: 'Show exploration folder',
1538 newWorkspace: 'New chat',
1539 historyTitle: 'History',
1540 historyLoadFailed: 'Failed to load history',
1541 historyEmptyTitle: 'No history yet',
1542 historyEmptyDescription:
1543 'Create a new chat to organize the idea and source material into a generation outline.',
1544 emptyWorkspaceTitle: 'Choose a chat to continue',
1545 emptyWorkspaceDescription:
1546 'Or start a new chat and shape the topic, source material, and page structure from scratch.',
1547 untitledWorkspace: 'Untitled chat',
1548 restoredContextTitle: 'Restored Context',
1549 deleteWorkspace: 'Delete chat',
1550 deleteWorkspaceTitle: 'Delete this history item?',
1551 deleteWorkspaceDescription:
1552 'Delete "{title}"? The related thinking files and source material will be removed permanently.',
1553 deleteWorkspaceDone: 'History item deleted',
1554 deleteWorkspaceFailed: 'Failed to delete history item',
1555 homeNoteOne: 'Use quick create for simple, already-defined tasks.',
1556 homeNoteTwo:
1557 'Use explore for complex material and confirm the outline, page structure, and style direction before generation.',
1558 homeNoteThree: 'Both paths eventually use the same generation flow.',
1559 eyebrow: 'Explore before creating',
1560 title: 'Chat to Create',
1561 description:
1562 '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.',
1563 chatTitle: 'AI Chat',
1564 thinking: 'Thinking...',
1565 inputPlaceholder: 'Describe the topic and content you want to present...',
1566 welcomeMessage:
1567 '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.',
1568 sourceCount: '{count} sources',
1569 pageCardsTitle: 'Page Outline',
1570 pageCountLabel: '{count} pages',
1571 noPagesYet: 'No pages yet. Start a conversation to build the outline',
1572 noDocumentYet: 'The generation outline has no content yet',
1573 outlineView: 'Outline',
1574 editOutline: 'Edit page outline',
1575 saveOutline: 'Save page outline',
1576 outlineTitle: 'Page title',
1577 outlineObjective: 'Page objective',
1578 outlineSummary: 'Content summary',
1579 outlineKeyPoints: 'Key points',
1580 outlineKeyPointsHint: 'Enter one key point per line',
1581 outlineRequired: 'Complete the title, objective, summary, and key points',
1582 outlineSaved: 'Page outline saved',
1583 outlineSaveFailed: 'Failed to save page outline',
1584 confirmAndGenerate: 'Confirm & Generate',
1585 createFailed: 'Failed to create workspace',
1586 stageCollect: 'Collecting',
1587 stageOutline: 'Outlining',
1588 stageDraft: 'Drafting',
1589 stageRefine: 'Refining',
1590 stageReady: 'Ready',
1591 generationDialogTitle: 'Confirm generation parameters',
1592 generationDialogDescription: 'Confirm the parameters below to start generating',
1593 styleId: 'Style',
1594 fontMode: 'Font',
1595 prepareFailed: 'Failed to prepare generation',
1596 sourceUploaded: 'Source uploaded',
1597 uploadFailed: 'Failed to upload sources',
1598 removeSource: 'Remove source',
1599 removeSourceFailed: 'Failed to remove source',
1600 uploadTooltip:
1601 'Supports .md, .txt, .csv, .docx documents (up to {documentMaxSize}MB each) and .png, .jpg, .webp images (up to {imageMaxSize}MB each)',
1602 sourcePreprocessHint:
1603 'After you send the message, the app will structure the document first, then pass it to AI for outlining.',
1604 needMoreWork: 'Complete the outline before generating'
1605 },
1606 htmlEditor: {
1607 eyebrow: 'Local HTML',
1608 edit: 'Edit',
1609 backToList: 'Back to list',
1610 delete: 'Delete',
1611 emptyTitle: 'Start editing a web page',
1612 emptyHint: 'Choose an HTML file from your computer to begin.',
1613 import: 'Import HTML',
1614 importTooltip: 'Currently supports importing one HTML file at a time.',
1615 thumbnailGenerating: 'Generating preview',
1616 untitled: 'Untitled',
1617 listTitle: 'HTML editor',
1618 searchButton: 'Search HTML files',
1619 searchPlaceholder: 'Search by file name or path',
1620 clearSearch: 'Clear search',
1621 noSearchResultsTitle: 'No matching HTML files',
1622 noSearchResultsDescription: 'Try another file name or path keyword.',
1623 removeFromLibraryTitle: 'Remove from the document library?',
1624 removeFromLibraryDescription:
1625 'This removes the database record for "{name}". The HTML file stays on your computer.',
1626 removedFromLibrary: 'Removed from the document library',
1627 removeFromLibraryFailed: 'Unable to remove the document. Please try again.',
1628 undo: 'Undo',
1629 redo: 'Redo',
1630 discard: 'Discard changes',
1631 save: 'Save',
1632 export: 'Export',
1633 revealFile: 'Show file',
1634 revealFileFailed: 'Unable to show the current HTML file',
1635 preview: 'Preview in browser',
1636 history: 'Version history',
1637 historyEmpty: 'No versions yet',
1638 restore: 'Restore',
1639 discardAll: 'Discard all changes',
1640 exported: 'Exported',
1641 insertText: 'Text',
1642 insertArtText: 'Art text',
1643 insertShape: 'Shape',
1644 insertIcon: 'Icon',
1645 insertChart: 'Chart',
1646 insertImage: 'Insert image',
1647 insertVideo: 'Insert video',
1648 mediaSourceHint: 'Choose from the local media library or enter an accessible external URL.',
1649 mediaSourceLocal: 'Local file',
1650 mediaSourceExternal: 'External URL',
1651 mediaLibrary: 'Local media',
1652 localMediaHint:
1653 "Uploaded files remain in this HTML document's assets directory and can be reused.",
1654 chooseMediaFile: 'Upload local file',
1655 mediaLibraryEmpty: 'No local media yet',
1656 mediaUrlPlaceholder: 'https://example.com/media',
1657 invalidMediaUrl: 'Enter a valid http or https URL.',
1658 insertMediaFailed:
1659 'Unable to insert into the canvas. Please wait for the page to finish loading and try again.',
1660 insertMedia: 'Insert',
1661 insertFormula: 'Formula',
1662 copyElement: 'Copy element',
1663 selectToEdit: 'Select an element to edit its properties',
1664 retry: 'Retry',
1665 aiMode: 'Inspect element',
1666 aiModeButton: 'AI mode',
1667 closeAiMode: 'Close inspect mode',
1668 aiInspectHint: 'Select an element and let AI assist with its redesign',
1669 aiSelectHint:
1670 'Optionally select an element to attach its context; otherwise AI analyzes the whole page.',
1671 selectedElement: 'Inspected element',
1672 clearSelectedElement: 'Clear inspected element',
1673 aiEmpty: 'Ask AI to analyze the whole page, or select an element for a targeted redesign.',
1674 aiThinking: 'AI is thinking...',
1675 aiPlaceholder: 'Describe how you want to redesign this element...',
1676 aiSelectedContext: 'Inspected element attached',
1677 aiDocumentContext: 'Current HTML document',
1678 aiSend: 'Send redesign request',
1679 aiClearConversation: 'Clear conversation',
1680 aiFailed: 'AI request failed. Please try again.',
1681 aiPlanTitle: 'AI-identified redesign plan',
1682 aiIntent: 'Detected intent',
1683 aiIntentInspect: 'Inspect element',
1684 aiIntentRedesign: 'Assist with redesign',
1685 aiIntentStyle: 'Style redesign',
1686 aiIntentLayout: 'Layout redesign',
1687 aiIntentContent: 'Content redesign',
1688 aiIntentOther: 'Other request'
1689 }
1690 } satisfies DeepStringShape<typeof zh>
1691
1691 lines TYPESCRIPT