diff --git a/vita3k/gui-qt/include/gui-qt/gui_language.h b/vita3k/gui-qt/include/gui-qt/gui_language.h index 3c09e45ee..531908ad4 100644 --- a/vita3k/gui-qt/include/gui-qt/gui_language.h +++ b/vita3k/gui-qt/include/gui-qt/gui_language.h @@ -21,6 +21,7 @@ #include #include +#include class QApplication; @@ -31,8 +32,8 @@ struct UiLanguageOption { std::string_view native_name; }; -std::span ui_language_options(); -bool apply_ui_language(QApplication &app, std::string_view configured_tag); +std::span ui_language_options(fs::path &static_assets_path); +bool apply_ui_language(QApplication &app, std::string_view configured_tag, fs::path &static_assets_path); QString language_name(std::string_view tag); } // namespace gui::i18n diff --git a/vita3k/gui-qt/src/gui_language.cpp b/vita3k/gui-qt/src/gui_language.cpp index 9ac0ac345..5da385aa3 100644 --- a/vita3k/gui-qt/src/gui_language.cpp +++ b/vita3k/gui-qt/src/gui_language.cpp @@ -61,19 +61,18 @@ const std::array k_ui_languages = { { std::unique_ptr s_translator; -QStringList translation_search_paths() { - const QString app_dir = QCoreApplication::applicationDirPath(); +QStringList translation_search_paths(fs::path &static_assets_path) { return { - app_dir + QStringLiteral("/translations"), - app_dir + QStringLiteral("/../Resources/translations"), + QString::fromUtf8((static_assets_path / "translations").string().c_str()), + QString::fromUtf8((static_assets_path / "../Resources/translations").string().c_str()), }; } -QSet available_translation_tags() { +QSet available_translation_tags(fs::path &static_assets_path) { const QString prefix = QStringLiteral("vita3k_"); QSet tags; - for (const QString &path : translation_search_paths()) { + for (const QString &path : translation_search_paths(static_assets_path)) { const QDir dir(path); const auto entries = dir.entryList({ QStringLiteral("vita3k_*.qm"), QStringLiteral("vita3k_*.ts") }, QDir::Files); for (const QString &entry : entries) { @@ -92,12 +91,12 @@ QSet available_translation_tags() { } // namespace -std::span ui_language_options() { +std::span ui_language_options(fs::path &static_assets_path) { static std::vector available_languages; available_languages.clear(); - const QSet tags = available_translation_tags(); + const QSet tags = available_translation_tags(static_assets_path); if (tags.isEmpty()) { available_languages.push_back(k_ui_languages.front()); return available_languages; @@ -124,7 +123,7 @@ QString language_name(std::string_view tag) { return QString::fromUtf8(tag.data(), static_cast(tag.size())); } -bool apply_ui_language(QApplication &app, std::string_view configured_tag) { +bool apply_ui_language(QApplication &app, std::string_view configured_tag, fs::path &static_assets_path) { if (s_translator) app.removeTranslator(s_translator.get()); @@ -134,7 +133,7 @@ bool apply_ui_language(QApplication &app, std::string_view configured_tag) { ? QLocale::system() : QLocale(QString::fromUtf8(configured_tag.data(), static_cast(configured_tag.size()))); - for (const QString &path : translation_search_paths()) { + for (const QString &path : translation_search_paths(static_assets_path)) { if (s_translator->load(locale, QStringLiteral("vita3k"), QStringLiteral("_"), path)) { app.installTranslator(s_translator.get()); return true; diff --git a/vita3k/gui-qt/src/main_window.cpp b/vita3k/gui-qt/src/main_window.cpp index f8d92d3b4..53966272f 100644 --- a/vita3k/gui-qt/src/main_window.cpp +++ b/vita3k/gui-qt/src/main_window.cpp @@ -840,7 +840,7 @@ bool MainWindow::handle_pending_app_launch_request() { } void MainWindow::apply_ui_language(const QString &locale_tag) { - gui::i18n::apply_ui_language(*qApp, locale_tag.toStdString()); + gui::i18n::apply_ui_language(*qApp, locale_tag.toStdString(), emuenv.static_assets_path); } void MainWindow::init_current_user() { diff --git a/vita3k/gui-qt/src/settings_dialog.cpp b/vita3k/gui-qt/src/settings_dialog.cpp index 07dd434e9..c4e193960 100644 --- a/vita3k/gui-qt/src/settings_dialog.cpp +++ b/vita3k/gui-qt/src/settings_dialog.cpp @@ -530,7 +530,8 @@ void SettingsDialog::load_config() { : false); m_ui->ui_language_box->clear(); m_ui->ui_language_box->addItem(tr("System Default"), QStringLiteral("")); - for (const auto &language : gui::i18n::ui_language_options()) { + + for (const auto &language : gui::i18n::ui_language_options(emuenv.static_assets_path)) { const QString tag = QString::fromUtf8(language.tag.data(), static_cast(language.tag.size())); const QString native_name = QString::fromUtf8(language.native_name.data(), static_cast(language.native_name.size())); m_ui->ui_language_box->addItem(native_name, tag); diff --git a/vita3k/main.cpp b/vita3k/main.cpp index 020e539d7..961143f02 100644 --- a/vita3k/main.cpp +++ b/vita3k/main.cpp @@ -156,7 +156,7 @@ int main(int argc, char *argv[]) { return InitConfigFailed; } - gui::i18n::apply_ui_language(app, cfg.user_lang); + gui::i18n::apply_ui_language(app, cfg.user_lang, emuenv.static_assets_path); #ifdef _WIN32 {