translation of all project, and new translation mechanism

This commit is contained in:
2026-09-03 09:18:48 +03:00
parent 00e7c957e4
commit 01af372ef2
32 changed files with 2813 additions and 537 deletions
+16 -15
View File
@@ -1,4 +1,5 @@
#include "buildswitcher.h"
#include "localization.h"
#include "buildarchiveworker.h"
#include "launcherpaths.h"
@@ -145,7 +146,7 @@ void BuildSwitcher::switchTo(int fromBuildId,
const QString &gameDir)
{
if (m_state != Idle) {
emit failed(toBuildId, tr("Смена сборки уже выполняется"), true);
emit failed(toBuildId, Loc::text("common.error.switchInProgress"), true);
return;
}
@@ -173,7 +174,7 @@ void BuildSwitcher::switchTo(int fromBuildId,
if (!QDir().mkpath(buildDir(fromBuildId))) {
emit failed(toBuildId,
tr("Не удалось создать %1")
Loc::text("common.error.createFailed")
.arg(QDir::toNativeSeparators(buildDir(fromBuildId))),
true);
return;
@@ -183,7 +184,7 @@ void BuildSwitcher::switchTo(int fromBuildId,
const QStorageInfo storage(LauncherPaths::buildStorageDir());
if (storage.isValid() && storage.bytesAvailable() < needed) {
emit failed(toBuildId,
tr("Недостаточно места для архива сборки «%1»: нужно около %2 МБ")
Loc::text("switch.error.notEnoughSpace")
.arg(fromName)
.arg(needed / (1024 * 1024)),
true);
@@ -194,7 +195,7 @@ void BuildSwitcher::switchTo(int fromBuildId,
+ QUuid::createUuid().toString(QUuid::Id128) + QStringLiteral(".zip");
m_state = Archiving;
setStage(tr("Сохранение сборки «%1»").arg(fromName));
setStage(Loc::text("switch.progress.saving").arg(fromName));
requestArchive(gameDir, m_tempZip, sharedTopLevel());
}
@@ -296,12 +297,12 @@ void BuildSwitcher::commitArchive()
// На сборку — один архив: новый встаёт на место, все прежние уходят.
if (QFile::exists(target) && !QFile::remove(target)) {
QFile::remove(m_tempZip);
fail(tr("Не удалось заменить архив %1").arg(QDir::toNativeSeparators(target)), true);
fail(Loc::text("switch.error.archiveReplaceFailed").arg(QDir::toNativeSeparators(target)), true);
return;
}
if (!QFile::rename(m_tempZip, target)) {
QFile::remove(m_tempZip);
fail(tr("Не удалось сохранить архив %1").arg(QDir::toNativeSeparators(target)), true);
fail(Loc::text("switch.error.archiveSaveFailed").arg(QDir::toNativeSeparators(target)), true);
return;
}
@@ -335,7 +336,7 @@ void BuildSwitcher::commitArchive()
void BuildSwitcher::beginClearing()
{
setStage(tr("Подготовка сборки «%1»").arg(m_toName));
setStage(Loc::text("switch.progress.preparing").arg(m_toName));
requestClear(m_gameDir, sharedTopLevel());
}
@@ -351,7 +352,7 @@ void BuildSwitcher::beginRestoring()
}
m_state = Restoring;
setStage(tr("Восстановление сборки «%1»").arg(m_toName));
setStage(Loc::text("switch.progress.restoring").arg(m_toName));
requestRestore(archive, m_gameDir);
}
@@ -365,7 +366,7 @@ void BuildSwitcher::applyPack(int buildId,
const QString &gameDir)
{
if (m_state != Idle) {
emit failed(buildId, tr("Операция со сборками уже выполняется"), true);
emit failed(buildId, Loc::text("switch.error.busy"), true);
return;
}
@@ -376,7 +377,7 @@ void BuildSwitcher::applyPack(int buildId,
}
if (!QFile::exists(packZipPath)) {
emit failed(buildId,
tr("Архив сборки не найден: %1")
Loc::text("switch.error.archiveMissing")
.arg(QDir::toNativeSeparators(packZipPath)),
true);
return;
@@ -412,7 +413,7 @@ void BuildSwitcher::applyPack(int buildId,
void BuildSwitcher::beginApplying()
{
setStage(tr("Установка сборки «%1»").arg(m_toName));
setStage(Loc::text("switch.progress.installing").arg(m_toName));
requestApplyPack(m_packPath, m_gameDir, m_packRemove);
}
@@ -507,8 +508,8 @@ QString BuildSwitcher::interruptedSwitchWarning() const
if (state == kStateApplying) {
const QString name = index.value(QStringLiteral("packName")).toString();
return tr("Установка сборки%1 не завершилась — докатываем её файлы.")
.arg(name.isEmpty() ? QString() : tr(" «%1»").arg(name));
return Loc::text("switch.status.applyInterrupted")
.arg(name.isEmpty() ? QString() : Loc::text("switch.status.nameSuffix").arg(name));
}
if (state != kStateSwitching)
return {};
@@ -519,8 +520,8 @@ QString BuildSwitcher::interruptedSwitchWarning() const
.toObject()
.value(QStringLiteral("name"))
.toString();
return tr("Прошлая смена сборки%1 не завершилась — восстанавливаем содержимое .minecraft.")
.arg(name.isEmpty() ? QString() : tr(" на «%1»").arg(name));
return Loc::text("switch.status.switchInterrupted")
.arg(name.isEmpty() ? QString() : Loc::text("switch.status.targetSuffix").arg(name));
}
void BuildSwitcher::resumeInterrupted(const QString &gameDir)