From b87b04d4070793bbb30ea6a4b890658c3af13a0d Mon Sep 17 00:00:00 2001 From: "S.Gromov" Date: Sun, 13 Jul 2025 18:54:05 +0300 Subject: [PATCH] Update localization support in myTemplateGenerator extension. Added English and Russian settings for the configuration interface, modified default language to English, and removed unnecessary .vscode directory from .gitignore. Updated @types/vscode dependency version in package files. Added VSCode configuration files for better development experience. --- .gitignore | 1 - .vscode/extensions.json | 5 + .vscode/launch.json | 21 +++ .vscode/settings.json | 13 ++ .vscode/tasks.json | 40 +++++ package-lock.json | 8 +- package.json | 3 +- src/extension.ts | 358 ++++++++++++++++++++++------------------ 8 files changed, 281 insertions(+), 168 deletions(-) create mode 100644 .vscode/extensions.json create mode 100644 .vscode/launch.json create mode 100644 .vscode/settings.json create mode 100644 .vscode/tasks.json diff --git a/.gitignore b/.gitignore index fb87c84..b295889 100644 --- a/.gitignore +++ b/.gitignore @@ -41,7 +41,6 @@ build/Release # Dependency directories node_modules/ jspm_packages/ -.vscode/ # Snowpack dependency directory (https://snowpack.dev/) web_modules/ diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..dd01eb3 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,5 @@ +{ + // See http://go.microsoft.com/fwlink/?LinkId=827846 + // for the documentation about the extensions.json format + "recommendations": ["dbaeumer.vscode-eslint", "amodio.tsl-problem-matcher", "ms-vscode.extension-test-runner"] +} diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..c42edc0 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,21 @@ +// A launch configuration that compiles the extension and then opens it inside a new window +// Use IntelliSense to learn about possible attributes. +// Hover to view descriptions of existing attributes. +// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Run Extension", + "type": "extensionHost", + "request": "launch", + "args": [ + "--extensionDevelopmentPath=${workspaceFolder}" + ], + "outFiles": [ + "${workspaceFolder}/dist/**/*.js" + ], + "preLaunchTask": "${defaultBuildTask}" + } + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..16a5c02 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,13 @@ +// Place your settings in this file to overwrite default and user settings. +{ + "files.exclude": { + "out": false, // set this to true to hide the "out" folder with the compiled JS files + "dist": false // set this to true to hide the "dist" folder with the compiled JS files + }, + "search.exclude": { + "out": true, // set this to false to include "out" folder in search results + "dist": true // set this to false to include "dist" folder in search results + }, + // Turn off tsc task auto detection since we have the necessary tasks as npm scripts + "typescript.tsc.autoDetect": "off" +} diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..c2ab68a --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,40 @@ +// See https://go.microsoft.com/fwlink/?LinkId=733558 +// for the documentation about the tasks.json format +{ + "version": "2.0.0", + "tasks": [ + { + "type": "npm", + "script": "watch", + "problemMatcher": "$ts-webpack-watch", + "isBackground": true, + "presentation": { + "reveal": "never", + "group": "watchers" + }, + "group": { + "kind": "build", + "isDefault": true + } + }, + { + "type": "npm", + "script": "watch-tests", + "problemMatcher": "$tsc-watch", + "isBackground": true, + "presentation": { + "reveal": "never", + "group": "watchers" + }, + "group": "build" + }, + { + "label": "tasks: watch-tests", + "dependsOn": [ + "npm: watch", + "npm: watch-tests" + ], + "problemMatcher": [] + } + ] +} diff --git a/package-lock.json b/package-lock.json index 1ed0e71..bc98fb0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "devDependencies": { "@types/mocha": "^10.0.10", "@types/node": "20.x", - "@types/vscode": "^1.102.0", + "@types/vscode": "^1.60.0", "@typescript-eslint/eslint-plugin": "^8.31.1", "@typescript-eslint/parser": "^8.31.1", "@vscode/test-cli": "^0.0.11", @@ -485,9 +485,9 @@ } }, "node_modules/@types/vscode": { - "version": "1.102.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.102.0.tgz", - "integrity": "sha512-V9sFXmcXz03FtYTSUsYsu5K0Q9wH9w9V25slddcxrh5JgORD14LpnOA7ov0L9ALi+6HrTjskLJ/tY5zeRF3TFA==", + "version": "1.60.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.60.0.tgz", + "integrity": "sha512-wZt3VTmzYrgZ0l/3QmEbCq4KAJ71K3/hmMQ/nfpv84oH8e81KKwPEoQ5v8dNCxfHFVJ1JabHKmCvqdYOoVm1Ow==", "dev": true, "license": "MIT" }, diff --git a/package.json b/package.json index 0700121..a593051 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "displayName": "myTemplateGenerator", "description": "Generate files and folders from customizable templates with variable substitution in VSCode.", "version": "0.0.1", + "publisher": "MyTemplateGenerator", "author": "Sergey Gromov", "url": "https://github.com/gormov1122/MyTemplateGenerator", "engines": { @@ -68,7 +69,7 @@ "devDependencies": { "@types/mocha": "^10.0.10", "@types/node": "20.x", - "@types/vscode": "^1.102.0", + "@types/vscode": "^1.60.0", "@typescript-eslint/eslint-plugin": "^8.31.1", "@typescript-eslint/parser": "^8.31.1", "@vscode/test-cli": "^0.0.11", diff --git a/src/extension.ts b/src/extension.ts index 1bcbf28..f8eeb17 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -268,6 +268,29 @@ const I18N_DICTIONARIES: Record> = { } }; +const SETTINGS_I18N: Record> = { + ru: { + title: 'Настройки myTemplateGenerator', + templatesPath: 'Путь к шаблонам:', + overwriteFiles: 'Перезаписывать существующие файлы', + inputMode: 'Способ ввода переменных:', + inputModeWebview: 'Webview (форма)', + inputModeInputBox: 'InputBox (по одной)', + language: 'Язык интерфейса:', + save: 'Сохранить' + }, + en: { + title: 'myTemplateGenerator Settings', + templatesPath: 'Templates path:', + overwriteFiles: 'Overwrite existing files', + inputMode: 'Variable input method:', + inputModeWebview: 'Webview (form)', + inputModeInputBox: 'InputBox (one by one)', + language: 'Interface language:', + save: 'Save' + } +}; + interface MyTemplateGeneratorConfig { templatesPath: string; overwriteFiles: boolean; @@ -279,7 +302,7 @@ const DEFAULT_CONFIG: MyTemplateGeneratorConfig = { templatesPath: 'templates', overwriteFiles: false, inputMode: 'webview', - language: 'ru', + language: 'en', }; function getConfigPath(): string | undefined { @@ -313,175 +336,183 @@ function writeConfig(config: MyTemplateGeneratorConfig) { async function showConfigWebview(context: vscode.ExtensionContext) { const config = readConfig(); + let language = config.language || 'ru'; return new Promise((resolve) => { const panel = vscode.window.createWebviewPanel( 'mytemplategeneratorConfig', - 'Настройки myTemplateGenerator', + SETTINGS_I18N[language]?.title || SETTINGS_I18N['ru'].title, vscode.ViewColumn.Active, { enableScripts: true } ); - panel.webview.html = ` - - - - - - Настройки myTemplateGenerator - - - - -
-

Настройки myTemplateGenerator

-
-
- - + + + +
+

${dict.title}

+ +
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
-
- - -
-
- - -
-
- - -
- - -
- - - `; + + + `; + } + setHtml(); panel.webview.onDidReceiveMessage( message => { if (message.type === 'save') { @@ -489,6 +520,9 @@ async function showConfigWebview(context: vscode.ExtensionContext) { vscode.window.showInformationMessage('Настройки myTemplateGenerator сохранены!'); panel.dispose(); resolve(); + } else if (message.type === 'changeLanguage') { + language = message.language; + setHtml(); } }, undefined,