Skip to content

Commit 78017e9

Browse files
committed
merge feat/i18n-sync into dev
重新提交:devui组件国际化放出并完善文档 Created-by: xbghc Commit-by: xbghc;liuaolin44944 Merged-by: GreatZP Description: 过去的提交在同步github内容时被覆盖了,先重新提交 ref: https://gitcode.com/DevCloudFE/vue-devui/pull/10 See merge request: DevCloudFE/vue-devui!19
2 parents e5458c8 + 322d1bc commit 78017e9

File tree

4 files changed

+63
-23
lines changed

4 files changed

+63
-23
lines changed

packages/devui-vue/devui/locale/create.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ export function get(object: any, path: string) {
1616
export function createI18nTranslate(name: string, app, newPrefix?: string) {
1717
const prefix = newPrefix || camelize(name) + '.';
1818
return (path: string): any => {
19-
const messages = app?.appContext.config.globalProperties.langMessages?.value || Locale.messages();
19+
const messages = app?.appContext.config.globalProperties.langMessages || Locale.messages();
2020
const message = get(messages, prefix + path) || get(messages, path);
2121
return message;
2222
};
Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,44 @@
11
import { App, reactive, ref } from 'vue';
2-
import { deepAssign } from '../shared/utils/deep-assign';
32
import zhCN from './lang/zh-cn';
3+
import enUS from './lang/en-us';
44

55
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,
810
});
911

1012
const Locale = {
11-
messages(): Record<string, unknown> {
12-
return langMessages[lang.value];
13+
messages(language = lang.value): Record<string, unknown> {
14+
return langMessages[language];
1315
},
14-
1516
lang(): string {
1617
return lang.value;
1718
},
18-
19-
use(newLang: string, newMessages?: Record<string, unknown>): void {
19+
// 切换语言
20+
use(newLang: string): void {
21+
const app = nowApp.value;
2022
lang.value = newLang;
21-
this.add({ [newLang]: newMessages });
23+
app.config.globalProperties.langMessages = Locale.messages();
2224
},
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+
};
2631
},
2732
};
28-
33+
// 导出
2934
export { Locale };
3035

3136
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;
3443
}
3544
};

packages/devui-vue/docs/.vitepress/devui-theme/components/NavBar.vue

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@ import ZhLang from './icons/ZhLang.vue'
1111
import EnLang from './icons/EnLang.vue'
1212
import ThemePicker from './ThemePicker.vue'
1313
import { Locale } from '@devui/locale'
14-
import enUS from '@devui/locale/lang/en-us'
15-
import zhCN from '@devui/locale/lang/zh-cn'
1614
import { LANG_KEY, CURRENT_LANG, ZH_CN, EN_US } from '../const'
1715
1816
// 主题切换
@@ -66,16 +64,14 @@ const LANG_MAP = {
6664
}
6765
6866
const currentLang = ref(CURRENT_LANG);
69-
const app = getCurrentInstance();
7067
const switchLang = () => {
7168
if (currentLang.value === ZH_CN) {
72-
Locale.use(EN_US, enUS);
69+
Locale.use(EN_US);
7370
currentLang.value = EN_US;
7471
} else {
75-
Locale.use(ZH_CN, zhCN);
72+
Locale.use(ZH_CN);
7673
currentLang.value = ZH_CN;
7774
}
78-
app.appContext.config.globalProperties.langMessages.value = Locale.messages();
7975
};
8076
</script>
8177

@@ -97,7 +93,7 @@ const switchLang = () => {
9793

9894
<div class="custom-nav flex items-center ml-l">
9995
<div class="custom-nav-item ml-m" style="font-size: 0"
100-
@click="() => useTranslation(defaultLanguage === ZH_CN ? EN_US : ZH_CN)" v-if="false">
96+
@click="() => useTranslation(defaultLanguage === ZH_CN ? EN_US : ZH_CN)" v-if="true">
10197
<ZhLang v-if="defaultLanguage === ZH_CN"></ZhLang>
10298
<EnLang v-else></EnLang>
10399
</div>

packages/devui-vue/docs/theme-guide/index.md

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,3 +139,38 @@ export class Theme {
139139
isDark?: boolean; // 是否是深色主题
140140
}
141141
```
142+
143+
# 组件国际化
144+
145+
我们提供了一种比较简洁的方法,可以方便的进行组件的国际化。
146+
内置支持中文(zh-CN)和英文(en-US)两种,也支持自定义其他语言,并且可以在添加的语言列表中任意随意切换。
147+
148+
<a href="https://github.com/DevCloudFE/vue-devui/tree/dev/packages/devui-vue/devui/locale/lang" target="_blank">多语言文件格式</a>
149+
150+
在main.ts中引用并注册即可(不调用则默认是中文):
151+
152+
153+
#### 初始化
154+
155+
```ts
156+
import { createApp } from 'vue';
157+
import LocalInstall from 'vue-devui/locale';
158+
const app = createApp(App);
159+
// 直接初始化使用
160+
app.use(LocalInstall);
161+
162+
// 指定语言初始化使用
163+
app.use(LocalInstall, 'en-US');
164+
```
165+
166+
#### 切换语言
167+
```ts
168+
import { Locale } from 'vue-devui/locale';
169+
Locale.use('zh-CN');
170+
171+
// 使用自定义语言,假如你有一个多语言文件为jaJP(具体的文件格式参照上述链接中的多语言文件格式)
172+
Locale.add({ 'ja-JP': jaJP });
173+
Locale.use('ja-JP');
174+
```
175+
176+
有些组件暂未完备国际化配置,欢迎各位同学查漏补缺,[加入我们](/contributing/),贡献代码。

0 commit comments

Comments
 (0)