1
0
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:
Kaifuny 2023-07-20 10:54:38 +08:00
parent ef930404a1
commit e7538dc395
3 changed files with 18 additions and 5 deletions

View File

@ -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>

View File

@ -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 };
} }
} }

View File

@ -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) => {