}
void SystemLocale::SetLocale() {
- if (lang_.empty() || lang_.length() < 5) {
+ std::string code = lang_.substr(0, lang_.find_first_of(".@"));
+ if (code.empty()) {
locale_ = DEFAULT_LOCALE;
return;
}
- char local_buf[6] = {0, };
- snprintf(local_buf, sizeof(local_buf), "%c%c-%c%c",
- lang_[0], lang_[1], tolower(lang_[3]), tolower(lang_[4]));
- locale_ = local_buf;
+ size_t it = code.find('_');
+ if (it == std::string::npos) {
+ locale_ = std::move(code);
+ } else {
+ code[it] = '-';
+ locale_ = std::move(code);
+
+ for (size_t i = it + 1; i < locale_.size(); ++i)
+ locale_[i] = tolower(locale_[i]);
+ }
+
if (listener_)
listener_->OnChanged(locale_);
}