fix: ignore C locale in system language detection

This commit is contained in:
AKAI
2026-04-12 20:24:38 +09:00
committed by dec05eba
parent 2cabdf7089
commit d545de687c

View File

@@ -7,14 +7,18 @@
namespace gsr {
std::string Translation::get_system_language() {
const char* lang = getenv("LANGUAGE");
if (!lang || !lang[0]) lang = getenv("LC_ALL");
if (!lang || !lang[0]) lang = getenv("LC_MESSAGES");
if (!lang || !lang[0]) lang = getenv("LANG");
const char* env_vars[] = { "LANGUAGE", "LC_ALL", "LC_MESSAGES", "LANG" };
for (const char* env_var : env_vars) {
const char* lang = getenv(env_var);
if (!lang || !lang[0])
continue;
if (lang && lang[0]) {
std::string lang_str(lang);
// Ignore non-language locales such as C/POSIX and fall back to the next variable
if (lang_str == "C" || lang_str == "C.UTF-8" || lang_str == "POSIX")
continue;
// we usually need only two symbols
size_t underscore = lang_str.find('_');
if (underscore != std::string::npos) {