diff --git a/src-electron/ipc/electron-hook.ts b/src-electron/ipc/electron-hook.ts index 28af58f81..294f67022 100644 --- a/src-electron/ipc/electron-hook.ts +++ b/src-electron/ipc/electron-hook.ts @@ -1,4 +1,4 @@ -import { BrowserWindow, ipcMain, shell, clipboard } from 'electron'; +import { BrowserWindow, ipcMain, shell, clipboard, app } from 'electron'; export function hookElectronIpc(browserWindow: BrowserWindow) { ipcMain.on('electron:shell:openExternal', (event, url) => { @@ -20,5 +20,9 @@ export function hookElectronIpc(browserWindow: BrowserWindow) { ipcMain.handle('electron:getEnvironmentVariables', (event) => { return JSON.stringify(process.env); - }) + }); + + ipcMain.handle('electron:getPreferredSystemLanguages', () => { + return app.getPreferredSystemLanguages(); + }); } diff --git a/src-electron/preload/electron-preload.ts b/src-electron/preload/electron-preload.ts index f87cbc366..5a3b2415f 100644 --- a/src-electron/preload/electron-preload.ts +++ b/src-electron/preload/electron-preload.ts @@ -34,3 +34,7 @@ export function copyToClipboard(value: string) { export async function getEnvironmentVariables() { return ipcRenderer.invoke('electron:getEnvironmentVariables'); } + +export async function getPreferredSystemLanguages(): Promise { + return ipcRenderer.invoke('electron:getPreferredSystemLanguages'); +} diff --git a/src/App.vue b/src/App.vue index da06c5f06..412298853 100644 --- a/src/App.vue +++ b/src/App.vue @@ -12,13 +12,17 @@
+
@@ -78,14 +82,21 @@ import GameImageProvider, { provideGameImageImplementation } from './providers/g import { GameImageProviderImplementation } from './r2mm/image/GameImageProviderImpl'; import { useI18n } from 'vue-i18n'; import { ActivityDropdown, SelectOverlay } from './components/all'; -import LocaleManager from './r2mm/manager/LocaleManager'; +import LocaleManager, { SYSTEM_LOCALE } from './r2mm/manager/LocaleManager'; const store = baseStore; const router = useRouter(); provideStoreImplementation(() => store); const quasar = useQuasar(); -const { t, locale, availableLocales, messages } = useI18n(); +const { t, locale } = useI18n(); + +const selectedLocale = ref(SYSTEM_LOCALE); + +async function selectLocale(localeValue: string) { + await LocaleManager.save(localeValue); + selectedLocale.value = localeValue; +} document.addEventListener('auxclick', e => { const target = e.target! as any; @@ -129,6 +140,8 @@ BindLoaderImpl.bind(); onMounted(async () => { const settings: ManagerSettings = await store.dispatch('resetActiveGame'); + selectedLocale.value = await settings.getLocale(); + await LocaleManager.apply(); hookBackgroundUpdateThunderstoreModList(router); @@ -255,4 +268,4 @@ main { flex: 1; } } - + \ No newline at end of file diff --git a/src/components/v2/language/SelectOverlay.vue b/src/components/v2/language/SelectOverlay.vue index 3c36c3355..e4b52adb6 100644 --- a/src/components/v2/language/SelectOverlay.vue +++ b/src/components/v2/language/SelectOverlay.vue @@ -1,9 +1,12 @@