mirror of
https://github.com/chatopera/cosin.git
synced 2025-08-01 16:38:02 +08:00
fix: get valid locale from url param or localstorage
Signed-off-by: Kaifuny <superbiger.github@gmail.com>
This commit is contained in:
parent
ef930404a1
commit
e7538dc395
@ -27,6 +27,7 @@ const dropdownMenus = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
// TODO 根据 url 设置当前选中的导航
|
// TODO 根据 url 设置当前选中的导航
|
||||||
|
|
||||||
const current = ref<string>(ROUTE_NAME.DASHBOARD_INDEX)
|
const current = ref<string>(ROUTE_NAME.DASHBOARD_INDEX)
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
</script>
|
</script>
|
||||||
@ -63,7 +64,7 @@ const router = useRouter()
|
|||||||
trigger="hover"
|
trigger="hover"
|
||||||
>
|
>
|
||||||
<div class="hover: text-green-600 hover:underline cursor-pointer">
|
<div class="hover: text-green-600 hover:underline cursor-pointer">
|
||||||
{{ $i18n.locale }}
|
{{ $t($i18n.locale) }}
|
||||||
</div>
|
</div>
|
||||||
</n-popselect>
|
</n-popselect>
|
||||||
</div>
|
</div>
|
||||||
|
@ -4,6 +4,6 @@ import { ComponentCustomProperties } from './shims-vue-global.d';
|
|||||||
declare module "vue" {
|
declare module "vue" {
|
||||||
export interface ComponentCustomProperties {
|
export interface ComponentCustomProperties {
|
||||||
$t: (key: string) => string;
|
$t: (key: string) => string;
|
||||||
$i18n: { locale: typeof locales };
|
$i18n: { locale: string };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,9 +6,21 @@ import _ from 'lodash-es'
|
|||||||
* 语言支持类型
|
* 语言支持类型
|
||||||
*/
|
*/
|
||||||
export const locales: string[] = ['zh-CN', 'en-US']
|
export const locales: string[] = ['zh-CN', 'en-US']
|
||||||
|
export const defaultLocale = 'zh-CN'
|
||||||
const localPathPrefix = './locales/'
|
const localPathPrefix = './locales/'
|
||||||
|
|
||||||
|
const getValidLocale = (defaults: string = defaultLocale): string => {
|
||||||
|
const locale = window.localStorage.getItem('locale')
|
||||||
|
if (locale && locales.includes(locale)) {
|
||||||
|
return locale
|
||||||
|
}
|
||||||
|
const param = new URLSearchParams(window.location.search).get('lang')
|
||||||
|
if (param && locales.includes(param)) {
|
||||||
|
return param
|
||||||
|
}
|
||||||
|
return defaults
|
||||||
|
}
|
||||||
|
|
||||||
const mergedLocalMessage = Object.entries(
|
const mergedLocalMessage = Object.entries(
|
||||||
import.meta.glob('./locales/**/*.json', { eager: true })
|
import.meta.glob('./locales/**/*.json', { eager: true })
|
||||||
).reduce(
|
).reduce(
|
||||||
@ -35,10 +47,10 @@ const mergedLocalMessage = Object.entries(
|
|||||||
|
|
||||||
const i18n = createI18n({
|
const i18n = createI18n({
|
||||||
legacy: false,
|
legacy: false,
|
||||||
locale: 'zh-CN',
|
locale: getValidLocale(defaultLocale),
|
||||||
messages: mergedLocalMessage,
|
messages: mergedLocalMessage,
|
||||||
globalInjection: true,
|
globalInjection: true,
|
||||||
fallbackLocale: 'zh-CN',
|
fallbackLocale: defaultLocale,
|
||||||
})
|
})
|
||||||
|
|
||||||
const install = (app: App) => {
|
const install = (app: App) => {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user