@umijs/plugins 4.0.0-beta.8 → 4.0.0-canary-20240513.3

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.
Files changed (98) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +4 -1
  3. package/dist/access.d.ts +1 -1
  4. package/dist/access.js +194 -4
  5. package/dist/{sass.d.ts → analytics.d.ts} +1 -1
  6. package/dist/analytics.js +118 -0
  7. package/dist/antd.d.ts +1 -1
  8. package/dist/antd.js +345 -157
  9. package/dist/{icons.d.ts → confetti.d.ts} +1 -1
  10. package/dist/confetti.js +64 -0
  11. package/dist/constants.d.ts +1 -0
  12. package/dist/constants.js +30 -0
  13. package/dist/dva.d.ts +4 -1
  14. package/dist/dva.js +302 -8
  15. package/dist/initial-state.d.ts +1 -1
  16. package/dist/initial-state.js +147 -4
  17. package/dist/layout.d.ts +1 -1
  18. package/dist/layout.js +754 -4
  19. package/dist/locale.d.ts +2 -1
  20. package/dist/locale.js +257 -4
  21. package/dist/mf.d.ts +2 -0
  22. package/dist/mf.js +358 -0
  23. package/dist/model.d.ts +1 -1
  24. package/dist/model.js +109 -4
  25. package/dist/moment2dayjs.d.ts +3 -0
  26. package/dist/moment2dayjs.js +125 -0
  27. package/dist/qiankun/constants.d.ts +5 -0
  28. package/dist/qiankun/constants.js +41 -0
  29. package/dist/qiankun/master.d.ts +6 -0
  30. package/dist/qiankun/master.js +236 -0
  31. package/dist/qiankun/slave.d.ts +3 -0
  32. package/dist/qiankun/slave.js +345 -0
  33. package/dist/qiankun.d.ts +1 -1
  34. package/dist/qiankun.js +51 -4
  35. package/dist/react-query.d.ts +3 -0
  36. package/dist/react-query.js +193 -0
  37. package/dist/request.d.ts +1 -1
  38. package/dist/request.js +384 -4
  39. package/dist/styled-components.d.ts +3 -0
  40. package/dist/styled-components.js +150 -0
  41. package/dist/tailwindcss.d.ts +3 -0
  42. package/dist/tailwindcss.js +106 -0
  43. package/dist/unocss.d.ts +3 -0
  44. package/dist/unocss.js +71 -0
  45. package/dist/utils/astUtils.d.ts +3 -0
  46. package/dist/utils/astUtils.js +49 -0
  47. package/dist/utils/localeUtils.d.ts +33 -0
  48. package/dist/utils/localeUtils.js +139 -0
  49. package/dist/utils/mfUtils.d.ts +14 -0
  50. package/dist/utils/mfUtils.js +56 -0
  51. package/dist/utils/modelUtils.d.ts +40 -0
  52. package/dist/utils/modelUtils.js +286 -0
  53. package/dist/utils/resolveProjectDep.d.ts +5 -0
  54. package/dist/utils/resolveProjectDep.js +40 -0
  55. package/dist/utils/withTmpPath.d.ts +6 -0
  56. package/dist/utils/withTmpPath.js +39 -0
  57. package/dist/valtio.d.ts +3 -0
  58. package/dist/valtio.js +81 -0
  59. package/libs/dva.tsx +45 -0
  60. package/libs/model.tsx +180 -0
  61. package/libs/qiankun/master/AntdErrorBoundary.tsx +34 -0
  62. package/libs/qiankun/master/AntdLoader.tsx +15 -0
  63. package/libs/qiankun/master/ErrorBoundary.tsx +7 -0
  64. package/libs/qiankun/master/MicroApp.tsx +327 -0
  65. package/libs/qiankun/master/MicroAppWithMemoHistory.tsx +43 -0
  66. package/libs/qiankun/master/common.ts +172 -0
  67. package/libs/qiankun/master/constants.ts +19 -0
  68. package/libs/qiankun/master/getMicroAppRouteComponent.tsx.tpl +45 -0
  69. package/libs/qiankun/master/masterRuntimePlugin.tsx +161 -0
  70. package/libs/qiankun/master/routeUtils.ts +26 -0
  71. package/libs/qiankun/master/types.ts +54 -0
  72. package/libs/qiankun/slave/MicroAppLink.tsx +122 -0
  73. package/libs/qiankun/slave/connectMaster.tsx +14 -0
  74. package/libs/qiankun/slave/constants.ts +5 -0
  75. package/libs/qiankun/slave/lifecycles.ts +164 -0
  76. package/libs/qiankun/slave/qiankunModel.ts +18 -0
  77. package/libs/qiankun/slave/slaveRuntimePlugin.ts +36 -0
  78. package/package.json +54 -24
  79. package/templates/antd/runtime.ts.tpl +170 -0
  80. package/templates/antd/types.d.ts.tpl +17 -0
  81. package/templates/locale/SelectLang.tpl +502 -0
  82. package/templates/locale/locale.tpl +82 -0
  83. package/templates/locale/localeExports.tpl +307 -0
  84. package/templates/locale/runtime.tpl +34 -0
  85. package/templates/mf/runtime.ts.tpl +149 -0
  86. package/dist/access.d.ts.map +0 -1
  87. package/dist/antd.d.ts.map +0 -1
  88. package/dist/dva.d.ts.map +0 -1
  89. package/dist/icons.d.ts.map +0 -1
  90. package/dist/icons.js +0 -5
  91. package/dist/initial-state.d.ts.map +0 -1
  92. package/dist/layout.d.ts.map +0 -1
  93. package/dist/locale.d.ts.map +0 -1
  94. package/dist/model.d.ts.map +0 -1
  95. package/dist/qiankun.d.ts.map +0 -1
  96. package/dist/request.d.ts.map +0 -1
  97. package/dist/sass.d.ts.map +0 -1
  98. package/dist/sass.js +0 -5
@@ -0,0 +1,502 @@
1
+ import React,{ useState } from 'react';
2
+ {{#Antd}}
3
+ import { Menu, version, Dropdown } from 'antd';
4
+ import { ClickParam } from 'antd/{{{antdFiles}}}/menu';
5
+ import { DropDownProps } from 'antd/{{{antdFiles}}}/dropdown';
6
+ {{/Antd}}
7
+ import { getLocale, getAllLocales, setLocale } from './localeExports';
8
+
9
+ {{#Antd}}
10
+ export interface HeaderDropdownProps extends DropDownProps {
11
+ overlayClassName?: string;
12
+ placement?:
13
+ | 'bottomLeft'
14
+ | 'bottomRight'
15
+ | 'topLeft'
16
+ | 'topCenter'
17
+ | 'topRight'
18
+ | 'bottomCenter';
19
+ }
20
+
21
+ const HeaderDropdown: React.FC<HeaderDropdownProps> = ({
22
+ overlayClassName: cls,
23
+ ...restProps
24
+ }) => (
25
+ <Dropdown
26
+ overlayClassName={cls}
27
+ {...restProps}
28
+ />
29
+ );
30
+ {{/Antd}}
31
+
32
+ interface LocalData {
33
+ lang: string,
34
+ label?: string,
35
+ icon?: string,
36
+ title?: string,
37
+ }
38
+
39
+ interface SelectLangProps {
40
+ globalIconClassName?: string;
41
+ postLocalesData?: (locales: LocalData[]) => LocalData[];
42
+ onItemClick?: (params: ClickParam) => void;
43
+ className?: string;
44
+ reload?: boolean;
45
+ icon?: React.ReactNode;
46
+ style?: React.CSSProperties;
47
+ }
48
+
49
+ const transformArrayToObject = (allLangUIConfig:LocalData[])=>{
50
+ return allLangUIConfig.reduce((obj, item) => {
51
+ if(!item.lang){
52
+ return obj;
53
+ }
54
+
55
+ return {
56
+ ...obj,
57
+ [item.lang]: item,
58
+ };
59
+ }, {});
60
+ }
61
+
62
+ const defaultLangUConfigMap = {
63
+ 'ar-EG': {
64
+ lang: 'ar-EG',
65
+ label: 'العربية',
66
+ icon: '🇪🇬',
67
+ title: 'لغة'
68
+ },
69
+ 'az-AZ': {
70
+ lang: 'az-AZ',
71
+ label: 'Azərbaycan dili',
72
+ icon: '🇦🇿',
73
+ title: 'Dil'
74
+ },
75
+ 'bg-BG': {
76
+ lang: 'bg-BG',
77
+ label: 'Български език',
78
+ icon: '🇧🇬',
79
+ title: 'език'
80
+ },
81
+ 'bn-BD': {
82
+ lang: 'bn-BD',
83
+ label: 'বাংলা',
84
+ icon: '🇧🇩',
85
+ title: 'ভাষা'
86
+ },
87
+ 'ca-ES': {
88
+ lang: 'ca-ES',
89
+ label: 'Catalá',
90
+ icon: '🇨🇦',
91
+ title: 'llengua'
92
+ },
93
+ 'cs-CZ': {
94
+ lang: 'cs-CZ',
95
+ label: 'Čeština',
96
+ icon: '🇨🇿',
97
+ title: 'Jazyk'
98
+ },
99
+ 'da-DK': {
100
+ lang: 'da-DK',
101
+ label: 'Dansk',
102
+ icon: '🇩🇰',
103
+ title: 'Sprog'
104
+ },
105
+ 'de-DE': {
106
+ lang: 'de-DE',
107
+ label: 'Deutsch',
108
+ icon: '🇩🇪',
109
+ title: 'Sprache'
110
+ },
111
+ 'el-GR': {
112
+ lang: 'el-GR',
113
+ label: 'Ελληνικά',
114
+ icon: '🇬🇷',
115
+ title: 'Γλώσσα'
116
+ },
117
+ 'en-GB': {
118
+ lang: 'en-GB',
119
+ label: 'English',
120
+ icon: '🇬🇧',
121
+ title: 'Language'
122
+ },
123
+ 'en-US': {
124
+ lang: 'en-US',
125
+ label: 'English',
126
+ icon: '🇺🇸',
127
+ title: 'Language'
128
+ },
129
+ 'es-ES': {
130
+ lang: 'es-ES',
131
+ label: 'Español',
132
+ icon: '🇪🇸',
133
+ title: 'Idioma'
134
+ },
135
+ 'et-EE': {
136
+ lang: 'et-EE',
137
+ label: 'Eesti',
138
+ icon: '🇪🇪',
139
+ title: 'Keel'
140
+ },
141
+ 'fa-IR': {
142
+ lang: 'fa-IR',
143
+ label: 'فارسی',
144
+ icon: '🇮🇷',
145
+ title: 'زبان'
146
+ },
147
+ 'fi-FI': {
148
+ lang: 'fi-FI',
149
+ label: 'Suomi',
150
+ icon: '🇫🇮',
151
+ title: 'Kieli'
152
+ },
153
+ 'fr-BE': {
154
+ lang: 'fr-BE',
155
+ label: 'Français',
156
+ icon: '🇧🇪',
157
+ title: 'Langue'
158
+ },
159
+ 'fr-FR': {
160
+ lang: 'fr-FR',
161
+ label: 'Français',
162
+ icon: '🇫🇷',
163
+ title: 'Langue'
164
+ },
165
+ 'ga-IE': {
166
+ lang: 'ga-IE',
167
+ label: 'Gaeilge',
168
+ icon: '🇮🇪',
169
+ title: 'Teanga'
170
+ },
171
+ 'he-IL': {
172
+ lang: 'he-IL',
173
+ label: 'עברית',
174
+ icon: '🇮🇱',
175
+ title: 'שפה'
176
+ },
177
+ 'hi-IN': {
178
+ lang: 'hi-IN',
179
+ label: 'हिन्दी, हिंदी',
180
+ icon: '🇮🇳',
181
+ title: 'भाषा: हिन्दी'
182
+ },
183
+ 'hr-HR': {
184
+ lang: 'hr-HR',
185
+ label: 'Hrvatski jezik',
186
+ icon: '🇭🇷',
187
+ title: 'Jezik'
188
+ },
189
+ 'hu-HU': {
190
+ lang: 'hu-HU',
191
+ label: 'Magyar',
192
+ icon: '🇭🇺',
193
+ title: 'Nyelv'
194
+ },
195
+ 'hy-AM': {
196
+ lang: 'hu-HU',
197
+ label: 'Հայերեն',
198
+ icon: '🇦🇲',
199
+ title: 'Լեզու'
200
+ },
201
+ 'id-ID': {
202
+ lang: 'id-ID',
203
+ label: 'Bahasa Indonesia',
204
+ icon: '🇮🇩',
205
+ title: 'Bahasa'
206
+ },
207
+ 'it-IT': {
208
+ lang: 'it-IT',
209
+ label: 'Italiano',
210
+ icon: '🇮🇹',
211
+ title: 'Linguaggio'
212
+ },
213
+ 'is-IS': {
214
+ lang: 'is-IS',
215
+ label: 'Íslenska',
216
+ icon: '🇮🇸',
217
+ title: 'Tungumál'
218
+ },
219
+ 'ja-JP': {
220
+ lang: 'ja-JP',
221
+ label: '日本語',
222
+ icon: '🇯🇵',
223
+ title: '言語'
224
+ },
225
+ 'ku-IQ': {
226
+ lang: 'ku-IQ',
227
+ label: 'کوردی',
228
+ icon: '🇮🇶',
229
+ title: 'Ziman'
230
+ },
231
+ 'kn-IN': {
232
+ lang: 'kn-IN',
233
+ label: 'ಕನ್ನಡ',
234
+ icon: '🇮🇳',
235
+ title: 'ಭಾಷೆ'
236
+ },
237
+ 'ko-KR': {
238
+ lang: 'ko-KR',
239
+ label: '한국어',
240
+ icon: '🇰🇷',
241
+ title: '언어'
242
+ },
243
+ 'lv-LV': {
244
+ lang: 'lv-LV',
245
+ label: 'Latviešu valoda',
246
+ icon: '🇱🇮',
247
+ title: 'Kalba'
248
+ },
249
+ 'mk-MK': {
250
+ lang: 'mk-MK',
251
+ label: 'македонски јазик',
252
+ icon: '🇲🇰',
253
+ title: 'Јазик'
254
+ },
255
+ 'mn-MN': {
256
+ lang: 'mn-MN',
257
+ label: 'Монгол хэл',
258
+ icon: '🇲🇳',
259
+ title: 'Хэл'
260
+ },
261
+ 'ms-MY': {
262
+ lang: 'ms-MY',
263
+ label: 'بهاس ملايو‎',
264
+ icon: '🇲🇾',
265
+ title: 'Bahasa'
266
+ },
267
+ 'nb-NO': {
268
+ lang: 'nb-NO',
269
+ label: 'Norsk',
270
+ icon: '🇳🇴',
271
+ title: 'Språk'
272
+ },
273
+ 'ne-NP': {
274
+ lang: 'ne-NP',
275
+ label: 'नेपाली',
276
+ icon: '🇳🇵',
277
+ title: 'भाषा'
278
+ },
279
+ 'nl-BE': {
280
+ lang: 'nl-BE',
281
+ label: 'Vlaams',
282
+ icon: '🇧🇪',
283
+ title: 'Taal'
284
+ },
285
+ 'nl-NL': {
286
+ lang: 'nl-NL',
287
+ label: 'Nederlands',
288
+ icon: '🇳🇱',
289
+ title: 'Taal'
290
+ },
291
+ 'pl-PL': {
292
+ lang: 'pl-PL',
293
+ label: 'Polski',
294
+ icon: '🇵🇱',
295
+ title: 'Język'
296
+ },
297
+ 'pt-BR': {
298
+ lang: 'pt-BR',
299
+ label: 'Português',
300
+ icon: '🇧🇷',
301
+ title: 'Idiomas'
302
+ },
303
+ 'pt-PT': {
304
+ lang: 'pt-PT',
305
+ label: 'Português',
306
+ icon: '🇵🇹',
307
+ title: 'Idiomas'
308
+ },
309
+ 'ro-RO': {
310
+ lang: 'ro-RO',
311
+ label: 'Română',
312
+ icon: '🇷🇴',
313
+ title: 'Limba'
314
+ },
315
+ 'ru-RU': {
316
+ lang: 'ru-RU',
317
+ label: 'Русский',
318
+ icon: '🇷🇺',
319
+ title: 'язык'
320
+ },
321
+ 'sk-SK': {
322
+ lang: 'sk-SK',
323
+ label: 'Slovenčina',
324
+ icon: '🇸🇰',
325
+ title: 'Jazyk'
326
+ },
327
+ 'sr-RS': {
328
+ lang: 'sr-RS',
329
+ label: 'српски језик',
330
+ icon: '🇸🇷',
331
+ title: 'Језик'
332
+ },
333
+ 'sl-SI': {
334
+ lang: 'sl-SI',
335
+ label: 'Slovenščina',
336
+ icon: '🇸🇱',
337
+ title: 'Jezik'
338
+ },
339
+ 'sv-SE': {
340
+ lang: 'sv-SE',
341
+ label: 'Svenska',
342
+ icon: '🇸🇪',
343
+ title: 'Språk'
344
+ },
345
+ 'ta-IN': {
346
+ lang: 'ta-IN',
347
+ label: 'தமிழ்',
348
+ icon: '🇮🇳',
349
+ title: 'மொழி'
350
+ },
351
+ 'th-TH': {
352
+ lang: 'th-TH',
353
+ label: 'ไทย',
354
+ icon: '🇹🇭',
355
+ title: 'ภาษา'
356
+ },
357
+ 'tr-TR': {
358
+ lang: 'tr-TR',
359
+ label: 'Türkçe',
360
+ icon: '🇹🇷',
361
+ title: 'Dil'
362
+ },
363
+ 'uk-UA': {
364
+ lang: 'uk-UA',
365
+ label: 'Українська',
366
+ icon: '🇺🇰',
367
+ title: 'Мова'
368
+ },
369
+ 'vi-VN': {
370
+ lang: 'vi-VN',
371
+ label: 'Tiếng Việt',
372
+ icon: '🇻🇳',
373
+ title: 'Ngôn ngữ'
374
+ },
375
+ 'zh-CN': {
376
+ lang: 'zh-CN',
377
+ label: '简体中文',
378
+ icon: '🇨🇳',
379
+ title: '语言'
380
+ },
381
+ 'zh-TW': {
382
+ lang: 'zh-TW',
383
+ label: '繁體中文',
384
+ icon: '🇭🇰',
385
+ title: '語言'
386
+ }
387
+ };
388
+
389
+ export const SelectLang: React.FC<SelectLangProps> = (props) => {
390
+ {{#ShowSelectLang}}
391
+ const {
392
+ globalIconClassName,
393
+ postLocalesData,
394
+ onItemClick,
395
+ icon,
396
+ style,
397
+ reload,
398
+ ...restProps
399
+ } = props;
400
+ const [selectedLang, setSelectedLang] = useState(() => getLocale());
401
+
402
+ const changeLang = ({ key }: ClickParam): void => {
403
+ setLocale(key, reload);
404
+ setSelectedLang(getLocale())
405
+ };
406
+
407
+
408
+ const defaultLangUConfig = getAllLocales().map(
409
+ (key) =>
410
+ defaultLangUConfigMap[key] || {
411
+ lang: key,
412
+ label: key,
413
+ icon: "🌐",
414
+ title: key,
415
+ }
416
+ );
417
+
418
+ const allLangUIConfig =
419
+ postLocalesData?.(defaultLangUConfig) || defaultLangUConfig;
420
+ const handleClick = onItemClick
421
+ ? (params: ClickParam) => onItemClick(params)
422
+ : changeLang;
423
+
424
+ const menuItemStyle = { minWidth: "160px" };
425
+ const menuItemIconStyle = { marginRight: "8px" };
426
+
427
+ const langMenu = {
428
+ selectedKeys: [selectedLang],
429
+ onClick: handleClick,
430
+ items: allLangUIConfig.map((localeObj) => ({
431
+ key: localeObj.lang || localeObj.key,
432
+ style: menuItemStyle,
433
+ label: (
434
+ <>
435
+ <span role="img" aria-label={localeObj?.label || 'en-US'} style={menuItemIconStyle}>
436
+ {localeObj?.icon || '🌐'}
437
+ </span>
438
+ {localeObj?.label || 'en-US'}
439
+ </>
440
+ ),
441
+ })),
442
+ };
443
+
444
+ // antd@5 和 4.24 之后推荐使用 menu,性能更好
445
+ let dropdownProps;
446
+ if (version.startsWith("5.") || version.startsWith("4.24.")) {
447
+ dropdownProps = { menu: langMenu };
448
+ } else if (version.startsWith("3.")) {
449
+ dropdownProps = {
450
+ overlay: (
451
+ <Menu>
452
+ {langMenu.items.map((item) => (
453
+ <Menu.Item key={item.key} onClick={item.onClick}>
454
+ {item.label}
455
+ </Menu.Item>
456
+ ))}
457
+ </Menu>
458
+ ),
459
+ };
460
+ } else { // 需要 antd 4.20.0 以上版本
461
+ dropdownProps = { overlay: <Menu {...langMenu} /> };
462
+ }
463
+
464
+ const inlineStyle = {
465
+ cursor: "pointer",
466
+ padding: "12px",
467
+ display: "inline-flex",
468
+ alignItems: "center",
469
+ justifyContent: "center",
470
+ fontSize: 18,
471
+ verticalAlign: "middle",
472
+ ...style,
473
+ };
474
+
475
+ return (
476
+ <HeaderDropdown {...dropdownProps} placement="bottomRight" {...restProps}>
477
+ <span className={globalIconClassName} style={inlineStyle}>
478
+ <i className="anticon" title={allLangUIConfig[selectedLang]?.title}>
479
+ { icon ?
480
+ icon : (
481
+ <svg
482
+ viewBox="0 0 24 24"
483
+ focusable="false"
484
+ width="1em"
485
+ height="1em"
486
+ fill="currentColor"
487
+ aria-hidden="true"
488
+ >
489
+ <path d="M0 0h24v24H0z" fill="none" />
490
+ <path
491
+ d="M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z "
492
+ className="css-c4d79v"
493
+ />
494
+ </svg>
495
+ )}
496
+ </i>
497
+ </span>
498
+ </HeaderDropdown>
499
+ );
500
+ {{/ShowSelectLang}}
501
+ return <></>
502
+ };
@@ -0,0 +1,82 @@
1
+ import React from 'react';
2
+ {{#Antd}}
3
+ import { ConfigProvider } from 'antd';
4
+ {{/Antd}}
5
+
6
+ {{#MomentLocales.length}}
7
+ import moment from '{{{momentPkgPath}}}';
8
+ {{#MomentLocales}}
9
+ import '{{{momentPkgPath}}}/locale/{{.}}';
10
+ {{/MomentLocales}}
11
+ {{/MomentLocales.length}}
12
+ import { RawIntlProvider, getLocale, getDirection , setIntl, getIntl, localeInfo, event, LANG_CHANGE_EVENT } from './localeExports';
13
+
14
+ {{#DefaultAntdLocales}}
15
+ import {{NormalizeAntdLocalesName}} from '{{{.}}}';
16
+ {{/DefaultAntdLocales}}
17
+
18
+
19
+
20
+ export function _onCreate() {
21
+ const locale = getLocale();
22
+ {{#MomentLocales.length}}
23
+ if (moment?.locale) {
24
+ moment.locale(localeInfo[locale]?.momentLocale || '{{{DefaultMomentLocale}}}');
25
+ }
26
+ {{/MomentLocales.length}}
27
+ setIntl(locale);
28
+ }
29
+
30
+ const useIsomorphicLayoutEffect =
31
+ typeof window !== 'undefined' &&
32
+ typeof window.document !== 'undefined' &&
33
+ typeof window.document.createElement !== 'undefined'
34
+ ? React.useLayoutEffect
35
+ : React.useEffect
36
+
37
+ export const _LocaleContainer = (props:any) => {
38
+ const initLocale = getLocale();
39
+ const [locale, setLocale] = React.useState(initLocale);
40
+ const [intl, setContainerIntl] = React.useState(() => getIntl(locale, true));
41
+
42
+ const handleLangChange = (locale:string) => {
43
+ {{#MomentLocales.length}}
44
+ if (moment?.locale) {
45
+ moment.locale(localeInfo[locale]?.momentLocale || 'en');
46
+ }
47
+ {{/MomentLocales.length}}
48
+ setLocale(locale);
49
+ setContainerIntl(getIntl(locale));
50
+ };
51
+
52
+ useIsomorphicLayoutEffect(() => {
53
+ event.on(LANG_CHANGE_EVENT, handleLangChange);
54
+ {{#Title}}
55
+ // avoid reset route title
56
+ if (typeof document !== 'undefined' && intl.messages['{{.}}']) {
57
+ document.title = intl.formatMessage({ id: '{{.}}' });
58
+ }
59
+ {{/Title}}
60
+ return () => {
61
+ event.off(LANG_CHANGE_EVENT, handleLangChange);
62
+ };
63
+ }, []);
64
+
65
+ {{#Antd}}
66
+ const defaultAntdLocale = {
67
+ {{#DefaultAntdLocales}}
68
+ ...{{NormalizeAntdLocalesName}},
69
+ {{/DefaultAntdLocales}}
70
+ }
71
+ const direction = getDirection();
72
+
73
+ return (
74
+ <ConfigProvider direction={direction} locale={localeInfo[locale]?.antd || defaultAntdLocale}>
75
+ <RawIntlProvider value={intl}>{props.children}</RawIntlProvider>
76
+ </ConfigProvider>
77
+ )
78
+ {{/Antd}}
79
+ {{^Antd}}
80
+ return <RawIntlProvider value={intl}>{props.children}</RawIntlProvider>;
81
+ {{/Antd}}
82
+ };