Skip to content

Commit 6c742d1

Browse files
authored
Merge pull request #3690 from rommapp/posthog-code/detect-browser-language
feat: default UI language to browser language when available
2 parents 95b9ca8 + b438dd3 commit 6c742d1

2 files changed

Lines changed: 21 additions & 2 deletions

File tree

frontend/src/RomM.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,11 @@ const languageStore = storeLanguage();
2929
const consoleStore = storeConsole();
3030
const vuetifyTheme = useTheme();
3131
const { consoleMode } = storeToRefs(consoleStore);
32-
const { defaultLanguage, languages } = storeToRefs(languageStore);
32+
const { languages } = storeToRefs(languageStore);
3333
const storedLocale = useLocalStorage("settings.locale", "");
3434
const selectedLanguage = ref(
3535
languages.value.find((lang) => lang.value === storedLocale.value) ||
36-
defaultLanguage.value,
36+
languageStore.detectBrowserLanguage(),
3737
);
3838
locale.value = selectedLanguage.value.value;
3939
languageStore.setLanguage(selectedLanguage.value);

frontend/src/stores/language.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,25 @@ export default defineStore("language", {
3232
setLanguage(lang: { value: string; name: string }) {
3333
this.selectedLanguage = lang;
3434
},
35+
// Match the browser's preferred languages against the available locales,
36+
// falling back to the default (en_US) when none line up. Tries an exact
37+
// match first (e.g. "en-US" -> "en_US"), then a language-only match
38+
// (e.g. "fr" -> "fr_FR").
39+
detectBrowserLanguage() {
40+
for (const pref of navigator.languages) {
41+
const normalized = pref.replace("-", "_").toLowerCase();
42+
const exact = this.languages.find(
43+
(lang) => lang.value.toLowerCase() === normalized,
44+
);
45+
if (exact) return exact;
46+
const base = normalized.split("_")[0];
47+
const partial = this.languages.find(
48+
(lang) => lang.value.toLowerCase().split("_")[0] === base,
49+
);
50+
if (partial) return partial;
51+
}
52+
return this.defaultLanguage;
53+
},
3554
reset() {
3655
Object.assign(this, { ...defaultLanguageState });
3756
},

0 commit comments

Comments
 (0)