#include <unistd.h>
#include <vconf.h>
+#include <algorithm>
#include <cstring>
#include <list>
#include <map>
#include <set>
#include <sstream>
#include <utility>
+#include <vector>
#include "app-core-cpp/app_core_base.hh"
#include "common/glib_private.hh"
void UpdateRegion();
std::list<std::string> SplitLanguage(const std::string& lang);
std::string GetLanguage(std::string lang);
- void AppendDefaultLangs(std::set<std::string>& lang_set);
+ void AppendDefaultLangs(std::vector<std::string>& lang_set);
std::string GetStringBefore(const char* str, const char* delim);
std::map<std::string, std::set<std::string>> GetLangTable();
- void AppendLangs(const std::string& lang, std::set<std::string>& lang_set,
+ void AppendLangs(const std::string& lang, std::vector<std::string>& lang_set,
std::map<std::string, std::set<std::string>>& table);
void ChangeLang();
void OnFreezerSignal();
return li;
}
-void AppCoreBase::Impl::AppendDefaultLangs(std::set<std::string>& lang_set) {
- lang_set.insert({"en_US", "en_GB", "en"});
+void AppCoreBase::Impl::AppendDefaultLangs(std::vector<std::string>& langs) {
+ langs.push_back("en_US");
+ langs.push_back("en_GB");
+ langs.push_back("en");
}
std::string AppCoreBase::Impl::GetStringBefore(const char* cstr,
}
void AppCoreBase::Impl::AppendLangs(const std::string& lang,
- std::set<std::string>& lang_set,
+ std::vector<std::string>& langs,
std::map<std::string, std::set<std::string>>& table) {
if (lang.empty())
return;
- lang_set.insert(lang);
+ langs.push_back(lang);
std::string extract_lang = GetStringBefore(lang.c_str(), ".");
if (extract_lang.empty())
return;
- if (lang_set.find(extract_lang) != lang_set.end())
+ if (std::find(langs.begin(), langs.end(), extract_lang) != langs.end())
return;
std::string parent_lang = GetStringBefore(extract_lang.c_str(), "_");
auto it = table[parent_lang].find(extract_lang);
if (it != table[parent_lang].end()) {
- lang_set.insert(move(*it));
+ std::string value = *it;
+ if (std::find(langs.begin(), langs.end(), value) == langs.end())
+ langs.push_back(std::move(value));
+
table[parent_lang].erase(it);
return;
}
it = table[parent_lang].find(parent_lang);
if (it != table[parent_lang].end()) {
- lang_set.insert(move(*it));
+ std::string value = *it;
+ if (std::find(langs.begin(), langs.end(), value) == langs.end())
+ langs.push_back(std::move(value));
+
table[parent_lang].erase(parent_lang);
return;
}
if (!table[parent_lang].empty()) {
auto i = table[parent_lang].begin();
- lang_set.insert(move(*i));
+ std::string value = *i;
+ if (std::find(langs.begin(), langs.end(), value) == langs.end())
+ langs.push_back(std::move(value));
+
table[parent_lang].erase(i);
}
}
if (table.empty())
return "";
- std::set<std::string> lang_set {};
+ std::vector<std::string> langs;
for (auto& i : l)
- AppendLangs(i, lang_set, table);
+ AppendLangs(i, langs, table);
- AppendDefaultLangs(lang_set);
+ AppendDefaultLangs(langs);
std::string ret;
- for (auto& i : lang_set) {
+ for (auto& i : langs) {
if (ret.empty())
ret = i;
else
- ret = i + ":" + ret;
+ ret += ":" + i;
}
return ret;