Skip to content

Commit e38d697

Browse files
sanbuphyclaude
andcommitted
docs: complete multilingual translations for all 11 locales
Translate all remaining English placeholder content across ar, de, es, fr, ja, ko, ru, uz, vi, zh, zh-TW locales. Includes lecture index files, code examples, templates, references, and skills docs. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 931b257 commit e38d697

744 files changed

Lines changed: 45151 additions & 275 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CLAUDE.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ npm run test:watch # Vitest watch mode
3333
- `docs/.vitepress/config.mts` — Nav/sidebar config for both EN and ZH locales
3434
- `docs/lectures/` — 12 lectures, each with `index.md` + `code/` examples
3535
- `docs/projects/` — 6 project descriptions
36-
- `docs/resources/`Bilingual (en/zh) templates, references, OpenAI advanced pack
36+
- `docs/<lang>/resources/`localized templates, references, OpenAI advanced pack
3737
- `projects/shared/` — Shared Electron + TypeScript + React foundation
3838
- `projects/project-NN/` — Per-project `starter/` and `solution/` directories
3939

@@ -57,6 +57,6 @@ Each project's starter/solution is a complete copy of the Electron app at that e
5757
- Progressive disclosure: short AGENTS.md entrypoint linking to focused docs
5858
- Each project has two tsconfigs: `tsconfig.json` (renderer) and `tsconfig.node.json` (main/preload)
5959

60-
## Bilingual Content
60+
## Multilingual Content
6161

62-
All content exists in both English and Chinese. Documentation lives in shared `docs/lectures/` and `docs/projects/` dirs (content is bilingual within each file). Resources have separate `docs/resources/en/` and `docs/resources/zh/` directories. Keep both in sync.
62+
Course documentation is organized by locale under `docs/<lang>/`. Keep English as the structural source of truth, keep localized directories in sync, and preserve runnable code examples across languages.

README-CN.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ Learn Harness Engineering 是一门专注于 AI 编程智能体工程化落地
1111
- [Anthropic: Harness design for long-running application development](https://www.anthropic.com/engineering/harness-design-long-running-apps)
1212
- [Awesome Harness Engineering](https://github.com/walkinglabs/awesome-harness-engineering)
1313

14-
[**官方网站及文档 (English & 中文)**](https://walkinglabs.github.io/learn-harness-engineering/) | [**English README**](./README.md)
14+
[**官方网站及多语言文档**](https://walkinglabs.github.io/learn-harness-engineering/) | [**English README**](./README.md)
1515

1616
> **快速上手?** [`skills/harness-creator/`](./skills/) 技能可以帮你在几分钟内为自己的项目搭建一套生产级的 harness(AGENTS.md、功能清单、init.sh、验证工作流)。
1717
@@ -51,7 +51,7 @@ Learn Harness Engineering 是一门专注于 AI 编程智能体工程化落地
5151

5252
仓库里现在已经补上了课程 PDF 的构建链路。
5353

54-
- 本地执行 `npm run pdf:build`会生成中英文两份课程 PDF。
54+
- 本地执行 `npm run pdf:build`会生成当前脚本配置的课程 PDF。
5555
- 输出目录是 `artifacts/pdfs/`
5656
- 如果需要刷新 README 里的截图,执行 `npm run screenshots:readme`
5757
- GitHub Actions 工作流 [`release-course-pdfs.yml`](./.github/workflows/release-course-pdfs.yml) 可以自动构建 PDF,并把产物上传到 GitHub Release。
@@ -498,7 +498,7 @@ npm run docs:preview # 预览构建结果
498498
```text
499499
learn-harness-engineering/
500500
├── docs/ # VitePress 文档站
501-
│ ├── index.md # 语言选择页(中文 / English)
501+
│ ├── index.md # 语言选择页
502502
│ ├── zh/ # 中文完整内容
503503
│ │ ├── lectures/ # 12 个讲义(index.md + code/ 示例)
504504
│ │ ├── projects/ # 6 个项目

README-KO.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ Learn Harness Engineering은 AI 코딩 에이전트 공학에 전념하는 강
3636

3737
저장소에는 강의 콘텐츠를 위한 PDF 빌드 파이프라인이 포함되어 있습니다.
3838

39-
- `npm run pdf:build` 명령으로 영어·중국어 PDF를 로컬에서 생성할 수 있습니다.
39+
- `npm run pdf:build` 명령으로 현재 스크립트에 설정된 강의 PDF를 로컬에서 생성할 수 있습니다.
4040
- 출력 파일은 `artifacts/pdfs/`에 저장됩니다.
4141
- README 미리보기 이미지를 갱신하려면 `npm run screenshots:readme`를 실행하십시오.
4242
- GitHub Actions 워크플로우 [`release-course-pdfs.yml`](./.github/workflows/release-course-pdfs.yml)을 통해 PDF를 빌드하고 GitHub Releases에 게시할 수 있습니다.

README.md

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,17 @@
1-
[English](https://walkinglabs.github.io/learn-harness-engineering/en/) · [中文](https://walkinglabs.github.io/learn-harness-engineering/zh/) · [Русский](https://walkinglabs.github.io/learn-harness-engineering/ru/) · [Tiếng Việt](https://walkinglabs.github.io/learn-harness-engineering/vi/) · [한국어](https://walkinglabs.github.io/learn-harness-engineering/ko/) · [Oʻzbekcha](https://walkinglabs.github.io/learn-harness-engineering/uz/)
1+
<p align="center">
2+
<a href="README.md"><img alt="English" src="https://img.shields.io/badge/English-d9d9d9"></a>
3+
<a href="docs-readme/zh-CN/README.md"><img alt="简体中文" src="https://img.shields.io/badge/简体中文-d9d9d9"></a>
4+
<a href="docs-readme/zh-TW/README.md"><img alt="繁體中文" src="https://img.shields.io/badge/繁體中文-d9d9d9"></a>
5+
<a href="docs-readme/ja-JP/README.md"><img alt="日本語" src="https://img.shields.io/badge/日本語-d9d9d9"></a>
6+
<a href="docs-readme/es-ES/README.md"><img alt="Español" src="https://img.shields.io/badge/Español-d9d9d9"></a>
7+
<a href="docs-readme/fr-FR/README.md"><img alt="Français" src="https://img.shields.io/badge/Français-d9d9d9"></a>
8+
<a href="docs-readme/ko-KR/README.md"><img alt="한국어" src="https://img.shields.io/badge/한국어-d9d9d9"></a>
9+
<a href="docs-readme/ar-SA/README.md"><img alt="العربية" src="https://img.shields.io/badge/العربية-d9d9d9"></a>
10+
<a href="docs-readme/vi-VN/README.md"><img alt="Tiếng_Việt" src="https://img.shields.io/badge/Tiếng_Việt-d9d9d9"></a>
11+
<a href="docs-readme/de-DE/README.md"><img alt="Deutsch" src="https://img.shields.io/badge/Deutsch-d9d9d9"></a>
12+
<a href="https://walkinglabs.github.io/learn-harness-engineering/ru/"><img alt="Русский" src="https://img.shields.io/badge/Русский-d9d9d9"></a>
13+
<a href="https://walkinglabs.github.io/learn-harness-engineering/uz/"><img alt="Oʻzbekcha" src="https://img.shields.io/badge/Oʻzbekcha-d9d9d9"></a>
14+
</p>
215

316
# Learn Harness Engineering
417

@@ -49,7 +62,7 @@ Learn Harness Engineering is a course dedicated to the engineering of AI coding
4962

5063
The repository now includes a PDF build pipeline for the course content.
5164

52-
- Run `npm run pdf:build` to generate English and Chinese PDFs locally.
65+
- Run `npm run pdf:build` to generate the currently configured PDF coursebooks locally.
5366
- Output files are written to `artifacts/pdfs/`.
5467
- Run `npm run screenshots:readme` if you want to refresh the README preview images.
5568
- GitHub Actions workflow [`release-course-pdfs.yml`](./.github/workflows/release-course-pdfs.yml) can build the PDFs and publish them to GitHub Releases.

docs/.vitepress/config.mts

Lines changed: 221 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,96 @@ const koSkillItems = [
228228
{ text: "스킬 개요", link: "/ko/skills/" }
229229
];
230230

231+
const relinkItems = (items: Array<{ text: string; link: string }>, locale: string) =>
232+
items.map((item) => ({
233+
...item,
234+
link: item.link.replace(/^\/(en|zh|vi|ko|uz|ru)\//, `/${locale}/`)
235+
}));
236+
237+
const createLocaleTheme = (
238+
locale: string,
239+
sourceItems: {
240+
lectures: Array<{ text: string; link: string }>;
241+
projects: Array<{ text: string; link: string }>;
242+
resources: Array<{ text: string; link: string }>;
243+
skills: Array<{ text: string; link: string }>;
244+
},
245+
labels: {
246+
lectures: string;
247+
projects: string;
248+
resources: string;
249+
skills: string;
250+
resourceLibrary: string;
251+
tryHarness: string;
252+
outline?: string;
253+
prev?: string;
254+
next?: string;
255+
lastUpdated?: string;
256+
returnToTop?: string;
257+
sidebarMenu?: string;
258+
darkModeSwitch?: string;
259+
lightModeSwitchTitle?: string;
260+
darkModeSwitchTitle?: string;
261+
}
262+
) => {
263+
const lectures = relinkItems(sourceItems.lectures, locale);
264+
const projects = relinkItems(sourceItems.projects, locale);
265+
const resources = relinkItems(sourceItems.resources, locale);
266+
const skills = relinkItems(sourceItems.skills, locale);
267+
268+
return {
269+
nav: [
270+
{ text: labels.lectures, link: lectures[1].link, activeMatch: `^/${locale}/(lectures/.*)?$` },
271+
{ text: labels.projects, link: projects[0].link, activeMatch: `^/${locale}/projects/` },
272+
{ text: labels.resources, link: `/${locale}/resources/`, activeMatch: `^/${locale}/resources/` },
273+
{ text: labels.skills, link: `/${locale}/skills/`, activeMatch: `^/${locale}/skills/` },
274+
{
275+
text: labels.tryHarness,
276+
link: `https://github.com/walkinglabs/learn-harness-engineering/blob/main/docs/${locale}/resources/templates/index.md`,
277+
target: "_blank",
278+
rel: "noopener noreferrer"
279+
}
280+
],
281+
sidebar: {
282+
[`/${locale}/projects/`]: [{ text: labels.projects, items: projects }],
283+
[`/${locale}/resources/`]: [{ text: labels.resourceLibrary, items: resources }],
284+
[`/${locale}/skills/`]: [{ text: labels.skills, items: skills }],
285+
[`/${locale}/`]: [{ text: labels.lectures, items: lectures }]
286+
},
287+
outline: {
288+
level: [2, 3],
289+
...(labels.outline ? { label: labels.outline } : {})
290+
},
291+
docFooter: {
292+
prev: labels.prev || "Previous",
293+
next: labels.next || "Next"
294+
},
295+
lastUpdated: {
296+
text: labels.lastUpdated || "Last updated"
297+
},
298+
returnToTopLabel: labels.returnToTop || "Return to top",
299+
sidebarMenuLabel: labels.sidebarMenu || "Menu",
300+
darkModeSwitchLabel: labels.darkModeSwitch || "Theme",
301+
lightModeSwitchTitle: labels.lightModeSwitchTitle || "Switch to light theme",
302+
darkModeSwitchTitle: labels.darkModeSwitchTitle || "Switch to dark theme",
303+
socialLinks: [{ icon: "github", link: githubRepoTreeLink }]
304+
};
305+
};
306+
307+
const enSourceItems = {
308+
lectures: enLectureItems,
309+
projects: enProjectItems,
310+
resources: enResourceItems,
311+
skills: enSkillItems
312+
};
313+
314+
const zhSourceItems = {
315+
lectures: zhLectureItems,
316+
projects: zhProjectItems,
317+
resources: zhResourceItems,
318+
skills: zhSkillItems
319+
};
320+
231321
export default withMermaid(
232322
defineConfig({
233323
base: docsBase,
@@ -332,6 +422,137 @@ export default withMermaid(
332422
socialLinks: [{ icon: "github", link: githubRepoTreeLink }]
333423
}
334424
},
425+
"zh-TW": {
426+
label: "繁體中文",
427+
lang: "zh-TW",
428+
link: "/zh-TW/",
429+
themeConfig: createLocaleTheme("zh-TW", zhSourceItems, {
430+
lectures: "講義",
431+
projects: "專案",
432+
resources: "資源庫",
433+
skills: "技能",
434+
resourceLibrary: "資源庫",
435+
tryHarness: "Try Harness ↗",
436+
prev: "上一篇",
437+
next: "下一篇",
438+
lastUpdated: "最後更新於",
439+
returnToTop: "回到頂部",
440+
sidebarMenu: "選單",
441+
darkModeSwitch: "主題",
442+
lightModeSwitchTitle: "切換到淺色模式",
443+
darkModeSwitchTitle: "切換到深色模式"
444+
})
445+
},
446+
ja: {
447+
label: "日本語",
448+
lang: "ja-JP",
449+
link: "/ja/",
450+
themeConfig: createLocaleTheme("ja", enSourceItems, {
451+
lectures: "講義",
452+
projects: "プロジェクト",
453+
resources: "リソース",
454+
skills: "スキル",
455+
resourceLibrary: "リソースライブラリ",
456+
tryHarness: "Try Harness ↗",
457+
outline: "このページ",
458+
prev: "前へ",
459+
next: "次へ",
460+
lastUpdated: "最終更新",
461+
returnToTop: "トップへ戻る",
462+
sidebarMenu: "メニュー",
463+
darkModeSwitch: "テーマ",
464+
lightModeSwitchTitle: "ライトモードに切り替え",
465+
darkModeSwitchTitle: "ダークモードに切り替え"
466+
})
467+
},
468+
es: {
469+
label: "Español",
470+
lang: "es-ES",
471+
link: "/es/",
472+
themeConfig: createLocaleTheme("es", enSourceItems, {
473+
lectures: "Lecciones",
474+
projects: "Proyectos",
475+
resources: "Biblioteca",
476+
skills: "Skills",
477+
resourceLibrary: "Biblioteca de recursos",
478+
tryHarness: "Try Harness ↗",
479+
outline: "En esta página",
480+
prev: "Anterior",
481+
next: "Siguiente",
482+
lastUpdated: "Última actualización",
483+
returnToTop: "Volver arriba",
484+
sidebarMenu: "Menú",
485+
darkModeSwitch: "Tema",
486+
lightModeSwitchTitle: "Cambiar a tema claro",
487+
darkModeSwitchTitle: "Cambiar a tema oscuro"
488+
})
489+
},
490+
fr: {
491+
label: "Français",
492+
lang: "fr-FR",
493+
link: "/fr/",
494+
themeConfig: createLocaleTheme("fr", enSourceItems, {
495+
lectures: "Cours",
496+
projects: "Projets",
497+
resources: "Bibliothèque",
498+
skills: "Skills",
499+
resourceLibrary: "Bibliothèque de ressources",
500+
tryHarness: "Try Harness ↗",
501+
outline: "Sur cette page",
502+
prev: "Précédent",
503+
next: "Suivant",
504+
lastUpdated: "Dernière mise à jour",
505+
returnToTop: "Retour en haut",
506+
sidebarMenu: "Menu",
507+
darkModeSwitch: "Thème",
508+
lightModeSwitchTitle: "Passer au thème clair",
509+
darkModeSwitchTitle: "Passer au thème sombre"
510+
})
511+
},
512+
de: {
513+
label: "Deutsch",
514+
lang: "de-DE",
515+
link: "/de/",
516+
themeConfig: createLocaleTheme("de", enSourceItems, {
517+
lectures: "Lektionen",
518+
projects: "Projekte",
519+
resources: "Bibliothek",
520+
skills: "Skills",
521+
resourceLibrary: "Ressourcenbibliothek",
522+
tryHarness: "Try Harness ↗",
523+
outline: "Auf dieser Seite",
524+
prev: "Zurück",
525+
next: "Weiter",
526+
lastUpdated: "Zuletzt aktualisiert",
527+
returnToTop: "Nach oben",
528+
sidebarMenu: "Menü",
529+
darkModeSwitch: "Theme",
530+
lightModeSwitchTitle: "Zum hellen Theme wechseln",
531+
darkModeSwitchTitle: "Zum dunklen Theme wechseln"
532+
})
533+
},
534+
ar: {
535+
label: "العربية",
536+
lang: "ar-SA",
537+
link: "/ar/",
538+
themeConfig: createLocaleTheme("ar", enSourceItems, {
539+
lectures: "المحاضرات",
540+
projects: "المشاريع",
541+
resources: "المكتبة",
542+
skills: "المهارات",
543+
resourceLibrary: "مكتبة الموارد",
544+
tryHarness: "Try Harness ↗",
545+
outline: "في هذه الصفحة",
546+
prev: "السابق",
547+
next: "التالي",
548+
lastUpdated: "آخر تحديث",
549+
returnToTop: "العودة إلى الأعلى",
550+
sidebarMenu: "القائمة",
551+
darkModeSwitch: "السمة",
552+
lightModeSwitchTitle: "التبديل إلى السمة الفاتحة",
553+
darkModeSwitchTitle: "التبديل إلى السمة الداكنة"
554+
})
555+
},
335556
vi: {
336557
label: "Tiếng Việt",
337558
lang: "vi-VN",

docs/ar/index.md

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
# مرحبًا بك في Learn Harness Engineering
2+
3+
Learn Harness Engineering هو مساق مخصص لهندسة وكلاء البرمجة بالذكاء الاصطناعي. درسنا و لخصنا مجموعة من أكثر نظريات وممارسات Harness Engineering تقدمًا في الصناعة. تشمل مراجعنا الأساسية:
4+
- [OpenAI: Harness engineering: leveraging Codex in an agent-first world](https://openai.com/index/harness-engineering/)
5+
- [Anthropic: Effective harnesses for long-running agents](https://www.anthropic.com/engineering/effective-harnesses-for-long-running-agents)
6+
- [Anthropic: Harness design for long-running application development](https://www.anthropic.com/engineering/harness-design-long-running-apps)
7+
- [Awesome Harness Engineering](https://github.com/walkinglabs/awesome-harness-engineering)
8+
9+
من خلال تصميم البيئة، وإدارة الحالة، والتحقق، وأنظمة التحكم بطريقة منهجية، يوضح هذا المساق كيف تجعل أدوات البرمجة الوكيلية مثل Codex و Claude Code موثوقة فعليًا. ستتعلم كيف تبني الميزات، وتصلح الأخطاء، وتؤتمت مهام التطوير عبر تقييد مساعد البرمجة بالذكاء الاصطناعي بقواعد وحدود صريحة.
10+
11+
## ابدأ
12+
13+
اختر مسار التعلم المناسب لك. ينقسم المساق إلى محاضرات نظرية، ومشاريع عملية، ومكتبة موارد جاهزة للنسخ.
14+
15+
<div class="card-grid">
16+
<a href="./lectures/lecture-01-why-capable-agents-still-fail/" class="card">
17+
<h3>المحاضرات</h3>
18+
<p>افهم لماذا تفشل النماذج القوية أحيانًا، وتعلم النظرية وراء harnesses الفعالة.</p>
19+
</a>
20+
<a href="./projects/" class="card">
21+
<h3>المشاريع</h3>
22+
<p>تدريب عملي على بناء بيئة وكيلية موثوقة من الصفر.</p>
23+
</a>
24+
<a href="./resources/" class="card">
25+
<h3>مكتبة الموارد</h3>
26+
<p>قوالب جاهزة للنسخ مثل AGENTS.md و feature_list.json لاستخدامها في مستودعاتك.</p>
27+
</a>
28+
</div>
29+
30+
## الآلية الأساسية للـ harness
31+
32+
الـ harness لا "يجعل النموذج أذكى"؛ بل ينشئ **نظام عمل** مغلق الحلقة للنموذج. يمكنك فهم التدفق الأساسي من خلال هذا المخطط:
33+
34+
```mermaid
35+
graph TD
36+
A["Clear Objective<br/>AGENTS.md"] --> B("Initialization<br/>init.sh")
37+
B --> C{"Run Tasks<br/>AI Agent"}
38+
C -->|Encounter Issues| D["Runtime Feedback<br/>CLI / Logs"]
39+
D -->|Auto-fix| C
40+
C -->|Code Completed| E{"Verify & QA<br/>Test suite"}
41+
E -->|Failed| D
42+
E -->|Passed| F["Cleanup & Handoff<br/>claude-progress.md"]
43+
44+
classDef primary fill:#D95C41,stroke:#C14E36,color:#fff,font-weight:bold;
45+
classDef process fill:#F4F3EE,stroke:#D1D1D1,color:#1A1A1A;
46+
classDef check fill:#EAE8E1,stroke:#B3B3B3,color:#1A1A1A;
47+
48+
class A,F primary;
49+
class B,D process;
50+
class C,E check;
51+
```
52+
53+
## ما الذي ستتعلمه
54+
55+
هذه بعض المفاهيم الأساسية التي ستتقنها:
56+
57+
<ul class="index-list">
58+
<li><strong>تقييد سلوك الوكيل</strong> بقواعد وحدود صريحة.</li>
59+
<li><strong>الحفاظ على السياق</strong> عبر المهام الطويلة ومتعددة الجلسات.</li>
60+
<li><strong>منع الوكلاء</strong> من إعلان النجاح مبكرًا.</li>
61+
<li><strong>التحقق من العمل</strong> باستخدام اختبارات pipeline كاملة ومراجعة ذاتية.</li>
62+
<li><strong>جعل runtime قابلًا للملاحظة</strong> وأسهل في التصحيح.</li>
63+
</ul>
64+
65+
## الخطوات التالية
66+
67+
بعد فهم المفاهيم الأساسية، تساعدك هذه الأدلة على التعمق:
68+
69+
<ul class="index-list">
70+
<li><a href="./lectures/lecture-01-why-capable-agents-still-fail/">المحاضرة 01: لماذا تفشل الوكلاء القادرة أحيانًا</a>: ابدأ بالنظرية وراء harness engineering.</li>
71+
<li><a href="./projects/project-01-baseline-vs-minimal-harness/">المشروع 01: baseline مقابل harness بسيط</a>: نفذ أول مهمة عملية حقيقية.</li>
72+
<li><a href="./resources/templates/">القوالب</a>: احصل على حزمة harness بسيطة لاستخدامها في مشاريعك.</li>
73+
</ul>

0 commit comments

Comments
 (0)