diff --git a/client/src/i18n.ts b/client/src/i18n.ts
index 246a560e51fc289791559db0b880fc3bf81d3754..6f08f1c34cc7ac7d0f0e82b13134b48d35c2c47b 100644
--- a/client/src/i18n.ts
+++ b/client/src/i18n.ts
@@ -58,7 +58,13 @@ const languagesInfosPromises = availableLanguages.map(async (item: any) => ({
 export const languagesInfos: readonly LanguageInfo[] = await Promise.all(languagesInfosPromises)
 
 const lastLanguage = localStorage.getItem('language')
-const defaultLanguage = lastLanguage ? lastLanguage : 'en'
+// transifex uses underscores instead of dashes
+const systemLanguage = navigator.language.replace('-', '_')
+const defaultLanguage = lastLanguage
+  ? lastLanguage
+  : availableLanguages.includes(systemLanguage)
+    ? systemLanguage
+    : 'en'
 
 const initialResources = await getTranslation(defaultLanguage)