feat: 软件语言支持相关调动。

This commit is contained in:
寂静的羽夏 2024-11-30 21:04:36 +08:00
parent 2a897e0099
commit 7e33b3b87a
10 changed files with 49 additions and 46 deletions

View File

@ -383,8 +383,7 @@ foreach(TS_FILE IN LISTS TS_FILES)
"${LANG_NEED_COPY_PREFIX}/about.md" "${LANG_NEED_COPY_PREFIX}/about.md"
"${LANG_NEED_COPY_PREFIX}/components.md" "${LANG_NEED_COPY_PREFIX}/components.md"
"${LANG_NEED_COPY_PREFIX}/credits.md" "${LANG_NEED_COPY_PREFIX}/credits.md"
"${LANG_NEED_COPY_PREFIX}/devs.md" "${LANG_NEED_COPY_PREFIX}/devs.md")
"${LANG_NEED_COPY_PREFIX}/trans.md")
add_custom_target( add_custom_target(
copy_lang_files copy_lang_files
COMMAND ${CMAKE_COMMAND} -E copy ${LANG_NEED_COPY} ${QM_DIR} COMMAND ${CMAKE_COMMAND} -E copy ${LANG_NEED_COPY} ${QM_DIR}
@ -393,7 +392,7 @@ foreach(TS_FILE IN LISTS TS_FILES)
set(LANG_PAK "${QM_DIR}/${LANG_PAK_NAME}") set(LANG_PAK "${QM_DIR}/${LANG_PAK_NAME}")
set(LANG_COMPRESS_CONTENT "winghex.qm" "about.md" "components.md" set(LANG_COMPRESS_CONTENT "winghex.qm" "about.md" "components.md"
"credits.md" "devs.md" "trans.md") "credits.md" "devs.md")
add_custom_target( add_custom_target(
pak_lang_files pak_lang_files

View File

@ -1,2 +0,0 @@
* 简体中文寂静的羽夏wingsummer【原生支持】

View File

@ -788,7 +788,7 @@
<context> <context>
<name>LanguageManager</name> <name>LanguageManager</name>
<message> <message>
<location filename="../../src/class/languagemanager.cpp" line="131"/> <location filename="../../src/class/languagemanager.cpp" line="112"/>
<source>Chinese(Simplified)</source> <source>Chinese(Simplified)</source>
<translation></translation> <translation></translation>
</message> </message>

View File

@ -107,6 +107,7 @@
<file>images/workspace.png</file> <file>images/workspace.png</file>
<file>images/writable.png</file> <file>images/writable.png</file>
<file>src/TESTCODE.as</file> <file>src/TESTCODE.as</file>
<file>src/translist.md</file>
</qresource> </qresource>
<qresource prefix="/qpathedit/icons"> <qresource prefix="/qpathedit/icons">
<file alias="dialog.ico">3rdparty/QPathEdit/Fatcow-Farm-Fresh-Dialog.ico</file> <file alias="dialog.ico">3rdparty/QPathEdit/Fatcow-Farm-Fresh-Dialog.ico</file>

View File

@ -56,24 +56,7 @@ LanguageManager::LanguageManager() {
_defaultLocale = QLocale::system(); _defaultLocale = QLocale::system();
if (m_langs.isEmpty()) { if (m_langs.isEmpty()) {
#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0) abortAndExit();
if (QLocale::China == _defaultLocale.territory()
#else
if (QLocale::China == _defaultLocale.country()
#endif
) {
QMessageBox::critical(
nullptr, QStringLiteral("程序损坏"),
QStringLiteral(
"语言文件已损坏,请尝试重装软件以解决这个问题。"));
} else {
QMessageBox::critical(
nullptr, QStringLiteral("Corruption"),
QStringLiteral("The language file has been damaged. "
"Please try reinstalling the software to "
"solve the problem."));
}
qApp->exit(-1);
} }
bool found = false; bool found = false;
@ -123,9 +106,7 @@ LanguageManager::LanguageManager() {
qApp->installTranslator(translator); qApp->installTranslator(translator);
} }
} else { } else {
WingMessageBox::critical( abortAndExit();
nullptr, qAppName(),
"Translation files loading error! Please try to reinstall.");
} }
m_langMap = {{"zh_CN", tr("Chinese(Simplified)")}}; m_langMap = {{"zh_CN", tr("Chinese(Simplified)")}};
@ -141,22 +122,24 @@ bool LanguageManager::unpackTr(const QString &filename) {
} }
QZipReader reader(filename); QZipReader reader(filename);
if (reader.count() != 5) {
return false;
}
_data = {}; _data = {};
for (auto &file : reader.fileInfoList()) { for (auto &file : reader.fileInfoList()) {
if (file.isValid() && file.isFile) { if (file.isValid() && file.isFile) {
if (file.filePath.endsWith(QStringLiteral("winghex.qm"))) { if (file.filePath == QStringLiteral("winghex.qm")) {
_data.trFiles = reader.fileData(file.filePath); _data.trFiles = reader.fileData(file.filePath);
} else if (file.filePath.endsWith(QStringLiteral("about.md"))) { } else if (file.filePath == QStringLiteral("about.md")) {
_data.about = reader.fileData(file.filePath); _data.about = reader.fileData(file.filePath);
} else if (file.filePath.endsWith( } else if (file.filePath == QStringLiteral("components.md")) {
QStringLiteral("components.md"))) {
_data.component = reader.fileData(file.filePath); _data.component = reader.fileData(file.filePath);
} else if (file.filePath.endsWith(QStringLiteral("credits.md"))) { } else if (file.filePath == QStringLiteral("credits.md")) {
_data.credit = reader.fileData(file.filePath); _data.credit = reader.fileData(file.filePath);
} else if (file.filePath.endsWith(QStringLiteral("devs.md"))) { } else if (file.filePath == QStringLiteral("devs.md")) {
_data.dev = reader.fileData(file.filePath); _data.dev = reader.fileData(file.filePath);
} else if (file.filePath.endsWith(QStringLiteral("trans.md"))) {
_data.trans = reader.fileData(file.filePath);
} }
} }
} }
@ -164,7 +147,27 @@ bool LanguageManager::unpackTr(const QString &filename) {
return !_data.trFiles.isEmpty() && !_data.about.isEmpty() && return !_data.trFiles.isEmpty() && !_data.about.isEmpty() &&
!_data.component.isEmpty() && !_data.credit.isEmpty() && !_data.component.isEmpty() && !_data.credit.isEmpty() &&
!_data.dev.isEmpty() && !_data.trans.isEmpty(); !_data.dev.isEmpty();
}
void LanguageManager::abortAndExit() {
#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0)
if (QLocale::China == _defaultLocale.territory()
#else
if (QLocale::China == _defaultLocale.country()
#endif
) {
WingMessageBox::critical(
nullptr, QStringLiteral("程序损坏"),
QStringLiteral("语言文件已损坏,请尝试重装软件以解决这个问题。"));
} else {
WingMessageBox::critical(
nullptr, QStringLiteral("Corruption"),
QStringLiteral("The language file has been damaged. "
"Please try reinstalling the software to "
"solve the problem."));
}
qApp->exit(-1);
} }
QLocale LanguageManager::defaultLocale() const { return _defaultLocale; } QLocale LanguageManager::defaultLocale() const { return _defaultLocale; }

View File

@ -33,7 +33,6 @@ public:
QString component; QString component;
QString dev; QString dev;
QString credit; QString credit;
QString trans;
}; };
public: public:
@ -53,6 +52,8 @@ private:
private: private:
bool unpackTr(const QString &filename); bool unpackTr(const QString &filename);
void abortAndExit();
private: private:
LanguageData _data; LanguageData _data;

View File

@ -44,15 +44,13 @@ void ASObjTreeWidget::setEngine(asIScriptEngine *engine) {
auto header = QString::fromUtf8(node->role(QCodeNode::Name)); auto header = QString::fromUtf8(node->role(QCodeNode::Name));
auto item = new QTreeWidgetItem({header}); auto item = new QTreeWidgetItem({header});
item->setData(0, Qt::UserRole, node->qualifiedBaseName(true)); item->setToolTip(0, node->qualifiedBaseName(true));
item->setToolTip(0, header);
item->setIcon(0, node->data(Qt::DecorationRole).value<QIcon>()); item->setIcon(0, node->data(Qt::DecorationRole).value<QIcon>());
for (auto &n : node->children()) { for (auto &n : node->children()) {
QStringList contents{QString::fromUtf8(n->role(QCodeNode::Name)), QStringList contents{QString::fromUtf8(n->role(QCodeNode::Name)),
n->data(Qt::ToolTipRole).toString()}; n->data(Qt::ToolTipRole).toString()};
auto c = new QTreeWidgetItem(contents); auto c = new QTreeWidgetItem(contents);
c->setData(0, Qt::UserRole, n->qualifiedBaseName(true));
c->setToolTip(0, contents.at(0)); c->setToolTip(0, contents.at(0));
c->setToolTip(1, contents.at(1)); c->setToolTip(1, contents.at(1));
c->setIcon(0, n->data(Qt::DecorationRole).value<QIcon>()); c->setIcon(0, n->data(Qt::DecorationRole).value<QIcon>());

View File

@ -29,7 +29,6 @@ AboutSoftwareDialog::AboutSoftwareDialog(QWidget *parent)
ui->tbBaseObj->setMarkdown(data.component); ui->tbBaseObj->setMarkdown(data.component);
ui->tbCredit->setMarkdown(data.credit); ui->tbCredit->setMarkdown(data.credit);
ui->tbDev->setMarkdown(data.dev); ui->tbDev->setMarkdown(data.dev);
ui->tbTr->setMarkdown(data.trans);
ui->lblVersion->setText(qApp->applicationVersion()); ui->lblVersion->setText(qApp->applicationVersion());
ui->lblBuildDate->setText(QStringLiteral(__DATE__)); ui->lblBuildDate->setText(QStringLiteral(__DATE__));
@ -40,6 +39,13 @@ AboutSoftwareDialog::AboutSoftwareDialog(QWidget *parent)
auto ltxt = license.readAll(); auto ltxt = license.readAll();
ui->tbLicense->setText(ltxt); ui->tbLicense->setText(ltxt);
QFile trans(QStringLiteral(":/com.wingsummer.winghex/src/translist.md"));
ret = trans.open(QFile::ReadOnly);
Q_ASSERT(ret);
Q_UNUSED(ret);
auto ttxt = trans.readAll();
ui->tbTr->setMarkdown(ttxt);
_dialog = new FramelessDialogBase(parent); _dialog = new FramelessDialogBase(parent);
_dialog->buildUpContent(this); _dialog->buildUpContent(this);
_dialog->setWindowTitle(this->windowTitle()); _dialog->setWindowTitle(this->windowTitle());

View File

@ -47,11 +47,6 @@ namespace WingHex {
Q_DECL_UNUSED constexpr auto SDKVERSION = 13; Q_DECL_UNUSED constexpr auto SDKVERSION = 13;
Q_DECL_UNUSED static QString GETPLUGINQM(const QString &name) {
return QCoreApplication::applicationDirPath() +
QStringLiteral("/plglang/") + name;
};
Q_DECL_UNUSED static QString PLUGINDIR() { Q_DECL_UNUSED static QString PLUGINDIR() {
return QCoreApplication::applicationDirPath() + QStringLiteral("/plugin"); return QCoreApplication::applicationDirPath() + QStringLiteral("/plugin");
} }

2
src/translist.md Normal file
View File

@ -0,0 +1,2 @@
* 简体中文寂静的羽夏wingsummer