Skip to content

Commit

Permalink
ci: 添加翻译任务并优化 CI 工作流
Browse files Browse the repository at this point in the history
- 新增翻译任务,将系统文档翻译成英文、日文和朝鲜语
- 在 CI 工作流中添加翻译步骤,使用 GPT-4 和其他模型进行翻译
- 更新 README-zh.md,对文档进行修订和合并
- 新增 copy.js 脚本,用于复制 Markdown 文件
- 添加系统和翻译文档,为 AI 翻译提供指导
  • Loading branch information
h7ml committed Dec 20, 2024
1 parent 7efe31a commit 45a2233
Show file tree
Hide file tree
Showing 9 changed files with 586 additions and 51 deletions.
7 changes: 5 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -64,10 +64,13 @@ jobs:
- name: Test
run: |
pnpm test || (echo "Test failed" && exit 1)
mkdir -p translate
node ./dist/index.js -i ./src/system.md -o ./translate/system-gpt-4o-en.md -l English --openai-url https://models.inference.ai.azure.com/chat/completions --api-key ${{ secrets.OPENAI_API_KEY }} --model gpt-4o
node ./dist/index.js -i ./src/system.md -o ./translate/system-ministral-3b-ja.md -l Japanese --openai-url https://models.inference.ai.azure.com/chat/completions --api-key ${{ secrets.OPENAI_API_KEY }} --model Ministral-3B
node ./dist/index.js -i ./src/system.md -o ./translate/system-phi-3.5-mini-instruct-ko.md -l 朝鲜语 --openai-url https://models.inference.ai.azure.com/chat/completions --api-key ${{ secrets.OPENAI_API_KEY }} --model Phi-3.5-mini-instruct
- name: Commit and Push
run: |
git add README-zh.md
git add README-zh.md translate/
git config --local user.email "[email protected]"
git config --local user.name "GitHub Action"
git config advice.ignoredHook false
Expand Down
90 changes: 45 additions & 45 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 version"></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="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 Downloads"></a>
<a href="https://www.npmjs.org/package/ai-markdown-translator"><img src="https://img.shields.io/npm/l/ai-markdown-translator" alt="NPM License"></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 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 Issues"></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 Contributors"></a>
</div>

[English](README.md) | [中文](README-zh.md)
[英文](README.md) | [中文](README-zh.md)

`ai-markdown-translator` 是一个命令行工具,使用 OpenAI 的语言模型将 Markdown 文件从一种语言翻译为另一种语言。它在翻译内容时保持 Markdown 语法。
`ai-markdown-translator` 是一个命令行工具,用于使用 OpenAI 的语言模型将 Markdown 文件从一种语言翻译成另一种语言。它在翻译内容时保留 Markdown 语法。

## 特性

- 将 Markdown 文件翻译成 OpenAI 模型支持的任何语言。
- 在翻译过程中保留 Markdown 语法。
- 通过命令行参数或环境变量进行灵活配置
- 将 Markdown 文件翻译为 OpenAI 模型支持的任何语言。
- 在翻译过程中保持 Markdown 语法。
- 通过命令行参数或环境变量灵活配置

## 先决条件
## 前提条件

- Node.js (v14 或更高)
- npm (通常与 Node.js 一起安装)
- npm (通常随 Node.js 一起安装)
- OpenAI API 密钥

## 安装

1. 克隆此代码库或下载源代码
1. 克隆此存储库或下载源代码
2. 在终端中导航到项目目录。
3. 安装依赖项
3. 安装依赖

```bash
npm install
Expand All @@ -51,19 +51,19 @@ npm run build
## 脚本

- `build`: 将 TypeScript 文件编译为 JavaScript。
- `start`: 使用 Node.js 运行编译后的 JavaScript。
- `lint`: 使用 ESLint 检查 TypeScript 文件中的代码质量问题。
- `lint:fix`: 自动修复 TypeScript 文件中的 linting 问题。
- `format`: 使用 Prettier 格式化 `src` 目录中的各种文件类型
- `format:check`: 检查 `src` 目录中各种文件类型的代码格式,而不进行更改
- `start`: 使用 Node.js 运行已编译的 JavaScript。
- `lint`: 运行 ESLint 检查 TypeScript 文件中的代码质量问题。
- `lint:fix`: 自动修复 TypeScript 文件中的 lint 问题。
- `format`: 使用 Prettier 格式化 `src` 目录中的各种文件类型代码
- `format:check`: 检查代码格式而不进行更改,适用于 `src` 目录中的各种文件类型
- `postbuild`: 使编译后的 `index.js` 文件可执行。
- `changelog`: 基于约定式提交生成变更日志
- `version`: 在版本更新时更新变更日志并将其加入版本提交
- `changelog`: 生成基于常规提交的变更日志
- `version`: 当版本变更时更新变更日志并将其暂存以供提交
- `test`: 构建项目并运行测试。

## 使用方法
## 用法

您可以使用 Node.js、`npx` 或作为独立可执行文件(如果您已打包)来运行 CLI 工具。
你可以使用 Node.js、`npx` 或作为独立可执行文件(如果你已经打包它)来运行 CLI 工具。

### 使用 Node.js

Expand Down Expand Up @@ -91,54 +91,54 @@ npx ai-markdown-translator -u https://gitee.com/h7ml/ai-markdown-translator/raw/

## 选项

- `--input`, `-i`: 输入 Markdown 文件或目录(替代 `--url`)。此选项允许您指定要翻译的 Markdown 文件或目录的路径。
- `--url`, `-u`: 要翻译的 Markdown 文件的 URL(替代 `--input`)。使用此选项提供您想要翻译的 Markdown 文件的直接链接。
- `--input`, `-i`: 输入的 Markdown 文件或目录(替代 `--url`)。此选项允许你指定要翻译的 Markdown 文件或目录的路径。
- `--url`, `-u`: 要翻译的 Markdown 文件的 URL(替代 `--input`)。使用此选项提供要翻译的 Markdown 文件的直接链接。

- `--extension`, `-e`: 指定要翻译的文件扩展名(例如,`md`)。如果未提供,将处理所有文件。此选项允许您根据文件的扩展名过滤要翻译的文件
- `--extension`, `-e`: 指定要翻译的文件扩展名(例如,`md`)。如果未提供,将处理所有文件。此选项允许你根据文件扩展名过滤要翻译的文件

- `--rename`: 是否修改文件名。如果为 true,则输出文件将命名为 `<原文件名>-translated.<扩展名>`此选项允许您指定是否希望在翻译后的文件名后附加后缀
- `--rename`: 是否修改文件名。如果为真,输出文件将命名为 `<原始文件名>-translated.<扩展名>`此选项允许你指定是否希望在翻译后的文件名中附加后缀

- `--output`, `-o`: 输出 Markdown 文件(如果未提供,默认为输入文件名)。此选项允许您指定保存翻译内容的输出文件的名称
- `--output`, `-o`: 输出的 Markdown 文件(如果未提供,默认为输入文件名)。此选项允许你指定翻译内容保存输出文件的名称

- `--language`, `-l`: 翻译的目标语言(必需)。此选项指定您希望将 Markdown 内容翻译成的语言。
- `--language`, `-l`: 翻译的目标语言(必填)。此选项指定你希望将 Markdown 内容翻译成的语言。

- `--openai-url`: OpenAI API URL(默认:使用 `OPENAI_URL` 环境变量)。此选项允许您如有需要指定自定义的 OpenAI API URL。
- `--openai-url`: OpenAI API URL(默认:使用 `OPENAI_URL` 环境变量)。此选项允许你在需要时指定 OpenAI API 的自定义 URL。

- `--api-key`: OpenAI API 密钥(默认:使用 `API_KEY` 环境变量)。此选项用于提供您的 OpenAI API 密钥以进行身份验证。
- `--api-key`: OpenAI API 密钥(默认:使用 `API_KEY` 环境变量)。此选项用于提供你的 OpenAI API 密钥以进行身份验证。

- `--model`: 要使用的 OpenAI 模型(默认:使用 `MODEL` 环境变量或 `gpt-3.5-turbo`)。此选项允许您指定要用于翻译的 OpenAI 模型。
- `--model`: 使用的 OpenAI 模型(默认:使用 `MODEL` 环境变量或 `gpt-3.5-turbo`)。此选项允许你指定要用于翻译的 OpenAI 模型。

- `--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` 文件中设置这些变量,或者在命令行中导出它们

## 示例

1. **将 Markdown 文件从英文翻译成西班牙文**
1. **将 Markdown 文件从英语翻译成西班牙语**

```bash
npx ai-markdown-translator -i english.md -o spanish.md -l "西班牙语"
```

2. **使用特定的 OpenAI 模型翻译**
2. **使用特定的 OpenAI 模型进行翻译**

```bash
npx ai-markdown-translator -i input.md -o output.md -l "法语" --model "gpt-4"
```

3. **使用自定义 OpenAI URL 和 API 密钥翻译**
3. **使用自定义 OpenAI URL 和 API 密钥进行翻译**

```bash
npx ai-markdown-translator -i input.md -o output.md -l "德语" --openai-url "https://api.302.ai/v1/chat/completions" --api-key "sk-302-api-key"
Expand Down Expand Up @@ -168,7 +168,7 @@ npx ai-markdown-translator -i example.md -o translated_example.md -l "日语"

## Git 信息

- **代码库**: [h7ml/ai-markdown-translator](https://github.com/h7ml/ai-markdown-translator)
- **存储库**: [h7ml/ai-markdown-translator](https://github.com/h7ml/ai-markdown-translator)
- **问题**: [报告问题](https://github.com/h7ml/ai-markdown-translator/issues)

## 版本信息
Expand All @@ -178,21 +178,21 @@ npx ai-markdown-translator -i example.md -o translated_example.md -l "日语"

## CI 信息

该项目使用 GitHub Actions 进行持续集成。CI 工作流包括
该项目使用 GitHub Actions 进行持续集成。CI 工作流程包括

- 使用 ESLint 对代码进行 linting
- 使用 ESLint 对代码进行检测
- 运行测试(如果适用)
- 构建项目
- 缓存依赖项以加快构建速度
- 缓存依赖以加快构建速度

## 贡献

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

## 支持

如果您遇到任何问题或有任何疑问,请在此代码库中提交问题
如果你遇到任何问题或有任何疑问,请在此存储库中提出问题

---

这个版本将 `npx` 和独立可执行文件(`./ai-markdown-translator`的使用示例整合为一个统一的部分。如果您希望进行任何进一步的调整,请告诉我!
此版本将 `npx` 和独立可执行文件(`./ai-markdown-translator`的用法示例合并为一个统一的部分。如需进一步调整,请告诉我!
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"main": "dist/index.js",
"type": "module",
"scripts": {
"build": "tsc",
"build": "tsc && node ./scripts/copy.js",
"start": "node dist/index.js",
"lint": "eslint . --ext .ts",
"lint:fix": "eslint . --ext .ts --fix",
Expand Down
30 changes: 30 additions & 0 deletions scripts/copy.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import fs from 'fs';
import path from 'path';
import { fileURLToPath } from 'url';

// 将 import.meta.url 转换为文件路径
const __filename = fileURLToPath(import.meta.url); // 当前脚本的文件路径
const __dirname = path.dirname(__filename); // 当前文件所在目录

const srcDir = path.join(__dirname, '../src'); // 源文件目录
const distDir = path.join(__dirname, '../dist'); // 目标文件目录

// 检查目标目录是否存在,如果不存在则创建
if (!fs.existsSync(distDir)) {
fs.mkdirSync(distDir, { recursive: true }); // 递归创建目标目录
}

// 遍历 src 目录下的所有 Markdown 文件
const files = fs.readdirSync(srcDir);
files.forEach((file) => {
const filePath = path.join(srcDir, file);

// 检查是否是 .md 文件
if (path.extname(file) === '.md') {
const destPath = path.join(distDir, file); // 目标文件路径

// 复制文件
fs.copyFileSync(filePath, destPath);
console.log(`已复制文件 ${file}${distDir}`);
}
});
Loading

0 comments on commit 45a2233

Please sign in to comment.