Remade JSON translation format

This commit is contained in:
Eric Kotato 2019-10-07 22:46:34 +03:00
parent e5e258134b
commit 29b8495d6d
2 changed files with 63 additions and 86 deletions

View file

@ -4,65 +4,20 @@
// Suggest any new translations or edits for existing here: // Suggest any new translations or edits for existing here:
// https://github.com/kotatogram/kotatogram-desktop/issues // https://github.com/kotatogram/kotatogram-desktop/issues
[ {
{ "ktg_intro_about": "Добро пожаловать в неофициальный мессенджер\nна основе Telegram Desktop.",
"key": "ktg_intro_about", "ktg_about_text1": "Экспериментальный неофициальный форк {tdesktop_link}.",
"value": "Добро пожаловать в неофициальный мессенджер\nна основе Telegram Desktop." "ktg_about_text3": "Посетите {channel_link} или {faq_link} (англ.), чтобы узнать больше.",
}, "ktg_about_text3_channel": "канал Kotatogram",
{ "ktg_copy_btn_callback": "Копировать callback-данные",
"key": "ktg_about_text1", "ktg_profile_copy_id": "Копировать ID",
"value": "Экспериментальный неофициальный форк {tdesktop_link}." "ktg_profile_bot_id": "ID бота",
}, "ktg_profile_user_id": "ID пользователя",
{ "ktg_profile_group_id": "ID группы",
"key": "ktg_about_text3", "ktg_profile_supergroup_id": "ID супергруппы",
"value": "Посетите {channel_link} или {faq_link} (англ.), чтобы узнать больше." "ktg_profile_channel_id": "ID канала",
}, "ktg_pinned_message_show": "Показать закреплённое сообщение",
{ "ktg_pinned_message_hide": "Скрыть закреплённое сообщение",
"key": "ktg_about_text3_channel", "ktg_settings_show_json_settings": "Показать файл настроек",
"value": "канал Kotatogram" "ktg_settings_restart": "Перезапустить Kotatogram"
}, }
{
"key": "ktg_copy_btn_callback",
"value": "Копировать callback-данные"
},
{
"key": "ktg_profile_copy_id",
"value": "Копировать ID"
},
{
"key": "ktg_profile_bot_id",
"value": "ID бота"
},
{
"key": "ktg_profile_user_id",
"value": "ID пользователя"
},
{
"key": "ktg_profile_group_id",
"value": "ID группы"
},
{
"key": "ktg_profile_supergroup_id",
"value": "ID супергруппы"
},
{
"key": "ktg_profile_channel_id",
"value": "ID канала"
},
{
"key": "ktg_pinned_message_show",
"value": "Показать закреплённое сообщение"
},
{
"key": "ktg_pinned_message_hide",
"value": "Скрыть закреплённое сообщение"
},
{
"key": "ktg_settings_show_json_settings",
"value": "Показать файл настроек"
},
{
"key": "ktg_settings_restart",
"value": "Перезапустить Kotatogram"
}
]

View file

@ -565,8 +565,8 @@ QString Instance::jsonLangDir() {
void Instance::fillDefaultJson() { void Instance::fillDefaultJson() {
if (!QDir().exists(jsonLangDir())) QDir().mkpath(jsonLangDir()); if (!QDir().exists(jsonLangDir())) QDir().mkpath(jsonLangDir());
const auto path = jsonLangDir() + "ru.json"; const auto path = jsonLangDir() + "ru.default.json";
const auto pathRaw = jsonLangDir() + "ru-raw.json"; const auto pathRaw = jsonLangDir() + "ru-raw.default.json";
auto input = QFile(":/ktg_lang/ru.json"); auto input = QFile(":/ktg_lang/ru.json");
auto output = QFile(path); auto output = QFile(path);
auto outputRaw = QFile(pathRaw); auto outputRaw = QFile(pathRaw);
@ -587,10 +587,14 @@ void Instance::fillDefaultJson() {
void Instance::fillFromJson() { void Instance::fillFromJson() {
if (id() != baseId()) { if (id() != baseId()) {
const auto langDefBaseDir = jsonLangDir() + (qsl("%1.default.json").arg(baseId()));
loadFromJson(langDefBaseDir);
const auto langBaseDir = jsonLangDir() + (qsl("%1.json").arg(baseId())); const auto langBaseDir = jsonLangDir() + (qsl("%1.json").arg(baseId()));
loadFromJson(langBaseDir); loadFromJson(langBaseDir);
} }
const auto langDefCustomDir = jsonLangDir() + (qsl("%1.default.json").arg(id()));
loadFromJson(langDefCustomDir);
const auto langCustomDir = jsonLangDir() + (qsl("%1.json").arg(id())); const auto langCustomDir = jsonLangDir() + (qsl("%1.json").arg(id()));
loadFromJson(langCustomDir); loadFromJson(langCustomDir);
@ -617,36 +621,54 @@ void Instance::loadFromJson(const QString &filename) {
).arg(filename ).arg(filename
).arg(error.errorString())); ).arg(error.errorString()));
return; return;
} else if (!document.isArray()) { } else if (!document.isObject()) {
LOG(("Lang Info: file %1 has failed to parse. Error: array expected" LOG(("Lang Info: file %1 has failed to parse. Error: object expected"
).arg(filename)); ).arg(filename));
return; return;
} }
const auto langKeys = document.array(); const auto langKeys = document.object();
auto limit = kLangValuesLimit; auto limit = kLangValuesLimit;
for (auto i = langKeys.constBegin(), e = langKeys.constEnd(); i != e; ++i) { const auto keyList = langKeys.keys();
if (!(*i).isObject()) {
LOG(("Lang Info: Bad entry in file %1, object expected" for (auto i = keyList.constBegin(), e = keyList.constEnd(); i != e; ++i) {
).arg(filename)); const auto key = *i;
continue; const auto value = langKeys.constFind(key);
}
const auto entry = (*i).toObject(); if ((*value).isString()) {
const auto key = entry.constFind(qsl("key"));
const auto value = entry.constFind(qsl("value")); const auto name = QByteArray().append(key);
if (key == entry.constEnd()
|| value == entry.constEnd()
|| !(*key).isString()
|| !(*value).isString()) {
LOG(("Lang Info: Bad entry in file %1, %2 expected"
).arg(filename).arg("{\"key\": \"...\", \"value\": \"...\" }"
));
} else {
const auto name = QByteArray().append((*key).toString());
const auto translation = QByteArray().append((*value).toString()); const auto translation = QByteArray().append((*value).toString());
applyValue(name, translation); applyValue(name, translation);
} else if ((*value).isObject()) {
const auto keyPlurals = (*value).isObject()
const auto pluralList = keyPlurals.keys();
for (auto pli = keyList.constBegin(), ple = keyList.constEnd(); pli != ple; ++pli) {
const auto plural = *pli;
const auto pluralValue = keyPlurals.constFind(plural);
if (!(*pluralValue).isString()) {
LOG(("Lang Info: wrong value for key %1 in %2 in file %3, string expected"
).arg(plural).arg(key).arg(filename));
continue;
}
const auto name = QByteArray(key + "#" + plural);
const auto translation = QByteArray((*pluralValue).toString());
applyValue(name, translation);
if (--limit <= 0) {
break;
}
}
} else {
LOG(("Lang Info: wrong value for key %1 in file %2, string or object expected"
).arg(key).arg(filename));
} }
if (!--limit) { if (--limit <= 0) {
break; break;
} }
} }