Fix to set locale 51/266451/5
authorChanggyu Choi <changyu.choi@samsung.com>
Fri, 12 Nov 2021 08:51:41 +0000 (17:51 +0900)
committerChanggyu Choi <changyu.choi@samsung.com>
Mon, 15 Nov 2021 01:07:55 +0000 (10:07 +0900)
Some language codes are being another pattern with "XX_XX".
This patch generalize algorithm that convert to locale.

Change-Id: I4b55dcd185ecd029562da036aebbc5ac6ab6eefe
Signed-off-by: Changgyu Choi <changyu.choi@samsung.com>
src/common/system_locale.cc

index f0a12cc..06c4442 100644 (file)
@@ -43,15 +43,23 @@ const std::string& SystemLocale::Get() const {
 }
 
 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_);
 }