improve locale detection as much as possible
This commit is contained in:
@@ -77,6 +77,7 @@ void langs::loadLocalesInfo(const path& resdir, string& fallback) {
|
||||
|
||||
auto langs = root->obj("langs");
|
||||
if (langs) {
|
||||
std::cout << "locales ";
|
||||
for (auto& entry : langs->map) {
|
||||
auto langInfo = entry.second;
|
||||
|
||||
@@ -87,9 +88,31 @@ void langs::loadLocalesInfo(const path& resdir, string& fallback) {
|
||||
continue;
|
||||
}
|
||||
|
||||
std::cout << "locale " << entry.first << " (" << name << ") added" << std::endl;
|
||||
std::cout << "[" << entry.first << " (" << name << ")] ";
|
||||
langs::locales_info[entry.first] = LocaleInfo {entry.first, name};
|
||||
}
|
||||
std::cout << "added" << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
std::string langs::locale_by_envlocale(const std::string& envlocale, const path& resdir){
|
||||
string fallback = FALLBACK_DEFAULT;
|
||||
if (locales_info.size() == 0) {
|
||||
loadLocalesInfo(resdir, fallback);
|
||||
}
|
||||
if (locales_info.find(envlocale) != locales_info.end()) {
|
||||
std::cout << "locale " << envlocale << " is automatically selected" << std::endl;
|
||||
return envlocale;
|
||||
}
|
||||
else {
|
||||
for (const auto& loc : locales_info) {
|
||||
if (loc.first.find(envlocale.substr(0, 2)) != std::string::npos) {
|
||||
std::cout << "locale " << loc.first << " is automatically selected" << std::endl;
|
||||
return loc.first;
|
||||
}
|
||||
}
|
||||
std::cout << "locale " << fallback << " is automatically selected" << std::endl;
|
||||
return fallback;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user