1
0
mirror of https://github.com/jaredtao/TaoQuick.git synced 2025-02-06 21:48:24 +08:00

128 lines
3.1 KiB
C++
Raw Normal View History

2020-07-05 02:12:59 +08:00
#include "Trans.h"
2020-06-30 00:34:25 +08:00
#include "filereadwrite.h"
2020-06-14 00:57:36 +08:00
#include <QDir>
2020-07-05 02:12:59 +08:00
#include <QQmlContext>
#include <QtConcurrent>
2020-06-14 00:57:36 +08:00
const static auto cEnglisthStr = QStringLiteral("English");
2020-06-14 13:28:35 +08:00
const static auto cChineseStr = QStringLiteral("简体中文");
2020-06-14 00:57:36 +08:00
Trans::Trans(QObject* parent)
: QObject(parent)
2020-06-12 19:21:18 +08:00
{
2020-06-14 00:57:36 +08:00
}
2020-07-05 02:12:59 +08:00
void Trans::init() {}
void Trans::uninit() {}
void Trans::beforeUiReady(QQmlContext* ctx)
{
ctx->setContextProperty("trans", this);
}
void Trans::afterUiReady() {}
2020-06-14 00:57:36 +08:00
void Trans::loadFolder(const QString& folder)
{
QDir dir(folder);
auto infos = dir.entryInfoList({ "language_*.json" }, QDir::Files);
2020-07-05 02:12:59 +08:00
QStringList paths;
QString lang;
2020-06-14 00:57:36 +08:00
for (auto info : infos) {
2020-07-05 02:12:59 +08:00
// paths.append(info.absoluteFilePath());
2020-06-14 00:57:36 +08:00
load(lang, info.absoluteFilePath());
}
2020-07-05 02:12:59 +08:00
// auto res = QtConcurrent::map(paths, std::bind(&Trans::load, this, lang, std::placeholders::_1));
// res.waitForFinished();
2020-06-14 00:57:36 +08:00
initEnglish();
2020-06-14 13:28:35 +08:00
auto langs = m_map.uniqueKeys();
if (langs.contains(cChineseStr)) {
langs.removeAll(cChineseStr);
langs.push_front(cChineseStr);
}
setLanguages(langs);
if (m_map.contains(cChineseStr)) {
setCurrentLang(cChineseStr);
} else {
setCurrentLang(cEnglisthStr);
}
2020-07-05 02:12:59 +08:00
emit folderLoaded(folder);
2020-06-14 00:57:36 +08:00
emit transStringChanged();
2020-06-12 19:21:18 +08:00
}
2020-06-14 00:57:36 +08:00
bool Trans::load(QString& lang, const QString& filePath)
2020-06-12 19:21:18 +08:00
{
2020-06-14 00:57:36 +08:00
lang.clear();
2020-06-12 19:21:18 +08:00
QJsonObject rootObj;
2020-06-14 00:57:36 +08:00
if (!TaoCommon::readJsonFile(filePath, rootObj)) {
return false;
2020-06-12 19:21:18 +08:00
}
2020-06-14 00:57:36 +08:00
lang = rootObj.value("lang").toString();
const auto& trans = rootObj.value("trans").toArray();
for (auto i : trans) {
2020-06-12 19:21:18 +08:00
auto transObj = i.toObject();
2020-06-14 00:57:36 +08:00
QString key = transObj.value("key").toString();
QString value = transObj.value("value").toString();
m_map[lang][key] = value;
2020-06-12 19:21:18 +08:00
}
2020-07-05 02:12:59 +08:00
emit langLoaded(lang);
2020-06-14 00:57:36 +08:00
return true;
2020-06-12 19:21:18 +08:00
}
2020-07-05 02:12:59 +08:00
const QString& Trans::currentLang() const
2020-06-18 21:57:49 +08:00
{
return m_currentLang;
}
2020-07-05 02:12:59 +08:00
const QStringList& Trans::languages() const
2020-06-18 21:57:49 +08:00
{
return m_languages;
}
2020-07-05 02:12:59 +08:00
const QString& Trans::transString() const
2020-06-18 21:57:49 +08:00
{
return m_transString;
}
2020-06-14 00:57:36 +08:00
void Trans::initEnglish()
2020-06-12 19:21:18 +08:00
{
2020-06-14 00:57:36 +08:00
if (!m_map.contains(cEnglisthStr)) {
2020-06-14 13:28:35 +08:00
QHash<QString, QString> map;
if (m_map.contains(cChineseStr)) {
map = m_map.value(cChineseStr);
} else {
map = m_map.value(m_map.keys().first());
}
2020-06-14 00:57:36 +08:00
for (auto key : map.uniqueKeys()) {
m_map[cEnglisthStr][key] = key;
}
2020-06-12 19:21:18 +08:00
}
}
2020-06-14 00:57:36 +08:00
QString Trans::trans(const QString& source) const
{
return m_map.value(m_currentLang).value(source, source);
2020-07-05 02:12:59 +08:00
// auto value = m_map.value(m_currentLang).value(source, source);
// qWarning() <<m_currentLang << source << value;
// return value;
2020-06-14 00:57:36 +08:00
}
void Trans::setCurrentLang(const QString& currentLang)
2020-06-12 19:21:18 +08:00
{
if (m_currentLang == currentLang)
return;
m_currentLang = currentLang;
emit currentLangChanged(m_currentLang);
emit transStringChanged();
}
2020-06-14 00:57:36 +08:00
void Trans::setLanguages(const QStringList& languages)
2020-06-12 19:21:18 +08:00
{
if (m_languages == languages)
return;
m_languages = languages;
emit languagesChanged(m_languages);
emit transStringChanged();
}