1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
/**
* This file is part of GpgFrontend.
*
* GpgFrontend is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Foobar is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Foobar. If not, see <https://www.gnu.org/licenses/>.
*
* The initial version of the source code is inherited from gpg4usb-team.
* Their source code version also complies with GNU General Public License.
*
* The source code version of this software was modified and released
* by Saturneric<[email protected]> starting on May 12, 2021.
*
*/
#include <boost/date_time.hpp>
#include "ui/settings/GlobalSettingStation.h"
void init_logging() {
using namespace boost::posix_time;
using namespace boost::gregorian;
ptime now = second_clock::local_time();
el::Loggers::addFlag(el::LoggingFlag::AutoSpacing);
el::Configurations defaultConf;
defaultConf.setToDefault();
el::Loggers::reconfigureLogger("default", defaultConf);
defaultConf.setGlobally(el::ConfigurationType::Format,
"%datetime %level %func %msg");
auto logfile_path =
(GpgFrontend::UI::GlobalSettingStation::GetInstance().GetLogDir() /
to_iso_string(now));
logfile_path.replace_extension(".log");
defaultConf.setGlobally(el::ConfigurationType::Filename,
logfile_path.string());
el::Loggers::reconfigureLogger("default", defaultConf);
LOG(INFO) << _("Logfile Path") << logfile_path;
}
void init_locale() {
auto& settings =
GpgFrontend::UI::GlobalSettingStation::GetInstance().GetUISettings();
if (!settings.exists("general") ||
settings.lookup("general").getType() != libconfig::Setting::TypeGroup)
settings.add("general", libconfig::Setting::TypeGroup);
// set system default at first
auto& general = settings["general"];
if (!general.exists("lang"))
general.add("lang", libconfig::Setting::TypeString) = "";
GpgFrontend::UI::GlobalSettingStation::GetInstance().Sync();
LOG(INFO) << "current system locale" << setlocale(LC_ALL, nullptr);
// read from settings file
std::string lang;
if (!general.lookupValue("lang", lang)) {
LOG(ERROR) << _("Could not read properly from configure file");
};
LOG(INFO) << "lang from settings" << lang;
LOG(INFO) << "PROJECT_NAME" << PROJECT_NAME;
LOG(INFO) << "locales path"
<< GpgFrontend::UI::GlobalSettingStation::GetInstance()
.GetLocaleDir()
.c_str();
#ifndef WINDOWS
if (!lang.empty()) {
std::string lc = lang.empty() ? "" : lang + ".UTF-8";
// set LC_ALL
auto* locale_name = setlocale(LC_ALL, lc.c_str());
if (locale_name == nullptr) LOG(WARNING) << "set LC_ALL failed" << lc;
auto language = getenv("LANGUAGE");
// set LANGUAGE
std::string language_env = language == nullptr ? "en" : language;
language_env.insert(0, lang + ":");
LOG(INFO) << "language env" << language_env;
if (setenv("LANGUAGE", language_env.c_str(), 1)) {
LOG(WARNING) << "set LANGUAGE failed" << language_env;
};
}
#else
if (!lang.empty()) {
std::string lc = lang.empty() ? "" : lang;
// set LC_ALL
auto* locale_name = setlocale(LC_ALL, lc.c_str());
if (locale_name == nullptr) LOG(WARNING) << "set LC_ALL failed" << lc;
auto language = getenv("LANGUAGE");
// set LANGUAGE
std::string language_env = language == nullptr ? "en" : language;
language_env.insert(0, lang + ":");
language_env.insert(0, "LANGUAGE=");
LOG(INFO) << "language env" << language_env;
if (putenv(language_env.c_str())) {
LOG(WARNING) << "set LANGUAGE failed" << language_env;
};
}
#endif
bindtextdomain(PROJECT_NAME,
GpgFrontend::UI::GlobalSettingStation::GetInstance()
.GetLocaleDir()
.string()
.c_str());
bind_textdomain_codeset(PROJECT_NAME, "utf-8");
textdomain(PROJECT_NAME);
}
|