@xiaonoodles/meetfun-i18n 1.2.14
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/FIX_WEBPACK_RESOLUTION.md +245 -0
- package/LICENSE +22 -0
- package/MIGRATION_GUIDE.md +253 -0
- package/README.md +482 -0
- package/TROUBLESHOOTING.md +280 -0
- package/VERIFY_FIX.md +272 -0
- package/VUE2_USAGE.md +170 -0
- package/dist/index.d.ts +348 -0
- package/dist/index.esm.js +1167 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/index.js +1173 -0
- package/dist/index.js.map +1 -0
- package/dist/vue2/index.cjs +1256 -0
- package/dist/vue2/index.cjs.map +1 -0
- package/dist/vue2/index.d.ts +346 -0
- package/dist/vue2/index.esm.js +1231 -0
- package/dist/vue2/index.esm.js.map +1 -0
- package/package.json +78 -0
- package/vue2/index.d.ts +3 -0
- package/vue2/index.js +3 -0
- package/vue2/index.mjs +4 -0
- package/vue2/package.json +14 -0
- package/vue2.d.ts +3 -0
- package/vue2.mjs +13 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
import { I18n } from 'vue-i18n';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* 语言包缓存数据接口
|
|
5
|
+
*/
|
|
6
|
+
interface LangDictCacheData {
|
|
7
|
+
/** 缓存时间戳 */
|
|
8
|
+
timestamp: number;
|
|
9
|
+
/** 语言包版本号 */
|
|
10
|
+
version: string;
|
|
11
|
+
/** 语言包数据 */
|
|
12
|
+
data: LangDictResponse;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* 领域代码字典键
|
|
16
|
+
*/
|
|
17
|
+
interface DomainCodeDictKey {
|
|
18
|
+
/** 缺失的字典key列表 */
|
|
19
|
+
missingDictKeyList: string[];
|
|
20
|
+
/** 领域编码,必填 */
|
|
21
|
+
domainCode: string;
|
|
22
|
+
/** 已使用的字典key列表 */
|
|
23
|
+
usedDictKeyList: string[];
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* 查询冷数据参数
|
|
27
|
+
*/
|
|
28
|
+
interface QueryLangDictColdDataParams {
|
|
29
|
+
langDictColdDataCmdList: DomainCodeDictKey[];
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* 系统语言包数据
|
|
33
|
+
*/
|
|
34
|
+
interface SystemLangDict {
|
|
35
|
+
[dictKey: string]: string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* 语言包数据
|
|
39
|
+
*/
|
|
40
|
+
interface LangDictData {
|
|
41
|
+
[systemCode: string]: SystemLangDict;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* 完整的语言包响应数据
|
|
45
|
+
*/
|
|
46
|
+
interface LangDictResponse {
|
|
47
|
+
[langCode: string]: LangDictData;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* 缺失键缓存机制配置
|
|
51
|
+
*/
|
|
52
|
+
interface MissingKeyCache {
|
|
53
|
+
[domainCode: string]: Set<string>;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* 已使用键缓存机制配置
|
|
57
|
+
*/
|
|
58
|
+
interface UsedKeyCache {
|
|
59
|
+
[domainCode: string]: Set<string>;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* 语言配置枚举
|
|
63
|
+
*/
|
|
64
|
+
declare enum LANGUAGE_OPTIONS_CONFIGURATION {
|
|
65
|
+
FOLLOW_SYSTEM = "followSystem",
|
|
66
|
+
EN = "en",
|
|
67
|
+
ZH_HANS = "zh-Hans",
|
|
68
|
+
ZH_HANT = "zh-Hant"
|
|
69
|
+
}
|
|
70
|
+
type LanguageOptionsConfigurationType = `${LANGUAGE_OPTIONS_CONFIGURATION}`;
|
|
71
|
+
/**
|
|
72
|
+
* 语言切换钩子函数参数
|
|
73
|
+
*/
|
|
74
|
+
interface LocaleChangedPayload {
|
|
75
|
+
/** 目标语言代码 */
|
|
76
|
+
targetLocale: string;
|
|
77
|
+
/** 目标语言的语言包数据 */
|
|
78
|
+
messages: any;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* 国际化配置选项
|
|
82
|
+
*/
|
|
83
|
+
interface I18nConfig {
|
|
84
|
+
/** 默认语言 */
|
|
85
|
+
defaultLocale?: string;
|
|
86
|
+
/** 默认领域代码 */
|
|
87
|
+
defaultLangDictDomainCode?: string;
|
|
88
|
+
/** 语言代码映射 */
|
|
89
|
+
localeMap?: Record<string, string>;
|
|
90
|
+
/** 缓存键名 */
|
|
91
|
+
localeCacheKey?: string;
|
|
92
|
+
/** 语言包缓存键名 */
|
|
93
|
+
langDictCacheKey?: string;
|
|
94
|
+
/** 缓存最大有效期(毫秒),默认365天 */
|
|
95
|
+
cacheMaxAge?: number;
|
|
96
|
+
/** 上报延迟时间(毫秒),默认5000ms */
|
|
97
|
+
reportDelay?: number;
|
|
98
|
+
/** 系统代码(用于获取语言包) */
|
|
99
|
+
systemCode?: string;
|
|
100
|
+
/** 语言切换钩子函数 */
|
|
101
|
+
onLocaleChanged?: (payload: LocaleChangedPayload) => void;
|
|
102
|
+
/** 是否启用调试模式,默认false */
|
|
103
|
+
debug?: boolean;
|
|
104
|
+
/** 已上报键缓存最大数量,默认10000,0表示不限制 */
|
|
105
|
+
maxReportedKeysCache?: number;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* 变量替换配置选项
|
|
109
|
+
*/
|
|
110
|
+
interface InterpolateOptions {
|
|
111
|
+
/** 是否在替换失败时返回原始占位符,默认 true */
|
|
112
|
+
fallbackToOriginal?: boolean;
|
|
113
|
+
/** 是否记录警告日志,默认 true */
|
|
114
|
+
logWarnings?: boolean;
|
|
115
|
+
/** 是否转义HTML,默认 false */
|
|
116
|
+
escapeHtml?: boolean;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* 国际化代理类配置
|
|
120
|
+
*/
|
|
121
|
+
interface I18nProxyConfig {
|
|
122
|
+
/** 是否在找不到翻译时返回原始键值 */
|
|
123
|
+
fallbackToKey?: boolean;
|
|
124
|
+
/** 是否启用调试日志 */
|
|
125
|
+
debug?: boolean;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* API 请求函数类型
|
|
129
|
+
*/
|
|
130
|
+
interface ApiRequestFunction<T = any> {
|
|
131
|
+
post<R = T>(url: string, data?: any, config?: any): Promise<{
|
|
132
|
+
data: R;
|
|
133
|
+
}>;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* 获取语言包热数据的 API 函数类型
|
|
137
|
+
*/
|
|
138
|
+
type QueryLangDictHotDataFunction = (params: {
|
|
139
|
+
systemCode: string;
|
|
140
|
+
}) => Promise<{
|
|
141
|
+
data: LangDictResponse;
|
|
142
|
+
}>;
|
|
143
|
+
/**
|
|
144
|
+
* 获取语言包冷数据的 API 函数类型
|
|
145
|
+
*/
|
|
146
|
+
type QueryLangDictColdDataFunction = (params: QueryLangDictColdDataParams) => Promise<{
|
|
147
|
+
data: LangDictResponse;
|
|
148
|
+
}>;
|
|
149
|
+
/**
|
|
150
|
+
* API 函数配置
|
|
151
|
+
*/
|
|
152
|
+
interface ApiConfig {
|
|
153
|
+
/** 获取热数据的 API 函数 */
|
|
154
|
+
queryLangDictHotData: QueryLangDictHotDataFunction;
|
|
155
|
+
/** 获取冷数据的 API 函数 */
|
|
156
|
+
queryLangDictColdData: QueryLangDictColdDataFunction;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* 翻译键统计信息
|
|
160
|
+
*/
|
|
161
|
+
interface TranslationKeysStats {
|
|
162
|
+
missingKeys: {
|
|
163
|
+
[domainCode: string]: number;
|
|
164
|
+
};
|
|
165
|
+
usedKeys: {
|
|
166
|
+
[domainCode: string]: number;
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* MeetFun I18n 实例
|
|
172
|
+
*/
|
|
173
|
+
declare class MeetFunI18n {
|
|
174
|
+
private config;
|
|
175
|
+
private i18n;
|
|
176
|
+
private cacheManager;
|
|
177
|
+
private translateManager;
|
|
178
|
+
constructor(baseMessages: Record<string, any>, apiConfig: ApiConfig, userConfig?: Partial<I18nConfig>);
|
|
179
|
+
/**
|
|
180
|
+
* 获取初始语言设置
|
|
181
|
+
*/
|
|
182
|
+
private getInitialLocale;
|
|
183
|
+
/**
|
|
184
|
+
* 获取 i18n 实例
|
|
185
|
+
*/
|
|
186
|
+
getI18n(): I18n;
|
|
187
|
+
/**
|
|
188
|
+
* 翻译函数
|
|
189
|
+
*/
|
|
190
|
+
$t: (key: string, params?: any) => string;
|
|
191
|
+
/**
|
|
192
|
+
* 获取语言包热数据
|
|
193
|
+
*/
|
|
194
|
+
fetchLangDictHotData: () => Promise<void>;
|
|
195
|
+
/**
|
|
196
|
+
* 更新国际化语言包
|
|
197
|
+
*/
|
|
198
|
+
updateI18nMessages: (langDictData: any, saveToCache?: boolean) => Promise<void>;
|
|
199
|
+
/**
|
|
200
|
+
* 切换语言
|
|
201
|
+
*/
|
|
202
|
+
switchLocale: (locale: any) => void;
|
|
203
|
+
/**
|
|
204
|
+
* 获取当前语言
|
|
205
|
+
*/
|
|
206
|
+
getCurrentLocale: () => string;
|
|
207
|
+
/**
|
|
208
|
+
* 获取 i18n 语言标识
|
|
209
|
+
*/
|
|
210
|
+
getI18nLang: () => string;
|
|
211
|
+
/**
|
|
212
|
+
* 获取请求头语言标识
|
|
213
|
+
*/
|
|
214
|
+
getHeaderLang: () => string;
|
|
215
|
+
/**
|
|
216
|
+
* 立即上报缺失键
|
|
217
|
+
*/
|
|
218
|
+
flushMissingKeys: () => Promise<void>;
|
|
219
|
+
/**
|
|
220
|
+
* 获取翻译键统计信息
|
|
221
|
+
*/
|
|
222
|
+
getTranslationKeysStats: () => TranslationKeysStats & {
|
|
223
|
+
reportedKeys?: {
|
|
224
|
+
[domainCode: string]: number;
|
|
225
|
+
};
|
|
226
|
+
};
|
|
227
|
+
/**
|
|
228
|
+
* 检查语言包是否存在
|
|
229
|
+
*/
|
|
230
|
+
hasLocale: (locale: string) => boolean;
|
|
231
|
+
/**
|
|
232
|
+
* 变量替换
|
|
233
|
+
*/
|
|
234
|
+
interpolateVariables: (template: string, params?: any, options?: any) => string;
|
|
235
|
+
/**
|
|
236
|
+
* 获取缓存的语言设置
|
|
237
|
+
*/
|
|
238
|
+
getCachedLocale: () => string | null;
|
|
239
|
+
/**
|
|
240
|
+
* 保存语言设置到缓存
|
|
241
|
+
*/
|
|
242
|
+
saveLocaleToCache: (locale: string) => void;
|
|
243
|
+
/**
|
|
244
|
+
* 清除语言包缓存
|
|
245
|
+
*/
|
|
246
|
+
clearLangDictCache: () => void;
|
|
247
|
+
/**
|
|
248
|
+
* 清空已上报键缓存
|
|
249
|
+
*/
|
|
250
|
+
clearReportedKeysCache: () => void;
|
|
251
|
+
/**
|
|
252
|
+
* 获取缓存内存使用情况(用于监控和调试)
|
|
253
|
+
*/
|
|
254
|
+
getCacheMemoryInfo: () => {
|
|
255
|
+
reportedKeysCount: number;
|
|
256
|
+
maxReportedKeysCache: number;
|
|
257
|
+
usagePercentage: number;
|
|
258
|
+
missingKeysCount: number;
|
|
259
|
+
usedKeysCount: number;
|
|
260
|
+
};
|
|
261
|
+
/**
|
|
262
|
+
* 创建国际化代理对象
|
|
263
|
+
* 用于创建一个对象,当访问属性时自动通过翻译函数进行国际化转换
|
|
264
|
+
*
|
|
265
|
+
* @param data 原始数据对象
|
|
266
|
+
* @param config 配置选项
|
|
267
|
+
* @returns 代理对象
|
|
268
|
+
*
|
|
269
|
+
* @example
|
|
270
|
+
* ```typescript
|
|
271
|
+
* const roleNames = i18nInstance.createI18nProxy({
|
|
272
|
+
* PRODUCING_AREA: 'role.PRODUCING_AREA',
|
|
273
|
+
* PRESENTATION_AREA: 'role.PRESENTATION_AREA'
|
|
274
|
+
* })
|
|
275
|
+
*
|
|
276
|
+
* // 访问时会自动调用翻译函数
|
|
277
|
+
* console.log(roleNames.PRODUCING_AREA)
|
|
278
|
+
* console.log(roleNames['PRODUCING_AREA'])
|
|
279
|
+
* ```
|
|
280
|
+
*/
|
|
281
|
+
createI18nProxy: <T extends Record<string, string>>(data: T, config?: I18nProxyConfig) => T;
|
|
282
|
+
/**
|
|
283
|
+
* 创建枚举类型的国际化代理
|
|
284
|
+
* 专门用于处理枚举值到翻译键的映射
|
|
285
|
+
*
|
|
286
|
+
* @param enumObject 枚举对象
|
|
287
|
+
* @param config 额外配置
|
|
288
|
+
* @returns 代理对象
|
|
289
|
+
*
|
|
290
|
+
* @example
|
|
291
|
+
* ```typescript
|
|
292
|
+
* const statusEnum = i18nInstance.createEnumI18nProxy({
|
|
293
|
+
* ACTIVE: 'status.active',
|
|
294
|
+
* INACTIVE: 'status.inactive'
|
|
295
|
+
* })
|
|
296
|
+
* ```
|
|
297
|
+
*/
|
|
298
|
+
createEnumI18nProxy: <T extends Record<string, string>>(enumObject: T, config?: I18nProxyConfig) => T;
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* 创建 MeetFun I18n 实例的工厂函数
|
|
302
|
+
*
|
|
303
|
+
* @param baseMessages 基础语言包
|
|
304
|
+
* @param apiConfig API 配置
|
|
305
|
+
* @param userConfig 用户配置
|
|
306
|
+
* @returns MeetFunI18n 实例
|
|
307
|
+
*
|
|
308
|
+
* @example
|
|
309
|
+
* ```typescript
|
|
310
|
+
* import { createMeetFunI18n } from '@meetfun/i18n'
|
|
311
|
+
* import zhHans from './locales/zh-Hans.json'
|
|
312
|
+
* import zhHant from './locales/zh-Hant.json'
|
|
313
|
+
* import en from './locales/en.json'
|
|
314
|
+
* import { queryLangDictHotData, queryLangDictColdData } from './api/translate'
|
|
315
|
+
*
|
|
316
|
+
* const baseMessages = {
|
|
317
|
+
* 'zh-Hans': zhHans,
|
|
318
|
+
* 'zh-Hant': zhHant,
|
|
319
|
+
* en: en,
|
|
320
|
+
* }
|
|
321
|
+
*
|
|
322
|
+
* const apiConfig = {
|
|
323
|
+
* queryLangDictHotData,
|
|
324
|
+
* queryLangDictColdData,
|
|
325
|
+
* }
|
|
326
|
+
*
|
|
327
|
+
* const i18nInstance = createMeetFunI18n(baseMessages, apiConfig, {
|
|
328
|
+
* defaultLocale: 'zh-Hans',
|
|
329
|
+
* defaultLangDictDomainCode: 'TALENTS',
|
|
330
|
+
* systemCode: 'TALENTS_STUDENT',
|
|
331
|
+
* debug: true, // 启用调试模式,会输出详细日志
|
|
332
|
+
* onLocaleChanged: (payload) => {
|
|
333
|
+
* console.log('语言已切换:', payload.targetLocale)
|
|
334
|
+
* // 可以在这里执行其他需要的操作
|
|
335
|
+
* }
|
|
336
|
+
* })
|
|
337
|
+
*
|
|
338
|
+
* // 在 main.ts 中安装
|
|
339
|
+
* app.use(i18nInstance.getI18n())
|
|
340
|
+
*
|
|
341
|
+
* // 使用翻译函数
|
|
342
|
+
* const text = i18nInstance.$t('welcomeMessage')
|
|
343
|
+
* ```
|
|
344
|
+
*/
|
|
345
|
+
declare function createMeetFunI18n(baseMessages: Record<string, any>, apiConfig: ApiConfig, userConfig?: Partial<I18nConfig>): MeetFunI18n;
|
|
346
|
+
|
|
347
|
+
export { LANGUAGE_OPTIONS_CONFIGURATION, MeetFunI18n, createMeetFunI18n, createMeetFunI18n as default };
|
|
348
|
+
export type { ApiConfig, ApiRequestFunction, DomainCodeDictKey, I18nConfig, I18nProxyConfig, InterpolateOptions, LangDictCacheData, LangDictData, LangDictResponse, LanguageOptionsConfigurationType, LocaleChangedPayload, MissingKeyCache, QueryLangDictColdDataFunction, QueryLangDictColdDataParams, QueryLangDictHotDataFunction, SystemLangDict, TranslationKeysStats, UsedKeyCache };
|