Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ci: 添加翻译任务并优化 CI 工作流 #10

Merged
merged 1 commit into from
Dec 20, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading