diff --git a/pressure-vessel/pressure-vessel-locale-gen b/pressure-vessel/pressure-vessel-locale-gen
index 55c18f98efd05c3e88b5babedf5fe2a0591f7d47..70822228defbba9f37ce83acc593632cffe6cf86 100755
--- a/pressure-vessel/pressure-vessel-locale-gen
+++ b/pressure-vessel/pressure-vessel-locale-gen
@@ -46,11 +46,15 @@ fi
 # We currently only look for I18NDIR data in /usr/share/i18n, the
 # glibc default path.
 #
+# Instead of just /usr/share/i18n/SUPPORTED, we also try to parse
+# /etc/locale.gen because in some distributions, e.g. Arch Linux,
+# /usr/share/i18n/SUPPORTED might not be present.
+#
 # If we discover that some distros use a different default, then we
 # should enhance this script to iterate through a search path.
 #
 # Please keep this in sync with srt_system_info_get_locale_issues().
-SUPPORTED="/usr/share/i18n/SUPPORTED"
+SUPPORTED="/etc/locale.gen /usr/share/i18n/SUPPORTED"
 
 log () {
     printf '%s\n' "$me: $*" >&2
diff --git a/tests/locale.c b/tests/locale.c
index 27bdc2602aa16864a7f9acdbe54580312bee52d1..f1901356e9dd6be4fa72077962b41247ea107ab5 100644
--- a/tests/locale.c
+++ b/tests/locale.c
@@ -128,6 +128,22 @@ test_object (Fixture *f,
   g_object_unref (locale);
 }
 
+static gboolean
+is_host_os_like (SrtSystemInfo *info,
+                 const gchar *host)
+{
+  g_auto(GStrv) os_like = NULL;
+  gsize i;
+
+  os_like = srt_system_info_dup_os_id_like (info, TRUE);
+  for (i = 0; os_like != NULL && os_like[i] != NULL; i++)
+    {
+      if (g_strcmp0 (os_like[i], host) == 0)
+        return TRUE;
+    }
+  return FALSE;
+}
+
 static void
 test_complete (Fixture *f,
                gconstpointer context)
@@ -135,13 +151,20 @@ test_complete (Fixture *f,
   SrtLocale *locale = NULL;
   SrtSystemInfo *info = srt_system_info_new (NULL);
   SrtLocaleIssues issues;
+  SrtLocaleIssues additional_issues = SRT_LOCALE_ISSUES_NONE;
   GError *error = NULL;
 
+  /* With Arch Linux it is expected to not have the SUPPORTED locale file */
+  if (is_host_os_like (info, "arch"))
+    additional_issues = SRT_LOCALE_ISSUES_I18N_SUPPORTED_MISSING;
+
   srt_system_info_set_primary_multiarch_tuple (info, "mock");
   srt_system_info_set_helpers_path (info, f->builddir);
 
   issues = srt_system_info_get_locale_issues (info);
-  g_assert_cmpint (issues, ==, SRT_LOCALE_ISSUES_NONE);
+  g_assert_cmpint (issues, ==,
+                   (SRT_LOCALE_ISSUES_NONE
+                    | additional_issues));
 
   locale = srt_system_info_check_locale (info, "C", &error);
   g_assert_no_error (error);
@@ -222,15 +245,20 @@ test_legacy (Fixture *f,
   SrtLocale *locale = NULL;
   SrtSystemInfo *info = srt_system_info_new (NULL);
   SrtLocaleIssues issues;
+  SrtLocaleIssues additional_issues = SRT_LOCALE_ISSUES_NONE;
   GError *error = NULL;
 
+  if (is_host_os_like (info, "arch"))
+    additional_issues = SRT_LOCALE_ISSUES_I18N_SUPPORTED_MISSING;
+
   srt_system_info_set_primary_multiarch_tuple (info, "mock-legacy");
   srt_system_info_set_helpers_path (info, f->builddir);
 
   issues = srt_system_info_get_locale_issues (info);
   g_assert_cmpint (issues, ==,
                    (SRT_LOCALE_ISSUES_DEFAULT_NOT_UTF8
-                    | SRT_LOCALE_ISSUES_C_UTF8_MISSING));
+                    | SRT_LOCALE_ISSUES_C_UTF8_MISSING
+                    | additional_issues));
 
   locale = srt_system_info_check_locale (info, "C", &error);
   g_assert_no_error (error);
@@ -306,13 +334,19 @@ test_unamerican (Fixture *f,
   SrtLocale *locale = NULL;
   SrtSystemInfo *info = srt_system_info_new (NULL);
   SrtLocaleIssues issues;
+  SrtLocaleIssues additional_issues = SRT_LOCALE_ISSUES_NONE;
   GError *error = NULL;
 
+  if (is_host_os_like (info, "arch"))
+    additional_issues = SRT_LOCALE_ISSUES_I18N_SUPPORTED_MISSING;
+
   srt_system_info_set_primary_multiarch_tuple (info, "mock-unamerican");
   srt_system_info_set_helpers_path (info, f->builddir);
 
   issues = srt_system_info_get_locale_issues (info);
-  g_assert_cmpint (issues, ==, SRT_LOCALE_ISSUES_EN_US_UTF8_MISSING);
+  g_assert_cmpint (issues, ==,
+                   (SRT_LOCALE_ISSUES_EN_US_UTF8_MISSING
+                    | additional_issues));
 
   locale = srt_system_info_check_locale (info, "C", &error);
   g_assert_no_error (error);