diff --git a/src/duckstation-qt/controllerbindingwidget.ui b/src/duckstation-qt/controllerbindingwidget.ui
index a00095519..4baef222e 100644
--- a/src/duckstation-qt/controllerbindingwidget.ui
+++ b/src/duckstation-qt/controllerbindingwidget.ui
@@ -77,7 +77,7 @@
         <item>
          <widget class="QPushButton" name="automaticBinding">
           <property name="text">
-           <string>Automatic binding</string>
+           <string>Automatic Mapping</string>
           </property>
           <property name="icon">
            <iconset theme="gamepad-line">
@@ -88,7 +88,7 @@
         <item>
          <widget class="QPushButton" name="clearBindings">
           <property name="text">
-           <string>Clear Bindings</string>
+           <string>Clear Mapping</string>
           </property>
           <property name="icon">
            <iconset theme="file-reduce-line">
diff --git a/src/duckstation-qt/controllerbindingwidgets.cpp b/src/duckstation-qt/controllerbindingwidgets.cpp
index 2fa55744b..4fa1d46a0 100644
--- a/src/duckstation-qt/controllerbindingwidgets.cpp
+++ b/src/duckstation-qt/controllerbindingwidgets.cpp
@@ -162,8 +162,8 @@ void ControllerBindingWidget::onAutomaticBindingClicked()
 void ControllerBindingWidget::onClearBindingsClicked()
 {
   if (QMessageBox::question(
-        QtUtils::GetRootWidget(this), tr("Clear Bindings"),
-        tr("Are you sure you want to clear all bindings for this controller? This action cannot be undone.")) !=
+        QtUtils::GetRootWidget(this), tr("Clear Mapping"),
+        tr("Are you sure you want to clear all mappings for this controller? This action cannot be undone.")) !=
       QMessageBox::Yes)
   {
     return;
@@ -200,7 +200,7 @@ void ControllerBindingWidget::doDeviceAutomaticBinding(const QString& device)
     InputManager::GetGenericBindingMapping(device.toStdString());
   if (mapping.empty())
   {
-    QMessageBox::critical(QtUtils::GetRootWidget(this), tr("Automatic Binding"),
+    QMessageBox::critical(QtUtils::GetRootWidget(this), tr("Automatic Mapping"),
                           tr("No generic bindings were generated for device '%1'").arg(device));
     return;
   }
diff --git a/src/duckstation-qt/qthost.cpp b/src/duckstation-qt/qthost.cpp
index 12dd303d5..58b552c79 100644
--- a/src/duckstation-qt/qthost.cpp
+++ b/src/duckstation-qt/qthost.cpp
@@ -208,6 +208,7 @@ bool QtHost::InitializeConfig(std::string settings_filename)
     Log::SetConsoleOutputParams(true, nullptr, LOGLEVEL_NONE);
   }
 
+  InstallTranslator();
   return true;
 }
 
@@ -2160,8 +2161,9 @@ bool QtHost::ParseCommandLineParametersAndInitializeConfig(QApplication& app,
 
   if (autoboot && !autoboot->filename.empty() && !FileSystem::FileExists(autoboot->filename.c_str()))
   {
-    QMessageBox::critical(nullptr, QStringLiteral("Error"),
-                          QStringLiteral("File '%1' does not exist.").arg(QString::fromStdString(autoboot->filename)));
+    QMessageBox::critical(
+      nullptr, qApp->translate("QtHost", "Error"),
+      qApp->translate("QtHost", "File '%1' does not exist.").arg(QString::fromStdString(autoboot->filename)));
     return false;
   }
 
@@ -2186,8 +2188,8 @@ bool QtHost::ParseCommandLineParametersAndInitializeConfig(QApplication& app,
 
     if (autoboot->save_state.empty() || !FileSystem::FileExists(autoboot->save_state.c_str()))
     {
-      QMessageBox::critical(nullptr, QStringLiteral("Error"),
-                            QStringLiteral("The specified save state does not exist."));
+      QMessageBox::critical(nullptr, qApp->translate("QtHost", "Error"),
+                            qApp->translate("QtHost", "The specified save state does not exist."));
       return false;
     }
   }
@@ -2201,10 +2203,10 @@ bool QtHost::ParseCommandLineParametersAndInitializeConfig(QApplication& app,
   // scanning the game list).
   if (s_batch_mode && !autoboot && !s_start_fullscreen_ui)
   {
-    QMessageBox::critical(nullptr, QStringLiteral("Error"),
-                          s_nogui_mode ?
-                            QStringLiteral("Cannot use no-gui mode, because no boot filename was specified.") :
-                            QStringLiteral("Cannot use batch mode, because no boot filename was specified."));
+    QMessageBox::critical(
+      nullptr, qApp->translate("QtHost", "Error"),
+      s_nogui_mode ? qApp->translate("QtHost", "Cannot use no-gui mode, because no boot filename was specified.") :
+                     qApp->translate("QtHost", "Cannot use batch mode, because no boot filename was specified."));
     return false;
   }
 
diff --git a/src/frontend-common/fullscreen_ui.cpp b/src/frontend-common/fullscreen_ui.cpp
index 02531324a..bbbcf1c94 100644
--- a/src/frontend-common/fullscreen_ui.cpp
+++ b/src/frontend-common/fullscreen_ui.cpp
@@ -1656,7 +1656,7 @@ void FullscreenUI::StartAutomaticBinding(u32 port)
   std::vector<std::pair<std::string, std::string>> devices(InputManager::EnumerateDevices());
   if (devices.empty())
   {
-    ShowToast({}, "Automatic binding failed, no devices are available.");
+    ShowToast({}, "Automatic mapping failed, no devices are available.");
     return;
   }