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