feat: v0.6.0 —— 选中语言(中/英)即时切换,导出不再有预览窗口

导出
- 去掉导出预览对话框:Ctrl+E 直接弹保存对话框,选路径即导出
- 导出失败才弹提示,成功只在状态栏显示一行

多语言
- 新增 LanguageManager:中文(zh_CN)/ 英文(en),视图 → 语言 切换,
  立即生效并记住选择
- 英文翻译由 translations/voiletmark_en.ts(69 条)编译成 .qm 内嵌
- 打包 Qt 官方的 qtbase_zh_CN.qm,文件对话框 / 消息框的按钮也跟着变中文
- 欢迎文档随语言切换(新增英文版)
- retranslateUi 负责菜单、动作、状态栏、侧栏文案的即时刷新

其它
- 删除 ExportDialog 与对应截图,README 同步
This commit is contained in:
2026-10-22 18:07:31 +08:00
parent 2f8726ad47
commit 5d1fb0fab7
14 changed files with 766 additions and 189 deletions
Binary file not shown.
Binary file not shown.
+395
View File
@@ -0,0 +1,395 @@
<?xml version='1.0' encoding='utf-8'?>
<TS version="2.1" language="en_US">
<context>
<name>MainWindow</name>
<message>
<location filename="../src/MainWindow.cpp" line="167" />
<location filename="../src/MainWindow.cpp" line="781" />
<source>新建</source>
<translation>New</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="171" />
<location filename="../src/MainWindow.cpp" line="782" />
<source>打开…</source>
<translation>Open…</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="175" />
<location filename="../src/MainWindow.cpp" line="784" />
<source>保存</source>
<translation>Save</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="179" />
<location filename="../src/MainWindow.cpp" line="785" />
<source>另存为…</source>
<translation>Save As…</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="183" />
<location filename="../src/MainWindow.cpp" line="786" />
<source>导出 PDF…</source>
<translation>Export PDF…</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="187" />
<location filename="../src/MainWindow.cpp" line="787" />
<source>退出</source>
<translation>Quit</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="191" />
<location filename="../src/MainWindow.cpp" line="789" />
<source>撤销</source>
<translation>Undo</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="195" />
<location filename="../src/MainWindow.cpp" line="790" />
<source>重做</source>
<translation>Redo</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="199" />
<location filename="../src/MainWindow.cpp" line="791" />
<source>剪切</source>
<translation>Cut</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="203" />
<location filename="../src/MainWindow.cpp" line="792" />
<source>复制</source>
<translation>Copy</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="207" />
<location filename="../src/MainWindow.cpp" line="793" />
<source>粘贴</source>
<translation>Paste</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="211" />
<location filename="../src/MainWindow.cpp" line="794" />
<source>全选</source>
<translation>Select All</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="215" />
<location filename="../src/MainWindow.cpp" line="798" />
<source>自动换行</source>
<translation>Word Wrap</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="220" />
<location filename="../src/MainWindow.cpp" line="799" />
<source>放大</source>
<translation>Zoom In</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="224" />
<location filename="../src/MainWindow.cpp" line="800" />
<source>缩小</source>
<translation>Zoom Out</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="228" />
<location filename="../src/MainWindow.cpp" line="801" />
<source>实际大小</source>
<translation>Actual Size</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="237" />
<location filename="../src/MainWindow.cpp" line="783" />
<source>打开文件夹…</source>
<translation>Open Folder…</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="241" />
<location filename="../src/MainWindow.cpp" line="407" />
<location filename="../src/MainWindow.cpp" line="796" />
<location filename="../src/MainWindow.cpp" line="817" />
<source>侧栏</source>
<translation>Sidebar</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="255" />
<location filename="../src/MainWindow.cpp" line="797" />
<source>源代码模式</source>
<translation>Source Mode</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="260" />
<location filename="../src/MainWindow.cpp" line="813" />
<source>代码块</source>
<translation>Code Block</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="267" />
<location filename="../src/MainWindow.cpp" line="811" />
<source>标题 %1</source>
<translation>Heading %1</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="278" />
<source>文件夹</source>
<translation>Folder</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="289" />
<location filename="../src/MainWindow.cpp" line="961" />
<source>未打开文件夹</source>
<translation>No folder open</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="315" />
<location filename="../src/MainWindow.cpp" line="771" />
<source>文件</source>
<translation>File</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="319" />
<location filename="../src/MainWindow.cpp" line="776" />
<source>最近打开</source>
<translation>Recent Files</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="327" />
<location filename="../src/MainWindow.cpp" line="772" />
<source>编辑</source>
<translation>Edit</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="337" />
<location filename="../src/MainWindow.cpp" line="773" />
<source>视图</source>
<translation>View</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="348" />
<location filename="../src/MainWindow.cpp" line="777" />
<source>主题</source>
<translation>Theme</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="356" />
<location filename="../src/MainWindow.cpp" line="807" />
<source>6:00–18:00 使用浅色,其余时间使用深色</source>
<translation>Light from 6:00 to 18:00, dark the rest of the day</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="374" />
<location filename="../src/MainWindow.cpp" line="779" />
<source>语言</source>
<translation>Language</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="391" />
<location filename="../src/MainWindow.cpp" line="774" />
<source>格式</source>
<translation>Format</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="392" />
<location filename="../src/MainWindow.cpp" line="778" />
<source>标题</source>
<translation>Heading</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="399" />
<location filename="../src/MainWindow.cpp" line="775" />
<source>帮助</source>
<translation>Help</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="400" />
<location filename="../src/MainWindow.cpp" line="814" />
<location filename="../src/MainWindow.cpp" line="844" />
<source>关于 VoiletMark</source>
<translation>About VoiletMark</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="411" />
<location filename="../src/MainWindow.cpp" line="818" />
<source>显示 / 隐藏文件夹侧栏(Ctrl+B)</source>
<translation>Show / hide the folder sidebar (Ctrl+B)</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="419" />
<location filename="../src/MainWindow.cpp" line="821" />
<source>源代码模式:关闭语法高亮与行号(Ctrl+Shift+M)</source>
<translation>Source mode: turn off highlighting and line numbers (Ctrl+Shift+M)</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="497" />
<location filename="../src/MainWindow.cpp" line="612" />
<source>未命名</source>
<translation>Untitled</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="546" />
<source>打开 Markdown 文件</source>
<translation>Open Markdown File</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="547" />
<source>Markdown 文件 (*.md *.markdown *.mdown *.mkd);;文本文件 (*.txt);;所有文件 (*)</source>
<translation>Markdown files (*.md *.markdown *.mdown *.mkd);;Text files (*.txt);;All files (*)</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="564" />
<source>无法打开文件</source>
<translation>Cannot Open File</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="565" />
<source>读取「%1」失败:%2</source>
<translation>Could not read "%1": %2</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="599" />
<source>另存为</source>
<translation>Save As</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="600" />
<source>Markdown 文件 (*.md);;文本文件 (*.txt);;所有文件 (*)</source>
<translation>Markdown files (*.md);;Text files (*.txt);;All files (*)</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="617" />
<source>导出 PDF</source>
<translation>Export PDF</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="618" />
<source>PDF 文件 (*.pdf)</source>
<translation>PDF files (*.pdf)</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="637" />
<source>导出失败</source>
<translation>Export Failed</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="638" />
<source>没能写出「%1」,换个位置再试一次。</source>
<translation>Could not write "%1". Try another location.</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="642" />
<source>已导出 %1</source>
<translation>Exported to %1</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="657" />
<location filename="../src/MainWindow.cpp" line="664" />
<location filename="../src/MainWindow.cpp" line="669" />
<source>无法保存文件</source>
<translation>Cannot Save File</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="658" />
<source>写入「%1」失败:%2</source>
<translation>Could not write "%1": %2</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="665" />
<source>写入「%1」时发生错误。</source>
<translation>An error occurred while writing "%1".</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="670" />
<source>提交「%1」失败:%2</source>
<translation>Could not commit "%1": %2</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="678" />
<source>已保存 %1</source>
<translation>Saved to %1</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="688" />
<source>VoiletMark</source>
<translation>VoiletMark</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="689" />
<source>「%1」有未保存的修改,是否保存?</source>
<translation>"%1" has unsaved changes. Save them?</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="713" />
<source>%1[*] — VoiletMark</source>
<translation>%1[*] — VoiletMark</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="732" />
<source>行 %1,列 %2</source>
<translation>Line %1, Col %2</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="734" />
<source> 已选 %1 字</source>
<translation> %1 selected</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="735" />
<source> %1 字</source>
<translation> %1 chars</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="848" />
<source>&lt;h3&gt;VoiletMark %1&lt;/h3&gt;&lt;p&gt;一个轻量的跨平台 Markdown 编辑器。&lt;/p&gt;&lt;p&gt;基于 Qt %2 与 C++17 构建。&lt;/p&gt;</source>
<translation>&lt;h3&gt;VoiletMark %1&lt;/h3&gt;&lt;p&gt;A lightweight cross-platform Markdown editor.&lt;/p&gt;&lt;p&gt;Built with Qt %2 and C++17.&lt;/p&gt;</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="883" />
<source>(暂无记录)</source>
<translation>(none)</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="896" />
<source>清空列表</source>
<translation>Clear List</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="906" />
<source>打开文件夹</source>
<translation>Open Folder</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="962" />
<source>文件 → 打开文件夹…</source>
<translation>File → Open Folder…</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="998" />
<source>(没有 Markdown 文件)</source>
<translation>(no Markdown files)</translation>
</message>
</context>
<context>
<name>QObject</name>
<message>
<location filename="../src/ThemeManager.cpp" line="354" />
<source>浅色</source>
<translation>Light</translation>
</message>
<message>
<location filename="../src/ThemeManager.cpp" line="355" />
<source>深色</source>
<translation>Dark</translation>
</message>
<message>
<location filename="../src/ThemeManager.cpp" line="356" />
<source>按时段自动</source>
<translation>Scheduled</translation>
</message>
<message>
<location filename="../src/ThemeManager.cpp" line="359" />
<source>跟随系统</source>
<translation>Follow System</translation>
</message>
</context>
</TS>