Working on translations and minor bugs fix

This commit is contained in:
Vladislav Khorev 2026-07-07 20:27:46 +03:00
parent a40a582b5a
commit c6ba8bd008
9 changed files with 75 additions and 9 deletions

View File

@ -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"
}
]
}

View File

@ -686,8 +686,8 @@
"en": "Could you open the teachers' room for me?" "en": "Could you open the teachers' room for me?"
}, },
{ {
"key": "Аида Джаныбекова", "key": "Аида Джаныбековна",
"ru": "Аида Джаныбекова", "ru": "Аида Джаныбековна",
"en": "Aida Dzhanybekovna" "en": "Aida Dzhanybekovna"
}, },
{ {
@ -1376,8 +1376,8 @@
"en": "You'll see worse things than that. Go to the dorm and get some sleep." "en": "You'll see worse things than that. Go to the dorm and get some sleep."
}, },
{ {
"key": "Аида Джаныбекова увидела меня в учительской, и заставила писать эссе по этой тупой книге.", "key": "Аида Джаныбековна увидела меня в учительской, и заставила писать эссе по этой тупой книге.",
"ru": "Аида Джаныбекова увидела меня в учительской, и заставила писать эссе по этой тупой книге.", "ru": "Аида Джаныбековна увидела меня в учительской, и заставила писать эссе по этой тупой книге.",
"en": "Aida Dzhanybekovna saw me in the teachers' room and made me write an essay on this stupid book." "en": "Aida Dzhanybekovna saw me in the teachers' room and made me write an essay on this stupid book."
}, },
{ {

View File

@ -135,8 +135,8 @@
"y": 100, "y": 100,
"texture": "resources/w/ui_en/img/Hint6b.png", "texture": "resources/w/ui_en/img/Hint6b.png",
"pulse": { "pulse": {
"minScale": 0.92, "minScale": 0.82,
"maxScale": 1.08, "maxScale": 0.9,
"periodMs": 1500 "periodMs": 1500
}, },
"fadeIn": { "fadeIn": {

View File

@ -88,8 +88,8 @@
"y": 100, "y": 100,
"texture": "resources/w/ui_en/img/Hint6b.png", "texture": "resources/w/ui_en/img/Hint6b.png",
"pulse": { "pulse": {
"minScale": 0.92, "minScale": 0.82,
"maxScale": 1.08, "maxScale": 0.9,
"periodMs": 1500 "periodMs": 1500
}, },
"fadeIn": { "fadeIn": {

View File

@ -18,6 +18,8 @@ namespace ZL {
const float ATTACK_RANGE = 1.25f; const float ATTACK_RANGE = 1.25f;
const float VISIBLE_RANGE = 6.f; const float VISIBLE_RANGE = 6.f;
Dialogue::TranslationDatabase Character::nameTranslations;
void Character::loadAnimation(AnimationState animState, const std::string& filename, const std::string& zipFile) { void Character::loadAnimation(AnimationState animState, const std::string& filename, const std::string& zipFile) {
auto& data = animations[animState]; auto& data = animations[animState];
data.model.LoadFromFile(filename, zipFile); data.model.LoadFromFile(filename, zipFile);
@ -1236,7 +1238,9 @@ void Character::drawName(TextRenderer& textRenderer,
? std::array<float, 4>{ 1.f, 0.f, 0.f, 1.f } ? std::array<float, 4>{ 1.f, 0.f, 0.f, 1.f }
: std::array<float, 4>{ 0.f, 1.f, 0.f, 1.f }; : std::array<float, 4>{ 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, void Character::drawHealthBar(Renderer& renderer,

View File

@ -11,6 +11,7 @@
#include <cstdint> #include <cstdint>
#include <vector> #include <vector>
#include <unordered_map> #include <unordered_map>
#include "dialogue/TranslationDatabase.h"
namespace ZL { namespace ZL {
@ -107,6 +108,8 @@ public:
SparkEmitter hitSparkEmitter; SparkEmitter hitSparkEmitter;
static Dialogue::TranslationDatabase nameTranslations;
private: private:
std::map<AnimationState, BoneAnimationDataNew> animations; std::map<AnimationState, BoneAnimationDataNew> animations;
VertexRenderStruct modelMutable; VertexRenderStruct modelMutable;

View File

@ -249,6 +249,8 @@ namespace ZL
ItemRegistry::instance().loadFromJson("resources/config/items.json", CONST_ZIP_FILE); ItemRegistry::instance().loadFromJson("resources/config/items.json", CONST_ZIP_FILE);
Character::nameTranslations.loadFromFile("resources/config/translate_names.json");
createLocations(); createLocations();
// Wire inventory callbacks: tutorial tracking + toast notifications. // Wire inventory callbacks: tutorial tracking + toast notifications.

View File

@ -77,4 +77,21 @@ std::string TranslationDatabase::translate(const std::string& key, Language lang
return key; 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 } // namespace ZL::Dialogue

View File

@ -18,6 +18,7 @@ public:
// Returns the translated text for `key` in `lang`, falling back to Russian, // Returns the translated text for `key` in `lang`, falling back to Russian,
// then to `key` itself if no entry or translation exists. // then to `key` itself if no entry or translation exists.
std::string translate(const std::string& key, Language lang) const; std::string translate(const std::string& key, Language lang) const;
const std::string& translateRef(const std::string& key, Language lang) const;
private: private:
std::unordered_map<std::string, std::unordered_map<std::string, std::string>> entries; std::unordered_map<std::string, std::unordered_map<std::string, std::string>> entries;