Last active 1 month ago

翻译文档为中文文档

Jetsung Chan revised this gist 4 months ago. Go to revision

2 files changed, 10 insertions, 9 deletions

DOCS.md

@@ -56,11 +56,12 @@ aitr
56 56 git clone https://github.com/xxx/docs.git docsite
57 57 # cp -r docs_zh/* ./docsite/docs
58 58 cp -r docs_zh/* ./docsite/content
59 - cd docsite
60 59 ```
61 60
62 61 8. 启动或构建
63 62 ```bash
63 + cd docsite
64 +
64 65 # NodeJS
65 66 npm install
66 67 npm run dev

docs.yml

@@ -31,11 +31,11 @@ jobs:
31 31 - name: Fetch Source
32 32 run: |
33 33 git clone https://github.com/xxx/docs.git docsite
34 - - name: Build Docs
35 - run: |
36 - cp -r docs_zh/* ./docsite/content
37 - cd docsite/
38 - - name: Build Docs
34 + cd docsite
35 + git checkout $(cat ../commit.txt)
36 + - name: Copy Chinese Docs
37 + run: cp -r docs_zh/* ./docsite/docs/
38 + - name: Build Site
39 39 working-directory: ./docsite
40 40 run: |
41 41 echo "Building documentation..."
@@ -57,7 +57,7 @@ jobs:
57 57 steps:
58 58 # - uses: actions/configure-pages@v5
59 59 - name: Download build artifacts
60 - uses: actions/download-artifact@v6
60 + uses: actions/download-artifact@v7
61 61 with:
62 62 name: docs-site
63 63 path: ./public
@@ -77,7 +77,7 @@ jobs:
77 77 runs-on: ubuntu-latest
78 78 steps:
79 79 - name: Download build artifacts
80 - uses: actions/download-artifact@v6
80 + uses: actions/download-artifact@v7
81 81 with:
82 82 name: docs-site
83 83 path: ./public
@@ -95,7 +95,7 @@ jobs:
95 95 - run: echo "" >> ~/.ssh/access # fix
96 96 - name: Deploy the website
97 97 env:
98 - WEBROOT: /data/wwwroot/docker
98 + WEBROOT: /data/wwwroot/MYDOCSITE
99 99 run: |
100 100 ssh webserver "rm -rf $WEBROOT && mkdir -p $WEBROOT"
101 101 scp docs-site.tar.xz webserver:${WEBROOT}/

Jetsung Chan revised this gist 4 months ago. Go to revision

5 files changed, 81 insertions, 17 deletions

DOCS.md

@@ -6,6 +6,14 @@
6 6
7 7 ### 首次使用
8 8 1. 创建空分支
9 +
10 + > 未初始化
11 + ```bash
12 + git init
13 + git branch -m docs
14 + ```
15 +
16 + > 已存在项目
9 17 ```bash
10 18 git switch --orphan docs
11 19 ```
@@ -20,6 +28,8 @@ git push origin docs
20 28 3. 拉取上游源码
21 29 ```bash
22 30 mkdir -p docsite
31 + pushd docsite
32 + git init
23 33 git remote add upstream https://github.com/xxx/docs.git
24 34 git reset --hard
25 35 git fetch upstream main
@@ -44,6 +54,7 @@ aitr
44 54 6. 本地测试与构建
45 55 ```bash
46 56 git clone https://github.com/xxx/docs.git docsite
57 + # cp -r docs_zh/* ./docsite/docs
47 58 cp -r docs_zh/* ./docsite/content
48 59 cd docsite
49 60 ```

config.example.toml

@@ -10,6 +10,12 @@ output_mode = "new_folder"
10 10 # 排除的目录 (逗号分隔)
11 11 exclude_dir = "node_modules,.git,_build"
12 12
13 + # 白名单文件扩展名 (逗号分隔,留空表示使用默认支持的格式)
14 + # whitelist_extensions = "md,txt,srt"
15 +
16 + # 黑名单文件扩展名 (逗号分隔,留空表示不排除任何格式)
17 + # blacklist_extensions = "pdf,docx"
18 +
13 19 # 最大 token 数
14 20 max_tokens = 99999
15 21

deploy.sh

@@ -7,7 +7,7 @@
7 7 # Author: Jetsung Chan <[email protected]>
8 8 # Version: 0.2.0
9 9 # CreatedAt: 2025-12-16
10 - # UpdatedAt: 2026-01-27
10 + # UpdatedAt: 2026-01-29
11 11 #============================================================
12 12
13 13
@@ -241,6 +241,46 @@ deploy_docs_zh() {
241 241 echo "======================================"
242 242 }
243 243
244 + # 更新项目信息
245 + update_info() {
246 + local repo_url="${1:-}"
247 + local title="${2:-}"
248 +
249 + if [[ -z "$repo_url" ]]; then
250 + echo "❌ 缺少参数: repo_url" >&2
251 + echo "示例: $0 --init https://github.com/user/repo.git [\"我的文档\"]"
252 + exit 1
253 + fi
254 +
255 + echo "======================================"
256 + echo "📝 开始更新项目信息"
257 + echo "======================================"
258 + echo "→ 仓库地址: $repo_url"
259 + if [[ -n "$title" ]]; then
260 + echo "→ 文档标题: $title 中文文档"
261 + fi
262 +
263 + if [[ -f README.md ]]; then
264 + sed -i "s#https://github.com/xxx/docs.git#$repo_url#g" README.md
265 + if [[ -n "$title" ]]; then
266 + sed -i "s/^# 中文文档/# $title 中文文档/g" README.md
267 + fi
268 + echo "✓ README.md 已更新"
269 + else
270 + echo "⚠️ README.md 不存在,跳过"
271 + fi
272 +
273 + # 同步更新 docs.yml
274 + if [[ -f .github/workflows/docs.yml ]]; then
275 + sed -i "s#https://github.com/xxx/docs.git#$repo_url#g" .github/workflows/docs.yml
276 + echo "✓ .github/workflows/docs.yml 已更新"
277 + fi
278 +
279 + echo "======================================"
280 + echo "✓ 项目信息更新完成"
281 + echo "======================================"
282 + }
283 +
244 284 # 调用翻译脚本
245 285 translate() {
246 286 echo "======================================"
@@ -262,6 +302,7 @@ usage() {
262 302 用法: $0 [选项]
263 303
264 304 选项:
305 + -i --init 初始化项目信息 (替换仓库地址和标题)
265 306 -d --deploy 部署 docs_zh 到 docsite
266 307 -c --config 设置配置文件
267 308 -s --sync 同步源文档
@@ -272,6 +313,7 @@ usage() {
272 313 -h --help 显示此帮助信息
273 314
274 315 示例:
316 + $0 --init https://github.com/user/repo.git "我的文档"
275 317 $0 --translate
276 318 $0 --update
277 319 $0 --sync --branch develop
@@ -292,8 +334,21 @@ main() {
292 334
293 335 # 先解析所有参数
294 336 local actions=()
337 + local INIT_REPO=""
338 + local INIT_TITLE=""
295 339 while [[ $# -gt 0 ]]; do
296 340 case $1 in
341 + -i|--init)
342 + INIT_REPO="$2"
343 + # 检查 $3 是否存在且不是一个选项 (以 - 开头)
344 + if [[ -n "${3:-}" && "${3:-}" != -* ]]; then
345 + INIT_TITLE="$3"
346 + shift 3
347 + else
348 + shift 2
349 + fi
350 + actions+=("init")
351 + ;;
297 352 -b|--branch)
298 353 CUSTOM_BRANCH="$2"
299 354 shift 2
@@ -354,6 +409,10 @@ main() {
354 409 # 执行操作
355 410 for action in "${actions[@]}"; do
356 411 case $action in
412 + init)
413 + echo "→ 执行操作: 初始化项目信息"
414 + update_info "$INIT_REPO" "$INIT_TITLE"
415 + ;;
357 416 deploy)
358 417 echo "→ 执行操作: 部署 docs_zh"
359 418 deploy_docs_zh

docs.yml

@@ -24,31 +24,21 @@ defaults:
24 24 jobs:
25 25 build:
26 26 env:
27 - HUGO_VERSION: 0.154.2
28 27 TZ: Asia/Shanghai
29 28 runs-on: ubuntu-latest
30 29 steps:
31 30 - uses: actions/checkout@v6
32 - - name: Install Hugo
33 - run: |
34 - curl -L https://fx4.cn/hugo | bash -s -- -v "$HUGO_VERSION" -w
35 - - name: Verify installations
36 - run: |
37 - echo "Hugo: $(hugo version)"
38 - echo "Node.js: $(node --version)"
39 31 - name: Fetch Source
40 32 run: |
41 33 git clone https://github.com/xxx/docs.git docsite
42 - - name: Fix
43 - run: |
44 - # sed -i 's/refLinksErrorLevel: WARNING/refLinksErrorLevel: ERROR/' docsite/hugo.yaml
45 - sed -i '/baseURL/d' docsite/hugo.yaml
46 34 - name: Build Docs
47 35 run: |
48 36 cp -r docs_zh/* ./docsite/content
49 37 cd docsite/
50 - npm install
51 - hugo build
38 + - name: Build Docs
39 + working-directory: ./docsite
40 + run: |
41 + echo "Building documentation..."
52 42 - name: Copy CNAME
53 43 run: cp CNAME docsite/public/
54 44 - name: Upload build artifacts

init.sh

@@ -16,8 +16,6 @@ download_files() {
16 16
17 17 curl -fsSL -O "${BASE_URL}/config.example.toml"
18 18
19 - curl -fsSL -O "${BASE_URL}/config.example.toml"
20 -
21 19 curl -fsSL -O "${BASE_URL}/.gitignore"
22 20
23 21 curl -fsSL --create-dirs -o ".github/workflows/docs.yml" "${BASE_URL}/docs.yml"

Jetsung Chan revised this gist 4 months ago. Go to revision

3 files changed, 250 insertions, 55 deletions

DOCS.md

@@ -20,13 +20,7 @@ git push origin docs
20 20 3. 拉取上游源码
21 21 ```bash
22 22 mkdir -p docsite
23 - pushd docsite
24 - if [[ -d .git ]]; then
25 - git remote set-url upstream https://github.com/xxx/docs.git
26 - else
27 - git init
28 - git remote add upstream https://github.com/xxx/docs.git
29 - fi
23 + git remote add upstream https://github.com/xxx/docs.git
30 24 git reset --hard
31 25 git fetch upstream main
32 26 git merge upstream/main

config.example.toml

@@ -13,6 +13,9 @@ exclude_dir = "node_modules,.git,_build"
13 13 # 最大 token 数
14 14 max_tokens = 99999
15 15
16 + # 大文件拆分阈值 (单位:字符)
17 + max_chunk_size = 8192
18 +
16 19 # 系统提示词(支持多行,使用 """ 包裹)
17 20 system_prompt = """
18 21 你是一个专业的技术文档翻译专家。请将以下英文 Markdown 文档翻译成流畅、自然的简体中文。

deploy.sh

@@ -2,12 +2,12 @@
2 2
3 3 #============================================================
4 4 # File: deploy.sh
5 - # Description: 部署
5 + # Description: 部署中文文档
6 6 # URL:
7 7 # Author: Jetsung Chan <[email protected]>
8 8 # Version: 0.2.0
9 9 # CreatedAt: 2025-12-16
10 - # UpdatedAt: 2026-01-08
10 + # UpdatedAt: 2026-01-27
11 11 #============================================================
12 12
13 13
@@ -17,7 +17,7 @@ else
17 17 set -euo pipefail
18 18 fi
19 19
20 - DEFAULT_BRANCH="main"
20 + DEFAULT_BRANCH="${BRANCH:-main}"
21 21 HUGO_VERSION=${HUGO:-0.154.2}
22 22
23 23 DELETE_FILE="deleted_docs.txt"
@@ -25,73 +25,157 @@ ADD_FILE="new_docs.txt"
25 25 MODIFIED_FILE="modified_docs.txt"
26 26 TRANSLATE_LIST="translate_list.txt"
27 27
28 + UPSTREAM_URL="${UPSTREAM_URL:-}"
29 + UPSTREAM_NAME="upstream"
30 +
31 + # 命令行参数
32 + CUSTOM_BRANCH=""
33 + CUSTOM_UPSTREAM=""
34 +
28 35 install_hugo() {
36 + echo "======================================"
37 + echo "📦 开始安装 Hugo"
38 + echo "======================================"
39 + echo "→ 目标版本: $HUGO_VERSION"
40 + echo "→ 正在下载并安装..."
29 41 curl -L https://fx4.cn/hugo | bash -s -- -v "$HUGO_VERSION" -w
42 + echo "✓ Hugo 安装完成"
43 + hugo version
44 + echo "======================================"
30 45 }
31 46
32 - merge_config() {
47 + setup_config() {
48 + echo "======================================"
49 + echo "⚙️ 开始设置配置文件"
50 + echo "======================================"
33 51 if [[ -f config.example.toml ]]; then
52 + echo "→ 从 config.example.toml 提取基础配置..."
34 53 sed '/providers/,$d' ./config.example.toml | tee config.toml > /dev/null
54 + echo "✓ 基础配置提取完成"
55 + else
56 + echo "⚠️ config.example.toml 不存在,跳过基础配置"
35 57 fi
36 58
37 59 if [[ -f aitr.toml ]]; then
60 + echo "→ 从 aitr.toml 追加日志配置..."
38 61 sed -n '/logging/,$p' aitr.toml | tee -a config.toml > /dev/null
62 + echo "✓ 日志配置追加完成"
63 + else
64 + echo "⚠️ aitr.toml 不存在,跳过日志配置"
39 65 fi
66 + echo "✓ 配置文件设置完成"
67 + echo "======================================"
40 68 }
41 69
42 - merge_source() {
70 + sync_source() {
71 + echo "======================================"
72 + echo "📚 开始同步源文档"
73 + echo "======================================"
74 + echo "→ 准备工作目录..."
43 75 [[ -d docsite ]] || mkdir docsite
44 -
45 - pushd docsite
46 - if [[ -d .git ]]; then
47 - git remote set-url upstream https://github.com/xxx/docs.git
48 - else
76 +
77 + pushd docsite > /dev/null
78 + if [[ ! -d .git ]]; then
79 + echo "→ 初始化 git 仓库..."
49 80 git init
50 - git remote add upstream https://github.com/xxx/docs.git
81 + echo "→ 添加 upstream remote: ${UPSTREAM_URL}"
82 + git remote add "${UPSTREAM_NAME}" "${UPSTREAM_URL}"
83 + else
84 + # 检查是否已经存在 upstream
85 + if ! git remote get-url "${UPSTREAM_NAME}" >/dev/null 2>&1; then
86 + echo "→ 添加 upstream remote..."
87 + git remote add "${UPSTREAM_NAME}" "${UPSTREAM_URL}"
88 + else
89 + current_url=$(git remote get-url "${UPSTREAM_NAME}")
90 + if [[ "${current_url}" != "${UPSTREAM_URL}" ]]; then
91 + echo "→ 更新 upstream URL"
92 + echo " 旧 URL: ${current_url}"
93 + echo " 新 URL: ${UPSTREAM_URL}"
94 + git remote set-url "${UPSTREAM_NAME}" "${UPSTREAM_URL}"
95 + fi
96 + fi
51 97 fi
98 + echo "→ 正在拉取最新代码..."
99 + echo " 分支: $DEFAULT_BRANCH"
100 + echo " Remote: ${UPSTREAM_NAME}"
52 101 git reset --hard
53 - git fetch upstream main
54 - git merge upstream/main
55 - git rev-parse --short HEAD > ../commit.txt
56 - popd
102 + git fetch "${UPSTREAM_NAME}" "${DEFAULT_BRANCH}"
103 + git merge "${UPSTREAM_NAME}"/"${DEFAULT_BRANCH}"
104 + COMMIT_SHA=$(git rev-parse --short HEAD)
105 + echo "$COMMIT_SHA" > ../commit.txt
106 + echo "✓ 代码同步完成 (commit: $COMMIT_SHA)"
107 + popd > /dev/null
57 108
109 + echo "→ 清理旧文档目录..."
58 110 rm -rf docs
59 - # cp -r docsite/docs .
60 - cp -r docsite/content .
61 - mv content docs
111 + echo "→ 复制源文档..."
112 + if [[ -d docsite/content ]]; then
113 + cp -r docsite/content .
114 + mv content docs
115 + echo "✓ 已从 docsite/content 复制文档"
116 + elif [[ -d docsite/docs ]]; then
117 + cp -r docsite/docs .
118 + echo "✓ 已从 docsite/docs 复制文档"
119 + else
120 + echo "❌ docsite 目录下没有 content 或 docs 目录,无法同步文档。" >&2
121 + exit 1
122 + fi
123 + echo "✓ 源文档同步完成"
124 + echo "======================================"
62 125 }
63 126
64 127 # 增量更新
65 - incremental_update() {
66 - merge_source
128 + update_incremental() {
129 + echo "======================================"
130 + echo "🔄 开始增量更新流程"
131 + echo "======================================"
132 + if [[ -z "$UPSTREAM_URL" ]]; then
133 + echo "❌ UPSTREAM_URL 未设置,无法进行增量更新。" >&2
134 + exit 1
135 + fi
136 +
137 + echo "→ 步骤 1/6: 同步源文档"
138 + sync_source
67 139
68 140 # 记录删除的文件
141 + echo "→ 步骤 2/6: 检测已删除的文件"
142 + echo " 正在扫描已删除的文档..."
69 143 git ls-files --deleted docs/ | tee "$DELETE_FILE"
70 144 ROOT_DIR=$(grep root_dir config.toml | cut -d'"' -f 2 | sed 's|^\./||')
71 145 export ROOT_DIR
72 146 OUTPUT_DIR=$(grep output_dir config.toml | cut -d'"' -f 2 | sed 's|^\./||')
73 147 export OUTPUT_DIR
148 + echo " 根目录: $ROOT_DIR"
149 + echo " 输出目录: $OUTPUT_DIR"
74 150 # sed -i "s|^$ROOT_DIR/|$OUTPUT_DIR/|g" "$DELETE_FILE"
75 151 # 删除对应的输出文件
152 + echo " 正在清理对应的输出文件..."
76 153 while read -r file; do
77 154 new_file="${file/$ROOT_DIR/$OUTPUT_DIR}"
78 - echo "$new_file"
155 + echo " 删除: $new_file"
79 156 rm -rf "$new_file" || true
80 157 done < "$DELETE_FILE"
158 + echo "✓ 已清理删除的文件"
81 159
82 160 # 更新 git 索引
161 + echo "→ 步骤 3/6: 更新 git 索引"
83 162 git add .
84 163 # 记录新增和修改的文件
164 + echo " 正在检测新增的文件..."
85 165 git diff --cached --name-only --diff-filter=A docs/ | tee "$ADD_FILE"
166 + echo " 正在检测修改的文件..."
86 167 git diff --cached --name-only --diff-filter=M docs/ | tee "$MODIFIED_FILE"
87 168
169 + echo "→ 步骤 4/6: 生成待翻译文件列表"
88 170 cat "$ADD_FILE" "$MODIFIED_FILE" | tee "$TRANSLATE_LIST"
89 171
90 172 # 移除以 .png .jpg .jpeg .gif .svg 结尾的文件
173 + echo " 过滤图片文件..."
91 174 sed -i '/\.\(png\|jpg\|jpeg\|gif\|svg\)$/d' "$TRANSLATE_LIST"
175 + echo "✓ 已生成待翻译文件列表: $TRANSLATE_LIST"
92 176
93 - # 合并 config.toml
94 - merge_config
177 + echo "→ 步骤 5/6: 设置配置文件"
178 + setup_config
95 179
96 180 # # 翻译增量文件
97 181 # if ! command -v aitr &> /dev/null; then
@@ -100,30 +184,77 @@ incremental_update() {
100 184 # fi
101 185
102 186 # 调用 aitr 进行翻译
187 + echo "→ 步骤 6/6: 执行翻译"
103 188 if command -v aitr &> /dev/null; then
189 + echo " 正在调用 aitr 翻译文件..."
104 190 aitr --input "$TRANSLATE_LIST" --list --output translated
191 + echo " 正在复制翻译结果到输出目录..."
105 192 cp -r "translated/${ROOT_DIR}/"* "${OUTPUT_DIR}"/
193 + echo "✓ 翻译完成"
106 194 else
107 - echo "aitr 未安装,跳过构建步骤。"
195 + echo "⚠️ aitr 未安装,跳过翻译步骤。"
108 196 fi
197 + echo "======================================"
198 + echo "✓ 增量更新完成"
199 + echo "======================================"
109 200 }
110 201
111 - # 复制 docs_zh 至 content
112 - copy_docs_zh() {
202 + # 部署 docs_zh 到 docsite
203 + deploy_docs_zh() {
204 + echo "======================================"
205 + echo "📋 开始部署 docs_zh 到 docsite"
206 + echo "======================================"
113 207 if [[ ! -d docsite ]]; then
114 - git clone https://github.com/xxx/docs.git docsite
208 + if [[ -z "$UPSTREAM_URL" ]]; then
209 + echo "❌ UPSTREAM_URL 未设置,无法克隆文档站点。" >&2
210 + exit 1
211 + fi
212 + echo "→ docsite 目录不存在,正在克隆..."
213 + git clone "$UPSTREAM_URL" docsite
214 + echo "✓ 克隆完成"
115 215 fi
216 +
116 217 if [[ -d "translated/docs" ]]; then
117 - echo "使用 translated/docs 的文档覆盖 docs_zh"
218 + echo "→ 检测到 translated/docs,正在覆盖 docs_zh..."
118 219 cp -r translated/docs/* docs_zh/
220 + echo "✓ 已覆盖 docs_zh"
221 + fi
222 +
223 + if [[ ! -d docs_zh ]]; then
224 + echo "❌ docs_zh 目录不存在,无法部署。" >&2
225 + exit 1
119 226 fi
120 - # cp -r docs_zh/* docsite/docs/
121 - cp -r docs_zh/* ./docsite/content/
227 +
228 + echo "→ 正在部署 docs_zh 到 docsite..."
229 + if [[ -d docsite/content ]]; then
230 + cp -r docs_zh/* ./docsite/content/
231 + echo "✓ 已部署到 docsite/content/"
232 + elif [[ -d docsite/docs ]]; then
233 + cp -r docs_zh/* ./docsite/docs/
234 + echo "✓ 已部署到 docsite/docs/"
235 + else
236 + echo "❌ docsite 目录下没有 content 或 docs 目录,无法部署。" >&2
237 + exit 1
238 + fi
239 + echo "======================================"
240 + echo "✓ 文档部署完成"
241 + echo "======================================"
122 242 }
123 243
124 244 # 调用翻译脚本
125 245 translate() {
246 + echo "======================================"
247 + echo "🌐 开始执行翻译"
248 + echo "======================================"
249 + if ! command -v aitr &> /dev/null; then
250 + echo "❌ aitr 未安装,请先安装 aitr。" >&2
251 + exit 1
252 + fi
253 + echo "→ 正在调用 aitr 翻译工具..."
126 254 aitr
255 + echo "======================================"
256 + echo "✓ 翻译完成"
257 + echo "======================================"
127 258 }
128 259
129 260 usage() {
@@ -131,44 +262,64 @@ usage() {
131 262 用法: $0 [选项]
132 263
133 264 选项:
134 - -c --copy 复制 docs_zh
135 - -g --config 合并 config.toml
136 - -s --source 合并文档
137 - -i --incremental 增量更新
138 - -t --translate 调用翻译脚本
139 - -h --help 显示此帮助信息
265 + -d --deploy 部署 docs_zh 到 docsite
266 + -c --config 设置配置文件
267 + -s --sync 同步源文档
268 + -u --update 增量更新(同步+翻译)
269 + -t --translate 执行翻译
270 + -b --branch 指定分支 (默认: main)
271 + -U --upstream 指定上游 URL
272 + -h --help 显示此帮助信息
140 273
141 274 示例:
142 275 $0 --translate
276 + $0 --update
277 + $0 --sync --branch develop
278 + $0 --update --upstream https://github.com/user/repo.git
143 279 EOF
144 280 }
145 281
146 282 main() {
283 + echo "======================================"
284 + echo "🚀 部署脚本启动"
285 + echo "======================================"
286 +
147 287 if [[ $# -eq 0 ]]; then
288 + echo "❌ 未指定任何操作" >&2
148 289 usage
149 290 exit 1
150 291 fi
151 292
293 + # 先解析所有参数
294 + local actions=()
152 295 while [[ $# -gt 0 ]]; do
153 296 case $1 in
154 - -c|--copy)
155 - copy_docs_zh
297 + -b|--branch)
298 + CUSTOM_BRANCH="$2"
299 + shift 2
300 + ;;
301 + -U|--upstream)
302 + CUSTOM_UPSTREAM="$2"
303 + shift 2
304 + ;;
305 + -d|--deploy)
306 + actions+=("deploy")
156 307 shift
157 308 ;;
158 - -g|--config)
159 - merge_config
309 + -c|--config)
310 + actions+=("config")
160 311 shift
161 - ;;
162 - -s|--source)
163 - merge_source
312 + ;;
313 + -s|--sync)
314 + actions+=("sync")
164 315 shift
165 - ;;
166 - -i|--incremental)
167 - incremental_update
316 + ;;
317 + -u|--update)
318 + actions+=("update")
168 319 shift
169 320 ;;
170 321 -t|--translate)
171 - translate
322 + actions+=("translate")
172 323 shift
173 324 ;;
174 325 --help|-h)
@@ -176,12 +327,59 @@ main() {
176 327 exit 0
177 328 ;;
178 329 *)
179 - echo "未知参数: $1" >&2
330 + echo "❌ 未知参数: $1" >&2
180 331 usage
181 332 exit 1
182 333 ;;
183 334 esac
184 335 done
336 +
337 + # 应用自定义参数
338 + if [[ -n "$CUSTOM_BRANCH" ]]; then
339 + DEFAULT_BRANCH="$CUSTOM_BRANCH"
340 + fi
341 + if [[ -n "$CUSTOM_UPSTREAM" ]]; then
342 + UPSTREAM_URL="$CUSTOM_UPSTREAM"
343 + fi
344 +
345 + echo "当前分支: $DEFAULT_BRANCH"
346 + echo "Hugo 版本: $HUGO_VERSION"
347 + if [[ -n "$UPSTREAM_URL" ]]; then
348 + echo "Upstream URL: $UPSTREAM_URL"
349 + else
350 + echo "Upstream URL: (未设置)"
351 + fi
352 + echo "======================================"
353 +
354 + # 执行操作
355 + for action in "${actions[@]}"; do
356 + case $action in
357 + deploy)
358 + echo "→ 执行操作: 部署 docs_zh"
359 + deploy_docs_zh
360 + ;;
361 + config)
362 + echo "→ 执行操作: 设置配置文件"
363 + setup_config
364 + ;;
365 + sync)
366 + echo "→ 执行操作: 同步源文档"
367 + sync_source
368 + ;;
369 + update)
370 + echo "→ 执行操作: 增量更新"
371 + update_incremental
372 + ;;
373 + translate)
374 + echo "→ 执行操作: 执行翻译"
375 + translate
376 + ;;
377 + esac
378 + done
379 +
380 + echo "======================================"
381 + echo "✓ 部署脚本执行完成"
382 + echo "======================================"
185 383 }
186 384
187 385 main "$@"

Jetsung Chan revised this gist 4 months ago. Go to revision

6 files changed, 127 insertions, 75 deletions

.gitignore

@@ -8,6 +8,7 @@ tmp/
8 8
9 9 **.log
10 10 **.txt
11 + !commit.txt
11 12
12 13 aitr.toml
13 14 config.toml

DOCS.md(file created)

@@ -0,0 +1,91 @@
1 + # 中文文档
2 +
3 + 本文档使用 AI 翻译
4 +
5 + ## 项目流程
6 +
7 + ### 首次使用
8 + 1. 创建空分支
9 + ```bash
10 + git switch --orphan docs
11 + ```
12 +
13 + 2. 首次提交
14 + ```bash
15 + git add README.md
16 + git commit -am init
17 + git push origin docs
18 + ```
19 +
20 + 3. 拉取上游源码
21 + ```bash
22 + mkdir -p docsite
23 + pushd docsite
24 + if [[ -d .git ]]; then
25 + git remote set-url upstream https://github.com/xxx/docs.git
26 + else
27 + git init
28 + git remote add upstream https://github.com/xxx/docs.git
29 + fi
30 + git reset --hard
31 + git fetch upstream main
32 + git merge upstream/main
33 + git rev-parse --short HEAD > ../commit.txt
34 + popd
35 + ```
36 +
37 + 4. 复制源文档
38 + ```bash
39 + rm -rf docs
40 + # cp -r docsite/docs .
41 + cp -r docsite/content .
42 + mv content docs
43 + ```
44 +
45 + 5. 全量翻译
46 + ```bash
47 + aitr
48 + ```
49 +
50 + 6. 本地测试与构建
51 + ```bash
52 + git clone https://github.com/xxx/docs.git docsite
53 + cp -r docs_zh/* ./docsite/content
54 + cd docsite
55 + ```
56 +
57 + 8. 启动或构建
58 + ```bash
59 + # NodeJS
60 + npm install
61 + npm run dev
62 +
63 + # Hugo
64 + hugo server
65 +
66 + ...
67 + ```
68 +
69 + ### 2. AI 翻译
70 + - 安装 [**CLI**](https://git.jetsung.com/jetsung/ai-translator) 工具 (增量更新直接使用 AI CLI 工具直接对比)
71 + ```bash
72 + curl -L https://fx4.cn/aitr | bash
73 + ```
74 +
75 + 1. 设置环境变量 [`config.toml`](config.example.toml)
76 + ```bash
77 + ...
78 + [[providers]]
79 + enabled = true
80 + name = "grok"
81 + api_key = "xxx"
82 + base_url = "https://api.x.ai/v1"
83 + model = "grok-3"
84 + concurrency = 1 # 线程数
85 + rate_delay = 3.0 # 每个请求后等待 1.0 秒(可根据限流调整)
86 + ```
87 +
88 + 2. AI 翻译
89 + ```bash
90 + aitr
91 + ```

README.md

@@ -1,89 +1,39 @@
1 - # XX 中文文档
1 + # 教程
2 2
3 - 本文档使用 AI 翻译
3 + 本项目使用的教程
4 4
5 - ## 项目流程
5 + ## 初始化项目
6 6
7 - ### 首次使用
8 7 1. 创建空分支
9 8 ```bash
10 - git switch --orphan docs
9 + # 新项目
10 + git init
11 + git branch -m docs
11 12 ```
12 13
13 - 2. 首次提交
14 14 ```bash
15 - git add README.md
16 - git commit -am init
17 - git push origin docs
18 - ```
19 -
20 - 3. 拉取上游源码
21 - ```bash
22 - mkdir -p docsite
23 - pushd docsite
24 - if [[ -d .git ]]; then
25 - git remote set-url upstream https://github.com/xxx/docs.git
26 - else
27 - git init
28 - git remote add upstream https://github.com/xxx/docs.git
29 - fi
30 - git reset --hard
31 - git fetch upstream main
32 - git merge upstream/main
33 - popd
34 - ```
35 -
36 - 4. 复制源文档
37 - ```bash
38 - rm -rf docs
39 - cp -r docsite/content .
40 - mv content docs
41 - ```
42 -
43 - 5. 全量翻译
44 - ```bash
45 - aitr
46 - ```
47 -
48 - 6. 本地测试与构建
49 - ```bash
50 - git clone https://github.com/xxx/docs.git docsite
51 - cp -r docs_zh/* ./docsite/content
52 - cd docsite
15 + # 已存在的项目,创建空分支
16 + git switch --orphan docs
53 17 ```
54 18
55 - 8. 启动或构建
19 + 2. 将本项目的文件下载至创建的翻译项目
56 20 ```bash
57 - # NodeJS
58 - npm install
59 - npm run dev
60 -
61 - # Hugo
62 - hugo server
63 -
64 - ...
21 + curl -fsSL https://fx4.cn/gendocs | bash
65 22 ```
66 23
67 - ### 2. AI 翻译
68 - - 安装 [**CLI**](https://git.jetsung.com/jetsung/ai-translator) 工具 (增量更新直接使用 AI CLI 工具直接对比)
24 + 3. 更新上游项目链接
69 25 ```bash
70 - curl -L https://fx4.cn/aitr | bash
26 + GIT_DOCS=含.git结尾的项目地址
27 + sed -i "s#https://github.com/xxx/docs.git#${GIT_DOCS}#g" *.*
28 + sed -i "s#https://github.com/xxx/docs.git#${GIT_DOCS}#g" .github/workflows/docs.yml
71 29 ```
72 30
73 - 1. 设置环境变量 [`config.toml`](config.example.toml)
31 + 4. 设置项目地址
74 32 ```bash
75 - ...
76 - [[providers]]
77 - enabled = true
78 - name = "grok"
79 - api_key = "xxx"
80 - base_url = "https://api.x.ai/v1"
81 - model = "grok-3"
82 - concurrency = 1 # 线程数
83 - rate_delay = 3.0 # 每个请求后等待 1.0 秒(可根据限流调整)
33 + # 新项目
34 + git remote add origin <https 或 git 地址>
84 35 ```
85 -
86 - 2. AI 翻译
87 36 ```bash
88 - aitr
37 + # 已存在的项目
38 + git remote set-url origin <https 或 git 地址>
89 39 ```

deploy.sh

@@ -52,10 +52,13 @@ merge_source() {
52 52 git reset --hard
53 53 git fetch upstream main
54 54 git merge upstream/main
55 + git rev-parse --short HEAD > ../commit.txt
55 56 popd
56 57
57 58 rm -rf docs
58 - cp -r docsite/docs .
59 + # cp -r docsite/docs .
60 + cp -r docsite/content .
61 + mv content docs
59 62 }
60 63
61 64 # 增量更新
@@ -64,8 +67,10 @@ incremental_update() {
64 67
65 68 # 记录删除的文件
66 69 git ls-files --deleted docs/ | tee "$DELETE_FILE"
67 - export ROOT_DIR=$(grep root_dir config.toml | cut -d'"' -f 2 | sed 's|^\./||')
68 - export OUTPUT_DIR=$(grep output_dir config.toml | cut -d'"' -f 2 | sed 's|^\./||')
70 + ROOT_DIR=$(grep root_dir config.toml | cut -d'"' -f 2 | sed 's|^\./||')
71 + export ROOT_DIR
72 + OUTPUT_DIR=$(grep output_dir config.toml | cut -d'"' -f 2 | sed 's|^\./||')
73 + export OUTPUT_DIR
69 74 # sed -i "s|^$ROOT_DIR/|$OUTPUT_DIR/|g" "$DELETE_FILE"
70 75 # 删除对应的输出文件
71 76 while read -r file; do
@@ -112,7 +117,8 @@ copy_docs_zh() {
112 117 echo "使用 translated/docs 的文档覆盖 docs_zh"
113 118 cp -r translated/docs/* docs_zh/
114 119 fi
115 - cp -r docs_zh/* docsite/docs/
120 + # cp -r docs_zh/* docsite/docs/
121 + cp -r docs_zh/* ./docsite/content/
116 122 }
117 123
118 124 # 调用翻译脚本

docs.yml

@@ -38,7 +38,7 @@ jobs:
38 38 echo "Node.js: $(node --version)"
39 39 - name: Fetch Source
40 40 run: |
41 - git clone https://github.com/docker/docs.git docsite
41 + git clone https://github.com/xxx/docs.git docsite
42 42 - name: Fix
43 43 run: |
44 44 # sed -i 's/refLinksErrorLevel: WARNING/refLinksErrorLevel: ERROR/' docsite/hugo.yaml

init.sh

@@ -12,7 +12,7 @@ download_files() {
12 12 curl -fsSL -O "${BASE_URL}/deploy.sh"
13 13 chmod +x deploy.sh
14 14
15 - curl -fsSL -O "${BASE_URL}/README.md"
15 + curl -fsSL -o README.md "${BASE_URL}/DOCS.md"
16 16
17 17 curl -fsSL -O "${BASE_URL}/config.example.toml"
18 18
@@ -25,6 +25,10 @@ download_files() {
25 25
26 26 main() {
27 27 download_files
28 +
29 + if [[ ! -f CNAME ]]; then
30 + echo "" > CNAME
31 + fi
28 32 }
29 33
30 34 main "$@"

jetsung revised this gist 4 months ago. Go to revision

1 file changed, 2 insertions, 2 deletions

deploy.sh

@@ -82,8 +82,8 @@ incremental_update() {
82 82
83 83 cat "$ADD_FILE" "$MODIFIED_FILE" | tee "$TRANSLATE_LIST"
84 84
85 - # 移除以 .png .jpg .jpeg .gif 结尾的文件
86 - sed -i '/\.\(png\|jpg\|jpeg\|gif\)$/d' "$TRANSLATE_LIST"
85 + # 移除以 .png .jpg .jpeg .gif .svg 结尾的文件
86 + sed -i '/\.\(png\|jpg\|jpeg\|gif\|svg\)$/d' "$TRANSLATE_LIST"
87 87
88 88 # 合并 config.toml
89 89 merge_config

jetsung revised this gist 4 months ago. Go to revision

1 file changed, 26 insertions, 12 deletions

deploy.sh

@@ -29,8 +29,17 @@ install_hugo() {
29 29 curl -L https://fx4.cn/hugo | bash -s -- -v "$HUGO_VERSION" -w
30 30 }
31 31
32 - # 增量更新
33 - incremental_update() {
32 + merge_config() {
33 + if [[ -f config.example.toml ]]; then
34 + sed '/providers/,$d' ./config.example.toml | tee config.toml > /dev/null
35 + fi
36 +
37 + if [[ -f aitr.toml ]]; then
38 + sed -n '/logging/,$p' aitr.toml | tee -a config.toml > /dev/null
39 + fi
40 + }
41 +
42 + merge_source() {
34 43 [[ -d docsite ]] || mkdir docsite
35 44
36 45 pushd docsite
@@ -47,6 +56,11 @@ incremental_update() {
47 56
48 57 rm -rf docs
49 58 cp -r docsite/docs .
59 + }
60 +
61 + # 增量更新
62 + incremental_update() {
63 + merge_source
50 64
51 65 # 记录删除的文件
52 66 git ls-files --deleted docs/ | tee "$DELETE_FILE"
@@ -89,16 +103,6 @@ incremental_update() {
89 103 fi
90 104 }
91 105
92 - merge_config() {
93 - if [[ -f config.example.toml ]]; then
94 - sed '/providers/,$d' ./config.example.toml | tee config.toml > /dev/null
95 - fi
96 -
97 - if [[ -f aitr.toml ]]; then
98 - sed -n '/logging/,$p' aitr.toml | tee -a config.toml > /dev/null
99 - fi
100 - }
101 -
102 106 # 复制 docs_zh 至 content
103 107 copy_docs_zh() {
104 108 if [[ ! -d docsite ]]; then
@@ -122,6 +126,8 @@ usage() {
122 126
123 127 选项:
124 128 -c --copy 复制 docs_zh
129 + -g --config 合并 config.toml
130 + -s --source 合并文档
125 131 -i --incremental 增量更新
126 132 -t --translate 调用翻译脚本
127 133 -h --help 显示此帮助信息
@@ -143,6 +149,14 @@ main() {
143 149 copy_docs_zh
144 150 shift
145 151 ;;
152 + -g|--config)
153 + merge_config
154 + shift
155 + ;;
156 + -s|--source)
157 + merge_source
158 + shift
159 + ;;
146 160 -i|--incremental)
147 161 incremental_update
148 162 shift

jetsung revised this gist 4 months ago. Go to revision

1 file changed, 2 insertions

init.sh

@@ -18,6 +18,8 @@ download_files() {
18 18
19 19 curl -fsSL -O "${BASE_URL}/config.example.toml"
20 20
21 + curl -fsSL -O "${BASE_URL}/.gitignore"
22 +
21 23 curl -fsSL --create-dirs -o ".github/workflows/docs.yml" "${BASE_URL}/docs.yml"
22 24 }
23 25

jetsung revised this gist 4 months ago. Go to revision

1 file changed, 13 insertions

.gitignore(file created)

@@ -0,0 +1,13 @@
1 + # Python
2 + .venv/
3 +
4 + build/
5 + docsite/
6 + translated/
7 + tmp/
8 +
9 + **.log
10 + **.txt
11 +
12 + aitr.toml
13 + config.toml

jetsung revised this gist 4 months ago. Go to revision

1 file changed, 3 insertions, 46 deletions

deploy.sh

@@ -45,9 +45,8 @@ incremental_update() {
45 45 git merge upstream/main
46 46 popd
47 47
48 - cp -r docsite/content .
49 48 rm -rf docs
50 - mv content docs
49 + cp -r docsite/docs .
51 50
52 51 # 记录删除的文件
53 52 git ls-files --deleted docs/ | tee "$DELETE_FILE"
@@ -100,42 +99,16 @@ merge_config() {
100 99 fi
101 100 }
102 101
103 - # Patch Hugo layouts to avoid errors on missing metadata
104 - patch_hugo_layouts() {
105 - if [[ -d docsite/layouts ]]; then
106 - sed -i 's/errorf "\[summary-bar\]/warnf "[summary-bar]/g' docsite/layouts/shortcodes/summary-bar.html || true
107 - sed -i 's/errorf "\[tags\]/warnf "[tags]/g' docsite/layouts/partials/tags.html || true
108 - sed -i 's/errorf "\[languages\]/warnf "[languages]/g' docsite/layouts/partials/languages.html || true
109 - fi
110 - }
111 -
112 102 # 复制 docs_zh 至 content
113 103 copy_docs_zh() {
114 104 if [[ ! -d docsite ]]; then
115 - git clone https://github.com/docker/docs.git docsite
105 + git clone https://github.com/xxx/docs.git docsite
116 106 fi
117 - patch_hugo_layouts
118 107 if [[ -d "translated/docs" ]]; then
119 108 echo "使用 translated/docs 的文档覆盖 docs_zh"
120 109 cp -r translated/docs/* docs_zh/
121 110 fi
122 - cp -r docs_zh/* docsite/content/
123 - }
124 -
125 - # 本地测试
126 - start_dev() {
127 - copy_docs_zh
128 - cd docsite
129 - npm install
130 - hugo server -D
131 - }
132 -
133 - # 构建网站
134 - build_site() {
135 - copy_docs_zh
136 - cd docsite
137 - npm install
138 - hugo --minify
111 + cp -r docs_zh/* docsite/docs/
139 112 }
140 113
141 114 # 调用翻译脚本
@@ -149,15 +122,11 @@ usage() {
149 122
150 123 选项:
151 124 -c --copy 复制 docs_zh
152 - -b --build 构建网站
153 125 -i --incremental 增量更新
154 - -s --start 本地测试
155 - -x --hugo 安装 Hugo extended(linux-amd64)
156 126 -t --translate 调用翻译脚本
157 127 -h --help 显示此帮助信息
158 128
159 129 示例:
160 - $0 --hugo
161 130 $0 --translate
162 131 EOF
163 132 }
@@ -178,18 +147,6 @@ main() {
178 147 incremental_update
179 148 shift
180 149 ;;
181 - -x|--hugo)
182 - install_hugo
183 - shift
184 - ;;
185 - -b|--build)
186 - build_site
187 - shift
188 - ;;
189 - -s|--start)
190 - start_dev
191 - shift
192 - ;;
193 150 -t|--translate)
194 151 translate
195 152 shift

jetsung revised this gist 4 months ago. Go to revision

1 file changed, 6 insertions, 15 deletions

README.md

@@ -10,23 +10,14 @@
10 10 git switch --orphan docs
11 11 ```
12 12
13 - 2. 创建 `README.md`
14 - ```bash
15 - cat > README.md <<EOF
16 - # XX 中文文档
17 -
18 - 本文档使用 AI 翻译
19 - EOF
20 - ```
21 -
22 - 3. 首次提交
13 + 2. 首次提交
23 14 ```bash
24 15 git add README.md
25 16 git commit -am init
26 17 git push origin docs
27 18 ```
28 19
29 - 4. 拉取上游源码
20 + 3. 拉取上游源码
30 21 ```bash
31 22 mkdir -p docsite
32 23 pushd docsite
@@ -42,19 +33,19 @@ git merge upstream/main
42 33 popd
43 34 ```
44 35
45 - 5. 复制源文档
36 + 4. 复制源文档
46 37 ```bash
47 - cp -r docsite/content .
48 38 rm -rf docs
39 + cp -r docsite/content .
49 40 mv content docs
50 41 ```
51 42
52 - 6. 全量翻译
43 + 5. 全量翻译
53 44 ```bash
54 45 aitr
55 46 ```
56 47
57 - 7. 本地测试与构建
48 + 6. 本地测试与构建
58 49 ```bash
59 50 git clone https://github.com/xxx/docs.git docsite
60 51 cp -r docs_zh/* ./docsite/content
Newer Older