@@ -62,32 +62,37 @@ export async function loadInitialMessages<Context extends NuxtApp = NuxtApp>(
62
62
initialLocale : Locale
63
63
fallbackLocale : FallbackLocale
64
64
localeCodes : string [ ]
65
- }
65
+ } ,
66
+ nuxt : { runWithContext : NuxtApp [ 'runWithContext' ] }
66
67
// eslint-disable-next-line @typescript-eslint/no-explicit-any
67
68
) : Promise < Record < string , any > > {
68
69
const { defaultLocale, initialLocale, localeCodes, fallbackLocale, lazy } = options
69
70
70
71
// load fallback messages
71
72
if ( lazy && fallbackLocale ) {
72
73
const fallbackLocales = makeFallbackLocaleCodes ( fallbackLocale , [ defaultLocale , initialLocale ] )
73
- await Promise . all ( fallbackLocales . map ( locale => loadAndSetLocaleMessages ( locale , localeLoaders , messages ) ) )
74
+ await Promise . all ( fallbackLocales . map ( locale => loadAndSetLocaleMessages ( locale , localeLoaders , messages , nuxt ) ) )
74
75
}
75
76
76
77
// load initial messages
77
78
const locales = lazy ? [ ...new Set < Locale > ( ) . add ( defaultLocale ) . add ( initialLocale ) ] : localeCodes
78
- await Promise . all ( locales . map ( ( locale : Locale ) => loadAndSetLocaleMessages ( locale , localeLoaders , messages ) ) )
79
+ await Promise . all ( locales . map ( ( locale : Locale ) => loadAndSetLocaleMessages ( locale , localeLoaders , messages , nuxt ) ) )
79
80
80
81
return messages
81
82
}
82
83
83
- async function loadMessage ( locale : Locale , { key, load } : LocaleLoader ) {
84
+ async function loadMessage (
85
+ locale : Locale ,
86
+ { key, load } : LocaleLoader ,
87
+ nuxt : { runWithContext : NuxtApp [ 'runWithContext' ] }
88
+ ) {
84
89
const logger = /*#__PURE__*/ createLogger ( 'loadMessage' )
85
90
let message : LocaleMessages < DefineLocaleMessage > | null = null
86
91
try {
87
92
__DEBUG__ && logger . log ( { locale } )
88
93
const getter = await load ( ) . then ( r => ( 'default' in r ? r . default : r ) )
89
94
if ( isFunction ( getter ) ) {
90
- message = await getter ( locale )
95
+ message = await nuxt . runWithContext ( ( ) => getter ( locale ) )
91
96
__DEBUG__ && logger . log ( 'dynamic load' , logger . level >= 999 ? message : '' )
92
97
} else {
93
98
message = getter
@@ -105,7 +110,8 @@ async function loadMessage(locale: Locale, { key, load }: LocaleLoader) {
105
110
export async function loadLocale (
106
111
locale : Locale ,
107
112
localeLoaders : Record < Locale , LocaleLoader [ ] > ,
108
- setter : ( locale : Locale , message : LocaleMessages < DefineLocaleMessage > ) => void
113
+ setter : ( locale : Locale , message : LocaleMessages < DefineLocaleMessage > ) => void ,
114
+ nuxt : { runWithContext : NuxtApp [ 'runWithContext' ] }
109
115
) {
110
116
const logger = /*#__PURE__*/ createLogger ( 'loadLocale' )
111
117
const loaders = localeLoaders [ locale ]
@@ -125,7 +131,7 @@ export async function loadLocale(
125
131
} else {
126
132
__DEBUG__ && ! loader . cache && logger . log ( loader . key + ' bypassing cache!' )
127
133
__DEBUG__ && logger . log ( loader . key + ' is loading ...' )
128
- message = await loadMessage ( locale , loader )
134
+ message = await nuxt . runWithContext ( ( ) => loadMessage ( locale , loader , nuxt ) )
129
135
}
130
136
131
137
if ( message != null ) {
@@ -142,13 +148,14 @@ type LocaleLoaderMessages =
142
148
export async function loadAndSetLocaleMessages (
143
149
locale : Locale ,
144
150
localeLoaders : Record < Locale , LocaleLoader [ ] > ,
145
- messages : LocaleLoaderMessages
151
+ messages : LocaleLoaderMessages ,
152
+ nuxt : { runWithContext : NuxtApp [ 'runWithContext' ] }
146
153
) {
147
154
const setter = ( locale : Locale , message : LocaleMessages < DefineLocaleMessage , Locale > ) => {
148
155
const base = messages [ locale ] || { }
149
156
deepCopy ( message , base )
150
157
messages [ locale ] = base
151
158
}
152
159
153
- await loadLocale ( locale , localeLoaders , setter )
160
+ await loadLocale ( locale , localeLoaders , setter , nuxt )
154
161
}
0 commit comments