diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 740c8ac..cd1f1a3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -59,6 +59,10 @@ jobs: run: | pnpm build || (echo "Build failed" && exit 1) + - name: Test + run: | + pnpm test || (echo "Test failed" && exit 1) + - name: Upload build artifacts uses: actions/upload-artifact@v3 with: diff --git a/README-zh.md b/README-zh.md index 6c6921a..c828478 100644 --- a/README-zh.md +++ b/README-zh.md @@ -1,28 +1,38 @@ +这是 `ai-markdown-translator` 文档的修订和合并版本,将 `npx` 和 `./ai-markdown-translator` 的示例结合在一起: + +--- + # ai-markdown-translator -[![NPM version](https://img.shields.io/npm/v/ai-markdown-translator.svg?style=flat)](https://www.npmjs.org/package/ai-markdown-translator) -[![CI](https://github.com/h7ml/ai-markdown-translator/actions/workflows/ci.yml/badge.svg)](https://github.com/h7ml/ai-markdown-translator/actions/workflows/ci.yml) -![NPM Downloads](https://img.shields.io/npm/dw/ai-markdown-translator) -![GitHub License](https://img.shields.io/github/license/h7ml/ai-markdown-translator) +[![NPM 版本](https://img.shields.io/npm/v/ai-markdown-translator.svg?style=flat)](https://www.npmjs.org/package/ai-markdown-translator) +[![CI](https://github.com/h7ml/ai-markdown-translator/actions/workflows/ci.yml/badge.svg)](https://github.com/h7ml/ai-markdown-translator/actions/workflows/ci.yml) +[![Release](https://github.com/h7ml/ai-markdown-translator/actions/workflows/release.yml/badge.svg)](https://github.com/h7ml/ai-markdown-translator/actions/workflows/release.yml) +[![NPM 下载量](https://img.shields.io/npm/dw/ai-markdown-translator)](https://www.npmjs.org/package/ai-markdown-translator) +[![NPM 许可证](https://img.shields.io/npm/l/ai-markdown-translator)](https://www.npmjs.org/package/ai-markdown-translator) +[![GitHub Stars](https://img.shields.io/github/stars/h7ml/ai-markdown-translator.svg)](https://github.com/h7ml/ai-markdown-translator/stargazers) +[![GitHub Issues](https://img.shields.io/github/issues/h7ml/ai-markdown-translator.svg)](https://github.com/h7ml/ai-markdown-translator/issues) +[![GitHub Forks](https://img.shields.io/github/forks/h7ml/ai-markdown-translator.svg)](https://github.com/h7ml/ai-markdown-translator/network/members) +[![GitHub Contributors](https://img.shields.io/github/contributors/h7ml/ai-markdown-translator.svg)](https://github.com/h7ml/ai-markdown-translator/graphs/contributors) + +[English](README.md) | [中文](README-zh.md) -ai-markdown-translator是一个命令行工具,使用OpenAI的语言模型将Markdown文件从一种语言翻译成另一种语言。在翻译内容的同时,它会保留Markdown语法。 +`ai-markdown-translator` 是一个命令行工具,可以使用 OpenAI 的语言模型将 Markdown 文件从一种语言翻译成另一种语言。它在翻译内容的同时保留了 Markdown 语法。 -## 特性 +## 功能 -- 将Markdown文件翻译为OpenAI模型支持的任何语言 -- 在翻译过程中保留Markdown语法 -- 通过命令行参数或环境变量灵活配置 -- 跨平台支持(Windows,macOS,Linux) +- 将 Markdown 文件翻译为 OpenAI 模型支持的任何语言。 +- 在翻译过程中保留 Markdown 语法。 +- 通过命令行参数或环境变量进行灵活配置。 ## 先决条件 -- Node.js(v14或更高版本) -- npm(通常与Node.js一起提供) -- OpenAI API密钥 +- Node.js (v14 或更高版本) +- npm (通常随 Node.js 一起安装) +- 一个 OpenAI API 密钥 ## 安装 -1. 克隆此库或下载源代码。 +1. 克隆此存储库或下载源代码。 2. 在终端中导航到项目目录。 3. 安装依赖项: @@ -36,128 +46,128 @@ npm install npm run build ``` -5. (可选)将CLI打包为独立可执行文件: - -```bash -npm run package -``` - -这将在`bin`目录中为Windows、macOS和Linux创建可执行文件。 - ## 脚本 -- **build**:将TypeScript文件编译为JavaScript。 -- **start**:使用Node.js运行CLI工具。 -- **package**:为CLI创建独立的可执行文件。 -- **lint**:运行ESLint检查代码质量问题。 -- **lint:fix**:自动修复代码问题。 -- **format**:使用Prettier格式化代码。 -- **format:check**:检查代码格式而不做更改。 +- `build`: 将 TypeScript 文件编译为 JavaScript。 +- `start`: 使用 Node.js 运行编译后的 JavaScript。 +- `lint`: 使用 ESLint 检查 TypeScript 文件中的代码质量问题。 +- `lint:fix`: 自动修复 TypeScript 文件中的 lint 问题。 +- `format`: 使用 Prettier 格式化 `src` 目录中各种文件类型的代码。 +- `format:check`: 检查代码格式而不对 `src` 目录中各种文件类型进行更改。 +- `postbuild`: 使编译后的 `index.js` 文件可执行。 +- `changelog`: 根据常规提交生成更改日志。 +- `version`: 在版本控制时更新更改日志并将其暂存为提交。 +- `test`: 构建项目并运行测试。 -## 用法 +## 使用方法 -您可以使用Node.js、`npx`或作为独立可执行文件(如果您已经打包)来运行CLI工具。 +您可以使用 Node.js、`npx` 或作为独立可执行文件(如果已打包)来运行 CLI 工具。 -### 使用Node.js +### 使用 Node.js ```bash node dist/index.js --input --output --language [options] ``` -### 使用npx +### 使用 npx ```bash npx ai-markdown-translator -i -o -l [options] ``` +例如: + +```bash +npx ai-markdown-translator -u https://gitee.com/h7ml/ai-markdown-translator/raw/main/README.md -o output.md -l "Italian" +``` + ### 使用独立可执行文件 ```bash ./ai-markdown-translator --input --output --language [options] ``` -### 选项 +## 选项 -- `--input`, `-i`:输入Markdown文件(替代--url) -- `--url`, `-u`:要翻译的Markdown文件的URL(替代--input) -- `--output`, `-o`:输出Markdown文件(必填) -- `--language`, `-l`:翻译的目标语言(必填) -- `--openai-url`:OpenAI API URL(默认:使用OPENAI_URL环境变量) -- `--api-key`:OpenAI API密钥(默认:使用API_KEY环境变量) -- `--model`:使用的OpenAI模型(默认:使用MODEL环境变量或'gpt-3.5-turbo') -- `--help`, `-h`:显示帮助 +- `--input`, `-i`: 输入的 Markdown 文件(作为 `--url` 的替代)。 +- `--url`, `-u`: 要翻译的 Markdown 文件的 URL(作为 `--input` 的替代)。 +- `--output`, `-o`: 输出的 Markdown 文件(必填)。 +- `--language`, `-l`: 翻译的目标语言(必填)。 +- `--openai-url`: OpenAI API 的 URL(默认使用 `OPENAI_URL` 环境变量)。 +- `--api-key`: OpenAI API 密钥(默认使用 `API_KEY` 环境变量)。 +- `--model`: 使用的 OpenAI 模型(默认使用 `MODEL` 环境变量或 `gpt-3.5-turbo`)。 +- `--help`, `-h`: 显示帮助。 +- `--show-version`, `-v`: 显示版本。 -注意:`--input`和`--url`是互斥的——您必须提供其中一个。 +> 注意:`--input` 和 `--url` 是互斥的;必须提供其中之一。 ## 环境变量 -您可以设置以下环境变量,而不是作为命令行参数传递它们: +可以设置以下环境变量,而不是作为命令行参数传递: -- `OPENAI_URL`:OpenAI API的URL -- `API_KEY`:您的OpenAI API密钥 -- `MODEL`:使用的OpenAI模型(例如,'gpt-3.5-turbo') +- `OPENAI_URL`: OpenAI API 的 URL。 +- `API_KEY`: 您的 OpenAI API 密钥。 +- `MODEL`: 使用的 OpenAI 模型(例如 `'gpt-3.5-turbo'`)。 -您可以在项目根目录中的`.env`文件中设置这些变量,或在您的Shell中导出它们。 +可以在项目根目录的 `.env` 文件中设置这些变量或在 shell 中导出它们。 ## 示例 -1. 将Markdown文件从英语翻译成西班牙语: +1. **将 Markdown 文件从英文翻译成西班牙语:** ```bash -./ai-markdown-translator --input english.md --output spanish.md --language "Spanish" +npx ai-markdown-translator -i english.md -o spanish.md -l "Spanish" ``` -2. 使用特定的OpenAI模型翻译: +2. **使用特定 OpenAI 模型进行翻译:** ```bash -./ai-markdown-translator --input input.md --output output.md --language "French" --model "gpt-4" +npx ai-markdown-translator -i input.md -o output.md -l "French" --model "gpt-4" ``` -3. 使用自定义OpenAI URL和API密钥翻译: +3. **使用自定义 OpenAI URL 和 API 密钥进行翻译:** ```bash -./ai-markdown-translator --input input.md --output output.md --language "German" --openai-url "https://api.302.ai/v1/chat/completions" --api-key "sk-302-api-key" +npx ai-markdown-translator -i input.md -o output.md -l "German" --openai-url "https://api.302.ai/v1/chat/completions" --api-key "sk-302-api-key" ``` -4. 使用`npx`翻译Markdown文件: +4. **翻译 URL 的 Markdown 内容:** ```bash -npx ai-markdown-translator -i input.md -o output.md -l "Italian" +npx ai-markdown-translator -u https://gitee.com/h7ml/ai-markdown-translator/raw/main/README.md -o output.md -l "Italian" ``` -5. 翻译URL的Markdown内容: - -```bash -./ai-markdown-translator -u https://gitee.com/h7ml/ai-markdown-translator/raw/main/README.md -o output.md -l "Italian" -``` - -## 许可 +## 许可证 [MIT License](LICENSE) -## Git信息 +## Git 信息 -- **仓库**:[h7ml/ai-markdown-translator](https://github.com/h7ml/ai-markdown-translator) -- **问题**:[报告问题](https://github.com/h7ml/ai-markdown-translator/issues) +- **仓库**: [h7ml/ai-markdown-translator](https://github.com/h7ml/ai-markdown-translator) +- **问题**: [报告问题](https://github.com/h7ml/ai-markdown-translator/issues) ## 版本信息 -- **当前版本**:1.0.6 -- **NPM包**:[ai-markdown-translator](https://www.npmjs.com/package/ai-markdown-translator) +- **当前版本**: 1.0.6 +- **NPM 包**: [ai-markdown-translator](https://www.npmjs.com/package/ai-markdown-translator) -## CI信息 +## CI 信息 -此项目使用GitHub Actions进行持续集成。CI工作流包括: +该项目使用 GitHub Actions 进行持续集成。CI 工作流包括: -- 使用ESLint对代码进行Lint检查 -- 运行测试(如果适用) +- 使用 ESLint 对代码进行 lint 检查 +- 运行测试(如适用) - 构建项目 -- 缓存依赖项以加速构建 +- 缓存依赖项以加快构建速度 ## 贡献 -欢迎贡献!请随时提交Pull Request。 +欢迎贡献!请随时提交 Pull Request。 ## 支持 -如果您遇到任何问题或有任何疑问,请在此仓库中提出问题。 \ No newline at end of file +如果遇到任何问题或有任何问题,请在此存储库中打开一个问题。 + +--- + +此版本将 `npx` 和独立可执行文件 (`./ai-markdown-translator`) 的使用示例合并到一个连贯的部分中。如需进一步调整,请告诉我! \ No newline at end of file diff --git a/README.md b/README.md index fd73063..e3ed6fc 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,28 @@ +Here’s the revised and consolidated version of the `ai-markdown-translator` documentation with `npx` and `./ai-markdown-translator` examples combined: + +--- + # ai-markdown-translator -[![NPM version](https://img.shields.io/npm/v/ai-markdown-translator.svg?style=flat)](https://www.npmjs.org/package/ai-markdown-translator) -[![CI](https://github.com/h7ml/ai-markdown-translator/actions/workflows/ci.yml/badge.svg)](https://github.com/h7ml/ai-markdown-translator/actions/workflows/ci.yml) -![NPM Downloads](https://img.shields.io/npm/dw/ai-markdown-translator) -![GitHub License](https://img.shields.io/github/license/h7ml/ai-markdown-translator) +[![NPM version](https://img.shields.io/npm/v/ai-markdown-translator.svg?style=flat)](https://www.npmjs.org/package/ai-markdown-translator) +[![CI](https://github.com/h7ml/ai-markdown-translator/actions/workflows/ci.yml/badge.svg)](https://github.com/h7ml/ai-markdown-translator/actions/workflows/ci.yml) +[![Release](https://github.com/h7ml/ai-markdown-translator/actions/workflows/release.yml/badge.svg)](https://github.com/h7ml/ai-markdown-translator/actions/workflows/release.yml) +[![NPM Downloads](https://img.shields.io/npm/dw/ai-markdown-translator)](https://www.npmjs.org/package/ai-markdown-translator) +[![NPM License](https://img.shields.io/npm/l/ai-markdown-translator)](https://www.npmjs.org/package/ai-markdown-translator) +[![GitHub Stars](https://img.shields.io/github/stars/h7ml/ai-markdown-translator.svg)](https://github.com/h7ml/ai-markdown-translator/stargazers) +[![GitHub Issues](https://img.shields.io/github/issues/h7ml/ai-markdown-translator.svg)](https://github.com/h7ml/ai-markdown-translator/issues) +[![GitHub Forks](https://img.shields.io/github/forks/h7ml/ai-markdown-translator.svg)](https://github.com/h7ml/ai-markdown-translator/network/members) +[![GitHub Contributors](https://img.shields.io/github/contributors/h7ml/ai-markdown-translator.svg)](https://github.com/h7ml/ai-markdown-translator/graphs/contributors) + +[English](README.md) | [中文](README-zh.md) -ai-markdown-translator is a command-line tool that translates Markdown files from one language to another using OpenAI's language models. It preserves the Markdown syntax while translating the content. +`ai-markdown-translator` is a command-line tool that translates Markdown files from one language to another using OpenAI's language models. It preserves the Markdown syntax while translating the content. ## Features -- Translate Markdown files to any language supported by OpenAI's models -- Preserve Markdown syntax during translation -- Flexible configuration through command-line arguments or environment variables -- Cross-platform support (Windows, macOS, Linux) +- Translate Markdown files to any language supported by OpenAI's models. +- Preserve Markdown syntax during translation. +- Flexible configuration through command-line arguments or environment variables. ## Prerequisites @@ -36,23 +46,18 @@ npm install npm run build ``` -5. (Optional) Package the CLI into a standalone executable: - -```bash -npm run package -``` - -This will create executables for Windows, macOS, and Linux in the `bin` directory. - ## Scripts -- **build**: Compile TypeScript files to JavaScript. -- **start**: Run the CLI tool using Node.js. -- **package**: Create standalone executables for the CLI. -- **lint**: Run ESLint to check for code quality issues. -- **lint:fix**: Automatically fix linting issues. -- **format**: Format code using Prettier. -- **format:check**: Check code formatting without making changes. +- `build`: Compiles TypeScript files to JavaScript. +- `start`: Runs the compiled JavaScript using Node.js. +- `lint`: Runs ESLint to check for code quality issues in TypeScript files. +- `lint:fix`: Automatically fixes linting issues in TypeScript files. +- `format`: Formats code using Prettier for various file types in the `src` directory. +- `format:check`: Checks code formatting without making changes for various file types in the `src` directory. +- `postbuild`: Makes the compiled `index.js` file executable. +- `changelog`: Generates a changelog based on conventional commits. +- `version`: Updates the changelog and stages it for commit when versioning. +- `test`: Builds the project and runs the test. ## Usage @@ -70,65 +75,66 @@ node dist/index.js --input --output --language -o -l [options] ``` +For example: + +```bash +npx ai-markdown-translator -u https://gitee.com/h7ml/ai-markdown-translator/raw/main/README.md -o output.md -l "Italian" +``` + ### Using the standalone executable ```bash ./ai-markdown-translator --input --output --language [options] ``` -### Options +## Options -- `--input`, `-i`: Input Markdown file (alternative to --url) -- `--url`, `-u`: URL of a Markdown file to translate (alternative to --input) -- `--output`, `-o`: Output Markdown file (required) -- `--language`, `-l`: Target language for translation (required) -- `--openai-url`: OpenAI API URL (default: uses OPENAI_URL environment variable) -- `--api-key`: OpenAI API Key (default: uses API_KEY environment variable) -- `--model`: OpenAI Model to use (default: uses MODEL environment variable or 'gpt-3.5-turbo') -- `--help`, `-h`: Show help +- `--input`, `-i`: Input Markdown file (alternative to `--url`). +- `--url`, `-u`: URL of a Markdown file to translate (alternative to `--input`). +- `--output`, `-o`: Output Markdown file (required). +- `--language`, `-l`: Target language for translation (required). +- `--openai-url`: OpenAI API URL (default: uses `OPENAI_URL` environment variable). +- `--api-key`: OpenAI API Key (default: uses `API_KEY` environment variable). +- `--model`: OpenAI Model to use (default: uses `MODEL` environment variable or `gpt-3.5-turbo`). +- `--help`, `-h`: Show help. +- `--show-version`, `-v`: Show version. -Note: `--input` and `--url` are mutually exclusive - you must provide one or the other. +> Note: `--input` and `--url` are mutually exclusive; you must provide one or the other. ## Environment Variables You can set the following environment variables instead of passing them as command-line arguments: -- `OPENAI_URL`: The URL for the OpenAI API -- `API_KEY`: Your OpenAI API key -- `MODEL`: The OpenAI model to use (e.g., 'gpt-3.5-turbo') +- `OPENAI_URL`: The URL for the OpenAI API. +- `API_KEY`: Your OpenAI API key. +- `MODEL`: The OpenAI model to use (e.g., `'gpt-3.5-turbo'`). You can set these in a `.env` file in the project root or export them in your shell. ## Examples -1. Translate a Markdown file from English to Spanish: +1. **Translate a Markdown file from English to Spanish:** ```bash -./ai-markdown-translator --input english.md --output spanish.md --language "Spanish" +npx ai-markdown-translator -i english.md -o spanish.md -l "Spanish" ``` -2. Translate using a specific OpenAI model: +2. **Translate using a specific OpenAI model:** ```bash -./ai-markdown-translator --input input.md --output output.md --language "French" --model "gpt-4" +npx ai-markdown-translator -i input.md -o output.md -l "French" --model "gpt-4" ``` -3. Translate with custom OpenAI URL and API key: +3. **Translate with custom OpenAI URL and API key:** ```bash -./ai-markdown-translator --input input.md --output output.md --language "German" --openai-url "https://api.302.ai/v1/chat/completions" --api-key "sk-302-api-key" +npx ai-markdown-translator -i input.md -o output.md -l "German" --openai-url "https://api.302.ai/v1/chat/completions" --api-key "sk-302-api-key" ``` -4. Translate a Markdown file using `npx`: +4. **Translate the Markdown content of a URL:** ```bash -npx ai-markdown-translator -i input.md -o output.md -l "Italian" -``` - -5. Translate the Markdown content of the URL: - -```bash -./ai-markdown-translator -u https://gitee.com/h7ml/ai-markdown-translator/raw/main/README.md -o output.md -l "Italian" +npx ai-markdown-translator -u https://gitee.com/h7ml/ai-markdown-translator/raw/main/README.md -o output.md -l "Italian" ``` ## License @@ -161,3 +167,7 @@ Contributions are welcome! Please feel free to submit a Pull Request. ## Support If you encounter any problems or have any questions, please open an issue in this repository. + +--- + +This version combines the usage examples for both `npx` and the standalone executable (`./ai-markdown-translator`) into one cohesive section. Let me know if you'd like to make any further adjustments! diff --git a/package.json b/package.json index 6ec0f9f..16cd687 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,8 @@ "format:check": "prettier --check \"src/**/*.{js,jsx,ts,tsx,json,md}\"", "postbuild": "chmod +x dist/index.js", "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -r 0", - "version": "conventional-changelog -p angular -i CHANGELOG.md -s && git add CHANGELOG.md" + "version": "conventional-changelog -p angular -i CHANGELOG.md -s && git add CHANGELOG.md", + "test": "npm run build && node dist/index.js -i README.md -o README-zh.md -l Chinese" }, "bin": { "ai-markdown-translator": "dist/index.js" diff --git a/src/index.ts b/src/index.ts index c5c619a..cc76e97 100644 --- a/src/index.ts +++ b/src/index.ts @@ -256,7 +256,7 @@ async function main() { type: 'string', default: process.env.MODEL || 'gpt-4o-mini', }) - .option('version', { + .option('show-version', { alias: 'v', description: '显示版本号', type: 'boolean', @@ -264,7 +264,7 @@ async function main() { .help() .alias('help', 'h').argv; - if (argv.version) { + if (argv['show-version']) { const packageJsonPath = path.join(__dirname, '..', 'package.json'); const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8')); console.log(`版本号: ${packageJson.version}`);