|
1 | 1 | import { App, reactive, ref } from 'vue'; |
2 | | -import { deepAssign } from '../shared/utils/deep-assign'; |
3 | 2 | import zhCN from './lang/zh-cn'; |
| 3 | +import enUS from './lang/en-us'; |
4 | 4 |
|
5 | 5 | const lang = ref('zh-CN'); |
6 | | -let langMessages = reactive({ |
7 | | - [lang.value]: zhCN |
| 6 | +const nowApp = ref(); // 用来存储install注册实例的app |
| 7 | +let langMessages = reactive<{[index: string]: any}> ({ |
| 8 | + ['zh-CN']: zhCN, |
| 9 | + ['en-US']: enUS, |
8 | 10 | }); |
9 | 11 |
|
10 | 12 | const Locale = { |
11 | | - messages(): Record<string, unknown> { |
12 | | - return langMessages[lang.value]; |
| 13 | + messages(language = lang.value): Record<string, unknown> { |
| 14 | + return langMessages[language]; |
13 | 15 | }, |
14 | | - |
15 | 16 | lang(): string { |
16 | 17 | return lang.value; |
17 | 18 | }, |
18 | | - |
19 | | - use(newLang: string, newMessages?: Record<string, unknown>): void { |
| 19 | + // 切换语言 |
| 20 | + use(newLang: string): void { |
| 21 | + const app = nowApp.value; |
20 | 22 | lang.value = newLang; |
21 | | - this.add({ [newLang]: newMessages }); |
| 23 | + app.config.globalProperties.langMessages = Locale.messages(); |
22 | 24 | }, |
23 | | - |
24 | | - add(newMessages = {}): void { |
25 | | - langMessages = deepAssign(langMessages, newMessages); |
| 25 | + // 在列表中增加一种语言,相同则覆盖 (可以在不影响加载的情况下添加,提高切换性能) |
| 26 | + add(newMessages: Record<string, unknown>): void { |
| 27 | + langMessages = { |
| 28 | + ...langMessages, |
| 29 | + ...newMessages |
| 30 | + }; |
26 | 31 | }, |
27 | 32 | }; |
28 | | - |
| 33 | +// 导出 |
29 | 34 | export { Locale }; |
30 | 35 |
|
31 | 36 | export default { |
32 | | - install(app: App): void { |
33 | | - app.config.globalProperties.langMessages = ref(Locale.messages()); |
| 37 | + title: '国际化', |
| 38 | + category: '基础', |
| 39 | + status: '100%', |
| 40 | + install(app: App, language?: string): void { |
| 41 | + app.config.globalProperties.langMessages = Locale.messages(language); |
| 42 | + nowApp.value = app; |
34 | 43 | } |
35 | 44 | }; |
0 commit comments