From c6ba8bd008846c7506e2e286119eb0dc0a7bd81b Mon Sep 17 00:00:00 2001 From: Vladislav Khorev Date: Tue, 7 Jul 2026 20:27:46 +0300 Subject: [PATCH] Working on translations and minor bugs fix --- resources/config/translate_names.json | 39 +++++++++++++++++++++ resources/dialogue/translate_dialogues.json | 8 ++--- resources/w/ui_en/hud_step5ab.json | 4 +-- resources/w/ui_en/hud_step5b.json | 4 +-- src/Character.cpp | 6 +++- src/Character.h | 3 ++ src/Game.cpp | 2 ++ src/dialogue/TranslationDatabase.cpp | 17 +++++++++ src/dialogue/TranslationDatabase.h | 1 + 9 files changed, 75 insertions(+), 9 deletions(-) create mode 100644 resources/config/translate_names.json diff --git a/resources/config/translate_names.json b/resources/config/translate_names.json new file mode 100644 index 0000000..5623ed3 --- /dev/null +++ b/resources/config/translate_names.json @@ -0,0 +1,39 @@ +{ + "dialogue_translations": [ + { + "key": "Алик", + "ru": "Алик", + "en": "Alik" + }, + { + "key": "Айпери", + "ru": "Айпери", + "en": "Aiperi" + }, + { + "key": "Аида Джаныбековна", + "ru": "Аида Джаныбековна", + "en": "Aida Dzhanybekovna" + }, + { + "key": "Алтынай", + "ru": "Алтынай", + "en": "Altynai" + }, + { + "key": "Призрак", + "ru": "Призрак", + "en": "Ghost" + }, + { + "key": "Бегимай", + "ru": "Бегимай", + "en": "Begimai" + }, + { + "key": "Тень", + "ru": "Тень", + "en": "Shadow" + } + ] +} \ No newline at end of file diff --git a/resources/dialogue/translate_dialogues.json b/resources/dialogue/translate_dialogues.json index 454bbc7..a579b32 100644 --- a/resources/dialogue/translate_dialogues.json +++ b/resources/dialogue/translate_dialogues.json @@ -686,8 +686,8 @@ "en": "Could you open the teachers' room for me?" }, { - "key": "Аида Джаныбекова", - "ru": "Аида Джаныбекова", + "key": "Аида Джаныбековна", + "ru": "Аида Джаныбековна", "en": "Aida Dzhanybekovna" }, { @@ -1376,8 +1376,8 @@ "en": "You'll see worse things than that. Go to the dorm and get some sleep." }, { - "key": "Аида Джаныбекова увидела меня в учительской, и заставила писать эссе по этой тупой книге.", - "ru": "Аида Джаныбекова увидела меня в учительской, и заставила писать эссе по этой тупой книге.", + "key": "Аида Джаныбековна увидела меня в учительской, и заставила писать эссе по этой тупой книге.", + "ru": "Аида Джаныбековна увидела меня в учительской, и заставила писать эссе по этой тупой книге.", "en": "Aida Dzhanybekovna saw me in the teachers' room and made me write an essay on this stupid book." }, { diff --git a/resources/w/ui_en/hud_step5ab.json b/resources/w/ui_en/hud_step5ab.json index 761a24e..76eb84d 100644 --- a/resources/w/ui_en/hud_step5ab.json +++ b/resources/w/ui_en/hud_step5ab.json @@ -135,8 +135,8 @@ "y": 100, "texture": "resources/w/ui_en/img/Hint6b.png", "pulse": { - "minScale": 0.92, - "maxScale": 1.08, + "minScale": 0.82, + "maxScale": 0.9, "periodMs": 1500 }, "fadeIn": { diff --git a/resources/w/ui_en/hud_step5b.json b/resources/w/ui_en/hud_step5b.json index c073d33..f95ba0e 100644 --- a/resources/w/ui_en/hud_step5b.json +++ b/resources/w/ui_en/hud_step5b.json @@ -88,8 +88,8 @@ "y": 100, "texture": "resources/w/ui_en/img/Hint6b.png", "pulse": { - "minScale": 0.92, - "maxScale": 1.08, + "minScale": 0.82, + "maxScale": 0.9, "periodMs": 1500 }, "fadeIn": { diff --git a/src/Character.cpp b/src/Character.cpp index fe0f8ec..9379d83 100644 --- a/src/Character.cpp +++ b/src/Character.cpp @@ -18,6 +18,8 @@ namespace ZL { const float ATTACK_RANGE = 1.25f; const float VISIBLE_RANGE = 6.f; + Dialogue::TranslationDatabase Character::nameTranslations; + void Character::loadAnimation(AnimationState animState, const std::string& filename, const std::string& zipFile) { auto& data = animations[animState]; data.model.LoadFromFile(filename, zipFile); @@ -1236,7 +1238,9 @@ void Character::drawName(TextRenderer& textRenderer, ? std::array{ 1.f, 0.f, 0.f, 1.f } : std::array{ 0.f, 1.f, 0.f, 1.f }; - textRenderer.drawText(state.npcName, screenX, screenY, 1.0f, true, color); + const std::string& translatedName = Character::nameTranslations.translateRef(state.npcName, g_currentLanguage); + + textRenderer.drawText(translatedName, screenX, screenY, 1.0f, true, color); } void Character::drawHealthBar(Renderer& renderer, diff --git a/src/Character.h b/src/Character.h index ded9c50..f537725 100644 --- a/src/Character.h +++ b/src/Character.h @@ -11,6 +11,7 @@ #include #include #include +#include "dialogue/TranslationDatabase.h" namespace ZL { @@ -107,6 +108,8 @@ public: SparkEmitter hitSparkEmitter; + static Dialogue::TranslationDatabase nameTranslations; + private: std::map animations; VertexRenderStruct modelMutable; diff --git a/src/Game.cpp b/src/Game.cpp index 53f4b5a..3d704ee 100644 --- a/src/Game.cpp +++ b/src/Game.cpp @@ -249,6 +249,8 @@ namespace ZL ItemRegistry::instance().loadFromJson("resources/config/items.json", CONST_ZIP_FILE); + Character::nameTranslations.loadFromFile("resources/config/translate_names.json"); + createLocations(); // Wire inventory callbacks: tutorial tracking + toast notifications. diff --git a/src/dialogue/TranslationDatabase.cpp b/src/dialogue/TranslationDatabase.cpp index 8efcbc9..484adc9 100644 --- a/src/dialogue/TranslationDatabase.cpp +++ b/src/dialogue/TranslationDatabase.cpp @@ -77,4 +77,21 @@ std::string TranslationDatabase::translate(const std::string& key, Language lang return key; } +const std::string& TranslationDatabase::translateRef(const std::string& key, Language lang) const { + if (key.empty()) return key; + + auto it = entries.find(key); + if (it == entries.end()) return key; + + const auto& langMap = it->second; + + auto langIt = langMap.find(languageToCode(lang)); + if (langIt != langMap.end() && !langIt->second.empty()) return langIt->second; + + auto ruIt = langMap.find("ru"); + if (ruIt != langMap.end() && !ruIt->second.empty()) return ruIt->second; + + return key; +} + } // namespace ZL::Dialogue diff --git a/src/dialogue/TranslationDatabase.h b/src/dialogue/TranslationDatabase.h index 8f8a364..9b93a54 100644 --- a/src/dialogue/TranslationDatabase.h +++ b/src/dialogue/TranslationDatabase.h @@ -18,6 +18,7 @@ public: // Returns the translated text for `key` in `lang`, falling back to Russian, // then to `key` itself if no entry or translation exists. std::string translate(const std::string& key, Language lang) const; + const std::string& translateRef(const std::string& key, Language lang) const; private: std::unordered_map> entries;