@@ -15,6 +15,7 @@ import renderTemplate from './utils/renderTemplate'
15
15
import { postOrderDirectoryTraverse , preOrderDirectoryTraverse } from './utils/directoryTraverse'
16
16
import generateReadme from './utils/generateReadme'
17
17
import getCommand from './utils/getCommand'
18
+ import getLanguage from './utils/getLanguage'
18
19
import renderEslint from './utils/renderEslint'
19
20
import { FILES_TO_FILTER } from './utils/filterList'
20
21
@@ -115,6 +116,8 @@ async function init() {
115
116
116
117
const forceOverwrite = argv . force
117
118
119
+ const language = getLanguage ( )
120
+
118
121
let result : {
119
122
projectName ?: string
120
123
shouldOverwrite ? : boolean
@@ -148,110 +151,118 @@ async function init() {
148
151
{
149
152
name : 'projectName' ,
150
153
type : targetDir ? null : 'text' ,
151
- message : 'Project name:' ,
154
+ message : language . projectName . message ,
152
155
initial : defaultProjectName ,
153
156
onState : ( state ) => ( targetDir = String ( state . value ) . trim ( ) || defaultProjectName )
154
157
} ,
155
158
{
156
159
name : 'shouldOverwrite' ,
157
- type : ( ) => ( canSkipEmptying ( targetDir ) || forceOverwrite ? null : 'confirm ' ) ,
160
+ type : ( ) => ( canSkipEmptying ( targetDir ) || forceOverwrite ? null : 'toggle ' ) ,
158
161
message : ( ) => {
159
162
const dirForPrompt =
160
- targetDir === '.' ? 'Current directory' : `Target directory "${ targetDir } "`
163
+ targetDir === '.'
164
+ ? language . shouldOverwrite . dirForPrompts . current
165
+ : `${ language . shouldOverwrite . dirForPrompts . target } "${ targetDir } "`
161
166
162
- return `${ dirForPrompt } is not empty. Remove existing files and continue?`
163
- }
167
+ return `${ dirForPrompt } ${ language . shouldOverwrite . message } `
168
+ } ,
169
+ initial : true ,
170
+ active : language . defaultToggleOptions . active ,
171
+ inactive : language . defaultToggleOptions . inactive
164
172
} ,
165
173
{
166
174
name : 'overwriteChecker' ,
167
175
type : ( prev , values ) => {
168
176
if ( values . shouldOverwrite === false ) {
169
- throw new Error ( red ( '✖' ) + ' Operation cancelled' )
177
+ throw new Error ( red ( '✖' ) + ` ${ language . errors . operationCancelled } ` )
170
178
}
171
179
return null
172
180
}
173
181
} ,
174
182
{
175
183
name : 'packageName' ,
176
184
type : ( ) => ( isValidPackageName ( targetDir ) ? null : 'text' ) ,
177
- message : 'Package name:' ,
185
+ message : language . packageName . message ,
178
186
initial : ( ) => toValidPackageName ( targetDir ) ,
179
187
validate : ( dir ) => isValidPackageName ( dir ) || 'Invalid package.json name'
180
188
} ,
181
189
{
182
190
name : 'needsTypeScript' ,
183
191
type : ( ) => ( isFeatureFlagsUsed ? null : 'toggle' ) ,
184
- message : 'Add TypeScript?' ,
192
+ message : language . needsTypeScript . message ,
185
193
initial : false ,
186
- active : 'Yes' ,
187
- inactive : 'No'
194
+ active : language . defaultToggleOptions . active ,
195
+ inactive : language . defaultToggleOptions . inactive
188
196
} ,
189
197
{
190
198
name : 'needsJsx' ,
191
199
type : ( ) => ( isFeatureFlagsUsed ? null : 'toggle' ) ,
192
- message : 'Add JSX Support?' ,
200
+ message : language . needsJsx . message ,
193
201
initial : false ,
194
- active : 'Yes' ,
195
- inactive : 'No'
202
+ active : language . defaultToggleOptions . active ,
203
+ inactive : language . defaultToggleOptions . inactive
196
204
} ,
197
205
{
198
206
name : 'needsRouter' ,
199
207
type : ( ) => ( isFeatureFlagsUsed ? null : 'toggle' ) ,
200
- message : 'Add Vue Router for Single Page Application development?' ,
208
+ message : language . needsRouter . message ,
201
209
initial : false ,
202
- active : 'Yes' ,
203
- inactive : 'No'
210
+ active : language . defaultToggleOptions . active ,
211
+ inactive : language . defaultToggleOptions . inactive
204
212
} ,
205
213
{
206
214
name : 'needsPinia' ,
207
215
type : ( ) => ( isFeatureFlagsUsed ? null : 'toggle' ) ,
208
- message : 'Add Pinia for state management?' ,
216
+ message : language . needsPinia . message ,
209
217
initial : false ,
210
- active : 'Yes' ,
211
- inactive : 'No'
218
+ active : language . defaultToggleOptions . active ,
219
+ inactive : language . defaultToggleOptions . inactive
212
220
} ,
213
221
{
214
222
name : 'needsVitest' ,
215
223
type : ( ) => ( isFeatureFlagsUsed ? null : 'toggle' ) ,
216
- message : 'Add Vitest for Unit Testing?' ,
224
+ message : language . needsVitest . message ,
217
225
initial : false ,
218
- active : 'Yes' ,
219
- inactive : 'No'
226
+ active : language . defaultToggleOptions . active ,
227
+ inactive : language . defaultToggleOptions . inactive
220
228
} ,
221
229
{
222
230
name : 'needsE2eTesting' ,
223
231
type : ( ) => ( isFeatureFlagsUsed ? null : 'select' ) ,
224
- message : 'Add an End-to-End Testing Solution?' ,
232
+ message : language . needsE2eTesting . message ,
225
233
initial : 0 ,
226
234
choices : ( prev , answers ) => [
227
- { title : 'No' , value : false } ,
228
235
{
229
- title : 'Cypress' ,
236
+ title : language . needsE2eTesting . selectOptions . negative . title ,
237
+ value : false
238
+ } ,
239
+ {
240
+ title : language . needsE2eTesting . selectOptions . cypress . title ,
230
241
description : answers . needsVitest
231
242
? undefined
232
- : 'also supports unit testing with Cypress Component Testing' ,
243
+ : language . needsE2eTesting . selectOptions . cypress . desc ,
233
244
value : 'cypress'
234
245
} ,
235
246
{
236
- title : 'Nightwatch' ,
247
+ title : language . needsE2eTesting . selectOptions . nightwatch . title ,
237
248
description : answers . needsVitest
238
249
? undefined
239
- : 'also supports unit testing with Nightwatch Component Testing' ,
250
+ : language . needsE2eTesting . selectOptions . nightwatch . desc ,
240
251
value : 'nightwatch'
241
252
} ,
242
253
{
243
- title : 'Playwright' ,
254
+ title : language . needsE2eTesting . selectOptions . playwright . title ,
244
255
value : 'playwright'
245
256
}
246
257
]
247
258
} ,
248
259
{
249
260
name : 'needsEslint' ,
250
261
type : ( ) => ( isFeatureFlagsUsed ? null : 'toggle' ) ,
251
- message : 'Add ESLint for code quality?' ,
262
+ message : language . needsEslint . message ,
252
263
initial : false ,
253
- active : 'Yes' ,
254
- inactive : 'No'
264
+ active : language . defaultToggleOptions . active ,
265
+ inactive : language . defaultToggleOptions . inactive
255
266
} ,
256
267
{
257
268
name : 'needsPrettier' ,
@@ -261,15 +272,15 @@ async function init() {
261
272
}
262
273
return 'toggle'
263
274
} ,
264
- message : 'Add Prettier for code formatting?' ,
275
+ message : language . needsPrettier . message ,
265
276
initial : false ,
266
- active : 'Yes' ,
267
- inactive : 'No'
277
+ active : language . defaultToggleOptions . active ,
278
+ inactive : language . defaultToggleOptions . inactive
268
279
}
269
280
] ,
270
281
{
271
282
onCancel : ( ) => {
272
- throw new Error ( red ( '✖' ) + ' Operation cancelled' )
283
+ throw new Error ( red ( '✖' ) + ` ${ language . errors . operationCancelled } ` )
273
284
}
274
285
}
275
286
)
@@ -308,7 +319,7 @@ async function init() {
308
319
fs . mkdirSync ( root )
309
320
}
310
321
311
- console . log ( `\nScaffolding project in ${ root } ...` )
322
+ console . log ( `\n ${ language . infos . scaffolding } ${ root } ...` )
312
323
313
324
const pkg = { name : packageName , version : '0.0.0' }
314
325
fs . writeFileSync ( path . resolve ( root , 'package.json' ) , JSON . stringify ( pkg , null , 2 ) )
@@ -496,7 +507,7 @@ async function init() {
496
507
} )
497
508
)
498
509
499
- console . log ( `\nDone. Now run: \n` )
510
+ console . log ( `\n ${ language . infos . done } \n` )
500
511
if ( root !== cwd ) {
501
512
const cdProjectName = path . relative ( cwd , root )
502
513
console . log (
0 commit comments