@@ -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,104 @@ 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 : 'contogglefirm ' ) ,
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' ,
247
- value : 'nightwatch'
253
+ : language . needsE2eTesting . selectOptions . nightwatch . desc
248
254
} ,
249
255
{
250
- title : 'Cypress' ,
256
+ title : language . needsE2eTesting . selectOptions . cypress . title ,
251
257
description : answers . needsVitest
252
258
? undefined
253
- : 'also supports unit testing with Cypress Component Testing' ,
259
+ : language . needsE2eTesting . selectOptions . cypress . desc ,
254
260
value : 'cypress'
255
261
}
256
262
]
@@ -260,24 +266,24 @@ async function init() {
260
266
type : ( ) => ( isFeatureFlagsUsed ? null : 'toggle' ) ,
261
267
message : 'Add VueUse - Collection of essential Composition Utilities?' ,
262
268
initial : false ,
263
- active : 'Yes' ,
264
- inactive : 'No'
269
+ active : language . defaultToggleOptions . active ,
270
+ inactive : language . defaultToggleOptions . inactive
265
271
} ,
266
272
{
267
273
name : 'needsI18n' ,
268
274
type : ( ) => ( isFeatureFlagsUsed ? null : 'toggle' ) ,
269
275
message : 'Add i18n - internationalization plugin?' ,
270
276
initial : false ,
271
- active : 'Yes' ,
272
- inactive : 'No'
277
+ active : language . defaultToggleOptions . active ,
278
+ inactive : language . defaultToggleOptions . inactive
273
279
} ,
274
280
{
275
281
name : 'needsStorybook' ,
276
282
type : ( ) => ( isFeatureFlagsUsed ? null : 'toggle' ) ,
277
283
message : 'Add Storybook?' ,
278
284
initial : false ,
279
- active : 'Yes' ,
280
- inactive : 'No'
285
+ active : language . defaultToggleOptions . active ,
286
+ inactive : language . defaultToggleOptions . inactive
281
287
} ,
282
288
{
283
289
name : 'needsSonarQube' ,
@@ -289,22 +295,22 @@ async function init() {
289
295
} ,
290
296
message : 'Add SonarQube for code coverage?' ,
291
297
initial : false ,
292
- active : 'Yes' ,
293
- inactive : 'No'
298
+ active : language . defaultToggleOptions . active ,
299
+ inactive : language . defaultToggleOptions . inactive
294
300
} ,
295
301
{
296
302
name : 'needsTanStackQuery' ,
297
303
type : ( ) => ( isFeatureFlagsUsed ? null : 'toggle' ) ,
298
304
message :
299
305
'Add TanStack Query - Hooks for fetching, caching and updating asynchronous data?' ,
300
306
initial : false ,
301
- active : 'Yes' ,
302
- inactive : 'No'
307
+ active : language . defaultToggleOptions . active ,
308
+ inactive : language . defaultToggleOptions . inactive
303
309
}
304
310
] ,
305
311
{
306
312
onCancel : ( ) => {
307
- throw new Error ( red ( '✖' ) + ' Operation cancelled' )
313
+ throw new Error ( red ( '✖' ) + ` ${ language . errors . operationCancelled } ` )
308
314
}
309
315
}
310
316
)
@@ -346,7 +352,7 @@ async function init() {
346
352
fs . mkdirSync ( root )
347
353
}
348
354
349
- console . log ( `\nScaffolding project in ${ root } ...` )
355
+ console . log ( `\n ${ language . infos . scaffolding } ${ root } ...` )
350
356
351
357
const pkg = { name : packageName , version : '0.0.0' }
352
358
fs . writeFileSync ( path . resolve ( root , 'package.json' ) , JSON . stringify ( pkg , null , 2 ) )
@@ -552,7 +558,7 @@ async function init() {
552
558
} )
553
559
)
554
560
555
- console . log ( `\nDone. Now run: \n` )
561
+ console . log ( `\n ${ language . infos . done } \n` )
556
562
if ( root !== cwd ) {
557
563
const cdProjectName = path . relative ( cwd , root )
558
564
console . log (
0 commit comments