Skip to content

Commit 2233a33

Browse files
committed
fix: fix loading locales
1 parent 0d8c5b8 commit 2233a33

File tree

2 files changed

+30
-20
lines changed

2 files changed

+30
-20
lines changed

src/composables/useLanguage.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ import { en } from '@supabase/auth-ui-shared'
22
import { useI18n } from 'vue-i18n'
33
import cloneDeep from 'lodash.clonedeep'
44

5+
import { loadLanguageAsync, availableLocales } from '~/plugins/i18n'
6+
57
const sign_up = {
68
email_label: '邮箱地址',
79
password_label: '密码',
@@ -67,15 +69,19 @@ const zh = {
6769
}
6870

6971
const useLanguage = () => {
70-
const { locale, availableLocales } = useI18n()
72+
const { locale } = useI18n()
7173

7274
const toggleLocales = () => {
7375
const locales = availableLocales
74-
locale.value = locales[(locales.indexOf(locale.value) + 1) % locales.length]
76+
const newLocale =
77+
locales[(locales.indexOf(locale.value) + 1) % locales.length]
78+
loadLanguageAsync(newLocale)
79+
locale.value = newLocale
7580
}
7681
return {
7782
en: cloneDeep(en),
7883
zh: cloneDeep(zh),
84+
availableLocales,
7985
toggleLocales
8086
}
8187
}

src/plugins/i18n.ts

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,39 @@
11
import type { App } from 'vue'
2+
import type { Locale } from 'vue-i18n'
23
import { createI18n } from 'vue-i18n'
34
import { useLocalStorage } from '@vueuse/core'
45

5-
const localPathPrefix = '../locales/'
6-
76
const storage = useLocalStorage('otg-options', {}) as any
87
const locale = storage.value?.apperance?.language
98

109
// import i18n resources
11-
// https://vitejs.dev/guide/features.html#glob-import
12-
const messages = Object.fromEntries(
13-
Object.entries(import.meta.globEager('../locales/*.y(a)?ml')).map(
14-
([key, value]) => {
15-
const yaml = key.endsWith('.yaml')
16-
return [
17-
key.slice(localPathPrefix.length, yaml ? -5 : -4),
18-
value?.default!
19-
]
10+
const localesMap = Object.fromEntries(
11+
Object.entries(import.meta.glob('../locales/*.yml')).map(
12+
([path, loadLocale]) => {
13+
console.log(path)
14+
return [path.match(/([\w-]*)\.yml$/)?.[1], loadLocale]
2015
}
2116
)
2217
)
2318

24-
const install = (app: App) => {
25-
const i18n = createI18n({
26-
legacy: false,
27-
locale,
28-
globalInjection: true,
29-
messages
30-
})
19+
export const availableLocales = Object.keys(localesMap)
20+
21+
const i18n = createI18n({
22+
legacy: false,
23+
locale,
24+
globalInjection: true,
25+
messages: {}
26+
})
3127

28+
export async function loadLanguageAsync(lang: string): Promise<Locale> {
29+
const messages = await localesMap[lang]()
30+
i18n.global.setLocaleMessage(lang, messages.default)
31+
return lang
32+
}
33+
34+
const install = (app: App) => {
3235
app.use(i18n)
36+
loadLanguageAsync('en-US')
3337
}
3438

3539
export default install

0 commit comments

Comments
 (0)