feat: v0.12.0 —— 顶部工具栏、最近目录、统一配置文件
- 顶部工具栏:新建 / 打开 / 保存,以及「最近文件」「最近目录」下拉菜单 - 文件菜单同样拆成「最近文件」「最近目录」两个子菜单,各记 8 条、可分别清空 - 启动时自动打开上次编辑的文件,文件不存在则显示欢迎文档 - 所有设置改用 AppConfig 单例写进同一个 config.ini;关于对话框显示其路径 - 修掉编辑器一创建就被标成「已修改」的问题(setDocumentMargin 的副作用), 否则恢复上次文件时会误弹保存提示 - 工具栏加了配套的 QSS 与中英文翻译,截图更新到 0.12.0
This commit is contained in:
@@ -2,10 +2,13 @@
|
||||
|
||||
一个轻量的跨平台 Markdown 编辑器,基于 **Qt 5 / C++17** 构建。
|
||||
|
||||
当前版本 **0.11.0**。
|
||||
当前版本 **0.12.0**。
|
||||
|
||||
## 界面
|
||||
|
||||
窗口从上到下依次是菜单栏、工具栏、侧栏 + 编辑区、状态栏。工具栏固定放
|
||||
**新建 / 打开 / 保存**,以及 **最近文件**、**最近目录** 两个下拉菜单。
|
||||
|
||||
| 浅色 · 编辑模式 | 深色 · 编辑模式 |
|
||||
| --- | --- |
|
||||
|  |  |
|
||||
@@ -121,11 +124,27 @@ Windows / macOS 保留系统原生对话框。
|
||||
|
||||
### 文件
|
||||
|
||||
- 新建、打开、保存、另存为、最近打开(最多 8 条)
|
||||
- 新建、打开、保存、另存为
|
||||
- **最近文件** / **最近目录**:各记 8 条,文件菜单和工具栏上的下拉菜单都能打开,
|
||||
两个列表可以分别清空
|
||||
- **启动时自动打开上次编辑的文件**;文件已经被删掉就退回欢迎文档
|
||||
- 保留原文件的 **BOM** 与 **CRLF** 换行风格,保存时原子写入(`QSaveFile`)
|
||||
- 关闭或切换文件时提示未保存的修改
|
||||
- 记忆窗口位置、字号、换行开关、侧栏状态等设置
|
||||
|
||||
### 配置文件
|
||||
|
||||
所有设置都写进同一个 INI 文件,换机器时把它拷过去就行:
|
||||
|
||||
| 平台 | 路径 |
|
||||
| --- | --- |
|
||||
| Windows | `%LOCALAPPDATA%\VoiletMark\VoiletMark\config.ini` |
|
||||
| Linux | `~/.config/VoiletMark/VoiletMark/config.ini` |
|
||||
| macOS | `~/Library/Preferences/VoiletMark/VoiletMark/config.ini` |
|
||||
|
||||
确切路径也显示在 **帮助 → 关于 VoiletMark** 里。文件里记着主题、语言、字号、
|
||||
自动换行、侧栏状态、最近文件 / 最近目录、上次打开的文件和上次的文件夹。
|
||||
|
||||
### 主题
|
||||
|
||||
四种模式:
|
||||
@@ -236,7 +255,8 @@ src/
|
||||
├── main.cpp 入口:命令行解析、Fusion 样式、主题 / 语言初始化
|
||||
├── ThemeManager.{h,cpp} 四种主题模式 + 系统检测 + 调色板 / QSS 生成
|
||||
├── LanguageManager.{h,cpp} 中英文切换
|
||||
├── MainWindow.{h,cpp} 菜单、文件读写、侧栏、Git 工具栏、状态栏、设置
|
||||
├── AppConfig.{h,cpp} 所有设置共用的 config.ini
|
||||
├── MainWindow.{h,cpp} 菜单、工具栏、文件读写、侧栏、Git 工具栏、状态栏、设置
|
||||
├── MarkdownEditor.{h,cpp} 编辑器控件:行号、缩进、代码框装饰、源码模式
|
||||
├── MarkdownHighlighter.{h,cpp} Markdown 着色与就地渲染
|
||||
├── CodeHighlight.{h,cpp} 多语言语法高亮 tokenizer
|
||||
|
||||
+3
-1
@@ -1,6 +1,6 @@
|
||||
TEMPLATE = app
|
||||
TARGET = VoiletMark
|
||||
VERSION = 0.11.0
|
||||
VERSION = 0.12.0
|
||||
|
||||
QT += core gui widgets
|
||||
|
||||
@@ -23,6 +23,7 @@ SOURCES += \
|
||||
src/MarkdownEditor.cpp \
|
||||
src/MarkdownHighlighter.cpp \
|
||||
src/MarkdownRenderer.cpp \
|
||||
src/AppConfig.cpp \
|
||||
src/CodeHighlight.cpp \
|
||||
src/GitRunner.cpp \
|
||||
src/LanguageManager.cpp \
|
||||
@@ -33,6 +34,7 @@ HEADERS += \
|
||||
src/MarkdownEditor.h \
|
||||
src/MarkdownHighlighter.h \
|
||||
src/MarkdownRenderer.h \
|
||||
src/AppConfig.h \
|
||||
src/CodeHighlight.h \
|
||||
src/GitRunner.h \
|
||||
src/LanguageManager.h \
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 111 KiB After Width: | Height: | Size: 102 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 111 KiB After Width: | Height: | Size: 102 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 126 KiB After Width: | Height: | Size: 112 KiB |
@@ -0,0 +1,34 @@
|
||||
#include "AppConfig.h"
|
||||
|
||||
#include <QDir>
|
||||
#include <QFileInfo>
|
||||
#include <QStandardPaths>
|
||||
|
||||
namespace {
|
||||
|
||||
QString configFilePath()
|
||||
{
|
||||
const QString directory = QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation);
|
||||
return QDir(directory).filePath(QStringLiteral("config.ini"));
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
QString AppConfig::filePath()
|
||||
{
|
||||
return configFilePath();
|
||||
}
|
||||
|
||||
QSettings &AppConfig::settings()
|
||||
{
|
||||
static QSettings *instance = nullptr;
|
||||
if (!instance) {
|
||||
const QString path = configFilePath();
|
||||
QDir().mkpath(QFileInfo(path).absolutePath());
|
||||
instance = new QSettings(path, QSettings::IniFormat);
|
||||
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
|
||||
instance->setIniCodec("UTF-8");
|
||||
#endif
|
||||
}
|
||||
return *instance;
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
#pragma once
|
||||
|
||||
#include <QSettings>
|
||||
#include <QString>
|
||||
|
||||
/// 统一的应用配置:所有设置写进同一个 INI 文件,
|
||||
/// 而不是散落在系统注册表 / 各自的配置目录里。
|
||||
///
|
||||
/// Linux: ~/.config/VoiletMark/VoiletMark/config.ini
|
||||
/// Windows: %LOCALAPPDATA%/VoiletMark/VoiletMark/config.ini
|
||||
/// macOS: ~/Library/Preferences/VoiletMark/VoiletMark/config.ini
|
||||
namespace AppConfig {
|
||||
|
||||
QSettings &settings();
|
||||
QString filePath();
|
||||
|
||||
} // namespace AppConfig
|
||||
@@ -5,6 +5,8 @@
|
||||
#include <QSettings>
|
||||
#include <QTranslator>
|
||||
|
||||
#include "AppConfig.h"
|
||||
|
||||
LanguageManager *LanguageManager::instance()
|
||||
{
|
||||
static LanguageManager *manager = new LanguageManager();
|
||||
@@ -30,7 +32,7 @@ QString LanguageManager::displayName(const QString &code)
|
||||
|
||||
void LanguageManager::initialize()
|
||||
{
|
||||
QSettings settings;
|
||||
QSettings &settings = AppConfig::settings();
|
||||
QString code = settings.value(QStringLiteral("ui/language")).toString();
|
||||
if (!availableLanguages().contains(code)) {
|
||||
code = QLocale::system().language() == QLocale::English
|
||||
@@ -77,6 +79,6 @@ void LanguageManager::setLanguage(const QString &code)
|
||||
}
|
||||
|
||||
m_language = normalized;
|
||||
QSettings().setValue(QStringLiteral("ui/language"), m_language);
|
||||
AppConfig::settings().setValue(QStringLiteral("ui/language"), m_language);
|
||||
emit languageChanged();
|
||||
}
|
||||
|
||||
+129
-25
@@ -1,5 +1,6 @@
|
||||
#include "MainWindow.h"
|
||||
|
||||
#include "AppConfig.h"
|
||||
#include "GitRunner.h"
|
||||
#include "LanguageManager.h"
|
||||
#include "MarkdownEditor.h"
|
||||
@@ -43,6 +44,7 @@
|
||||
#include <QTextCursor>
|
||||
#include <QTextDocument>
|
||||
#include <QTimer>
|
||||
#include <QToolBar>
|
||||
#include <QToolButton>
|
||||
#include <QVBoxLayout>
|
||||
#include <QWidget>
|
||||
@@ -176,8 +178,9 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
connect(m_git, &GitRunner::finished, this, &MainWindow::onGitFinished);
|
||||
|
||||
createActions();
|
||||
createSidebar();
|
||||
createMenus();
|
||||
createToolBar();
|
||||
createSidebar();
|
||||
createStatusBar();
|
||||
loadSettings();
|
||||
refreshRecentMenu();
|
||||
@@ -193,12 +196,51 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
connect(LanguageManager::instance(), &LanguageManager::languageChanged,
|
||||
this, &MainWindow::retranslateUi);
|
||||
|
||||
showWelcomeDocument();
|
||||
// 恢复上次打开的文件;没有记录或文件已不存在时显示欢迎文档
|
||||
const QString lastFile =
|
||||
AppConfig::settings().value(QStringLiteral("session/lastFile")).toString();
|
||||
if (!lastFile.isEmpty() && QFileInfo::exists(lastFile)) {
|
||||
openPath(lastFile);
|
||||
} else {
|
||||
showWelcomeDocument();
|
||||
}
|
||||
|
||||
updateEditActionStates();
|
||||
updateStatusBar();
|
||||
m_editor->setFocus();
|
||||
}
|
||||
|
||||
void MainWindow::createToolBar()
|
||||
{
|
||||
m_toolBar = addToolBar(tr("常用"));
|
||||
m_toolBar->setObjectName(QStringLiteral("mainToolBar"));
|
||||
m_toolBar->setMovable(false);
|
||||
m_toolBar->setToolButtonStyle(Qt::ToolButtonTextOnly);
|
||||
m_toolBar->setIconSize(QSize(16, 16));
|
||||
|
||||
m_toolBar->addAction(m_newAction);
|
||||
m_toolBar->addAction(m_openAction);
|
||||
m_toolBar->addAction(m_saveAction);
|
||||
m_toolBar->addSeparator();
|
||||
|
||||
const auto makeMenuButton = [this](const QString &text, QMenu **target) {
|
||||
QToolButton *button = new QToolButton(m_toolBar);
|
||||
button->setText(text);
|
||||
button->setPopupMode(QToolButton::InstantPopup);
|
||||
button->setToolButtonStyle(Qt::ToolButtonTextOnly);
|
||||
button->setCursor(Qt::PointingHandCursor);
|
||||
|
||||
QMenu *menu = new QMenu(button);
|
||||
button->setMenu(menu);
|
||||
m_toolBar->addWidget(button);
|
||||
*target = menu;
|
||||
return button;
|
||||
};
|
||||
|
||||
m_toolRecentFilesButton = makeMenuButton(tr("最近文件"), &m_toolRecentFilesMenu);
|
||||
m_toolRecentFoldersButton = makeMenuButton(tr("最近目录"), &m_toolRecentFoldersMenu);
|
||||
}
|
||||
|
||||
void MainWindow::createActions()
|
||||
{
|
||||
m_newAction = new QAction(tr("新建"), this);
|
||||
@@ -286,7 +328,7 @@ void MainWindow::createActions()
|
||||
const QSignalBlocker blocker(m_sidebarButton);
|
||||
m_sidebarButton->setChecked(visible);
|
||||
}
|
||||
QSettings().setValue(QStringLiteral("window/sidebarVisible"), visible);
|
||||
AppConfig::settings().setValue(QStringLiteral("window/sidebarVisible"), visible);
|
||||
});
|
||||
|
||||
m_sourceModeAction = new QAction(tr("源代码模式"), this);
|
||||
@@ -443,7 +485,8 @@ void MainWindow::createMenus()
|
||||
m_fileMenu->addAction(m_newAction);
|
||||
m_fileMenu->addAction(m_openAction);
|
||||
m_fileMenu->addAction(m_openFolderAction);
|
||||
m_recentMenu = m_fileMenu->addMenu(tr("最近打开"));
|
||||
m_recentMenu = m_fileMenu->addMenu(tr("最近文件"));
|
||||
m_recentFolderMenu = m_fileMenu->addMenu(tr("最近目录"));
|
||||
m_fileMenu->addSeparator();
|
||||
m_fileMenu->addAction(m_saveAction);
|
||||
m_fileMenu->addAction(m_saveAsAction);
|
||||
@@ -556,7 +599,7 @@ void MainWindow::createStatusBar()
|
||||
|
||||
void MainWindow::loadSettings()
|
||||
{
|
||||
QSettings settings;
|
||||
QSettings &settings = AppConfig::settings();
|
||||
|
||||
const QByteArray geometry = settings.value(QStringLiteral("window/geometry")).toByteArray();
|
||||
if (!geometry.isEmpty())
|
||||
@@ -604,7 +647,7 @@ void MainWindow::loadSettings()
|
||||
|
||||
void MainWindow::saveSettings()
|
||||
{
|
||||
QSettings settings;
|
||||
QSettings &settings = AppConfig::settings();
|
||||
settings.setValue(QStringLiteral("window/geometry"), saveGeometry());
|
||||
settings.setValue(QStringLiteral("editor/fontSize"), m_editor->editorFontPointSize());
|
||||
settings.setValue(QStringLiteral("editor/wordWrap"), m_wrapAction->isChecked());
|
||||
@@ -612,6 +655,7 @@ void MainWindow::saveSettings()
|
||||
settings.setValue(QStringLiteral("files/recent"), m_recentFiles);
|
||||
settings.setValue(QStringLiteral("files/folder"), m_folderPath);
|
||||
settings.setValue(QStringLiteral("window/sidebarVisible"), m_sidebar->isVisible());
|
||||
settings.sync();
|
||||
}
|
||||
|
||||
void MainWindow::closeEvent(QCloseEvent *event)
|
||||
@@ -882,6 +926,7 @@ bool MainWindow::maybeSave()
|
||||
void MainWindow::setCurrentFile(const QString &path)
|
||||
{
|
||||
m_currentPath = path;
|
||||
AppConfig::settings().setValue(QStringLiteral("session/lastFile"), path);
|
||||
if (!path.isEmpty()) {
|
||||
m_lastDirectory = QFileInfo(path).absolutePath();
|
||||
setWindowFilePath(path);
|
||||
@@ -926,7 +971,7 @@ void MainWindow::changeZoom(int direction)
|
||||
const int size = (direction == 0) ? kDefaultFontSize
|
||||
: m_editor->editorFontPointSize() + direction;
|
||||
m_editor->setEditorFontPointSize(size);
|
||||
QSettings().setValue(QStringLiteral("editor/fontSize"), m_editor->editorFontPointSize());
|
||||
AppConfig::settings().setValue(QStringLiteral("editor/fontSize"), m_editor->editorFontPointSize());
|
||||
}
|
||||
|
||||
void MainWindow::resetZoom()
|
||||
@@ -937,7 +982,7 @@ void MainWindow::resetZoom()
|
||||
void MainWindow::setWordWrapEnabled(bool enabled)
|
||||
{
|
||||
m_editor->setLineWrapMode(enabled ? QPlainTextEdit::WidgetWidth : QPlainTextEdit::NoWrap);
|
||||
QSettings().setValue(QStringLiteral("editor/wordWrap"), enabled);
|
||||
AppConfig::settings().setValue(QStringLiteral("editor/wordWrap"), enabled);
|
||||
}
|
||||
|
||||
void MainWindow::applyThemeMode(int mode)
|
||||
@@ -957,7 +1002,14 @@ void MainWindow::retranslateUi()
|
||||
m_viewMenu->setTitle(tr("视图"));
|
||||
m_formatMenu->setTitle(tr("格式"));
|
||||
m_helpMenu->setTitle(tr("帮助"));
|
||||
m_recentMenu->setTitle(tr("最近打开"));
|
||||
m_recentMenu->setTitle(tr("最近文件"));
|
||||
m_recentFolderMenu->setTitle(tr("最近目录"));
|
||||
if (m_toolBar)
|
||||
m_toolBar->setWindowTitle(tr("常用"));
|
||||
if (m_toolRecentFilesButton)
|
||||
m_toolRecentFilesButton->setText(tr("最近文件"));
|
||||
if (m_toolRecentFoldersButton)
|
||||
m_toolRecentFoldersButton->setText(tr("最近目录"));
|
||||
m_themeMenu->setTitle(tr("主题"));
|
||||
m_headingMenu->setTitle(tr("标题"));
|
||||
m_languageMenu->setTitle(tr("语言"));
|
||||
@@ -1008,7 +1060,7 @@ void MainWindow::retranslateUi()
|
||||
m_languageChineseAction->setChecked(language == QLatin1String("zh_CN"));
|
||||
m_languageEnglishAction->setChecked(language == QLatin1String("en"));
|
||||
|
||||
// 侧栏、最近打开、欢迎文档都跟着换
|
||||
// 侧栏、最近文件、欢迎文档都跟着换
|
||||
m_displayedFolder.clear();
|
||||
refreshRecentMenu();
|
||||
refreshFolder();
|
||||
@@ -1034,6 +1086,8 @@ void MainWindow::showAbout()
|
||||
"<p>基于 Qt %2 与 C++17 构建。</p>")
|
||||
.arg(QCoreApplication::applicationVersion(),
|
||||
QString::fromLatin1(qVersion())));
|
||||
box.setInformativeText(
|
||||
tr("配置文件:%1").arg(QDir::toNativeSeparators(AppConfig::filePath())));
|
||||
box.setStandardButtons(QMessageBox::Ok);
|
||||
box.exec();
|
||||
}
|
||||
@@ -1045,45 +1099,94 @@ void MainWindow::addRecentFile(const QString &path)
|
||||
m_recentFiles.prepend(absolutePath);
|
||||
while (m_recentFiles.size() > kMaxRecentFiles)
|
||||
m_recentFiles.removeLast();
|
||||
AppConfig::settings().setValue(QStringLiteral("files/recent"), m_recentFiles);
|
||||
refreshRecentMenu();
|
||||
QSettings().setValue(QStringLiteral("files/recent"), m_recentFiles);
|
||||
}
|
||||
|
||||
void MainWindow::loadRecentFiles()
|
||||
{
|
||||
m_recentFiles = QSettings().value(QStringLiteral("files/recent")).toStringList();
|
||||
m_recentFiles = AppConfig::settings().value(QStringLiteral("files/recent")).toStringList();
|
||||
m_recentFiles.removeDuplicates();
|
||||
while (m_recentFiles.size() > kMaxRecentFiles)
|
||||
m_recentFiles.removeLast();
|
||||
|
||||
m_recentFolders =
|
||||
AppConfig::settings().value(QStringLiteral("files/recentFolders")).toStringList();
|
||||
m_recentFolders.removeDuplicates();
|
||||
while (m_recentFolders.size() > kMaxRecentFiles)
|
||||
m_recentFolders.removeLast();
|
||||
}
|
||||
|
||||
void MainWindow::refreshRecentMenu()
|
||||
{
|
||||
if (!m_recentMenu)
|
||||
fillRecentFilesMenu(m_recentMenu);
|
||||
fillRecentFilesMenu(m_toolRecentFilesMenu);
|
||||
fillRecentFoldersMenu(m_recentFolderMenu);
|
||||
fillRecentFoldersMenu(m_toolRecentFoldersMenu);
|
||||
}
|
||||
|
||||
void MainWindow::fillRecentFilesMenu(QMenu *menu)
|
||||
{
|
||||
if (!menu)
|
||||
return;
|
||||
|
||||
m_recentMenu->clear();
|
||||
menu->clear();
|
||||
if (m_recentFiles.isEmpty()) {
|
||||
QAction *empty = m_recentMenu->addAction(tr("(暂无记录)"));
|
||||
QAction *empty = menu->addAction(tr("(暂无记录)"));
|
||||
empty->setEnabled(false);
|
||||
return;
|
||||
}
|
||||
|
||||
for (const QString &path : m_recentFiles) {
|
||||
QAction *action = m_recentMenu->addAction(QDir::toNativeSeparators(path));
|
||||
QAction *action = menu->addAction(QDir::toNativeSeparators(path));
|
||||
action->setToolTip(path);
|
||||
connect(action, &QAction::triggered, this, [this, path] {
|
||||
openPath(path);
|
||||
});
|
||||
connect(action, &QAction::triggered, this, [this, path] { openPath(path); });
|
||||
}
|
||||
m_recentMenu->addSeparator();
|
||||
m_recentMenu->addAction(tr("清空列表"), this, [this] {
|
||||
menu->addSeparator();
|
||||
menu->addAction(tr("清空列表"), this, [this] {
|
||||
m_recentFiles.clear();
|
||||
QSettings().setValue(QStringLiteral("files/recent"), m_recentFiles);
|
||||
AppConfig::settings().setValue(QStringLiteral("files/recent"), m_recentFiles);
|
||||
refreshRecentMenu();
|
||||
});
|
||||
}
|
||||
|
||||
void MainWindow::fillRecentFoldersMenu(QMenu *menu)
|
||||
{
|
||||
if (!menu)
|
||||
return;
|
||||
|
||||
menu->clear();
|
||||
if (m_recentFolders.isEmpty()) {
|
||||
QAction *empty = menu->addAction(tr("(暂无记录)"));
|
||||
empty->setEnabled(false);
|
||||
return;
|
||||
}
|
||||
|
||||
for (const QString &path : m_recentFolders) {
|
||||
QAction *action = menu->addAction(QDir::toNativeSeparators(path));
|
||||
action->setToolTip(path);
|
||||
connect(action, &QAction::triggered, this, [this, path] { openFolder(path); });
|
||||
}
|
||||
menu->addSeparator();
|
||||
menu->addAction(tr("清空列表"), this, [this] {
|
||||
m_recentFolders.clear();
|
||||
AppConfig::settings().setValue(QStringLiteral("files/recentFolders"), m_recentFolders);
|
||||
refreshRecentMenu();
|
||||
});
|
||||
}
|
||||
|
||||
void MainWindow::addRecentFolder(const QString &path)
|
||||
{
|
||||
const QString absolutePath = QFileInfo(path).absoluteFilePath();
|
||||
m_recentFolders.removeAll(absolutePath);
|
||||
m_recentFolders.prepend(absolutePath);
|
||||
while (m_recentFolders.size() > kMaxRecentFiles)
|
||||
m_recentFolders.removeLast();
|
||||
|
||||
AppConfig::settings().setValue(QStringLiteral("files/recentFolders"), m_recentFolders);
|
||||
refreshRecentMenu();
|
||||
}
|
||||
|
||||
void MainWindow::chooseFolder()
|
||||
{
|
||||
const QString directory = QFileDialog::getExistingDirectory(
|
||||
@@ -1101,7 +1204,8 @@ void MainWindow::openFolder(const QString &path)
|
||||
|
||||
m_folderPath = info.absoluteFilePath();
|
||||
m_lastDirectory = m_folderPath;
|
||||
QSettings().setValue(QStringLiteral("files/folder"), m_folderPath);
|
||||
AppConfig::settings().setValue(QStringLiteral("files/folder"), m_folderPath);
|
||||
addRecentFolder(m_folderPath);
|
||||
refreshFolder();
|
||||
updateGitState();
|
||||
|
||||
@@ -1243,7 +1347,7 @@ void MainWindow::setSourceModeEnabled(bool enabled)
|
||||
m_sourceModeAction->setChecked(enabled);
|
||||
}
|
||||
|
||||
QSettings().setValue(QStringLiteral("editor/sourceMode"), enabled);
|
||||
AppConfig::settings().setValue(QStringLiteral("editor/sourceMode"), enabled);
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------- Git
|
||||
@@ -1356,7 +1460,7 @@ void MainWindow::switchSidebarMode(int mode)
|
||||
if (m_sidebarMode == 1)
|
||||
rebuildToc();
|
||||
|
||||
QSettings().setValue(QStringLiteral("window/sidebarMode"), m_sidebarMode);
|
||||
AppConfig::settings().setValue(QStringLiteral("window/sidebarMode"), m_sidebarMode);
|
||||
}
|
||||
|
||||
void MainWindow::rebuildToc()
|
||||
|
||||
@@ -10,6 +10,7 @@ class QDockWidget;
|
||||
class QLabel;
|
||||
class QPushButton;
|
||||
class QStackedWidget;
|
||||
class QToolBar;
|
||||
class QToolButton;
|
||||
class GitRunner;
|
||||
class QListWidget;
|
||||
@@ -35,6 +36,7 @@ private:
|
||||
enum class Eol { Lf, Crlf };
|
||||
|
||||
void createActions();
|
||||
void createToolBar();
|
||||
void createSidebar();
|
||||
void createMenus();
|
||||
void createStatusBar();
|
||||
@@ -51,7 +53,10 @@ private:
|
||||
void showWelcomeDocument();
|
||||
|
||||
void addRecentFile(const QString &path);
|
||||
void addRecentFolder(const QString &path);
|
||||
void refreshRecentMenu();
|
||||
void fillRecentFilesMenu(QMenu *menu);
|
||||
void fillRecentFoldersMenu(QMenu *menu);
|
||||
void loadRecentFiles();
|
||||
|
||||
void chooseFolder();
|
||||
@@ -140,6 +145,7 @@ private:
|
||||
Eol m_eol = Eol::Lf;
|
||||
bool m_hasBom = false;
|
||||
QStringList m_recentFiles;
|
||||
QStringList m_recentFolders;
|
||||
QString m_lastDirectory;
|
||||
|
||||
QAction *m_newAction = nullptr;
|
||||
@@ -173,6 +179,12 @@ private:
|
||||
QAction *m_headingActions[6] = {nullptr, nullptr, nullptr, nullptr, nullptr, nullptr};
|
||||
|
||||
QMenu *m_recentMenu = nullptr;
|
||||
QMenu *m_recentFolderMenu = nullptr;
|
||||
QMenu *m_toolRecentFilesMenu = nullptr;
|
||||
QMenu *m_toolRecentFoldersMenu = nullptr;
|
||||
QToolButton *m_toolRecentFilesButton = nullptr;
|
||||
QToolButton *m_toolRecentFoldersButton = nullptr;
|
||||
QToolBar *m_toolBar = nullptr;
|
||||
QMenu *m_fileMenu = nullptr;
|
||||
QMenu *m_editMenu = nullptr;
|
||||
QMenu *m_viewMenu = nullptr;
|
||||
|
||||
@@ -105,6 +105,8 @@ MarkdownEditor::MarkdownEditor(QWidget *parent)
|
||||
setAcceptDrops(true);
|
||||
viewport()->setMouseTracking(true);
|
||||
document()->setDocumentMargin(18);
|
||||
// setDocumentMargin() 会把文档标记为已修改,新建编辑器时清掉
|
||||
document()->setModified(false);
|
||||
|
||||
m_lineNumberArea = new LineNumberArea(this);
|
||||
m_highlighter = new MarkdownHighlighter(document());
|
||||
|
||||
@@ -13,6 +13,8 @@
|
||||
#include <QTimer>
|
||||
#include <QXmlStreamReader>
|
||||
|
||||
#include "AppConfig.h"
|
||||
|
||||
namespace {
|
||||
|
||||
QString runCommand(const QString &program, const QStringList &arguments, int timeoutMs)
|
||||
@@ -184,7 +186,7 @@ void ThemeManager::initialize(Mode forcedMode, bool persist)
|
||||
if (forcedMode != Mode::System) {
|
||||
setMode(forcedMode, persist);
|
||||
} else {
|
||||
const QString saved = QSettings().value(QStringLiteral("theme/mode")).toString();
|
||||
const QString saved = AppConfig::settings().value(QStringLiteral("theme/mode")).toString();
|
||||
m_mode = modeFromString(saved, nullptr);
|
||||
applyScheme(schemeForMode(m_mode), true);
|
||||
}
|
||||
@@ -195,7 +197,7 @@ void ThemeManager::setMode(Mode mode, bool persist)
|
||||
{
|
||||
m_mode = mode;
|
||||
if (persist)
|
||||
QSettings().setValue(QStringLiteral("theme/mode"), modeToString(mode));
|
||||
AppConfig::settings().setValue(QStringLiteral("theme/mode"), modeToString(mode));
|
||||
|
||||
applyScheme(schemeForMode(m_mode), true);
|
||||
}
|
||||
@@ -282,6 +284,9 @@ QMenu::item { padding: 6px 28px 6px 22px; border-radius: 5px; }
|
||||
QMenu::item:selected { background-color: @highlight; color: @highlightedText; }
|
||||
QMenu::item:disabled { color: @disabled; }
|
||||
QMenu::separator { height: 1px; background-color: @border; margin: 5px 8px; }
|
||||
QToolBar { background-color: @window; border: none; border-bottom: 1px solid @border;
|
||||
spacing: 2px; padding: 2px 6px; }
|
||||
QToolBar::separator { width: 1px; background-color: @border; margin: 4px 6px; }
|
||||
QStatusBar { background-color: @window; color: @placeholder; border-top: 1px solid @border; }
|
||||
QStatusBar::item { border: none; }
|
||||
QPlainTextEdit { background-color: @editorBase; color: @editorText; border: none;
|
||||
@@ -303,7 +308,7 @@ QPushButton { background-color: @button; color: @buttonText; border: 1px solid @
|
||||
QPushButton:hover { background-color: @highlight; color: @highlightedText; }
|
||||
QPushButton:default { background-color: @accent; color: #ffffff; border-color: @accent; }
|
||||
QToolTip { background-color: @menuBackground; color: @text; border: 1px solid @border; padding: 4px; }
|
||||
QToolButton { border: none; border-radius: 5px; padding: 3px 8px; color: @text; background: transparent; }
|
||||
QToolButton { border: none; border-radius: 5px; padding: 2px 8px; color: @text; background: transparent; }
|
||||
QToolButton:hover { background-color: @hoverBackground; }
|
||||
QToolButton:checked { background-color: @highlight; color: @highlightedText; }
|
||||
QDockWidget { color: @text; }
|
||||
|
||||
Binary file not shown.
+211
-187
@@ -1,9 +1,10 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.1" language="en_US">
|
||||
<context>
|
||||
<name>GitRunner</name>
|
||||
<message>
|
||||
<location filename="../src/GitRunner.cpp" line="32" />
|
||||
<location filename="../src/GitRunner.cpp" line="32"/>
|
||||
<source>
|
||||
(超时,已中止)</source>
|
||||
<translation>
|
||||
@@ -13,464 +14,487 @@
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="204" />
|
||||
<location filename="../src/MainWindow.cpp" line="965" />
|
||||
<location filename="../src/MainWindow.cpp" line="246"/>
|
||||
<location filename="../src/MainWindow.cpp" line="1009"/>
|
||||
<source>新建</source>
|
||||
<translation>New</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="208" />
|
||||
<location filename="../src/MainWindow.cpp" line="966" />
|
||||
<location filename="../src/MainWindow.cpp" line="250"/>
|
||||
<location filename="../src/MainWindow.cpp" line="1010"/>
|
||||
<source>打开…</source>
|
||||
<translation>Open…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="212" />
|
||||
<location filename="../src/MainWindow.cpp" line="968" />
|
||||
<location filename="../src/MainWindow.cpp" line="254"/>
|
||||
<location filename="../src/MainWindow.cpp" line="1012"/>
|
||||
<source>保存</source>
|
||||
<translation>Save</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="216" />
|
||||
<location filename="../src/MainWindow.cpp" line="969" />
|
||||
<location filename="../src/MainWindow.cpp" line="258"/>
|
||||
<location filename="../src/MainWindow.cpp" line="1013"/>
|
||||
<source>另存为…</source>
|
||||
<translation>Save As…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="220" />
|
||||
<location filename="../src/MainWindow.cpp" line="970" />
|
||||
<location filename="../src/MainWindow.cpp" line="262"/>
|
||||
<location filename="../src/MainWindow.cpp" line="1014"/>
|
||||
<source>导出 PDF…</source>
|
||||
<translation>Export PDF…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="224" />
|
||||
<location filename="../src/MainWindow.cpp" line="971" />
|
||||
<location filename="../src/MainWindow.cpp" line="266"/>
|
||||
<location filename="../src/MainWindow.cpp" line="1015"/>
|
||||
<source>退出</source>
|
||||
<translation>Quit</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="228" />
|
||||
<location filename="../src/MainWindow.cpp" line="973" />
|
||||
<location filename="../src/MainWindow.cpp" line="270"/>
|
||||
<location filename="../src/MainWindow.cpp" line="1017"/>
|
||||
<source>撤销</source>
|
||||
<translation>Undo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="232" />
|
||||
<location filename="../src/MainWindow.cpp" line="974" />
|
||||
<location filename="../src/MainWindow.cpp" line="274"/>
|
||||
<location filename="../src/MainWindow.cpp" line="1018"/>
|
||||
<source>重做</source>
|
||||
<translation>Redo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="236" />
|
||||
<location filename="../src/MainWindow.cpp" line="975" />
|
||||
<location filename="../src/MainWindow.cpp" line="278"/>
|
||||
<location filename="../src/MainWindow.cpp" line="1019"/>
|
||||
<source>剪切</source>
|
||||
<translation>Cut</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="240" />
|
||||
<location filename="../src/MainWindow.cpp" line="976" />
|
||||
<location filename="../src/MainWindow.cpp" line="282"/>
|
||||
<location filename="../src/MainWindow.cpp" line="1020"/>
|
||||
<source>复制</source>
|
||||
<translation>Copy</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="244" />
|
||||
<location filename="../src/MainWindow.cpp" line="977" />
|
||||
<location filename="../src/MainWindow.cpp" line="286"/>
|
||||
<location filename="../src/MainWindow.cpp" line="1021"/>
|
||||
<source>粘贴</source>
|
||||
<translation>Paste</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="248" />
|
||||
<location filename="../src/MainWindow.cpp" line="978" />
|
||||
<location filename="../src/MainWindow.cpp" line="290"/>
|
||||
<location filename="../src/MainWindow.cpp" line="1022"/>
|
||||
<source>全选</source>
|
||||
<translation>Select All</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="252" />
|
||||
<location filename="../src/MainWindow.cpp" line="982" />
|
||||
<location filename="../src/MainWindow.cpp" line="294"/>
|
||||
<location filename="../src/MainWindow.cpp" line="1026"/>
|
||||
<source>自动换行</source>
|
||||
<translation>Word Wrap</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="257" />
|
||||
<location filename="../src/MainWindow.cpp" line="983" />
|
||||
<location filename="../src/MainWindow.cpp" line="299"/>
|
||||
<location filename="../src/MainWindow.cpp" line="1027"/>
|
||||
<source>放大</source>
|
||||
<translation>Zoom In</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="261" />
|
||||
<location filename="../src/MainWindow.cpp" line="984" />
|
||||
<location filename="../src/MainWindow.cpp" line="303"/>
|
||||
<location filename="../src/MainWindow.cpp" line="1028"/>
|
||||
<source>缩小</source>
|
||||
<translation>Zoom Out</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="265" />
|
||||
<location filename="../src/MainWindow.cpp" line="985" />
|
||||
<location filename="../src/MainWindow.cpp" line="307"/>
|
||||
<location filename="../src/MainWindow.cpp" line="1029"/>
|
||||
<source>实际大小</source>
|
||||
<translation>Actual Size</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="274" />
|
||||
<location filename="../src/MainWindow.cpp" line="967" />
|
||||
<location filename="../src/MainWindow.cpp" line="316"/>
|
||||
<location filename="../src/MainWindow.cpp" line="1011"/>
|
||||
<source>打开文件夹…</source>
|
||||
<translation>Open Folder…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="278" />
|
||||
<location filename="../src/MainWindow.cpp" line="534" />
|
||||
<location filename="../src/MainWindow.cpp" line="980" />
|
||||
<location filename="../src/MainWindow.cpp" line="1001" />
|
||||
<location filename="../src/MainWindow.cpp" line="320"/>
|
||||
<location filename="../src/MainWindow.cpp" line="577"/>
|
||||
<location filename="../src/MainWindow.cpp" line="1024"/>
|
||||
<location filename="../src/MainWindow.cpp" line="1045"/>
|
||||
<source>侧栏</source>
|
||||
<translation>Sidebar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="292" />
|
||||
<location filename="../src/MainWindow.cpp" line="981" />
|
||||
<location filename="../src/MainWindow.cpp" line="334"/>
|
||||
<location filename="../src/MainWindow.cpp" line="1025"/>
|
||||
<source>源代码模式</source>
|
||||
<translation>Source Mode</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="297" />
|
||||
<location filename="../src/MainWindow.cpp" line="997" />
|
||||
<location filename="../src/MainWindow.cpp" line="339"/>
|
||||
<location filename="../src/MainWindow.cpp" line="1041"/>
|
||||
<source>代码块</source>
|
||||
<translation>Code Block</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="304" />
|
||||
<location filename="../src/MainWindow.cpp" line="995" />
|
||||
<location filename="../src/MainWindow.cpp" line="346"/>
|
||||
<location filename="../src/MainWindow.cpp" line="1039"/>
|
||||
<source>标题 %1</source>
|
||||
<translation>Heading %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="315" />
|
||||
<location filename="../src/MainWindow.cpp" line="357"/>
|
||||
<source>文件夹</source>
|
||||
<translation>Folder</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="350" />
|
||||
<location filename="../src/MainWindow.cpp" line="1147" />
|
||||
<location filename="../src/MainWindow.cpp" line="392"/>
|
||||
<location filename="../src/MainWindow.cpp" line="1243"/>
|
||||
<source>未打开文件夹</source>
|
||||
<translation>No folder open</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="392" />
|
||||
<location filename="../src/MainWindow.cpp" line="1280" />
|
||||
<location filename="../src/MainWindow.cpp" line="434"/>
|
||||
<location filename="../src/MainWindow.cpp" line="1376"/>
|
||||
<source>Git 仓库</source>
|
||||
<translation>Git repository</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="405" />
|
||||
<location filename="../src/MainWindow.cpp" line="1428" />
|
||||
<location filename="../src/MainWindow.cpp" line="447"/>
|
||||
<location filename="../src/MainWindow.cpp" line="1524"/>
|
||||
<source>拉取</source>
|
||||
<translation>Pull</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="405" />
|
||||
<location filename="../src/MainWindow.cpp" line="447"/>
|
||||
<source>git pull --ff-only</source>
|
||||
<translation>git pull --ff-only</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="404" />
|
||||
<location filename="../src/MainWindow.cpp" line="1436" />
|
||||
<location filename="../src/MainWindow.cpp" line="446"/>
|
||||
<location filename="../src/MainWindow.cpp" line="1532"/>
|
||||
<source>获取</source>
|
||||
<translation>Fetch</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="404" />
|
||||
<location filename="../src/MainWindow.cpp" line="446"/>
|
||||
<source>git fetch --all --prune</source>
|
||||
<translation>git fetch --all --prune</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="408" />
|
||||
<location filename="../src/MainWindow.cpp" line="1443" />
|
||||
<location filename="../src/MainWindow.cpp" line="1551" />
|
||||
<location filename="../src/MainWindow.cpp" line="450"/>
|
||||
<location filename="../src/MainWindow.cpp" line="1539"/>
|
||||
<location filename="../src/MainWindow.cpp" line="1647"/>
|
||||
<source>推送</source>
|
||||
<translation>Push</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="408" />
|
||||
<location filename="../src/MainWindow.cpp" line="450"/>
|
||||
<source>git push</source>
|
||||
<translation>git push</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="1450" />
|
||||
<location filename="../src/MainWindow.cpp" line="1546"/>
|
||||
<source>暂存</source>
|
||||
<translation>Stage</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="406" />
|
||||
<location filename="../src/MainWindow.cpp" line="448"/>
|
||||
<source>git add -A</source>
|
||||
<translation>git add -A</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="407" />
|
||||
<location filename="../src/MainWindow.cpp" line="1463" />
|
||||
<location filename="../src/MainWindow.cpp" line="1470" />
|
||||
<location filename="../src/MainWindow.cpp" line="1474" />
|
||||
<location filename="../src/MainWindow.cpp" line="1550" />
|
||||
<location filename="../src/MainWindow.cpp" line="449"/>
|
||||
<location filename="../src/MainWindow.cpp" line="1559"/>
|
||||
<location filename="../src/MainWindow.cpp" line="1566"/>
|
||||
<location filename="../src/MainWindow.cpp" line="1570"/>
|
||||
<location filename="../src/MainWindow.cpp" line="1646"/>
|
||||
<source>提交</source>
|
||||
<translation>Commit</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="407" />
|
||||
<location filename="../src/MainWindow.cpp" line="449"/>
|
||||
<source>把暂存区的内容提交</source>
|
||||
<translation>Commit the staged changes</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="340" />
|
||||
<location filename="../src/MainWindow.cpp" line="442" />
|
||||
<location filename="../src/MainWindow.cpp" line="955" />
|
||||
<location filename="../src/MainWindow.cpp" line="382"/>
|
||||
<location filename="../src/MainWindow.cpp" line="484"/>
|
||||
<location filename="../src/MainWindow.cpp" line="999"/>
|
||||
<source>文件</source>
|
||||
<translation>File</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="341" />
|
||||
<location filename="../src/MainWindow.cpp" line="383"/>
|
||||
<source>目录</source>
|
||||
<translation>Outline</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="446" />
|
||||
<location filename="../src/MainWindow.cpp" line="960" />
|
||||
<location filename="../src/MainWindow.cpp" line="1004"/>
|
||||
<source>最近打开</source>
|
||||
<translation>Recent Files</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="454" />
|
||||
<location filename="../src/MainWindow.cpp" line="956" />
|
||||
<location filename="../src/MainWindow.cpp" line="497"/>
|
||||
<location filename="../src/MainWindow.cpp" line="1000"/>
|
||||
<source>编辑</source>
|
||||
<translation>Edit</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="464" />
|
||||
<location filename="../src/MainWindow.cpp" line="957" />
|
||||
<location filename="../src/MainWindow.cpp" line="215"/>
|
||||
<source>常用</source>
|
||||
<translation>Quick Access</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="240"/>
|
||||
<location filename="../src/MainWindow.cpp" line="488"/>
|
||||
<source>最近文件</source>
|
||||
<translation>Recent Files</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="241"/>
|
||||
<location filename="../src/MainWindow.cpp" line="489"/>
|
||||
<source>最近目录</source>
|
||||
<translation>Recent Folders</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="507"/>
|
||||
<location filename="../src/MainWindow.cpp" line="1001"/>
|
||||
<source>视图</source>
|
||||
<translation>View</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="475" />
|
||||
<location filename="../src/MainWindow.cpp" line="961" />
|
||||
<location filename="../src/MainWindow.cpp" line="518"/>
|
||||
<location filename="../src/MainWindow.cpp" line="1005"/>
|
||||
<source>主题</source>
|
||||
<translation>Theme</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="483" />
|
||||
<location filename="../src/MainWindow.cpp" line="991" />
|
||||
<location filename="../src/MainWindow.cpp" line="526"/>
|
||||
<location filename="../src/MainWindow.cpp" line="1035"/>
|
||||
<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="501" />
|
||||
<location filename="../src/MainWindow.cpp" line="963" />
|
||||
<location filename="../src/MainWindow.cpp" line="544"/>
|
||||
<location filename="../src/MainWindow.cpp" line="1007"/>
|
||||
<source>语言</source>
|
||||
<translation>Language</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="518" />
|
||||
<location filename="../src/MainWindow.cpp" line="958" />
|
||||
<location filename="../src/MainWindow.cpp" line="561"/>
|
||||
<location filename="../src/MainWindow.cpp" line="1002"/>
|
||||
<source>格式</source>
|
||||
<translation>Format</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="519" />
|
||||
<location filename="../src/MainWindow.cpp" line="962" />
|
||||
<location filename="../src/MainWindow.cpp" line="562"/>
|
||||
<location filename="../src/MainWindow.cpp" line="1006"/>
|
||||
<source>标题</source>
|
||||
<translation>Heading</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="526" />
|
||||
<location filename="../src/MainWindow.cpp" line="959" />
|
||||
<location filename="../src/MainWindow.cpp" line="569"/>
|
||||
<location filename="../src/MainWindow.cpp" line="1003"/>
|
||||
<source>帮助</source>
|
||||
<translation>Help</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="527" />
|
||||
<location filename="../src/MainWindow.cpp" line="998" />
|
||||
<location filename="../src/MainWindow.cpp" line="1028" />
|
||||
<location filename="../src/MainWindow.cpp" line="570"/>
|
||||
<location filename="../src/MainWindow.cpp" line="1042"/>
|
||||
<location filename="../src/MainWindow.cpp" line="1072"/>
|
||||
<source>关于 VoiletMark</source>
|
||||
<translation>About VoiletMark</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="538" />
|
||||
<location filename="../src/MainWindow.cpp" line="1002" />
|
||||
<location filename="../src/MainWindow.cpp" line="581"/>
|
||||
<location filename="../src/MainWindow.cpp" line="1046"/>
|
||||
<source>显示 / 隐藏文件夹侧栏(Ctrl+B)</source>
|
||||
<translation>Show / hide the folder sidebar (Ctrl+B)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="546" />
|
||||
<location filename="../src/MainWindow.cpp" line="1005" />
|
||||
<location filename="../src/MainWindow.cpp" line="589"/>
|
||||
<location filename="../src/MainWindow.cpp" line="1049"/>
|
||||
<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="630" />
|
||||
<location filename="../src/MainWindow.cpp" line="761" />
|
||||
<location filename="../src/MainWindow.cpp" line="673"/>
|
||||
<location filename="../src/MainWindow.cpp" line="804"/>
|
||||
<source>未命名</source>
|
||||
<translation>Untitled</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="679" />
|
||||
<location filename="../src/MainWindow.cpp" line="722"/>
|
||||
<source>打开 Markdown 文件</source>
|
||||
<translation>Open Markdown File</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="680" />
|
||||
<location filename="../src/MainWindow.cpp" line="723"/>
|
||||
<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="698" />
|
||||
<location filename="../src/MainWindow.cpp" line="741"/>
|
||||
<source>无法打开文件</source>
|
||||
<translation>Cannot Open File</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="699" />
|
||||
<location filename="../src/MainWindow.cpp" line="742"/>
|
||||
<source>读取「%1」失败:%2</source>
|
||||
<translation>Could not read "%1": %2</translation>
|
||||
<translation>Could not read "%1": %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="733" />
|
||||
<location filename="../src/MainWindow.cpp" line="776"/>
|
||||
<source>另存为</source>
|
||||
<translation>Save As</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="734" />
|
||||
<location filename="../src/MainWindow.cpp" line="777"/>
|
||||
<source>Markdown 文件 (*.md);;文本文件 (*.txt);;所有文件 (*)</source>
|
||||
<translation>Markdown files (*.md);;Text files (*.txt);;All files (*)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="766" />
|
||||
<location filename="../src/MainWindow.cpp" line="809"/>
|
||||
<source>导出 PDF</source>
|
||||
<translation>Export PDF</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="767" />
|
||||
<location filename="../src/MainWindow.cpp" line="810"/>
|
||||
<source>PDF 文件 (*.pdf)</source>
|
||||
<translation>PDF files (*.pdf)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="774" />
|
||||
<location filename="../src/MainWindow.cpp" line="817"/>
|
||||
<source>正在导出 PDF…</source>
|
||||
<translation>Exporting PDF…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="811" />
|
||||
<location filename="../src/MainWindow.cpp" line="821" />
|
||||
<location filename="../src/MainWindow.cpp" line="854"/>
|
||||
<location filename="../src/MainWindow.cpp" line="864"/>
|
||||
<source>导出失败</source>
|
||||
<translation>Export Failed</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="811" />
|
||||
<location filename="../src/MainWindow.cpp" line="854"/>
|
||||
<source>文档排版结果异常,已中止导出。</source>
|
||||
<translation>The document layout looks broken; export was aborted.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="822" />
|
||||
<location filename="../src/MainWindow.cpp" line="865"/>
|
||||
<source>没能写出「%1」,换个位置再试一次。</source>
|
||||
<translation>Could not write "%1". Try another location.</translation>
|
||||
<translation>Could not write "%1". Try another location.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="826" />
|
||||
<location filename="../src/MainWindow.cpp" line="869"/>
|
||||
<source>已导出 %1</source>
|
||||
<translation>Exported to %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="841" />
|
||||
<location filename="../src/MainWindow.cpp" line="848" />
|
||||
<location filename="../src/MainWindow.cpp" line="853" />
|
||||
<location filename="../src/MainWindow.cpp" line="884"/>
|
||||
<location filename="../src/MainWindow.cpp" line="891"/>
|
||||
<location filename="../src/MainWindow.cpp" line="896"/>
|
||||
<source>无法保存文件</source>
|
||||
<translation>Cannot Save File</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="842" />
|
||||
<location filename="../src/MainWindow.cpp" line="885"/>
|
||||
<source>写入「%1」失败:%2</source>
|
||||
<translation>Could not write "%1": %2</translation>
|
||||
<translation>Could not write "%1": %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="849" />
|
||||
<location filename="../src/MainWindow.cpp" line="892"/>
|
||||
<source>写入「%1」时发生错误。</source>
|
||||
<translation>An error occurred while writing "%1".</translation>
|
||||
<translation>An error occurred while writing "%1".</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="854" />
|
||||
<location filename="../src/MainWindow.cpp" line="897"/>
|
||||
<source>提交「%1」失败:%2</source>
|
||||
<translation>Could not commit "%1": %2</translation>
|
||||
<translation>Could not commit "%1": %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="862" />
|
||||
<location filename="../src/MainWindow.cpp" line="905"/>
|
||||
<source>已保存 %1</source>
|
||||
<translation>Saved to %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="872" />
|
||||
<location filename="../src/MainWindow.cpp" line="915"/>
|
||||
<source>VoiletMark</source>
|
||||
<translation>VoiletMark</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="873" />
|
||||
<location filename="../src/MainWindow.cpp" line="916"/>
|
||||
<source>「%1」有未保存的修改,是否保存?</source>
|
||||
<translation>"%1" has unsaved changes. Save them?</translation>
|
||||
<translation>"%1" has unsaved changes. Save them?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="897" />
|
||||
<location filename="../src/MainWindow.cpp" line="941"/>
|
||||
<source>%1[*] — VoiletMark</source>
|
||||
<translation>%1[*] — VoiletMark</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="916" />
|
||||
<location filename="../src/MainWindow.cpp" line="960"/>
|
||||
<source>行 %1,列 %2</source>
|
||||
<translation>Line %1, Col %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="918" />
|
||||
<location filename="../src/MainWindow.cpp" line="962"/>
|
||||
<source> 已选 %1 字</source>
|
||||
<translation> %1 selected</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="919" />
|
||||
<location filename="../src/MainWindow.cpp" line="963"/>
|
||||
<source> %1 字</source>
|
||||
<translation> %1 chars</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="1032" />
|
||||
<location filename="../src/MainWindow.cpp" line="1076"/>
|
||||
<source><h3>VoiletMark %1</h3><p>一个轻量的跨平台 Markdown 编辑器。</p><p>基于 Qt %2 与 C++17 构建。</p></source>
|
||||
<translation><h3>VoiletMark %1</h3><p>A lightweight cross-platform Markdown editor.</p><p>Built with Qt %2 and C++17.</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="1067" />
|
||||
<location filename="../src/MainWindow.cpp" line="1082"/>
|
||||
<source>配置文件:%1</source>
|
||||
<translation>Config file: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="1127"/>
|
||||
<location filename="../src/MainWindow.cpp" line="1152"/>
|
||||
<source>(暂无记录)</source>
|
||||
<translation>(none)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="1080" />
|
||||
<location filename="../src/MainWindow.cpp" line="1138"/>
|
||||
<location filename="../src/MainWindow.cpp" line="1163"/>
|
||||
<source>清空列表</source>
|
||||
<translation>Clear List</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="1090" />
|
||||
<location filename="../src/MainWindow.cpp" line="1185"/>
|
||||
<source>打开文件夹</source>
|
||||
<translation>Open Folder</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="1148" />
|
||||
<location filename="../src/MainWindow.cpp" line="1244"/>
|
||||
<source>文件 → 打开文件夹…</source>
|
||||
<translation>File → Open Folder…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="1184" />
|
||||
<location filename="../src/MainWindow.cpp" line="1280"/>
|
||||
<source>(没有 Markdown 文件)</source>
|
||||
<translation>(no Markdown files)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="1316" />
|
||||
<location filename="../src/MainWindow.cpp" line="1412"/>
|
||||
<source>正在%1…</source>
|
||||
<translation>%1…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="1326" />
|
||||
<location filename="../src/MainWindow.cpp" line="1422"/>
|
||||
<source>Git 操作失败</source>
|
||||
<translation>Git Operation Failed</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="1327" />
|
||||
<location filename="../src/MainWindow.cpp" line="1423"/>
|
||||
<source>%1失败:
|
||||
|
||||
%2</source>
|
||||
@@ -479,124 +503,124 @@
|
||||
%2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="1328" />
|
||||
<location filename="../src/MainWindow.cpp" line="1424"/>
|
||||
<source>(没有输出)</source>
|
||||
<translation>(no output)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="1334" />
|
||||
<location filename="../src/MainWindow.cpp" line="1430"/>
|
||||
<source>%1完成</source>
|
||||
<translation>%1 finished</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="1409" />
|
||||
<location filename="../src/MainWindow.cpp" line="1505"/>
|
||||
<source>(没有标题)</source>
|
||||
<translation>(no headings)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="1464" />
|
||||
<location filename="../src/MainWindow.cpp" line="1560"/>
|
||||
<source>暂存区是空的,先点「暂存」把所有改动加进去。</source>
|
||||
<translation>Nothing is staged yet. Click "Stage" first to add all changes.</translation>
|
||||
<translation>Nothing is staged yet. Click "Stage" first to add all changes.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="1470" />
|
||||
<location filename="../src/MainWindow.cpp" line="1566"/>
|
||||
<source>提交说明:</source>
|
||||
<translation>Commit message:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="1482" />
|
||||
<location filename="../src/MainWindow.cpp" line="1578"/>
|
||||
<source>添加到提交</source>
|
||||
<translation>Add to commit</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="1501" />
|
||||
<location filename="../src/MainWindow.cpp" line="1597"/>
|
||||
<source>「%1」已经在 .gitignore 里了</source>
|
||||
<translation>"%1" is already in .gitignore</translation>
|
||||
<translation>"%1" is already in .gitignore</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="1507" />
|
||||
<location filename="../src/MainWindow.cpp" line="1603"/>
|
||||
<source>忽略文件</source>
|
||||
<translation>Ignore File</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="1508" />
|
||||
<location filename="../src/MainWindow.cpp" line="1604"/>
|
||||
<source>打不开 .gitignore:%1</source>
|
||||
<translation>Cannot open .gitignore: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="1515" />
|
||||
<location filename="../src/MainWindow.cpp" line="1611"/>
|
||||
<source>已把 %1 写进 .gitignore</source>
|
||||
<translation>Added %1 to .gitignore</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="1530" />
|
||||
<location filename="../src/MainWindow.cpp" line="1535" />
|
||||
<location filename="../src/MainWindow.cpp" line="1573" />
|
||||
<location filename="../src/MainWindow.cpp" line="1626"/>
|
||||
<location filename="../src/MainWindow.cpp" line="1631"/>
|
||||
<location filename="../src/MainWindow.cpp" line="1669"/>
|
||||
<source>删除远端</source>
|
||||
<translation>Delete from remote</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="1531" />
|
||||
<location filename="../src/MainWindow.cpp" line="1627"/>
|
||||
<source>「%1」没有被 git 跟踪,远端本来就没有它。</source>
|
||||
<translation>"%1" is not tracked by git, so the remote never had it.</translation>
|
||||
<translation>"%1" is not tracked by git, so the remote never had it.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="1536" />
|
||||
<location filename="../src/MainWindow.cpp" line="1632"/>
|
||||
<source>从仓库删除「%1」并推送到远端?
|
||||
|
||||
本地文件会保留,远端和别人 pull 下来的仓库里会删掉它。</source>
|
||||
<translation>Remove "%1" from the repository and push?
|
||||
<translation>Remove "%1" from the repository and push?
|
||||
|
||||
Your local file is kept, but the remote copy and everyone else's will be deleted.</translation>
|
||||
Your local file is kept, but the remote copy and everyone else's will be deleted.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="1540" />
|
||||
<location filename="../src/MainWindow.cpp" line="1636"/>
|
||||
<source>删除并推送</source>
|
||||
<translation>Delete and push</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="1549" />
|
||||
<location filename="../src/MainWindow.cpp" line="1645"/>
|
||||
<source>chore: 从仓库删除 %1</source>
|
||||
<translation>chore: remove %1 from repository</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="406" />
|
||||
<location filename="../src/MainWindow.cpp" line="1568" />
|
||||
<location filename="../src/MainWindow.cpp" line="448"/>
|
||||
<location filename="../src/MainWindow.cpp" line="1664"/>
|
||||
<source>添加</source>
|
||||
<translation>Add</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="1569" />
|
||||
<location filename="../src/MainWindow.cpp" line="1665"/>
|
||||
<source>git add 这个文件</source>
|
||||
<translation>git add this file</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="1570" />
|
||||
<location filename="../src/MainWindow.cpp" line="1666"/>
|
||||
<source>忽略</source>
|
||||
<translation>Ignore</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="1571" />
|
||||
<location filename="../src/MainWindow.cpp" line="1667"/>
|
||||
<source>把路径写进 .gitignore(不改仓库里已跟踪的文件)</source>
|
||||
<translation>Add the path to .gitignore (does not untrack files already in the repo)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="1574" />
|
||||
<location filename="../src/MainWindow.cpp" line="1670"/>
|
||||
<source>git rm --cached 后提交并推送:远端删除,本地保留</source>
|
||||
<translation>git rm --cached, then commit and push: gone from the remote, kept locally</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="1541" />
|
||||
<location filename="../src/MainWindow.cpp" line="1637"/>
|
||||
<source>取消</source>
|
||||
<translation>Cancel</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="1547" />
|
||||
<location filename="../src/MainWindow.cpp" line="1643"/>
|
||||
<source>从仓库移除</source>
|
||||
<translation>Remove from repository</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MainWindow.cpp" line="1564" />
|
||||
<location filename="../src/MainWindow.cpp" line="1660"/>
|
||||
<source>打开</source>
|
||||
<translation>Open</translation>
|
||||
</message>
|
||||
@@ -604,40 +628,40 @@ Your local file is kept, but the remote copy and everyone else's will be deleted
|
||||
<context>
|
||||
<name>MarkdownEditor</name>
|
||||
<message>
|
||||
<location filename="../src/MarkdownEditor.cpp" line="590" />
|
||||
<location filename="../src/MarkdownEditor.cpp" line="714" />
|
||||
<location filename="../src/MarkdownEditor.cpp" line="592"/>
|
||||
<location filename="../src/MarkdownEditor.cpp" line="716"/>
|
||||
<source>已复制</source>
|
||||
<translation>Copied</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MarkdownEditor.cpp" line="590" />
|
||||
<location filename="../src/MarkdownEditor.cpp" line="714" />
|
||||
<location filename="../src/MarkdownEditor.cpp" line="592"/>
|
||||
<location filename="../src/MarkdownEditor.cpp" line="716"/>
|
||||
<source>复制</source>
|
||||
<translation>Copy</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MarkdownEditor.cpp" line="645" />
|
||||
<location filename="../src/MarkdownEditor.cpp" line="656" />
|
||||
<location filename="../src/MarkdownEditor.cpp" line="647"/>
|
||||
<location filename="../src/MarkdownEditor.cpp" line="658"/>
|
||||
<source>纯文本</source>
|
||||
<translation>Plain text</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MarkdownEditor.cpp" line="1108" />
|
||||
<location filename="../src/MarkdownEditor.cpp" line="1110"/>
|
||||
<source>插入行</source>
|
||||
<translation>Insert row</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MarkdownEditor.cpp" line="1123" />
|
||||
<location filename="../src/MarkdownEditor.cpp" line="1125"/>
|
||||
<source>删除行</source>
|
||||
<translation>Delete row</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MarkdownEditor.cpp" line="1133" />
|
||||
<location filename="../src/MarkdownEditor.cpp" line="1135"/>
|
||||
<source>插入列</source>
|
||||
<translation>Insert column</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/MarkdownEditor.cpp" line="1148" />
|
||||
<location filename="../src/MarkdownEditor.cpp" line="1150"/>
|
||||
<source>删除列</source>
|
||||
<translation>Delete column</translation>
|
||||
</message>
|
||||
@@ -645,22 +669,22 @@ Your local file is kept, but the remote copy and everyone else's will be deleted
|
||||
<context>
|
||||
<name>QObject</name>
|
||||
<message>
|
||||
<location filename="../src/ThemeManager.cpp" line="364" />
|
||||
<location filename="../src/ThemeManager.cpp" line="369"/>
|
||||
<source>浅色</source>
|
||||
<translation>Light</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/ThemeManager.cpp" line="365" />
|
||||
<location filename="../src/ThemeManager.cpp" line="370"/>
|
||||
<source>深色</source>
|
||||
<translation>Dark</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/ThemeManager.cpp" line="366" />
|
||||
<location filename="../src/ThemeManager.cpp" line="371"/>
|
||||
<source>按时段自动</source>
|
||||
<translation>Scheduled</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/ThemeManager.cpp" line="369" />
|
||||
<location filename="../src/ThemeManager.cpp" line="374"/>
|
||||
<source>跟随系统</source>
|
||||
<translation>Follow System</translation>
|
||||
</message>
|
||||
|
||||
Reference in New Issue
Block a user