{
  "Language": "English",
  "Translation": {
    "Video Script Configuration": "**Video Script Configuration**",
    "Video Script Generate": "Generate Video Script",
    "Video Subject": "Video Subject (Given a keyword, :red[AI auto-generates] video script)",
    "Script Language": "Language of the generated video script (Usually, AI automatically outputs according to the language of the input subject)",
    "Script Files": "Script Files",
    "Generate Video Script and Keywords": "Click to use AI to generate **Video Script** and **Video Keywords** based on the **subject**",
    "Auto Detect": "Auto Detect",
    "Auto Generate": "Frame Analysis",
    "Video Script": "Video Script",
    "Edit Video Script": "View/Edit Video Script",
    "Video script row count": "{count} script rows",
    "Video script table help": "Edit the full script JSON as a table. You can add or delete rows; saving will validate and write the script file again.",
    "Raw JSON Preview": "Raw JSON Preview",
    "Script Column ID": "ID",
    "Script Column Video ID": "Video",
    "Script Column Video Name": "Video Name",
    "Script Column Timestamp": "Timestamp",
    "Script Column Picture": "Picture",
    "Script Column Narration": "Narration",
    "Script Column OST": "Mark",
    "Generation Settings": "Generation Settings",
    "Save Script": "Save Script",
    "Crop Video": "Crop Video",
    "Video File": "Video File",
    "Plot Description": "Plot Description (:blue[Can be obtained from https://www.tvmao.com/])",
    "Generate Video Keywords": "Click to use AI to generate **Video Keywords** based on the **script**",
    "Please Enter the Video Subject": "Please enter the video script first",
    "Generating Video Script and Keywords": "AI is generating the video script and keywords...",
    "Generating Video Keywords": "AI is generating the video keywords...",
    "Video Keywords": "Video Keywords (:blue[Long videos work better in conjunction with plot descriptions.])",
    "Video Settings": "**Video Settings**",
    "Video Concat Mode": "Video Concatenation Mode",
    "Random": "Random Concatenation (Recommended)",
    "Sequential": "Sequential Concatenation",
    "Video Ratio": "Video Ratio",
    "Portrait": "Portrait 9:16 (TikTok Video)",
    "Landscape": "Landscape 16:9 (Xigua Video)",
    "Clip Duration": "Maximum Clip Duration (Seconds) (**Not the total length of the video**, refers to the length of each **composite segment**)",
    "Number of Videos Generated Simultaneously": "Number of Videos Generated Simultaneously",
    "Audio Settings": "**Audio Settings**",
    "Speech Synthesis": "Speech Synthesis Voice (:red[**Keep consistent with the script language**. Note: V2 version performs better, but requires an API KEY; SoulVoice provides high-quality Chinese voices])",
    "Speech Region": "Service Region (:red[Required, [Click to Get](https://portal.azure.com/#view/Microsoft_Azure_ProjectOxford/CognitiveServicesHub/~/SpeechServices)])",
    "Speech Key": "API Key (:red[Required, either Key 1 or Key 2 is acceptable [Click to Get](https://portal.azure.com/#view/Microsoft_Azure_ProjectOxford/CognitiveServicesHub/~/SpeechServices)])",
    "Speech Volume": "Speech Volume (1.0 represents 100%)",
    "Speech Rate": "Speech Rate (1.0 represents 1x speed)",
    "Male": "Male",
    "Female": "Female",
    "Background Music": "Background Music",
    "No Background Music": "No Background Music",
    "Random Background Music": "Random Background Music",
    "Custom Background Music": "Custom Background Music",
    "Custom Background Music File": "Please enter the file path of the custom background music",
    "Background Music Source": "Background Music Source",
    "Background Music Source Help": "Choose background music from the resource directory, upload a new file, or disable background music.",
    "Upload Background Music": "Upload Background Music",
    "Background Music Path Help": "Choose the background music used for video synthesis.",
    "No Background Music Resources Found": "No background music resources found. Please upload a background music file.",
    "Preview Background Music Help": "Play the selected background music.",
    "Upload Background Music File": "Upload Background Music File",
    "Upload Background Music Help": "Upload an audio file to use as background music.",
    "Background Music uploaded": "Background music uploaded: {path}",
    "Background Music Volume": "Background Music Volume (0.2 represents 20%, background sound should not be too loud)",
    "Subtitle Settings": "**Subtitle Settings**",
    "Enable Subtitles": "Enable Subtitles (If unchecked, the following settings will not take effect)",
    "Enable Subtitle Mask": "Enable Subtitle Mask",
    "Enable Subtitle Mask Help": "Before burning in new subtitles, cover the original subtitle area with a soft blurred mask.",
    "Set Subtitle Mask": "Set Subtitle Mask",
    "Subtitle Mask Summary": "Landscape {landscape_x}%/{landscape_y}% · {landscape_width}%×{landscape_height}%; portrait {portrait_x}%/{portrait_y}% · {portrait_width}%×{portrait_height}%",
    "Subtitle Mask Settings": "Subtitle Mask Settings",
    "Subtitle Mask Settings Caption": "Save landscape and portrait mask regions as frame percentages. The mask is applied before new subtitles are burned in.",
    "Landscape Subtitle Mask": "Landscape Mask",
    "Portrait Subtitle Mask": "Portrait Mask",
    "Landscape Subtitle Position": "Landscape Subtitle Position",
    "Portrait Subtitle Position": "Portrait Subtitle Position",
    "Save Subtitle Mask Settings": "Save Subtitle Mask Settings",
    "Subtitle Mask Left": "Left Position",
    "Subtitle Mask Left Help": "Mask distance from the left edge as a frame percentage.",
    "Subtitle Mask Top": "Top Position",
    "Subtitle Mask Top Help": "Mask distance from the top edge as a frame percentage.",
    "Subtitle Mask Width": "Mask Width",
    "Subtitle Mask Width Help": "Width of the covered mask region as a frame percentage.",
    "Subtitle Mask Height": "Mask Height",
    "Subtitle Mask Height Help": "Height of the covered mask region as a frame percentage.",
    "Subtitle Mask Blur Radius": "Blur Radius",
    "Subtitle Mask Blur Radius Help": "Blur strength for the mask background and edge.",
    "Subtitle Mask Opacity": "Mask Strength",
    "Subtitle Mask Opacity Help": "Mask blend strength. Higher values cover source subtitles more strongly.",
    "Subtitle Burn Position": "Subtitle Position",
    "Subtitle Burn Position Help": "New subtitle distance from the top edge as a frame percentage. The safe-area preview updates in real time.",
    "Subtitle Mask Preview": "Source Subtitle Mask Preview",
    "Subtitle Mask Preview Caption": "Upload a source video for preview, or use the currently selected source video. Uploaded files here are only used for mask preview.",
    "Upload Subtitle Mask Preview Video": "Upload Preview Source Video",
    "Upload Subtitle Mask Preview Video Help": "Only used for previewing the mask in this dialog. It will not replace the source video used for generation.",
    "Using Subtitle Mask Preview Video": "Preview video: {file}",
    "Change Subtitle Mask Preview Video": "Change Video",
    "Subtitle Mask Preview Empty": "Upload a preview video, or select a source video above first.",
    "Subtitle Mask Preview Timeline": "Preview Timeline (seconds)",
    "Subtitle Mask Preview Timeline Help": "Drag to a frame where the source subtitles appear, then fine-tune the mask region.",
    "Subtitle Mask Preview Frame Caption": "{time} · {orientation} · red outline is the mask, blue line is the subtitle position",
    "Subtitle Mask Preview Failed": "Unable to read this video preview. Please try another video file.",
    "Enable Auto Transcription": "Enable Auto Transcription",
    "Enable Auto Transcription Help": "After the final video is merged, transcribe the whole video into subtitles and burn them into the output.",
    "Font": "Subtitle Font",
    "Position": "Subtitle Position",
    "Top": "Top",
    "Center": "Center",
    "Bottom": "Bottom (Recommended)",
    "Custom": "Custom Position (70, represents 70% from the top)",
    "Font Size": "Subtitle Size",
    "Font Color": "Subtitle Color",
    "Stroke Color": "Stroke Color",
    "Stroke Width": "Stroke Width",
    "Subtitle Preview Orientation": "Preview Ratio",
    "Portrait Safe Area": "Portrait Safe Area",
    "Landscape Safe Area": "Landscape Safe Area",
    "Subtitle Preview Sample Text": "Preview",
    "Generate Video": "Generate Video",
    "Video Script and Subject Cannot Both Be Empty": "Video Subject and Video Script cannot both be empty",
    "Generating Video": "Generating video, please wait...",
    "Start Generating Video": "Start Generating Video",
    "Video Generation Completed": "Video Generation Completed",
    "Video Generation Failed": "Video Generation Failed",
    "You can download the generated video from the following links": "You can download the generated video from the following links",
    "Basic Settings": "**Basic Settings** (:blue[Click to expand])",
    "Language": "Interface Language",
    "Pexels API Key": "Pexels API Key ([Click to Get](https://www.pexels.com/api/)) :red[Recommended]",
    "Pixabay API Key": "Pixabay API Key ([Click to Get](https://pixabay.com/api/docs/#api_search_videos)) :red[Optional, if Pexels is unavailable, then choose Pixabay]",
    "LLM Provider": "LLM Provider",
    "API Key": "API Key (:red[Required, must be applied from the LLM provider's backend])",
    "Base Url": "Base Url (Optional)",
    "Account ID": "Account ID (Obtained from the URL of the Cloudflare dashboard)",
    "Model Name": "Model Name (:blue[Confirm the authorized model name from the LLM provider's backend])",
    "Please Enter the LLM API Key": "Please enter the **LLM API Key**",
    "Please Enter the Pexels API Key": "Please enter the **Pexels API Key**",
    "Please Enter the Pixabay API Key": "Please enter the **Pixabay API Key**",
    "Get Help": "One-stop AI video commentary + automated editing tool\uD83C\uDF89\uD83C\uDF89\uD83C\uDF89\n\nFor any questions or suggestions, you can join the **community channel** for help or discussion: https://github.com/linyqh/NarratoAI/wiki",
    "Video Source": "Video Source",
    "TikTok": "TikTok (Support is coming soon)",
    "Bilibili": "Bilibili (Support is coming soon)",
    "Xiaohongshu": "Xiaohongshu (Support is coming soon)",
    "Local file": "Local file",
    "Play Voice": "Play Synthesized Voice",
    "Voice Example": "This is a sample text for testing voice synthesis",
    "Synthesizing Voice": "Synthesizing voice, please wait...",
    "TTS Provider": "TTS Provider",
    "Hide Log": "Hide Log",
    "Select from resource directory": "Select from resource directory",
    "Select a video from resource videos directory": "Select a video from the ./resource/videos directory",
    "Upload a new video file up to 2GB": "Upload a new video file, up to 2GB",
    "Upload new video files up to 2GB each": "Upload one or more video files, up to 2GB each",
    "Select Video": "Select Video",
    "Choose a video file": "Choose a video file",
    "Upload Video": "Upload Video",
    "No video files found in resource videos directory": "No video files found in the ./resource/videos directory",
    "Upload Local Files": "Upload Local Files",
    "File Uploaded Successfully": "File Uploaded Successfully",
    "Selected videos for processing": "Selected {count} video(s): {files}",
    "Frame Interval (seconds)": "Frame Interval (seconds)",
    "Generate Video Script": "Generate Video Script",
    "Video Theme": "Video Theme",
    "Generation Prompt": "Custom Prompt",
    "Video LLM Provider": "Video Analysis Model",
    "timestamp": "Timestamp",
    "Picture description": "Picture Description",
    "Narration": "Narration",
    "Rebuild": "Regenerate",
    "Load Video Script": "Load Video Script",
    "Speech Pitch": "Speech Pitch",
    "Please Select Script File": "Please Select Script File",
    "Check Format": "Check Format",
    "Script Loaded Successfully": "Script Loaded Successfully",
    "Script loaded successfully": "Script loaded successfully",
    "Script format check passed": "Script format check passed",
    "Script format check failed": "Script format check failed",
    "Failed to Load Script": "Failed to Load Script",
    "Failed to load script": "Failed to load script",
    "Failed to Save Script": "Failed to Save Script",
    "Failed to save script": "Failed to save script",
    "Script saved successfully": "Script saved successfully",
    "Video Quality": "Video Quality",
    "Custom prompt for LLM, leave empty to use default prompt": "Custom prompt for LLM. Leave empty to use the default prompt.",
    "Proxy Settings": "Proxy Settings",
    "HTTP_PROXY": "HTTP Proxy",
    "HTTPs_PROXY": "HTTPS Proxy",
    "Vision Model Settings": "Vision Model Settings",
    "Vision Model Provider": "API Protocol",
    "Vision API Key": "Vision API Key",
    "Vision Base URL": "Vision Base URL",
    "Vision Model Name": "Vision Model Name",
    "Text Generation Model Settings": "Text Generation Model Settings",
    "LLM Model Name": "LLM Model Name",
    "LLM Model API Key": "LLM Model API Key",
    "Text Model Provider": "API Protocol",
    "Text API Key": "Text API Key",
    "Text Base URL": "Text Base URL",
    "Text Model Name": "Text Model Name",
    "Top P": "Top P",
    "Top K": "Top K",
    "Max Output Tokens": "Max Output Tokens",
    "Max Output Tokens Help": "Maximum generated output length. 0 uses the provider default.",
    "Thinking Level": "Thinking Level",
    "Thinking Level Help": "Controls reasoning effort. Auto sends no extra thinking parameter; low/medium/high tries reasoning_effort.",
    "Thinking Level Auto": "Auto",
    "Thinking Level Off": "Off",
    "Thinking Level Low": "Low",
    "Thinking Level Medium": "Medium",
    "Thinking Level High": "High",
    "Skip the first few seconds": "Skip the first few seconds",
    "Difference threshold": "Difference Threshold",
    "Vision processing batch size": "Vision Processing Batch Size",
    "Test Connection": "Test Connection",
    "Testing connection...": "Testing connection...",
    "gemini model is available": "Gemini model is available",
    "gemini model is not available": "Gemini model is not available",
    "Unsupported provider": "Unsupported provider",
    "0: Keep the audio only, 1: Keep the original sound only, 2: Keep the original sound and audio": "0: Keep the narration only, 1: Keep the original sound only, 2: Keep both original sound and narration",
    "Text model is not available": "Text model is not available",
    "Text model is available": "Text model is available",
    "Upload Script": "Upload Script",
    "Upload Script File": "Upload Script File",
    "Script Uploaded Successfully": "Script Uploaded Successfully",
    "Invalid JSON format": "Invalid JSON format",
    "Upload failed": "Upload failed",
    "Enable Proxy": "Enable Proxy",
    "QwenVL model is available": "QwenVL model is available",
    "QwenVL model is not available": "QwenVL model is not available",
    "QwenVL model returned invalid response": "QwenVL model returned an invalid response",
    "System settings": "System Settings",
    "Clear Cache": "Clear Cache",
    "Cache cleared": "Cache cleared",
    "storage directory does not exist": "Storage directory does not exist",
    "Failed to clear cache": "Failed to clear cache",
    "Clear frames": "Clear frames",
    "Clear clip videos": "Clear clip videos",
    "Clear tasks": "Clear tasks",
    "Directory cleared": "Directory cleared",
    "Directory does not exist": "Directory does not exist",
    "Failed to clear directory": "Failed to clear directory",
    "FFmpeg Engine Detection": "FFmpeg Engine Detection",
    "FFmpeg Engine": "FFmpeg Engine",
    "FFmpeg Engine Help": "Choose the ffmpeg executable this app should prefer; the packaged runtime and local PATH are discovered automatically",
    "No FFmpeg engines found": "No FFmpeg engines found",
    "Custom FFmpeg Path": "Custom FFmpeg Path",
    "Custom FFmpeg Path Help": "Paste an absolute path to an ffmpeg executable if the target engine is not listed",
    "Current FFmpeg Engine": "Current FFmpeg Engine",
    "Save FFmpeg Engine": "Save Engine",
    "Test Selected FFmpeg": "Test Selected FFmpeg",
    "Testing FFmpeg engine": "Testing FFmpeg engine...",
    "FFmpeg engine saved": "FFmpeg engine saved",
    "Selected FFmpeg path is invalid": "Selected FFmpeg path is invalid",
    "FFmpeg detection details": "FFmpeg detection details",
    "FFmpeg source Configured": "Configured",
    "FFmpeg source NarratoAI packaged runtime": "NarratoAI packaged runtime",
    "FFmpeg source Integrated runtime": "Integrated runtime",
    "FFmpeg source System PATH": "System PATH",
    "FFmpeg source Homebrew": "Homebrew",
    "FFmpeg source Python environment": "Python environment",
    "FFmpeg source Python executable folder": "Python executable folder",
    "FFmpeg source IMAGEIO_FFMPEG_EXE": "IMAGEIO_FFMPEG_EXE",
    "FFmpeg source imageio-ffmpeg": "imageio-ffmpeg",
    "FFmpeg source System": "System",
    "Version": "Version",
    "Path": "Path",
    "Available": "Available",
    "Unavailable": "Unavailable",
    "Hardware Acceleration": "Hardware Acceleration",
    "Subtitle Burn-in": "Subtitle Burn-in",
    "FFmpeg engine passed all checks": "FFmpeg engine passed all checks: basic execution, hardware acceleration and subtitle burn-in are available",
    "FFmpeg engine works but hardware acceleration is unavailable": "FFmpeg and subtitle burn-in work, but hardware acceleration is unavailable; software encoding will be used",
    "FFmpeg engine check failed": "FFmpeg engine check failed",
    "Hardware acceleration detail": "Hardware acceleration detail",
    "Subtitle burn-in detail": "Subtitle burn-in detail",
    "Type": "Type",
    "Encoder": "Encoder",
    "Message": "Message",
    "Method": "Method",
    "Supported Hardware Methods": "Supported hardware methods",
    "Subtitle Filters": "Subtitle filters",
    "FFmpeg errors": "FFmpeg errors",
    "Raw FFmpeg report": "Raw FFmpeg report",
    "Subtitle Preview": "Subtitle Preview",
    "One-Click Transcribe": "One-Click Transcribe",
    "Transcribing...": "Transcribing...",
    "Transcription Complete!": "Transcription Complete!",
    "Transcription Failed. Please try again.": "Transcription failed. Please try again.",
    "API rate limit exceeded. Please wait about an hour and try again.": "API rate limit exceeded. Please wait about an hour and try again.",
    "Resources exhausted. Please try again later.": "Resources exhausted. Please try again later.",
    "Transcription Failed": "Transcription Failed",
    "Short Generate": "Short Drama Mix",
    "Generate Short Video Script": "Generate Short Video Script",
    "Adjust the volume of the original audio": "Adjust the volume of the original audio",
    "Original Volume": "Original Volume",
    "Frame Interval (seconds) (More keyframes consume more tokens)": "Frame Interval (seconds) (More keyframes consume more tokens)",
    "Batch Size": "Batch Size",
    "Batch Size (More keyframes consume more tokens)": "Batch Size (smaller batches consume more tokens)",
    "Short Drama Summary": "Short Drama Summary",
    "Film TV Narration": "Film/TV Narration",
    "Video Type": "Creation Type",
    "Select/Upload Script": "Custom Script",
    "原生Gemini模型连接成功": "Native Gemini model connection succeeded",
    "原生Gemini模型连接失败": "Native Gemini model connection failed",
    "OpenAI兼容Gemini代理连接成功": "OpenAI-compatible Gemini proxy connection succeeded",
    "OpenAI兼容Gemini代理连接失败": "OpenAI-compatible Gemini proxy connection failed",
    "Connection failed": "Connection failed",
    "自定义片段": "Custom Clips",
    "设置需要生成的短视频片段数量": "Set the number of short video clips to generate",
    "上传字幕文件": "Upload SRT",
    "清除已上传字幕": "Clear Uploaded Subtitle",
    "无法读取字幕文件，请检查文件编码（支持 UTF-8、UTF-16、GBK、GB2312）": "Unable to read the subtitle file. Please check the file encoding. Supported encodings: UTF-8, UTF-16, GBK, GB2312.",
    "字幕文件内容似乎为空，请检查文件": "The subtitle file appears to be empty. Please check the file.",
    "字幕上传成功": "Subtitle uploaded successfully",
    "短剧名称": "Short Drama Name",
    "影视名称": "Film/TV Title",
    "解说语言": "Narration Language",
    "自定义解说语言": "Custom Narration Language",
    "例如：意大利语（意大利）": "For example: Italian (Italy)",
    "请输入自定义解说语言": "Please enter a custom narration language",
    "简体中文（中国）": "Simplified Chinese (China)",
    "英语（美国）": "English (United States)",
    "日语（日本）": "Japanese (Japan)",
    "韩语（韩国）": "Korean (South Korea)",
    "法语（法国）": "French (France)",
    "德语（德国）": "German (Germany)",
    "西班牙语（西班牙）": "Spanish (Spain)",
    "葡萄牙语（巴西）": "Portuguese (Brazil)",
    "俄语（俄罗斯）": "Russian (Russia)",
    "自定义": "Custom",
    "短剧类型": "Short Drama Type",
    "自定义短剧类型": "Custom Short Drama Type",
    "影视类型": "Film/TV Type",
    "自定义影视类型": "Custom Film/TV Type",
    "原片占比": "Original Footage Ratio",
    "例如：豪门虐恋": "For example: billionaire angst romance",
    "例如：悬疑犯罪": "For example: suspense crime",
    "请输入自定义短剧类型": "Please enter a custom short drama type",
    "请输入自定义影视类型": "Please enter a custom film/TV type",
    "逆袭/复仇": "Counterattack / Revenge",
    "霸总/甜宠": "CEO Romance / Sweet Romance",
    "家庭伦理": "Family Ethics",
    "古装/权谋": "Costume / Power Struggle",
    "悬疑/犯罪": "Suspense / Crime",
    "都市情感": "Urban Romance",
    "年代/乡村": "Period / Rural",
    "剧情/情感": "Drama / Emotion",
    "动作/冒险": "Action / Adventure",
    "喜剧/轻松": "Comedy / Light",
    "科幻/奇幻": "Sci-Fi / Fantasy",
    "历史/战争": "History / War",
    "恐怖/惊悚": "Horror / Thriller",
    "生成解说文案": "Generate Narration Copy",
    "生成剪辑脚本": "Generate Editing Script",
    "短剧解说文案": "Short Drama Narration Copy",
    "影视解说文案": "Film/TV Narration Copy",
    "Narration Copy Help": "Generate the narration copy first, review or rewrite it here, then generate the editing script to match footage and timestamps.",
    "Narration copy generated successfully": "Narration copy generated. Please review and edit it.",
    "生成短剧解说脚本": "Generate Short Drama Narration Script",
    "请输入视频脚本": "Please enter the video script",
    "TTS engine does not support precise subtitles": "⚠️ {engine} does not support precise subtitle generation",
    "Manual subtitle editing recommendation": "💡 We recommend adding subtitles manually in a professional editor such as CapCut or Premiere Pro.",
    "Disabled subtitles help": "This TTS engine does not support subtitle generation. Please use another TTS engine.",
    "Tencent Cloud TTS": "Tencent Cloud TTS",
    "Tongyi Qwen3 TTS": "Tongyi Qwen3 TTS",
    "IndexTTS Voice Clone": "IndexTTS-1.5 Voice Clone",
    "Doubao TTS": "Doubao TTS",
    "Edge TTS features": "Completely free, but service stability can vary and voice cloning is not supported.",
    "Edge TTS use case": "Testing and lightweight use",
    "Azure Speech Services features": "Includes a free quota, then pay-as-you-go billing. An overseas credit card may be required.",
    "Azure Speech Services use case": "Enterprise use cases that need a stable service",
    "Tencent Cloud TTS features": "Includes a free quota, good voice quality, multiple voices, and fast access in mainland China.",
    "Tencent Cloud TTS use case": "Personal and enterprise users who need stable Chinese speech synthesis",
    "Tongyi Qwen3 TTS features": "Alibaba Cloud Tongyi Qwen speech synthesis with high-quality voices and multiple voice options.",
    "High-quality Chinese speech synthesis use case": "Users who need high-quality Chinese speech synthesis",
    "IndexTTS features": "A locally or privately deployed IndexTTS-1.5 voice-cloning engine. Choose a resource audio file or upload a reference audio file, then synthesize narration in that voice.",
    "IndexTTS use case": "Best for fixed narrator voices, character dubbing, or generating multiple videos with the same voice. Start the IndexTTS-1.5 API service before use. Deployment package: https://pan.quark.cn/s/0767c9bcefd5",
    "IndexTTS download link": "Download link: https://pan.quark.cn/s/0767c9bcefd5",
    "IndexTTS2 features": "A locally or privately deployed IndexTTS-2 voice-cloning engine with emotion control and fuller generation parameters.",
    "IndexTTS2 use case": "Best for fixed voices, emotional narration, and local speech synthesis workflows that need finer sampling controls. Start the IndexTTS-2 API service before use.",
    "OmniVoice features": "A locally or privately deployed OmniVoice-Pack multilingual TTS engine with automatic voice generation, voice design, and reference-audio cloning.",
    "OmniVoice use case": "Best for local controllable multilingual narration, voice design, or reference-audio cloning. Start the OmniVoice-Pack API service before use.",
    "Doubao TTS features": "Volcengine Doubao speech synthesis with multiple voices and emotions, plus fast access in mainland China.",
    "Local Deployment": "Local Deployment",
    "Cloud Service": "Cloud Service",
    "Select TTS Engine": "Select TTS Engine",
    "Select TTS Engine Help": "Choose the text-to-speech engine you want to use.",
    "TTS Engine Details": "{engine} Details",
    "Features": "Features",
    "Use Case": "Use Case",
    "Registration URL": "Registration URL",
    "Voice Selection": "Voice Selection",
    "Select Edge TTS Voice": "Select an Edge TTS voice",
    "Edge TTS Voice Description": "Edge TTS Voice Notes",
    "Loaded voice count": "Loaded {count} voices",
    "Female Voice": "Female voice",
    "Male Voice": "Male voice",
    "Voice Volume": "Voice Volume",
    "Voice Volume Help Percent": "Adjust voice volume (0-100)",
    "Voice Rate": "Voice Rate",
    "Voice Rate Help 0.5-2.0": "Adjust voice speed (0.5-2.0x)",
    "Voice Pitch": "Voice Pitch",
    "Voice Pitch Help Percent": "Adjust voice pitch (-50% to +50%)",
    "Service Region": "Service Region",
    "Service Region Placeholder": "e.g. eastus",
    "Azure Service Region Help": "Azure Speech Services region, such as eastus, westus2, or eastasia.",
    "Azure Speech Key Help": "Azure Speech Services API key",
    "Voice Name": "Voice Name",
    "Azure Voice Name Help": "Enter an Azure Speech Services voice name. You can use the official voice name directly, such as zh-CN-YunzeNeural.",
    "Common Voice Reference": "Common Voice Reference",
    "Chinese Voices": "Chinese Voices",
    "English Voices": "English Voices",
    "Multilingual": "multilingual",
    "Azure Voices Docs Notice": "For more voices, see the [Azure Speech Services documentation](https://docs.microsoft.com/en-us/azure/cognitive-services/speech-service/language-support).",
    "Quick Select": "Quick Select",
    "Chinese Female Voice": "Chinese Female Voice",
    "Chinese Male Voice": "Chinese Male Voice",
    "English Female Voice": "English Female Voice",
    "Voice name valid": "Voice name is valid: {voice}",
    "Voice name format may be invalid": "Voice name format may be incorrect: {voice}",
    "Azure voice name format notice": "Azure voice names usually follow this format: [language]-[region]-[name]Neural",
    "Azure Speech Services configured": "Azure Speech Services is configured",
    "Please configure service region": "Please configure the service region",
    "Please configure API Key": "Please configure the API Key",
    "Task failed": "Task failed",
    "Script file cannot be empty": "Script file cannot be empty",
    "Video file cannot be empty": "Video file cannot be empty",
    "Export to Jianying Draft": "📤 Export to Jianying Draft",
    "Please configure Jianying draft folder in basic settings": "Please configure the Jianying draft folder in Basic Settings",
    "Jianying draft folder does not exist": "Jianying draft folder does not exist: {path}",
    "Jianying export dialog title": "Confirm draft name",
    "Jianying export dialog description": "Confirm the Jianying draft name before exporting. Once complete, you can open it from the Jianying draft folder.",
    "Jianying export destination": "Save location",
    "Jianying draft name": "Draft name",
    "Please enter Jianying draft name": "Please enter the Jianying draft name",
    "Confirm Export": "Confirm Export",
    "Please enter draft name": "Please enter a draft name",
    "Failed to build parameters": "Failed to build parameters",
    "Exporting to Jianying draft...": "Exporting to Jianying draft, please wait...",
    "Jianying draft exported successfully": "✅ Successfully exported to Jianying draft: {name}",
    "Draft saved to": "📁 Draft saved to: {path}",
    "Failed to export Jianying draft": "❌ Failed to export Jianying draft",
    "Cancel": "Cancel",
    "LLM initialization failed": "⚠️ LLM initialization failed: {error}\n\nPlease check whether the configuration file and dependencies are installed correctly.",
    "Jianying Draft Settings": "Jianying Draft Settings",
    "Jianying Draft Folder Path": "Jianying Draft Folder Path",
    "Jianying Draft Folder Path Help": "Jianying draft folder path, for example: C:\\Users\\Username\\Documents\\JianyingPro Drafts",
    "Custom API endpoint help": "OpenAI-compatible endpoint URL. Use a full /v1 URL for third-party or self-hosted gateways; leave empty for the official OpenAI API.",
    "Recommended API endpoint": "Recommended endpoint",
    "OpenAI compatible gateway help": "{model_type} uses an OpenAI-compatible API, so a complete endpoint URL is required.",
    "Vision model": "Vision model",
    "Text model": "Text model",
    "Model Name Input Help": "Enter the full model name.\n\nCommon examples:",
    "OpenAI compatible providers help": "The vendor is not limited here; OpenAI, DeepSeek, OpenRouter, SiliconFlow, or a self-hosted gateway all work as long as the endpoint is OpenAI-compatible.",
    "OpenAI compatible protocol": "OpenAI-compatible",
    "OpenAI compatible protocol help": "This does not require the official OpenAI model; any service that supports the OpenAI Chat Completions compatible API can be used.",
    "Provider API Key Help": "API key for the model service.\n\nCommon places to get one:",
    "Please fill OpenAI compatible gateway": "Please fill in the OpenAI-compatible gateway URL above, for example: {example}",
    "Please enter API key": "Please enter the API key first",
    "Please enter model name": "Please enter the model name first",
    "Connection test error": "An error occurred while testing the connection",
    "Vision model config saved": "Vision model configuration saved (OpenAI compatible)",
    "Text model config saved": "Text generation model configuration saved (OpenAI compatible)",
    "Failed to save config": "Failed to save configuration",
    "Custom Position (% from top)": "Custom Position (% from top)",
    "Please enter a value between 0 and 100": "Please enter a value between 0 and 100",
    "Please enter a valid number": "Please enter a valid number",
    "None": "None",
    "Uploaded subtitle": "Uploaded subtitle: {file}",
    "Encoding": "Encoding",
    "Size": "Size",
    "Characters": "characters",
    "Ali Bailian Fun-ASR Subtitle Transcription": "Subtitle Processing",
    "Subtitle Processing Method": "Subtitle Processing Method",
    "Fun-ASR Backend": "Fun-ASR Backend",
    "Local FunASR-Pack API": "FunASR (Local)",
    "Local FireRedASR API": "FireRedASR2 (Local)",
    "Ali Bailian Online Fun-ASR": "FunASR (Online)",
    "Local Fun-ASR upload caption": "The current video above will be converted to SRT subtitles through the locally running FunASR-Pack API.",
    "Local FireRed-ASR upload caption": "The current video above will be converted to SRT subtitles through the locally running FireRedASR2-AED-Pack API.",
    "Fun-ASR upload caption": "The current video above will be uploaded to temporary Ali Bailian storage and converted to SRT subtitles with fun-asr.",
    "Auto Transcription Local Caption": "After the final video is merged, it will be converted to SRT subtitles through the locally running FunASR-Pack API.",
    "Auto Transcription FireRed Caption": "After the final video is merged, it will be converted to SRT subtitles through the locally running FireRedASR2-AED-Pack API.",
    "Auto Transcription Online Caption": "After the final video is merged, it will be uploaded to temporary Ali Bailian storage and converted to SRT subtitles with fun-asr.",
    "Local FunASR-Pack API URL": "Local FunASR-Pack API URL",
    "Local FunASR-Pack API URL Help": "For example, http://127.0.0.1:7860. A full /asr endpoint URL is also supported.",
    "Local FireRedASR API URL": "Local ASR API URL",
    "Local FireRedASR API URL Help": "For example, http://127.0.0.1:7867. A full /asr endpoint URL is also supported.",
    "Fun-ASR Hotword": "Hotword",
    "Fun-ASR Hotword Help": "Optional hotwords passed to the local FunASR-Pack API.",
    "Enable speaker diarization": "Enable speaker diarization",
    "Enable speaker diarization Help": "Requires the local FunASR-Pack service to enable and load the spk model.",
    "API Key URL": "API Key URL",
    "Ali Bailian API Key": "Ali Bailian API Key",
    "Ali Bailian API Key Help": "Enter your Ali Bailian API Key. After saving, it will be written to the local config.toml file.",
    "Upload media to transcribe": "Upload audio/video to transcribe",
    "Using selected video for subtitle transcription": "Using current video for subtitle transcription: {file}",
    "Using selected videos for subtitle transcription": "Using {count} current videos for subtitle transcription: {files}",
    "Please select or upload a video first": "Please select or upload a video file above first",
    "Selected video file does not exist": "The selected video file does not exist. Please select or upload it again",
    "Selected video files do not exist": "These selected video files do not exist. Please select or upload them again: {files}",
    "Transcribe subtitles": "Transcribe Subtitles",
    "Calibrate subtitles": "Calibrate Subtitles",
    "Translate subtitles": "Translate Subtitles",
    "Subtitle target language": "Target language",
    "Subtitle target language placeholder": "Chinese",
    "Please enter Ali Bailian API Key": "Please enter the Ali Bailian API Key first",
    "Please enter local FunASR-Pack API URL": "Please enter the local FunASR-Pack API URL first",
    "Please enter local FireRedASR API URL": "Please enter the local ASR API URL first",
    "Please upload media to transcribe": "Please upload the audio or video file to transcribe first",
    "Transcribing with local FunASR-Pack...": "Transcribing subtitles with local FunASR-Pack, please wait...",
    "Transcribing with local FireRedASR...": "Transcribing subtitles with local ASR, please wait...",
    "Transcribing with Fun-ASR...": "Transcribing subtitles with Ali Bailian Fun-ASR, please wait...",
    "Fun-ASR failed without subtitle file": "Fun-ASR transcription failed: no subtitle file was generated",
    "Subtitle transcription succeeded": "Subtitle transcription succeeded: {file}",
    "Subtitle transcription succeeded for multiple files": "Subtitle transcription succeeded for {count} files: {files}",
    "Calibrating subtitles...": "Calibrating subtitles with the LLM, please wait...",
    "Subtitle calibration succeeded": "Subtitle calibration succeeded: {file}",
    "Subtitle calibration succeeded for multiple files": "Subtitle calibration succeeded for {count} files: {files}",
    "Subtitle calibration failed": "Subtitle calibration failed",
    "Translating subtitles...": "Translating subtitles to {language} with the LLM, please wait...",
    "Subtitle translation succeeded": "Subtitle translation succeeded: {file}",
    "Subtitle translation succeeded for multiple files": "Subtitle translation succeeded for {count} files: {files}",
    "Subtitle translation failed": "Subtitle translation failed",
    "Subtitle translation progress": "{file}: {completed}/{total} items · {message}",
    "Transcribed subtitles storage hint": "Previously transcribed subtitles are saved in {path}; drag a file from that folder to upload",
    "Tavily Search Settings": "Tavily Web Search",
    "Tavily API Key": "Tavily API Key",
    "Tavily API Key Help": "Used for web search before plot analysis. When Web Search is enabled, the app searches plot, character, and background context by title, then combines it with subtitles.",
    "Tavily config saved": "Tavily configuration saved",
    "联网搜索": "Web Search",
    "Enable Web Search Help": "When enabled, plot analysis searches the web with Tavily by title before combining those results with subtitles.",
    "Please configure Tavily API Key in Basic Settings": "Please configure the Tavily API Key in Basic Settings first",
    "Please enter short drama name before web search": "Please enter the short drama name before enabling web search",
    "Please enter film/tv title before web search": "Please enter the film/TV title before enabling web search",
    "Searching short drama with Tavily...": "Searching short drama context with Tavily...",
    "Tavily search failed": "Tavily search failed",
    "剧情理解": "Plot Analysis",
    "剧情理解结果": "Plot Analysis Result",
    "Analyzing plot...": "Analyzing plot...",
    "Plot analysis completed": "Plot analysis completed",
    "Please generate or upload subtitles first": "Please transcribe or upload subtitles first",
    "Please transcribe or upload subtitles first": "Please transcribe or upload subtitles first",
    "Fun-ASR transcription failed": "Fun-ASR transcription failed",
    "Validating script format...": "Validating script format...",
    "Script format validation failed": "Script format validation failed",
    "Error Message": "Error Message",
    "Details": "Details",
    "Correct script format example": "Correct script format example",
    "Script format validation error": "An error occurred during script format validation",
    "Script validated and saved successfully": "✅ Script format validated and saved successfully!",
    "Tencent Secret ID Help": "Enter your Tencent Cloud Secret ID",
    "Tencent Secret Key Help": "Enter your Tencent Cloud Secret Key",
    "Tencent Service Region Help": "Select the Tencent Cloud TTS service region",
    "Custom Voice": "Custom Voice",
    "Select Tencent TTS Voice": "Select a Tencent Cloud TTS voice",
    "Tencent Cloud TTS Voice Description": "Tencent Cloud TTS Voice Notes",
    "Female Voices": "Female Voices",
    "Male Voices": "Male Voices",
    "Tencent More Voices Notice": "See the official Tencent Cloud documentation for more voices.",
    "Qwen DashScope API Key Help": "Tongyi Qwen DashScope API Key",
    "TTS Model Name": "TTS Model Name",
    "Qwen TTS Model Help": "Qwen TTS model name, for example qwen3-tts-flash",
    "Select Qwen3 TTS Voice": "Select a Qwen3 TTS voice",
    "API URL": "API URL",
    "IndexTTS API URL Help": "IndexTTS-1.5 API service URL",
    "IndexTTS2 API URL Help": "IndexTTS-2 API service URL. You can enter the service root or the full /tts endpoint.",
    "OmniVoice API URL Help": "OmniVoice-Pack API service URL. You can enter the service root or the full /tts endpoint.",
    "OmniVoice Language Code": "Synthesis Language",
    "OmniVoice Language Code Help": "The language parameter sent to OmniVoice-Pack, such as zh or en.",
    "OmniVoice Generation Mode": "Generation Mode",
    "OmniVoice Generation Mode Help": "Automatic voice needs no extra fields; voice design uses an instruction; reference-audio cloning needs reference audio and matching text.",
    "OmniVoice Mode Auto": "Automatic Voice",
    "OmniVoice Mode Voice Design": "Voice Design",
    "OmniVoice Mode Voice Clone": "Reference Audio Clone",
    "OmniVoice Instruct": "Voice Instruction",
    "OmniVoice Instruct Help": "Describe the desired voice, such as gender, pitch, accent, or style.",
    "OmniVoice Instruct Placeholder": "e.g. female, low pitch, british accent",
    "OmniVoice Reference Text": "Reference Audio Text",
    "OmniVoice Reference Text Help": "The exact transcript of the reference audio. Required when the deployed service has ASR disabled.",
    "OmniVoice Reference Text Placeholder": "Enter the text spoken in the reference audio",
    "OmniVoice Num Step Help": "Diffusion generation steps. Higher values usually improve quality but slow generation.",
    "OmniVoice Guidance Scale Help": "Controls how strongly text conditions guide generation.",
    "OmniVoice Duration": "Target Duration (seconds)",
    "OmniVoice Duration Help": "0 lets the model decide the duration automatically.",
    "OmniVoice Denoise": "Enable Denoise",
    "OmniVoice Denoise Help": "Ask OmniVoice-Pack to denoise the generated output.",
    "OmniVoice Postprocess Output": "Postprocess Output",
    "OmniVoice Postprocess Output Help": "Enable OmniVoice-Pack output post-processing.",
    "OmniVoice Preprocess Prompt": "Preprocess Text",
    "OmniVoice Preprocess Prompt Help": "Enable OmniVoice-Pack text preprocessing.",
    "Reference Audio Source": "Reference Audio Source",
    "Reference Audio Source Help": "Choose a reference audio from the resource directory or upload a new one.",
    "Select from Resource Directory": "Select from Resource Directory",
    "Upload Reference Audio": "Upload Reference Audio",
    "Reference Audio Path": "Reference Audio",
    "Reference Audio Path Help": "Choose the reference audio for voice cloning (WAV/MP3, 3-10 seconds recommended)",
    "No Reference Audio Resources Found": "No reference audio resources found. Please upload a reference audio file.",
    "Preview Reference Audio": "Preview",
    "Preview Reference Audio Help": "Play the selected reference audio.",
    "Upload Reference Audio File": "Upload Reference Audio File",
    "Upload Reference Audio Help": "Upload a clear audio clip for voice cloning",
    "Audio uploaded": "Audio uploaded: {path}",
    "Inference Mode": "Inference Mode",
    "Standard Inference": "Standard Inference",
    "Fast Inference": "Fast Inference",
    "Inference Mode Help": "Standard inference has higher quality but is slower. Fast inference is faster with slightly lower quality.",
    "Advanced Parameters": "Advanced Parameters",
    "Sampling Temperature": "Sampling Temperature",
    "Sampling Temperature Help": "Controls randomness. Higher values are more random; lower values are more deterministic.",
    "Top P Help": "Probability threshold for nucleus sampling. Smaller values make results more deterministic.",
    "Top K Help": "The k value for top-k sampling. 0 disables top-k.",
    "Num Beams": "Num Beams",
    "Num Beams Help": "Number of beams for beam search. Higher values may improve quality but slow generation.",
    "Repetition Penalty": "Repetition Penalty",
    "Repetition Penalty Help": "Higher values reduce repetition, but overly high values may sound unnatural.",
    "Enable Sampling": "Enable Sampling",
    "Enable Sampling Help": "Enable sampling for more natural speech.",
    "IndexTTS Usage Instructions Title": "IndexTTS-1.5 Usage Instructions",
    "IndexTTS Usage Instructions": "**Zero-shot voice cloning**\n\n1. **Prepare reference audio**: upload or specify a clear audio file (3-10 seconds recommended)\n2. **Set API URL**: make sure the IndexTTS-1.5 service is running\n3. **Start synthesis**: the system will use the reference voice to synthesize new speech\n\n**Notes**:\n- Reference audio quality directly affects synthesis quality\n- Use clean audio without background noise when possible\n- Keep text length within a reasonable range\n- The first synthesis may take longer",
    "IndexTTS2 Emotion Parameters": "Emotion Parameters",
    "Emotion Mode": "Emotion Mode",
    "Emotion Mode Help": "Choose the emotion control source for IndexTTS-2.",
    "Emotion Mode Speaker": "Same as speaker reference",
    "Emotion Mode Audio": "Use emotion reference audio",
    "Emotion Mode Vector": "Use emotion vector",
    "Emotion Mode Text": "Use emotion text",
    "Emotion Alpha": "Emotion Alpha",
    "Emotion Alpha Help": "Controls how strongly the emotion condition affects generation. 0 is weak, 1 is strong.",
    "Emotion Reference Audio Path": "Emotion Reference Audio Path",
    "Emotion Reference Audio Path Help": "Local emotion reference audio path used when emotion_mode=audio.",
    "Emotion Text": "Emotion Text",
    "Emotion Text Help": "Emotion description used when emotion_mode=text, such as happy, nervous, or aggrieved.",
    "Emotion Text Placeholder": "e.g. calm, nervous, happy",
    "Use Random Emotion": "Use Random Emotion",
    "Use Random Emotion Help": "Let IndexTTS-2 use random emotion sampling during generation.",
    "Emotion Happy": "Happy",
    "Emotion Angry": "Angry",
    "Emotion Sad": "Sad",
    "Emotion Afraid": "Afraid",
    "Emotion Disgusted": "Disgusted",
    "Emotion Melancholic": "Melancholic",
    "Emotion Surprised": "Surprised",
    "Emotion Calm": "Calm",
    "Max Text Tokens Per Segment": "Max Text Tokens Per Segment",
    "Max Text Tokens Per Segment Help": "Maximum text tokens per segment for IndexTTS-2 inference.",
    "Max Mel Tokens": "Max Mel Tokens",
    "Max Mel Tokens Help": "Controls the maximum mel tokens generated in one request. Higher values can produce longer audio.",
    "IndexTTS2 Usage Instructions Title": "IndexTTS-2 Usage Instructions",
    "IndexTTS2 Usage Instructions": "**IndexTTS-2 voice cloning**\n\n1. **Choose a voice**: reuse IndexTTS-1.5 resource audio or upload a reference audio file\n2. **Set API URL**: for example http://192.168.3.6:7863/tts, or enter the service root\n3. **Tune emotion**: speaker is the default; switch to audio, vector, or text when needed\n4. **Tune generation**: temperature, top_p, top_k, num_beams, repetition_penalty, and max_mel_tokens are sent directly to the IndexTTS-2 API\n\n**Notes**:\n- Reference audio quality directly affects cloning quality\n- The first request may load the model and take longer\n- CPU deployments are much slower than GPU deployments",
    "OmniVoice Usage Instructions Title": "OmniVoice Usage Instructions",
    "OmniVoice Usage Instructions": "**OmniVoice-Pack speech synthesis**\n\n1. **Automatic voice**: set the API URL and language, then synthesize directly.\n2. **Voice design**: fill instruct with the desired gender, pitch, accent, or style.\n3. **Reference-audio clone**: upload or choose reference audio and fill its matching transcript.\n\n**Notes**:\n- The default service URL is http://127.0.0.1:7866/tts\n- Reference-audio cloning requires reference text when the service has no ASR model loaded\n- OmniVoice returns WAV audio, and NarratoAI estimates subtitle segment timing from the audio duration",
    "Volcengine Access Key Help": "Volcengine Access Key",
    "Volcengine Secret Key Help": "Volcengine Secret Key",
    "Doubao AppID Help": "Doubao TTS application AppID",
    "Doubao Token Help": "Doubao TTS application Token",
    "Cluster": "Cluster",
    "Doubao Cluster Help": "Business cluster. Standard voices use volcano_tts.",
    "Select Doubao TTS Voice": "Select a Doubao TTS voice",
    "Voice Rate Help 0.2-3.0": "Adjust voice speed (0.2-3.0)",
    "Voice Volume Help 0.1-2.0": "Adjust voice volume (0.1-2.0)",
    "Voice Pitch Help 0.5-1.5": "Adjust voice pitch (0.5-1.5)",
    "Sentence Silence Duration": "Sentence-end Silence Duration (seconds)",
    "Sentence Silence Duration Help": "Adjust sentence-end silence duration (0.0-2.0 seconds)",
    "Doubao TTS API Key Application Process": "Doubao TTS API Key Application Process",
    "Application Steps": "Application Steps",
    "Doubao TTS Step 1": "1. Open [https://console.volcengine.com/iam/keymanage](https://console.volcengine.com/iam/keymanage)",
    "Doubao TTS Step 2": "2. Create a new Access Key and Secret Key",
    "Doubao TTS Step 3": "3. Open [https://www.volcengine.com/product/voice-tech](https://www.volcengine.com/product/voice-tech)",
    "Doubao TTS Step 4": "4. Click Start Now",
    "Doubao TTS Step 5": "5. In the left API Service Center, find Speech Synthesis under Audio Generation (note: Speech Synthesis, not the speech synthesis large model)",
    "Doubao TTS Step 6": "6. Scroll to the bottom to get the APPID and Access Token",
    "Doubao TTS Fill Credentials Notice": "Fill the Access Key, Secret Key, AppID, and Token above.",
    "Doubao TTS configured": "Doubao TTS is configured",
    "Please configure missing fields": "Please configure: {fields}",
    "Preview Voice Synthesis": "Preview Voice Synthesis",
    "Voice Preview Sample": "Thanks for using NarratoAI. If you have any questions or suggestions, please join the community for help and discussion.",
    "Please configure voice settings first": "Please configure voice settings first",
    "Voice synthesis successful": "Voice synthesis successful!",
    "Voice synthesis failed": "Voice synthesis failed. Please check your configuration.",
    "SoulVoice pitch not supported": "SoulVoice does not support pitch adjustment",
    "Progress": "Progress",
    "Generating script...": "Generating script...",
    "Please select video file first": "Please select a video file first",
    "Extracting keyframes...": "Extracting keyframes...",
    "Script generation completed": "Script generation completed",
    "Script generation completed!": "Script generation completed!",
    "Video script generated successfully": "✅ Video script generated successfully!",
    "Generation error": "❌ An error occurred during generation",
    "Please upload subtitle file first": "Please upload a subtitle file first",
    "Video": "Video",
    "Subtitle": "Subtitle",
    "Preparing script generation": "Preparing script generation",
    "Script generation failed check logs": "Script generation failed. Please check the logs.",
    "Parsing subtitles...": "Parsing subtitles...",
    "Analyzing subtitles with model...": "Waiting for the model to analyze subtitles...",
    "Subtitle file does not exist": "Subtitle file does not exist",
    "Subtitle file is empty or unreadable": "Subtitle file is empty or unreadable",
    "Generating narration copy...": "Generating narration copy...",
    "Generated narration copy is empty": "The generated narration copy is empty",
    "Please generate and review narration copy first": "Please generate and review the narration copy first",
    "Matching narration copy to footage...": "Matching narration copy to footage and timestamps...",
    "Waiting for model stream...": "Waiting for model stream...",
    "Streaming unavailable fallback waiting...": "Streaming is unavailable for this request. Waiting for the full response...",
    "LLM stream window title": "Model reasoning / output stream",
    "Model reasoning stream": "[Model reasoning]",
    "Model output preview": "[Model output preview]",
    "Repairing narration script...": "Repairing narration script...",
    "Generated narration JSON parse failed": "The generated narration format is invalid and could not be parsed as JSON",
    "Generated narration missing items field": "The generated narration is missing the required 'items' field",
    "Generated narration validation failed": "The generated narration script failed validation",
    "Preparing output...": "Preparing output..."
  }
}
