From d545de687cc35f112695e33549abfa233c983870 Mon Sep 17 00:00:00 2001 From: AKAI Date: Sun, 12 Apr 2026 20:24:38 +0900 Subject: [PATCH] fix: ignore C locale in system language detection --- src/Translation.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/Translation.cpp b/src/Translation.cpp index 6fbfc10..4b7d000 100644 --- a/src/Translation.cpp +++ b/src/Translation.cpp @@ -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) {