@@ -140,4 +140,65 @@ describe('custom locale detection', () => {
140
140
expect ( res . body ) . toEqual ( translated [ locale ] )
141
141
}
142
142
} )
143
+ test ( 'async parallel' , async ( ) => {
144
+ const sleep = ( ms : number ) => new Promise ( ( resolve ) => setTimeout ( resolve , ms ) )
145
+
146
+ const loader = ( path : string ) => import ( path ) . then ( ( m ) => m . default || m )
147
+ const messages : Record < string , ( ) => ReturnType < typeof loader > > = {
148
+ en : ( ) => loader ( './fixtures/en.json' ) ,
149
+ ja : ( ) => loader ( './fixtures/ja.json' ) ,
150
+ }
151
+
152
+ // async locale detector
153
+ const localeDetector = async (
154
+ event : H3Event ,
155
+ i18n : CoreContext < string , DefineLocaleMessage > ,
156
+ ) => {
157
+ const locale = getQueryLocale ( event ) . toString ( )
158
+ await sleep ( 100 )
159
+ const loader = messages [ locale ]
160
+ if ( loader && ! i18n . messages [ locale ] ) {
161
+ const message = await loader ( )
162
+ i18n . messages [ locale ] = message
163
+ }
164
+ return locale
165
+ }
166
+
167
+ const middleware = defineI18nMiddleware ( {
168
+ locale : localeDetector ,
169
+ messages : {
170
+ en : {
171
+ hello : 'hello, {name}' ,
172
+ } ,
173
+ } ,
174
+ } )
175
+ app = createApp ( { ...middleware } )
176
+ request = supertest ( toNodeListener ( app ) )
177
+
178
+ app . use (
179
+ '/' ,
180
+ eventHandler ( async ( event ) => {
181
+ await sleep ( 100 )
182
+ const t = await useTranslation ( event )
183
+ await sleep ( 100 )
184
+ return { message : t ( 'hello' , { name : 'h3' } ) }
185
+ } ) ,
186
+ )
187
+
188
+ const translated : Record < string , { message : string } > = {
189
+ en : {
190
+ message : 'hello, h3' ,
191
+ } ,
192
+ ja : {
193
+ message : 'こんにちは, h3' ,
194
+ } ,
195
+ }
196
+ // request in parallel
197
+ const resList = await Promise . all (
198
+ [ 'en' , 'ja' ] . map ( ( locale ) =>
199
+ request . get ( `/?locale=${ locale } ` ) . then ( ( res : { body : string } ) => res . body )
200
+ ) ,
201
+ )
202
+ expect ( resList ) . toEqual ( [ translated [ 'en' ] , translated [ 'ja' ] ] )
203
+ } )
143
204
} )
0 commit comments