Files
AlgerMusicPlayer/src/renderer/components/LanguageSwitcher.vue
T

57 lines
1.4 KiB
Vue
Raw Normal View History

2025-01-23 11:02:55 +08:00
<script setup lang="ts">
2025-02-19 01:01:43 +08:00
import { computed, onMounted, onUnmounted } from 'vue';
2025-01-23 11:02:55 +08:00
import { useI18n } from 'vue-i18n';
2025-02-19 01:01:43 +08:00
import { useStore } from 'vuex';
2025-01-23 11:02:55 +08:00
2025-02-19 01:01:43 +08:00
import { isElectron } from '@/utils';
const store = useStore();
2025-01-23 11:02:55 +08:00
const { locale } = useI18n();
const languages = [
{ label: '简体中文', value: 'zh-CN' },
{ label: 'English', value: 'en-US' }
];
2025-02-19 01:01:43 +08:00
// 使用计算属性来获取当前语言
const currentLanguage = computed({
get: () => store.state.setData.language || 'zh-CN',
set: (value: string) => {
handleLanguageChange(value);
2025-01-23 11:02:55 +08:00
}
});
2025-02-19 01:01:43 +08:00
// 当语言改变时的处理函数
2025-01-23 11:02:55 +08:00
const handleLanguageChange = (value: string) => {
2025-02-19 01:01:43 +08:00
// 更新 i18n locale
2025-01-23 11:02:55 +08:00
locale.value = value;
2025-02-19 01:01:43 +08:00
// 通过 mutation 更新 store
store.commit('setLanguage', value);
2025-01-23 11:02:55 +08:00
// 通知主进程语言已更改
2025-02-19 01:01:43 +08:00
if (isElectron) {
window.electron.ipcRenderer.send('change-language', value);
}
2025-01-23 11:02:55 +08:00
};
2025-02-19 01:01:43 +08:00
// 监听来自主进程的语言切换事件
const handleSetLanguage = (_: any, value: string) => {
handleLanguageChange(value);
};
onMounted(() => {
if (isElectron) {
window.electron.ipcRenderer.on('set-language', handleSetLanguage);
}
});
onUnmounted(() => {
if (isElectron) {
window.electron.ipcRenderer.removeListener('set-language', handleSetLanguage);
}
});
2025-01-23 11:02:55 +08:00
</script>
<template>
2025-02-19 01:01:43 +08:00
<n-select v-model:value="currentLanguage" :options="languages" size="small" />
2025-01-23 11:02:55 +08:00
</template>