@kuankuan/assist-2026 0.1.3 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/i18n.d.ts +18 -15
- package/dist/i18n.js +66 -46
- package/package.json +1 -1
- package/src/i18n.ts +77 -51
package/dist/i18n.d.ts
CHANGED
|
@@ -1,15 +1,18 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
1
|
+
import { I18n } from 'vue-i18n';
|
|
2
|
+
import { type Ref } from 'vue';
|
|
3
|
+
export default class I18nInstance {
|
|
4
|
+
readonly messages: unknown;
|
|
5
|
+
readonly langs: string[];
|
|
6
|
+
private readonly localSettingLanguage;
|
|
7
|
+
private readonly browserLanguage;
|
|
8
|
+
readonly languageList: {
|
|
9
|
+
name: Ref<string>;
|
|
10
|
+
id: string;
|
|
11
|
+
}[];
|
|
12
|
+
readonly language: Ref<string>;
|
|
13
|
+
readonly i18n: I18n<any, Record<string, unknown>, Record<string, unknown>, string, false>;
|
|
14
|
+
constructor(messages: unknown, langs: string[], storageKey?: string);
|
|
15
|
+
t(key: string): string;
|
|
16
|
+
tRef(key: string): import("vue").ComputedRef<string>;
|
|
17
|
+
languageName(lan: string): Ref<string, string> | import("vue").ComputedRef<string>;
|
|
18
|
+
}
|
package/dist/i18n.js
CHANGED
|
@@ -1,19 +1,15 @@
|
|
|
1
1
|
import { createI18n } from 'vue-i18n';
|
|
2
2
|
import { computed, ref, watch } from 'vue';
|
|
3
|
-
import messages, { langs } from 'virtual:k-i18n-config:main';
|
|
4
3
|
import storageRef from './ref/storageRef';
|
|
5
|
-
export const languageName = {
|
|
6
|
-
_auto: computed(() => `Auto (${languageName[browserLanguage.value]})`),
|
|
7
|
-
'zh-cn': '简体中文',
|
|
8
|
-
'en-us': 'English',
|
|
9
|
-
};
|
|
10
|
-
export const languageList = ['_auto', ...langs].map((i) => ({
|
|
11
|
-
id: i,
|
|
12
|
-
name: languageName[i],
|
|
13
|
-
}));
|
|
14
|
-
const LOCALSTORAGE_KEY = '_vue_i18n_main_locale';
|
|
15
4
|
function getBrowserLanguage() {
|
|
16
|
-
|
|
5
|
+
return (navigator?.languages || [navigator.language]).map((i) => i.toLowerCase());
|
|
6
|
+
}
|
|
7
|
+
const browserLanguageSetting = ref(getBrowserLanguage());
|
|
8
|
+
window.addEventListener('languagechange', () => {
|
|
9
|
+
browserLanguageSetting.value = getBrowserLanguage();
|
|
10
|
+
});
|
|
11
|
+
function getBrowserLanguageInLangs(langs) {
|
|
12
|
+
const languages = browserLanguageSetting.value;
|
|
17
13
|
const _langsOnly = langs.map((i) => i.split('-')[0]);
|
|
18
14
|
for (const i of languages) {
|
|
19
15
|
if (langs.includes(i)) {
|
|
@@ -25,39 +21,63 @@ function getBrowserLanguage() {
|
|
|
25
21
|
}
|
|
26
22
|
return langs[0] || 'en-us';
|
|
27
23
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
localSettingLanguage
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
const currentBrowserLanguage = browserLanguage.value;
|
|
36
|
-
if (localSettingLanguage.value === '_auto') {
|
|
37
|
-
return currentBrowserLanguage;
|
|
38
|
-
}
|
|
39
|
-
return localSettingLanguage.value;
|
|
40
|
-
},
|
|
41
|
-
set: (newValue) => {
|
|
42
|
-
localSettingLanguage.value = newValue;
|
|
43
|
-
},
|
|
44
|
-
});
|
|
45
|
-
watch(language, (value) => {
|
|
46
|
-
i18n.global.locale.value = value;
|
|
47
|
-
});
|
|
48
|
-
export const i18n = createI18n({
|
|
49
|
-
legacy: false,
|
|
50
|
-
locale: language.value,
|
|
51
|
-
fallbackLocale: 'en-us',
|
|
24
|
+
export default class I18nInstance {
|
|
25
|
+
messages;
|
|
26
|
+
langs;
|
|
27
|
+
localSettingLanguage;
|
|
28
|
+
browserLanguage;
|
|
29
|
+
languageList;
|
|
30
|
+
language;
|
|
52
31
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
32
|
+
i18n;
|
|
33
|
+
constructor(messages, langs, storageKey = '_vue_i18n_main_locale') {
|
|
34
|
+
this.messages = messages;
|
|
35
|
+
this.langs = langs;
|
|
36
|
+
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
37
|
+
const now = this;
|
|
38
|
+
this.languageList = ['_auto', ...langs].map((i) => ({
|
|
39
|
+
id: i,
|
|
40
|
+
name: this.languageName(i),
|
|
41
|
+
}));
|
|
42
|
+
this.localSettingLanguage = storageRef(storageKey, '_auto');
|
|
43
|
+
this.browserLanguage = computed(() => getBrowserLanguageInLangs(browserLanguageSetting.value));
|
|
44
|
+
watch(() => now.localSettingLanguage.value, (newValue) => {
|
|
45
|
+
if (newValue !== '_auto' && !now.langs.includes(newValue)) {
|
|
46
|
+
now.localSettingLanguage.value = '_auto';
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
this.language = computed({
|
|
50
|
+
get() {
|
|
51
|
+
const currentBrowserLanguage = now.browserLanguage.value;
|
|
52
|
+
if (now.localSettingLanguage.value === '_auto') {
|
|
53
|
+
return currentBrowserLanguage;
|
|
54
|
+
}
|
|
55
|
+
return now.localSettingLanguage.value;
|
|
56
|
+
},
|
|
57
|
+
set(newValue) {
|
|
58
|
+
now.localSettingLanguage.value = newValue;
|
|
59
|
+
},
|
|
60
|
+
});
|
|
61
|
+
this.i18n = createI18n({
|
|
62
|
+
legacy: false,
|
|
63
|
+
locale: this.language.value,
|
|
64
|
+
fallbackLocale: 'en-us',
|
|
65
|
+
messages: this.messages,
|
|
66
|
+
});
|
|
67
|
+
watch(() => now.language.value, (newValue) => {
|
|
68
|
+
now.i18n.global.locale.value = newValue;
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
t(key) {
|
|
72
|
+
return this.i18n.global.t(key);
|
|
73
|
+
}
|
|
74
|
+
tRef(key) {
|
|
75
|
+
return computed(() => this.t(key));
|
|
76
|
+
}
|
|
77
|
+
languageName(lan) {
|
|
78
|
+
if (lan === '_auto') {
|
|
79
|
+
return computed(() => `Auto-${this.languageName(this.browserLanguage.value)}`);
|
|
80
|
+
}
|
|
81
|
+
return ref(new Intl.DisplayNames([lan], { type: 'language' }).of(lan) || lan);
|
|
82
|
+
}
|
|
63
83
|
}
|
package/package.json
CHANGED
package/src/i18n.ts
CHANGED
|
@@ -1,24 +1,18 @@
|
|
|
1
|
-
import { createI18n } from 'vue-i18n';
|
|
2
|
-
import { computed, ref, watch, Ref } from 'vue';
|
|
3
|
-
import messages, { langs } from 'virtual:k-i18n-config:main';
|
|
1
|
+
import { createI18n, I18n } from 'vue-i18n';
|
|
2
|
+
import { computed, ref, watch, type Ref } from 'vue';
|
|
4
3
|
import storageRef from './ref/storageRef';
|
|
5
4
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
),
|
|
10
|
-
'zh-cn': '简体中文',
|
|
11
|
-
'en-us': 'English',
|
|
12
|
-
};
|
|
5
|
+
function getBrowserLanguage() {
|
|
6
|
+
return (navigator?.languages || [navigator.language]).map((i) => i.toLowerCase());
|
|
7
|
+
}
|
|
13
8
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
})
|
|
9
|
+
const browserLanguageSetting = ref<string[]>(getBrowserLanguage());
|
|
10
|
+
window.addEventListener('languagechange', () => {
|
|
11
|
+
browserLanguageSetting.value = getBrowserLanguage();
|
|
12
|
+
});
|
|
18
13
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
const languages = (navigator?.languages || []).map((i) => i.toLowerCase());
|
|
14
|
+
function getBrowserLanguageInLangs(langs: string[]) {
|
|
15
|
+
const languages = browserLanguageSetting.value;
|
|
22
16
|
const _langsOnly = langs.map((i: string) => i.split('-')[0]);
|
|
23
17
|
for (const i of languages) {
|
|
24
18
|
if (langs.includes(i)) {
|
|
@@ -30,40 +24,72 @@ function getBrowserLanguage() {
|
|
|
30
24
|
}
|
|
31
25
|
return langs[0] || 'en-us';
|
|
32
26
|
}
|
|
33
|
-
const browserLanguage = ref(getBrowserLanguage());
|
|
34
|
-
export const localSettingLanguage = storageRef(LOCALSTORAGE_KEY, '_auto');
|
|
35
|
-
if (localSettingLanguage.value !== '_auto' && !langs.includes(localSettingLanguage.value)) {
|
|
36
|
-
localSettingLanguage.value = '_auto';
|
|
37
|
-
}
|
|
38
|
-
export const language = computed({
|
|
39
|
-
get: () => {
|
|
40
|
-
const currentBrowserLanguage = browserLanguage.value;
|
|
41
|
-
if (localSettingLanguage.value === '_auto') {
|
|
42
|
-
return currentBrowserLanguage;
|
|
43
|
-
}
|
|
44
|
-
return localSettingLanguage.value;
|
|
45
|
-
},
|
|
46
|
-
set: (newValue) => {
|
|
47
|
-
localSettingLanguage.value = newValue;
|
|
48
|
-
},
|
|
49
|
-
});
|
|
50
|
-
watch(language, (value) => {
|
|
51
|
-
(i18n.global.locale as unknown as Ref<string>).value = value;
|
|
52
|
-
});
|
|
53
27
|
|
|
54
|
-
export
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
28
|
+
export default class I18nInstance {
|
|
29
|
+
private readonly localSettingLanguage: Ref<string>;
|
|
30
|
+
private readonly browserLanguage: Ref<string>;
|
|
31
|
+
|
|
32
|
+
public readonly languageList: { name: Ref<string>; id: string }[];
|
|
33
|
+
public readonly language: Ref<string>;
|
|
58
34
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
35
|
+
public readonly i18n: I18n<any, Record<string, unknown>, Record<string, unknown>, string, false>;
|
|
36
|
+
|
|
37
|
+
constructor(
|
|
38
|
+
public readonly messages: unknown,
|
|
39
|
+
public readonly langs: string[],
|
|
40
|
+
storageKey: string = '_vue_i18n_main_locale'
|
|
41
|
+
) {
|
|
42
|
+
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
43
|
+
const now = this;
|
|
44
|
+
this.languageList = ['_auto', ...langs].map((i) => ({
|
|
45
|
+
id: i,
|
|
46
|
+
name: this.languageName(i),
|
|
47
|
+
}));
|
|
48
|
+
this.localSettingLanguage = storageRef(storageKey, '_auto');
|
|
49
|
+
this.browserLanguage = computed(() => getBrowserLanguageInLangs(browserLanguageSetting.value));
|
|
50
|
+
watch(
|
|
51
|
+
() => now.localSettingLanguage.value,
|
|
52
|
+
(newValue) => {
|
|
53
|
+
if (newValue !== '_auto' && !now.langs.includes(newValue)) {
|
|
54
|
+
now.localSettingLanguage.value = '_auto';
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
);
|
|
58
|
+
this.language = computed({
|
|
59
|
+
get() {
|
|
60
|
+
const currentBrowserLanguage = now.browserLanguage.value;
|
|
61
|
+
if (now.localSettingLanguage.value === '_auto') {
|
|
62
|
+
return currentBrowserLanguage;
|
|
63
|
+
}
|
|
64
|
+
return now.localSettingLanguage.value;
|
|
65
|
+
},
|
|
66
|
+
set(newValue) {
|
|
67
|
+
now.localSettingLanguage.value = newValue;
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
this.i18n = createI18n({
|
|
71
|
+
legacy: false,
|
|
72
|
+
locale: this.language.value,
|
|
73
|
+
fallbackLocale: 'en-us',
|
|
74
|
+
messages: this.messages as never,
|
|
75
|
+
});
|
|
76
|
+
watch(
|
|
77
|
+
() => now.language.value,
|
|
78
|
+
(newValue) => {
|
|
79
|
+
now.i18n.global.locale.value = newValue;
|
|
80
|
+
}
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
t(key: string) {
|
|
84
|
+
return this.i18n.global.t(key);
|
|
85
|
+
}
|
|
86
|
+
tRef(key: string) {
|
|
87
|
+
return computed(() => this.t(key));
|
|
88
|
+
}
|
|
89
|
+
languageName(lan: string) {
|
|
90
|
+
if (lan === '_auto') {
|
|
91
|
+
return computed((): string => `Auto-${this.languageName(this.browserLanguage.value)}`);
|
|
92
|
+
}
|
|
93
|
+
return ref(new Intl.DisplayNames([lan], { type: 'language' }).of(lan) || lan);
|
|
94
|
+
}
|
|
69
95
|
}
|