diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 286b163..1a2ae1d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,6 +17,8 @@ jobs: steps: - name: Checkout code uses: actions/checkout@v3 + with: + ref: main - name: Set up Node.js uses: actions/setup-node@v3 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e9eced9..a594040 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -13,6 +13,7 @@ jobs: uses: actions/checkout@v3 with: fetch-depth: 0 + ref: main - name: Setup pnpm uses: pnpm/action-setup@v2 @@ -76,9 +77,10 @@ jobs: git config advice.ignoredHook false VERSION=${GITHUB_REF#refs/tags/v} git commit -m "chore(release): update CHANGELOG for v$VERSION [skip ci]" -a || echo "No changes to commit" - BRANCH=$(echo "${GITHUB_REF}" | sed 's@refs/tags/@@') - git push origin HEAD:$BRANCH || echo "Push to repository failed" + git checkout main || git checkout -b main + + git push origin main || echo "Push to repository failed" - name: Upload Release Assets uses: softprops/action-gh-release@v1 @@ -86,4 +88,4 @@ jobs: body_path: CHANGELOG.md env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - continue-on-error: true \ No newline at end of file + continue-on-error: true diff --git a/README-zh.md b/README-zh.md index d3092c5..540ca7a 100644 --- a/README-zh.md +++ b/README-zh.md @@ -1,42 +1,42 @@ -以下是经过修订和合并的 `ai-markdown-translator` 文档版本,包含 `npx` 和 `./ai-markdown-translator` 示例: +以下是经过修订和整合的 `ai-markdown-translator` 文档,其中结合了 `npx` 和 `./ai-markdown-translator` 的示例: --- # ai-markdown-translator
- NPM 版本 + NPM版本 CI - 发布 - NPM 下载量 - NPM 许可证 - GitHub 星标 - GitHub 问题 - GitHub Forks - GitHub 贡献者 + Release + NPM下载 + NPM许可证 + GitHub Stars + GitHub问题 + GitHub分支 + GitHub贡献者
[English](README.md) | [中文](README-zh.md) -`ai-markdown-translator` 是一个命令行工具,可以使用 OpenAI 的语言模型将 Markdown 文件从一种语言翻译成另一种语言。它在翻译内容的同时,保留了 Markdown 语法。 +`ai-markdown-translator` 是一个命令行工具,能利用 OpenAI 的语言模型将 Markdown 文件从一种语言翻译成另一种语言。它在翻译内容的同时保持了 Markdown 语法的完整性。 ## 特性 -- 将 Markdown 文件翻译成 OpenAI 模型支持的任何语言。 -- 在翻译过程中保留 Markdown 语法。 +- 使用 OpenAI 的模型将 Markdown 文件翻译成任何受支持的语言。 +- 在翻译过程中保持 Markdown 语法。 - 通过命令行参数或环境变量灵活配置。 ## 先决条件 - Node.js(v14 或更高版本) -- npm(通常与 Node.js 一起安装) -- 一个 OpenAI API 密钥 +- npm(通常与 Node.js 一起提供) +- OpenAI API 密钥 ## 安装 -1. 克隆此库或下载源代码。 +1. 克隆此仓库或下载源代码。 2. 在终端中导航到项目目录。 -3. 安装依赖项: +3. 安装依赖: ```bash npm install @@ -50,20 +50,20 @@ npm run build ## 脚本 -- `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`:在版本控制时更新变更日志并将其暂存以供提交。 +- `build`:将 TypeScript 文件编译成 JavaScript。 +- `start`:使用 Node.js 运行编译的 JavaScript。 +- `lint`:运行 ESLint 以检查 TypeScript 文件中的代码质量问题。 +- `lint:fix`:自动修复 TypeScript 文件中的 linting 问题。 +- `format`:使用 Prettier 格式化`src`目录中多种文件类型的代码。 +- `format:check`:检查代码格式,但不进行修改`src`目录中多种文件类型的代码。 +- `postbuild`:使编译的`index.js`文件可执行。 +- `changelog`:基于常规提交生成更新日志。 +- `version`:在版本控制时更新更新日志并将其暂存为提交。 - `test`:构建项目并运行测试。 -## 用法 +## 使用方法 -您可以使用 Node.js、`npx` 或作为独立可执行文件(如果您已将其打包)来运行 CLI 工具。 +你可以使用 Node.js、`npx`或者作为独立的可执行文件运行 CLI 工具(如果你打包过它)。 ### 使用 Node.js @@ -83,7 +83,7 @@ npx ai-markdown-translator -i <输入文件> -o <输出文件> -l <目标语言> 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 <目标语言> [选项] @@ -91,27 +91,27 @@ npx ai-markdown-translator -u https://gitee.com/h7ml/ai-markdown-translator/raw/ ## 选项 -- `--input`, `-i`:输入 Markdown 文件(可替代 `--url`)。 -- `--url`, `-u`:要翻译的 Markdown 文件的 URL(可替代 `--input`)。 -- `--output`, `-o`:输出 Markdown 文件(必需)。 +- `--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`:显示帮助信息。 +- `--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 密钥。 +- `API_KEY`:你的 OpenAI API 密钥。 - `MODEL`:要使用的 OpenAI 模型(例如,`'gpt-3.5-turbo'`)。 -您可以在项目根目录中的 `.env` 文件中设置这些变量,或在您的 shell 中导出它们。 +你可以在项目根目录中的`.env`文件中设置这些变量,或者在你的 shell 中导出它们。 ## 示例 @@ -127,13 +127,13 @@ npx ai-markdown-translator -i english.md -o spanish.md -l "Spanish" npx ai-markdown-translator -i input.md -o output.md -l "French" --model "gpt-4" ``` -3. **使用自定义 OpenAI URL 和 API 密钥进行翻译:** +3. **使用自定义的 OpenAI URL 和 API 密钥进行翻译:** ```bash 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. **翻译 URL 的 Markdown 内容:** +4. **翻译 URL 中的 Markdown 内容:** ```bash npx ai-markdown-translator -u https://gitee.com/h7ml/ai-markdown-translator/raw/main/README.md -o output.md -l "Italian" @@ -150,17 +150,17 @@ npx ai-markdown-translator -u https://gitee.com/h7ml/ai-markdown-translator/raw/ ## 版本信息 -- **当前版本**:1.0.6 +- **当前版本**:1.0.7 - **NPM 包**:[ai-markdown-translator](https://www.npmjs.com/package/ai-markdown-translator) ## CI 信息 -该项目使用 GitHub Actions 进行持续集成。CI 工作流包括: +此项目使用 GitHub Actions 进行持续集成。CI 工作流包括: -- 使用 ESLint 对代码进行 lint 检查 -- 运行测试(如适用) +- 使用 ESLint 对代码进行 linting +- 运行测试(如果适用) - 构建项目 -- 缓存依赖项以加快构建速度 +- 缓存依赖以加速构建 ## 贡献 @@ -168,8 +168,8 @@ npx ai-markdown-translator -u https://gitee.com/h7ml/ai-markdown-translator/raw/ ## 支持 -如果您遇到任何问题或有任何疑问,请在此仓库中提出问题。 +如果你遇到任何问题或有任何问题,请在这个仓库中打开一个 issue。 --- -此版本将 `npx` 和独立可执行文件(`./ai-markdown-translator`)的用法示例合并为一个一致的部分。如果您希望进行进一步调整,请告诉我! \ No newline at end of file +这个版本将 `npx` 和独立可执行文件 (`./ai-markdown-translator`) 的使用示例合并成了一个连贯的部分。如果你想进行任何进一步的调整,请告诉我! diff --git a/README.md b/README.md index d29fb3d..064e4e8 100644 --- a/README.md +++ b/README.md @@ -93,7 +93,7 @@ npx ai-markdown-translator -u https://gitee.com/h7ml/ai-markdown-translator/raw/ - `--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). +- `--output`, `-o`: Output Markdown file (if not provided, defaults to the input file name). - `--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). @@ -150,7 +150,7 @@ npx ai-markdown-translator -u https://gitee.com/h7ml/ai-markdown-translator/raw/ ## Version Information -- **Current Version**: 1.0.6 +- **Current Version**: 1.0.7 - **NPM Package**: [ai-markdown-translator](https://www.npmjs.com/package/ai-markdown-translator) ## CI Information diff --git a/package.json b/package.json index 16cd687..8fb089b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ai-markdown-translator", - "version": "1.0.6", + "version": "1.0.7", "description": "CLI tool to translate Markdown files using OpenAI's language models while preserving the original formatting.", "main": "dist/index.js", "type": "module", diff --git a/src/index.ts b/src/index.ts index cc76e97..211b813 100644 --- a/src/index.ts +++ b/src/index.ts @@ -233,7 +233,6 @@ async function main() { alias: 'o', description: '输出的Markdown文件', type: 'string', - demandOption: true, }) .option('language', { alias: 'l', @@ -295,6 +294,14 @@ async function main() { markdownContent = markdownContent.slice(0, -3).trim(); } + if (!argv.output && argv.input) { + argv.output = argv.input; + } + + if (typeof argv.output !== 'string') { + throw new Error('输出文件名无效。'); + } + const translatedContent = await translateText( markdownContent, argv.language, @@ -304,7 +311,20 @@ async function main() { ); if (translatedContent) { - writeMarkdownFile(argv.output, translatedContent); + let modifiedContent = translatedContent; // Create a mutable variable + // 校验下第一行是否含有``` 和 最后是否含有``` 如果是的话 那么删掉第一行和最后行 + if (modifiedContent.startsWith('```')) { + const endOfFirstLine = modifiedContent.indexOf('\n'); + // 删除整行代码块标记(包括```和可能的语言标识符) + modifiedContent = modifiedContent.slice(endOfFirstLine + 1).trim(); + } + + if (modifiedContent.endsWith('```')) { + const startOfLastLine = modifiedContent.lastIndexOf('\n'); + // 删除整行代码块标记 + modifiedContent = modifiedContent.slice(0, startOfLastLine).trim(); + } + writeMarkdownFile(argv.output, modifiedContent); console.log(`翻译完成。输出已保存到 ${argv.output}。`); } else { console.log('翻译失败。');