'system_info_context_mobile.cc',
'system_info_display.h',
'system_info_display_x11.cc',
+ 'system_info_locale.cc',
+ 'system_info_locale.h',
'system_info_storage.cc',
'system_info_storage.h',
'system_info_utils.cc',
#include "system_info/system_info_battery.h"
#include "system_info/system_info_build.h"
#include "system_info/system_info_display.h"
+#include "system_info/system_info_locale.h"
#include "system_info/system_info_storage.h"
#include "system_info/system_info_utils.h"
void SystemInfoContext::GetLocale(picojson::value& error,
picojson::value& data) {
- // FIXME(halton): Add actual implementation
- SetPicoJsonObjectValue(data, "language", picojson::value("zh_CN"));
- SetPicoJsonObjectValue(data, "country", picojson::value("PRC"));
- SetPicoJsonObjectValue(error, "message", picojson::value(""));
+ SysInfoLocale& locale = SysInfoLocale::GetSysInfoLocale(error);
+
+ std::string Lang;
+ std::string Locale;
+ // FIXME(faimar): Convert the city name to actual "country" name
+ if (locale.GetLocaleInfo(Lang, Locale)) {
+ SetPicoJsonObjectValue(data, "language", picojson::value(Lang));
+ SetPicoJsonObjectValue(data, "country", picojson::value(Locale));
+ SetPicoJsonObjectValue(error, "message", picojson::value(""));
+ } else {
+ SetPicoJsonObjectValue(error, "message",
+ picojson::value("Unable to get info."));
+ }
}
void SystemInfoContext::HandleGetPropertyValue(const picojson::value& input,
--- /dev/null
+// Copyright (c) 2013 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "system_info/system_info_locale.h"
+
+#include <libudev.h>
+#include <locale.h>
+
+#include <fstream>
+
+#include "common/picojson.h"
+#include "system_info/system_info_utils.h"
+
+using namespace system_info;
+
+SysInfoLocale::SysInfoLocale(picojson::value& error) {
+ udev_ = udev_new();
+ if (!udev_) {
+ SetPicoJsonObjectValue(error, "message",
+ picojson::value("Can't create udev."));
+ }
+}
+
+SysInfoLocale::~SysInfoLocale() {
+ if(udev_)
+ udev_unref(udev_);
+}
+
+bool SysInfoLocale::GetLocaleInfo(std::string& Language,
+ std::string& Locale) {
+ setlocale(LC_ALL, "");
+ const struct lconv * const currentlocale = localeconv();
+ std::string info = setlocale(LC_ALL, NULL);
+ int pos = info.find('.', 0);
+ Language.assign(info, 0, pos);
+
+ std::ifstream in;
+ in.open("/etc/timezone");
+ getline(in, info);
+ in.close();
+ pos = info.find('/', 0);
+ Locale.assign(info, pos + 1, info.length() - pos - 1);
+
+ return !(Language.empty() || Locale.empty());
+}
--- /dev/null
+// Copyright (c) 2013 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef SYSTEM_INFO_SYSTEM_INFO_LOCALE_H_
+#define SYSTEM_INFO_SYSTEM_INFO_LOCALE_H_
+
+#include <libudev.h>
+
+#include <string>
+
+#include "common/picojson.h"
+#include "common/utils.h"
+
+class SysInfoLocale {
+ public:
+ static SysInfoLocale& GetSysInfoLocale(picojson::value& error) {
+ static SysInfoLocale instance(error);
+ return instance;
+ }
+ ~SysInfoLocale();
+ bool GetLocaleInfo(std::string& Language,
+ std::string& Locale);
+
+ private:
+ SysInfoLocale(picojson::value& error);
+
+ struct udev* udev_;
+
+ DISALLOW_COPY_AND_ASSIGN(SysInfoLocale);
+};
+
+#endif // SYSTEM_INFO_SYSTEM_INFO_LOCALE_H_