@@ -16,6 +16,7 @@ import { postOrderDirectoryTraverse, preOrderDirectoryTraverse } from './utils/d
16
16
import generateReadme from './utils/generateReadme'
17
17
import generateIndex from './utils/generateIndex'
18
18
import getCommand from './utils/getCommand'
19
+ import getLanguage from './utils/getLanguage'
19
20
import renderEslint from './utils/renderEslint'
20
21
import { FILES_TO_FILTER } from './utils/filterList'
21
22
@@ -118,7 +119,7 @@ async function init() {
118
119
const defaultProjectName = ! targetDir ? 'vue-project' : targetDir
119
120
120
121
const forceOverwrite = argv . force
121
-
122
+ const language = getLanguage ( )
122
123
let result : {
123
124
projectName ?: string
124
125
shouldOverwrite ? : boolean
@@ -158,99 +159,105 @@ async function init() {
158
159
{
159
160
name : 'projectName' ,
160
161
type : targetDir ? null : 'text' ,
161
- message : 'Project name:' ,
162
+ message : language . projectName . message ,
162
163
initial : defaultProjectName ,
163
164
onState : ( state ) => ( targetDir = String ( state . value ) . trim ( ) || defaultProjectName )
164
165
} ,
165
166
{
166
167
name : 'shouldOverwrite' ,
167
- type : ( ) => ( canSkipEmptying ( targetDir ) || forceOverwrite ? null : 'confirm ' ) ,
168
+ type : ( ) => ( canSkipEmptying ( targetDir ) || forceOverwrite ? null : 'toggle ' ) ,
168
169
message : ( ) => {
169
170
const dirForPrompt =
170
- targetDir === '.' ? 'Current directory' : `Target directory "${ targetDir } "`
171
+ targetDir === '.'
172
+ ? language . shouldOverwrite . dirForPrompts . current
173
+ : `${ language . shouldOverwrite . dirForPrompts . target } "${ targetDir } "`
171
174
172
- return `${ dirForPrompt } is not empty. Remove existing files and continue?`
173
- }
175
+ return `${ dirForPrompt } ${ language . shouldOverwrite . message } `
176
+ } ,
177
+ initial : true ,
178
+ active : language . defaultToggleOptions . active ,
179
+ inactive : language . defaultToggleOptions . inactive
174
180
} ,
175
181
{
176
182
name : 'overwriteChecker' ,
177
183
type : ( prev , values ) => {
178
184
if ( values . shouldOverwrite === false ) {
179
- throw new Error ( red ( '✖' ) + ' Operation cancelled' )
185
+ throw new Error ( red ( '✖' ) + ` ${ language . errors . operationCancelled } ` )
180
186
}
181
187
return null
182
188
}
183
189
} ,
184
190
{
185
191
name : 'packageName' ,
186
192
type : ( ) => ( isValidPackageName ( targetDir ) ? null : 'text' ) ,
187
- message : 'Package name:' ,
193
+ message : language . packageName . message ,
188
194
initial : ( ) => toValidPackageName ( targetDir ) ,
189
- validate : ( dir ) => isValidPackageName ( dir ) || 'Invalid package.json name'
195
+ validate : ( dir ) => isValidPackageName ( dir ) || language . packageName . invalidMessage
190
196
} ,
191
197
{
192
198
name : 'needsTypeScript' ,
193
199
type : ( ) => ( isFeatureFlagsUsed ? null : 'toggle' ) ,
194
- message : 'Add TypeScript?' ,
200
+ message : language . needsTypeScript . message ,
195
201
initial : false ,
196
- active : 'Yes' ,
197
- inactive : 'No'
202
+ active : language . defaultToggleOptions . active ,
203
+ inactive : language . defaultToggleOptions . inactive
198
204
} ,
199
205
{
200
206
name : 'needsJsx' ,
201
207
type : ( ) => ( isFeatureFlagsUsed ? null : 'toggle' ) ,
202
- message : 'Add JSX Support?' ,
208
+ message : language . needsJsx . message ,
203
209
initial : false ,
204
- active : 'Yes' ,
205
- inactive : 'No'
210
+ active : language . defaultToggleOptions . active ,
211
+ inactive : language . defaultToggleOptions . inactive
206
212
} ,
207
213
{
208
214
name : 'needsRouter' ,
209
215
type : ( ) => ( isFeatureFlagsUsed ? null : 'toggle' ) ,
210
- message : 'Add Vue Router for Single Page Application development?' ,
216
+ message : language . needsRouter . message ,
211
217
initial : false ,
212
- active : 'Yes' ,
213
- inactive : 'No'
218
+ active : language . defaultToggleOptions . active ,
219
+ inactive : language . defaultToggleOptions . inactive
214
220
} ,
215
221
{
216
222
name : 'needsPinia' ,
217
223
type : ( ) => ( isFeatureFlagsUsed ? null : 'toggle' ) ,
218
- message : 'Add Pinia for state management?' ,
224
+ message : language . needsPinia . message ,
219
225
initial : false ,
220
- active : 'Yes' ,
221
- inactive : 'No'
226
+ active : language . defaultToggleOptions . active ,
227
+ inactive : language . defaultToggleOptions . inactive
222
228
} ,
223
229
{
224
230
name : 'needsVitest' ,
225
231
type : ( ) => ( isFeatureFlagsUsed ? null : 'toggle' ) ,
226
- message : 'Add Vitest for Unit Testing?' ,
232
+ message : language . needsVitest . message ,
227
233
initial : false ,
228
- active : 'Yes' ,
229
- inactive : 'No'
234
+ active : language . defaultToggleOptions . active ,
235
+ inactive : language . defaultToggleOptions . inactive
230
236
} ,
231
237
{
232
238
name : 'needsE2eTesting' ,
233
239
type : ( ) => ( isFeatureFlagsUsed ? null : 'select' ) ,
234
- message : 'Add an End-to-End Testing Solution?' ,
240
+ hint : language . needsE2eTesting . hint ,
241
+ message : language . needsE2eTesting . message ,
235
242
initial : 0 ,
236
243
choices : ( prev , answers ) => [
237
- { title : 'No' , value : false } ,
244
+ { title : language . needsE2eTesting . selectOptions . negative . title , value : false } ,
238
245
{
239
- title : 'Playwright' ,
246
+ title : language . needsE2eTesting . selectOptions . playwright . title ,
240
247
value : 'playwright'
241
248
} ,
242
249
{
243
- title : 'Nightwatch' ,
250
+ title : language . needsE2eTesting . selectOptions . nightwatch . title ,
244
251
description : answers . needsVitest
245
252
? undefined
246
- : 'also supports unit testing with Nightwatch Component Testing' ,
253
+ : language . needsE2eTesting . selectOptions . nightwatch . desc ,
247
254
value : 'nightwatch'
248
255
} ,
249
256
{
250
- title : 'Cypress' ,
257
+ title : language . needsE2eTesting . selectOptions . cypress . title ,
251
258
description : answers . needsVitest
252
259
? undefined
253
- : 'also supports unit testing with Cypress Component Testing' ,
260
+ : language . needsE2eTesting . selectOptions . cypress . desc ,
254
261
value : 'cypress'
255
262
}
256
263
]
@@ -260,24 +267,24 @@ async function init() {
260
267
type : ( ) => ( isFeatureFlagsUsed ? null : 'toggle' ) ,
261
268
message : 'Add VueUse - Collection of essential Composition Utilities?' ,
262
269
initial : false ,
263
- active : 'Yes' ,
264
- inactive : 'No'
270
+ active : language . defaultToggleOptions . active ,
271
+ inactive : language . defaultToggleOptions . inactive
265
272
} ,
266
273
{
267
274
name : 'needsI18n' ,
268
275
type : ( ) => ( isFeatureFlagsUsed ? null : 'toggle' ) ,
269
276
message : 'Add i18n - internationalization plugin?' ,
270
277
initial : false ,
271
- active : 'Yes' ,
272
- inactive : 'No'
278
+ active : language . defaultToggleOptions . active ,
279
+ inactive : language . defaultToggleOptions . inactive
273
280
} ,
274
281
{
275
282
name : 'needsStorybook' ,
276
283
type : ( ) => ( isFeatureFlagsUsed ? null : 'toggle' ) ,
277
284
message : 'Add Storybook?' ,
278
285
initial : false ,
279
- active : 'Yes' ,
280
- inactive : 'No'
286
+ active : language . defaultToggleOptions . active ,
287
+ inactive : language . defaultToggleOptions . inactive
281
288
} ,
282
289
{
283
290
name : 'needsSonarQube' ,
@@ -289,22 +296,22 @@ async function init() {
289
296
} ,
290
297
message : 'Add SonarQube for code coverage?' ,
291
298
initial : false ,
292
- active : 'Yes' ,
293
- inactive : 'No'
299
+ active : language . defaultToggleOptions . active ,
300
+ inactive : language . defaultToggleOptions . inactive
294
301
} ,
295
302
{
296
303
name : 'needsTanStackQuery' ,
297
304
type : ( ) => ( isFeatureFlagsUsed ? null : 'toggle' ) ,
298
305
message :
299
306
'Add TanStack Query - Hooks for fetching, caching and updating asynchronous data?' ,
300
307
initial : false ,
301
- active : 'Yes' ,
302
- inactive : 'No'
308
+ active : language . defaultToggleOptions . active ,
309
+ inactive : language . defaultToggleOptions . inactive
303
310
}
304
311
] ,
305
312
{
306
313
onCancel : ( ) => {
307
- throw new Error ( red ( '✖' ) + ' Operation cancelled' )
314
+ throw new Error ( red ( '✖' ) + ` ${ language . errors . operationCancelled } ` )
308
315
}
309
316
}
310
317
)
@@ -346,7 +353,7 @@ async function init() {
346
353
fs . mkdirSync ( root )
347
354
}
348
355
349
- console . log ( `\nScaffolding project in ${ root } ...` )
356
+ console . log ( `\n ${ language . infos . scaffolding } ${ root } ...` )
350
357
351
358
const pkg = { name : packageName , version : '0.0.0' }
352
359
fs . writeFileSync ( path . resolve ( root , 'package.json' ) , JSON . stringify ( pkg , null , 2 ) )
@@ -552,7 +559,7 @@ async function init() {
552
559
} )
553
560
)
554
561
555
- console . log ( `\nDone. Now run: \n` )
562
+ console . log ( `\n ${ language . infos . done } \n` )
556
563
if ( root !== cwd ) {
557
564
const cdProjectName = path . relative ( cwd , root )
558
565
console . log (
0 commit comments