@@ -31,6 +31,13 @@ import { isEmptyObject, warn } from './utils'
31
31
import { devtoolsRegisterI18n } from './devtools'
32
32
import { VERSION } from './misc'
33
33
34
+ declare module '@vue/runtime-core' {
35
+ // eslint-disable-next-line
36
+ interface App < HostElement = any > {
37
+ __VUE_I18N__ ?: I18n & I18nInternal
38
+ }
39
+ }
40
+
34
41
/**
35
42
* I18n Options for `createI18n`
36
43
*
@@ -89,6 +96,7 @@ export interface I18n<Messages = {}, DateTimeFormats = {}, NumberFormats = {}> {
89
96
* @internal
90
97
*/
91
98
export interface I18nInternal {
99
+ __instances : Map < ComponentInternalInstance , VueI18n | Composer >
92
100
__getInstance <
93
101
Messages ,
94
102
DateTimeFormats ,
@@ -248,7 +256,11 @@ export function createI18n<
248
256
get mode ( ) : I18nMode {
249
257
return __legacyMode ? 'legacy' : 'composable'
250
258
} ,
259
+ // install plugin
251
260
install ( app : App , ...options : unknown [ ] ) : void {
261
+ if ( __DEV__ || __FEATURE_PROD_DEVTOOLS__ ) {
262
+ app . __VUE_I18N__ = i18n as I18n & I18nInternal
263
+ }
252
264
apply < Messages , DateTimeFormats , NumberFormats > ( app , i18n , ...options )
253
265
if ( __legacyMode ) {
254
266
app . mixin (
@@ -264,6 +276,7 @@ export function createI18n<
264
276
)
265
277
}
266
278
} ,
279
+ // global composer accsessor
267
280
get global ( ) : Composer < Messages , DateTimeFormats , NumberFormats > {
268
281
return __legacyMode
269
282
? ( ( ( __global as unknown ) as VueI18nInternal <
@@ -273,18 +286,23 @@ export function createI18n<
273
286
> ) . __composer as Composer < Messages , DateTimeFormats , NumberFormats > )
274
287
: ( __global as Composer < Messages , DateTimeFormats , NumberFormats > )
275
288
} ,
289
+ // @internal
290
+ __instances,
291
+ // @internal
276
292
__getInstance <
277
293
M extends Messages ,
278
294
Instance extends VueI18n < M > | Composer < M >
279
295
> ( component : ComponentInternalInstance ) : Instance | null {
280
296
return ( ( __instances . get ( component ) as unknown ) as Instance ) || null
281
297
} ,
298
+ // @internal
282
299
__setInstance <
283
300
M extends Messages ,
284
301
Instance extends VueI18n < M > | Composer < M >
285
302
> ( component : ComponentInternalInstance , instance : Instance ) : void {
286
303
__instances . set ( component , instance )
287
304
} ,
305
+ // @internal
288
306
__deleteInstance ( component : ComponentInternalInstance ) : void {
289
307
__instances . delete ( component )
290
308
}
@@ -504,15 +522,19 @@ function setupLifeCycle<Messages, DateTimeFormats, NumberFormats>(
504
522
) : void {
505
523
onMounted ( ( ) => {
506
524
// inject composer instance to DOM for intlify-devtools
507
- if ( target . vnode . el ) {
508
- target . vnode . el . __intlify__ = composer
525
+ if ( ( __DEV__ || __FEATURE_PROD_DEVTOOLS__ ) && target . vnode . el ) {
526
+ target . vnode . el . __INTLIFY__ = composer
509
527
}
510
528
} , target )
511
529
512
530
onUnmounted ( ( ) => {
513
531
// remove composer instance from DOM for intlify-devtools
514
- if ( target . vnode . el && target . vnode . el . __INTLIFY__ ) {
515
- delete target . vnode . el . __intlify__
532
+ if (
533
+ ( __DEV__ || __FEATURE_PROD_DEVTOOLS__ ) &&
534
+ target . vnode . el &&
535
+ target . vnode . el . __INTLIFY__
536
+ ) {
537
+ delete target . vnode . el . __INTLIFY__
516
538
}
517
539
i18n . __deleteInstance ( target )
518
540
} , target )
0 commit comments