Commit ae77e323 authored by tyyin lan's avatar tyyin lan

chore: 多语言切换配置

parent e9dff59d
<script setup lang="ts"> <script setup lang="ts">
import { useSystemLanguageStore } from '@/store/modules/system-language' import { useSystemLanguageStore } from '@/store/modules/system-language'
import { ref } from 'vue' import { ref } from 'vue'
import { useI18n } from 'vue-i18n' // import { useI18n } from 'vue-i18n'
import { Up, Translate, Down } from '@icon-park/vue-next' import { Up, Translate, Down } from '@icon-park/vue-next'
import { useRouter } from 'vue-router'
interface Props { interface Props {
arrowDirection: 'top' | 'bottom' arrowDirection: 'top' | 'bottom'
...@@ -12,7 +13,8 @@ interface Props { ...@@ -12,7 +13,8 @@ interface Props {
const { arrowDirection = 'bottom', btnBgColor = '#f4f5f5' } = defineProps<Props>() const { arrowDirection = 'bottom', btnBgColor = '#f4f5f5' } = defineProps<Props>()
const systemLanguageStore = useSystemLanguageStore() const systemLanguageStore = useSystemLanguageStore()
const { locale } = useI18n() // const { locale } = useI18n()
const router = useRouter()
const isShowLanguagePopover = ref(false) const isShowLanguagePopover = ref(false)
...@@ -27,7 +29,8 @@ function handleLanguageOptionsUpdateShow(value: boolean) { ...@@ -27,7 +29,8 @@ function handleLanguageOptionsUpdateShow(value: boolean) {
function handleLanguageOptionSelect(key: I18n.LangType) { function handleLanguageOptionSelect(key: I18n.LangType) {
systemLanguageStore.updateCurrentLanguageInfo(key) systemLanguageStore.updateCurrentLanguageInfo(key)
locale.value = key router.go(0)
// locale.value = key
isShowLanguagePopover.value = false isShowLanguagePopover.value = false
} }
......
export function languageKeyTransform(key: string) {
let language = 'zh-CN'
switch (key) {
case 'zh-HK':
language = 'zh-tw'
break
case 'zh-CN':
language = 'zh-cn'
break
case 'en':
language = 'en'
break
}
return language
}
...@@ -4,6 +4,8 @@ import { useUserStore } from '@/store/modules/user' ...@@ -4,6 +4,8 @@ import { useUserStore } from '@/store/modules/user'
import { useRouter } from 'vue-router' import { useRouter } from 'vue-router'
import { router } from '@/router' import { router } from '@/router'
import { debounce } from 'lodash-es' import { debounce } from 'lodash-es'
import { useSystemLanguageStore } from '@/store/modules/system-language'
import { languageKeyTransform } from './language-key-transform'
interface PagingInfoParams { interface PagingInfoParams {
pageNo: number pageNo: number
...@@ -57,6 +59,8 @@ service.interceptors.request.use( ...@@ -57,6 +59,8 @@ service.interceptors.request.use(
if (token) config.headers['X-Request-Token'] = token if (token) config.headers['X-Request-Token'] = token
config.headers['x-lang'] = languageKeyTransform(useSystemLanguageStore().currentLanguageInfo.key)
return config return config
}, },
(error) => { (error) => {
......
/**
* @description 创建层级关系
* @param tree 树
* @param pathList 每一项的id组成的数组
* @returns 创建层级关系后的树
*/
export const buildHierarchyTree = (tree: any[], pathList = []): any => {
if (!Array.isArray(tree)) {
console.warn('tree must be an array')
return []
}
if (!tree || tree.length === 0) return []
for (const [key, node] of tree.entries()) {
node.id = key
node.parentId = pathList.length ? pathList[pathList.length - 1] : null
node.pathList = [...pathList, node.id]
const hasChildren = node.children && node.children.length > 0
if (hasChildren) {
buildHierarchyTree(node.children, node.pathList)
}
}
return tree
}
import { BASE_URLS } from '@/config/base-url' import { BASE_URLS } from '@/config/base-url'
import { useSystemLanguageStore } from '@/store/modules/system-language'
import { useUserStore } from '@/store/modules/user' import { useUserStore } from '@/store/modules/user'
import { languageKeyTransform } from '@/utils/language-key-transform'
import { fetchEventSource } from '@microsoft/fetch-event-source' import { fetchEventSource } from '@microsoft/fetch-event-source'
interface Options { interface Options {
...@@ -21,6 +23,7 @@ export default function fetchEventStreamSource( ...@@ -21,6 +23,7 @@ export default function fetchEventStreamSource(
) { ) {
const ENV = import.meta.env.VITE_APP_ENV const ENV = import.meta.env.VITE_APP_ENV
const userStore = useUserStore() const userStore = useUserStore()
const systemLanguageStore = useSystemLanguageStore()
const controller = new AbortController() const controller = new AbortController()
...@@ -29,6 +32,7 @@ export default function fetchEventStreamSource( ...@@ -29,6 +32,7 @@ export default function fetchEventStreamSource(
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
'x-request-token': userStore.token, 'x-request-token': userStore.token,
'x-lang': languageKeyTransform(systemLanguageStore.currentLanguageInfo.key),
}, },
body: JSON.stringify(payload), body: JSON.stringify(payload),
signal: controller?.signal, signal: controller?.signal,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment