diff --git a/docs/.vitepress/theme/components/HomeFeatures.vue b/docs/.vitepress/theme/components/HomeFeatures.vue
index 99cf26e..eb42701 100644
--- a/docs/.vitepress/theme/components/HomeFeatures.vue
+++ b/docs/.vitepress/theme/components/HomeFeatures.vue
@@ -47,17 +47,13 @@ const isCjkLocale = computed(() => {
const topPromo = computed(() => {
const code = lang.value ? lang.value.toLowerCase() : 'en'
- if (code === 'zh-cn' || code === 'zh-tw') {
- return {
- text: '用 Easy-Vibe 构建你的第一个 AI 应用,最快当天可上线原型。',
- cta: '开始学习 ›',
- link: '/zh-cn/stage-1/learning-map/'
- }
- }
+ const isChinese = code === 'zh-cn' || code === 'zh-tw'
return {
- text: 'Build your first AI app with Easy-Vibe and ship a working prototype fast.',
- cta: 'Start learning ›',
- link: '/en/stage-1/learning-map/'
+ text: isChinese
+ ? '用 Easy-Vibe 构建你的第一个 AI 应用,最快当天可上线原型。'
+ : 'Build your first AI app with Easy-Vibe and ship a working prototype fast.',
+ cta: isChinese ? '开始学习 ›' : 'Start learning ›',
+ link: `/${code}/stage-1/learning-map/`
}
})
diff --git a/docs/.vitepress/theme/components/home/HomeAppleFooter.vue b/docs/.vitepress/theme/components/home/HomeAppleFooter.vue
index d57404d..55091b3 100644
--- a/docs/.vitepress/theme/components/home/HomeAppleFooter.vue
+++ b/docs/.vitepress/theme/components/home/HomeAppleFooter.vue
@@ -88,6 +88,11 @@ const appleFooterInfo = computed(() => {
return content[locale] || content.en
})
+const footerBtnLink = computed(() => {
+ const locale = t.value._locale || 'zh-cn'
+ return withBase(`/${locale}/stage-1/learning-map/`)
+})
+
const footerRepositoryLink = 'https://github.com/datawhalechina/easy-vibe'
const footerPolicyLinkMap = {
@@ -100,26 +105,34 @@ const footerPolicyLinkMap = {
}
const footerColumnLinkMap = {
- '零基础入门': '/zh-cn/stage-1/',
- '初中级开发': '/zh-cn/stage-2/',
- '高级开发': '/zh-cn/stage-3/',
- '附录': '/zh-cn/appendix/',
- '学习地图': '/zh-cn/stage-1/learning-map/',
- '课程总览': '/zh-cn/stage-1/',
+ '零基础入门': '/stage-1/',
+ '初中级开发': '/stage-2/',
+ '高级开发': '/stage-3/',
+ '附录': '/appendix/',
+ '学习地图': '/stage-1/learning-map/',
+ '课程总览': '/stage-1/',
+ 'Foundations': '/stage-1/',
+ 'Junior/Mid Dev': '/stage-2/',
+ 'Senior Dev': '/stage-3/',
+ 'Appendix': '/appendix/',
+ 'Learning Map': '/stage-1/learning-map/',
+ 'Course Outline': '/stage-1/',
+ 'Overview': '/guide/introduction',
+}
+
+const footerExternalLinks = {
'GitHub 仓库': 'https://github.com/datawhalechina/easy-vibe',
- 'Foundations': '/en/stage-1/',
- 'Junior/Mid Dev': '/en/stage-2/',
- 'Senior Dev': '/en/stage-3/',
- 'Appendix': '/en/appendix/',
- 'Learning Map': '/en/stage-1/learning-map/',
- 'Course Outline': '/en/stage-1/',
'GitHub Repository': 'https://github.com/datawhalechina/easy-vibe',
- 'Overview': '/en/guide/introduction',
- 'Changelog': 'https://github.com/datawhalechina/easy-vibe/releases'
+ 'Changelog': 'https://github.com/datawhalechina/easy-vibe/releases',
}
const getFooterLink = (label) => {
- return footerColumnLinkMap[label] || '#'
+ const external = footerExternalLinks[label]
+ if (external) return external
+ const basePath = footerColumnLinkMap[label]
+ if (!basePath) return '#'
+ const locale = t.value._locale || 'zh-cn'
+ return `/${locale}${basePath}`
}
const getPolicyLink = (label) => {
@@ -140,7 +153,7 @@ const resolveFooterHref = (link) => {
{{ t.footer.desc }}
{{ t.footer.btn }}
diff --git a/docs/.vitepress/theme/components/home/HomeData.js b/docs/.vitepress/theme/components/home/HomeData.js
index edec393..372fbfa 100644
--- a/docs/.vitepress/theme/components/home/HomeData.js
+++ b/docs/.vitepress/theme/components/home/HomeData.js
@@ -201,4 +201,4 @@ export const appendixCards = [
tag: 'General',
link: '/zh-cn/appendix/1-computer-fundamentals/computer-networks'
}
-]
\ No newline at end of file
+]
diff --git a/docs/.vitepress/theme/components/home/HomeI18n.js b/docs/.vitepress/theme/components/home/HomeI18n.js
index fdb3f40..d0b41e5 100644
--- a/docs/.vitepress/theme/components/home/HomeI18n.js
+++ b/docs/.vitepress/theme/components/home/HomeI18n.js
@@ -14,10 +14,22 @@ export const i18n = {
cat: '用户故事',
title: '看见每一个
闪亮的你',
sub: '加入他们,分享你的 vibe coding 故事',
- s1: { title: '放弃月入过万,他在农村小学带孩子们“用AI赶苍蝇”', author: '小学老师小浩' },
- s2: { title: '期末考试周,我偷偷用AI造了个“校园闲鱼”', author: '一位大二学生' },
- s3: { title: '我给每个学生,做了一个不会累的“学霸同桌”', author: '高中信息技术老师' },
- s4: { title: '48岁货车司机,熬了几个通宵,硬是用AI磕出一个出海工具站', author: '货车司机老黄' },
+ s1: {
+ title: '放弃月入过万,他在农村小学带孩子们“用AI赶苍蝇”',
+ author: '小学老师小浩'
+ },
+ s2: {
+ title: '期末考试周,我偷偷用AI造了个“校园闲鱼”',
+ author: '一位大二学生'
+ },
+ s3: {
+ title: '我给每个学生,做了一个不会累的“学霸同桌”',
+ author: '高中信息技术老师'
+ },
+ s4: {
+ title: '48岁货车司机,熬了几个通宵,硬是用AI磕出一个出海工具站',
+ author: '货车司机老黄'
+ },
authorPrefix: '讲述者:',
ui: {
prevLabel: '上一则故事',
@@ -28,8 +40,7 @@ export const i18n = {
},
stage1: {
cat: 'Stage 1 · 零基础入门',
- title:
- '没有技术背景?
正好。',
+ title: '没有技术背景?
正好。',
sub: '不看专业、不看出身——会说话,你就能做产品。',
cards: [
{
@@ -195,7 +206,7 @@ export const i18n = {
btn: '>_ Start'
}
},
- 'en': {
+ en: {
nav: {
title: 'Easy-Vibe Tutorial',
home: 'Home',
@@ -210,10 +221,25 @@ export const i18n = {
cat: 'Vibe Stories',
title: 'Meet every
shining builder.',
sub: 'See how people from different backgrounds use AI to solve real problems.',
- s1: { title: 'He gave up a high salary to help rural kids "fight flies" with AI', author: 'Xiaohao, primary school teacher' },
- s2: { title: 'During finals week, I secretly built a campus marketplace with AI', author: 'A sophomore student' },
- s3: { title: 'I built every student a tireless AI study buddy', author: 'A high school IT teacher' },
- s4: { title: 'A 48-year-old truck driver stayed up for nights to build an overseas AI tool site', author: 'Lao Huang, truck driver' },
+ s1: {
+ title:
+ 'He gave up a high salary to help rural kids "fight flies" with AI',
+ author: 'Xiaohao, primary school teacher'
+ },
+ s2: {
+ title:
+ 'During finals week, I secretly built a campus marketplace with AI',
+ author: 'A sophomore student'
+ },
+ s3: {
+ title: 'I built every student a tireless AI study buddy',
+ author: 'A high school IT teacher'
+ },
+ s4: {
+ title:
+ 'A 48-year-old truck driver stayed up for nights to build an overseas AI tool site',
+ author: 'Lao Huang, truck driver'
+ },
authorPrefix: 'By',
ui: {
prevLabel: 'Previous story',
@@ -257,37 +283,37 @@ export const i18n = {
title: 'Asset Agent',
headline: 'Speed up content production.',
desc: 'Build your own design-asset workflow and drawing agent with Lovart and Nanobanana.',
- link: '/zh-cn/stage-2/frontend/lovart-assets/'
+ link: '/en/stage-2/frontend/lovart-assets/'
},
{
title: 'Figma & MasterGo',
headline: 'Get fluent with design tools.',
desc: 'Learn the basics of modern UI design tools and how design files flow into development.',
- link: '/zh-cn/stage-2/frontend/figma-mastergo/'
+ link: '/en/stage-2/frontend/figma-mastergo/'
},
{
title: 'Design to Code',
headline: 'Turn mockups into pages.',
desc: 'Convert prototypes into real frontend code that runs in the browser instead of staying as static designs.',
- link: '/zh-cn/stage-2/frontend/design-to-code/'
+ link: '/en/stage-2/frontend/design-to-code/'
},
{
title: 'Real Data Project',
headline: 'Backed by a real DB.',
desc: 'Design tables and permissions on Supabase and wire them into real read/write flows.',
- link: '/zh-cn/stage-2/backend/database-supabase/'
+ link: '/en/stage-2/backend/database-supabase/'
},
{
title: 'Deployment',
headline: 'Ship it to the world.',
desc: 'Use CloudBase, Vercel and Zeabur to turn local projects into publicly reachable sites.',
- link: '/zh-cn/stage-2/backend/zeabur-deployment/'
+ link: '/en/stage-2/backend/zeabur-deployment/'
},
{
title: 'AI Knowledge Base',
headline: 'Plug AI into the app.',
desc: 'Use Dify to build AI workflows and knowledge-base powered product experiences.',
- link: '/zh-cn/stage-2/ai-capabilities/dify-knowledge-base/'
+ link: '/en/stage-2/ai-capabilities/dify-knowledge-base/'
}
]
},
@@ -300,22 +326,22 @@ export const i18n = {
{
title: 'Electron Desktop App',
desc: 'Build a speech-to-text desktop app that runs on Windows, macOS and Linux from one codebase.',
- link: '/zh-cn/stage-3/cross-platform/electron-voice-to-text/'
+ link: '/en/stage-3/cross-platform/electron-voice-to-text/'
},
{
title: 'Agent Teams',
desc: 'Use Claude Agent Teams to orchestrate multiple agents like a real dev team.',
- link: '/zh-cn/stage-3/core-skills/agent-teams/'
+ link: '/en/stage-3/core-skills/agent-teams/'
},
{
title: 'Long-running Tasks',
desc: 'Design loops and task queues so Claude Code can safely run overnight until work is truly done.',
- link: '/zh-cn/stage-3/core-skills/long-running-tasks/'
+ link: '/en/stage-3/core-skills/long-running-tasks/'
},
{
title: 'Personal Brand',
desc: 'Build your own website and tech blog to showcase projects and writing.',
- link: '/zh-cn/stage-3/personal-brand/personal-website-blog/'
+ link: '/en/stage-3/personal-brand/personal-website-blog/'
}
]
},
@@ -328,62 +354,62 @@ export const i18n = {
{
title: 'AI History',
desc: 'Milestones in AI evolution.',
- link: '/zh-cn/appendix/8-artificial-intelligence/ai-history'
+ link: '/en/appendix/8-artificial-intelligence/ai-history'
},
{
title: 'Prompt Eng',
desc: 'Master AI communication skills.',
- link: '/zh-cn/appendix/8-artificial-intelligence/prompt-engineering'
+ link: '/en/appendix/8-artificial-intelligence/prompt-engineering'
},
{
title: 'LLM Intro',
desc: 'Understanding Large Language Models.',
- link: '/zh-cn/appendix/8-artificial-intelligence/llm-principles'
+ link: '/en/appendix/8-artificial-intelligence/llm-principles'
},
{
title: 'AI Agents',
desc: 'Autonomous decision-making AI.',
- link: '/zh-cn/appendix/8-artificial-intelligence/ai-agents'
+ link: '/en/appendix/8-artificial-intelligence/ai-agents'
},
{
title: 'Web Basics',
desc: 'HTML/CSS/JS fundamentals.',
- link: '/zh-cn/appendix/3-browser-and-frontend/javascript-deep-dive'
+ link: '/en/appendix/3-browser-and-frontend/javascript-deep-dive'
},
{
title: 'Frontend Evo',
desc: 'Evolution of frontend tech stack.',
- link: '/zh-cn/appendix/3-browser-and-frontend/frontend-frameworks'
+ link: '/en/appendix/3-browser-and-frontend/frontend-frameworks'
},
{
title: 'Backend Arch',
desc: 'From monolith to microservices.',
- link: '/zh-cn/appendix/4-server-and-backend/backend-layered-architecture'
+ link: '/en/appendix/4-server-and-backend/backend-layered-architecture'
},
{
title: 'Backend Lang',
desc: 'Choosing the right tech stack.',
- link: '/zh-cn/appendix/4-server-and-backend/backend-languages'
+ link: '/en/appendix/4-server-and-backend/backend-languages'
},
{
title: 'Database',
desc: 'Core principles of data storage.',
- link: '/zh-cn/appendix/5-data/database-fundamentals'
+ link: '/en/appendix/5-data/database-fundamentals'
},
{
title: 'API Design',
desc: 'Designing robust interfaces.',
- link: '/zh-cn/appendix/4-server-and-backend/api-intro'
+ link: '/en/appendix/4-server-and-backend/api-intro'
},
{
title: 'Git',
desc: 'Version control mastery.',
- link: '/zh-cn/appendix/2-development-tools/git-version-control'
+ link: '/en/appendix/2-development-tools/git-version-control'
},
{
title: 'Networks',
desc: 'Protocols and communication.',
- link: '/zh-cn/appendix/1-computer-fundamentals/computer-networks'
+ link: '/en/appendix/1-computer-fundamentals/computer-networks'
}
]
},
@@ -408,10 +434,24 @@ export const i18n = {
cat: 'ユーザーストーリー',
title: 'それぞれの
輝く物語を見よう。',
sub: 'さまざまな背景の人たちが、AIで現実の課題をどう解決したかを紹介します。',
- s1: { title: '高収入の仕事を辞め、農村の子どもたちとAIで「ハエ対策」アプリを作った先生', author: '小学校教師 小浩' },
- s2: { title: '期末試験の週に、AIでこっそり「学内版フリマ」を作った', author: '大学2年生' },
- s3: { title: '生徒一人ひとりに、疲れない「AI優等生の隣の席」を作った', author: '高校の情報技術教師' },
- s4: { title: '48歳のトラック運転手が、徹夜で海外向けAIツールサイトを作り上げた', author: 'トラック運転手 老黄' },
+ s1: {
+ title:
+ '高収入の仕事を辞め、農村の子どもたちとAIで「ハエ対策」アプリを作った先生',
+ author: '小学校教師 小浩'
+ },
+ s2: {
+ title: '期末試験の週に、AIでこっそり「学内版フリマ」を作った',
+ author: '大学2年生'
+ },
+ s3: {
+ title: '生徒一人ひとりに、疲れない「AI優等生の隣の席」を作った',
+ author: '高校の情報技術教師'
+ },
+ s4: {
+ title:
+ '48歳のトラック運転手が、徹夜で海外向けAIツールサイトを作り上げた',
+ author: 'トラック運転手 老黄'
+ },
authorPrefix: '語り手:',
ui: {
prevLabel: '前のストーリー',
@@ -430,19 +470,19 @@ export const i18n = {
title: 'AI PM',
desc: 'アイデアからプロトタイプまで、話すだけ。',
sub: '非技術者向け',
- link: '/zh-cn/stage-1/learning-map/'
+ link: '/ja-jp/stage-1/learning-map/'
},
{
title: 'ゲーム化入門',
desc: 'スネークゲームやテトリスを作って、コードへの恐怖を克服。',
sub: '遊びながら学ぶ',
- link: '/zh-cn/stage-1/learning-map/'
+ link: '/ja-jp/stage-1/learning-map/'
},
{
title: 'Vibe Coding',
desc: 'AI時代のコーディングの核心:プロンプトエンジニアリングとコンテキスト管理。',
sub: '核心的な考え方',
- link: '/zh-cn/stage-1/learning-map/'
+ link: '/ja-jp/stage-1/learning-map/'
}
]
},
@@ -456,19 +496,19 @@ export const i18n = {
title: 'フルスタック',
headline: 'フロント&バックエンド。',
desc: 'DB設計からAPI、コンポーネントまで、現代的なWebアプリを完全に構築。',
- link: '/zh-cn/stage-2/'
+ link: '/ja-jp/stage-2/'
},
{
title: 'リアルプロジェクト',
headline: 'おもちゃのコードは卒業。',
desc: '認証、ストレージ、ファイルアップロード、コアビジネスロジックを深く掘り下げる。',
- link: '/zh-cn/stage-2/'
+ link: '/ja-jp/stage-2/'
},
{
title: 'デプロイ',
headline: '世界に公開。',
desc: 'サーバー設定、DNS、CI/CD。製品リリースのラストワンマイル。',
- link: '/zh-cn/stage-2/'
+ link: '/ja-jp/stage-2/'
}
]
},
@@ -480,22 +520,22 @@ export const i18n = {
{
title: 'WeChatミニアプリ',
desc: 'クロスプラットフォーム開発、数億人のユーザーに到達。',
- link: '/zh-cn/stage-3/'
+ link: '/ja-jp/stage-3/'
},
{
title: 'AIネイティブアプリ',
desc: 'RAG、Agent。LLMの限界を探る。',
- link: '/zh-cn/stage-3/'
+ link: '/ja-jp/stage-3/'
},
{
title: '複雑なアーキテクチャ',
desc: '高並行性、高可用性のアーキテクチャ設計。',
- link: '/zh-cn/stage-3/'
+ link: '/ja-jp/stage-3/'
},
{
title: 'パーソナルブランド',
desc: '自分のウェブサイトと学術ブログを構築。',
- link: '/zh-cn/stage-3/'
+ link: '/ja-jp/stage-3/'
}
]
},
@@ -508,22 +548,22 @@ export const i18n = {
{
title: 'AI Fundamentals',
desc: 'LLM, Agent, RAG. Dive into AI internals.',
- link: '/zh-cn/appendix/8-artificial-intelligence/ai-history'
+ link: '/ja-jp/appendix/8-artificial-intelligence/ai-history'
},
{
title: 'Frontend',
desc: 'Browser internals, Performance, Canvas.',
- link: '/zh-cn/appendix/3-browser-and-frontend/javascript-deep-dive'
+ link: '/ja-jp/appendix/3-browser-and-frontend/javascript-deep-dive'
},
{
title: 'Backend',
desc: 'High concurrency, Distributed systems, Microservices.',
- link: '/zh-cn/appendix/4-server-and-backend/backend-layered-architecture'
+ link: '/ja-jp/appendix/4-server-and-backend/backend-layered-architecture'
},
{
title: 'General Skills',
desc: 'Git, Networks, IDE internals.',
- link: '/zh-cn/appendix/2-development-tools/git-version-control'
+ link: '/ja-jp/appendix/2-development-tools/git-version-control'
}
]
},
@@ -548,10 +588,22 @@ export const i18n = {
cat: '使用者故事',
title: '看見每一個
閃光的你。',
sub: '看看不同背景的人,如何用 AI 解決真實問題、做出真實產品。',
- s1: { title: '放棄月入過萬,他在鄉村小學帶孩子們「用 AI 趕蒼蠅」', author: '小學老師小浩' },
- s2: { title: '期末考週,我偷偷用 AI 做了個「校園閒魚」', author: '一位大二學生' },
- s3: { title: '我給每個學生,做了一個不會累的「學霸同桌」', author: '高中資訊科技老師' },
- s4: { title: '48 歲貨車司機熬了幾個通宵,硬是用 AI 做出一個出海工具站', author: '貨車司機老黃' },
+ s1: {
+ title: '放棄月入過萬,他在鄉村小學帶孩子們「用 AI 趕蒼蠅」',
+ author: '小學老師小浩'
+ },
+ s2: {
+ title: '期末考週,我偷偷用 AI 做了個「校園閒魚」',
+ author: '一位大二學生'
+ },
+ s3: {
+ title: '我給每個學生,做了一個不會累的「學霸同桌」',
+ author: '高中資訊科技老師'
+ },
+ s4: {
+ title: '48 歲貨車司機熬了幾個通宵,硬是用 AI 做出一個出海工具站',
+ author: '貨車司機老黃'
+ },
authorPrefix: '講述者:',
ui: {
prevLabel: '上一則故事',
@@ -570,19 +622,19 @@ export const i18n = {
title: 'AI 產品經理',
desc: '從想法到高保真原型,你只需要會說話。',
sub: '適合非技術背景',
- link: '/zh-cn/stage-1/learning-map/'
+ link: '/zh-tw/stage-1/learning-map/'
},
{
title: '遊戲化入門',
desc: '通過製作貪吃蛇、俄羅斯方塊,打破對代碼的恐懼。',
sub: '邊玩邊學',
- link: '/zh-cn/stage-1/learning-map/'
+ link: '/zh-tw/stage-1/learning-map/'
},
{
title: 'Vibe Coding',
desc: '掌握 AI 時代的編程核心:提示詞工程與上下文管理。',
sub: '核心心法',
- link: '/zh-cn/stage-1/learning-map/'
+ link: '/zh-tw/stage-1/learning-map/'
}
]
},
@@ -595,19 +647,19 @@ export const i18n = {
title: '全棧開發',
headline: '獨立完成前後端。',
desc: '從數據庫設計到 API 開發,再到前端組件化,完整構建一個現代化 Web 應用。',
- link: '/zh-cn/stage-2/'
+ link: '/zh-tw/stage-2/'
},
{
title: '真實項目',
headline: '拒絕玩具代碼。',
desc: '深入理解用戶鑑權、數據存儲、文件上傳等核心業務邏輯。',
- link: '/zh-cn/stage-2/'
+ link: '/zh-tw/stage-2/'
},
{
title: '部署上線',
headline: '讓世界看到你的作品。',
desc: '學習服務器配置、域名解析和自動化部署,打通產品落地的最後一公里。',
- link: '/zh-cn/stage-2/'
+ link: '/zh-tw/stage-2/'
}
]
},
@@ -619,22 +671,22 @@ export const i18n = {
{
title: '微信小程序',
desc: '跨平台開發,觸達億級用戶。',
- link: '/zh-cn/stage-3/'
+ link: '/zh-tw/stage-3/'
},
{
title: 'AI 原生應用',
desc: 'RAG、Agent,探索 LLM 的無限可能。',
- link: '/zh-cn/stage-3/'
+ link: '/zh-tw/stage-3/'
},
{
title: '複雜業務架構',
desc: '應對高並發、高可用場景的架構設計。',
- link: '/zh-cn/stage-3/'
+ link: '/zh-tw/stage-3/'
},
{
title: '個人品牌',
desc: '構建屬於自己的個人網頁與學術博客。',
- link: '/zh-cn/stage-3/'
+ link: '/zh-tw/stage-3/'
}
]
},
@@ -646,22 +698,22 @@ export const i18n = {
{
title: '人工智能',
desc: 'LLM、Agent、RAG,深入 AI 底層原理。',
- link: '/zh-cn/appendix/8-artificial-intelligence/ai-history'
+ link: '/zh-tw/appendix/8-artificial-intelligence/ai-history'
},
{
title: '前端開發',
desc: '瀏覽器原理、性能優化、Canvas 圖形學。',
- link: '/zh-cn/appendix/3-browser-and-frontend/javascript-deep-dive'
+ link: '/zh-tw/appendix/3-browser-and-frontend/javascript-deep-dive'
},
{
title: '後端架構',
desc: '高並發、分佈式、微服務架構設計。',
- link: '/zh-cn/appendix/4-server-and-backend/backend-layered-architecture'
+ link: '/zh-tw/appendix/4-server-and-backend/backend-layered-architecture'
},
{
title: '通用技能',
desc: 'Git、網絡、IDE 原理,開發者必備素養。',
- link: '/zh-cn/appendix/2-development-tools/git-version-control'
+ link: '/zh-tw/appendix/2-development-tools/git-version-control'
}
]
},
@@ -684,12 +736,27 @@ export const i18n = {
},
stories: {
cat: '사용자 이야기',
- title: '빛나는 모두의
이야기를 만나보세요.',
+ title:
+ '빛나는 모두의
이야기를 만나보세요.',
sub: '서로 다른 배경의 사람들이 AI로 현실의 문제를 어떻게 해결했는지 살펴보세요.',
- s1: { title: '높은 월급을 포기하고 시골 초등학교 아이들과 AI로 "파리 막기"를 만든 선생님', author: '초등학교 교사 샤오하오' },
- s2: { title: '기말고사 주간에 몰래 AI로 "캠퍼스 중고장터"를 만든 이야기', author: '대학교 2학년 학생' },
- s3: { title: '모든 학생에게 지치지 않는 "AI 우등생 짝꿍"을 만들어 준 선생님', author: '고등학교 정보기술 교사' },
- s4: { title: '48세 트럭 운전사가 며칠 밤을 새워 해외용 AI 툴 사이트를 만든 이야기', author: '트럭 운전사 라오황' },
+ s1: {
+ title:
+ '높은 월급을 포기하고 시골 초등학교 아이들과 AI로 "파리 막기"를 만든 선생님',
+ author: '초등학교 교사 샤오하오'
+ },
+ s2: {
+ title: '기말고사 주간에 몰래 AI로 "캠퍼스 중고장터"를 만든 이야기',
+ author: '대학교 2학년 학생'
+ },
+ s3: {
+ title: '모든 학생에게 지치지 않는 "AI 우등생 짝꿍"을 만들어 준 선생님',
+ author: '고등학교 정보기술 교사'
+ },
+ s4: {
+ title:
+ '48세 트럭 운전사가 며칠 밤을 새워 해외용 AI 툴 사이트를 만든 이야기',
+ author: '트럭 운전사 라오황'
+ },
authorPrefix: '화자:',
ui: {
prevLabel: '이전 이야기',
@@ -708,19 +775,19 @@ export const i18n = {
title: 'AI 제품 관리자',
desc: '아이디어에서 프로토타입까지, 말 한마디로.',
sub: '비전공자 추천',
- link: '/zh-cn/stage-1/learning-map/'
+ link: '/ko-kr/stage-1/learning-map/'
},
{
title: '게임으로 입문',
desc: '스네이크 게임, 테트리스를 만들며 코딩 공포증 극복.',
sub: '놀면서 배우기',
- link: '/zh-cn/stage-1/learning-map/'
+ link: '/ko-kr/stage-1/learning-map/'
},
{
title: 'Vibe Coding',
desc: 'AI 시대 코딩의 핵심: 프롬프트 엔지니어링과 컨텍스트 관리.',
sub: '핵심 마인드셋',
- link: '/zh-cn/stage-1/learning-map/'
+ link: '/ko-kr/stage-1/learning-map/'
}
]
},
@@ -733,19 +800,19 @@ export const i18n = {
title: '풀스택 개발',
headline: '프론트 & 백엔드 독립 완성.',
desc: 'DB 설계부터 API 개발, 프론트엔드 컴포넌트화까지 현대적인 웹 앱을 완벽하게 구축.',
- link: '/zh-cn/stage-2/'
+ link: '/ko-kr/stage-2/'
},
{
title: '실전 프로젝트',
headline: '장난감 코드는 그만.',
desc: '사용자 인증, 데이터 저장, 파일 업로드 등 핵심 비즈니스 로직 심층 이해.',
- link: '/zh-cn/stage-2/'
+ link: '/ko-kr/stage-2/'
},
{
title: '배포 및 출시',
headline: '세상에 보여주세요.',
desc: '서버 설정, 도메인 연결, CI/CD. 제품 출시의 마지막 관문.',
- link: '/zh-cn/stage-2/'
+ link: '/ko-kr/stage-2/'
}
]
},
@@ -758,22 +825,22 @@ export const i18n = {
{
title: '위챗 미니프로그램',
desc: '크로스 플랫폼 개발, 수억 명의 사용자 도달.',
- link: '/zh-cn/stage-3/'
+ link: '/ko-kr/stage-3/'
},
{
title: 'AI 네이티브 앱',
desc: 'RAG, Agent. LLM의 한계 탐색.',
- link: '/zh-cn/stage-3/'
+ link: '/ko-kr/stage-3/'
},
{
title: '복잡한 아키텍처',
desc: '고동시성, 고가용성 아키텍처 설계.',
- link: '/zh-cn/stage-3/'
+ link: '/ko-kr/stage-3/'
},
{
title: '퍼스널 브랜딩',
desc: '나만의 웹사이트와 학술 블로그 구축.',
- link: '/zh-cn/stage-3/'
+ link: '/ko-kr/stage-3/'
}
]
},
@@ -786,22 +853,22 @@ export const i18n = {
{
title: 'AI Fundamentals',
desc: 'LLM, Agent, RAG. Dive into AI internals.',
- link: '/zh-cn/appendix/8-artificial-intelligence/ai-history'
+ link: '/ko-kr/appendix/8-artificial-intelligence/ai-history'
},
{
title: 'Frontend',
desc: 'Browser internals, Performance, Canvas.',
- link: '/zh-cn/appendix/3-browser-and-frontend/javascript-deep-dive'
+ link: '/ko-kr/appendix/3-browser-and-frontend/javascript-deep-dive'
},
{
title: 'Backend',
desc: 'High concurrency, Distributed systems, Microservices.',
- link: '/zh-cn/appendix/4-server-and-backend/backend-layered-architecture'
+ link: '/ko-kr/appendix/4-server-and-backend/backend-layered-architecture'
},
{
title: 'General Skills',
desc: 'Git, Networks, IDE internals.',
- link: '/zh-cn/appendix/2-development-tools/git-version-control'
+ link: '/ko-kr/appendix/2-development-tools/git-version-control'
}
]
},
@@ -824,12 +891,29 @@ export const i18n = {
},
stories: {
cat: 'Historias de usuarios',
- title: 'Conoce cada
historia que brilla.',
+ title:
+ 'Conoce cada
historia que brilla.',
sub: 'Descubre cómo personas de distintos contextos usan la IA para resolver problemas reales.',
- s1: { title: 'Dejó un salario de cinco cifras para ayudar a niños rurales a "ahuyentar moscas" con IA', author: 'Xiaohao, maestro de primaria rural' },
- s2: { title: 'Durante la semana de finales, construí en secreto un mercado universitario con IA', author: 'Una estudiante de segundo año' },
- s3: { title: 'Le construí a cada alumno un compañero de estudio con IA que nunca se cansa', author: 'Un profesor de informática de secundaria' },
- s4: { title: 'Un camionero de 48 años pasó varias noches despierto para crear una web de herramientas de IA para el extranjero', author: 'Lao Huang, camionero' },
+ s1: {
+ title:
+ 'Dejó un salario de cinco cifras para ayudar a niños rurales a "ahuyentar moscas" con IA',
+ author: 'Xiaohao, maestro de primaria rural'
+ },
+ s2: {
+ title:
+ 'Durante la semana de finales, construí en secreto un mercado universitario con IA',
+ author: 'Una estudiante de segundo año'
+ },
+ s3: {
+ title:
+ 'Le construí a cada alumno un compañero de estudio con IA que nunca se cansa',
+ author: 'Un profesor de informática de secundaria'
+ },
+ s4: {
+ title:
+ 'Un camionero de 48 años pasó varias noches despierto para crear una web de herramientas de IA para el extranjero',
+ author: 'Lao Huang, camionero'
+ },
authorPrefix: 'Por',
ui: {
prevLabel: 'Historia anterior',
@@ -848,19 +932,19 @@ export const i18n = {
title: 'PM de IA',
desc: 'De la idea al prototipo, solo hablando.',
sub: 'Amigable para no técnicos',
- link: '/zh-cn/stage-1/learning-map/'
+ link: '/es-es/stage-1/learning-map/'
},
{
title: 'Intro Gamificada',
desc: 'Crea Snake, Tetris y rompe el miedo al código.',
sub: 'Aprende jugando',
- link: '/zh-cn/stage-1/learning-map/'
+ link: '/es-es/stage-1/learning-map/'
},
{
title: 'Vibe Coding',
desc: 'Domina el núcleo de la programación con IA: Ingeniería de Prompts y Contexto.',
sub: 'Mentalidad Clave',
- link: '/zh-cn/stage-1/learning-map/'
+ link: '/es-es/stage-1/learning-map/'
}
]
},
@@ -873,19 +957,19 @@ export const i18n = {
title: 'Mapa de la Etapa',
headline: 'Primero entiende el recorrido completo.',
desc: 'Revisa la vista general de Stage 2 para ver cómo encajan frontend, backend, DB y despliegue.',
- link: '/zh-cn/stage-2/'
+ link: '/es-es/stage-2/'
},
{
title: 'Proyecto con DB real',
headline: 'Supabase como base de datos de verdad.',
desc: 'Diseña tablas y permisos en Supabase y conéctalos a flujos reales de lectura/escritura.',
- link: '/zh-cn/stage-2/backend/database-supabase/'
+ link: '/es-es/stage-2/backend/database-supabase/'
},
{
title: 'Despliegue en producción',
headline: 'Lleva tu app al mundo real.',
desc: 'Usa CloudBase, Vercel y Zeabur para convertir tu código local en un sitio público.',
- link: '/zh-cn/stage-2/backend/zeabur-deployment/'
+ link: '/es-es/stage-2/backend/zeabur-deployment/'
}
]
},
@@ -898,22 +982,22 @@ export const i18n = {
{
title: 'App de escritorio multiplataforma',
desc: 'Crea con Electron una app de voz a texto que funciona en Windows, macOS y Linux con una sola base de código.',
- link: '/zh-cn/stage-3/cross-platform/electron-voice-to-text/'
+ link: '/es-es/stage-3/cross-platform/electron-voice-to-text/'
},
{
title: 'Equipos de agentes IA',
desc: 'Usa Claude Agent Teams para orquestar varios agentes como si fueran un equipo de desarrollo real.',
- link: '/zh-cn/stage-3/core-skills/agent-teams/'
+ link: '/es-es/stage-3/core-skills/agent-teams/'
},
{
title: 'Tareas de larga duración',
desc: 'Diseña bucles y colas de tareas para que Claude Code pueda trabajar durante horas de forma estable.',
- link: '/zh-cn/stage-3/core-skills/long-running-tasks/'
+ link: '/es-es/stage-3/core-skills/long-running-tasks/'
},
{
title: 'Marca personal',
desc: 'Construye tu sitio web y blog técnico para dar visibilidad a tus proyectos.',
- link: '/zh-cn/stage-3/personal-brand/personal-website-blog/'
+ link: '/es-es/stage-3/personal-brand/personal-website-blog/'
}
]
},
@@ -926,22 +1010,22 @@ export const i18n = {
{
title: 'AI Fundamentals',
desc: 'LLM, Agent, RAG. Dive into AI internals.',
- link: '/zh-cn/appendix/8-artificial-intelligence/ai-history'
+ link: '/es-es/appendix/8-artificial-intelligence/ai-history'
},
{
title: 'Frontend',
desc: 'Browser internals, Performance, Canvas.',
- link: '/zh-cn/appendix/3-browser-and-frontend/javascript-deep-dive'
+ link: '/es-es/appendix/3-browser-and-frontend/javascript-deep-dive'
},
{
title: 'Backend',
desc: 'High concurrency, Distributed systems, Microservices.',
- link: '/zh-cn/appendix/4-server-and-backend/backend-layered-architecture'
+ link: '/es-es/appendix/4-server-and-backend/backend-layered-architecture'
},
{
title: 'General Skills',
desc: 'Git, Networks, IDE internals.',
- link: '/zh-cn/appendix/2-development-tools/git-version-control'
+ link: '/es-es/appendix/2-development-tools/git-version-control'
}
]
},
@@ -964,12 +1048,29 @@ export const i18n = {
},
stories: {
cat: 'Histoires d’utilisateurs',
- title: 'Découvrez chaque
parcours inspirant.',
+ title:
+ 'Découvrez chaque
parcours inspirant.',
sub: 'Voyez comment des personnes de tous horizons utilisent l’IA pour résoudre de vrais problèmes.',
- s1: { title: 'Il a quitté un salaire confortable pour aider des enfants d’une école rurale à "chasser les mouches" avec l’IA', author: 'Xiaohao, instituteur' },
- s2: { title: 'Pendant la semaine des examens, j’ai secrètement créé une marketplace de campus avec l’IA', author: 'Une étudiante de deuxième année' },
- s3: { title: 'J’ai créé pour chaque élève un binôme d’étude IA qui ne se fatigue jamais', author: 'Un professeur d’informatique au lycée' },
- s4: { title: 'Un chauffeur routier de 48 ans a veillé plusieurs nuits pour lancer un site d’outils IA à l’international', author: 'Lao Huang, chauffeur routier' },
+ s1: {
+ title:
+ 'Il a quitté un salaire confortable pour aider des enfants d’une école rurale à "chasser les mouches" avec l’IA',
+ author: 'Xiaohao, instituteur'
+ },
+ s2: {
+ title:
+ 'Pendant la semaine des examens, j’ai secrètement créé une marketplace de campus avec l’IA',
+ author: 'Une étudiante de deuxième année'
+ },
+ s3: {
+ title:
+ 'J’ai créé pour chaque élève un binôme d’étude IA qui ne se fatigue jamais',
+ author: 'Un professeur d’informatique au lycée'
+ },
+ s4: {
+ title:
+ 'Un chauffeur routier de 48 ans a veillé plusieurs nuits pour lancer un site d’outils IA à l’international',
+ author: 'Lao Huang, chauffeur routier'
+ },
authorPrefix: 'Par',
ui: {
prevLabel: 'Histoire précédente',
@@ -988,19 +1089,19 @@ export const i18n = {
title: 'PM IA',
desc: "De l'idée au prototype, juste en parlant.",
sub: 'Accessible aux non-tech',
- link: '/zh-cn/stage-1/learning-map/'
+ link: '/fr-fr/stage-1/learning-map/'
},
{
title: 'Intro Gamifiée',
desc: 'Créez Snake, Tetris et brisez la peur du code.',
sub: 'Apprendre en jouant',
- link: '/zh-cn/stage-1/learning-map/'
+ link: '/fr-fr/stage-1/learning-map/'
},
{
title: 'Vibe Coding',
desc: 'Maîtrisez le cœur du codage IA : Prompt Engineering & Contexte.',
sub: 'Esprit Clé',
- link: '/zh-cn/stage-1/learning-map/'
+ link: '/fr-fr/stage-1/learning-map/'
}
]
},
@@ -1014,19 +1115,19 @@ export const i18n = {
title: 'Full Stack',
headline: 'Frontend & Backend.',
desc: 'Du design DB aux API et composants, construisez une web app moderne complète.',
- link: '/zh-cn/stage-2/'
+ link: '/fr-fr/stage-2/'
},
{
title: 'Projets Réels',
headline: 'Pas de code jouet.',
desc: "Plongez dans l'Auth, le Stockage, l'Upload de fichiers et la logique métier.",
- link: '/zh-cn/stage-2/'
+ link: '/fr-fr/stage-2/'
},
{
title: 'Déploiement',
headline: 'Montrez au monde.',
desc: 'Config serveur, DNS, CI/CD. Le dernier kilomètre de la livraison produit.',
- link: '/zh-cn/stage-2/'
+ link: '/fr-fr/stage-2/'
}
]
},
@@ -1039,22 +1140,22 @@ export const i18n = {
{
title: 'WeChat Mini-app',
desc: "Dév multiplateforme, touchant des millions d'utilisateurs.",
- link: '/zh-cn/stage-3/'
+ link: '/fr-fr/stage-3/'
},
{
title: 'Apps Natives IA',
desc: 'RAG, Agent. Explorez les limites des LLM.',
- link: '/zh-cn/stage-3/'
+ link: '/fr-fr/stage-3/'
},
{
title: 'Arch. Complexe',
desc: "Conception d'architecture haute concurrence et haute disponibilité.",
- link: '/zh-cn/stage-3/'
+ link: '/fr-fr/stage-3/'
},
{
title: 'Marque Perso',
desc: 'Construisez votre propre site web et blog académique.',
- link: '/zh-cn/stage-3/'
+ link: '/fr-fr/stage-3/'
}
]
},
@@ -1067,22 +1168,22 @@ export const i18n = {
{
title: 'AI Fundamentals',
desc: 'LLM, Agent, RAG. Dive into AI internals.',
- link: '/zh-cn/appendix/8-artificial-intelligence/ai-history'
+ link: '/fr-fr/appendix/8-artificial-intelligence/ai-history'
},
{
title: 'Frontend',
desc: 'Browser internals, Performance, Canvas.',
- link: '/zh-cn/appendix/3-browser-and-frontend/javascript-deep-dive'
+ link: '/fr-fr/appendix/3-browser-and-frontend/javascript-deep-dive'
},
{
title: 'Backend',
desc: 'High concurrency, Distributed systems, Microservices.',
- link: '/zh-cn/appendix/4-server-and-backend/backend-layered-architecture'
+ link: '/fr-fr/appendix/4-server-and-backend/backend-layered-architecture'
},
{
title: 'General Skills',
desc: 'Git, Networks, IDE internals.',
- link: '/zh-cn/appendix/2-development-tools/git-version-control'
+ link: '/fr-fr/appendix/2-development-tools/git-version-control'
}
]
},
@@ -1105,12 +1206,29 @@ export const i18n = {
},
stories: {
cat: 'Nutzergeschichten',
- title: 'Entdecke jede
inspirierende Geschichte.',
+ title:
+ 'Entdecke jede
inspirierende Geschichte.',
sub: 'Sieh, wie Menschen mit ganz unterschiedlichen Hintergründen mit KI echte Probleme lösen.',
- s1: { title: 'Er gab ein hohes Gehalt auf, um Kindern auf dem Land mit KI beim "Fliegenvertreiben" zu helfen', author: 'Xiaohao, Grundschullehrer' },
- s2: { title: 'In der Prüfungswoche habe ich heimlich mit KI einen Campus-Marktplatz gebaut', author: 'Eine Studentin im zweiten Jahr' },
- s3: { title: 'Ich habe jedem Schüler einen unermüdlichen KI-Lernpartner gebaut', author: 'Ein Informatiklehrer an einer Oberschule' },
- s4: { title: 'Ein 48-jähriger Lkw-Fahrer blieb mehrere Nächte wach, um eine internationale KI-Toolseite zu bauen', author: 'Lao Huang, Lkw-Fahrer' },
+ s1: {
+ title:
+ 'Er gab ein hohes Gehalt auf, um Kindern auf dem Land mit KI beim "Fliegenvertreiben" zu helfen',
+ author: 'Xiaohao, Grundschullehrer'
+ },
+ s2: {
+ title:
+ 'In der Prüfungswoche habe ich heimlich mit KI einen Campus-Marktplatz gebaut',
+ author: 'Eine Studentin im zweiten Jahr'
+ },
+ s3: {
+ title:
+ 'Ich habe jedem Schüler einen unermüdlichen KI-Lernpartner gebaut',
+ author: 'Ein Informatiklehrer an einer Oberschule'
+ },
+ s4: {
+ title:
+ 'Ein 48-jähriger Lkw-Fahrer blieb mehrere Nächte wach, um eine internationale KI-Toolseite zu bauen',
+ author: 'Lao Huang, Lkw-Fahrer'
+ },
authorPrefix: 'Von',
ui: {
prevLabel: 'Vorherige Geschichte',
@@ -1129,19 +1247,19 @@ export const i18n = {
title: 'KI PM',
desc: 'Von der Idee zum Prototyp, einfach durch Sprechen.',
sub: 'Nicht-Tech-freundlich',
- link: '/zh-cn/stage-1/learning-map/'
+ link: '/de-de/stage-1/learning-map/'
},
{
title: 'Gamifizierte Intro',
desc: 'Baue Snake, Tetris und überwinde die Angst vor Code.',
sub: 'Spielend lernen',
- link: '/zh-cn/stage-1/learning-map/'
+ link: '/de-de/stage-1/learning-map/'
},
{
title: 'Vibe Coding',
desc: 'Meistere den Kern des KI-Codings: Prompt Engineering & Kontext.',
sub: 'Kern-Mindset',
- link: '/zh-cn/stage-1/learning-map/'
+ link: '/de-de/stage-1/learning-map/'
}
]
},
@@ -1154,19 +1272,19 @@ export const i18n = {
title: 'Full Stack',
headline: 'Frontend & Backend.',
desc: 'Vom DB-Design bis zu APIs und Komponenten, baue eine moderne Web-App komplett.',
- link: '/zh-cn/stage-2/'
+ link: '/de-de/stage-2/'
},
{
title: 'Echte Projekte',
headline: 'Kein Spielzeug-Code.',
desc: 'Tauche ein in Auth, Speicher, Datei-Uploads und Kern-Geschäftslogik.',
- link: '/zh-cn/stage-2/'
+ link: '/de-de/stage-2/'
},
{
title: 'Deployment',
headline: 'Zeig es der Welt.',
desc: 'Server-Konfig, DNS, CI/CD. Die letzte Meile der Produktlieferung.',
- link: '/zh-cn/stage-2/'
+ link: '/de-de/stage-2/'
}
]
},
@@ -1179,22 +1297,22 @@ export const i18n = {
{
title: 'WeChat Mini-App',
desc: 'Plattformübergreifende Entwicklung, Millionen von Nutzern erreichen.',
- link: '/zh-cn/stage-3/'
+ link: '/de-de/stage-3/'
},
{
title: 'KI-Native Apps',
desc: 'RAG, Agent. Erkunde die Grenzen von LLMs.',
- link: '/zh-cn/stage-3/'
+ link: '/de-de/stage-3/'
},
{
title: 'Komplexe Arch',
desc: 'Architekturdesign für hohe Gleichzeitigkeit und hohe Verfügbarkeit.',
- link: '/zh-cn/stage-3/'
+ link: '/de-de/stage-3/'
},
{
title: 'Persönliche Marke',
desc: 'Baue deine eigene Website und deinen akademischen Blog.',
- link: '/zh-cn/stage-3/'
+ link: '/de-de/stage-3/'
}
]
},
@@ -1207,22 +1325,22 @@ export const i18n = {
{
title: 'AI Fundamentals',
desc: 'LLM, Agent, RAG. Dive into AI internals.',
- link: '/zh-cn/appendix/8-artificial-intelligence/ai-history'
+ link: '/de-de/appendix/8-artificial-intelligence/ai-history'
},
{
title: 'Frontend',
desc: 'Browser internals, Performance, Canvas.',
- link: '/zh-cn/appendix/3-browser-and-frontend/javascript-deep-dive'
+ link: '/de-de/appendix/3-browser-and-frontend/javascript-deep-dive'
},
{
title: 'Backend',
desc: 'High concurrency, Distributed systems, Microservices.',
- link: '/zh-cn/appendix/4-server-and-backend/backend-layered-architecture'
+ link: '/de-de/appendix/4-server-and-backend/backend-layered-architecture'
},
{
title: 'General Skills',
desc: 'Git, Networks, IDE internals.',
- link: '/zh-cn/appendix/2-development-tools/git-version-control'
+ link: '/de-de/appendix/2-development-tools/git-version-control'
}
]
},
@@ -1247,10 +1365,25 @@ export const i18n = {
cat: 'قصص المستخدمين',
title: 'تعرّف على كل
قصة ملهمة.',
sub: 'اكتشف كيف يستخدم أشخاص من خلفيات مختلفة الذكاء الاصطناعي لحل مشكلات حقيقية.',
- s1: { title: 'تخلّى عن راتب مرتفع ليساعد أطفال مدرسة ريفية على "طرد الذباب" باستخدام الذكاء الاصطناعي', author: 'شياوهاو، معلم مدرسة ابتدائية' },
- s2: { title: 'خلال أسبوع الامتحانات النهائية، بنيت سرًا سوقًا جامعيًا باستخدام الذكاء الاصطناعي', author: 'طالبة في السنة الثانية' },
- s3: { title: 'صنعت لكل طالب زميل دراسة بالذكاء الاصطناعي لا يتعب أبدًا', author: 'معلم تقنية معلومات في الثانوية' },
- s4: { title: 'سائق شاحنة يبلغ 48 عامًا سهر عدة ليالٍ ليبني موقع أدوات ذكاء اصطناعي للأسواق الخارجية', author: 'لاو هوانغ، سائق شاحنة' },
+ s1: {
+ title:
+ 'تخلّى عن راتب مرتفع ليساعد أطفال مدرسة ريفية على "طرد الذباب" باستخدام الذكاء الاصطناعي',
+ author: 'شياوهاو، معلم مدرسة ابتدائية'
+ },
+ s2: {
+ title:
+ 'خلال أسبوع الامتحانات النهائية، بنيت سرًا سوقًا جامعيًا باستخدام الذكاء الاصطناعي',
+ author: 'طالبة في السنة الثانية'
+ },
+ s3: {
+ title: 'صنعت لكل طالب زميل دراسة بالذكاء الاصطناعي لا يتعب أبدًا',
+ author: 'معلم تقنية معلومات في الثانوية'
+ },
+ s4: {
+ title:
+ 'سائق شاحنة يبلغ 48 عامًا سهر عدة ليالٍ ليبني موقع أدوات ذكاء اصطناعي للأسواق الخارجية',
+ author: 'لاو هوانغ، سائق شاحنة'
+ },
authorPrefix: 'الراوي:',
ui: {
prevLabel: 'القصة السابقة',
@@ -1269,19 +1402,19 @@ export const i18n = {
title: 'مدير منتج AI',
desc: 'من الفكرة إلى النموذج الأولي، بمجرد التحدث.',
sub: 'صديق لغير التقنيين',
- link: '/zh-cn/stage-1/learning-map/'
+ link: '/ar-sa/stage-1/learning-map/'
},
{
title: 'مقدمة بالألعاب',
desc: 'ابنِ Snake و Tetris واكسر حاجز الخوف من الكود.',
sub: 'تعلم باللعب',
- link: '/zh-cn/stage-1/learning-map/'
+ link: '/ar-sa/stage-1/learning-map/'
},
{
title: 'Vibe Coding',
desc: 'أتقن جوهر برمجة الذكاء الاصطناعي: هندسة الأوامر والسياق.',
sub: 'العقلية الأساسية',
- link: '/zh-cn/stage-1/learning-map/'
+ link: '/ar-sa/stage-1/learning-map/'
}
]
},
@@ -1295,19 +1428,19 @@ export const i18n = {
title: 'Full Stack',
headline: 'واجهة أمامية وخلفية.',
desc: 'من تصميم DB إلى API والمكونات، ابنِ تطبيق ويب حديث بالكامل.',
- link: '/zh-cn/stage-2/'
+ link: '/ar-sa/stage-2/'
},
{
title: 'مشاريع حقيقية',
headline: 'ليس كود ألعاب.',
desc: 'تعمق في المصادقة، التخزين، رفع الملفات ومنطق العمل الأساسي.',
- link: '/zh-cn/stage-2/'
+ link: '/ar-sa/stage-2/'
},
{
title: 'النشر',
headline: 'أظهر للعالم.',
desc: 'إعداد الخادم، DNS، CI/CD. الميل الأخير لتسليم المنتج.',
- link: '/zh-cn/stage-2/'
+ link: '/ar-sa/stage-2/'
}
]
},
@@ -1320,22 +1453,22 @@ export const i18n = {
{
title: 'برنامج WeChat المصغر',
desc: 'تطوير متعدد المنصات، الوصول لملايين المستخدمين.',
- link: '/zh-cn/stage-3/'
+ link: '/ar-sa/stage-3/'
},
{
title: 'تطبيقات AI الأصلية',
desc: 'RAG، Agent. استكشف حدود LLMs.',
- link: '/zh-cn/stage-3/'
+ link: '/ar-sa/stage-3/'
},
{
title: 'هندسة معقدة',
desc: 'تصميم هندسة التزامن العالي والتوافر العالي.',
- link: '/zh-cn/stage-3/'
+ link: '/ar-sa/stage-3/'
},
{
title: 'العلامة التجارية الشخصية',
desc: 'ابنِ موقعك الخاص ومدونتك الأكاديمية.',
- link: '/zh-cn/stage-3/'
+ link: '/ar-sa/stage-3/'
}
]
},
@@ -1348,22 +1481,22 @@ export const i18n = {
{
title: 'AI Fundamentals',
desc: 'LLM, Agent, RAG. Dive into AI internals.',
- link: '/zh-cn/appendix/8-artificial-intelligence/ai-history'
+ link: '/ar-sa/appendix/8-artificial-intelligence/ai-history'
},
{
title: 'Frontend',
desc: 'Browser internals, Performance, Canvas.',
- link: '/zh-cn/appendix/3-browser-and-frontend/javascript-deep-dive'
+ link: '/ar-sa/appendix/3-browser-and-frontend/javascript-deep-dive'
},
{
title: 'Backend',
desc: 'High concurrency, Distributed systems, Microservices.',
- link: '/zh-cn/appendix/4-server-and-backend/backend-layered-architecture'
+ link: '/ar-sa/appendix/4-server-and-backend/backend-layered-architecture'
},
{
title: 'General Skills',
desc: 'Git, Networks, IDE internals.',
- link: '/zh-cn/appendix/2-development-tools/git-version-control'
+ link: '/ar-sa/appendix/2-development-tools/git-version-control'
}
]
},
@@ -1386,12 +1519,28 @@ export const i18n = {
},
stories: {
cat: 'Câu chuyện người dùng',
- title: 'Gặp gỡ từng
câu chuyện tỏa sáng.',
+ title:
+ 'Gặp gỡ từng
câu chuyện tỏa sáng.',
sub: 'Khám phá cách những người từ nhiều xuất phát điểm khác nhau dùng AI để giải quyết vấn đề thật.',
- s1: { title: 'Anh bỏ mức lương cao để giúp trẻ em vùng quê "đuổi ruồi" bằng AI', author: 'Xiaohao, giáo viên tiểu học' },
- s2: { title: 'Trong tuần thi cuối kỳ, tôi lặng lẽ làm một chợ đồ cũ trong trường bằng AI', author: 'Một sinh viên năm hai' },
- s3: { title: 'Tôi tạo cho mỗi học sinh một bạn học giỏi AI không biết mệt', author: 'Một giáo viên CNTT trung học' },
- s4: { title: 'Một tài xế xe tải 48 tuổi thức trắng nhiều đêm để làm một website công cụ AI cho thị trường quốc tế', author: 'Lao Huang, tài xế xe tải' },
+ s1: {
+ title:
+ 'Anh bỏ mức lương cao để giúp trẻ em vùng quê "đuổi ruồi" bằng AI',
+ author: 'Xiaohao, giáo viên tiểu học'
+ },
+ s2: {
+ title:
+ 'Trong tuần thi cuối kỳ, tôi lặng lẽ làm một chợ đồ cũ trong trường bằng AI',
+ author: 'Một sinh viên năm hai'
+ },
+ s3: {
+ title: 'Tôi tạo cho mỗi học sinh một bạn học giỏi AI không biết mệt',
+ author: 'Một giáo viên CNTT trung học'
+ },
+ s4: {
+ title:
+ 'Một tài xế xe tải 48 tuổi thức trắng nhiều đêm để làm một website công cụ AI cho thị trường quốc tế',
+ author: 'Lao Huang, tài xế xe tải'
+ },
authorPrefix: 'Người kể:',
ui: {
prevLabel: 'Câu chuyện trước',
@@ -1410,19 +1559,19 @@ export const i18n = {
title: 'AI PM',
desc: 'Từ ý tưởng đến nguyên mẫu, chỉ bằng lời nói.',
sub: 'Thân thiện với non-tech',
- link: '/zh-cn/stage-1/learning-map/'
+ link: '/vi-vn/stage-1/learning-map/'
},
{
title: 'Nhập môn qua Game',
desc: 'Xây dựng Snake, Tetris và phá bỏ nỗi sợ code.',
sub: 'Học mà chơi',
- link: '/zh-cn/stage-1/learning-map/'
+ link: '/vi-vn/stage-1/learning-map/'
},
{
title: 'Vibe Coding',
desc: 'Nắm vững cốt lõi lập trình AI: Prompt Engineering & Context.',
sub: 'Tư duy cốt lõi',
- link: '/zh-cn/stage-1/learning-map/'
+ link: '/vi-vn/stage-1/learning-map/'
}
]
},
@@ -1436,19 +1585,19 @@ export const i18n = {
title: 'Full Stack',
headline: 'Frontend & Backend.',
desc: 'Từ thiết kế DB đến API và component, xây dựng trọn vẹn web app hiện đại.',
- link: '/zh-cn/stage-2/'
+ link: '/vi-vn/stage-2/'
},
{
title: 'Dự án thực tế',
headline: 'Không phải code đồ chơi.',
desc: 'Đi sâu vào Auth, Lưu trữ, Upload file và logic nghiệp vụ cốt lõi.',
- link: '/zh-cn/stage-2/'
+ link: '/vi-vn/stage-2/'
},
{
title: 'Triển khai',
headline: 'Show cho thế giới.',
desc: 'Cấu hình server, DNS, CI/CD. Chặng cuối của việc giao sản phẩm.',
- link: '/zh-cn/stage-2/'
+ link: '/vi-vn/stage-2/'
}
]
},
@@ -1461,22 +1610,22 @@ export const i18n = {
{
title: 'WeChat Mini-app',
desc: 'Phát triển đa nền tảng, tiếp cận hàng triệu người dùng.',
- link: '/zh-cn/stage-3/'
+ link: '/vi-vn/stage-3/'
},
{
title: 'App AI Native',
desc: 'RAG, Agent. Khám phá giới hạn của LLM.',
- link: '/zh-cn/stage-3/'
+ link: '/vi-vn/stage-3/'
},
{
title: 'Kiến trúc phức tạp',
desc: 'Thiết kế kiến trúc chịu tải cao và sẵn sàng cao.',
- link: '/zh-cn/stage-3/'
+ link: '/vi-vn/stage-3/'
},
{
title: 'Thương hiệu cá nhân',
desc: 'Xây dựng website và blog học thuật của riêng bạn.',
- link: '/zh-cn/stage-3/'
+ link: '/vi-vn/stage-3/'
}
]
},
@@ -1489,22 +1638,22 @@ export const i18n = {
{
title: 'AI Fundamentals',
desc: 'LLM, Agent, RAG. Dive into AI internals.',
- link: '/zh-cn/appendix/8-artificial-intelligence/ai-history'
+ link: '/vi-vn/appendix/8-artificial-intelligence/ai-history'
},
{
title: 'Frontend',
desc: 'Browser internals, Performance, Canvas.',
- link: '/zh-cn/appendix/3-browser-and-frontend/javascript-deep-dive'
+ link: '/vi-vn/appendix/3-browser-and-frontend/javascript-deep-dive'
},
{
title: 'Backend',
desc: 'High concurrency, Distributed systems, Microservices.',
- link: '/zh-cn/appendix/4-server-and-backend/backend-layered-architecture'
+ link: '/vi-vn/appendix/4-server-and-backend/backend-layered-architecture'
},
{
title: 'General Skills',
desc: 'Git, Networks, IDE internals.',
- link: '/zh-cn/appendix/2-development-tools/git-version-control'
+ link: '/vi-vn/appendix/2-development-tools/git-version-control'
}
]
},
diff --git a/docs/.vitepress/theme/components/home/HomeSection.css b/docs/.vitepress/theme/components/home/HomeSection.css
index bf85fb3..14922e9 100644
--- a/docs/.vitepress/theme/components/home/HomeSection.css
+++ b/docs/.vitepress/theme/components/home/HomeSection.css
@@ -41,8 +41,7 @@
color: #6e6e73;
max-width: 760px;
font-family:
- -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'PingFang SC',
- sans-serif;
+ -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'PingFang SC', sans-serif;
}
.dark .section-category,
@@ -65,13 +64,12 @@ a {
-webkit-tap-highlight-color: transparent;
}
-:is(
- .feature-card,
- .comm-card,
- .prod-card,
- .appendix-card,
- .buy-btn
- ):is(:hover, :focus, :focus-visible, :active) {
+:is(.feature-card, .comm-card, .prod-card, .appendix-card, .buy-btn):is(
+ :hover,
+ :focus,
+ :focus-visible,
+ :active
+) {
border-bottom-color: transparent !important;
text-decoration: none !important;
outline: none !important;
diff --git a/docs/.vitepress/theme/utils/readingBookmark.js b/docs/.vitepress/theme/utils/readingBookmark.js
index e47a503..6453fa0 100644
--- a/docs/.vitepress/theme/utils/readingBookmark.js
+++ b/docs/.vitepress/theme/utils/readingBookmark.js
@@ -27,7 +27,6 @@ export const createReadingBookmark = ({
updatedAt: now()
})
-
export const createReadingBookmarkSnapshot = ({
path,
getTitle = () => '',
diff --git a/docs/.vitepress/theme/utils/readingBookmark.test.js b/docs/.vitepress/theme/utils/readingBookmark.test.js
index 1e0e15e..9610977 100644
--- a/docs/.vitepress/theme/utils/readingBookmark.test.js
+++ b/docs/.vitepress/theme/utils/readingBookmark.test.js
@@ -74,13 +74,11 @@ describe('reading bookmarks', () => {
}
)
assert.equal(
- readReadingBookmark(storage, '/easy-vibe/en/stage-1/intro/', 1000)
- .title,
+ readReadingBookmark(storage, '/easy-vibe/en/stage-1/intro/', 1000).title,
'English title'
)
})
-
it('keeps delayed saves bound to the path captured before navigation', () => {
const storage = createStorage()
let currentPath = '/easy-vibe/zh-cn/page-a/'
@@ -100,22 +98,16 @@ describe('reading bookmarks', () => {
})
)
- assert.equal(
- readReadingBookmark(storage, currentPath, 1000),
- null
- )
- assert.deepEqual(
- readReadingBookmark(storage, scheduledPath, 1000),
- {
- version: 1,
- path: scheduledPath,
- title: '页面 A',
- section: '小节 A',
- scrollY: 240,
- progress: 32,
- updatedAt: 777
- }
- )
+ assert.equal(readReadingBookmark(storage, currentPath, 1000), null)
+ assert.deepEqual(readReadingBookmark(storage, scheduledPath, 1000), {
+ version: 1,
+ path: scheduledPath,
+ title: '页面 A',
+ section: '小节 A',
+ scrollY: 240,
+ progress: 32,
+ updatedAt: 777
+ })
})
it('normalizes invalid numeric values', () => {
diff --git a/docs/public/sitemap.xml b/docs/public/sitemap.xml
index 5b96cd5..26fe7e6 100644
--- a/docs/public/sitemap.xml
+++ b/docs/public/sitemap.xml
@@ -3,7 +3,7 @@
xmlns:xhtml="http://www.w3.org/1999/xhtml">
https://datawhalechina.github.io/easy-vibe/zh-cn/
- 2026-05-14T12:39:03+08:00
+ 2026-05-20T23:20:16+08:00
weekly
1.0