Remade JSON translation format
This commit is contained in:
parent
e5e258134b
commit
29b8495d6d
2 changed files with 63 additions and 86 deletions
|
|
@ -4,65 +4,20 @@
|
|||
// Suggest any new translations or edits for existing here:
|
||||
// https://github.com/kotatogram/kotatogram-desktop/issues
|
||||
|
||||
[
|
||||
{
|
||||
"key": "ktg_intro_about",
|
||||
"value": "Добро пожаловать в неофициальный мессенджер\nна основе Telegram Desktop."
|
||||
},
|
||||
{
|
||||
"key": "ktg_about_text1",
|
||||
"value": "Экспериментальный неофициальный форк {tdesktop_link}."
|
||||
},
|
||||
{
|
||||
"key": "ktg_about_text3",
|
||||
"value": "Посетите {channel_link} или {faq_link} (англ.), чтобы узнать больше."
|
||||
},
|
||||
{
|
||||
"key": "ktg_about_text3_channel",
|
||||
"value": "канал 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"
|
||||
}
|
||||
]
|
||||
{
|
||||
"ktg_intro_about": "Добро пожаловать в неофициальный мессенджер\nна основе Telegram Desktop.",
|
||||
"ktg_about_text1": "Экспериментальный неофициальный форк {tdesktop_link}.",
|
||||
"ktg_about_text3": "Посетите {channel_link} или {faq_link} (англ.), чтобы узнать больше.",
|
||||
"ktg_about_text3_channel": "канал Kotatogram",
|
||||
"ktg_copy_btn_callback": "Копировать callback-данные",
|
||||
"ktg_profile_copy_id": "Копировать ID",
|
||||
"ktg_profile_bot_id": "ID бота",
|
||||
"ktg_profile_user_id": "ID пользователя",
|
||||
"ktg_profile_group_id": "ID группы",
|
||||
"ktg_profile_supergroup_id": "ID супергруппы",
|
||||
"ktg_profile_channel_id": "ID канала",
|
||||
"ktg_pinned_message_show": "Показать закреплённое сообщение",
|
||||
"ktg_pinned_message_hide": "Скрыть закреплённое сообщение",
|
||||
"ktg_settings_show_json_settings": "Показать файл настроек",
|
||||
"ktg_settings_restart": "Перезапустить Kotatogram"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -565,8 +565,8 @@ QString Instance::jsonLangDir() {
|
|||
void Instance::fillDefaultJson() {
|
||||
if (!QDir().exists(jsonLangDir())) QDir().mkpath(jsonLangDir());
|
||||
|
||||
const auto path = jsonLangDir() + "ru.json";
|
||||
const auto pathRaw = jsonLangDir() + "ru-raw.json";
|
||||
const auto path = jsonLangDir() + "ru.default.json";
|
||||
const auto pathRaw = jsonLangDir() + "ru-raw.default.json";
|
||||
auto input = QFile(":/ktg_lang/ru.json");
|
||||
auto output = QFile(path);
|
||||
auto outputRaw = QFile(pathRaw);
|
||||
|
|
@ -587,10 +587,14 @@ void Instance::fillDefaultJson() {
|
|||
|
||||
void Instance::fillFromJson() {
|
||||
if (id() != baseId()) {
|
||||
const auto langDefBaseDir = jsonLangDir() + (qsl("%1.default.json").arg(baseId()));
|
||||
loadFromJson(langDefBaseDir);
|
||||
const auto langBaseDir = jsonLangDir() + (qsl("%1.json").arg(baseId()));
|
||||
loadFromJson(langBaseDir);
|
||||
}
|
||||
|
||||
const auto langDefCustomDir = jsonLangDir() + (qsl("%1.default.json").arg(id()));
|
||||
loadFromJson(langDefCustomDir);
|
||||
const auto langCustomDir = jsonLangDir() + (qsl("%1.json").arg(id()));
|
||||
loadFromJson(langCustomDir);
|
||||
|
||||
|
|
@ -617,36 +621,54 @@ void Instance::loadFromJson(const QString &filename) {
|
|||
).arg(filename
|
||||
).arg(error.errorString()));
|
||||
return;
|
||||
} else if (!document.isArray()) {
|
||||
LOG(("Lang Info: file %1 has failed to parse. Error: array expected"
|
||||
} else if (!document.isObject()) {
|
||||
LOG(("Lang Info: file %1 has failed to parse. Error: object expected"
|
||||
).arg(filename));
|
||||
return;
|
||||
}
|
||||
const auto langKeys = document.array();
|
||||
const auto langKeys = document.object();
|
||||
auto limit = kLangValuesLimit;
|
||||
for (auto i = langKeys.constBegin(), e = langKeys.constEnd(); i != e; ++i) {
|
||||
if (!(*i).isObject()) {
|
||||
LOG(("Lang Info: Bad entry in file %1, object expected"
|
||||
).arg(filename));
|
||||
continue;
|
||||
}
|
||||
const auto entry = (*i).toObject();
|
||||
const auto key = entry.constFind(qsl("key"));
|
||||
const auto value = entry.constFind(qsl("value"));
|
||||
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 keyList = langKeys.keys();
|
||||
|
||||
for (auto i = keyList.constBegin(), e = keyList.constEnd(); i != e; ++i) {
|
||||
const auto key = *i;
|
||||
const auto value = langKeys.constFind(key);
|
||||
|
||||
if ((*value).isString()) {
|
||||
|
||||
const auto name = QByteArray().append(key);
|
||||
const auto translation = QByteArray().append((*value).toString());
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue