49 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| const fs = require("node:fs")
 | |
| 
 | |
| const prettier = require("prettier")
 | |
| 
 | |
| /**
 | |
|  * @param {import('plop').NodePlopAPI} plop
 | |
|  * @returns {import('node-plop').PlopGeneratorConfig}
 | |
|  */
 | |
| exports.languageGenerator = (plop) => {
 | |
|   return {
 | |
|     description: "Add a new language for translations",
 | |
|     prompts: [
 | |
|       {
 | |
|         type: "input",
 | |
|         name: "locale",
 | |
|         message: "locale",
 | |
|       },
 | |
|     ],
 | |
|     actions: [
 | |
|       {
 | |
|         type: "addMany",
 | |
|         base: "locales/en",
 | |
|         destination: "locales/{{locale}}",
 | |
|         templateFiles: "locales/en/**",
 | |
|       },
 | |
|       async (answers) => {
 | |
|         process.chdir(plop.getPlopfilePath())
 | |
|         const data = JSON.parse(
 | |
|           await fs.promises.readFile("i18n.json", { encoding: "utf-8" }),
 | |
|         )
 | |
|         data.locales.push(answers.locale)
 | |
|         const formatted = prettier.format(JSON.stringify(data, null, 2), {
 | |
|           filepath: "i18n.json",
 | |
|         })
 | |
|         await fs.promises.writeFile("i18n.json", formatted, {
 | |
|           encoding: "utf-8",
 | |
|         })
 | |
|         return plop.renderString(
 | |
|           `
 | |
|             Added '{{locale}}' to the 'locales' array inside 'i18n.json'
 | |
|             Don't forget to add the flag at 'public/images/svg/languages/{{locale}}.svg'
 | |
|           `,
 | |
|           answers,
 | |
|         )
 | |
|       },
 | |
|     ],
 | |
|   }
 | |
| }
 |