Skip to content

Commit

Permalink
Merge pull request #7 from h7ml/dev
Browse files Browse the repository at this point in the history
feat: 优化 CLI 工具的输出文件处理逻辑
  • Loading branch information
h7ml authored Dec 14, 2024
2 parents 74b3682 + 78b31cd commit a618813
Show file tree
Hide file tree
Showing 6 changed files with 80 additions and 56 deletions.
2 changes: 2 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
8 changes: 5 additions & 3 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ jobs:
uses: actions/checkout@v3
with:
fetch-depth: 0
ref: main

- name: Setup pnpm
uses: pnpm/action-setup@v2
Expand Down Expand Up @@ -76,14 +77,15 @@ 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
with:
body_path: CHANGELOG.md
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
continue-on-error: true
continue-on-error: true
96 changes: 48 additions & 48 deletions README-zh.md
Original file line number Diff line number Diff line change
@@ -1,42 +1,42 @@
以下是经过修订和合并的 `ai-markdown-translator` 文档版本,包含 `npx``./ai-markdown-translator` 示例
以下是经过修订和整合的 `ai-markdown-translator` 文档,其中结合了 `npx``./ai-markdown-translator` 的示例

---

# ai-markdown-translator

<div>
<a href="https://www.npmjs.org/package/ai-markdown-translator"><img src="https://img.shields.io/npm/v/ai-markdown-translator.svg?style=flat" alt="NPM 版本"></a>
<a href="https://www.npmjs.org/package/ai-markdown-translator"><img src="https://img.shields.io/npm/v/ai-markdown-translator.svg?style=flat" alt="NPM版本"></a>
<a href="https://github.com/h7ml/ai-markdown-translator/actions/workflows/ci.yml"><img src="https://github.com/h7ml/ai-markdown-translator/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
<a href="https://github.com/h7ml/ai-markdown-translator/actions/workflows/release.yml"><img src="https://github.com/h7ml/ai-markdown-translator/actions/workflows/release.yml/badge.svg" alt="发布"></a>
<a href="https://www.npmjs.org/package/ai-markdown-translator"><img src="https://img.shields.io/npm/dw/ai-markdown-translator" alt="NPM 下载量"></a>
<a href="https://www.npmjs.org/package/ai-markdown-translator"><img src="https://img.shields.io/npm/l/ai-markdown-translator" alt="NPM 许可证"></a>
<a href="https://github.com/h7ml/ai-markdown-translator/stargazers"><img src="https://img.shields.io/github/stars/h7ml/ai-markdown-translator.svg" alt="GitHub 星标"></a>
<a href="https://github.com/h7ml/ai-markdown-translator/issues"><img src="https://img.shields.io/github/issues/h7ml/ai-markdown-translator.svg" alt="GitHub 问题"></a>
<a href="https://github.com/h7ml/ai-markdown-translator/network/members"><img src="https://img.shields.io/github/forks/h7ml/ai-markdown-translator.svg" alt="GitHub Forks"></a>
<a href="https://github.com/h7ml/ai-markdown-translator/graphs/contributors"><img src="https://img.shields.io/github/contributors/h7ml/ai-markdown-translator.svg" alt="GitHub 贡献者"></a>
<a href="https://github.com/h7ml/ai-markdown-translator/actions/workflows/release.yml"><img src="https://github.com/h7ml/ai-markdown-translator/actions/workflows/release.yml/badge.svg" alt="Release"></a>
<a href="https://www.npmjs.org/package/ai-markdown-translator"><img src="https://img.shields.io/npm/dw/ai-markdown-translator" alt="NPM下载"></a>
<a href="https://www.npmjs.org/package/ai-markdown-translator"><img src="https://img.shields.io/npm/l/ai-markdown-translator" alt="NPM许可证"></a>
<a href="https://github.com/h7ml/ai-markdown-translator/stargazers"><img src="https://img.shields.io/github/stars/h7ml/ai-markdown-translator.svg" alt="GitHub Stars"></a>
<a href="https://github.com/h7ml/ai-markdown-translator/issues"><img src="https://img.shields.io/github/issues/h7ml/ai-markdown-translator.svg" alt="GitHub问题"></a>
<a href="https://github.com/h7ml/ai-markdown-translator/network/members"><img src="https://img.shields.io/github/forks/h7ml/ai-markdown-translator.svg" alt="GitHub分支"></a>
<a href="https://github.com/h7ml/ai-markdown-translator/graphs/contributors"><img src="https://img.shields.io/github/contributors/h7ml/ai-markdown-translator.svg" alt="GitHub贡献者"></a>
</div>

[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
Expand All @@ -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

Expand All @@ -83,35 +83,35 @@ 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 <目标语言> [选项]
```

## 选项

- `--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 中导出它们。

## 示例

Expand All @@ -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"
Expand All @@ -150,26 +150,26 @@ 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
- 运行测试(如果适用
- 构建项目
- 缓存依赖项以加快构建速度
- 缓存依赖以加速构建

## 贡献

欢迎贡献!请随时提交 Pull Request。

## 支持

如果您遇到任何问题或有任何疑问,请在此仓库中提出问题
如果你遇到任何问题或有任何问题,请在这个仓库中打开一个 issue

---

此版本将 `npx` 和独立可执行文件`./ai-markdown-translator`)的用法示例合并为一个一致的部分。如果您希望进行进一步调整,请告诉我!
这个版本将 `npx` 和独立可执行文件 (`./ai-markdown-translator`) 的使用示例合并成了一个连贯的部分。如果你想进行任何进一步的调整,请告诉我!
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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).
Expand Down Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -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",
Expand Down
24 changes: 22 additions & 2 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -233,7 +233,6 @@ async function main() {
alias: 'o',
description: '输出的Markdown文件',
type: 'string',
demandOption: true,
})
.option('language', {
alias: 'l',
Expand Down Expand Up @@ -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,
Expand All @@ -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('翻译失败。');
Expand Down

0 comments on commit a618813

Please sign in to comment.