diff --git a/packages/scripts/src/commands/git-commit.ts b/packages/scripts/src/commands/git-commit.ts index 875ea969..5fd9b16b 100644 --- a/packages/scripts/src/commands/git-commit.ts +++ b/packages/scripts/src/commands/git-commit.ts @@ -1,9 +1,10 @@ import path from 'node:path'; import { readFileSync } from 'node:fs'; import { prompt } from 'enquirer'; -import { bgRed, green, red, yellow } from 'kolorist'; +import { bgRed, green, red } from 'kolorist'; import { execCommand } from '../shared'; -import type { CliOption } from '../types'; +import { getLocalLanguage } from '../i18n'; +import type { LangTypeEnum } from '../types'; interface PromptObject { types: string; @@ -14,13 +15,11 @@ interface PromptObject { /** * Git commit with Conventional Commits standard * - * @param gitCommitTypes - * @param gitCommitScopes + * @param lang */ -export async function gitCommit( - gitCommitTypes: CliOption['gitCommitTypes'], - gitCommitScopes: CliOption['gitCommitScopes'] -) { +export async function gitCommit(lang?: LangTypeEnum) { + const { gitCommitMessages, gitCommitTypes, gitCommitScopes } = getLocalLanguage(lang); + const typesChoices = gitCommitTypes.map(([value, msg]) => { const nameWithSuffix = `${value}:`; @@ -41,19 +40,19 @@ export async function gitCommit( { name: 'types', type: 'select', - message: 'Please select a type', + message: gitCommitMessages.types, choices: typesChoices }, { name: 'scopes', type: 'select', - message: 'Please select a scope', + message: gitCommitMessages.scopes, choices: scopesChoices }, { name: 'description', type: 'text', - message: `Please enter a description (add prefix ${yellow('!')} to indicate breaking change)` + message: gitCommitMessages.description } ]); diff --git a/packages/scripts/src/config/index.ts b/packages/scripts/src/config/index.ts index 4f84e3d2..5b447ad0 100644 --- a/packages/scripts/src/config/index.ts +++ b/packages/scripts/src/config/index.ts @@ -1,6 +1,9 @@ import process from 'node:process'; import { loadConfig } from 'c12'; import type { CliOption } from '../types'; +import { getLocalLanguage } from '../i18n'; + +const defaultLang = getLocalLanguage(); const defaultOptions: CliOption = { cwd: process.cwd(), @@ -12,32 +15,8 @@ const defaultOptions: CliOption = { '**/node_modules', '!node_modules/**' ], - gitCommitTypes: [ - ['feat', 'A new feature'], - ['fix', 'A bug fix'], - ['docs', 'Documentation only changes'], - ['style', 'Changes that do not affect the meaning of the code'], - ['refactor', 'A code change that neither fixes a bug nor adds a feature'], - ['perf', 'A code change that improves performance'], - ['optimize', 'A code change that optimizes code quality'], - ['test', 'Adding missing tests or correcting existing tests'], - ['build', 'Changes that affect the build system or external dependencies'], - ['ci', 'Changes to our CI configuration files and scripts'], - ['chore', "Other changes that don't modify src or test files"], - ['revert', 'Reverts a previous commit'] - ], - gitCommitScopes: [ - ['projects', 'project'], - ['packages', 'packages'], - ['components', 'components'], - ['hooks', 'hook functions'], - ['utils', 'utils functions'], - ['types', 'TS declaration'], - ['styles', 'style'], - ['deps', 'project dependencies'], - ['release', 'release project'], - ['other', 'other changes'] - ], + gitCommitTypes: defaultLang.gitCommitTypes, + gitCommitScopes: defaultLang.gitCommitScopes, ncuCommandArgs: ['--deep', '-u'], changelogOptions: {} }; diff --git a/packages/scripts/src/i18n/index.ts b/packages/scripts/src/i18n/index.ts new file mode 100644 index 00000000..69031dfd --- /dev/null +++ b/packages/scripts/src/i18n/index.ts @@ -0,0 +1,96 @@ +import { yellow } from 'kolorist'; +import { LangTypeEnum } from '../types'; + +interface GitCommitMessages { + types: string; + scopes: string; + description: string; +} +interface LocalConfig { + gitCommitMessages: GitCommitMessages; + gitCommitTypes: [string, string][]; + gitCommitScopes: [string, string][]; +} + +interface Locals { + [LangTypeEnum.CHINESE]: LocalConfig; + [LangTypeEnum.ENGLISH]: LocalConfig; +} + +const locales: Locals = { + 'zh-cn': { + gitCommitMessages: { + types: '请选择提交类型', + scopes: '请选择提交范围', + description: `请输入描述信息(${yellow('!')}开头表示破坏性改动` + }, + gitCommitTypes: [ + ['feat', '新功能'], + ['fix', '修复Bug'], + ['docs', '只更新文档'], + ['style', '修改代码风格,不影响代码含义的变更'], + ['refactor', '代码重构,既不修复 bug 也不添加功能的代码变更'], + ['perf', '可提高性能的代码更改'], + ['optimize', '优化代码质量的代码更改'], + ['test', '添加缺失的测试或更正现有测'], + ['build', '影响构建系统或外部依赖项的更改'], + ['ci', '对 CI 配置文件和脚本的更改'], + ['chore', '没有修改src或测试文件的其他变更'], + ['revert', '还原先前的提交'] + ], + gitCommitScopes: [ + ['projects', '项目'], + ['packages', '包'], + ['components', '组件'], + ['hooks', '钩子函数'], + ['utils', '工具函数'], + ['types', 'TS类型声明'], + ['styles', '代码风格'], + ['deps', '项目依赖'], + ['release', '发布项目新版本'], + ['other', '其他的变更'] + ] + }, + 'en-us': { + gitCommitMessages: { + types: 'Please select a type', + scopes: 'Please select a scope', + description: `Please enter a description (add prefix ${yellow('!')} to indicate breaking change)` + }, + gitCommitTypes: [ + ['feat', 'A new feature'], + ['fix', 'A bug fix'], + ['docs', 'Documentation only changes'], + ['style', 'Changes that do not affect the meaning of the code'], + ['refactor', 'A code change that neither fixes a bug nor adds a feature'], + ['perf', 'A code change that improves performance'], + ['optimize', 'A code change that optimizes code quality'], + ['test', 'Adding missing tests or correcting existing tests'], + ['build', 'Changes that affect the build system or external dependencies'], + ['ci', 'Changes to our CI configuration files and scripts'], + ['chore', "Other changes that don't modify src or test files"], + ['revert', 'Reverts a previous commit'] + ], + gitCommitScopes: [ + ['projects', 'project'], + ['packages', 'packages'], + ['components', 'components'], + ['hooks', 'hook functions'], + ['utils', 'utils functions'], + ['types', 'TS declaration'], + ['styles', 'style'], + ['deps', 'project dependencies'], + ['release', 'release project'], + ['other', 'other changes'] + ] + } +}; + +/** + * 默认英文 + * + * @param lang + */ +export function getLocalLanguage(lang?: LangTypeEnum) { + return locales[lang ?? LangTypeEnum.ENGLISH]; +} diff --git a/packages/scripts/src/index.ts b/packages/scripts/src/index.ts index 909dda3d..5486febb 100755 --- a/packages/scripts/src/index.ts +++ b/packages/scripts/src/index.ts @@ -3,6 +3,7 @@ import { blue, lightGreen } from 'kolorist'; import { version } from '../package.json'; import { cleanup, genChangelog, generateRoute, gitCommit, gitCommitVerify, release, updatePkg } from './commands'; import { loadCliOptions } from './config'; +import { LangTypeEnum } from './types'; type Command = 'cleanup' | 'update-pkg' | 'git-commit' | 'git-commit-verify' | 'changelog' | 'release' | 'gen-route'; @@ -18,13 +19,16 @@ interface CommandArg { /** Generate changelog by total tags */ total?: boolean; /** - * The glob pattern of dirs to cleanup + * The glob pattern of dirs to clean up * * If not set, it will use the default value * * Multiple values use "," to separate them */ cleanupDir?: string; + + /** Support for different language prompts, and the default is en-us */ + lang?: LangTypeEnum; } export async function setupCli() { @@ -44,6 +48,10 @@ export async function setupCli() { '-c, --cleanupDir ', 'The glob pattern of dirs to cleanup, If not set, it will use the default value, Multiple values use "," to separate them' ) + .option('-l, --lang ', 'Support for different language prompts, and the default is en-us', { + default: LangTypeEnum.ENGLISH, + type: [LangTypeEnum] + }) .help(); const commands: CommandWithAction = { @@ -61,8 +69,9 @@ export async function setupCli() { }, 'git-commit': { desc: 'git commit, generate commit message which match Conventional Commits standard', - action: async () => { - await gitCommit(cliOptions.gitCommitTypes, cliOptions.gitCommitScopes); + action: async args => { + // 选择中文后,不支持语言 + await gitCommit(args?.lang); } }, 'git-commit-verify': { @@ -98,4 +107,6 @@ export async function setupCli() { cli.parse(); } -setupCli(); +(async () => { + await setupCli(); +})(); diff --git a/packages/scripts/src/types/index.ts b/packages/scripts/src/types/index.ts index 598760ef..f8e9c315 100644 --- a/packages/scripts/src/types/index.ts +++ b/packages/scripts/src/types/index.ts @@ -31,3 +31,9 @@ export interface CliOption { */ changelogOptions: Partial; } + +/** 语言 */ +export enum LangTypeEnum { + CHINESE = 'zh-cn', + ENGLISH = 'en-us' +}