#include <dlog.h>
#include <dpl/wrt-dao-ro/global_config.h>
#include <vcore/VCore.h>
-#include <vconf.h>
#include <dpl/wrt-dao-ro/WrtDatabase.h>
#include <dpl/wrt-dao-ro/widget_dao_read_only.h>
#include <dpl/wrt-dao-ro/feature_dao_read_only.h>
#include <dpl/binary_queue.h>
#include <dpl/file_input.h>
#include <dpl/wrt-dao-ro/config_parser_data.h>
+#include <dpl/localization/LanguageTagsProvider.h>
#include "root_parser.h"
#include "widget_parser.h"
#include "parser_runner.h"
DPL::Optional<DPL::String> name;
DPL::Optional<DPL::String> desc;
- DPL::OptionalString defaultLocale = configInfo.defaultlocale;
+ LanguageTags tags = LanguageTagsProviderSingleton::Instance().getLanguageTags();
- char* language = vconf_get_str(VCONFKEY_LANGSET);
+ auto toLowerCase = [](const DPL::String & r)
+ {
+ DPL::String result;
+ std::transform(r.begin(), r.end(), std::inserter(result, result.begin()), ::tolower);
+ return result;
+ };
- DPL::String inLocaleString = DPL::FromUTF8String(language);
- DPL::String locString = inLocaleString.substr(
- 0, inLocaleString.find_first_of(L"."));
- std::replace(locString.begin(), locString.end(), '_', '-');
+ if (!!configInfo.defaultlocale)
+ {
+ Locale & dl = *configInfo.defaultlocale;
+ configInfo.defaultlocale = toLowerCase(dl);
+ }
- FOREACH(localizedData, configInfo.localizedDataSet)
+ bool found = false;
+ FOREACH(tag, tags)
{
- Locale i = localizedData->first;
- std::transform( locString.begin(),
- locString.end(),
- locString.begin(),
- ::tolower );
- std::transform( i.begin(), i.end(), i.begin(), ::tolower );
- std::size_t found = locString.find(i);
- std::size_t found2 = i.find(locString);
-
- if (!!defaultLocale) {
- if (defaultLocale == i) {
+ *tag = toLowerCase(*tag);
+ FOREACH(localizedData, configInfo.localizedDataSet)
+ {
+ Locale i = localizedData->first;
+ i = toLowerCase(i);
+
+ if (!!configInfo.defaultlocale && *configInfo.defaultlocale == i)
+ {
name = localizedData->second.name;
desc = localizedData->second.description;
+ }
+ if (*tag == i)
+ {
+ name = localizedData->second.name;
+ desc = localizedData->second.description;
+ found = true;
break;
}
- } else if (found != std::string::npos
- || found2 != std::string::npos) {
- name = localizedData->second.name;
- desc = localizedData->second.description;
- break;
- }
- else {
- name = localizedData->second.name;
- desc = localizedData->second.description;
- continue;
}
+ if(found) break;
}
if( !name.IsNull()) {