15 initializeGuiResources();
17 if (
auto* previous = application.findChild<QObject*>(
"gemcGuiTranslators", Qt::FindDirectChildrenOnly)) {
20 auto* owner =
new QObject(&application);
21 owner->setObjectName(
"gemcGuiTranslators");
22 application.setProperty(
"gemcGuiLanguage", QString::fromStdString(language));
23 if (language ==
"en" || language.starts_with(
"en-"))
return;
25 auto* standard =
new QTranslator(owner);
26 const auto locale = QLocale(QString::fromStdString(language).replace(
'-',
'_'));
27 if (standard->load(locale,
"qtbase",
"_", QLibraryInfo::path(QLibraryInfo::TranslationsPath))) {
28 application.installTranslator(standard);
31 const auto separator = language.find(
'-');
32 const auto base = language.substr(0, separator);
33 auto* embedded =
new QTranslator(owner);
34 if (embedded->load(QString::fromStdString(
":/gemc/gui/" + base +
".qm"))) {
35 application.installTranslator(embedded);
38 std::vector<std::string> variants{base};
39 if (base != language) variants.push_back(language);
41 for (
const auto& variant : variants) {
43 for (
auto directory = directories.rbegin(); directory != directories.rend(); ++directory) {
44 for (
const auto& path : {*directory /
"gui" / (variant +
".qm"), *directory / (variant +
".qm")}) {
45 std::error_code error;
46 if (!std::filesystem::is_regular_file(path, error))
continue;
47 auto* translator =
new QTranslator(owner);
48 if (translator->load(QString::fromStdString(path.string()))) {
49 application.installTranslator(translator);
51 qWarning(
"Ignoring invalid GUI translation catalog: %s", path.string().c_str());
void installGuiTranslations(QCoreApplication &application, const GOptions *options=nullptr)
Install GUI translations before constructing widgets, using the same language as GLogger.