diff --git a/src/yuzu/configuration/configure_audio.cpp b/src/yuzu/configuration/configure_audio.cpp
index 110842eb2ac75e9b22e02a50c62ceb3ed07475bd..f370c690fe8e812b6faa3a883d857e01f4fb7386 100644
--- a/src/yuzu/configuration/configure_audio.cpp
+++ b/src/yuzu/configuration/configure_audio.cpp
@@ -4,6 +4,8 @@
 
 #include <memory>
 
+#include <QSignalBlocker>
+
 #include "audio_core/sink.h"
 #include "audio_core/sink_details.h"
 #include "core/core.h"
@@ -15,19 +17,15 @@ ConfigureAudio::ConfigureAudio(QWidget* parent)
     : QWidget(parent), ui(std::make_unique<Ui::ConfigureAudio>()) {
     ui->setupUi(this);
 
-    ui->output_sink_combo_box->clear();
-    ui->output_sink_combo_box->addItem(QString::fromUtf8(AudioCore::auto_device_name));
-    for (const char* id : AudioCore::GetSinkIDs()) {
-        ui->output_sink_combo_box->addItem(QString::fromUtf8(id));
-    }
+    InitializeAudioOutputSinkComboBox();
 
     connect(ui->volume_slider, &QSlider::valueChanged, this,
             &ConfigureAudio::SetVolumeIndicatorText);
-
-    SetConfiguration();
     connect(ui->output_sink_combo_box, qOverload<int>(&QComboBox::currentIndexChanged), this,
             &ConfigureAudio::UpdateAudioDevices);
 
+    SetConfiguration();
+
     const bool is_powered_on = Core::System::GetInstance().IsPoweredOn();
     ui->output_sink_combo_box->setEnabled(!is_powered_on);
     ui->audio_device_combo_box->setEnabled(!is_powered_on);
@@ -49,8 +47,9 @@ void ConfigureAudio::SetConfiguration() {
 }
 
 void ConfigureAudio::SetOutputSinkFromSinkID() {
-    int new_sink_index = 0;
+    [[maybe_unused]] const QSignalBlocker blocker(ui->output_sink_combo_box);
 
+    int new_sink_index = 0;
     const QString sink_id = QString::fromStdString(Settings::values.sink_id);
     for (int index = 0; index < ui->output_sink_combo_box->count(); index++) {
         if (ui->output_sink_combo_box->itemText(index) == sink_id) {
@@ -92,6 +91,14 @@ void ConfigureAudio::ApplyConfiguration() {
         static_cast<float>(ui->volume_slider->sliderPosition()) / ui->volume_slider->maximum();
 }
 
+void ConfigureAudio::changeEvent(QEvent* event) {
+    if (event->type() == QEvent::LanguageChange) {
+        RetranslateUI();
+    }
+
+    QWidget::changeEvent(event);
+}
+
 void ConfigureAudio::UpdateAudioDevices(int sink_index) {
     ui->audio_device_combo_box->clear();
     ui->audio_device_combo_box->addItem(QString::fromUtf8(AudioCore::auto_device_name));
@@ -102,6 +109,16 @@ void ConfigureAudio::UpdateAudioDevices(int sink_index) {
     }
 }
 
+void ConfigureAudio::InitializeAudioOutputSinkComboBox() {
+    ui->output_sink_combo_box->clear();
+    ui->output_sink_combo_box->addItem(QString::fromUtf8(AudioCore::auto_device_name));
+
+    for (const char* id : AudioCore::GetSinkIDs()) {
+        ui->output_sink_combo_box->addItem(QString::fromUtf8(id));
+    }
+}
+
 void ConfigureAudio::RetranslateUI() {
     ui->retranslateUi(this);
+    SetVolumeIndicatorText(ui->volume_slider->sliderPosition());
 }
diff --git a/src/yuzu/configuration/configure_audio.h b/src/yuzu/configuration/configure_audio.h
index 2bb92d9b50955d47e6ea18d33d0502e681f1da4a..ea83bd72d4045e2c2e3a7004c7dff88f41d44ee7 100644
--- a/src/yuzu/configuration/configure_audio.h
+++ b/src/yuzu/configuration/configure_audio.h
@@ -19,9 +19,14 @@ public:
     ~ConfigureAudio() override;
 
     void ApplyConfiguration();
-    void RetranslateUI();
 
 private:
+    void changeEvent(QEvent* event) override;
+
+    void InitializeAudioOutputSinkComboBox();
+
+    void RetranslateUI();
+
     void UpdateAudioDevices(int sink_index);
 
     void SetConfiguration();
diff --git a/src/yuzu/configuration/configure_debug.cpp b/src/yuzu/configuration/configure_debug.cpp
index afc2e3b383a39768394f0b87f92657ab52aedbad..efc2bedfd218a9ac0200dc9fdbb2d6aca73b71fb 100644
--- a/src/yuzu/configuration/configure_debug.cpp
+++ b/src/yuzu/configuration/configure_debug.cpp
@@ -51,3 +51,15 @@ void ConfigureDebug::ApplyConfiguration() {
     filter.ParseFilterString(Settings::values.log_filter);
     Log::SetGlobalFilter(filter);
 }
+
+void ConfigureDebug::changeEvent(QEvent* event) {
+    if (event->type() == QEvent::LanguageChange) {
+        RetranslateUI();
+    }
+
+    QWidget::changeEvent(event);
+}
+
+void ConfigureDebug::RetranslateUI() {
+    ui->retranslateUi(this);
+}
diff --git a/src/yuzu/configuration/configure_debug.h b/src/yuzu/configuration/configure_debug.h
index 06b89026c6fabd9d26c8862051b17c45796c1dc2..f4805a1d8e29c558fb39e7618eb7f34b2cc4287d 100644
--- a/src/yuzu/configuration/configure_debug.h
+++ b/src/yuzu/configuration/configure_debug.h
@@ -21,6 +21,9 @@ public:
     void ApplyConfiguration();
 
 private:
+    void changeEvent(QEvent* event) override;
+
+    void RetranslateUI();
     void SetConfiguration();
 
     std::unique_ptr<Ui::ConfigureDebug> ui;
diff --git a/src/yuzu/configuration/configure_dialog.cpp b/src/yuzu/configuration/configure_dialog.cpp
index a1b1e00bcbab8c8040531f7520925d8f690e81e5..e636964e34e2bdc8e22e03d4b3697352dabba85a 100644
--- a/src/yuzu/configuration/configure_dialog.cpp
+++ b/src/yuzu/configuration/configure_dialog.cpp
@@ -4,6 +4,7 @@
 
 #include <QHash>
 #include <QListWidgetItem>
+#include <QSignalBlocker>
 #include "core/settings.h"
 #include "ui_configure.h"
 #include "yuzu/configuration/config.h"
@@ -46,13 +47,38 @@ void ConfigureDialog::ApplyConfiguration() {
     Settings::LogSettings();
 }
 
+void ConfigureDialog::changeEvent(QEvent* event) {
+    if (event->type() == QEvent::LanguageChange) {
+        RetranslateUI();
+    }
+
+    QDialog::changeEvent(event);
+}
+
+void ConfigureDialog::RetranslateUI() {
+    const int old_row = ui->selectorList->currentRow();
+    const int old_index = ui->tabWidget->currentIndex();
+
+    ui->retranslateUi(this);
+
+    PopulateSelectionList();
+    ui->selectorList->setCurrentRow(old_row);
+
+    UpdateVisibleTabs();
+    ui->tabWidget->setCurrentIndex(old_index);
+}
+
 void ConfigureDialog::PopulateSelectionList() {
     const std::array<std::pair<QString, QStringList>, 4> items{
         {{tr("General"), {tr("General"), tr("Web"), tr("Debug"), tr("Game List")}},
          {tr("System"), {tr("System"), tr("Profiles"), tr("Audio")}},
          {tr("Graphics"), {tr("Graphics")}},
-         {tr("Controls"), {tr("Input"), tr("Hotkeys")}}}};
+         {tr("Controls"), {tr("Input"), tr("Hotkeys")}}},
+    };
 
+    [[maybe_unused]] const QSignalBlocker blocker(ui->selectorList);
+
+    ui->selectorList->clear();
     for (const auto& entry : items) {
         auto* const item = new QListWidgetItem(entry.first);
         item->setData(Qt::UserRole, entry.second);
@@ -63,24 +89,28 @@ void ConfigureDialog::PopulateSelectionList() {
 
 void ConfigureDialog::UpdateVisibleTabs() {
     const auto items = ui->selectorList->selectedItems();
-    if (items.isEmpty())
+    if (items.isEmpty()) {
         return;
+    }
 
-    const std::map<QString, QWidget*> widgets = {{tr("General"), ui->generalTab},
-                                                 {tr("System"), ui->systemTab},
-                                                 {tr("Profiles"), ui->profileManagerTab},
-                                                 {tr("Input"), ui->inputTab},
-                                                 {tr("Hotkeys"), ui->hotkeysTab},
-                                                 {tr("Graphics"), ui->graphicsTab},
-                                                 {tr("Audio"), ui->audioTab},
-                                                 {tr("Debug"), ui->debugTab},
-                                                 {tr("Web"), ui->webTab},
-                                                 {tr("Game List"), ui->gameListTab}};
+    const std::map<QString, QWidget*> widgets = {
+        {tr("General"), ui->generalTab},
+        {tr("System"), ui->systemTab},
+        {tr("Profiles"), ui->profileManagerTab},
+        {tr("Input"), ui->inputTab},
+        {tr("Hotkeys"), ui->hotkeysTab},
+        {tr("Graphics"), ui->graphicsTab},
+        {tr("Audio"), ui->audioTab},
+        {tr("Debug"), ui->debugTab},
+        {tr("Web"), ui->webTab},
+        {tr("Game List"), ui->gameListTab},
+    };
+
+    [[maybe_unused]] const QSignalBlocker blocker(ui->tabWidget);
 
     ui->tabWidget->clear();
-
     const QStringList tabs = items[0]->data(Qt::UserRole).toStringList();
-
-    for (const auto& tab : tabs)
+    for (const auto& tab : tabs) {
         ui->tabWidget->addTab(widgets.find(tab)->second, tab);
+    }
 }
diff --git a/src/yuzu/configuration/configure_dialog.h b/src/yuzu/configuration/configure_dialog.h
index 7e7d90f597702ac3a607b1b549a117b2be662835..2d3bfc2da7cfe7145b76415ef2f0c059ad4f43db 100644
--- a/src/yuzu/configuration/configure_dialog.h
+++ b/src/yuzu/configuration/configure_dialog.h
@@ -23,6 +23,10 @@ public:
     void ApplyConfiguration();
 
 private:
+    void changeEvent(QEvent* event) override;
+
+    void RetranslateUI();
+
     void SetConfiguration();
     void UpdateVisibleTabs();
     void PopulateSelectionList();
diff --git a/src/yuzu/configuration/configure_gamelist.cpp b/src/yuzu/configuration/configure_gamelist.cpp
index 4b5b0ee48eb4b99232e6d0e71b36b587b7d6ad7c..d1724ba89e27e6df8c7eb0fbce6755f0837b6a32 100644
--- a/src/yuzu/configuration/configure_gamelist.cpp
+++ b/src/yuzu/configuration/configure_gamelist.cpp
@@ -77,7 +77,6 @@ void ConfigureGameList::SetConfiguration() {
 void ConfigureGameList::changeEvent(QEvent* event) {
     if (event->type() == QEvent::LanguageChange) {
         RetranslateUI();
-        return;
     }
 
     QWidget::changeEvent(event);
diff --git a/src/yuzu/configuration/configure_general.cpp b/src/yuzu/configuration/configure_general.cpp
index 8bdc1787ad8fed2cffe5b00abcfd31b18931c2db..06d368dfcbacce0b5a64599af7a918efb2befda9 100644
--- a/src/yuzu/configuration/configure_general.cpp
+++ b/src/yuzu/configuration/configure_general.cpp
@@ -45,3 +45,15 @@ void ConfigureGeneral::ApplyConfiguration() {
 
     Settings::values.use_cpu_jit = ui->use_cpu_jit->isChecked();
 }
+
+void ConfigureGeneral::changeEvent(QEvent* event) {
+    if (event->type() == QEvent::LanguageChange) {
+        RetranslateUI();
+    }
+
+    QWidget::changeEvent(event);
+}
+
+void ConfigureGeneral::RetranslateUI() {
+    ui->retranslateUi(this);
+}
diff --git a/src/yuzu/configuration/configure_general.h b/src/yuzu/configuration/configure_general.h
index fd5fd2a914c87d8496734756d03ef4da4f969019..ef05ce0653103a0b5e986c27a0b53abd88e603ae 100644
--- a/src/yuzu/configuration/configure_general.h
+++ b/src/yuzu/configuration/configure_general.h
@@ -23,6 +23,9 @@ public:
     void ApplyConfiguration();
 
 private:
+    void changeEvent(QEvent* event) override;
+    void RetranslateUI();
+
     void SetConfiguration();
 
     std::unique_ptr<Ui::ConfigureGeneral> ui;
diff --git a/src/yuzu/configuration/configure_graphics.cpp b/src/yuzu/configuration/configure_graphics.cpp
index 902ef5cd43217607ef59604a8291e12bffbb5acc..2b17b250cf092b914c93ae9115f76a40e71ef1e5 100644
--- a/src/yuzu/configuration/configure_graphics.cpp
+++ b/src/yuzu/configuration/configure_graphics.cpp
@@ -101,6 +101,18 @@ void ConfigureGraphics::ApplyConfiguration() {
     Settings::values.bg_blue = static_cast<float>(bg_color.blueF());
 }
 
+void ConfigureGraphics::changeEvent(QEvent* event) {
+    if (event->type() == QEvent::LanguageChange) {
+        RetranslateUI();
+    }
+
+    QWidget::changeEvent(event);
+}
+
+void ConfigureGraphics::RetranslateUI() {
+    ui->retranslateUi(this);
+}
+
 void ConfigureGraphics::UpdateBackgroundColorButton(QColor color) {
     bg_color = color;
 
diff --git a/src/yuzu/configuration/configure_graphics.h b/src/yuzu/configuration/configure_graphics.h
index 6b3c39705db10e92b2cf7b13a810ce1b19f4a505..fae28d98e529857a63b629d14d56024b8492c45c 100644
--- a/src/yuzu/configuration/configure_graphics.h
+++ b/src/yuzu/configuration/configure_graphics.h
@@ -21,6 +21,9 @@ public:
     void ApplyConfiguration();
 
 private:
+    void changeEvent(QEvent* event) override;
+    void RetranslateUI();
+
     void SetConfiguration();
 
     void UpdateBackgroundColorButton(QColor color);
diff --git a/src/yuzu/configuration/configure_hotkeys.cpp b/src/yuzu/configuration/configure_hotkeys.cpp
index 04119e9d75a0466d291f7825106c67a1045f3028..3ea0b8d6755da721d2bae471727ab6c506d9d01b 100644
--- a/src/yuzu/configuration/configure_hotkeys.cpp
+++ b/src/yuzu/configuration/configure_hotkeys.cpp
@@ -17,7 +17,6 @@ ConfigureHotkeys::ConfigureHotkeys(QWidget* parent)
 
     model = new QStandardItemModel(this);
     model->setColumnCount(3);
-    model->setHorizontalHeaderLabels({tr("Action"), tr("Hotkey"), tr("Context")});
 
     connect(ui->hotkey_list, &QTreeView::doubleClicked, this, &ConfigureHotkeys::Configure);
     ui->hotkey_list->setModel(model);
@@ -27,6 +26,8 @@ ConfigureHotkeys::ConfigureHotkeys(QWidget* parent)
 
     ui->hotkey_list->setColumnWidth(0, 200);
     ui->hotkey_list->resizeColumnToContents(1);
+
+    RetranslateUI();
 }
 
 ConfigureHotkeys::~ConfigureHotkeys() = default;
@@ -49,6 +50,20 @@ void ConfigureHotkeys::Populate(const HotkeyRegistry& registry) {
     ui->hotkey_list->expandAll();
 }
 
+void ConfigureHotkeys::changeEvent(QEvent* event) {
+    if (event->type() == QEvent::LanguageChange) {
+        RetranslateUI();
+    }
+
+    QWidget::changeEvent(event);
+}
+
+void ConfigureHotkeys::RetranslateUI() {
+    ui->retranslateUi(this);
+
+    model->setHorizontalHeaderLabels({tr("Action"), tr("Hotkey"), tr("Context")});
+}
+
 void ConfigureHotkeys::Configure(QModelIndex index) {
     if (!index.parent().isValid()) {
         return;
@@ -112,7 +127,3 @@ void ConfigureHotkeys::ApplyConfiguration(HotkeyRegistry& registry) {
 
     registry.SaveHotkeys();
 }
-
-void ConfigureHotkeys::RetranslateUI() {
-    ui->retranslateUi(this);
-}
diff --git a/src/yuzu/configuration/configure_hotkeys.h b/src/yuzu/configuration/configure_hotkeys.h
index a1f4c7134b5ec7528d1dc9cdaa2223d6d8f5d8b7..8f8c6173b5ca53d452d6636dde75d050ba5c1563 100644
--- a/src/yuzu/configuration/configure_hotkeys.h
+++ b/src/yuzu/configuration/configure_hotkeys.h
@@ -22,7 +22,6 @@ public:
     ~ConfigureHotkeys() override;
 
     void ApplyConfiguration(HotkeyRegistry& registry);
-    void RetranslateUI();
 
     /**
      * Populates the hotkey list widget using data from the provided registry.
@@ -32,6 +31,9 @@ public:
     void Populate(const HotkeyRegistry& registry);
 
 private:
+    void changeEvent(QEvent* event) override;
+    void RetranslateUI();
+
     void Configure(QModelIndex index);
     bool IsUsedKey(QKeySequence key_sequence) const;
 
diff --git a/src/yuzu/configuration/configure_input.cpp b/src/yuzu/configuration/configure_input.cpp
index fb1210bcbcc6bb267539030dc841674834965bd6..4dd775aab135ae7f70692c04189cf32c664e0570 100644
--- a/src/yuzu/configuration/configure_input.cpp
+++ b/src/yuzu/configuration/configure_input.cpp
@@ -5,6 +5,7 @@
 #include <algorithm>
 #include <memory>
 
+#include <QSignalBlocker>
 #include <QTimer>
 
 #include "configuration/configure_touchscreen_advanced.h"
@@ -74,11 +75,7 @@ ConfigureInput::ConfigureInput(QWidget* parent)
         ui->player5_configure, ui->player6_configure, ui->player7_configure, ui->player8_configure,
     };
 
-    for (auto* controller_box : players_controller) {
-        controller_box->addItems({tr("None"), tr("Pro Controller"), tr("Dual Joycons"),
-                                  tr("Single Right Joycon"), tr("Single Left Joycon")});
-    }
-
+    RetranslateUI();
     LoadConfiguration();
     UpdateUIEnabled();
 
@@ -144,6 +141,31 @@ void ConfigureInput::ApplyConfiguration() {
     Settings::values.touchscreen.enabled = ui->touchscreen_enabled->isChecked();
 }
 
+void ConfigureInput::changeEvent(QEvent* event) {
+    if (event->type() == QEvent::LanguageChange) {
+        RetranslateUI();
+    }
+
+    QDialog::changeEvent(event);
+}
+
+void ConfigureInput::RetranslateUI() {
+    ui->retranslateUi(this);
+    RetranslateControllerComboBoxes();
+}
+
+void ConfigureInput::RetranslateControllerComboBoxes() {
+    for (auto* controller_box : players_controller) {
+        [[maybe_unused]] const QSignalBlocker blocker(controller_box);
+
+        controller_box->clear();
+        controller_box->addItems({tr("None"), tr("Pro Controller"), tr("Dual Joycons"),
+                                  tr("Single Right Joycon"), tr("Single Left Joycon")});
+    }
+
+    LoadPlayerControllerIndices();
+}
+
 void ConfigureInput::UpdateUIEnabled() {
     bool hit_disabled = false;
     for (auto* player : players_controller) {
@@ -175,11 +197,7 @@ void ConfigureInput::LoadConfiguration() {
             Service::HID::Controller_NPad::NPadIdToIndex(Service::HID::NPAD_HANDHELD),
         [](const auto& player) { return player.connected; });
 
-    for (std::size_t i = 0; i < players_controller.size(); ++i) {
-        const auto connected = Settings::values.players[i].connected;
-        players_controller[i]->setCurrentIndex(
-            connected ? static_cast<u8>(Settings::values.players[i].type) + 1 : 0);
-    }
+    LoadPlayerControllerIndices();
 
     ui->use_docked_mode->setChecked(Settings::values.use_docked_mode);
     ui->handheld_connected->setChecked(
@@ -194,6 +212,14 @@ void ConfigureInput::LoadConfiguration() {
     UpdateUIEnabled();
 }
 
+void ConfigureInput::LoadPlayerControllerIndices() {
+    for (std::size_t i = 0; i < players_controller.size(); ++i) {
+        const auto connected = Settings::values.players[i].connected;
+        players_controller[i]->setCurrentIndex(
+            connected ? static_cast<u8>(Settings::values.players[i].type) + 1 : 0);
+    }
+}
+
 void ConfigureInput::RestoreDefaults() {
     players_controller[0]->setCurrentIndex(2);
 
diff --git a/src/yuzu/configuration/configure_input.h b/src/yuzu/configuration/configure_input.h
index 6a2125215ba7fc06f77c61262e6ac43d1aae172a..2f70cb3ca499d61b1059d5514f54347297f959f2 100644
--- a/src/yuzu/configuration/configure_input.h
+++ b/src/yuzu/configuration/configure_input.h
@@ -33,10 +33,16 @@ public:
     void ApplyConfiguration();
 
 private:
+    void changeEvent(QEvent* event) override;
+    void RetranslateUI();
+    void RetranslateControllerComboBoxes();
+
     void UpdateUIEnabled();
 
     /// Load configuration settings.
     void LoadConfiguration();
+    void LoadPlayerControllerIndices();
+
     /// Restore all buttons to their default values.
     void RestoreDefaults();
 
diff --git a/src/yuzu/configuration/configure_input_player.cpp b/src/yuzu/configuration/configure_input_player.cpp
index 32d2a6815d23d5691e2caca35104d3342bb19e81..916baccc1c3d206785180ff95a2276dc4d1b32ee 100644
--- a/src/yuzu/configuration/configure_input_player.cpp
+++ b/src/yuzu/configuration/configure_input_player.cpp
@@ -373,6 +373,19 @@ void ConfigureInputPlayer::ApplyConfiguration() {
     Settings::values.players[player_index].button_color_right = colors[3];
 }
 
+void ConfigureInputPlayer::changeEvent(QEvent* event) {
+    if (event->type() == QEvent::LanguageChange) {
+        RetranslateUI();
+    }
+
+    QDialog::changeEvent(event);
+}
+
+void ConfigureInputPlayer::RetranslateUI() {
+    ui->retranslateUi(this);
+    UpdateButtonLabels();
+}
+
 void ConfigureInputPlayer::OnControllerButtonClick(int i) {
     const QColor new_bg_color = QColorDialog::getColor(controller_colors[i]);
     if (!new_bg_color.isValid())
diff --git a/src/yuzu/configuration/configure_input_player.h b/src/yuzu/configuration/configure_input_player.h
index 27924fcce287e66f097665a4f20cf5faa208bd11..c6602765140a531eed165673af67c74fe2a9ca8b 100644
--- a/src/yuzu/configuration/configure_input_player.h
+++ b/src/yuzu/configuration/configure_input_player.h
@@ -41,6 +41,9 @@ public:
     void ApplyConfiguration();
 
 private:
+    void changeEvent(QEvent* event) override;
+    void RetranslateUI();
+
     void OnControllerButtonClick(int i);
 
     /// Load configuration settings.
diff --git a/src/yuzu/configuration/configure_input_simple.cpp b/src/yuzu/configuration/configure_input_simple.cpp
index 6140a557317e23f24bcf887fadb860acde0abc20..864803ea3c074066a2ac0ddb8278c07daf00dabf 100644
--- a/src/yuzu/configuration/configure_input_simple.cpp
+++ b/src/yuzu/configuration/configure_input_simple.cpp
@@ -119,6 +119,18 @@ void ConfigureInputSimple::ApplyConfiguration() {
     UISettings::values.profile_index = index;
 }
 
+void ConfigureInputSimple::changeEvent(QEvent* event) {
+    if (event->type() == QEvent::LanguageChange) {
+        RetranslateUI();
+    }
+
+    QWidget::changeEvent(event);
+}
+
+void ConfigureInputSimple::RetranslateUI() {
+    ui->retranslateUi(this);
+}
+
 void ConfigureInputSimple::LoadConfiguration() {
     const auto index = UISettings::values.profile_index;
     if (index >= static_cast<int>(INPUT_PROFILES.size()) || index < 0) {
diff --git a/src/yuzu/configuration/configure_input_simple.h b/src/yuzu/configuration/configure_input_simple.h
index 573c2db2b5374dd46c96aa1d188bd6853bef3561..bb5050224384d466d2e5ca2dd79d88ab35a77a40 100644
--- a/src/yuzu/configuration/configure_input_simple.h
+++ b/src/yuzu/configuration/configure_input_simple.h
@@ -30,6 +30,9 @@ public:
     void ApplyConfiguration();
 
 private:
+    void changeEvent(QEvent* event) override;
+    void RetranslateUI();
+
     /// Load configuration settings.
     void LoadConfiguration();
 
diff --git a/src/yuzu/configuration/configure_mouse_advanced.cpp b/src/yuzu/configuration/configure_mouse_advanced.cpp
index 26f53128f8ed270d75bfba518eaac2446c9904f5..b7305e653f09abd1db8eee34fcbfb7c17e11fc8b 100644
--- a/src/yuzu/configuration/configure_mouse_advanced.cpp
+++ b/src/yuzu/configuration/configure_mouse_advanced.cpp
@@ -140,6 +140,18 @@ void ConfigureMouseAdvanced::LoadConfiguration() {
     UpdateButtonLabels();
 }
 
+void ConfigureMouseAdvanced::changeEvent(QEvent* event) {
+    if (event->type() == QEvent::LanguageChange) {
+        RetranslateUI();
+    }
+
+    QDialog::changeEvent(event);
+}
+
+void ConfigureMouseAdvanced::RetranslateUI() {
+    ui->retranslateUi(this);
+}
+
 void ConfigureMouseAdvanced::RestoreDefaults() {
     for (int button_id = 0; button_id < Settings::NativeMouseButton::NumMouseButtons; button_id++) {
         buttons_param[button_id] = Common::ParamPackage{
diff --git a/src/yuzu/configuration/configure_mouse_advanced.h b/src/yuzu/configuration/configure_mouse_advanced.h
index 373f992c973dd2fc8f68351d3bc5462113d60489..342b824128094df2c71fc9d1b4d9ba4db5472cb7 100644
--- a/src/yuzu/configuration/configure_mouse_advanced.h
+++ b/src/yuzu/configuration/configure_mouse_advanced.h
@@ -28,6 +28,9 @@ public:
     void ApplyConfiguration();
 
 private:
+    void changeEvent(QEvent* event) override;
+    void RetranslateUI();
+
     /// Load configuration settings.
     void LoadConfiguration();
     /// Restore all buttons to their default values.
diff --git a/src/yuzu/configuration/configure_per_general.cpp b/src/yuzu/configuration/configure_per_general.cpp
index 275519c7ba94f2052352c175aad488cb06f04da1..90336e235bc2a532497e1d6b187cdb9d184a62bb 100644
--- a/src/yuzu/configuration/configure_per_general.cpp
+++ b/src/yuzu/configuration/configure_per_general.cpp
@@ -92,6 +92,18 @@ void ConfigurePerGameGeneral::ApplyConfiguration() {
     Settings::values.disabled_addons[title_id] = disabled_addons;
 }
 
+void ConfigurePerGameGeneral::changeEvent(QEvent* event) {
+    if (event->type() == QEvent::LanguageChange) {
+        RetranslateUI();
+    }
+
+    QDialog::changeEvent(event);
+}
+
+void ConfigurePerGameGeneral::RetranslateUI() {
+    ui->retranslateUi(this);
+}
+
 void ConfigurePerGameGeneral::LoadFromFile(FileSys::VirtualFile file) {
     this->file = std::move(file);
     LoadConfiguration();
diff --git a/src/yuzu/configuration/configure_per_general.h b/src/yuzu/configuration/configure_per_general.h
index b95e07079d4814ea0b5cf5aad1d0f4fc8a4af6cf..a3b2cdeffd084024076ff0665fd515ad96e1f377 100644
--- a/src/yuzu/configuration/configure_per_general.h
+++ b/src/yuzu/configuration/configure_per_general.h
@@ -35,6 +35,9 @@ public:
     void LoadFromFile(FileSys::VirtualFile file);
 
 private:
+    void changeEvent(QEvent* event) override;
+    void RetranslateUI();
+
     void LoadConfiguration();
 
     std::unique_ptr<Ui::ConfigurePerGameGeneral> ui;
diff --git a/src/yuzu/configuration/configure_profile_manager.cpp b/src/yuzu/configuration/configure_profile_manager.cpp
index 7c1597488ab232e8884a753e10ef478750089aea..c90f4cdd8108b3a98e34cfb059007d729604f915 100644
--- a/src/yuzu/configuration/configure_profile_manager.cpp
+++ b/src/yuzu/configuration/configure_profile_manager.cpp
@@ -80,11 +80,10 @@ ConfigureProfileManager ::ConfigureProfileManager(QWidget* parent)
       profile_manager(std::make_unique<Service::Account::ProfileManager>()) {
     ui->setupUi(this);
 
-    layout = new QVBoxLayout;
     tree_view = new QTreeView;
     item_model = new QStandardItemModel(tree_view);
+    item_model->insertColumns(0, 1);
     tree_view->setModel(item_model);
-
     tree_view->setAlternatingRowColors(true);
     tree_view->setSelectionMode(QHeaderView::SingleSelection);
     tree_view->setSelectionBehavior(QHeaderView::SelectRows);
@@ -96,13 +95,11 @@ ConfigureProfileManager ::ConfigureProfileManager(QWidget* parent)
     tree_view->setIconSize({64, 64});
     tree_view->setContextMenuPolicy(Qt::NoContextMenu);
 
-    item_model->insertColumns(0, 1);
-    item_model->setHeaderData(0, Qt::Horizontal, tr("Users"));
-
     // We must register all custom types with the Qt Automoc system so that we are able to use it
     // with signals/slots. In this case, QList falls under the umbrells of custom types.
     qRegisterMetaType<QList<QStandardItem*>>("QList<QStandardItem*>");
 
+    layout = new QVBoxLayout;
     layout->setContentsMargins(0, 0, 0, 0);
     layout->setSpacing(0);
     layout->addWidget(tree_view);
@@ -120,10 +117,24 @@ ConfigureProfileManager ::ConfigureProfileManager(QWidget* parent)
     ui->current_user_icon->setScene(scene);
 
     SetConfiguration();
+    RetranslateUI();
 }
 
 ConfigureProfileManager::~ConfigureProfileManager() = default;
 
+void ConfigureProfileManager::changeEvent(QEvent* event) {
+    if (event->type() == QEvent::LanguageChange) {
+        RetranslateUI();
+    }
+
+    QWidget::changeEvent(event);
+}
+
+void ConfigureProfileManager::RetranslateUI() {
+    ui->retranslateUi(this);
+    item_model->setHeaderData(0, Qt::Horizontal, tr("Users"));
+}
+
 void ConfigureProfileManager::SetConfiguration() {
     enabled = !Core::System::GetInstance().IsPoweredOn();
     item_model->removeRows(0, item_model->rowCount());
diff --git a/src/yuzu/configuration/configure_profile_manager.h b/src/yuzu/configuration/configure_profile_manager.h
index 4e9b4e8ea4db9d7737abefe9f954d9fa2a94e23e..0a9bca2a62b970369c6e1e65760c9550e3cfffc0 100644
--- a/src/yuzu/configuration/configure_profile_manager.h
+++ b/src/yuzu/configuration/configure_profile_manager.h
@@ -33,6 +33,9 @@ public:
     void ApplyConfiguration();
 
 private:
+    void changeEvent(QEvent* event) override;
+    void RetranslateUI();
+
     void SetConfiguration();
 
     void PopulateUserList();
diff --git a/src/yuzu/configuration/configure_system.cpp b/src/yuzu/configuration/configure_system.cpp
index 5f0ed2f61427a09ef45c3b29e2944e3201bc5a8d..e1b52f8d940152ee2459d96bd4405d3e2f55ce7f 100644
--- a/src/yuzu/configuration/configure_system.cpp
+++ b/src/yuzu/configuration/configure_system.cpp
@@ -40,6 +40,18 @@ ConfigureSystem::ConfigureSystem(QWidget* parent) : QWidget(parent), ui(new Ui::
 
 ConfigureSystem::~ConfigureSystem() = default;
 
+void ConfigureSystem::changeEvent(QEvent* event) {
+    if (event->type() == QEvent::LanguageChange) {
+        RetranslateUI();
+    }
+
+    QWidget::changeEvent(event);
+}
+
+void ConfigureSystem::RetranslateUI() {
+    ui->retranslateUi(this);
+}
+
 void ConfigureSystem::SetConfiguration() {
     enabled = !Core::System::GetInstance().IsPoweredOn();
 
diff --git a/src/yuzu/configuration/configure_system.h b/src/yuzu/configuration/configure_system.h
index 4c0329d57c483292de1417f31249b241f2031a31..1eab3781d86f8c09ae1ca9a9596001c1b9f118de 100644
--- a/src/yuzu/configuration/configure_system.h
+++ b/src/yuzu/configuration/configure_system.h
@@ -23,6 +23,9 @@ public:
     void ApplyConfiguration();
 
 private:
+    void changeEvent(QEvent* event) override;
+    void RetranslateUI();
+
     void SetConfiguration();
 
     void ReadSystemSettings();
diff --git a/src/yuzu/configuration/configure_touchscreen_advanced.cpp b/src/yuzu/configuration/configure_touchscreen_advanced.cpp
index bad224239f222cd3ba1ebf856108c8a1135cd3ec..8ced28c756a823daf614a8b5793a09318f9072a2 100644
--- a/src/yuzu/configuration/configure_touchscreen_advanced.cpp
+++ b/src/yuzu/configuration/configure_touchscreen_advanced.cpp
@@ -20,6 +20,18 @@ ConfigureTouchscreenAdvanced::ConfigureTouchscreenAdvanced(QWidget* parent)
 
 ConfigureTouchscreenAdvanced::~ConfigureTouchscreenAdvanced() = default;
 
+void ConfigureTouchscreenAdvanced::changeEvent(QEvent* event) {
+    if (event->type() == QEvent::LanguageChange) {
+        RetranslateUI();
+    }
+
+    QDialog::changeEvent(event);
+}
+
+void ConfigureTouchscreenAdvanced::RetranslateUI() {
+    ui->retranslateUi(this);
+}
+
 void ConfigureTouchscreenAdvanced::ApplyConfiguration() {
     Settings::values.touchscreen.finger = ui->finger_box->value();
     Settings::values.touchscreen.diameter_x = ui->diameter_x_box->value();
diff --git a/src/yuzu/configuration/configure_touchscreen_advanced.h b/src/yuzu/configuration/configure_touchscreen_advanced.h
index 94edd85b15416404ec11ff1b9d667b5a0b6123da..72061492c14429c3de9216650b385623aed8b71c 100644
--- a/src/yuzu/configuration/configure_touchscreen_advanced.h
+++ b/src/yuzu/configuration/configure_touchscreen_advanced.h
@@ -21,6 +21,9 @@ public:
     void ApplyConfiguration();
 
 private:
+    void changeEvent(QEvent* event) override;
+    void RetranslateUI();
+
     /// Load configuration settings.
     void LoadConfiguration();
     /// Restore all buttons to their default values.
diff --git a/src/yuzu/configuration/configure_web.cpp b/src/yuzu/configuration/configure_web.cpp
index 8cacb75f3147aa2c2c316053a9d8d170658d1de6..5a70ef168bad4ad6f1ea21eb9b445c45cdcdc4ee 100644
--- a/src/yuzu/configuration/configure_web.cpp
+++ b/src/yuzu/configuration/configure_web.cpp
@@ -22,35 +22,55 @@ ConfigureWeb::ConfigureWeb(QWidget* parent)
 #ifndef USE_DISCORD_PRESENCE
     ui->discord_group->setVisible(false);
 #endif
+
     SetConfiguration();
+    RetranslateUI();
 }
 
 ConfigureWeb::~ConfigureWeb() = default;
 
-void ConfigureWeb::SetConfiguration() {
-    ui->web_credentials_disclaimer->setWordWrap(true);
-    ui->telemetry_learn_more->setOpenExternalLinks(true);
+void ConfigureWeb::changeEvent(QEvent* event) {
+    if (event->type() == QEvent::LanguageChange) {
+        RetranslateUI();
+    }
+
+    QWidget::changeEvent(event);
+}
+
+void ConfigureWeb::RetranslateUI() {
+    ui->retranslateUi(this);
+
     ui->telemetry_learn_more->setText(
         tr("<a href='https://yuzu-emu.org/help/feature/telemetry/'><span style=\"text-decoration: "
            "underline; color:#039be5;\">Learn more</span></a>"));
 
-    ui->web_signup_link->setOpenExternalLinks(true);
     ui->web_signup_link->setText(
         tr("<a href='https://profile.yuzu-emu.org/'><span style=\"text-decoration: underline; "
            "color:#039be5;\">Sign up</span></a>"));
-    ui->web_token_info_link->setOpenExternalLinks(true);
+
     ui->web_token_info_link->setText(
         tr("<a href='https://yuzu-emu.org/wiki/yuzu-web-service/'><span style=\"text-decoration: "
            "underline; color:#039be5;\">What is my token?</span></a>"));
 
+    ui->label_telemetry_id->setText(
+        tr("Telemetry ID: 0x%1").arg(QString::number(Core::GetTelemetryId(), 16).toUpper()));
+}
+
+void ConfigureWeb::SetConfiguration() {
+    ui->web_credentials_disclaimer->setWordWrap(true);
+
+    ui->telemetry_learn_more->setOpenExternalLinks(true);
+    ui->web_signup_link->setOpenExternalLinks(true);
+    ui->web_token_info_link->setOpenExternalLinks(true);
+
     ui->toggle_telemetry->setChecked(Settings::values.enable_telemetry);
     ui->edit_username->setText(QString::fromStdString(Settings::values.yuzu_username));
     ui->edit_token->setText(QString::fromStdString(Settings::values.yuzu_token));
+
     // Connect after setting the values, to avoid calling OnLoginChanged now
     connect(ui->edit_token, &QLineEdit::textChanged, this, &ConfigureWeb::OnLoginChanged);
     connect(ui->edit_username, &QLineEdit::textChanged, this, &ConfigureWeb::OnLoginChanged);
-    ui->label_telemetry_id->setText(
-        tr("Telemetry ID: 0x%1").arg(QString::number(Core::GetTelemetryId(), 16).toUpper()));
+
     user_verified = true;
 
     ui->toggle_discordrpc->setChecked(UISettings::values.enable_discord_presence);
@@ -120,7 +140,3 @@ void ConfigureWeb::OnLoginVerified() {
                "correctly, and that your internet connection is working."));
     }
 }
-
-void ConfigureWeb::RetranslateUI() {
-    ui->retranslateUi(this);
-}
diff --git a/src/yuzu/configuration/configure_web.h b/src/yuzu/configuration/configure_web.h
index 49bee171bdfc16193535aa0898ed10c6a21e614a..9054711ea3d0fb8701b62364d1403623f6c7dda3 100644
--- a/src/yuzu/configuration/configure_web.h
+++ b/src/yuzu/configuration/configure_web.h
@@ -20,9 +20,11 @@ public:
     ~ConfigureWeb() override;
 
     void ApplyConfiguration();
-    void RetranslateUI();
 
 private:
+    void changeEvent(QEvent* event) override;
+    void RetranslateUI();
+
     void RefreshTelemetryID();
     void OnLoginChanged();
     void VerifyLogin();