",
"tutorialUnderstandBtn": "我明白了",
"contributorsModalTitle": "感谢贡献",
"contributorsPara1": "DocuTranslate是一个开源项目!大家的需求与使用是项目进步的动力。",
@@ -121,135 +132,135 @@
"init_i18n_failed_alert": "加载界面翻译资源失败,请检查网络连接或联系管理员。",
"init_failed_alert": "初始化失败,无法连接到后端服务。请检查服务是否运行或刷新页面。",
"glossaryEmpty": "术语表为空。",
- "parsingSettingsTitleText": "解析配置",
- "txtSettingsTitleText": "TXT翻译选项",
- "jsonSettingsTitleText": "JSON路径配置",
- "xlsxSettingsTitleText": "XLSX翻译选项",
- "docxSettingsTitleText": "DOCX翻译选项",
- "srtSettingsTitleText": "SRT翻译选项",
- "epubSettingsTitleText": "EPUB翻译选项",
- "htmlSettingsTitleText": "HTML翻译选项",
- "assSettingsTitleText": "ASS翻译选项",
- "aiSettingsTitleText": "翻译模型",
- "translationSettingsTitleText": "翻译配置",
- "engineOptionIdentity": "已经是markdown格式",
- "engineOptionMineru": "minerU",
- "engineOptionDocling": "docling",
- "status_selectFileFirst": "请先选择文件!",
+ "engineOptionIdentity": "已经是Markdown格式",
+ "engineOptionMineru": "Mineru",
+ "engineOptionDocling": "Docling",
+ "status_selectFileFirst": "请先选择一个文件!",
"status_fillRequired": "请填写所有必填项!",
- "btn_initializing": "初始化中...",
+ "btn_initializing": "初始化...",
"status_encodingAndSubmitting": "文件编码与提交中...",
- "status_requestOk": "请求成功,任务已开始",
"btn_cancelTranslation": "取消翻译",
+ "status_requestOk": "请求成功,任务已开始。",
"status_requestFail": "请求失败",
- "status_initFail": "初始化失败",
+ "status_initFail": "任务初始化失败",
"status_cancelling": "取消中...",
- "status_cancelSent": "取消请求已发送",
+ "status_cancelSent": "取消请求已发送。",
"status_cancelFail": "取消失败",
"status_gettingStatus": "获取状态中...",
"btn_reTranslate": "重新翻译",
- "status_updateError": "更新状态失败",
- "pdf_preparing": "正在准备PDF...",
- "pdf_print_failed": "打印PDF失败,请尝试手动下载HTML并使用浏览器打印。",
- "pdf_fetch_failed": "获取翻译内容失败,无法生成PDF。",
- "preview_bilingual": "双语预览",
- "preview_translatedOnly": "仅译文预览",
+ "status_updateError": "状态更新出错。",
+ "admin_tasklist_failed": "管理员模式:加载任务列表失败。",
"preview_loading": "加载预览中...",
"preview_cantReadOriginal": "无法读取原文文件内容进行预览。",
"preview_cantPreviewType": "无法预览此文件类型",
- "preview_noOriginalCache": "页面刷新后无法获取原文,请重新上传文件以预览。",
- "preview_loadFailed": "加载预览失败",
- "admin_tasklist_failed": "管理员模式:加载任务列表失败。"
+ "preview_noOriginalCache": "无原文缓存可供预览。",
+ "preview_loadFailed": "加载预览失败。",
+ "pdf_preparing": "正在准备PDF以便打印...",
+ "pdf_print_failed": "调用打印功能失败。请尝试手动右键点击预览内容并选择打印。",
+ "pdf_fetch_failed": "获取预览内容失败,无法生成PDF。",
+ "preview_bilingual": "双语对照预览",
+ "preview_translatedOnly": "仅译文预览"
},
"en": {
"pageTitle": "DocuTranslate - Interactive Document Translation",
"tutorialBtn": "Tutorial",
"projectContributeBtn": "Contribute",
"workflowTitle": "Select Workflow",
- "workflowOptionMarkdown": "Convert to Markdown then Translate (.pdf/.md/.png etc.)",
+ "workflowOptionMarkdown": "To Markdown then Translate (.pdf/.md/.png, etc.)",
"workflowOptionTxt": "Plain Text Translation (.txt)",
- "workflowOptionJson": "JSON Translation (.json)",
+ "workflowOptionEpub": "EPUB Translation (.epub)",
"workflowOptionDocx": "DOCX Translation (.docx)",
"workflowOptionXlsx": "XLSX Translation (.xlsx/.csv)",
"workflowOptionSrt": "SRT Subtitle Translation (.srt)",
- "workflowOptionEpub": "EPUB Translation (.epub)",
- "workflowOptionHtml": "HTML Translation (.html)",
"workflowOptionAss": "ASS Subtitle Translation (.ass)",
- "autoWorkflowLabel": "Auto-select Workflow",
+ "workflowOptionJson": "JSON Translation (.json)",
+ "workflowOptionHtml": "HTML Translation (.html)",
+ "autoWorkflowLabel": "Auto-select workflow",
+ "txtSettingsTitleText": "TXT Translation Options",
"insertModeLabel": "Insert Mode",
- "insertModeReplace": "Replace Original (Replace)",
- "insertModeAppend": "Append to Original (Append)",
- "insertModePrepend": "Prepend to Original (Prepend)",
- "insertModeHelpTxt": "Choose how to insert the translated text.",
+ "insertModeReplace": "Replace Original",
+ "insertModeAppend": "Append to Original",
+ "insertModePrepend": "Prepend to Original",
+ "insertModeHelpTxt": "Choose how the translated text should be inserted.",
"separatorLabel": "Separator",
"separatorPlaceholderSimple": "e.g., \\n---\\n",
- "separatorHelp": "Separator between original and translated text when using Append or Prepend mode. \\n represents a newline.",
- "separatorHelpAss": "Separator between original and translated text when using Append or Prepend mode. \\N represents a newline in ass.",
- "insertModeHelpDocx": "Choose how to insert the translated text.",
- "separatorPlaceholder": "e.g., \\n---Translated---\\n",
- "insertModeHelpXlsx": "Choose how to insert the translated text into cells.",
+ "separatorHelp": "Characters to separate original and translated text in 'Append' or 'Prepend' mode. \\n represents a newline.",
+ "docxSettingsTitleText": "DOCX Translation Options",
+ "insertModeHelpDocx": "Choose how the translated text should be inserted.",
+ "separatorPlaceholder": "e.g., \\n---translation---\\n",
+ "xlsxSettingsTitleText": "XLSX Translation Options",
+ "insertModeHelpXlsx": "Choose how the translated text should be inserted into cells.",
"xlsxTranslateRegionsLabel": "Translate Regions (Optional)",
"xlsxTranslateRegionsPlaceholder": "One region per line, e.g., Sheet1!A1:B10 (applies to all sheets if sheet name is omitted)",
- "insertModeHelpSrt": "Choose how to insert the translated text.",
- "insertModeHelpEpub": "Choose how to insert the translated text.",
- "insertModeHelpHtml": "Choose how to insert the translated text.",
- "separatorPlaceholderAss": "e.g., \\N (newline character)",
- "insertModeHelpAss": "Choose how to insert the translated text.",
+ "srtSettingsTitleText": "SRT Translation Options",
+ "insertModeHelpSrt": "Choose how the translated text should be inserted.",
+ "epubSettingsTitleText": "EPUB Translation Options",
+ "insertModeHelpEpub": "Choose how the translated text should be inserted.",
+ "htmlSettingsTitleText": "HTML Translation Options",
+ "insertModeHelpHtml": "Choose how the translated text should be inserted.",
+ "assSettingsTitleText": "ASS Translation Options",
+ "insertModeHelpAss": "Choose how the translated text should be inserted.",
+ "separatorPlaceholderAss": "e.g., \\N (newline)",
+ "separatorHelpAss": "Characters to separate original and translated text in 'Append' or 'Prepend' mode. \\N is the newline character in ASS format.",
+ "jsonSettingsTitleText": "JSON Path Configuration",
"jsonPathLabel": "JSON Paths to Translate",
"jsonPathPlaceholder": "One path per line, e.g.:\n$.name\n$.*",
"jsonPathHelp": "Uses jsonpath-ng syntax. Each line represents a JSON path. All strings within the matched objects will be translated.",
+ "parsingSettingsTitleText": "Parsing Configuration",
"parsingEngineLabel": "Parsing Engine",
- "parsingEngineHelp": "If the uploaded file is already in .md format, this can be skipped.",
+ "parsingEngineHelp": "If the uploaded file is already in .md format, this can be left unselected.",
"getMineruTokenTitle": "Get Mineru Token",
"mineruTokenPlaceholder": "Required when using the Mineru engine",
"modelVersionLabel": "Mineru Model Version",
"modelVersionVlm": "VLM",
"modelVersionPipline": "Pipeline",
- "modelVersionHelp": "Mineru VLM is a newer model in internal testing.",
+ "modelVersionHelp": "Mineru VLM is a newer, internal test model.",
"formulaOcrLabel": "Formula Recognition",
"codeOcrLabel": "Code Recognition",
+ "aiSettingsTitleText": "Translation Model",
"skipTranslationLabel": "Skip Translation",
"platformLabel": "Select Platform",
"platformCustom": "Custom Endpoint",
- "baseUrlLabel": "API Address (Base URL)",
- "baseUrlPlaceholder": "OpenAI-Compatible Address",
+ "baseUrlLabel": "API Base URL",
+ "baseUrlPlaceholder": "OpenAI-compatible URL",
"getApiKeyTitle": "Get API Key",
"apiKeyPlaceholder": "Enter your API Key",
"modelIdLabel": "Select Model",
"modelIdPlaceholder": "e.g., gpt-4o, glm-4",
+ "translationSettingsTitleText": "Translation Configuration",
"targetLanguageLabel": "Target Language",
"targetLanguageCustom": "Other (Custom)",
"customLangPlaceholder": "Enter target language, e.g., Italian",
"thinkingModeLabel": "Thinking Mode",
- "thinkingModeTooltip": "Sets whether the mixed-inference model should 'think'. Currently supported by Zhipu's glm4.5 series, Volcengine's seed1.6 series, SiliconFlow platform, and Google's Gemini series. Disabling 'think' is recommended.",
+ "thinkingModeTooltip": "Sets whether the hybrid inference model should 'think'. Supported models include Zhipu's glm4.5 series, Volcengine's seed1.6 series, SiliconFlow platform, and Google's Gemini series. Disabling is recommended.",
"thinkingModeEnable": "Enable",
"thinkingModeDisable": "Disable (Recommended)",
"thinkingModeDefault": "Default",
"customPromptLabel": "Custom Prompt",
- "customPromptPlaceholder": "Optional, e.g., 'Do not translate personal names'",
+ "customPromptPlaceholder": "Optional, e.g., 'Do not translate proper nouns'",
"chunkSizeLabel": "Chunk Size",
"resetBtn": "Reset",
"concurrentLabel": "Concurrency",
"retryLabel": "Retry Count",
"glossaryGenTitle": "Glossary",
"glossaryLabel": "Glossary (Optional)",
- "glossaryHelp": "Select one or more CSV files. Files must contain 'src' and 'dst' headers, representing source and destination text respectively.",
+ "glossaryHelp": "Select one or more CSV files. Files must have 'src' and 'dst' columns for source and destination terms.",
"viewGlossaryBtn": "View Glossary",
"clearGlossaryBtn": "Clear",
"glossaryGenEnableLabel": "Auto-generate Glossary",
"glossaryGenConfigLabel": "Glossary Generation Config",
"glossaryGenConfigSame": "Same as Translation Config",
"glossaryGenConfigCustom": "Custom",
- "githubInfo": "GitHub Homepage (Stars are welcome❤): https://github.com/xunbu/docutranslate",
- "qqGroupInfo": "QQ Group: 1047781902",
+ "githubInfo": "GitHub Homepage (stars❤ welcome): https://github.com/xunbu/docutranslate",
+ "qqGroupInfo": "QQ Group for discussions: 1047781902",
"taskListTitle": "Task List",
"newTaskBtn": "New Task",
"noTaskPlaceholder": "No tasks yet. Click 'New Task' to get started!",
"taskCardIdLabel": "Task ID",
"taskCardIdPlaceholder": "Waiting for submission...",
"taskCardFileDrop": "Click or drag file here",
- "taskCardFileSelected": "File Selected",
- "taskCardFilenameLabel": "Filename: ",
+ "taskCardFileSelected": "File selected",
+ "taskCardFilenameLabel": "Filename:",
"taskCardLogLabel": "Log",
"taskCardStatusWaiting": "Waiting for file upload...",
"taskCardPreviewBtn": "Preview",
@@ -257,24 +268,24 @@
"taskCardAttachmentBtn": "Attachments",
"taskCardStartBtn": "Start Translation",
"downloadMdEmbedded": "Markdown (Embedded Images)",
- "downloadMdZip": "Markdown (Zip)",
+ "downloadMdZip": "Markdown (.zip)",
"downloadAss": "ASS",
"previewTitle": "Preview",
"previewBilingualBtn": "Bilingual",
"previewTranslatedOnlyBtn": "Translated Only",
"previewOriginal": "Original",
- "previewTranslated": "Translated",
+ "previewTranslated": "Translation",
"closeBtn": "Close",
"downloadBtn": "Download",
"tutorialModalTitle": "Tutorial",
- "tutorialModalBody": "
Video tutorials can be found by searching for docutranslate on Bilibili.
Welcome to DocuTranslate! Please follow these steps to translate your documents:
Select Workflow
First, select your desired translation process at the top of the settings panel. Different workflows are suitable for different file types:
Convert to Markdown then Translate: Suitable for translating PDFs, markdown files, images, etc.
Plain Text Translation: For translating plain text files like .txt.
JSON Translation: For translating specific fields within .json files.
DOCX Translation: For translating .docx files.
XLSX Translation: For translating .xlsx spreadsheets or .csv files.
SRT Subtitle Translation: For translating .srt subtitle files.
EPUB Translation: For translating .epub e-book files.
HTML Translation: For translating .html files.
New Feature: The 'Auto-select Workflow' switch is now enabled by default. Simply upload your file, and the system will automatically match it with the appropriate workflow to simplify the process.
Configure Parameters
Configure the settings according to your chosen workflow. All settings are automatically saved in your browser.
Parsing Config (Only shown for 'Convert to Markdown' workflow):
Parsing Engine: Choose an engine to convert your file (e.g., PDF) into a translation-friendly Markdown format. If your file is already in Markdown, no selection is needed.
Mineru Token: If you select the minerU engine, you need to enter your token here.
TXT/DOCX/XLSX/SRT/EPUB/HTML Translation Options (Shown for corresponding workflows):
Insert Mode: Defines how the translation result is placed in the document or subtitle. You can choose to 'Replace' the original, 'Append' after it, or 'Prepend' before it.
Separator: When 'Append' or 'Prepend' mode is selected, this is used to insert a separator between the original and translated text.
JSON Path Config (Only shown for 'JSON Translation' workflow):
JSON Paths to Translate: Enter one JSONPath expression per line to specify the fields to be translated.
For example: $..description translates all values for the key 'description'. $.items[0].name translates the name of the first item. $.* translates all strings.
Translation Model:
Skip Translation: If checked, only document parsing and format conversion will be performed, without calling an AI for translation.
Select Platform/API Address/API Key/Model ID: Configure the AI translation service you wish to use.
Refer to the platform's documentation for Model IDs. It's recommended to use non-inference or mixed-inference models (with 'thinking' turned off).
The better the model's ability to follow instructions, the lower the probability of errors and missed translations.
Translation Config:
Target Language/Custom Prompt/Glossary: Specify the target language for the translation, add any additional instructions, and use a glossary to ensure the accuracy of specific term translations.
Thinking Mode: Sets whether the mixed-inference model should 'think'. Currently supported by Zhipu's glm4.5 series, Volcengine's seed1.6 series, SiliconFlow platform, and Google's Gemini series. Disabling 'think' is recommended.
Chunk Size/Concurrency/Temperature/Retry Count: The size of chunks sent to the AI, number of concurrent requests, temperature, and retry attempts on failure. The default values are usually sufficient.
Upload File
In the task list on the right, click or drag your document into the file upload area.
Start Translation
Once the file is successfully selected, click the Start Translation button on the bottom right of the task card. The system will begin processing the task, and you can view real-time progress in the log area.
View & Download
After the translation is complete, action buttons will appear on the task card:
Preview: Compare the original and translated text in a side-panel (for reference only).
Download: Download the translated document in various formats, including PDF, DOCX, XLSX, HTML, and Markdown.
Attachments: If any additional files were generated during the translation (like a glossary), you can download them here.
Tip: All settings are automatically saved in your browser's local storage for future use.
",
+ "tutorialModalBody": "
Video tutorials can be found by searching for docutranslate on Bilibili.
Welcome to DocuTranslate! Please follow these steps to translate your document:
Step 1: Select Workflow
At the top of the left-hand settings panel, first choose the process that best suits your file type.
Tip: 'Auto-select workflow' is enabled by default. Simply upload your file, and the system will automatically match it with the appropriate workflow to simplify the process.
To Markdown then Translate: Suitable for translating PDF, Markdown, images, etc. This is the most versatile and powerful mode.
Plain Text Translation: For translating .txt plain text files.
EPUB Translation: For translating .epub e-book files.
DOCX Translation: For translating .docx Word documents.
XLSX Translation: For translating .xlsx or .csv spreadsheet files.
SRT Subtitle Translation: For translating .srt subtitle files.
ASS Subtitle Translation: For translating .ass advanced subtitle files.
JSON Translation: For translating specific fields within .json files.
HTML Translation: For translating .html web files.
Step 2: Configure Parameters
After selecting a workflow, the relevant configuration options will appear below. Please complete the settings in order (all configurations are automatically saved in your browser):
A. Workflow-Specific Options (Appear based on your selection in Step 1):
If you chose 'To Markdown then Translate', configure Parsing Configuration:
Parsing Engine: Select an engine to convert your file (like a PDF) into a translation-friendly Markdown format. No selection is needed if your file is already Markdown.
Mineru Token: If you select the minerU engine, you need to enter your token here.
If you chose 'Plain Text/DOCX/XLSX/SRT/ASS/EPUB/HTML', configure its Translation Options:
Insert Mode: Defines how the translation result is placed in the document. You can choose to 'Replace' the original, 'Append' after, or 'Prepend' before it.
Separator: When 'Append' or 'Prepend' mode is selected, this is used to insert a separator between the original and translated text (e.g., \\N is a common newline separator in ASS format).
If you chose 'JSON Translation', configure JSON Paths:
JSON Paths to Translate: Enter one JSONPath expression per line to specify the fields to be translated. E.g., $..description.
B. General Options (Apply to all workflows):
Translation Model:
Select Platform/API Base URL/API Key/Model ID: Configure the AI translation service you wish to use. The stronger the model's instruction-following capability, the lower the probability of errors and missed translations.
Skip Translation: If checked, only document parsing and format conversion will be performed, without calling an AI for translation.
Translation Configuration:
Target Language: Specify the target language for the translation.
Custom Prompt: Optional, add extra instructions like 'Do not translate proper nouns'.
Thinking Mode: A setting for certain models that support hybrid inference; 'Disable (Recommended)' is suggested.
Chunk Size/Concurrency, etc.: Advanced parameters to adjust performance and API request behavior, usually fine to leave as default.
Glossary:
Upload Glossary (Optional): Upload a CSV file (must contain 'src' and 'dst' columns) to ensure consistency and accuracy of specific term translations.
Auto-generate Glossary: When enabled, the program will first extract terms from the original text to generate a glossary, and then proceed with the translation.
Step 3: Upload File
In the task list on the right, click or drag your document into the file upload area.
Step 4: Start Translation
Once the file is successfully selected, click the Start Translation button on the bottom right of the task card. The system will begin processing, and you can view real-time progress in the log area.
Step 5: View & Download
After the translation is complete, action buttons will appear below the task card:
Preview: Compare the original and translated text side-by-side in a panel that slides out from the right.
Download: Download the translated document in various formats, including PDF, DOCX, Markdown, etc.
Attachments: If any additional files were generated during the translation (like an auto-generated glossary), they can be downloaded here.
Important Note: All your settings are automatically saved locally in your browser for your next visit.
",
"tutorialUnderstandBtn": "I Understand",
"contributorsModalTitle": "Thanks for Contributing",
"contributorsPara1": "DocuTranslate is an open-source project! The community's needs and usage are the driving force behind its progress.",
- "contributorsPara2": "Thank you to everyone who has sponsored the project, submitted code, provided valuable suggestions, and starred the project!",
+ "contributorsPara2": "Thank you to all friends who have sponsored the project, submitted code, provided valuable suggestions, and starred the project!",
"contributorsWelcome": "You are welcome to contribute in the following ways:",
- "contributorsGithub": "GitHub Homepage",
- "contributorsPR": "Submit Pull Request",
+ "contributorsGithub": "GitHub Page",
+ "contributorsPR": "Submit a Pull Request",
"contributorsIssue": "Report an Issue",
"contributorsQQ": "Or contact the author via QQ group: 1047781902",
"glossaryModalTitle": "Current Glossary",
@@ -282,45 +293,34 @@
"glossaryTableDestination": "Destination (dst)",
"init_i18n_failed_alert": "Failed to load interface translations. Please check your network connection or contact an administrator.",
"init_failed_alert": "Initialization failed, could not connect to the backend service. Please ensure the service is running and refresh the page.",
- "glossaryEmpty": "Glossary is empty.",
- "parsingSettingsTitleText": "Parsing Config",
- "txtSettingsTitleText": "TXT Translation Options",
- "jsonSettingsTitleText": "JSON Path Config",
- "xlsxSettingsTitleText": "XLSX Translation Options",
- "docxSettingsTitleText": "DOCX Translation Options",
- "srtSettingsTitleText": "SRT Translation Options",
- "epubSettingsTitleText": "EPUB Translation Options",
- "htmlSettingsTitleText": "HTML Translation Options",
- "assSettingsTitleText": "ASS Translation Options",
- "aiSettingsTitleText": "Translation Model",
- "translationSettingsTitleText": "Translation Config",
+ "glossaryEmpty": "The glossary is empty.",
"engineOptionIdentity": "Already in Markdown format",
- "engineOptionMineru": "minerU",
- "engineOptionDocling": "docling",
+ "engineOptionMineru": "Mineru",
+ "engineOptionDocling": "Docling",
"status_selectFileFirst": "Please select a file first!",
"status_fillRequired": "Please fill in all required fields!",
"btn_initializing": "Initializing...",
"status_encodingAndSubmitting": "Encoding and submitting file...",
- "status_requestOk": "Request successful, task has started",
"btn_cancelTranslation": "Cancel Translation",
- "status_requestFail": "Request Failed",
- "status_initFail": "Initialization Failed",
+ "status_requestOk": "Request successful, task started.",
+ "status_requestFail": "Request failed",
+ "status_initFail": "Task initialization failed",
"status_cancelling": "Cancelling...",
- "status_cancelSent": "Cancellation request sent",
+ "status_cancelSent": "Cancellation request sent.",
"status_cancelFail": "Cancellation failed",
"status_gettingStatus": "Getting status...",
- "btn_reTranslate": "Re-translate",
- "status_updateError": "Failed to update status",
- "pdf_preparing": "Preparing PDF...",
- "pdf_print_failed": "Failed to print PDF. Please try downloading the HTML manually and printing it from your browser.",
- "pdf_fetch_failed": "Failed to fetch translated content, cannot generate PDF.",
- "preview_bilingual": "Bilingual Preview",
- "preview_translatedOnly": "Translated-Only Preview",
+ "btn_reTranslate": "Translate Again",
+ "status_updateError": "Error updating status.",
+ "admin_tasklist_failed": "Admin mode: Failed to load task list.",
"preview_loading": "Loading preview...",
- "preview_cantReadOriginal": "Could not read original file content for preview.",
+ "preview_cantReadOriginal": "Could not read the original file for preview.",
"preview_cantPreviewType": "Cannot preview this file type",
- "preview_noOriginalCache": "Original file is not available after page refresh. Please re-upload to preview.",
+ "preview_noOriginalCache": "No original file cached for preview.",
"preview_loadFailed": "Failed to load preview.",
- "admin_tasklist_failed": "Admin Mode: Failed to load task list."
+ "pdf_preparing": "Preparing PDF for printing...",
+ "pdf_print_failed": "Failed to invoke print function. Please try right-clicking the preview content and selecting 'Print'.",
+ "pdf_fetch_failed": "Failed to fetch preview content, cannot generate PDF.",
+ "preview_bilingual": "Bilingual Preview",
+ "preview_translatedOnly": "Translated-Only Preview"
}
}
\ No newline at end of file
diff --git a/docutranslate/static/index.html b/docutranslate/static/index.html
index 075ce71..9c337f6 100644
--- a/docutranslate/static/index.html
+++ b/docutranslate/static/index.html
@@ -1 +1 @@
-
DocuTranslate - 交互式文档翻译