fix(docs): localize related article cards

This commit is contained in:
sanbuphy
2026-05-20 11:39:31 +08:00
parent d962359412
commit 93256540f5
2 changed files with 785 additions and 1 deletions
+23
View File
@@ -1659,6 +1659,19 @@ const getStage1Sidebar = (locale) => {
)
}
const docFooterLabels = {
'zh-cn': { prev: '上一页', next: '下一页' },
en: { prev: 'Previous page', next: 'Next page' },
'ja-jp': { prev: '前のページ', next: '次のページ' },
'zh-tw': { prev: '上一頁', next: '下一頁' },
'ko-kr': { prev: '이전 페이지', next: '다음 페이지' },
'es-es': { prev: 'Página anterior', next: 'Página siguiente' },
'fr-fr': { prev: 'Page précédente', next: 'Page suivante' },
'de-de': { prev: 'Vorherige Seite', next: 'Nächste Seite' },
'ar-sa': { prev: 'الصفحة السابقة', next: 'الصفحة التالية' },
'vi-vn': { prev: 'Trang trước', next: 'Trang tiếp theo' }
}
export default defineConfig({
markdown: {
config: (md) => {
@@ -1813,6 +1826,7 @@ Sitemap: ${siteUrl}/sitemap.xml
level: [1, 6],
label: '页面导航'
},
docFooter: docFooterLabels['zh-cn'],
nav: [
{ text: '首页', link: '/zh-cn/' },
{
@@ -2666,6 +2680,7 @@ Sitemap: ${siteUrl}/sitemap.xml
level: [1, 6],
label: 'On this page'
},
docFooter: docFooterLabels.en,
nav: [
{ text: 'Home', link: '/en/' },
{
@@ -2752,6 +2767,7 @@ Sitemap: ${siteUrl}/sitemap.xml
level: [1, 6],
label: 'このページの目次'
},
docFooter: docFooterLabels['ja-jp'],
nav: [
{ text: 'ホーム', link: '/ja-jp/' },
{
@@ -2804,6 +2820,7 @@ Sitemap: ${siteUrl}/sitemap.xml
level: [1, 6],
label: '頁面導航'
},
docFooter: docFooterLabels['zh-tw'],
nav: [
{ text: '首頁', link: '/zh-tw/' },
{
@@ -2856,6 +2873,7 @@ Sitemap: ${siteUrl}/sitemap.xml
level: [1, 6],
label: '페이지 탐색'
},
docFooter: docFooterLabels['ko-kr'],
nav: [
{ text: '홈', link: '/ko-kr/' },
{
@@ -2908,6 +2926,7 @@ Sitemap: ${siteUrl}/sitemap.xml
level: [1, 6],
label: 'Navegación de página'
},
docFooter: docFooterLabels['es-es'],
nav: [
{ text: 'Inicio', link: '/es-es/' },
{
@@ -2960,6 +2979,7 @@ Sitemap: ${siteUrl}/sitemap.xml
level: [1, 6],
label: 'Navigation de page'
},
docFooter: docFooterLabels['fr-fr'],
nav: [
{ text: 'Accueil', link: '/fr-fr/' },
{
@@ -3012,6 +3032,7 @@ Sitemap: ${siteUrl}/sitemap.xml
level: [1, 6],
label: 'Seitennavigation'
},
docFooter: docFooterLabels['de-de'],
nav: [
{ text: 'Start', link: '/de-de/' },
{
@@ -3064,6 +3085,7 @@ Sitemap: ${siteUrl}/sitemap.xml
level: [1, 6],
label: 'تنقل الصفحة'
},
docFooter: docFooterLabels['ar-sa'],
nav: [
{ text: 'الرئيسية', link: '/ar-sa/' },
{
@@ -3117,6 +3139,7 @@ Sitemap: ${siteUrl}/sitemap.xml
level: [1, 6],
label: 'Điều hướng trang'
},
docFooter: docFooterLabels['vi-vn'],
nav: [
{ text: 'Trang chủ', link: '/vi-vn/' },
{
+762 -1
View File
@@ -195,9 +195,770 @@ const supportedLocales = [
const getLocaleFromKey = (key) =>
supportedLocales.find((locale) => key.startsWith(`${locale}/`))
const getArticleSlug = (href) =>
href
.replace(/^\/zh-cn\//, '')
.replace(/\/$/, '')
.split('/')
.at(-1)
const localizedArticleText = {
en: {
'ai-capabilities-through-games': {
title: '0.2 Understand AI Capabilities Through Mini Games',
description:
'Build intuition through a playful exercise and see what problems are suitable for AI.'
},
'finding-great-idea': {
title: '1.0 Find Ideas Worth Building',
description:
'Turn "I have an idea" into a product direction you can validate.'
},
'building-prototype': {
title: '1.2 Turn Ideas into Interactive Prototypes',
description:
'Go from requirement breakdown to a working first demo quickly.'
},
'lovart-assets': {
title: '2.0 Build an Asset Agent from NanoBanana',
description:
'Move into practice and build a stable, reusable asset production workflow.'
},
'introduction-to-ai-ide': {
title: 'Beginner 2: Master AI Coding Tools',
description:
'Move from web experiments to a local AI IDE and set up a real development environment.'
},
'learning-map': {
title: 'Back to the Learning Map',
description:
'Review the full path, stage goals, and recommended learning order.'
},
'integrating-ai-capabilities': {
title: 'Beginner 4: Add AI Capabilities',
description:
'Connect real APIs and turn a visual prototype into a usable product.'
},
'appendix-b-common-errors': {
title: 'Appendix: Common Errors and Fixes',
description:
'Quickly diagnose and fix environment, dependency, and runtime issues.'
},
'complete-project-practice': {
title: 'Beginner 5: Complete Project Practice',
description:
'Connect the pieces into a complete business flow and build a presentable product.'
},
'figma-mastergo': {
title: 'Advanced: Figma and MasterGo Basics',
description:
'Strengthen the design-to-development workflow for more structured delivery.'
},
'ai-interface-code': {
title: 'Junior Backend: API Design and Development',
description:
'Connect AI capabilities through maintainable backend interfaces.'
},
'fullstack-app': {
title: 'Stage 2 Assignment: Full-Stack App',
description:
'Upgrade prototype skills into a deployable full-stack application.'
},
'database-supabase': {
title: 'Junior Backend: Database to Supabase',
description: 'Add data modeling, storage, and permission capabilities.'
},
'ui-design': {
title: '2.2 Build a Modern App: UI Design',
description:
'Complete page hierarchy, components, and layout under a unified visual system.'
},
'design-to-code': {
title: '2.6 From Design Prototype to Code',
description:
'Convert design files into maintainable frontend code and components.'
},
'modern-component-library': {
title: '2.7 Upgrade UI with Modern Component Libraries',
description:
'Use component libraries to improve consistency and development speed.'
}
},
'zh-tw': {
'ai-capabilities-through-games': {
title: '0.2 用「小遊戲」理解 AI 能力邊界',
description: '先用遊戲化方式建立手感,快速理解哪些問題適合交給 AI。'
},
'finding-great-idea': {
title: '1.0 找到值得做的點子',
description: '把「我有想法」變成「我有可驗證的產品方向」。'
},
'building-prototype': {
title: '1.2 把想法做成可互動原型',
description: '從需求拆解到頁面落地,快速完成第一版 Demo。'
},
'lovart-assets': {
title: '2.0 從 NanoBanana 出發做素材 Agent',
description: '進入實戰階段,學習構建穩定可複用的素材生產流程。'
},
'introduction-to-ai-ide': {
title: '初級二:學會 AI 程式設計工具',
description: '把網頁試玩升級到本地 AI IDE,建立完整開發環境。'
},
'learning-map': {
title: '返回學習地圖',
description: '按完整路線查看每個階段目標與推薦學習順序。'
},
'integrating-ai-capabilities': {
title: '初級四:給原型加上 AI 能力',
description: '接入真實 API,讓頁面從「可看」變成「可用」。'
},
'appendix-b-common-errors': {
title: '附錄:常見報錯與解決方案',
description: '遇到環境、依賴或執行異常時,快速定位並修復。'
},
'complete-project-practice': {
title: '初級五:完整專案實戰',
description: '把分散能力拼成完整業務鏈路,做出可展示的成品。'
},
'figma-mastergo': {
title: '進階:Figma 與 MasterGo 入門',
description: '繼續強化設計到開發的協作流程,為工程化打基礎。'
}
},
'ja-jp': {
'ai-capabilities-through-games': {
title: '0.2 ミニゲームで AI の能力境界を理解する',
description:
'ゲーム感覚で手触りをつかみ、AI に任せやすい問題を素早く理解します。'
},
'finding-great-idea': {
title: '1.0 作る価値のあるアイデアを見つける',
description:
'「アイデアがある」を「検証できるプロダクト方向」に変えます。'
},
'building-prototype': {
title: '1.2 アイデアを操作できるプロトタイプにする',
description:
'要件分解から画面実装まで進め、最初の Demo を素早く完成させます。'
},
'lovart-assets': {
title: '2.0 NanoBanana から素材 Agent を作る',
description:
'実践段階に進み、安定して再利用できる素材制作フローを学びます。'
},
'introduction-to-ai-ide': {
title: '初級二:AI プログラミングツールを学ぶ',
description:
'Web 上の試作からローカル AI IDE へ進み、開発環境を整えます。'
},
'learning-map': {
title: '学習ロードマップに戻る',
description: '全体ルート、各段階の目標、推奨学習順を確認します。'
},
'integrating-ai-capabilities': {
title: '初級四:プロトタイプに AI 能力を追加する',
description:
'実際の API を接続し、画面を「見える」から「使える」へ進化させます。'
},
'appendix-b-common-errors': {
title: '付録:よくあるエラーと解決策',
description: '環境、依存関係、実行時の問題を素早く特定して修正します。'
},
'complete-project-practice': {
title: '初級五:完全プロジェクト実践',
description:
'分散した能力を一つの業務フローにまとめ、見せられる成果物にします。'
},
'figma-mastergo': {
title: '発展:Figma と MasterGo 入門',
description:
'設計から開発までの協作フローを強化し、工程化の基礎を固めます。'
}
},
'ko-kr': {
'ai-capabilities-through-games': {
title: '0.2 미니게임으로 AI 역량의 경계 이해하기',
description:
'게임형 실습으로 감각을 익히고 어떤 문제를 AI에 맡기기 좋은지 이해합니다.'
},
'finding-great-idea': {
title: '1.0 만들 가치가 있는 아이디어 찾기',
description: '"아이디어가 있다"를 검증 가능한 제품 방향으로 바꿉니다.'
},
'building-prototype': {
title: '1.2 아이디어를 인터랙티브 프로토타입으로 만들기',
description:
'요구사항 분해부터 화면 구현까지 빠르게 첫 Demo를 완성합니다.'
},
'lovart-assets': {
title: '2.0 NanoBanana에서 소재 Agent 만들기',
description:
'실전 단계로 들어가 안정적으로 재사용 가능한 소재 생산 흐름을 배웁니다.'
},
'introduction-to-ai-ide': {
title: '초급 2: AI 코딩 도구 익히기',
description: '웹 실습에서 로컬 AI IDE로 넘어가 개발 환경을 갖춥니다.'
},
'learning-map': {
title: '학습 지도 돌아가기',
description: '전체 경로, 단계별 목표, 추천 학습 순서를 확인합니다.'
},
'integrating-ai-capabilities': {
title: '초급 4: 프로토타입에 AI 기능 추가하기',
description:
'실제 API를 연결해 화면을 볼 수 있는 것에서 쓸 수 있는 것으로 바꿉니다.'
},
'appendix-b-common-errors': {
title: '부록: 자주 만나는 오류와 해결책',
description: '환경, 의존성, 실행 오류를 빠르게 찾고 고칩니다.'
},
'complete-project-practice': {
title: '초급 5: 완성 프로젝트 실습',
description:
'분산된 기능을 완전한 업무 흐름으로 묶어 보여줄 수 있는 결과물을 만듭니다.'
},
'figma-mastergo': {
title: '심화: Figma와 MasterGo 입문',
description: '디자인에서 개발까지의 협업 흐름을 강화합니다.'
}
},
'es-es': {
'ai-capabilities-through-games': {
title: '0.2 Entender las capacidades de IA con minijuegos',
description:
'Desarrolla intuición con un ejercicio lúdico y entiende qué problemas encajan con IA.'
},
'finding-great-idea': {
title: '1.0 Encontrar ideas que vale la pena construir',
description:
'Convierte "tengo una idea" en una dirección de producto verificable.'
},
'building-prototype': {
title: '1.2 Convertir ideas en prototipos interactivos',
description:
'Pasa del desglose de requisitos a una primera demo funcional.'
},
'lovart-assets': {
title: '2.0 Crear un Agent de recursos desde NanoBanana',
description:
'Entra en la práctica y construye un flujo estable de producción de recursos reutilizables.'
},
'introduction-to-ai-ide': {
title: 'Nivel inicial 2: dominar herramientas de programación con IA',
description:
'Pasa de probar en la web a trabajar con un AI IDE local y un entorno completo.'
},
'learning-map': {
title: 'Volver a la ruta de aprendizaje',
description:
'Revisa la ruta completa, los objetivos por etapa y el orden recomendado.'
},
'integrating-ai-capabilities': {
title: 'Nivel inicial 4: añadir capacidades de IA',
description:
'Conecta APIs reales y convierte una pantalla visible en una herramienta usable.'
},
'appendix-b-common-errors': {
title: 'Apéndice: errores comunes y soluciones',
description:
'Diagnostica y corrige problemas de entorno, dependencias y ejecución.'
},
'complete-project-practice': {
title: 'Nivel inicial 5: práctica de proyecto completo',
description:
'Une capacidades dispersas en un flujo de negocio completo y presentable.'
},
'figma-mastergo': {
title: 'Avanzado: introducción a Figma y MasterGo',
description: 'Refuerza el flujo de colaboración de diseño a desarrollo.'
}
},
'fr-fr': {
'ai-capabilities-through-games': {
title: "0.2 Comprendre les limites de l'IA avec des mini-jeux",
description:
"Développez l'intuition avec un exercice ludique et voyez quels problèmes conviennent à l'IA."
},
'finding-great-idea': {
title: '1.0 Trouver une idée qui vaut la peine',
description:
'Transformez "jai une idée" en direction produit vérifiable.'
},
'building-prototype': {
title: '1.2 Transformer une idée en prototype interactif',
description:
'Passez du découpage des besoins à une première démo fonctionnelle.'
},
'lovart-assets': {
title: '2.0 Créer un Agent de ressources avec NanoBanana',
description:
'Entrez dans la pratique et construisez un flux stable de production de ressources réutilisables.'
},
'introduction-to-ai-ide': {
title: 'Débutant 2 : maîtriser les outils de programmation IA',
description:
'Passez des essais web à un AI IDE local avec un vrai environnement de développement.'
},
'learning-map': {
title: "Retour au parcours d'apprentissage",
description:
'Revoyez le parcours complet, les objectifs par étape et lordre recommandé.'
},
'integrating-ai-capabilities': {
title: 'Débutant 4 : ajouter des capacités IA',
description:
'Connectez de vraies API et transformez un prototype visible en produit utilisable.'
},
'appendix-b-common-errors': {
title: 'Annexe : erreurs courantes et solutions',
description:
'Diagnostiquez et corrigez rapidement les problèmes denvironnement, de dépendances et dexécution.'
},
'complete-project-practice': {
title: 'Débutant 5 : projet complet',
description:
'Assemblez les capacités en un flux métier complet et présentable.'
},
'figma-mastergo': {
title: 'Avancé : bases de Figma et MasterGo',
description:
'Renforcez le flux de collaboration entre design et développement.'
}
},
'de-de': {
'ai-capabilities-through-games': {
title: '0.2 KI-Fähigkeiten mit Mini-Games verstehen',
description:
'Entwickeln Sie spielerisch ein Gefühl dafür, welche Probleme gut zu KI passen.'
},
'finding-great-idea': {
title: '1.0 Ideen finden, die sich lohnen',
description:
'Machen Sie aus "ich habe eine Idee" eine überprüfbare Produktrichtung.'
},
'building-prototype': {
title: '1.2 Ideen in interaktive Prototypen verwandeln',
description: 'Vom Anforderungszuschnitt zur ersten lauffähigen Demo.'
},
'lovart-assets': {
title: '2.0 Einen Asset-Agent mit NanoBanana bauen',
description:
'Gehen Sie in die Praxis und bauen Sie einen stabilen, wiederverwendbaren Produktionsfluss.'
},
'introduction-to-ai-ide': {
title: 'Anfänger 2: KI-Programmierwerkzeuge beherrschen',
description: 'Wechseln Sie von Web-Experimenten zu einer lokalen AI IDE.'
},
'learning-map': {
title: 'Zurück zum Lernpfad',
description:
'Prüfen Sie den Gesamtpfad, die Etappenziele und die empfohlene Reihenfolge.'
},
'integrating-ai-capabilities': {
title: 'Anfänger 4: KI-Fähigkeiten hinzufügen',
description:
'Binden Sie echte APIs an und machen Sie aus einem sichtbaren Prototyp ein nutzbares Produkt.'
},
'appendix-b-common-errors': {
title: 'Anhang: häufige Fehler und Lösungen',
description:
'Finden und beheben Sie Umgebungs-, Abhängigkeits- und Laufzeitprobleme schnell.'
},
'complete-project-practice': {
title: 'Anfänger 5: vollständiges Projektpraktikum',
description:
'Verbinden Sie einzelne Fähigkeiten zu einem vollständigen, vorzeigbaren Ablauf.'
},
'figma-mastergo': {
title: 'Fortgeschritten: Figma und MasterGo Grundlagen',
description: 'Stärken Sie den Workflow von Design zu Entwicklung.'
}
},
'ar-sa': {
'ai-capabilities-through-games': {
title: '0.2 فهم حدود قدرات الذكاء الاصطناعي عبر ألعاب صغيرة',
description:
'اكتسب إحساساً عملياً بطريقة ممتعة وافهم ما يناسب الذكاء الاصطناعي.'
},
'finding-great-idea': {
title: '1.0 العثور على فكرة تستحق البناء',
description: 'حوّل "لدي فكرة" إلى اتجاه منتج قابل للتحقق.'
},
'building-prototype': {
title: '1.2 تحويل الفكرة إلى نموذج أولي تفاعلي',
description: 'من تحليل المتطلبات إلى أول عرض عملي بسرعة.'
},
'lovart-assets': {
title: '2.0 بناء Agent للمواد انطلاقاً من NanoBanana',
description:
'ادخل مرحلة التطبيق وابنِ سير عمل مستقراً وقابلاً لإعادة الاستخدام.'
},
'introduction-to-ai-ide': {
title: 'المستوى الثاني: إتقان أدوات البرمجة بالذكاء الاصطناعي',
description: 'انتقل من التجربة على الويب إلى بيئة AI IDE محلية كاملة.'
},
'learning-map': {
title: 'العودة إلى خريطة التعلم',
description: 'راجع المسار الكامل وأهداف كل مرحلة وترتيب التعلم المقترح.'
},
'integrating-ai-capabilities': {
title: 'المستوى الرابع: إضافة قدرات الذكاء الاصطناعي',
description:
'اربط واجهات API حقيقية وحوّل النموذج من قابل للمشاهدة إلى قابل للاستخدام.'
},
'appendix-b-common-errors': {
title: 'ملحق: الأخطاء الشائعة والحلول',
description: 'شخّص مشكلات البيئة والاعتماديات والتشغيل وأصلحها بسرعة.'
},
'complete-project-practice': {
title: 'المستوى الخامس: مشروع عملي كامل',
description: 'اجمع القدرات المتفرقة في مسار عمل كامل قابل للعرض.'
},
'figma-mastergo': {
title: 'متقدم: أساسيات Figma و MasterGo',
description: 'عزّز سير العمل من التصميم إلى التطوير.'
}
},
'vi-vn': {
'ai-capabilities-through-games': {
title: '0.2 Hiểu ranh giới năng lực AI qua trò chơi nhỏ',
description:
'Tạo cảm giác thực hành qua trò chơi và hiểu nhanh vấn đề nào phù hợp để giao cho AI.'
},
'finding-great-idea': {
title: '1.0 Tìm ý tưởng đáng làm',
description:
'Biến "tôi có ý tưởng" thành một hướng sản phẩm có thể kiểm chứng.'
},
'building-prototype': {
title: '1.2 Biến ý tưởng thành nguyên mẫu tương tác',
description:
'Từ tách yêu cầu đến dựng trang, hoàn thành nhanh bản Demo đầu tiên.'
},
'lovart-assets': {
title: '2.0 Tạo Agent sản xuất tài nguyên từ NanoBanana',
description:
'Bước vào thực chiến và học cách xây dựng quy trình sản xuất tài nguyên ổn định, tái sử dụng được.'
},
'introduction-to-ai-ide': {
title: 'Sơ cấp 2: học công cụ lập trình AI',
description:
'Từ thử nghiệm trên web chuyển sang AI IDE cục bộ và thiết lập môi trường phát triển đầy đủ.'
},
'learning-map': {
title: 'Quay lại lộ trình học tập',
description:
'Xem lại toàn bộ lộ trình, mục tiêu từng giai đoạn và thứ tự học đề xuất.'
},
'integrating-ai-capabilities': {
title: 'Sơ cấp 4: thêm năng lực AI vào nguyên mẫu',
description:
'Kết nối API thật để biến giao diện từ "xem được" thành "dùng được".'
},
'appendix-b-common-errors': {
title: 'Phụ lục: lỗi thường gặp và cách xử lý',
description:
'Nhanh chóng xác định và sửa lỗi môi trường, phụ thuộc hoặc khi chạy.'
},
'complete-project-practice': {
title: 'Sơ cấp 5: thực chiến dự án hoàn chỉnh',
description:
'Ghép các năng lực rời rạc thành một luồng nghiệp vụ hoàn chỉnh có thể trình bày.'
},
'figma-mastergo': {
title: 'Nâng cao: nhập môn Figma và MasterGo',
description:
'Tiếp tục củng cố quy trình cộng tác từ thiết kế đến phát triển.'
}
}
}
const localizedStage2ArticleText = {
en: {
'ai-interface-code': {
title: 'Junior Backend: API Design and Development',
description:
'Connect AI capabilities through maintainable backend interfaces.'
},
'fullstack-app': {
title: 'Stage 2 Assignment: Full-Stack App',
description:
'Upgrade prototype skills into a deployable full-stack application.'
},
'database-supabase': {
title: 'Junior Backend: Database to Supabase',
description: 'Add data modeling, storage, and permission capabilities.'
},
'ui-design': {
title: '2.2 Build a Modern App: UI Design',
description:
'Complete page hierarchy, components, and layout under a unified visual system.'
},
'design-to-code': {
title: '2.6 From Design Prototype to Code',
description:
'Convert design files into maintainable frontend code and components.'
},
'modern-component-library': {
title: '2.7 Upgrade UI with Modern Component Libraries',
description:
'Use component libraries to improve consistency and development speed.'
}
},
'zh-tw': {
'ai-interface-code': {
title: '初中級:後端介面設計與開發',
description: '把 AI 能力規範地接入後端介面,提升工程可維護性。'
},
'fullstack-app': {
title: 'Stage 2 大作業:全端應用實戰',
description: '把原型能力升級為前後端一體化的可上線應用。'
},
'database-supabase': {
title: '初中級後端:從資料庫到 Supabase',
description: '補齊資料建模、儲存與權限能力,邁向工程化開發。'
},
'ui-design': {
title: '2.2 建構第一個現代應用程式 - UI 設計',
description: '在統一視覺規範下,完成頁面層級、元件和版面設計。'
},
'design-to-code': {
title: '2.6 從設計原型到專案程式碼',
description: '把設計稿準確轉成可維護的前端程式碼與元件結構。'
},
'modern-component-library': {
title: '2.7 使用現代元件庫更新你的介面',
description: '利用元件庫提升工程效率,讓介面一致性更穩定。'
}
},
'ja-jp': {
'ai-interface-code': {
title: '初中級:バックエンド API 設計と開発',
description: 'AI 能力を保守しやすいバックエンド接口として接続します。'
},
'fullstack-app': {
title: 'Stage 2 課題:フルスタックアプリ実践',
description:
'プロトタイプ能力を、公開可能なフルスタックアプリへ発展させます。'
},
'database-supabase': {
title: '初中級バックエンド:データベースから Supabase へ',
description:
'データモデリング、保存、権限管理を補い、工程化開発へ進みます。'
},
'ui-design': {
title: '2.2 最初のモダンアプリを作る - UI デザイン',
description:
'統一された視覚仕様のもとで、ページ階層、コンポーネント、レイアウトを完成させます。'
},
'design-to-code': {
title: '2.6 デザインプロトタイプからコードへ',
description:
'デザインを保守しやすいフロントエンドコードとコンポーネント構造に変換します。'
},
'modern-component-library': {
title: '2.7 モダンコンポーネントライブラリで UI を更新する',
description: 'コンポーネントライブラリで一貫性と開発効率を高めます。'
}
},
'ko-kr': {
'ai-interface-code': {
title: '초중급: 백엔드 API 설계와 개발',
description: 'AI 기능을 유지보수 가능한 백엔드 인터페이스로 연결합니다.'
},
'fullstack-app': {
title: 'Stage 2 과제: 풀스택 앱 실전',
description:
'프로토타입 역량을 배포 가능한 풀스택 애플리케이션으로 확장합니다.'
},
'database-supabase': {
title: '초중급 백엔드: 데이터베이스에서 Supabase까지',
description:
'데이터 모델링, 저장, 권한 기능을 보강해 엔지니어링 개발로 나아갑니다.'
},
'ui-design': {
title: '2.2 첫 번째 모던 앱 만들기 - UI 디자인',
description:
'통일된 시각 규칙 아래 페이지 구조, 컴포넌트, 레이아웃을 완성합니다.'
},
'design-to-code': {
title: '2.6 디자인 프로토타입에서 코드로',
description:
'디자인을 유지보수 가능한 프런트엔드 코드와 컴포넌트로 전환합니다.'
},
'modern-component-library': {
title: '2.7 모던 컴포넌트 라이브러리로 UI 개선하기',
description: '컴포넌트 라이브러리로 UI 일관성과 개발 속도를 높입니다.'
}
},
'es-es': {
'ai-interface-code': {
title: 'Backend junior: diseño y desarrollo de APIs',
description:
'Integra capacidades de IA mediante interfaces backend mantenibles.'
},
'fullstack-app': {
title: 'Tarea Stage 2: aplicación full-stack',
description:
'Convierte las habilidades de prototipado en una aplicación desplegable.'
},
'database-supabase': {
title: 'Backend junior: de base de datos a Supabase',
description: 'Completa modelado de datos, almacenamiento y permisos.'
},
'ui-design': {
title: '2.2 Crear una app moderna - Diseño UI',
description:
'Completa jerarquía, componentes y layout bajo una guía visual unificada.'
},
'design-to-code': {
title: '2.6 Del prototipo de diseño al código',
description:
'Convierte diseños en código frontend y componentes mantenibles.'
},
'modern-component-library': {
title: '2.7 Actualizar la UI con librerías modernas',
description:
'Usa librerías de componentes para mejorar consistencia y velocidad.'
}
},
'fr-fr': {
'ai-interface-code': {
title: 'Backend junior : conception et développement dAPI',
description:
'Intégrez les capacités IA via des interfaces backend maintenables.'
},
'fullstack-app': {
title: 'Devoir Stage 2 : application full-stack',
description:
'Transformez les compétences de prototypage en application déployable.'
},
'database-supabase': {
title: 'Backend junior : de la base de données à Supabase',
description: 'Ajoutez modélisation de données, stockage et permissions.'
},
'ui-design': {
title: '2.2 Créer une application moderne - UI Design',
description:
'Finalisez hiérarchie, composants et mise en page avec un système visuel unifié.'
},
'design-to-code': {
title: '2.6 Du prototype design au code',
description:
'Transformez les maquettes en code frontend et composants maintenables.'
},
'modern-component-library': {
title: '2.7 Moderniser linterface avec une bibliothèque de composants',
description:
'Améliorez cohérence et efficacité avec des composants réutilisables.'
}
},
'de-de': {
'ai-interface-code': {
title: 'Junior Backend: API-Design und Entwicklung',
description:
'Binden Sie KI-Fähigkeiten über wartbare Backend-Schnittstellen ein.'
},
'fullstack-app': {
title: 'Stage 2 Aufgabe: Full-Stack-App',
description:
'Entwickeln Sie Prototyping-Fähigkeiten zu einer deploybaren Anwendung weiter.'
},
'database-supabase': {
title: 'Junior Backend: von Datenbank zu Supabase',
description:
'Ergänzen Sie Datenmodellierung, Speicherung und Berechtigungen.'
},
'ui-design': {
title: '2.2 Erste moderne App bauen - UI Design',
description:
'Erstellen Sie Seitenhierarchie, Komponenten und Layout in einem einheitlichen visuellen System.'
},
'design-to-code': {
title: '2.6 Vom Designprototyp zum Code',
description:
'Überführen Sie Designs in wartbaren Frontend-Code und Komponenten.'
},
'modern-component-library': {
title: '2.7 UI mit modernen Komponentenbibliotheken verbessern',
description:
'Steigern Sie Konsistenz und Entwicklungstempo mit Komponentenbibliotheken.'
}
},
'ar-sa': {
'ai-interface-code': {
title: 'الخلفية للمستوى المتوسط: تصميم وتطوير الواجهات',
description: 'اربط قدرات الذكاء الاصطناعي عبر واجهات خلفية قابلة للصيانة.'
},
'fullstack-app': {
title: 'مهمة Stage 2: تطبيق Full-Stack',
description: 'طوّر مهارات النمذجة إلى تطبيق كامل قابل للنشر.'
},
'database-supabase': {
title: 'الخلفية للمستوى المتوسط: من قاعدة البيانات إلى Supabase',
description: 'أكمل نمذجة البيانات والتخزين والصلاحيات.'
},
'ui-design': {
title: '2.2 بناء أول تطبيق حديث - تصميم UI',
description: 'أنجز هيكل الصفحات والمكونات والتخطيط ضمن نظام بصري موحد.'
},
'design-to-code': {
title: '2.6 من نموذج التصميم إلى الكود',
description: 'حوّل التصميم إلى كود واجهة أمامية ومكونات قابلة للصيانة.'
},
'modern-component-library': {
title: '2.7 تحديث الواجهة بمكتبات مكونات حديثة',
description: 'استخدم مكتبات المكونات لتحسين الاتساق وسرعة التطوير.'
}
},
'vi-vn': {
'ai-interface-code': {
title: 'Backend sơ-trung cấp: thiết kế và phát triển API',
description: 'Kết nối năng lực AI qua các API backend dễ bảo trì.'
},
'fullstack-app': {
title: 'Bài tập Stage 2: ứng dụng full-stack',
description:
'Nâng kỹ năng nguyên mẫu thành ứng dụng full-stack có thể triển khai.'
},
'database-supabase': {
title: 'Backend sơ-trung cấp: từ cơ sở dữ liệu đến Supabase',
description: 'Bổ sung mô hình dữ liệu, lưu trữ và phân quyền.'
},
'ui-design': {
title: '2.2 Xây dựng ứng dụng hiện đại đầu tiên - Thiết kế UI',
description:
'Hoàn thiện tầng trang, component và bố cục trong một hệ thống thị giác thống nhất.'
},
'design-to-code': {
title: '2.6 Từ prototype thiết kế đến code',
description:
'Chuyển thiết kế thành code frontend và cấu trúc component dễ bảo trì.'
},
'modern-component-library': {
title: '2.7 Cập nhật giao diện bằng thư viện component hiện đại',
description:
'Dùng thư viện component để tăng tính nhất quán và tốc độ phát triển.'
}
}
}
for (const locale of Object.keys(localizedStage2ArticleText)) {
localizedArticleText[locale] = {
...localizedStage2ArticleText[locale],
...localizedArticleText[locale]
}
}
const withLocalizedArticleText = (item, locale) => {
const text = localizedArticleText[locale]?.[getArticleSlug(item.href)]
return text ? { ...item, ...text } : item
}
const localizeArticleLinks = (items, locale) =>
items.map((item) => ({
...item,
...withLocalizedArticleText(item, locale),
href: item.href.replace(/^\/zh-cn\/stage-1\//, `/${locale}/stage-1/`)
}))