Fixing minor bugs in texts, encoding, UI
This commit is contained in:
1 parent
79413e7319
commit
d4365728fe
87 files changed
+883
-404
No files matched your search
+54
-3
@@ -1,9 +1,16 @@
|
||||
#include "Localization.h"
|
||||
#include "Localization.h"
|
||||
|
||||
#include "external/nlohmann/json.hpp"
|
||||
#include "utils/Utils.h"
|
||||
#include <iostream>
|
||||
|
||||
// Платформозависимые инклюды для детекции языка
|
||||
#if defined(_WIN32)
|
||||
#include <windows.h>
|
||||
#elif defined(__EMSCRIPTEN__)
|
||||
#include <emscripten.h>
|
||||
#endif
|
||||
|
||||
namespace ZL {
|
||||
|
||||
Language g_currentLanguage = Language::Russian;
|
||||
@@ -55,8 +62,15 @@ std::string readLocalizedConfigFile(const std::string& basePath, const std::stri
|
||||
}
|
||||
|
||||
void loadLanguageSetting() {
|
||||
const std::string content = readTextFile("settings.json");
|
||||
if (content.empty()) return;
|
||||
const std::string content = readSavedTextFile("settings.json");
|
||||
|
||||
// Если файла настроек нет (content пустой), определяем язык системы и выходим
|
||||
if (content.empty()) {
|
||||
g_currentLanguage = detectSystemLanguage();
|
||||
std::cout << "[settings] No settings.json found. System language detected: "
|
||||
<< languageToCode(g_currentLanguage) << std::endl;
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const nlohmann::json root = nlohmann::json::parse(content);
|
||||
@@ -68,4 +82,41 @@ void loadLanguageSetting() {
|
||||
}
|
||||
}
|
||||
|
||||
Language detectSystemLanguage() {
|
||||
#if defined(__EMSCRIPTEN__)
|
||||
// Получаем первые два символа языка из браузера (0 - English, 1 - Russian, -1 - другой)
|
||||
int res = EM_ASM_INT({
|
||||
var lang = (navigator.language || navigator.userLanguage || 'en').toLowerCase();
|
||||
if (lang.startsWith('ru')) return 1;
|
||||
if (lang.startsWith('en')) return 0;
|
||||
return -1;
|
||||
});
|
||||
if (res == 1) return Language::Russian;
|
||||
if (res == 0) return Language::English;
|
||||
|
||||
#elif defined(_WIN32)
|
||||
LANGID langId = GetUserDefaultUILanguage();
|
||||
WORD primaryLang = PRIMARYLANGID(langId);
|
||||
if (primaryLang == LANG_RUSSIAN) return Language::Russian;
|
||||
if (primaryLang == LANG_ENGLISH) return Language::English;
|
||||
|
||||
#else
|
||||
// Linux / SteamOS
|
||||
const char* langEnv = std::getenv("LC_ALL");
|
||||
if (!langEnv || *langEnv == '\0') {
|
||||
langEnv = std::getenv("LANG");
|
||||
}
|
||||
|
||||
if (langEnv && *langEnv != '\0') {
|
||||
std::string langStr(langEnv);
|
||||
// Ищем префиксы "ru" или "en" в начале строки (например, ru_RU.UTF-8)
|
||||
if (langStr.rfind("ru", 0) == 0) return Language::Russian;
|
||||
if (langStr.rfind("en", 0) == 0) return Language::English;
|
||||
}
|
||||
#endif
|
||||
|
||||
// Дефолтный фоллбек, если язык системы не поддерживается игрой (например, немецкий)
|
||||
return Language::English;
|
||||
}
|
||||
|
||||
} // namespace ZL
|
||||
Reference in new issue
Block a user