refactor: rework the localization related part

This commit is contained in:
Gary Wang 2021-09-10 11:52:05 +08:00
parent 0e3d5c519e
commit c641be3377
34 changed files with 1076 additions and 66 deletions

1
.gitignore vendored
View File

@ -1,2 +1,3 @@
*.user
*.user.*
translations/*.qm

View File

@ -46,20 +46,22 @@ RESOURCES += \
RC_FILE = caesium.rc
TRANSLATIONS = caesium_en.ts \
caesium_it.ts \
caesium_ja.ts \
caesium_fr.ts \
caesium_br.ts \
caesium_de.ts \
caesium_tw.ts \
caesium_sv.ts \
caesium_cn.ts \
caesium_pt-br.ts \
caesium_es.ts \
caesium_kr.ts \
caesium_gr.ts \
caesium_ru.ts
TRANSLATIONS = \
translations/caesium.ts \
translations/caesium_en_US.ts \
translations/caesium_it.ts \
translations/caesium_ja.ts \
translations/caesium_fr.ts \
translations/caesium_br.ts \
translations/caesium_de.ts \
translations/caesium_zh_TW.ts \
translations/caesium_sv.ts \
translations/caesium_zh_CN.ts \
translations/caesium_pt_BR.ts \
translations/caesium_es.ts \
translations/caesium_ko.ts \
translations/caesium_el_GR.ts \
translations/caesium_ru.ts
LIBS += -lQt5Concurrent

10
README.md Normal file
View File

@ -0,0 +1,10 @@
## Caesium (fork)
based on Caesium 1.7.0. You can get the original source code at [here](https://sourceforge.net/projects/caesium/files/1.7.0/). Changes made by this fork listed below.
### Resolved issues
- Remove country/region flags since the original filename have encoding issue which can cause a build failure, and also to avoid some potential regional internationalization issues. (216e1a9)
- Resolution display as -1x-1 for some images with unregular filename (e.g. `2IGYT%BD]SYY77Q7R041(WD.jpg` and `G9E@W$_Y4GYMWJY)%R24X~2.jpg`): Recompile under newer Qt version should works. Original Caesium official binary comes with Qt 5.1.0, Recompiled and tested under Qt 5.15.2.
- Click "Auto preview" checkbox and then click any image item will lead a crash. (0e3d5c5)

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,2 +0,0 @@
C:\Qt\Qt5.1.0\5.1.0\mingw48_32\bin\lupdate.exe C:\Users\Matteo\Documents\Progetti\Qt4\Caesium\Source\caesium.pro
pause

View File

@ -1,6 +1,7 @@
/*******************************************************************************
#
# Copyright (C) 2010-2013 Matteo Paonessa <matteo.paonessa@gmail.com>
# 2021 Gary Wang <wzc782970009@gmail.com>
#
# This file is part of the Caesium distribution.
#
@ -19,6 +20,7 @@
# Foundation, Inc., 51 Franklin Street, 5th Floor, Boston, MA 02110-1301 USA.
#
# Author: Matteo Paonessa <matteo.paonessa@gmail.com>
# Gary Wang <wzc782970009@gmail.com>
#
# ******************************************************************************/
@ -30,37 +32,10 @@
#include <QDebug>
#include <QTextStream>
QString findLocaleN(int n, QString dir)
{
QDir langDir(dir + "/language");
QStringList list = langDir.entryList(QStringList("*.qm"), QDir::Files, QDir::Name);
for (int i = list.length() - 1; i >= 0; i--)
{
QString file = list.at(i);
QStringList name = file.split(".");
if (name[0] == QString::number(n))
{
return QString::number(n) + "." + name[1];
}
}
return QString("31.English");
}
QString findLocaleS(QString string, QString dir)
{
QDir langDir(dir + "/language");
QStringList list = langDir.entryList(QStringList("*.qm"), QDir::Files, QDir::Name);
for (int i = list.length() - 1; i >= 0; i--)
{
QString file = list.at(i);
QStringList name = file.split(".");
if (name[1] == string)
{
return name[0] + "." + string;
}
}
return QString("31.English");
}
// QM_FILE_INSTALL_DIR should be defined from the CMakeLists file.
#ifndef QM_FILE_INSTALL_DIR
#define QM_FILE_INSTALL_DIR ":/i18n/"
#endif // QM_FILE_INSTALL_DIR
int main(int argc, char *argv[])
{
@ -71,18 +46,24 @@ int main(int argc, char *argv[])
a.addLibraryPath(a.applicationDirPath() + "/lib/");
int loc = QLocale::system().language();
QString locale = settings.value("Preferences/lang").value<QString>();
QString locale = settings.value("Preferences/language").value<QString>();
QString qmDir;
#ifdef _WIN32
qmDir = QDir(QCoreApplication::applicationDirPath()).absoluteFilePath("translations");
#else
qmDir = QT_STRINGIFY(QM_FILE_INSTALL_DIR);
#endif
QTranslator translator;
if(locale.isEmpty())
{
translator.load(a.applicationDirPath() + "/language/" + findLocaleN(loc, a.applicationDirPath()));
a.installTranslator(&translator);
}
else
{
translator.load(a.applicationDirPath() + "/language/" + findLocaleS(locale, a.applicationDirPath()));
a.installTranslator(&translator);
if(locale.isEmpty()) {
if (translator.load(QString("caesium_%1").arg(QLocale::system().name()), qmDir)) {
a.installTranslator(&translator);
}
} else {
if (translator.load(QString("caesium_%1").arg(locale), qmDir)) {
a.installTranslator(&translator);
}
}
QPixmap pixmap(":icons/splash.png");

View File

@ -1,6 +1,7 @@
/*******************************************************************************
#
# Copyright (C) 2010-2013 Matteo Paonessa <matteo.paonessa@gmail.com>
# 2021 Gary Wang <wzc782970009@gmail.com>
#
# This file is part of the Caesium distribution.
#
@ -19,6 +20,7 @@
# Foundation, Inc., 51 Franklin Street, 5th Floor, Boston, MA 02110-1301 USA.
#
# Author: Matteo Paonessa <matteo.paonessa@gmail.com>
# Gary Wang <wzc782970009@gmail.com>
#
# ******************************************************************************/
@ -62,16 +64,17 @@ Preferences::~Preferences()
void Preferences::loadLanguages()
{
QDir langDir(QDir::currentPath() + "/language");
QDir langDir(QDir::currentPath() + "/translations");
QStringList list = langDir.entryList(QStringList("*.qm"), QDir::Files, QDir::NoSort);
for (int i = list.length() - 1; i >= 0; i--)
{
QString file = list.at(i);
QStringList infoList;
QStringList name = file.split(".");
infoList << name[1];
QTreeWidgetItem *item = new QTreeWidgetItem(infoList, 0);
item->setIcon(0, QIcon(":/icons/language/" + name[1] + ".png"));
QString fileName = QFileInfo(list.at(i)).baseName();
if (!fileName.startsWith("caesium")) continue;
QString langCode = fileName.mid(8);
QString langName = QLocale(langCode).nativeLanguageName();
if (langName.isEmpty() || langCode.isEmpty()) continue;
QTreeWidgetItem *item = new QTreeWidgetItem({langName, langCode}, 0);
ui->languageTreeWidget->insertTopLevelItem(0, item);
}
ui->languageTreeWidget->sortItems(0, Qt::AscendingOrder);
@ -171,7 +174,7 @@ void Preferences::on_applyButton_clicked()
settings.setValue("Preferences/loadlastlist", ui->loadLastListCheckBox->isChecked());
if (ui->languageTreeWidget->selectedItems().count() != 0)
{
settings.setValue("Preferences/lang", ui->languageTreeWidget->selectedItems().at(0)->text(0));
settings.setValue("Preferences/language", ui->languageTreeWidget->selectedItems().at(0)->text(1));
QMessageBox::information(this,
tr("Information"),
tr("You need to restart the application before\nchanges take effect"),

1015
translations/caesium.ts Normal file

File diff suppressed because it is too large Load Diff