express.Router من خلال بناء واجهة برمجة تطبيقات خدمة الطقس."
- ]
- },
- "lab-timestamp-microservice": {
- "title": "بناء خدمة مصغرة للطابع الزمني",
- "intro": [
- "تمرن على بناء RESTful API مع منطق تحليل التواريخ بإنشاء خدمة مصغرة للطابع الزمني."
- ]
- },
"lecture-working-with-express": {
"title": "العمل مع Express",
"intro": [
@@ -7453,16 +7424,10 @@
"ستتعلم التوجيه الأساسي في Express وطرق الاستجابة من خلال بناء تطبيق نكات عشوائية."
]
},
- "lab-personal-profile-app": {
- "title": "بناء تطبيق ملف شخصي",
- "intro": [
- "تمرن على بناء خادم Express وJSON API بإنشاء تطبيق ملف شخصي شخصي."
- ]
- },
"review-introduction-to-express": {
"title": "مراجعة مقدمة إلى Express",
"intro": [
- "راجع خدمات الويب وREST والخدمات المصغرة وتوجيه Express.js قبل أداء الاختبار."
+ "راجع Express.js، التوجيه، طرق الاستجابة، وخدمة الملفات الثابتة قبل أداء الاختبار القصير."
]
},
"quiz-introduction-to-express": {
@@ -7471,28 +7436,10 @@
"اختبر معرفتك بخدمات الويب وREST والخدمات المصغرة وExpress.js والتوجيه."
]
},
- "lecture-understanding-error-handling-and-health-checks": {
- "title": "فهم معالجة الأخطاء وفحوصات الصحة",
- "intro": [
- "في هذه الدروس، ستتعلم عن معالجة الأخطاء وفحوصات الصحة في Express."
- ]
- },
- "workshop-build-a-bank-api": {
- "title": "بناء واجهة برمجة تطبيقات بنك",
- "intro": [
- "ستتعلم التعامل مع الأخطاء في Express 5، وفحوصات الصحة، والإغلاق السلس من خلال بناء واجهة برمجة تطبيقات بنك."
- ]
- },
- "review-error-handling-in-express": {
- "title": "مراجعة معالجة الأخطاء في Express",
- "intro": [
- "راجع رموز حالة HTTP، ومعالجة الأخطاء، وتصحيح الأخطاء، والتسجيل، وفحوصات الصحة، والإغلاق السلس قبل أداء الاختبار."
- ]
- },
- "quiz-error-handling-in-express": {
- "title": "اختبار معالجة الأخطاء في Express",
+ "lab-personal-profile-app": {
+ "title": "بناء تطبيق ملف شخصي",
"intro": [
- "اختبر معرفتك برموز حالة HTTP، ومعالجة الأخطاء، وتصحيح الأخطاء، والتسجيل، وفحوصات الصحة، والإغلاق السلس."
+ "تمرن على بناء خادم Express وJSON API بإنشاء تطبيق ملف شخصي شخصي."
]
},
"lecture-express-middleware": {
@@ -7525,6 +7472,54 @@
"اختبر معرفتك بالبرمجيات الوسيطة في Express، بما في ذلك على مستوى التطبيق، والموجّه، ومعالجة الأخطاء، والبرمجيات الوسيطة المدمجة والخارجية."
]
},
+ "lecture-understanding-rest-api-and-web-services": {
+ "title": "فهم REST API وخدمات الويب",
+ "intro": [
+ "في هذه الدروس، ستتعلم عن REST APIs وخدمات الويب، وكيف تسمح لتطبيقات مختلفة بالتواصل مع بعضها عبر الإنترنت."
+ ]
+ },
+ "workshop-build-a-weather-service-api": {
+ "title": "بناء واجهة برمجة تطبيقات خدمة الطقس",
+ "intro": [
+ "ستتعلم معلمات المسار والتوجيه المعياري باستخدام express.Router من خلال بناء واجهة برمجة تطبيقات خدمة الطقس."
+ ]
+ },
+ "review-rest-api-and-web-services": {
+ "title": "مراجعة REST API وخدمات الويب",
+ "intro": [
+ "راجع خدمات الويب، عمارة REST، رموز حالة HTTP، والخدمات المصغرة."
+ ]
+ },
+ "lab-timestamp-microservice": {
+ "title": "بناء خدمة مصغرة للطابع الزمني",
+ "intro": [
+ "تمرن على بناء RESTful API مع منطق تحليل التواريخ بإنشاء خدمة مصغرة للطابع الزمني."
+ ]
+ },
+ "lecture-understanding-error-handling-and-health-checks": {
+ "title": "فهم معالجة الأخطاء وفحوصات الصحة",
+ "intro": [
+ "في هذه الدروس، ستتعلم عن معالجة الأخطاء وفحوصات الصحة في Express."
+ ]
+ },
+ "workshop-build-a-bank-api": {
+ "title": "بناء واجهة برمجة تطبيقات بنك",
+ "intro": [
+ "ستتعلم التعامل مع الأخطاء في Express 5، وفحوصات الصحة، والإغلاق السلس من خلال بناء واجهة برمجة تطبيقات بنك."
+ ]
+ },
+ "review-error-handling-in-express": {
+ "title": "مراجعة معالجة الأخطاء في Express",
+ "intro": [
+ "راجع رموز حالة HTTP، ومعالجة الأخطاء، وتصحيح الأخطاء، والتسجيل، وفحوصات الصحة، والإغلاق السلس قبل أداء الاختبار."
+ ]
+ },
+ "quiz-error-handling-in-express": {
+ "title": "اختبار معالجة الأخطاء في Express",
+ "intro": [
+ "اختبر معرفتك برموز حالة HTTP، ومعالجة الأخطاء، وتصحيح الأخطاء، والتسجيل، وفحوصات الصحة، والإغلاق السلس."
+ ]
+ },
"lecture-understanding-websockets": {
"title": "فهم WebSockets",
"intro": [
@@ -8427,7 +8422,7 @@
"title": "تصميم قائمة مقهى",
"intro": [
"يخبر CSS المتصفح بكيفية عرض صفحة الويب الخاصة بك. يمكنك استخدام CSS لتعيين اللون، الخط، الحجم، وجوانب أخرى لعناصر HTML.",
- "في ورشة العمل هذه، ستتعلم CSS من خلال تصميم صفحة قائمة لموقع مقهى."
+ "في هذه الورشة، ستتعلم CSS من خلال تصميم صفحة قائمة لمقهى."
]
},
"lab-business-card": {
@@ -9695,7 +9690,7 @@
"title": "تصميم قائمة مقهى",
"intro": [
"يخبر CSS المتصفح بكيفية عرض صفحة الويب الخاصة بك. يمكنك استخدام CSS لتعيين اللون، والخط، والحجم، وجوانب أخرى لعناصر HTML.",
- "في ورشة العمل هذه، ستتعلم CSS من خلال تصميم صفحة قائمة لموقع مقهى."
+ "في هذه الورشة، ستتعلم CSS من خلال تصميم صفحة قائمة لمقهى."
]
},
"lab-business-card": {
diff --git a/client/arabic/translations.json b/client/arabic/translations.json
index d7fec1811fd..32a63204f4f 100644
--- a/client/arabic/translations.json
+++ b/client/arabic/translations.json
@@ -558,6 +558,12 @@
"running-tests": "// جاري تشغيل الاختبارات",
"tests-completed": "// تم الانتهاء من الاختبارات",
"console-output": "// ناتج وحدة التحكم",
+ "unavailable-local-resource": "فشل تحميل المورد: \"{{source}}\" ليس ملف {{resourceType}} محلي متاح. استخدم: {{allowedSources}}.",
+ "unavailable-local-resource-no-allowed": "فشل تحميل المورد: \"{{source}}\" ليس ملف {{resourceType}} محلي متاح في هذا التحدٍّ.",
+ "local-resource-type": {
+ "stylesheet": "ورقة أنماط",
+ "script": "سكريبت"
+ },
"example-app": "ابنِ تطبيقًا يشبه <0>هذا المشروع المثال0> من حيث الوظائف. حاول ألا تنسخ المشروع المثال، بل أضف لمستك الشخصية.",
"syntax-error": "شفرتك أظهرت خطأ قبل تشغيل أي اختبار. يرجى تصحيحه والمحاولة مجددًا.",
"indentation-error": "شفرتك تحتوي على خطأ في التراجع. قد تحتاج إلى إضافة pass في سطر جديد لتكوين كتلة شفرة صحيحة.",
@@ -656,25 +662,6 @@
"sub-step-7": "انقر زر <0>إضافة السر0>",
"summary": "إعداد Codespaces"
},
- "ona": {
- "intro": "تُشغّل هذه الدورة في جهاز Linux افتراضي باستخدام Ona. اتبع هذه التعليمات لبدء الدورة:",
- "step-1": "<0>أنشئ حساب Ona0> إذا لم يكن لديك واحد",
- "step-2": "انقر زر البدء أدناه",
- "step-3": "في النافذة المنبثقة، انقر زر الإنشاء",
- "step-4": "عندما ينتهي تحميل جهاز Linux الافتراضي، ابدأ امتداد CodeRoad عن طريق:",
- "step-5": "النقر على قائمة \"الهامبرغر\" قرب أعلى يسار نافذة VSCode،",
- "step-6": "الذهاب إلى قائمة <0>العرض0>،",
- "step-7": "النقر على خيار <0>لوحة الأوامر0>،",
- "step-8": "وتشغيل الأمر <0>CodeRoad: Start0>",
- "step-9": "اتبع التعليمات في CodeRoad لإكمال الدورة",
- "continue-project": "النقر على زر البدء أدناه سيبدأ مشروعًا جديدًا. إذا بدأت سابقًا دورة {{course}}، اذهب إلى <0>لوحة تحكم Ona الخاصة بك0> للمتابعة.",
- "learn-more": "تعرف على المزيد عن <0>مساحات عمل Ona.0>",
- "logout-warning": "إذا سجلت الخروج من freeCodeCamp قبل إكمال دورة {{course}} بالكامل، فلن يتم حفظ تقدمك في حساب freeCodeCamp الخاص بك.",
- "sub-step-3": "انتقل إلى <0>صفحة أسرار Ona0> الخاصة بك",
- "sub-step-4": "أنشئ سرًا جديدًا باسم <0>CODEROAD_WEBHOOK_TOKEN0>",
- "sub-step-5": "في حقل <0>السر0>، الصق رمزك",
- "summary": "إعداد Ona"
- },
"freecodecamp-os": {
"token-modal": "عند تشغيل الدورة، ستظهر نافذة منبثقة تطلب رمز المستخدم الخاص بك. الصق الرمز الذي نسخته أعلاه فيها. تحتاج إلى فعل ذلك مرة واحدة فقط لكل بيئة عمل.",
"local": {
@@ -697,16 +684,6 @@
"step-5": "سيفتح المتصفح البسيط عند الانتهاء. إذا ظهرت صفحة بيضاء فارغة، استخدم زر التحديث لرؤيتها وتحديث صفحة البداية للدورة.",
"step-6": "انقر على أحد المشاريع المتاحة لبدئه، ثم اتبع التعليمات في المشروع لإكماله.",
"continue-project": "النقر على زر البدء أدناه سيشغل جهازًا جديدًا. إذا بدأت سابقًا دورة {{title}}، اذهب إلى <0>صفحة المستودع0> لإعادة فتح مساحة عمل سابقة."
- },
- "ona": {
- "intro": "تُشغّل هذه الدورة في جهاز لينكس افتراضي باستخدام Ona وامتداد freeCodeCamp - Courses لـ VS Code. اتبع هذه التعليمات لبدء الدورة:",
- "step-1": "<0>أنشئ حساب Ona0> إذا لم يكن لديك واحد",
- "step-2": "انقر زر البدء أدناه",
- "step-3": "في النافذة المنبثقة، انقر زر الإنشاء",
- "step-4": "عند انتهاء تحميل جهاز لينكس الافتراضي، افتح لوحة الأوامر وشغّل الأمر <0>freeCodeCamp: Run Course0>",
- "step-5": "سيفتح المتصفح البسيط عند الانتهاء. إذا ظهرت صفحة بيضاء فارغة، استخدم زر التحديث لرؤيتها وتحديث صفحة البداية للدورة.",
- "step-6": "انقر على أحد المشاريع المتاحة لبدئه، ثم اتبع التعليمات في المشروع لإكماله.",
- "continue-project": "النقر على زر البدء أدناه سيشغل جهازًا جديدًا. إذا بدأت سابقًا دورة {{course}}، اذهب إلى <0>لوحة تحكم Ona الخاصة بك0> للمتابعة."
}
},
"local": {
diff --git a/client/chinese-traditional/intro.json b/client/chinese-traditional/intro.json
index 5bb7a871730..63ed58f3f56 100644
--- a/client/chinese-traditional/intro.json
+++ b/client/chinese-traditional/intro.json
@@ -1352,12 +1352,6 @@
"在這個包含 140 課的工作坊中,你將完成你的學生資料庫,並深入學習 SQL 命令。"
]
},
- "lab-world-cup-database": {
- "title": "建置世界盃資料庫",
- "intro": [
- "在這個專案中,你將創建一個 Bash 腳本,將世界盃比賽資訊輸入 PostgreSQL,然後查詢資料庫以取得有用的統計資料。"
- ]
- },
"workshop-kitty-ipsum-translator": {
"title": "建置 Kitty Ipsum 翻譯器",
"intro": [
@@ -1371,6 +1365,12 @@
"在這個包含 210 課的工作坊中,你將建置一個互動式 Bash 程式,使用 PostgreSQL 儲存你的自行車租賃店的租賃資訊。"
]
},
+ "lab-world-cup-database": {
+ "title": "建置世界盃資料庫",
+ "intro": [
+ "在這個專案中,你將創建一個 Bash 腳本,將世界盃比賽資訊輸入 PostgreSQL,然後查詢資料庫以取得有用的統計資料。"
+ ]
+ },
"lab-salon-appointment-scheduler": {
"title": "建置沙龍預約排程器",
"intro": [
@@ -2669,6 +2669,13 @@
"你將練習使用條件判斷,根據學生分數決定成績。"
]
},
+ "lab-story-fragment-restoration": {
+ "title": "從陣列故事片段還原連貫敘事",
+ "intro": [
+ "在這個實驗中,你將從損壞的故事片段陣列還原出連貫的敘事。",
+ "你將透過從頭實作基本陣列演算法來練習使用迴圈。"
+ ]
+ },
"lecture-the-var-keyword-and-hoisting": {
"title": "var 關鍵字與提升",
"intro": [
@@ -3774,18 +3781,18 @@
"透過本課程學習 CSS 盒模型。了解元素如何在網頁上呈現,並學會操作間距、邊框與內距,達成理想的版面與設計。"
]
},
- "top-introduction-to-flexbox": {
- "title": "Flexbox 入門",
- "intro": [
- "探索 Flexbox 的強大功能,這是一種簡化彈性且響應式網頁版面設計的模型。學習輕鬆建立動態且適應性的頁面結構。"
- ]
- },
"top-learn-block-and-inline": {
"title": "學習區塊元素與行內元素的差異",
"intro": [
"探索 HTML 和 CSS 中區塊元素與行內元素的區別。本課程提供這些顯示類型如何影響版面與行為的見解,讓你做出明智的設計決策。"
]
},
+ "top-introduction-to-flexbox": {
+ "title": "Flexbox 入門",
+ "intro": [
+ "探索 Flexbox 的強大功能,這是一種簡化彈性且響應式網頁版面設計的模型。學習輕鬆建立動態且適應性的頁面結構。"
+ ]
+ },
"top-learn-variables-and-operators": {
"title": "學習變數與運算子",
"intro": [
@@ -6287,12 +6294,6 @@
"你將練習使用 Tailwind CSS 的彈性盒布局、顏色、斷點等工具類別。"
]
},
- "lab-photography-exhibit": {
- "title": "設計攝影展覽",
- "intro": [
- "在這個實驗中,你將透過設計攝影展覽網頁練習使用 Tailwind CSS。"
- ]
- },
"review-css-libraries-and-frameworks": {
"title": "CSS 函式庫與框架複習",
"intro": [
@@ -6306,6 +6307,12 @@
"透過此測驗測試你對 CSS 函式庫與框架的理解。"
]
},
+ "lab-photography-exhibit": {
+ "title": "設計攝影展覽",
+ "intro": [
+ "在這個實驗中,你將透過設計攝影展覽網頁練習使用 Tailwind CSS。"
+ ]
+ },
"lecture-introduction-to-typescript": {
"title": "TypeScript 入門",
"intro": [
@@ -6372,18 +6379,6 @@
"在這個工作坊中,你將繼續透過建置占卜應用程式來練習 TypeScript。"
]
},
- "lab-flashcard-quiz-app": {
- "title": "建置抽認卡測驗應用程式",
- "intro": [
- "在這個實驗中,你將透過建置抽認卡測驗應用程式來練習使用 TypeScript。"
- ]
- },
- "lab-digital-pet-game": {
- "title": "建置數位寵物遊戲",
- "intro": [
- "在這個實驗中,你將透過建置數位寵物遊戲來練習你學到的 TypeScript 和 React。"
- ]
- },
"workshop-build-a-football-player-card-builder": {
"title": "建置足球球員卡片建構器",
"intro": [
@@ -6401,6 +6396,18 @@
"title": "TypeScript 測驗",
"intro": ["透過這個測驗測試你對 TypeScript 的學習成果。"]
},
+ "lab-flashcard-quiz-app": {
+ "title": "建置抽認卡測驗應用程式",
+ "intro": [
+ "在這個實驗中,你將透過建置抽認卡測驗應用程式來練習使用 TypeScript。"
+ ]
+ },
+ "lab-digital-pet-game": {
+ "title": "建置數位寵物遊戲",
+ "intro": [
+ "在這個實驗中,你將透過建置數位寵物遊戲來練習你學到的 TypeScript 和 React。"
+ ]
+ },
"review-front-end-libraries": {
"title": "前端函式庫複習",
"intro": [
@@ -7176,12 +7183,12 @@
"node-package-manager": "Node 套件管理器",
"lab-prime-number-checker-module": "建置質數檢查模組",
"http-and-the-web-standards-model": "HTTP 與網頁標準模型",
- "rest-api-and-web-services": "REST API 與網路服務",
- "lab-timestamp-microservice": "建置時間戳記微服務",
"introduction-to-express": "Express 入門",
"lab-personal-profile-app": "建置個人評測應用程式",
- "error-handling-in-express": "Express 錯誤處理",
"express-middleware": "Express 中介層",
+ "rest-api-and-web-services": "REST API 與網路服務",
+ "lab-timestamp-microservice": "建置時間戳記微服務",
+ "error-handling-in-express": "Express 錯誤處理",
"websockets": "WebSockets",
"lab-chat-app": "建置聊天應用程式",
"security-and-privacy": "安全性與隱私",
@@ -7192,109 +7199,91 @@
},
"module-intros": {
"introduction-to-nodejs": {
- "note": "預計 2026 年底推出",
"intro": [
"在本模組中,你將學習 Node.js 的基礎操作。"
]
},
"nodejs-core-modules": {
- "note": "預計 2026 年底推出",
"intro": [
"本模組介紹常見的 Node.js 核心模組,包括 fs、os、path 等。接著你將透過工作坊和實驗練習所學,並以短測驗檢驗你的知識。"
]
},
"node-package-manager": {
- "note": "預計 2026 年底推出",
"intro": [
"本模組介紹 Node 套件管理器,開發者用它來管理專案依賴和腳本。接著你將透過工作坊和實驗練習所學,並以短測驗檢驗你的知識。"
]
},
"lab-prime-number-checker-module": {
- "note": "2026 年底推出",
"intro": [
"透過建立質數檢查器練習建置與匯出 NPM 模組。"
]
},
"http-and-the-web-standards-model": {
- "note": "預計 2026 年底推出",
"intro": [
"本模組介紹 HTTP(超文字傳輸協定)及其他重要概念,包括請求-回應模型、常見回應碼、DNS、TCP/IP 等。接著你將透過建置自己的網頁伺服器工作坊練習,並以短測驗檢驗你的知識。"
]
},
- "rest-api-and-web-services": {
- "note": "預計 2026 年底推出",
+ "introduction-to-express": {
"intro": [
- "本模組介紹 REST API(表述性狀態轉移應用程式介面)及微服務運作方式。接著你將以短測驗檢驗你的知識。"
+ "本模組介紹 Express.js,一個用來建置 RESTful API 的框架。接著你將透過工作坊和實驗練習技能,並以短測驗檢驗你的知識。"
]
},
- "lab-timestamp-microservice": {
- "note": "2026 年底推出",
+ "lab-personal-profile-app": {
"intro": [
- "透過建立時間戳記微服務練習建置具日期解析邏輯的 RESTful API。"
+ "透過建立個人評測應用程式練習建置 Express 伺服器與 JSON API。"
]
},
- "introduction-to-express": {
- "note": "預計 2026 年底推出",
+ "express-middleware": {
"intro": [
- "本模組介紹 Express.js,一個用來建置 RESTful API 的框架。接著你將透過工作坊和實驗練習技能,並以短測驗檢驗你的知識。"
+ "本模組介紹 Express.js 的中介層,用於控制客戶端與伺服器間的請求與回應。你將透過工作坊和實驗練習技能,並以短測驗檢驗你的知識。"
]
},
- "lab-personal-profile-app": {
- "note": "2026 年底推出",
+ "rest-api-and-web-services": {
"intro": [
- "透過建立個人評測應用程式練習建置 Express 伺服器與 JSON API。"
+ "本模組介紹 REST API(表述性狀態轉移應用程式介面)及微服務運作方式。接著你將以短測驗檢驗你的知識。"
]
},
- "error-handling-in-express": {
- "note": "預計 2026 年底推出",
+ "lab-timestamp-microservice": {
"intro": [
- "本模組介紹 Express.js 中的錯誤處理、偵錯和健康檢查。你將在實驗中練習所學,並以短測驗檢驗你的知識。"
+ "透過建立時間戳記微服務練習建置具日期解析邏輯的 RESTful API。"
]
},
- "express-middleware": {
- "note": "預計 2026 年底推出",
+ "error-handling-in-express": {
"intro": [
- "本模組介紹 Express.js 的中介層,用於控制客戶端與伺服器間的請求與回應。你將透過工作坊和實驗練習技能,並以短測驗檢驗你的知識。"
+ "本模組介紹 Express.js 中的錯誤處理、偵錯和健康檢查。你將在實驗中練習所學,並以短測驗檢驗你的知識。"
]
},
"websockets": {
- "note": "預計 2026 年底推出",
"intro": [
"本模組介紹 WebSockets,一種用於客戶端與伺服器即時通訊的協定。你將在實驗和工作坊中練習所學,並以短測驗檢驗你的知識。"
]
},
"lab-chat-app": {
- "note": "2026 年底推出",
"intro": [
"透過使用 Node.js WebSockets 建置即時多客戶端聊天伺服器來練習。"
]
},
"security-and-privacy": {
- "note": "預計 2026 年底推出",
"intro": [
"本模組介紹安全性與隱私的差異,以及 CSP、權限政策、個人識別資訊、CORS 操作等概念。接著你將以短測驗檢驗你的知識。"
]
},
"authentication": {
- "note": "預計 2026 年底推出",
"intro": [
"本模組介紹網頁應用程式的身份驗證運作方式,以及 JWT、CSRF、Passport、Helmet、密碼學與加密等重要概念。你將在實驗和工作坊中練習所學,並以短測驗檢驗你的知識。"
]
},
"lab-family-movie-watchlist-api": {
- "note": "2026 年底推出",
"intro": [
"透過建置家庭電影清單 API 練習在 Express 應用程式中實作驗證與授權。"
]
},
"back-end-development-and-apis-certification-exam": {
- "note": "預計 2026 年底推出",
"intro": [
"通過此考試以獲得你的後端開發與 API 認證。"
]
},
"review-back-end-development-and-apis": {
- "note": "2026 年底推出",
"intro": [
"複習後端開發與 API 的概念,為即將到來的考試做準備。"
]
@@ -7302,7 +7291,7 @@
},
"blocks": {
"lecture-working-with-nodejs-and-event-driven-architecture": {
- "title": "使用 NodeJS 與事件驅動架構",
+ "title": "使用 Node.js 與事件驅動架構",
"intro": [
"了解 Node.js 核心函式庫、如何在電腦安裝 Node.js,以及使用 Node.js 作為後端的優缺點。"
]
@@ -7416,24 +7405,6 @@
""
]
},
- "lecture-understanding-rest-api-and-web-services": {
- "title": "理解 REST API 與網路服務",
- "intro": [
- "在這些課程中,你將學習 REST API 和網路服務,以及它們如何讓不同應用程式透過網際網路互相通訊。"
- ]
- },
- "workshop-build-a-weather-service-api": {
- "title": "建置天氣服務 API",
- "intro": [
- "你將透過建置天氣服務 API,學習路由參數和使用 express.Router 的模組化路由。"
- ]
- },
- "lab-timestamp-microservice": {
- "title": "建置時間戳記微服務",
- "intro": [
- "透過建置時間戳記微服務,練習使用日期解析邏輯建構 RESTful API。"
- ]
- },
"lecture-working-with-express": {
"title": "使用 Express",
"intro": [
@@ -7453,16 +7424,10 @@
"你將透過建置隨機笑話應用程式,學習基本的 Express 路由和回應方法。"
]
},
- "lab-personal-profile-app": {
- "title": "建置個人資料應用程式",
- "intro": [
- "透過建置個人資料應用程式,練習建構 Express 伺服器和 JSON API。"
- ]
- },
"review-introduction-to-express": {
"title": "Express 入門複習",
"intro": [
- "在進行測驗前,複習網路服務、REST、微服務和 Express.js 路由。"
+ "在測驗前複習 Express.js、路由、回應方法與靜態檔案服務。"
]
},
"quiz-introduction-to-express": {
@@ -7471,28 +7436,10 @@
"測試你對網路服務、REST、微服務、Express.js 和路由的知識。"
]
},
- "lecture-understanding-error-handling-and-health-checks": {
- "title": "理解錯誤處理與健康檢查",
- "intro": [
- "在這些課程中,你將學習 Express 的錯誤處理和健康檢查。"
- ]
- },
- "workshop-build-a-bank-api": {
- "title": "建置銀行 API",
- "intro": [
- "你將透過建置銀行 API,學習 Express 5 的錯誤處理、健康檢查和優雅關閉。"
- ]
- },
- "review-error-handling-in-express": {
- "title": "Express 錯誤處理複習",
- "intro": [
- "在進行測驗前,複習 HTTP 狀態碼、錯誤處理、偵錯、記錄、健康檢查和優雅關閉。"
- ]
- },
- "quiz-error-handling-in-express": {
- "title": "Express 錯誤處理測驗",
+ "lab-personal-profile-app": {
+ "title": "建置個人資料應用程式",
"intro": [
- "測試你對 HTTP 狀態碼、錯誤處理、偵錯、記錄、健康檢查和優雅關閉的知識。"
+ "透過建置個人資料應用程式,練習建構 Express 伺服器和 JSON API。"
]
},
"lecture-express-middleware": {
@@ -7525,6 +7472,54 @@
"測試你對 Express 中介層的知識,包括應用程式層級、路由器層級、錯誤處理,以及內建和第三方中介層。"
]
},
+ "lecture-understanding-rest-api-and-web-services": {
+ "title": "理解 REST API 與網路服務",
+ "intro": [
+ "在這些課程中,你將學習 REST API 和網路服務,以及它們如何讓不同應用程式透過網際網路互相通訊。"
+ ]
+ },
+ "workshop-build-a-weather-service-api": {
+ "title": "建置天氣服務 API",
+ "intro": [
+ "你將透過建置天氣服務 API,學習路由參數和使用 express.Router 的模組化路由。"
+ ]
+ },
+ "review-rest-api-and-web-services": {
+ "title": "REST API 與網路服務複習",
+ "intro": [
+ "複習網路服務、REST 架構、HTTP 狀態碼與微服務。"
+ ]
+ },
+ "lab-timestamp-microservice": {
+ "title": "建置時間戳記微服務",
+ "intro": [
+ "透過建置時間戳記微服務,練習使用日期解析邏輯建構 RESTful API。"
+ ]
+ },
+ "lecture-understanding-error-handling-and-health-checks": {
+ "title": "理解錯誤處理與健康檢查",
+ "intro": [
+ "在這些課程中,你將學習 Express 的錯誤處理和健康檢查。"
+ ]
+ },
+ "workshop-build-a-bank-api": {
+ "title": "建置銀行 API",
+ "intro": [
+ "你將透過建置銀行 API,學習 Express 5 的錯誤處理、健康檢查和優雅關閉。"
+ ]
+ },
+ "review-error-handling-in-express": {
+ "title": "Express 錯誤處理複習",
+ "intro": [
+ "在進行測驗前,複習 HTTP 狀態碼、錯誤處理、偵錯、記錄、健康檢查和優雅關閉。"
+ ]
+ },
+ "quiz-error-handling-in-express": {
+ "title": "Express 錯誤處理測驗",
+ "intro": [
+ "測試你對 HTTP 狀態碼、錯誤處理、偵錯、記錄、健康檢查和優雅關閉的知識。"
+ ]
+ },
"lecture-understanding-websockets": {
"title": "理解 WebSockets",
"intro": [
@@ -8427,7 +8422,7 @@
"title": "設計咖啡廳選單",
"intro": [
"CSS 告訴瀏覽器如何顯示你的網頁。你可以用 CSS 設定 HTML 元素的顏色、字型、大小和其他屬性。",
- "在這個工作坊中,你將透過設計咖啡廳網頁的選單頁面來學習 CSS。"
+ "在這個工作坊中,你將透過設計咖啡廳的選單頁面來學習 CSS。"
]
},
"lab-business-card": {
@@ -9695,7 +9690,7 @@
"title": "設計咖啡廳菜單",
"intro": [
"CSS 告訴瀏覽器如何顯示你的網頁。你可以用 CSS 設定 HTML 元素的顏色、字型、大小和其他屬性。",
- "在這個工作坊中,你將透過設計咖啡廳網頁的菜單頁面來學習 CSS。"
+ "在這個工作坊中,你將透過設計咖啡廳的選單頁面來學習 CSS。"
]
},
"lab-business-card": {
diff --git a/client/chinese-traditional/translations.json b/client/chinese-traditional/translations.json
index 5de10687311..0b3eba34139 100644
--- a/client/chinese-traditional/translations.json
+++ b/client/chinese-traditional/translations.json
@@ -558,6 +558,12 @@
"running-tests": "// 正在執行測試",
"tests-completed": "// 測試完成",
"console-output": "// 主控台輸出",
+ "unavailable-local-resource": "載入資源失敗:「{{source}}」不是可用的區域的 {{resourceType}} 檔案。請使用:{{allowedSources}}。",
+ "unavailable-local-resource-no-allowed": "載入資源失敗:「{{source}}」不是此挑戰中可用的區域的 {{resourceType}} 檔案。",
+ "local-resource-type": {
+ "stylesheet": "樣式表",
+ "script": "腳本"
+ },
"example-app": "建置一個功能上類似於<0>此範例專案0>的應用程式。盡量不要複製範例專案,展現你自己的風格。",
"syntax-error": "你的程式碼在任何測試執行前就引發錯誤。請修正後再試。",
"indentation-error": "你的程式碼有縮排錯誤。你可能需要在新行加入pass以形成有效的程式碼區塊。",
@@ -656,25 +662,6 @@
"sub-step-7": "點擊 <0>新增秘密0> 按鈕",
"summary": "Codespaces 設定"
},
- "ona": {
- "intro": "本課程在使用 Ona 的虛擬 Linux 機器中執行。請依照以下指示開始課程:",
- "step-1": "<0>如果你還沒有,請創建 Ona 帳號0>",
- "step-2": "點擊下方開始按鈕",
- "step-3": "在跳出的視窗中點擊建立按鈕",
- "step-4": "虛擬 Linux 機器載入完成後,啟動 CodeRoad 擴充套件:",
- "step-5": "點擊 VSCode 視窗左上方的「漢堡」選單,",
- "step-6": "前往 <0>檢視0> 選單,",
- "step-7": "點擊 <0>指令面板0> 選項,",
- "step-8": "並執行 <0>CodeRoad: Start0> 指令",
- "step-9": "依照 CodeRoad 中的指示完成課程",
- "continue-project": "點擊下方開始按鈕會啟動新專案。若你之前已開始 {{course}} 課程,請前往 <0>你的 Ona 儀表板0> 繼續。",
- "learn-more": "了解更多關於 <0>Ona 工作區。0>",
- "logout-warning": "如果你在完成整個 {{course}} 課程前登出 freeCodeCamp,你的進度將不會儲存到你的 freeCodeCamp 帳號。",
- "sub-step-3": "前往你的 <0>Ona 秘密頁面0>",
- "sub-step-4": "建立名為 <0>CODEROAD_WEBHOOK_TOKEN0> 的新秘密",
- "sub-step-5": "在 <0>秘密0> 欄位貼上你的 token",
- "summary": "Ona 設定"
- },
"freecodecamp-os": {
"token-modal": "當你執行課程時,會跳出一個視窗要求輸入你的使用者語彙單元。請將你剛才複製的語彙單元貼上。每個環境只需操作一次。",
"local": {
@@ -697,16 +684,6 @@
"step-5": "完成後會開啟 Simple Browser。如果是空白白頁,請使用重新整理按鈕更新,查看課程首頁。",
"step-6": "點選其中一個可用的專案開始,然後依照專案中的指示完成它。",
"continue-project": "點擊下方開始按鈕會啟動一台新機器。若你之前已開始過 {{title}} 課程,請前往 <0>倉庫頁面0> 重新開啟先前的工作區。"
- },
- "ona": {
- "intro": "此課程會在虛擬 Linux 機器中使用 Ona 和 freeCodeCamp - Courses VS Code 擴充套件執行。請依照以下指示開始課程:",
- "step-1": "<0>如果你還沒有,請創建一個 Ona 帳號0>",
- "step-2": "點擊下方的開始按鈕",
- "step-3": "在跳出的視窗中,點擊建立按鈕",
- "step-4": "虛擬 Linux 機器載入完成後,開啟指令面板並執行 <0>freeCodeCamp: Run Course0> 指令",
- "step-5": "完成後會開啟 Simple Browser。如果是空白白頁,請使用重新整理按鈕更新,查看課程首頁。",
- "step-6": "點選其中一個可用的專案開始,然後依照專案中的指示完成它。",
- "continue-project": "點擊下方開始按鈕會啟動一台新機器。若你之前已開始過 {{course}} 課程,請前往 <0>你的 Ona 儀表板0> 繼續。"
}
},
"local": {
diff --git a/client/chinese/intro.json b/client/chinese/intro.json
index cade9271d89..8669c1bb1bc 100644
--- a/client/chinese/intro.json
+++ b/client/chinese/intro.json
@@ -1352,12 +1352,6 @@
"在这个包含 140 节课的工作坊中,你将完成学生数据库,同时深入学习 SQL 命令。"
]
},
- "lab-world-cup-database": {
- "title": "构建世界杯数据库",
- "intro": [
- "在此项目中,你将创建一个 Bash 脚本,将世界杯比赛信息输入 PostgreSQL,然后查询数据库以获取有用的统计数据。"
- ]
- },
"workshop-kitty-ipsum-translator": {
"title": "构建 Kitty Ipsum 翻译器",
"intro": [
@@ -1371,6 +1365,12 @@
"在这个包含 210 节课的工作坊中,你将构建一个交互式 Bash 程序,使用 PostgreSQL 保存自行车租赁店的租赁信息。"
]
},
+ "lab-world-cup-database": {
+ "title": "构建世界杯数据库",
+ "intro": [
+ "在此项目中,你将创建一个 Bash 脚本,将世界杯比赛信息输入 PostgreSQL,然后查询数据库以获取有用的统计数据。"
+ ]
+ },
"lab-salon-appointment-scheduler": {
"title": "构建美发预约调度程序",
"intro": [
@@ -2669,6 +2669,13 @@
"你将练习使用条件式,根据学生的分数确定成绩。"
]
},
+ "lab-story-fragment-restoration": {
+ "title": "从故事片段数组还原连贯叙事",
+ "intro": [
+ "在本实验中,你将从损坏的故事片段数组中还原连贯的叙事。",
+ "你将通过从零实现基本数组算法来练习使用循环。"
+ ]
+ },
"lecture-the-var-keyword-and-hoisting": {
"title": "var 关键字与提升机制",
"intro": [
@@ -3774,18 +3781,18 @@
"通过本课程学习 CSS 盒模型。了解网页元素如何渲染,学习调整间距、边框和内边距,实现理想的版型和设计。"
]
},
- "top-introduction-to-flexbox": {
- "title": "弹性盒模型简介",
- "intro": [
- "发现弹性盒模型的强大功能,这是一种简化灵活响应式网页版型设计的模型。学习轻松创建动态且自适应的页面结构。"
- ]
- },
"top-learn-block-and-inline": {
"title": "学习块级元素和内联元素的区别",
"intro": [
"探索超文本标记语言和 CSS 中块级元素与内联元素的区别。本课程提供这些显示类型如何影响版型和行为的见解,助你做出明智的设计决策。"
]
},
+ "top-introduction-to-flexbox": {
+ "title": "弹性盒模型简介",
+ "intro": [
+ "发现弹性盒模型的强大功能,这是一种简化灵活响应式网页版型设计的模型。学习轻松创建动态且自适应的页面结构。"
+ ]
+ },
"top-learn-variables-and-operators": {
"title": "学习变量和操作符",
"intro": [
@@ -6287,12 +6294,6 @@
"你将练习使用 Tailwind CSS 的弹性布局、颜色、断点等实用类。"
]
},
- "lab-photography-exhibit": {
- "title": "设计摄影展览",
- "intro": [
- "在本实验中,你将通过设计摄影展览网页练习使用 Tailwind CSS。"
- ]
- },
"review-css-libraries-and-frameworks": {
"title": "CSS 库和框架复习",
"intro": [
@@ -6306,6 +6307,12 @@
"通过此测验测试你对 CSS 库和框架的掌握。"
]
},
+ "lab-photography-exhibit": {
+ "title": "设计摄影展览",
+ "intro": [
+ "在本实验中,你将通过设计摄影展览网页练习使用 Tailwind CSS。"
+ ]
+ },
"lecture-introduction-to-typescript": {
"title": "TypeScript 入门",
"intro": [
@@ -6372,18 +6379,6 @@
"在本工作坊中,你将继续通过创建占卜应用来练习使用 TypeScript。"
]
},
- "lab-flashcard-quiz-app": {
- "title": "创建抽认卡测验应用",
- "intro": [
- "在本实验中,你将通过创建抽认卡测验应用来练习使用 TypeScript。"
- ]
- },
- "lab-digital-pet-game": {
- "title": "创建数字宠物游戏",
- "intro": [
- "在本实验中,你将通过创建数字宠物游戏来练习你所学的 TypeScript 和 React 知识。"
- ]
- },
"workshop-build-a-football-player-card-builder": {
"title": "创建足球运动员卡片生成器",
"intro": [
@@ -6401,6 +6396,18 @@
"title": "TypeScript 测验",
"intro": ["通过此测验测试你对 TypeScript 的掌握。"]
},
+ "lab-flashcard-quiz-app": {
+ "title": "创建抽认卡测验应用",
+ "intro": [
+ "在本实验中,你将通过创建抽认卡测验应用来练习使用 TypeScript。"
+ ]
+ },
+ "lab-digital-pet-game": {
+ "title": "创建数字宠物游戏",
+ "intro": [
+ "在本实验中,你将通过创建数字宠物游戏来练习你所学的 TypeScript 和 React 知识。"
+ ]
+ },
"review-front-end-libraries": {
"title": "前端库复习",
"intro": [
@@ -7176,12 +7183,12 @@
"node-package-manager": "Node 包管理器",
"lab-prime-number-checker-module": "创建素数检测模块",
"http-and-the-web-standards-model": "HTTP 与网络标准模型",
- "rest-api-and-web-services": "REST API 与网络服务",
- "lab-timestamp-microservice": "创建时间戳微服务",
"introduction-to-express": "Express 入门",
"lab-personal-profile-app": "创建个人评测应用",
- "error-handling-in-express": "Express 中的错误处理",
"express-middleware": "Express 中间件",
+ "rest-api-and-web-services": "REST API 与网络服务",
+ "lab-timestamp-microservice": "创建时间戳微服务",
+ "error-handling-in-express": "Express 中的错误处理",
"websockets": "WebSockets",
"lab-chat-app": "创建聊天应用",
"security-and-privacy": "安全性与隐私",
@@ -7192,109 +7199,91 @@
},
"module-intros": {
"introduction-to-nodejs": {
- "note": "2026 年底上线",
"intro": [
"在本模块中,你将学习 Node.js 的基础知识。"
]
},
"nodejs-core-modules": {
- "note": "2026 年底上线",
"intro": [
"在本模块中,你将学习常见的 Node.js 核心模块,包括 fs、os、path 等。然后通过工作坊和实验练习所学内容,并通过简短测验检验知识。"
]
},
"node-package-manager": {
- "note": "2026 年底上线",
"intro": [
"在本模块中,你将了解 Node 包管理器,它帮助开发者管理项目依赖和脚本。然后通过工作坊和实验练习所学内容,并通过简短测验检验知识。"
]
},
"lab-prime-number-checker-module": {
- "note": "2026 年底上线",
"intro": [
"通过创建素数检测器练习构建和导出 NPM 模块。"
]
},
"http-and-the-web-standards-model": {
- "note": "2026 年底上线",
"intro": [
"在本模块中,你将学习 HTTP(超文本传输协议)及其他重要概念,包括请求-响应模型、常见响应码、DNS、TCP/IP 等。然后通过创建自己的网络服务器工作坊练习所学内容,并通过简短测验检验知识。"
]
},
- "rest-api-and-web-services": {
- "note": "2026 年底上线",
+ "introduction-to-express": {
"intro": [
- "在本模块中,你将学习 REST API(表现层状态转移应用程序接口)及微服务的工作原理。然后通过简短测验检验知识。"
+ "在本模块中,你将了解 Express.js,这是一个用于构建 RESTful API 的框架。然后通过工作坊和实验练习技能,并通过简短测验检验知识。"
]
},
- "lab-timestamp-microservice": {
- "note": "2026 年底上线",
+ "lab-personal-profile-app": {
"intro": [
- "通过创建时间戳微服务练习构建带日期解析逻辑的 RESTful API。"
+ "通过创建个人评测应用练习构建 Express 服务器和 JSON API。"
]
},
- "introduction-to-express": {
- "note": "2026 年底上线",
+ "express-middleware": {
"intro": [
- "在本模块中,你将了解 Express.js,这是一个用于构建 RESTful API 的框架。然后通过工作坊和实验练习技能,并通过简短测验检验知识。"
+ "在本模块中,你将学习 Express.js 中的中间件,它用于处理客户与服务器之间的请求和响应。然后通过工作坊和实验练习技能,并通过简短测验检验知识。"
]
},
- "lab-personal-profile-app": {
- "note": "2026 年底上线",
+ "rest-api-and-web-services": {
"intro": [
- "通过创建个人评测应用练习构建 Express 服务器和 JSON API。"
+ "在本模块中,你将学习 REST API(表现层状态转移应用程序接口)及微服务的工作原理。然后通过简短测验检验知识。"
]
},
- "error-handling-in-express": {
- "note": "2026 年底上线",
+ "lab-timestamp-microservice": {
"intro": [
- "在本模块中,你将学习 Express.js 中的错误处理、调试和健康检查。然后在实验中练习所学内容,并通过简短测验检验知识。"
+ "通过创建时间戳微服务练习构建带日期解析逻辑的 RESTful API。"
]
},
- "express-middleware": {
- "note": "2026 年底上线",
+ "error-handling-in-express": {
"intro": [
- "在本模块中,你将学习 Express.js 中的中间件,它用于处理客户与服务器之间的请求和响应。然后通过工作坊和实验练习技能,并通过简短测验检验知识。"
+ "在本模块中,你将学习 Express.js 中的错误处理、调试和健康检查。然后在实验中练习所学内容,并通过简短测验检验知识。"
]
},
"websockets": {
- "note": "2026 年底上线",
"intro": [
"在本模块中,你将了解 WebSockets,这是一种用于客户与服务器实时通信的协议。然后通过实验和工作坊练习所学内容,并通过简短测验检验知识。"
]
},
"lab-chat-app": {
- "note": "2026 年底上线",
"intro": [
"通过使用 Node.js 套接字练习构建实时多客户聊天服务器。"
]
},
"security-and-privacy": {
- "note": "2026 年底上线",
"intro": [
"在本模块中,你将学习安全性与隐私的区别,以及 CSP、权限策略、个人身份信息、CORS 处理等其他概念。然后通过简短测验检验知识。"
]
},
"authentication": {
- "note": "2026 年底上线",
"intro": [
"在本模块中,你将学习网络应用中的认证机制,以及 JWT、CSRF、Passport、Helmet、密码学和加密等重要概念。然后通过实验和工作坊练习所学内容,并通过简短测验检验知识。"
]
},
"lab-family-movie-watchlist-api": {
- "note": "2026 年底上线",
"intro": [
"通过构建家庭电影观看列表 API 练习在 Express 应用中实现认证和授权。"
]
},
"back-end-development-and-apis-certification-exam": {
- "note": "2026 年底上线",
"intro": [
"通过此考试以获得后端开发与 API 认证。"
]
},
"review-back-end-development-and-apis": {
- "note": "预计于 2026 年晚些时候推出",
"intro": [
"复习后端开发与 API 概念,为即将到来的考试做准备。"
]
@@ -7302,7 +7291,7 @@
},
"blocks": {
"lecture-working-with-nodejs-and-event-driven-architecture": {
- "title": "使用 NodeJS 和事件驱动架构",
+ "title": "使用 Node.js 和事件驱动架构",
"intro": [
"了解 Node.js 核心库,如何在计算机上安装 Node.js,以及在后端使用 Node.js 的优缺点。"
]
@@ -7416,24 +7405,6 @@
""
]
},
- "lecture-understanding-rest-api-and-web-services": {
- "title": "理解 REST API 和网络服务",
- "intro": [
- "在这些课程中,你将学习 REST API 和网络服务,以及它们如何让不同应用通过互联网相互通信。"
- ]
- },
- "workshop-build-a-weather-service-api": {
- "title": "创建天气服务 API",
- "intro": [
- "你将通过构建天气服务 API 学习路由参数和使用 express.Router 进行模块化路由。"
- ]
- },
- "lab-timestamp-microservice": {
- "title": "创建时间戳微服务",
- "intro": [
- "通过创建时间戳微服务,练习构建带有日期解析逻辑的 RESTful API。"
- ]
- },
"lecture-working-with-express": {
"title": "使用 Express",
"intro": [
@@ -7453,16 +7424,10 @@
"你将通过构建随机笑话应用学习基本的 Express 路由和响应方法。"
]
},
- "lab-personal-profile-app": {
- "title": "创建个人资料应用",
- "intro": [
- "通过创建个人资料应用,练习构建 Express 服务器和 JSON API。"
- ]
- },
"review-introduction-to-express": {
"title": "Express 入门复习",
"intro": [
- "在参加测验前复习网络服务、REST、微服务和 Express.js 路由。"
+ "在参加测验前,复习 Express.js、路由、响应方法和静态文件服务。"
]
},
"quiz-introduction-to-express": {
@@ -7471,28 +7436,10 @@
"测试你对网络服务、REST、微服务、Express.js 和路由的知识。"
]
},
- "lecture-understanding-error-handling-and-health-checks": {
- "title": "理解错误处理和健康检查",
- "intro": [
- "在这些课程中,你将学习 Express 中的错误处理和健康检查。"
- ]
- },
- "workshop-build-a-bank-api": {
- "title": "创建银行 API",
- "intro": [
- "你将通过构建银行 API 学习 Express 5 的错误处理、健康检查和优雅关闭。"
- ]
- },
- "review-error-handling-in-express": {
- "title": "Express 中的错误处理复习",
- "intro": [
- "在参加测验前复习 HTTP 状态码、错误处理、调试、日志记录、健康检查和优雅关闭。"
- ]
- },
- "quiz-error-handling-in-express": {
- "title": "Express 中的错误处理测验",
+ "lab-personal-profile-app": {
+ "title": "创建个人资料应用",
"intro": [
- "测试你对 HTTP 状态码、错误处理、调试、日志记录、健康检查和优雅关闭的知识。"
+ "通过创建个人资料应用,练习构建 Express 服务器和 JSON API。"
]
},
"lecture-express-middleware": {
@@ -7525,6 +7472,54 @@
"测试你对 Express 中间件的知识,包括应用级、路由级、错误处理以及内置和第三方中间件。"
]
},
+ "lecture-understanding-rest-api-and-web-services": {
+ "title": "理解 REST API 和网络服务",
+ "intro": [
+ "在这些课程中,你将学习 REST API 和网络服务,以及它们如何让不同应用通过互联网相互通信。"
+ ]
+ },
+ "workshop-build-a-weather-service-api": {
+ "title": "创建天气服务 API",
+ "intro": [
+ "你将通过构建天气服务 API 学习路由参数和使用 express.Router 进行模块化路由。"
+ ]
+ },
+ "review-rest-api-and-web-services": {
+ "title": "REST API 和网络服务复习",
+ "intro": [
+ "复习网络服务、REST 架构、超文本传输协议状态码和微服务。"
+ ]
+ },
+ "lab-timestamp-microservice": {
+ "title": "创建时间戳微服务",
+ "intro": [
+ "通过创建时间戳微服务,练习构建带有日期解析逻辑的 RESTful API。"
+ ]
+ },
+ "lecture-understanding-error-handling-and-health-checks": {
+ "title": "理解错误处理和健康检查",
+ "intro": [
+ "在这些课程中,你将学习 Express 中的错误处理和健康检查。"
+ ]
+ },
+ "workshop-build-a-bank-api": {
+ "title": "创建银行 API",
+ "intro": [
+ "你将通过构建银行 API 学习 Express 5 的错误处理、健康检查和优雅关闭。"
+ ]
+ },
+ "review-error-handling-in-express": {
+ "title": "Express 中的错误处理复习",
+ "intro": [
+ "在参加测验前复习 HTTP 状态码、错误处理、调试、日志记录、健康检查和优雅关闭。"
+ ]
+ },
+ "quiz-error-handling-in-express": {
+ "title": "Express 中的错误处理测验",
+ "intro": [
+ "测试你对 HTTP 状态码、错误处理、调试、日志记录、健康检查和优雅关闭的知识。"
+ ]
+ },
"lecture-understanding-websockets": {
"title": "理解 WebSockets",
"intro": [
@@ -8427,7 +8422,7 @@
"title": "设计咖啡馆菜单",
"intro": [
"CSS告诉浏览器如何显示你的网页。你可以使用CSS设置HTML元素的颜色、字体、大小及其他方面。",
- "在本工作坊中,你将通过设计咖啡馆网页的菜单页面来学习CSS。"
+ "在本工作坊中,你将通过设计咖啡馆菜单页面来学习 CSS。"
]
},
"lab-business-card": {
@@ -9695,7 +9690,7 @@
"title": "设计咖啡馆菜单",
"intro": [
"CSS 告诉浏览器如何显示你的网页。你可以用 CSS 设置 HTML 元素的颜色、字体、大小等。",
- "在本工作坊中,你将通过设计咖啡馆网页的菜单页面来学习 CSS。"
+ "在本工作坊中,你将通过设计咖啡馆菜单页面来学习 CSS。"
]
},
"lab-business-card": {
diff --git a/client/chinese/translations.json b/client/chinese/translations.json
index 305eed5ba09..aa737927629 100644
--- a/client/chinese/translations.json
+++ b/client/chinese/translations.json
@@ -558,6 +558,12 @@
"running-tests": "// 正在运行测试",
"tests-completed": "// 测试完成",
"console-output": "// 控制台输出",
+ "unavailable-local-resource": "装载资源失败:“{{source}}”不是可用的局部的{{resourceType}}文件。请使用:{{allowedSources}}。",
+ "unavailable-local-resource-no-allowed": "装载资源失败:“{{source}}”不是此挑战中可用的局部的{{resourceType}}文件。",
+ "local-resource-type": {
+ "stylesheet": "样式表",
+ "script": "脚本"
+ },
"example-app": "构建一个功能上类似于<0>此示例项目0>的应用。尽量不要拷贝示例项目,展现你自己的风格。",
"syntax-error": "你的代码在测试运行前引起了误差。请修正后重试。",
"indentation-error": "你的代码有缩排误差。你可能需要在新行添加pass以形成有效的代码块。",
@@ -656,25 +662,6 @@
"sub-step-7": "点击 <0>添加密钥0> 按钮",
"summary": "Codespaces 设置"
},
- "ona": {
- "intro": "本课程在使用 Ona 的虚拟 Linux 机器中运行。请按照以下说明开始课程:",
- "step-1": "<0>创建一个 Ona 账号0>(如果你还没有)",
- "step-2": "点击下面的开始按钮",
- "step-3": "在弹出的模态框中点击创建按钮",
- "step-4": "虚拟 Linux 机器装载完成后,通过以下步骤启动 CodeRoad 扩展:",
- "step-5": "点击 VSCode 窗口左上角附近的“汉堡”菜单,",
- "step-6": "进入 <0>视图0> 菜单,",
- "step-7": "点击 <0>命令面板0> 选项,",
- "step-8": "运行 <0>CodeRoad: Start0> 命令",
- "step-9": "按照 CodeRoad 中的指示完成课程",
- "continue-project": "点击下面的开始按钮将启动一个新项目。如果你之前开始过 {{course}} 课程,请前往 <0>你的 Ona 仪表盘0>继续。",
- "learn-more": "了解更多关于 <0>Ona 工作区0> 的信息。",
- "logout-warning": "如果你在完成整个 {{course}} 课程前退出 freeCodeCamp,进度将不会保存到你的 freeCodeCamp 账号。",
- "sub-step-3": "导航到你的 <0>Ona 密钥页面0>",
- "sub-step-4": "创建一个名为 <0>CODEROAD_WEBHOOK_TOKEN0> 的新密钥",
- "sub-step-5": "在 <0>密钥0> 字段中粘贴你的令牌",
- "summary": "Ona 设置"
- },
"freecodecamp-os": {
"token-modal": "当你运行课程时,会弹出一个模态窗口,要求输入你的用户令牌。将你上面复制的令牌粘贴进去。每个环境只需操作一次。",
"local": {
@@ -697,16 +684,6 @@
"step-5": "完成后会打开 Simple Browser。如果是空白白页,请使用刷新按钮更新,查看课程主页。",
"step-6": "点击一个可用项目开始,然后按照项目中的说明完成它。",
"continue-project": "点击下面的开始按钮将启动新机器。如果你之前启动过 {{title}} 课程,请前往 <0>仓库页面0> 重新打开之前的工作区。"
- },
- "ona": {
- "intro": "本课程在虚拟 Linux 机器中运行,使用 Ona 和 freeCodeCamp - Courses VS Code 扩展。按照以下说明开始课程:",
- "step-1": "<0>如果你还没有,请创建一个 Ona 账户0>",
- "step-2": "点击下面的开始按钮",
- "step-3": "在弹出的模态窗口中,点击创建按钮",
- "step-4": "虚拟 Linux 机器装载完成后,打开命令面板,运行 <0>freeCodeCamp: Run Course0> 命令",
- "step-5": "完成后会打开 Simple Browser。如果是空白白页,请使用刷新按钮更新,查看课程主页。",
- "step-6": "点击一个可用项目开始,然后按照项目中的说明完成它。",
- "continue-project": "点击下面的开始按钮将启动新机器。如果你之前启动过 {{course}} 课程,请前往 <0>你的 Ona 仪表盘0> 继续。"
}
},
"local": {
diff --git a/client/espanol/intro.json b/client/espanol/intro.json
index c5834f6a8fb..a008d9e5cca 100644
--- a/client/espanol/intro.json
+++ b/client/espanol/intro.json
@@ -1352,12 +1352,6 @@
"En este taller de 140 lecciones, completarás tu base de datos de estudiantes mientras profundizas en los comandos SQL."
]
},
- "lab-world-cup-database": {
- "title": "Crear una base de datos de la Copa Mundial",
- "intro": [
- "Para este proyecto, crearás un script Bash que ingrese información de partidos de la Copa Mundial en PostgreSQL, luego consultarás la base de datos para obtener estadísticas útiles."
- ]
- },
"workshop-kitty-ipsum-translator": {
"title": "Crear un traductor de Kitty Ipsum",
"intro": [
@@ -1371,6 +1365,12 @@
"En este taller de 210 lecciones, crearás un programa Bash interactivo que almacena información de alquiler para tu tienda de bicicletas usando PostgreSQL."
]
},
+ "lab-world-cup-database": {
+ "title": "Crear una base de datos de la Copa Mundial",
+ "intro": [
+ "Para este proyecto, crearás un script Bash que ingrese información de partidos de la Copa Mundial en PostgreSQL, luego consultarás la base de datos para obtener estadísticas útiles."
+ ]
+ },
"lab-salon-appointment-scheduler": {
"title": "Crear un programador de citas para salón",
"intro": [
@@ -2669,6 +2669,13 @@
"Practicarás condicionales para determinar la calificación del estudiante según su puntaje."
]
},
+ "lab-story-fragment-restoration": {
+ "title": "Restaurar una narrativa coherente a partir de un arreglo de fragmentos de historia",
+ "intro": [
+ "En este laboratorio, restaurarás una narrativa coherente a partir de un arreglo corrupto de fragmentos de historia.",
+ "Practicarás el uso de ciclos implementando desde cero algoritmos fundamentales para arreglos."
+ ]
+ },
"lecture-the-var-keyword-and-hoisting": {
"title": "La palabra clave var y el hoisting",
"intro": [
@@ -3774,18 +3781,18 @@
"Aprende el modelo de caja CSS con este curso. Entiende cómo se renderizan los elementos en la web y aprende a manipular espacios, bordes y rellenos para lograr el diseño y estilo deseados."
]
},
- "top-introduction-to-flexbox": {
- "title": "Introducción a flexbox",
- "intro": [
- "Descubre el poder de Flexbox, un modelo de diseño que simplifica la creación de diseños web flexibles y adaptables. Aprende a crear estructuras de página dinámicas y adaptativas con facilidad."
- ]
- },
"top-learn-block-and-inline": {
"title": "Aprender la diferencia entre bloque y en línea",
"intro": [
"Explora las diferencias entre elementos de bloque y en línea en HTML y CSS. Este curso ofrece perspectivas sobre cómo estos tipos de visualización afectan el diseño y comportamiento, dándote el poder de tomar decisiones informadas de diseño."
]
},
+ "top-introduction-to-flexbox": {
+ "title": "Introducción a flexbox",
+ "intro": [
+ "Descubre el poder de Flexbox, un modelo de diseño que simplifica la creación de diseños web flexibles y adaptables. Aprende a crear estructuras de página dinámicas y adaptativas con facilidad."
+ ]
+ },
"top-learn-variables-and-operators": {
"title": "Aprender variables y operadores",
"intro": [
@@ -6287,12 +6294,6 @@
"Practicarás el uso de clases utilitarias de Tailwind CSS para diseños flexbox, colores, puntos de interrupción y más."
]
},
- "lab-photography-exhibit": {
- "title": "Diseñar una exhibición de fotografía",
- "intro": [
- "En este laboratorio, practicarás el uso de Tailwind CSS diseñando una página web para una exhibición de fotografía."
- ]
- },
"review-css-libraries-and-frameworks": {
"title": "Revisión de librerías y frameworks CSS",
"intro": [
@@ -6306,6 +6307,12 @@
"Pon a prueba lo que has aprendido sobre librerías y frameworks CSS con este quiz."
]
},
+ "lab-photography-exhibit": {
+ "title": "Diseñar una exhibición de fotografía",
+ "intro": [
+ "En este laboratorio, practicarás el uso de Tailwind CSS diseñando una página web para una exhibición de fotografía."
+ ]
+ },
"lecture-introduction-to-typescript": {
"title": "Introducción a TypeScript",
"intro": [
@@ -6372,18 +6379,6 @@
"En este taller, continuarás practicando con TypeScript construyendo una app de adivinación."
]
},
- "lab-flashcard-quiz-app": {
- "title": "Construir una app de quiz con tarjetas",
- "intro": [
- "En este laboratorio, practicarás usando TypeScript construyendo una app de quiz con tarjetas."
- ]
- },
- "lab-digital-pet-game": {
- "title": "Construir un juego de mascota digital",
- "intro": [
- "En este laboratorio, practicarás lo que aprendiste sobre TypeScript y React construyendo un juego de mascota digital."
- ]
- },
"workshop-build-a-football-player-card-builder": {
"title": "Construir un creador de tarjetas de jugadores de fútbol",
"intro": [
@@ -6401,6 +6396,18 @@
"title": "Quiz de TypeScript",
"intro": ["Pon a prueba lo que aprendiste sobre TypeScript con este quiz."]
},
+ "lab-flashcard-quiz-app": {
+ "title": "Construir una app de quiz con tarjetas",
+ "intro": [
+ "En este laboratorio, practicarás usando TypeScript construyendo una app de quiz con tarjetas."
+ ]
+ },
+ "lab-digital-pet-game": {
+ "title": "Construir un juego de mascota digital",
+ "intro": [
+ "En este laboratorio, practicarás lo que aprendiste sobre TypeScript y React construyendo un juego de mascota digital."
+ ]
+ },
"review-front-end-libraries": {
"title": "Revisión de bibliotecas front-end",
"intro": [
@@ -7176,12 +7183,12 @@
"node-package-manager": "Administrador de paquetes de Node",
"lab-prime-number-checker-module": "Crear un módulo para verificar números primos",
"http-and-the-web-standards-model": "HTTP y el modelo de estándares web",
- "rest-api-and-web-services": "API REST y servicios web",
- "lab-timestamp-microservice": "Crear un microservicio de marcas de tiempo",
"introduction-to-express": "Introducción a Express",
"lab-personal-profile-app": "Crear una app de perfil personal",
- "error-handling-in-express": "Manejo de errores en Express",
"express-middleware": "Middleware en Express",
+ "rest-api-and-web-services": "API REST y servicios web",
+ "lab-timestamp-microservice": "Crear un microservicio de marcas de tiempo",
+ "error-handling-in-express": "Manejo de errores en Express",
"websockets": "WebSockets",
"lab-chat-app": "Crear una app de chat",
"security-and-privacy": "Seguridad y privacidad",
@@ -7192,109 +7199,91 @@
},
"module-intros": {
"introduction-to-nodejs": {
- "note": "Disponible a finales de 2026",
"intro": [
"En este módulo, aprenderás los conceptos básicos para trabajar con Node.js."
]
},
"nodejs-core-modules": {
- "note": "Disponible a finales de 2026",
"intro": [
"En este módulo, aprenderás sobre los módulos principales comunes de Node.js, incluyendo fs, os, path y más. Luego practicarás lo aprendido mediante talleres y laboratorios y pondrás a prueba tus conocimientos con un quiz corto."
]
},
"node-package-manager": {
- "note": "Disponible a finales de 2026",
"intro": [
"En este módulo, te presentarán el administrador de paquetes de Node, que los desarrolladores usan para gestionar las dependencias y scripts del proyecto. Luego practicarás lo aprendido con talleres y laboratorios y evaluarás tus conocimientos con un quiz corto."
]
},
"lab-prime-number-checker-module": {
- "note": "Disponible a finales de 2026",
"intro": [
"Practica crear y exportar un módulo npm creando un verificador de números primos."
]
},
"http-and-the-web-standards-model": {
- "note": "Disponible a finales de 2026",
"intro": [
"En este módulo, aprenderás sobre HTTP (Protocolo de transferencia de hipertexto) y otros conceptos importantes como el modelo solicitud-respuesta, códigos de respuesta comunes, DNS, TCP/IP y más. Luego practicarás lo aprendido construyendo tu propio servidor web en un taller y pondrás a prueba tus conocimientos con un quiz corto."
]
},
- "rest-api-and-web-services": {
- "note": "Disponible a finales de 2026",
+ "introduction-to-express": {
"intro": [
- "En este módulo, aprenderás sobre la API REST (interfaz de programación de aplicaciones de transferencia de estado representacional) y cómo funcionan los microservicios. Luego realizarás un quiz corto para evaluar tus conocimientos."
+ "En este módulo, te presentarán Express.js, un framework usado para construir APIs RESTful. Luego practicarás tus habilidades con talleres y laboratorios y evaluarás tus conocimientos con un quiz corto."
]
},
- "lab-timestamp-microservice": {
- "note": "Disponible a finales de 2026",
+ "lab-personal-profile-app": {
"intro": [
- "Practica crear una API REST con lógica para analizar fechas creando un microservicio de marcas de tiempo."
+ "Practica crear un servidor Express y una API JSON creando una aplicación de perfil personal."
]
},
- "introduction-to-express": {
- "note": "Disponible a finales de 2026",
+ "express-middleware": {
"intro": [
- "En este módulo, te presentarán Express.js, un framework usado para construir APIs RESTful. Luego practicarás tus habilidades con talleres y laboratorios y evaluarás tus conocimientos con un quiz corto."
+ "En este módulo, aprenderás sobre middleware en Express.js, que se usa para manejar solicitudes y respuestas entre el cliente y el servidor. Luego practicarás tus habilidades mediante un taller y un laboratorio y evaluarás tus conocimientos con un quiz corto."
]
},
- "lab-personal-profile-app": {
- "note": "Disponible a finales de 2026",
+ "rest-api-and-web-services": {
"intro": [
- "Practica crear un servidor Express y una API JSON creando una aplicación de perfil personal."
+ "En este módulo, aprenderás sobre la API REST (interfaz de programación de aplicaciones de transferencia de estado representacional) y cómo funcionan los microservicios. Luego realizarás un quiz corto para evaluar tus conocimientos."
]
},
- "error-handling-in-express": {
- "note": "Disponible a finales de 2026",
+ "lab-timestamp-microservice": {
"intro": [
- "En este módulo, aprenderás cómo funciona el manejo de errores, la depuración y las comprobaciones de salud en Express.js. Luego practicarás lo aprendido en un laboratorio y evaluarás tus conocimientos con un quiz corto."
+ "Practica crear una API REST con lógica para analizar fechas creando un microservicio de marcas de tiempo."
]
},
- "express-middleware": {
- "note": "Disponible a finales de 2026",
+ "error-handling-in-express": {
"intro": [
- "En este módulo, aprenderás sobre middleware en Express.js, que se usa para manejar solicitudes y respuestas entre el cliente y el servidor. Luego practicarás tus habilidades mediante un taller y un laboratorio y evaluarás tus conocimientos con un quiz corto."
+ "En este módulo, aprenderás cómo funciona el manejo de errores, la depuración y las comprobaciones de salud en Express.js. Luego practicarás lo aprendido en un laboratorio y evaluarás tus conocimientos con un quiz corto."
]
},
"websockets": {
- "note": "Disponible a finales de 2026",
"intro": [
"En este módulo, te presentarán los websockets, un protocolo usado para la comunicación en tiempo real entre cliente y servidor. Luego practicarás lo aprendido en laboratorios y talleres y evaluarás tus conocimientos con un quiz corto."
]
},
"lab-chat-app": {
- "note": "Disponible a finales de 2026",
"intro": [
"Practica crear un servidor de chat en tiempo real para múltiples clientes usando WebSockets de Node.js."
]
},
"security-and-privacy": {
- "note": "Disponible a finales de 2026",
"intro": [
"En este módulo, aprenderás las diferencias entre seguridad y privacidad, así como otros conceptos como CSPs, políticas de permisos, PII, trabajar con CORS y más. Luego realizarás un quiz corto para evaluar tus conocimientos."
]
},
"authentication": {
- "note": "Disponible a finales de 2026",
"intro": [
"En este módulo, aprenderás cómo funciona la autenticación en aplicaciones web junto con otros conceptos importantes como JWTs, CSRFs, Passport, Helmet, criptografía y encriptación, y más. Luego practicarás lo aprendido en laboratorios y talleres y evaluarás tus conocimientos con un quiz corto."
]
},
"lab-family-movie-watchlist-api": {
- "note": "Disponible a finales de 2026",
"intro": [
"Practica implementar autenticación y autorización en una aplicación Express creando una API para lista de películas familiar."
]
},
"back-end-development-and-apis-certification-exam": {
- "note": "Disponible a finales de 2026",
"intro": [
"Aprueba este examen para obtener tu certificación en desarrollo back-end y APIs."
]
},
"review-back-end-development-and-apis": {
- "note": "Disponible a finales de 2026",
"intro": [
"Revisa los conceptos de desarrollo back-end y APIs para prepararte para el próximo examen."
]
@@ -7302,7 +7291,7 @@
},
"blocks": {
"lecture-working-with-nodejs-and-event-driven-architecture": {
- "title": "Trabajando con NodeJS y arquitectura orientada a eventos",
+ "title": "Trabajar con Node.js y arquitectura orientada a eventos",
"intro": [
"Aprende sobre las bibliotecas principales de Node.js, cómo instalar Node.js en tu computadora y las ventajas y desventajas de usar Node.js en el back-end."
]
@@ -7416,24 +7405,6 @@
""
]
},
- "lecture-understanding-rest-api-and-web-services": {
- "title": "Entendiendo la API REST y los servicios web",
- "intro": [
- "En estas lecciones, aprenderás sobre las APIs REST y los servicios web, y cómo permiten que diferentes aplicaciones se comuniquen entre sí a través de internet."
- ]
- },
- "workshop-build-a-weather-service-api": {
- "title": "Crear una API de servicio meteorológico",
- "intro": [
- "Aprenderás sobre parámetros de ruta y enrutamiento modular con express.Router creando una API de servicio meteorológico."
- ]
- },
- "lab-timestamp-microservice": {
- "title": "Construye un microservicio de marca de tiempo",
- "intro": [
- "Practica construir una API RESTful con lógica de análisis de fechas creando un microservicio de marca de tiempo."
- ]
- },
"lecture-working-with-express": {
"title": "Trabajando con Express",
"intro": [
@@ -7453,16 +7424,10 @@
"Aprenderás enrutamiento básico de Express y métodos de respuesta creando una app de chistes aleatorios."
]
},
- "lab-personal-profile-app": {
- "title": "Construye una app de perfil personal",
- "intro": [
- "Practica construir un servidor Express y una API JSON creando una aplicación de perfil personal."
- ]
- },
"review-introduction-to-express": {
"title": "Revisión de introducción a Express",
"intro": [
- "Revisa servicios web, REST, microservicios y enrutamiento de Express.js antes de hacer el quiz."
+ "Revisa Express.js, el enrutamiento, los métodos de respuesta y cómo servir archivos estáticos antes de hacer el quiz."
]
},
"quiz-introduction-to-express": {
@@ -7471,28 +7436,10 @@
"Pon a prueba tus conocimientos sobre servicios web, REST, microservicios, Express.js y enrutamiento."
]
},
- "lecture-understanding-error-handling-and-health-checks": {
- "title": "Entendiendo el manejo de errores y chequeos de salud",
- "intro": [
- "En estas lecciones, aprenderás sobre el manejo de errores y chequeos de salud en Express."
- ]
- },
- "workshop-build-a-bank-api": {
- "title": "Crear una API bancaria",
- "intro": [
- "Aprenderás manejo de errores en Express 5, chequeos de estado y cierres ordenados creando una API bancaria."
- ]
- },
- "review-error-handling-in-express": {
- "title": "Revisión de manejo de errores en Express",
- "intro": [
- "Revisa códigos de estado HTTP, manejo de errores, depuración, registro, chequeos de salud y cierres ordenados antes de hacer el quiz."
- ]
- },
- "quiz-error-handling-in-express": {
- "title": "Quiz de manejo de errores en Express",
+ "lab-personal-profile-app": {
+ "title": "Construye una app de perfil personal",
"intro": [
- "Pon a prueba tus conocimientos sobre códigos de estado HTTP, manejo de errores, depuración, registro, chequeos de salud y cierres ordenados."
+ "Practica construir un servidor Express y una API JSON creando una aplicación de perfil personal."
]
},
"lecture-express-middleware": {
@@ -7525,6 +7472,54 @@
"Pon a prueba tus conocimientos sobre middleware de Express, incluyendo middleware a nivel de aplicación, a nivel de enrutador, para manejo de errores, y middleware integrado y de terceros."
]
},
+ "lecture-understanding-rest-api-and-web-services": {
+ "title": "Entendiendo la API REST y los servicios web",
+ "intro": [
+ "En estas lecciones, aprenderás sobre las APIs REST y los servicios web, y cómo permiten que diferentes aplicaciones se comuniquen entre sí a través de internet."
+ ]
+ },
+ "workshop-build-a-weather-service-api": {
+ "title": "Crear una API de servicio meteorológico",
+ "intro": [
+ "Aprenderás sobre parámetros de ruta y enrutamiento modular con express.Router creando una API de servicio meteorológico."
+ ]
+ },
+ "review-rest-api-and-web-services": {
+ "title": "Revisión de API REST y servicios web",
+ "intro": [
+ "Revisa los servicios web, la arquitectura REST, los códigos de estado HTTP y los microservicios."
+ ]
+ },
+ "lab-timestamp-microservice": {
+ "title": "Construye un microservicio de marca de tiempo",
+ "intro": [
+ "Practica construir una API RESTful con lógica de análisis de fechas creando un microservicio de marca de tiempo."
+ ]
+ },
+ "lecture-understanding-error-handling-and-health-checks": {
+ "title": "Entendiendo el manejo de errores y chequeos de salud",
+ "intro": [
+ "En estas lecciones, aprenderás sobre el manejo de errores y chequeos de salud en Express."
+ ]
+ },
+ "workshop-build-a-bank-api": {
+ "title": "Crear una API bancaria",
+ "intro": [
+ "Aprenderás manejo de errores en Express 5, chequeos de estado y cierres ordenados creando una API bancaria."
+ ]
+ },
+ "review-error-handling-in-express": {
+ "title": "Revisión de manejo de errores en Express",
+ "intro": [
+ "Revisa códigos de estado HTTP, manejo de errores, depuración, registro, chequeos de salud y cierres ordenados antes de hacer el quiz."
+ ]
+ },
+ "quiz-error-handling-in-express": {
+ "title": "Quiz de manejo de errores en Express",
+ "intro": [
+ "Pon a prueba tus conocimientos sobre códigos de estado HTTP, manejo de errores, depuración, registro, chequeos de salud y cierres ordenados."
+ ]
+ },
"lecture-understanding-websockets": {
"title": "Entendiendo WebSockets",
"intro": [
@@ -8427,7 +8422,7 @@
"title": "Diseñar un menú de café",
"intro": [
"CSS indica al navegador cómo mostrar tu página web. Puedes usar CSS para establecer el color, la fuente, el tamaño y otros aspectos de los elementos HTML.",
- "En este taller aprenderás CSS diseñando una página de menú para una página web de café."
+ "En este taller, aprenderás CSS diseñando una página de menú para un café."
]
},
"lab-business-card": {
@@ -9695,7 +9690,7 @@
"title": "Diseña un menú para un café",
"intro": [
"CSS le dice al navegador cómo mostrar tu página web. Puedes usar CSS para establecer el color, la fuente, el tamaño y otros aspectos de los elementos HTML.",
- "En este taller aprenderás CSS diseñando una página de menú para un sitio web de un café."
+ "En este taller, aprenderás CSS diseñando una página de menú para un café."
]
},
"lab-business-card": {
diff --git a/client/espanol/translations.json b/client/espanol/translations.json
index 766d1984f32..764ca2dee50 100644
--- a/client/espanol/translations.json
+++ b/client/espanol/translations.json
@@ -558,6 +558,12 @@
"running-tests": "// ejecutando pruebas",
"tests-completed": "// pruebas completadas",
"console-output": "// salida de consola",
+ "unavailable-local-resource": "No se pudo cargar el recurso: \"{{source}}\" no es un archivo local {{resourceType}} disponible. Usa: {{allowedSources}}.",
+ "unavailable-local-resource-no-allowed": "No se pudo cargar el recurso: \"{{source}}\" no es un archivo local {{resourceType}} disponible en este desafío.",
+ "local-resource-type": {
+ "stylesheet": "hoja de estilos",
+ "script": "script"
+ },
"example-app": "Construye una app que sea funcionalmente similar a <0>este proyecto de ejemplo0>. Trata de no copiar el proyecto de ejemplo, dale tu propio estilo personal.",
"syntax-error": "Tu código generó un error antes de que se pudieran ejecutar las pruebas. Por favor, corrígelo y vuelve a intentarlo.",
"indentation-error": "Tu código tiene un error de indentación. Puede que necesites agregar pass en una nueva línea para formar un bloque de código válido.",
@@ -656,25 +662,6 @@
"sub-step-7": "Haz clic en el botón <0>Agregar secreto0>",
"summary": "Configuración de Codespaces"
},
- "ona": {
- "intro": "Este curso se ejecuta en una máquina virtual Linux usando Ona. Sigue estas instrucciones para comenzar el curso:",
- "step-1": "<0>Crea una cuenta de Ona0> si no tienes una",
- "step-2": "Haz clic en el botón de inicio abajo",
- "step-3": "En el modal que aparece, haz clic en el botón crear",
- "step-4": "Una vez que la máquina virtual Linux termine de cargar, inicia la extensión CodeRoad haciendo lo siguiente:",
- "step-5": "Haz clic en el menú \"hamburguesa\" cerca de la esquina superior izquierda de la ventana de VSCode,",
- "step-6": "Ve al menú <0>Ver0>,",
- "step-7": "Haz clic en la opción <0>Paleta de comandos0>,",
- "step-8": "y ejecuta el comando <0>CodeRoad: Start0>",
- "step-9": "Sigue las instrucciones en CodeRoad para completar el curso",
- "continue-project": "Hacer clic en el botón de inicio abajo iniciará un nuevo proyecto. Si ya comenzaste el curso {{course}}, ve a <0>tu panel de Ona0> para continuar.",
- "learn-more": "Aprende más sobre los <0>espacios de trabajo de Ona.0>",
- "logout-warning": "Si cierras sesión en freeCodeCamp antes de completar todo el curso {{course}}, tu progreso no se guardará en tu cuenta de freeCodeCamp.",
- "sub-step-3": "Navega a tu <0>página de secretos de Ona0>",
- "sub-step-4": "Crea un nuevo secreto llamado <0>CODEROAD_WEBHOOK_TOKEN0>",
- "sub-step-5": "En el campo <0>Secreto0>, pega tu token",
- "summary": "Configuración de Ona"
- },
"freecodecamp-os": {
"token-modal": "Cuando ejecutes el curso, aparecerá un modal pidiendo tu token de usuario. Pega el token que copiaste arriba. Solo necesitas hacerlo una vez por entorno.",
"local": {
@@ -697,16 +684,6 @@
"step-5": "Se abrirá el navegador Simple cuando termine. Si ves una página blanca en blanco, usa el botón de actualizar para verla y acceder a la página principal del curso.",
"step-6": "Haz clic en uno de los proyectos disponibles para iniciarlo y luego sigue las instrucciones del proyecto para completarlo.",
"continue-project": "Hacer clic en el botón de inicio abajo iniciará una nueva máquina. Si ya comenzaste el curso {{title}}, ve a la <0>página del repositorio0> para reabrir un espacio de trabajo anterior."
- },
- "ona": {
- "intro": "Este curso se ejecuta en una máquina virtual Linux usando Ona y la extensión freeCodeCamp - Courses para VS Code. Sigue estas instrucciones para iniciar el curso:",
- "step-1": "<0>Crea una cuenta de Ona0> si no tienes una",
- "step-2": "Haz clic en el botón de inicio abajo",
- "step-3": "En el modal que aparece, haz clic en el botón de crear",
- "step-4": "Cuando la máquina virtual Linux termine de cargar, abre la paleta de comandos y ejecuta el comando <0>freeCodeCamp: Run Course0>",
- "step-5": "Se abrirá el navegador Simple cuando termine. Si ves una página blanca en blanco, usa el botón de actualizar para verla y acceder a la página principal del curso.",
- "step-6": "Haz clic en uno de los proyectos disponibles para iniciarlo y luego sigue las instrucciones del proyecto para completarlo.",
- "continue-project": "Hacer clic en el botón de inicio abajo iniciará una nueva máquina. Si ya comenzaste el curso {{course}}, ve a <0>tu panel de Ona0> para continuar."
}
},
"local": {
diff --git a/client/german/intro.json b/client/german/intro.json
index 1a7bce26d16..e2756858f75 100644
--- a/client/german/intro.json
+++ b/client/german/intro.json
@@ -1352,12 +1352,6 @@
"In diesem 140-Lektionen-Workshop vervollständigen Sie Ihre Studentendatenbank und vertiefen Ihre Kenntnisse in SQL-Befehlen."
]
},
- "lab-world-cup-database": {
- "title": "Erstellen einer Weltcup-Datenbank",
- "intro": [
- "Für dieses Projekt erstellen Sie ein Bash-Skript, das Informationen von Weltcup-Spielen in PostgreSQL eingibt und dann die Datenbank nach nützlichen Statistiken abfragt."
- ]
- },
"workshop-kitty-ipsum-translator": {
"title": "Erstellen eines Kitty-Ipsum-Übersetzers",
"intro": [
@@ -1371,6 +1365,12 @@
"In diesem 210-Lektionen-Workshop erstellen Sie ein interaktives Bash-Programm, das Mietinformationen für Ihren Fahrradverleihshop mit PostgreSQL speichert."
]
},
+ "lab-world-cup-database": {
+ "title": "Erstellen einer Weltcup-Datenbank",
+ "intro": [
+ "Für dieses Projekt erstellen Sie ein Bash-Skript, das Informationen von Weltcup-Spielen in PostgreSQL eingibt und dann die Datenbank nach nützlichen Statistiken abfragt."
+ ]
+ },
"lab-salon-appointment-scheduler": {
"title": "Erstellen eines Terminplaners für einen Salon",
"intro": [
@@ -2669,6 +2669,13 @@
"Sie üben bedingte Anweisungen, um die Note eines Schülers basierend auf seiner Punktzahl zu bestimmen."
]
},
+ "lab-story-fragment-restoration": {
+ "title": "Stellen Sie eine zusammenhängende Erzählung aus einem Array von Storyfragmenten wieder her",
+ "intro": [
+ "In diesem Workshop stellen Sie eine zusammenhängende Erzählung aus einem beschädigten Array von Storyfragmenten wieder her.",
+ "Sie üben den Umgang mit Schleifen, indem Sie grundlegende Array-Algorithmen von Grund auf implementieren."
+ ]
+ },
"lecture-the-var-keyword-and-hoisting": {
"title": "Das var-Schlüsselwort und Hoisting",
"intro": [
@@ -3774,18 +3781,18 @@
"Lernen Sie das CSS-Box-Modell mit diesem Kurs. Verstehen Sie, wie Elemente im Web gerendert werden, und lernen Sie, Abstände, Rahmen und Innenabstände zu manipulieren, um Ihr gewünschtes Layout und Design zu erreichen."
]
},
- "top-introduction-to-flexbox": {
- "title": "Einführung in Flexbox",
- "intro": [
- "Entdecken Sie die Kraft von Flexbox, einem Layout-Modell, das das Design flexibler und responsiver Weblayouts vereinfacht. Lernen Sie, dynamische und adaptive Seitenstrukturen mühelos zu erstellen."
- ]
- },
"top-learn-block-and-inline": {
"title": "Den Unterschied zwischen Block und Inline lernen",
"intro": [
"Erkunden Sie die Unterschiede zwischen Block- und Inline-Elementen in HTML und CSS. Dieser Kurs bietet Einblicke, wie diese Anzeigearten Layout und Verhalten beeinflussen, sodass Sie fundierte Designentscheidungen treffen können."
]
},
+ "top-introduction-to-flexbox": {
+ "title": "Einführung in Flexbox",
+ "intro": [
+ "Entdecken Sie die Kraft von Flexbox, einem Layout-Modell, das das Design flexibler und responsiver Weblayouts vereinfacht. Lernen Sie, dynamische und adaptive Seitenstrukturen mühelos zu erstellen."
+ ]
+ },
"top-learn-variables-and-operators": {
"title": "Variablen und Operatoren lernen",
"intro": [
@@ -6287,12 +6294,6 @@
"Sie üben den Umgang mit Tailwind CSS Utility-Klassen für Flexbox-Layouts, Farben, Breakpoints und mehr."
]
},
- "lab-photography-exhibit": {
- "title": "Gestalten Sie eine Fotografie-Ausstellung",
- "intro": [
- "In diesem Labor üben Sie den Umgang mit Tailwind CSS, indem Sie eine Webseite für eine Fotografie-Ausstellung gestalten."
- ]
- },
"review-css-libraries-and-frameworks": {
"title": "Überblick über CSS-Bibliotheken und Frameworks",
"intro": [
@@ -6306,6 +6307,12 @@
"Testen Sie Ihr Wissen über CSS-Bibliotheken und Frameworks mit diesem Quiz."
]
},
+ "lab-photography-exhibit": {
+ "title": "Gestalten Sie eine Fotografie-Ausstellung",
+ "intro": [
+ "In diesem Labor üben Sie den Umgang mit Tailwind CSS, indem Sie eine Webseite für eine Fotografie-Ausstellung gestalten."
+ ]
+ },
"lecture-introduction-to-typescript": {
"title": "Einführung in TypeScript",
"intro": [
@@ -6372,18 +6379,6 @@
"In diesem Workshop üben Sie weiterhin den Umgang mit TypeScript, indem Sie eine Wahrsage-App erstellen."
]
},
- "lab-flashcard-quiz-app": {
- "title": "Erstellen Sie eine Lernkarten-Quiz-App",
- "intro": [
- "In diesem Labor üben Sie die Verwendung von TypeScript, indem Sie eine Lernkarten-Quiz-App erstellen."
- ]
- },
- "lab-digital-pet-game": {
- "title": "Erstellen Sie ein digitales Haustierspiel",
- "intro": [
- "In diesem Labor wenden Sie Ihr Wissen über TypeScript und React an, indem Sie ein digitales Haustierspiel erstellen."
- ]
- },
"workshop-build-a-football-player-card-builder": {
"title": "Erstellen Sie einen Fußballspieler-Karten-Generator",
"intro": [
@@ -6401,6 +6396,18 @@
"title": "TypeScript-Quiz",
"intro": ["Testen Sie Ihr Wissen über TypeScript mit diesem Quiz."]
},
+ "lab-flashcard-quiz-app": {
+ "title": "Erstellen Sie eine Lernkarten-Quiz-App",
+ "intro": [
+ "In diesem Labor üben Sie die Verwendung von TypeScript, indem Sie eine Lernkarten-Quiz-App erstellen."
+ ]
+ },
+ "lab-digital-pet-game": {
+ "title": "Erstellen Sie ein digitales Haustierspiel",
+ "intro": [
+ "In diesem Labor wenden Sie Ihr Wissen über TypeScript und React an, indem Sie ein digitales Haustierspiel erstellen."
+ ]
+ },
"review-front-end-libraries": {
"title": "Überblick über Front-End-Bibliotheken",
"intro": [
@@ -7176,12 +7183,12 @@
"node-package-manager": "Node Package Manager",
"lab-prime-number-checker-module": "Erstellen Sie ein Modul zum Prüfen von Primzahlen",
"http-and-the-web-standards-model": "HTTP und das Web-Standards-Modell",
- "rest-api-and-web-services": "REST API und Webservices",
- "lab-timestamp-microservice": "Erstellen Sie einen Zeitstempel-Mikroservice",
"introduction-to-express": "Einführung in Express",
"lab-personal-profile-app": "Erstellen Sie eine persönliche Profil-Anwendung",
- "error-handling-in-express": "Fehlerbehandlung in Express",
"express-middleware": "Express-Middleware",
+ "rest-api-and-web-services": "REST API und Webservices",
+ "lab-timestamp-microservice": "Erstellen Sie einen Zeitstempel-Mikroservice",
+ "error-handling-in-express": "Fehlerbehandlung in Express",
"websockets": "WebSockets",
"lab-chat-app": "Erstellen Sie eine Chat-Anwendung",
"security-and-privacy": "Sicherheit und Datenschutz",
@@ -7192,109 +7199,91 @@
},
"module-intros": {
"introduction-to-nodejs": {
- "note": "Verfügbar Ende 2026",
"intro": [
"In diesem Modul lernen Sie die Grundlagen der Arbeit mit Node.js."
]
},
"nodejs-core-modules": {
- "note": "Verfügbar Ende 2026",
"intro": [
"In diesem Modul lernen Sie gängige Node.js-Kernmodule wie fs, os, path und weitere kennen. Anschließend üben Sie das Gelernte in Workshops und Laboren und testen Ihr Wissen mit einem kurzen Quiz."
]
},
"node-package-manager": {
- "note": "Verfügbar Ende 2026",
"intro": [
"In diesem Modul lernen Sie den Node Package Manager kennen, mit dem Entwickler Projektabhängigkeiten und Skripte verwalten. Danach üben Sie das Gelernte in Workshops und Laboren und testen Ihr Wissen mit einem kurzen Quiz."
]
},
"lab-prime-number-checker-module": {
- "note": "Verfügbar Ende 2026",
"intro": [
"Üben Sie das Erstellen und Exportieren eines npm-Moduls, indem Sie einen Primzahlprüfer erstellen."
]
},
"http-and-the-web-standards-model": {
- "note": "Verfügbar Ende 2026",
"intro": [
"In diesem Modul lernen Sie HTTP (Hypertext Transfer Protocol) und weitere wichtige Konzepte wie das Anfrage-Antwort-Modell, gängige Antwortcodes, DNS, TCP/IP und mehr kennen. Anschließend bauen Sie in einem Workshop Ihren eigenen Webserver und testen Ihr Wissen mit einem kurzen Quiz."
]
},
- "rest-api-and-web-services": {
- "note": "Verfügbar Ende 2026",
+ "introduction-to-express": {
"intro": [
- "In diesem Modul lernen Sie die REST API (Representational State Transfer Application Programming Interface) und die Funktionsweise von Microservices kennen. Danach absolvieren Sie ein kurzes Quiz zur Wissensüberprüfung."
+ "In diesem Modul lernen Sie Express.js kennen, ein Framework zum Erstellen von RESTful APIs. Anschließend üben Sie Ihre Fähigkeiten in Workshops und Laboren und testen Ihr Wissen mit einem kurzen Quiz."
]
},
- "lab-timestamp-microservice": {
- "note": "Verfügbar Ende 2026",
+ "lab-personal-profile-app": {
"intro": [
- "Üben Sie das Erstellen einer RESTful-API mit Datumsanalyse, indem Sie einen Zeitstempel-Mikroservice erstellen."
+ "Üben Sie das Erstellen eines Express-Servers und einer JSON-API, indem Sie eine persönliche Profil-Anwendung erstellen."
]
},
- "introduction-to-express": {
- "note": "Verfügbar Ende 2026",
+ "express-middleware": {
"intro": [
- "In diesem Modul lernen Sie Express.js kennen, ein Framework zum Erstellen von RESTful APIs. Anschließend üben Sie Ihre Fähigkeiten in Workshops und Laboren und testen Ihr Wissen mit einem kurzen Quiz."
+ "In diesem Modul lernen Sie Middleware in Express.js kennen, die Anfragen und Antworten zwischen Client und Server verarbeitet. Anschließend üben Sie Ihre Fähigkeiten in einem Workshop und Labor und testen Ihr Wissen mit einem kurzen Quiz."
]
},
- "lab-personal-profile-app": {
- "note": "Verfügbar Ende 2026",
+ "rest-api-and-web-services": {
"intro": [
- "Üben Sie das Erstellen eines Express-Servers und einer JSON-API, indem Sie eine persönliche Profil-Anwendung erstellen."
+ "In diesem Modul lernen Sie die REST API (Representational State Transfer Application Programming Interface) und die Funktionsweise von Microservices kennen. Danach absolvieren Sie ein kurzes Quiz zur Wissensüberprüfung."
]
},
- "error-handling-in-express": {
- "note": "Verfügbar Ende 2026",
+ "lab-timestamp-microservice": {
"intro": [
- "In diesem Modul lernen Sie, wie Fehlerbehandlung, Debugging und Gesundheitschecks in Express.js funktionieren. Danach üben Sie das Gelernte in einem Labor und testen Ihr Wissen mit einem kurzen Quiz."
+ "Üben Sie das Erstellen einer RESTful-API mit Datumsanalyse, indem Sie einen Zeitstempel-Mikroservice erstellen."
]
},
- "express-middleware": {
- "note": "Verfügbar Ende 2026",
+ "error-handling-in-express": {
"intro": [
- "In diesem Modul lernen Sie Middleware in Express.js kennen, die Anfragen und Antworten zwischen Client und Server verarbeitet. Anschließend üben Sie Ihre Fähigkeiten in einem Workshop und Labor und testen Ihr Wissen mit einem kurzen Quiz."
+ "In diesem Modul lernen Sie, wie Fehlerbehandlung, Debugging und Gesundheitschecks in Express.js funktionieren. Danach üben Sie das Gelernte in einem Labor und testen Ihr Wissen mit einem kurzen Quiz."
]
},
"websockets": {
- "note": "Verfügbar Ende 2026",
"intro": [
"In diesem Modul lernen Sie WebSockets kennen, ein Protokoll für die Echtzeitkommunikation zwischen Client und Server. Danach üben Sie das Gelernte in Laboren und Workshops und testen Ihr Wissen mit einem kurzen Quiz."
]
},
"lab-chat-app": {
- "note": "Verfügbar Ende 2026",
"intro": [
"Üben Sie das Erstellen eines Echtzeit-Chatservers mit mehreren Clients unter Verwendung von Node.js-WebSockets."
]
},
"security-and-privacy": {
- "note": "Verfügbar Ende 2026",
"intro": [
"In diesem Modul lernen Sie die Unterschiede zwischen Sicherheit und Datenschutz sowie weitere Konzepte wie CSPs, Permissions-Policies, PII, den Umgang mit CORS und mehr kennen. Anschließend absolvieren Sie ein kurzes Quiz zur Wissensüberprüfung."
]
},
"authentication": {
- "note": "Verfügbar Ende 2026",
"intro": [
"In diesem Modul lernen Sie, wie Authentifizierung in Webanwendungen funktioniert, sowie weitere wichtige Konzepte wie JWTs, CSRFs, Passport, Helmet, Kryptografie und Verschlüsselung. Danach üben Sie das Gelernte in Laboren und Workshops und testen Ihr Wissen mit einem kurzen Quiz."
]
},
"lab-family-movie-watchlist-api": {
- "note": "Verfügbar Ende 2026",
"intro": [
"Üben Sie die Implementierung von Authentifizierung und Autorisierung in einer Express-Anwendung, indem Sie eine API für eine Familien-Film-Watchlist erstellen."
]
},
"back-end-development-and-apis-certification-exam": {
- "note": "Verfügbar Ende 2026",
"intro": [
"Bestehen Sie diese Prüfung, um Ihre Zertifizierung für Back-End-Entwicklung und APIs zu erhalten."
]
},
"review-back-end-development-and-apis": {
- "note": "Verfügbar Ende 2026",
"intro": [
"Überprüfen Sie Konzepte der Back-End-Entwicklung und APIs, um sich auf die bevorstehende Prüfung vorzubereiten."
]
@@ -7302,7 +7291,7 @@
},
"blocks": {
"lecture-working-with-nodejs-and-event-driven-architecture": {
- "title": "Arbeiten mit NodeJS und ereignisgesteuerter Architektur",
+ "title": "Arbeiten mit Node.js und ereignisgesteuerter Architektur",
"intro": [
"Lernen Sie die Node.js-Kernbibliotheken kennen, wie Sie Node.js auf Ihrem Computer installieren und welche Vor- und Nachteile die Verwendung von Node.js im Back-End hat."
]
@@ -7416,24 +7405,6 @@
""
]
},
- "lecture-understanding-rest-api-and-web-services": {
- "title": "Verstehen der REST-API und Webservices",
- "intro": [
- "In diesen Lektionen lernen Sie REST-APIs und Webservices kennen und wie sie verschiedenen Anwendungen ermöglichen, über das Internet miteinander zu kommunizieren."
- ]
- },
- "workshop-build-a-weather-service-api": {
- "title": "Erstellen Sie eine Wetterdienst-API",
- "intro": [
- "Sie lernen Routenparameter und modulare Routen mit express.Router kennen, indem Sie eine Wetterdienst-API erstellen."
- ]
- },
- "lab-timestamp-microservice": {
- "title": "Erstellen Sie einen Timestamp-Mikroservice",
- "intro": [
- "Üben Sie den Aufbau einer RESTful-API mit Datumsparselogik, indem Sie einen Timestamp-Mikroservice erstellen."
- ]
- },
"lecture-working-with-express": {
"title": "Arbeiten mit Express",
"intro": [
@@ -7453,16 +7424,10 @@
"Sie lernen grundlegendes Express-Routing und Antwortmethoden kennen, indem Sie eine App für zufällige Witze erstellen."
]
},
- "lab-personal-profile-app": {
- "title": "Erstellen Sie eine persönliche Profil-App",
- "intro": [
- "Üben Sie den Aufbau eines Express-Servers und einer JSON-API, indem Sie eine persönliche Profilanwendung erstellen."
- ]
- },
"review-introduction-to-express": {
"title": "Überprüfung der Einführung in Express",
"intro": [
- "Überprüfen Sie Webservices, REST, Mikroservices und Express.js-Routing, bevor Sie das Quiz machen."
+ "Überprüfen Sie Express.js, Routing, Antwortmethoden und das Bereitstellen statischer Dateien, bevor Sie das Quiz absolvieren."
]
},
"quiz-introduction-to-express": {
@@ -7471,28 +7436,10 @@
"Testen Sie Ihr Wissen über Webservices, REST, Mikroservices, Express.js und Routing."
]
},
- "lecture-understanding-error-handling-and-health-checks": {
- "title": "Verstehen von Fehlerbehandlung und Gesundheitschecks",
- "intro": [
- "In diesen Lektionen lernen Sie Fehlerbehandlung und Gesundheitschecks in Express kennen."
- ]
- },
- "workshop-build-a-bank-api": {
- "title": "Erstellen Sie eine Bank-API",
- "intro": [
- "Sie lernen Express 5 Fehlerbehandlung, Gesundheitschecks und sauberes Herunterfahren kennen, indem Sie eine Bank-API erstellen."
- ]
- },
- "review-error-handling-in-express": {
- "title": "Überprüfung der Fehlerbehandlung in Express",
- "intro": [
- "Überprüfen Sie HTTP-Statuscodes, Fehlerbehandlung, Debugging, Protokollierung, Gesundheitschecks und sanfte Abschaltungen, bevor Sie das Quiz machen."
- ]
- },
- "quiz-error-handling-in-express": {
- "title": "Quiz zur Fehlerbehandlung in Express",
+ "lab-personal-profile-app": {
+ "title": "Erstellen Sie eine persönliche Profil-App",
"intro": [
- "Testen Sie Ihr Wissen über HTTP-Statuscodes, Fehlerbehandlung, Debugging, Protokollierung, Gesundheitschecks und sanfte Abschaltungen."
+ "Üben Sie den Aufbau eines Express-Servers und einer JSON-API, indem Sie eine persönliche Profilanwendung erstellen."
]
},
"lecture-express-middleware": {
@@ -7525,6 +7472,54 @@
"Testen Sie Ihr Wissen über Express-Middleware, einschließlich Middleware auf Anwendungs- und Router-Ebene, Fehlerbehandlung sowie eingebaute und Drittanbieter-Middleware."
]
},
+ "lecture-understanding-rest-api-and-web-services": {
+ "title": "Verstehen der REST-API und Webservices",
+ "intro": [
+ "In diesen Lektionen lernen Sie REST-APIs und Webservices kennen und wie sie verschiedenen Anwendungen ermöglichen, über das Internet miteinander zu kommunizieren."
+ ]
+ },
+ "workshop-build-a-weather-service-api": {
+ "title": "Erstellen Sie eine Wetterdienst-API",
+ "intro": [
+ "Sie lernen Routenparameter und modulare Routen mit express.Router kennen, indem Sie eine Wetterdienst-API erstellen."
+ ]
+ },
+ "review-rest-api-and-web-services": {
+ "title": "Überprüfung von REST-API und Webservices",
+ "intro": [
+ "Überprüfen Sie Webservices, die REST-Architektur, HTTP-Statuscodes und Microservices."
+ ]
+ },
+ "lab-timestamp-microservice": {
+ "title": "Erstellen Sie einen Timestamp-Mikroservice",
+ "intro": [
+ "Üben Sie den Aufbau einer RESTful-API mit Datumsparselogik, indem Sie einen Timestamp-Mikroservice erstellen."
+ ]
+ },
+ "lecture-understanding-error-handling-and-health-checks": {
+ "title": "Verstehen von Fehlerbehandlung und Gesundheitschecks",
+ "intro": [
+ "In diesen Lektionen lernen Sie Fehlerbehandlung und Gesundheitschecks in Express kennen."
+ ]
+ },
+ "workshop-build-a-bank-api": {
+ "title": "Erstellen Sie eine Bank-API",
+ "intro": [
+ "Sie lernen Express 5 Fehlerbehandlung, Gesundheitschecks und sauberes Herunterfahren kennen, indem Sie eine Bank-API erstellen."
+ ]
+ },
+ "review-error-handling-in-express": {
+ "title": "Überprüfung der Fehlerbehandlung in Express",
+ "intro": [
+ "Überprüfen Sie HTTP-Statuscodes, Fehlerbehandlung, Debugging, Protokollierung, Gesundheitschecks und sanfte Abschaltungen, bevor Sie das Quiz machen."
+ ]
+ },
+ "quiz-error-handling-in-express": {
+ "title": "Quiz zur Fehlerbehandlung in Express",
+ "intro": [
+ "Testen Sie Ihr Wissen über HTTP-Statuscodes, Fehlerbehandlung, Debugging, Protokollierung, Gesundheitschecks und sanfte Abschaltungen."
+ ]
+ },
"lecture-understanding-websockets": {
"title": "Verstehen von WebSockets",
"intro": [
@@ -8427,7 +8422,7 @@
"title": "Gestalten einer Café-Speisekarte",
"intro": [
"CSS sagt dem Browser, wie Ihre Webseite angezeigt wird. Sie können CSS verwenden, um Farbe, Schriftart, Größe und andere Aspekte von HTML-Elementen festzulegen.",
- "In diesem Workshop lernen Sie CSS, indem Sie eine Speisekartenseite für eine Café-Webseite gestalten."
+ "In diesem Workshop lernen Sie CSS, indem Sie eine Menüseite für ein Café gestalten."
]
},
"lab-business-card": {
@@ -9695,7 +9690,7 @@
"title": "Ein Café-Menü gestalten",
"intro": [
"CSS sagt dem Browser, wie Ihre Webseite angezeigt werden soll. Sie können CSS verwenden, um Farbe, Schriftart, Größe und andere Aspekte von HTML-Elementen festzulegen.",
- "In diesem Workshop lernen Sie CSS, indem Sie eine Menüseite für eine Café-Webseite gestalten."
+ "In diesem Workshop lernen Sie CSS, indem Sie eine Menüseite für ein Café gestalten."
]
},
"lab-business-card": {
diff --git a/client/german/translations.json b/client/german/translations.json
index a8ce9164c9a..54f86c99808 100644
--- a/client/german/translations.json
+++ b/client/german/translations.json
@@ -558,6 +558,12 @@
"running-tests": "// Tests werden ausgeführt",
"tests-completed": "// Tests abgeschlossen",
"console-output": "// Konsolenausgabe",
+ "unavailable-local-resource": "Ressource konnte nicht geladen werden: „{{source}}“ ist keine verfügbare lokale {{resourceType}}-Datei. Verwenden Sie: {{allowedSources}}.",
+ "unavailable-local-resource-no-allowed": "Ressource konnte nicht geladen werden: „{{source}}“ ist in dieser Aufgabe keine verfügbare lokale {{resourceType}}-Datei.",
+ "local-resource-type": {
+ "stylesheet": "Stylesheet",
+ "script": "Skript"
+ },
"example-app": "Erstellen Sie eine App, die funktional <0>diesem Beispielprojekt0> ähnelt. Versuchen Sie, das Beispielprojekt nicht zu kopieren, sondern geben Sie ihm Ihren eigenen Stil.",
"syntax-error": "Ihr Code hat einen Fehler verursacht, bevor Tests ausgeführt werden konnten. Bitte beheben Sie ihn und versuchen Sie es erneut.",
"indentation-error": "Ihr Code enthält einen Einrückungsfehler. Möglicherweise müssen Sie pass in einer neuen Zeile hinzufügen, um einen gültigen Codeblock zu bilden.",
@@ -656,25 +662,6 @@
"sub-step-7": "Klicken Sie auf die Schaltfläche <0>Geheimnis hinzufügen0>",
"summary": "Codespaces-Einrichtung"
},
- "ona": {
- "intro": "Dieser Kurs läuft in einer virtuellen Linux-Maschine mit Ona. Folgen Sie diesen Anweisungen, um den Kurs zu starten:",
- "step-1": "<0>Erstellen Sie ein Ona-Konto0>, falls Sie noch keines haben",
- "step-2": "Klicken Sie unten auf die Start-Schaltfläche",
- "step-3": "Klicken Sie im erscheinenden Modal auf die Schaltfläche Erstellen",
- "step-4": "Sobald die virtuelle Linux-Maschine geladen ist, starten Sie die CodeRoad-Erweiterung, indem Sie:",
- "step-5": "Auf das „Hamburger“-Menü oben links im VSCode-Fenster klicken,",
- "step-6": "Zum <0>Ansicht0>-Menü gehen,",
- "step-7": "Auf die Option <0>Befehls-Palette0> klicken,",
- "step-8": "und den Befehl <0>CodeRoad: Start0> ausführen",
- "step-9": "Folgen Sie den Anweisungen in CodeRoad, um den Kurs abzuschließen",
- "continue-project": "Wenn Sie unten auf die Start-Schaltfläche klicken, wird ein neues Projekt gestartet. Wenn Sie den {{course}}-Kurs bereits begonnen haben, gehen Sie zu <0>Ihrem Ona-Dashboard0>, um fortzufahren.",
- "learn-more": "Erfahren Sie mehr über <0>Ona-Arbeitsbereiche.0>",
- "logout-warning": "Wenn Sie sich vor Abschluss des gesamten {{course}}-Kurses von freeCodeCamp abmelden, wird Ihr Fortschritt nicht in Ihrem freeCodeCamp-Konto gespeichert.",
- "sub-step-3": "Navigieren Sie zu Ihrer <0>Ona-Geheimnisse-Seite0>",
- "sub-step-4": "Erstellen Sie ein neues Geheimnis mit dem Namen <0>CODEROAD_WEBHOOK_TOKEN0>",
- "sub-step-5": "Fügen Sie im Feld <0>Geheimnis0> Ihren Token ein",
- "summary": "Ona-Einrichtung"
- },
"freecodecamp-os": {
"token-modal": "Wenn Sie den Kurs starten, erscheint ein Modal, das nach Ihrem Benutzertoken fragt. Fügen Sie das oben kopierte Token dort ein. Dies müssen Sie pro Umgebung nur einmal tun.",
"local": {
@@ -697,16 +684,6 @@
"step-5": "Der Simple Browser öffnet sich, wenn er fertig ist. Wenn die Seite weiß und leer ist, verwenden Sie die Aktualisieren-Schaltfläche, um sie zu aktualisieren und die Kurs-Startseite zu sehen.",
"step-6": "Klicken Sie auf eines der verfügbaren Projekte, um es zu starten, und folgen Sie dann den Anweisungen im Projekt, um es abzuschließen.",
"continue-project": "Wenn Sie unten auf die Start-Schaltfläche klicken, wird eine neue Maschine gestartet. Wenn Sie den {{title}}-Kurs bereits begonnen haben, gehen Sie zur <0>Repository-Seite0>, um einen vorherigen Arbeitsbereich erneut zu öffnen."
- },
- "ona": {
- "intro": "Dieser Kurs läuft in einer virtuellen Linux-Maschine mit Ona und der freeCodeCamp - Courses VS Code-Erweiterung. Folgen Sie diesen Anweisungen, um den Kurs zu starten:",
- "step-1": "<0>Erstellen Sie ein Ona-Konto0>, falls Sie noch keines haben",
- "step-2": "Klicken Sie auf die Start-Schaltfläche unten",
- "step-3": "Klicken Sie im erscheinenden Modal auf die Erstellen-Schaltfläche",
- "step-4": "Sobald die virtuelle Linux-Maschine geladen ist, öffnen Sie die Befehlspalette und führen Sie den Befehl <0>freeCodeCamp: Run Course0> aus",
- "step-5": "Der Simple Browser öffnet sich, wenn er fertig ist. Wenn die Seite weiß und leer ist, verwenden Sie die Aktualisieren-Schaltfläche, um sie zu aktualisieren und die Kurs-Startseite zu sehen.",
- "step-6": "Klicken Sie auf eines der verfügbaren Projekte, um es zu starten, und folgen Sie dann den Anweisungen im Projekt, um es abzuschließen.",
- "continue-project": "Wenn Sie unten auf die Start-Schaltfläche klicken, wird eine neue Maschine gestartet. Wenn Sie den {{course}}-Kurs bereits begonnen haben, gehen Sie zu <0>Ihrem Ona-Dashboard0>, um fortzufahren."
}
},
"local": {
diff --git a/client/italian/intro.json b/client/italian/intro.json
index 055cfc30682..a4a218a5cf2 100644
--- a/client/italian/intro.json
+++ b/client/italian/intro.json
@@ -1352,12 +1352,6 @@
"In questo laboratorio di 140 lezioni, completerai il tuo database studenti approfondendo i comandi SQL."
]
},
- "lab-world-cup-database": {
- "title": "Crea un database della Coppa del Mondo",
- "intro": [
- "Per questo progetto, creerai uno script Bash che inserisce informazioni sulle partite della Coppa del Mondo in PostgreSQL, quindi interrogherai il database per statistiche utili."
- ]
- },
"workshop-kitty-ipsum-translator": {
"title": "Crea un traduttore Kitty Ipsum",
"intro": [
@@ -1371,6 +1365,12 @@
"In questo laboratorio di 210 lezioni, costruirai un programma Bash interattivo che archivia le informazioni di noleggio per il tuo negozio di biciclette usando PostgreSQL."
]
},
+ "lab-world-cup-database": {
+ "title": "Crea un database della Coppa del Mondo",
+ "intro": [
+ "Per questo progetto, creerai uno script Bash che inserisce informazioni sulle partite della Coppa del Mondo in PostgreSQL, quindi interrogherai il database per statistiche utili."
+ ]
+ },
"lab-salon-appointment-scheduler": {
"title": "Crea un pianificatore di appuntamenti per saloni",
"intro": [
@@ -2669,6 +2669,13 @@
"Praticherai le condizioni per determinare il voto dello studente in base al suo punteggio."
]
},
+ "lab-story-fragment-restoration": {
+ "title": "Ripristina una narrazione coerente da un array di frammenti di storia",
+ "intro": [
+ "In questo laboratorio, ripristinerai una narrazione coerente da un array corrotto di frammenti di storia.",
+ "Allenerai l'uso dei loop implementando da zero algoritmi fondamentali per gli array."
+ ]
+ },
"lecture-the-var-keyword-and-hoisting": {
"title": "La parola chiave var e l'hoisting",
"intro": [
@@ -3774,18 +3781,18 @@
"Impara il modello a riquadro CSS con questo corso. Comprendi come gli elementi vengono renderizzati sul web e impara a manipolare spaziature, bordi e spaziatura interna per ottenere il layout e il design desiderati."
]
},
- "top-introduction-to-flexbox": {
- "title": "Introduzione a Flexbox",
- "intro": [
- "Scopri la potenza di Flexbox, un modello di layout che semplifica la progettazione di layout web flessibili e responsivi. Impara a creare strutture di pagina dinamiche e adattive con facilità."
- ]
- },
"top-learn-block-and-inline": {
"title": "Impara la differenza tra blocco e in linea",
"intro": [
"Esplora le differenze tra elementi a blocco e in linea in HTML e CSS. Questo corso offre approfondimenti su come questi tipi di visualizzazione influenzano il layout e il comportamento, permettendoti di prendere decisioni di design informate."
]
},
+ "top-introduction-to-flexbox": {
+ "title": "Introduzione a Flexbox",
+ "intro": [
+ "Scopri la potenza di Flexbox, un modello di layout che semplifica la progettazione di layout web flessibili e responsivi. Impara a creare strutture di pagina dinamiche e adattive con facilità."
+ ]
+ },
"top-learn-variables-and-operators": {
"title": "Impara variabili e operatori",
"intro": [
@@ -6287,12 +6294,6 @@
"Metterai in pratica l'uso delle classi utility di Tailwind CSS per layout flexbox, colori, breakpoint e altro."
]
},
- "lab-photography-exhibit": {
- "title": "Progetta una mostra fotografica",
- "intro": [
- "In questo laboratorio metterai in pratica Tailwind CSS progettando una pagina web per una mostra fotografica."
- ]
- },
"review-css-libraries-and-frameworks": {
"title": "Revisione di librerie e framework CSS",
"intro": [
@@ -6306,6 +6307,12 @@
"Metti alla prova ciò che hai imparato su librerie e framework CSS con questo quiz."
]
},
+ "lab-photography-exhibit": {
+ "title": "Progetta una mostra fotografica",
+ "intro": [
+ "In questo laboratorio metterai in pratica Tailwind CSS progettando una pagina web per una mostra fotografica."
+ ]
+ },
"lecture-introduction-to-typescript": {
"title": "Introduzione a TypeScript",
"intro": [
@@ -6372,18 +6379,6 @@
"In questo workshop, continuerai a praticare TypeScript costruendo un'app di lettura della fortuna."
]
},
- "lab-flashcard-quiz-app": {
- "title": "Crea un'app quiz con flashcard",
- "intro": [
- "In questo laboratorio, praticherai l'uso di TypeScript costruendo un'app quiz con flashcard."
- ]
- },
- "lab-digital-pet-game": {
- "title": "Crea un gioco con animale digitale",
- "intro": [
- "In questo laboratorio, metterai in pratica ciò che hai imparato su TypeScript e React costruendo un gioco con animale digitale."
- ]
- },
"workshop-build-a-football-player-card-builder": {
"title": "Crea un generatore di schede giocatore di calcio",
"intro": [
@@ -6401,6 +6396,18 @@
"title": "Quiz su TypeScript",
"intro": ["Metti alla prova ciò che hai imparato su TypeScript con questo quiz."]
},
+ "lab-flashcard-quiz-app": {
+ "title": "Crea un'app quiz con flashcard",
+ "intro": [
+ "In questo laboratorio, praticherai l'uso di TypeScript costruendo un'app quiz con flashcard."
+ ]
+ },
+ "lab-digital-pet-game": {
+ "title": "Crea un gioco con animale digitale",
+ "intro": [
+ "In questo laboratorio, metterai in pratica ciò che hai imparato su TypeScript e React costruendo un gioco con animale digitale."
+ ]
+ },
"review-front-end-libraries": {
"title": "Revisione delle librerie front-end",
"intro": [
@@ -7176,12 +7183,12 @@
"node-package-manager": "Gestore pacchetti Node",
"lab-prime-number-checker-module": "Crea un modulo per verificare i numeri primi",
"http-and-the-web-standards-model": "HTTP e il modello degli standard web",
- "rest-api-and-web-services": "REST API e servizi web",
- "lab-timestamp-microservice": "Crea un microservizio per timestamp",
"introduction-to-express": "Introduzione a Express",
"lab-personal-profile-app": "Crea un'app per profili personali",
- "error-handling-in-express": "Gestione degli errori in Express",
"express-middleware": "Middleware di Express",
+ "rest-api-and-web-services": "REST API e servizi web",
+ "lab-timestamp-microservice": "Crea un microservizio per timestamp",
+ "error-handling-in-express": "Gestione degli errori in Express",
"websockets": "WebSocket",
"lab-chat-app": "Crea un'app di chat",
"security-and-privacy": "Sicurezza e privacy",
@@ -7192,109 +7199,91 @@
},
"module-intros": {
"introduction-to-nodejs": {
- "note": "In arrivo a fine 2026",
"intro": [
"In questo modulo imparerai le basi per lavorare con Node.js."
]
},
"nodejs-core-modules": {
- "note": "In arrivo a fine 2026",
"intro": [
"In questo modulo imparerai i moduli core comuni di Node.js come fs, os, path e altri. Poi potrai mettere in pratica ciò che hai imparato con workshop e laboratori e verificare le tue conoscenze con un breve quiz."
]
},
"node-package-manager": {
- "note": "In arrivo a fine 2026",
"intro": [
"In questo modulo sarai introdotto al Node Package Manager, che gli sviluppatori usano per gestire le dipendenze e gli script del progetto. Poi potrai mettere in pratica ciò che hai imparato con workshop e laboratori e verificare le tue conoscenze con un breve quiz."
]
},
"lab-prime-number-checker-module": {
- "note": "In arrivo a fine 2026",
"intro": [
"Esercitati a creare ed esportare un modulo npm realizzando un verificatore di numeri primi."
]
},
"http-and-the-web-standards-model": {
- "note": "In arrivo a fine 2026",
"intro": [
"In questo modulo imparerai HTTP (Hypertext Transfer Protocol) e altri concetti importanti come il modello richiesta-risposta, i codici di risposta comuni, DNS, TCP/IP e altro. Poi potrai mettere in pratica ciò che hai imparato costruendo un tuo server web in un workshop e verificare le tue conoscenze con un breve quiz."
]
},
- "rest-api-and-web-services": {
- "note": "In arrivo a fine 2026",
+ "introduction-to-express": {
"intro": [
- "In questo modulo imparerai la REST API (trasferimento di stato rappresentazionale) e come funzionano i microservizi. Poi farai un breve quiz per verificare le tue conoscenze."
+ "In questo modulo sarai introdotto a Express.js, un framework usato per costruire API RESTful. Poi metterai in pratica le tue abilità con workshop e laboratori e verificherai le tue conoscenze con un breve quiz."
]
},
- "lab-timestamp-microservice": {
- "note": "In arrivo a fine 2026",
+ "lab-personal-profile-app": {
"intro": [
- "Esercitati a creare un'API RESTful con logica di parsing delle date realizzando un microservizio per timestamp."
+ "Esercitati a creare un server express e un'API JSON realizzando un'applicazione per profili personali."
]
},
- "introduction-to-express": {
- "note": "In arrivo a fine 2026",
+ "express-middleware": {
"intro": [
- "In questo modulo sarai introdotto a Express.js, un framework usato per costruire API RESTful. Poi metterai in pratica le tue abilità con workshop e laboratori e verificherai le tue conoscenze con un breve quiz."
+ "In questo modulo imparerai il middleware in Express.js, usato per gestire le richieste e le risposte tra client e server. Poi metterai in pratica le tue abilità con un workshop e un laboratorio e verificherai le tue conoscenze con un breve quiz."
]
},
- "lab-personal-profile-app": {
- "note": "In arrivo a fine 2026",
+ "rest-api-and-web-services": {
"intro": [
- "Esercitati a creare un server express e un'API JSON realizzando un'applicazione per profili personali."
+ "In questo modulo imparerai la REST API (trasferimento di stato rappresentazionale) e come funzionano i microservizi. Poi farai un breve quiz per verificare le tue conoscenze."
]
},
- "error-handling-in-express": {
- "note": "In arrivo a fine 2026",
+ "lab-timestamp-microservice": {
"intro": [
- "In questo modulo imparerai come funziona la gestione degli errori, il debugging e i controlli di salute in Express.js. Poi metterai in pratica ciò che hai imparato in un laboratorio e verificherai le tue conoscenze con un breve quiz."
+ "Esercitati a creare un'API RESTful con logica di parsing delle date realizzando un microservizio per timestamp."
]
},
- "express-middleware": {
- "note": "In arrivo a fine 2026",
+ "error-handling-in-express": {
"intro": [
- "In questo modulo imparerai il middleware in Express.js, usato per gestire le richieste e le risposte tra client e server. Poi metterai in pratica le tue abilità con un workshop e un laboratorio e verificherai le tue conoscenze con un breve quiz."
+ "In questo modulo imparerai come funziona la gestione degli errori, il debugging e i controlli di salute in Express.js. Poi metterai in pratica ciò che hai imparato in un laboratorio e verificherai le tue conoscenze con un breve quiz."
]
},
"websockets": {
- "note": "In arrivo a fine 2026",
"intro": [
"In questo modulo sarai introdotto ai websocket, un protocollo usato per la comunicazione in tempo reale tra client e server. Poi metterai in pratica ciò che hai imparato in laboratori e workshop e verificherai le tue conoscenze con un breve quiz."
]
},
"lab-chat-app": {
- "note": "In arrivo a fine 2026",
"intro": [
"Esercitati a creare un server di chat in tempo reale multi-client usando WebSocket di Node.js."
]
},
"security-and-privacy": {
- "note": "In arrivo a fine 2026",
"intro": [
"In questo modulo imparerai le differenze tra sicurezza e privacy e altri concetti come CSP, Permissions-Policies, PII, lavoro con CORS e altro. Poi farai un breve quiz per verificare le tue conoscenze."
]
},
"authentication": {
- "note": "In arrivo a fine 2026",
"intro": [
"In questo modulo imparerai come funziona l'autenticazione nelle applicazioni web insieme ad altri concetti importanti come JWT, CSRF, Passport, Helmet, crittografia e cifratura e altro. Poi metterai in pratica ciò che hai imparato in laboratori e workshop e verificherai le tue conoscenze con un breve quiz."
]
},
"lab-family-movie-watchlist-api": {
- "note": "In arrivo a fine 2026",
"intro": [
"Esercitati a implementare autenticazione e autorizzazione in un'applicazione express creando un'API per la lista film di famiglia."
]
},
"back-end-development-and-apis-certification-exam": {
- "note": "In arrivo a fine 2026",
"intro": [
"Supera questo esame per ottenere la certificazione in sviluppo back-end e API."
]
},
"review-back-end-development-and-apis": {
- "note": "In arrivo a fine 2026",
"intro": [
"Rivedi i concetti di sviluppo back-end e API per prepararti al prossimo esame."
]
@@ -7302,7 +7291,7 @@
},
"blocks": {
"lecture-working-with-nodejs-and-event-driven-architecture": {
- "title": "Lavorare con NodeJS e architettura event driven",
+ "title": "Lavorare con Node.js e l'architettura basata su eventi",
"intro": [
"Scopri le librerie core di Node.js, come installare Node.js sul tuo computer e i vantaggi e svantaggi di usare Node.js nel back-end."
]
@@ -7416,24 +7405,6 @@
""
]
},
- "lecture-understanding-rest-api-and-web-services": {
- "title": "Comprendere le API REST e i servizi web",
- "intro": [
- "In queste lezioni imparerai le API REST e i servizi web, e come permettono a diverse applicazioni di comunicare tra loro su internet."
- ]
- },
- "workshop-build-a-weather-service-api": {
- "title": "Crea un'API per un servizio meteo",
- "intro": [
- "Imparerai i parametri di rotta e il routing modulare con express.Router costruendo un'API per un servizio meteo."
- ]
- },
- "lab-timestamp-microservice": {
- "title": "Costruisci un microservizio timestamp",
- "intro": [
- "Esercitati a costruire un'API RESTful con logica di parsing delle date creando un microservizio timestamp."
- ]
- },
"lecture-working-with-express": {
"title": "Lavorare con Express",
"intro": [
@@ -7453,16 +7424,10 @@
"Imparerai il routing base di Express e i metodi di risposta costruendo un'app di barzellette casuali."
]
},
- "lab-personal-profile-app": {
- "title": "Costruisci un'app di profilo personale",
- "intro": [
- "Esercitati a costruire un server Express e un'API JSON creando un'applicazione di profilo personale."
- ]
- },
"review-introduction-to-express": {
"title": "Revisione introduttiva a Express",
"intro": [
- "Rivedi i servizi web, REST, microservizi e il routing di Express.js prima di fare il quiz."
+ "Ripassa Express.js, il routing, i metodi di risposta e la gestione dei file statici prima di affrontare il quiz."
]
},
"quiz-introduction-to-express": {
@@ -7471,28 +7436,10 @@
"Metti alla prova le tue conoscenze su servizi web, REST, microservizi, Express.js e routing."
]
},
- "lecture-understanding-error-handling-and-health-checks": {
- "title": "Comprendere la gestione degli errori e i controlli di integrità",
- "intro": [
- "In queste lezioni imparerai la gestione degli errori e i controlli di integrità in Express."
- ]
- },
- "workshop-build-a-bank-api": {
- "title": "Crea un'API bancaria",
- "intro": [
- "Imparerai la gestione degli errori in Express 5, i controlli di salute e le chiusure graduali costruendo un'API bancaria."
- ]
- },
- "review-error-handling-in-express": {
- "title": "Revisione della gestione degli errori in Express",
- "intro": [
- "Rivedi i codici di stato HTTP, la gestione degli errori, il debugging, il logging, i controlli di integrità e le chiusure graduali prima di fare il quiz."
- ]
- },
- "quiz-error-handling-in-express": {
- "title": "Quiz sulla gestione degli errori in Express",
+ "lab-personal-profile-app": {
+ "title": "Costruisci un'app di profilo personale",
"intro": [
- "Metti alla prova le tue conoscenze su codici di stato HTTP, gestione degli errori, debugging, logging, controlli di integrità e chiusure graduali."
+ "Esercitati a costruire un server Express e un'API JSON creando un'applicazione di profilo personale."
]
},
"lecture-express-middleware": {
@@ -7525,6 +7472,54 @@
"Metti alla prova le tue conoscenze sul middleware di Express, inclusi middleware a livello di applicazione, router, gestione degli errori e middleware integrati e di terze parti."
]
},
+ "lecture-understanding-rest-api-and-web-services": {
+ "title": "Comprendere le API REST e i servizi web",
+ "intro": [
+ "In queste lezioni imparerai le API REST e i servizi web, e come permettono a diverse applicazioni di comunicare tra loro su internet."
+ ]
+ },
+ "workshop-build-a-weather-service-api": {
+ "title": "Crea un'API per un servizio meteo",
+ "intro": [
+ "Imparerai i parametri di rotta e il routing modulare con express.Router costruendo un'API per un servizio meteo."
+ ]
+ },
+ "review-rest-api-and-web-services": {
+ "title": "Revisione delle API REST e dei servizi web",
+ "intro": [
+ "Ripassa i servizi web, l'architettura REST, i codici di stato HTTP e i microservizi."
+ ]
+ },
+ "lab-timestamp-microservice": {
+ "title": "Costruisci un microservizio timestamp",
+ "intro": [
+ "Esercitati a costruire un'API RESTful con logica di parsing delle date creando un microservizio timestamp."
+ ]
+ },
+ "lecture-understanding-error-handling-and-health-checks": {
+ "title": "Comprendere la gestione degli errori e i controlli di integrità",
+ "intro": [
+ "In queste lezioni imparerai la gestione degli errori e i controlli di integrità in Express."
+ ]
+ },
+ "workshop-build-a-bank-api": {
+ "title": "Crea un'API bancaria",
+ "intro": [
+ "Imparerai la gestione degli errori in Express 5, i controlli di salute e le chiusure graduali costruendo un'API bancaria."
+ ]
+ },
+ "review-error-handling-in-express": {
+ "title": "Revisione della gestione degli errori in Express",
+ "intro": [
+ "Rivedi i codici di stato HTTP, la gestione degli errori, il debugging, il logging, i controlli di integrità e le chiusure graduali prima di fare il quiz."
+ ]
+ },
+ "quiz-error-handling-in-express": {
+ "title": "Quiz sulla gestione degli errori in Express",
+ "intro": [
+ "Metti alla prova le tue conoscenze su codici di stato HTTP, gestione degli errori, debugging, logging, controlli di integrità e chiusure graduali."
+ ]
+ },
"lecture-understanding-websockets": {
"title": "Comprendere i WebSocket",
"intro": [
@@ -8427,7 +8422,7 @@
"title": "Progetta un menu per un caffè",
"intro": [
"Il CSS dice al browser come visualizzare la tua pagina web. Puoi usare il CSS per impostare il colore, il carattere tipografico, la dimensione e altri aspetti degli elementi HTML.",
- "In questo workshop imparerai il CSS progettando una pagina menu per un sito web di un caffè."
+ "In questo workshop imparerai CSS progettando una pagina menu per un caffè."
]
},
"lab-business-card": {
@@ -9695,7 +9690,7 @@
"title": "Progetta un menu per un caffè",
"intro": [
"Il CSS dice al browser come mostrare la tua pagina web. Puoi usare il CSS per impostare il colore, il carattere tipografico, la dimensione e altri aspetti degli elementi HTML.",
- "In questo workshop imparerai il CSS progettando una pagina menu per un sito web di un caffè."
+ "In questo workshop imparerai CSS progettando una pagina menu per un caffè."
]
},
"lab-business-card": {
diff --git a/client/italian/translations.json b/client/italian/translations.json
index 845406ac569..05a197467f4 100644
--- a/client/italian/translations.json
+++ b/client/italian/translations.json
@@ -558,6 +558,12 @@
"running-tests": "// esecuzione dei test",
"tests-completed": "// test completati",
"console-output": "// output della console",
+ "unavailable-local-resource": "Caricamento risorsa fallito: \"{{source}}\" non è un file {{resourceType}} locale disponibile. Usa: {{allowedSources}}.",
+ "unavailable-local-resource-no-allowed": "Caricamento risorsa fallito: \"{{source}}\" non è un file {{resourceType}} locale disponibile in questa sfida.",
+ "local-resource-type": {
+ "stylesheet": "foglio di stile",
+ "script": "script"
+ },
"example-app": "Crea un'app che sia funzionalmente simile a <0>questo progetto di esempio0>. Cerca di non copiare il progetto, dagli il tuo stile personale.",
"syntax-error": "Il tuo codice ha generato un errore prima che potessero partire i test. Correggilo e riprova.",
"indentation-error": "Il tuo codice ha un errore di indentazione. Potresti dover aggiungere pass su una nuova riga per formare un blocco di codice valido.",
@@ -656,25 +662,6 @@
"sub-step-7": "Clicca il pulsante <0>Aggiungi segreto0>",
"summary": "Configurazione di Codespaces"
},
- "ona": {
- "intro": "Questo corso si svolge in una macchina virtuale Linux usando Ona. Segui queste istruzioni per iniziare il corso:",
- "step-1": "<0>Crea un account Ona0> se non ne hai uno",
- "step-2": "Clicca il pulsante di avvio qui sotto",
- "step-3": "Nel modale che appare, clicca il pulsante crea",
- "step-4": "Quando la macchina virtuale Linux ha finito di caricarsi, avvia l'estensione CodeRoad facendo:",
- "step-5": "Clic sul menu “hamburger” vicino all'angolo in alto a sinistra della finestra di VSCode,",
- "step-6": "Vai al menu <0>Visualizza0>,",
- "step-7": "Clicca sull'opzione <0>Palette comandi0>,",
- "step-8": "e esegui il comando <0>CodeRoad: Start0>",
- "step-9": "Segui le istruzioni in CodeRoad per completare il corso",
- "continue-project": "Cliccando il pulsante di avvio qui sotto inizierai un nuovo progetto. Se hai già iniziato il corso {{course}}, vai al <0>tuo cruscotto Ona0> per continuare.",
- "learn-more": "Scopri di più sugli <0>spazi di lavoro Ona.0>",
- "logout-warning": "Se esci da freeCodeCamp prima di completare l'intero corso {{course}}, i tuoi progressi non saranno salvati nel tuo account freeCodeCamp.",
- "sub-step-3": "Vai alla tua <0>pagina dei segreti di Ona0>",
- "sub-step-4": "Crea un nuovo segreto chiamato <0>CODEROAD_WEBHOOK_TOKEN0>",
- "sub-step-5": "Nel campo <0>Segreto0>, incolla il tuo token",
- "summary": "Configurazione di Ona"
- },
"freecodecamp-os": {
"token-modal": "Quando avvii il corso, apparirà una finestra modale che chiede il tuo token utente. Incolla il token che hai copiato sopra. Devi farlo solo una volta per ogni ambiente.",
"local": {
@@ -697,16 +684,6 @@
"step-5": "Quando ha finito, si aprirà il Simple Browser. Se vedi una pagina bianca vuota, usa il pulsante aggiorna per aggiornare e vedere la pagina iniziale del corso.",
"step-6": "Clicca su uno dei progetti disponibili per iniziarlo, poi segui le istruzioni nel progetto per completarlo.",
"continue-project": "Cliccando il pulsante di avvio qui sotto si avvierà una nuova macchina. Se hai già iniziato il corso {{title}}, vai alla <0>pagina del repository0> per riaprire uno spazio di lavoro precedente."
- },
- "ona": {
- "intro": "Questo corso viene eseguito in una macchina virtuale Linux usando Ona e l'estensione freeCodeCamp - Courses per VS Code. Segui queste istruzioni per avviare il corso:",
- "step-1": "<0>Crea un account Ona0> se non ne hai uno",
- "step-2": "Clicca il pulsante di avvio qui sotto",
- "step-3": "Nella finestra modale che appare, clicca il pulsante crea",
- "step-4": "Quando la macchina virtuale Linux ha finito di caricarsi, apri la palette comandi ed esegui il comando <0>freeCodeCamp: Run Course0>",
- "step-5": "Quando ha finito, si aprirà il Simple Browser. Se vedi una pagina bianca vuota, usa il pulsante aggiorna per aggiornare e vedere la pagina iniziale del corso.",
- "step-6": "Clicca su uno dei progetti disponibili per iniziarlo, poi segui le istruzioni nel progetto per completarlo.",
- "continue-project": "Cliccando il pulsante di avvio qui sotto si avvierà una nuova macchina. Se hai già iniziato il corso {{course}}, vai al <0>tuo cruscotto Ona0> per continuare."
}
},
"local": {
diff --git a/client/japanese/intro.json b/client/japanese/intro.json
index 71fdef60f9b..8c0f2cace03 100644
--- a/client/japanese/intro.json
+++ b/client/japanese/intro.json
@@ -1352,12 +1352,6 @@
"この140レッスンのワークショップでは、SQLコマンドをさらに深く学びながら学生データベースを完成させます。"
]
},
- "lab-world-cup-database": {
- "title": "ワールドカップデータベースを作成する",
- "intro": [
- "このプロジェクトでは、ワールドカップの試合情報をPostgreSQLに入力するBashスクリプトを作成し、データベースから有用な統計をクエリします。"
- ]
- },
"workshop-kitty-ipsum-translator": {
"title": "キティイプサム翻訳機を作成する",
"intro": [
@@ -1371,6 +1365,12 @@
"この210レッスンのワークショップでは、PostgreSQLを使ってレンタル情報を保存するインタラクティブなBashプログラムを作成します。"
]
},
+ "lab-world-cup-database": {
+ "title": "ワールドカップデータベースを作成する",
+ "intro": [
+ "このプロジェクトでは、ワールドカップの試合情報をPostgreSQLに入力するBashスクリプトを作成し、データベースから有用な統計をクエリします。"
+ ]
+ },
"lab-salon-appointment-scheduler": {
"title": "サロン予約スケジューラーを作成する",
"intro": [
@@ -2669,6 +2669,13 @@
"スコアに基づいて学生の成績を判定する条件分岐を練習します。"
]
},
+ "lab-story-fragment-restoration": {
+ "title": "配列のストーリー断片から一貫した物語を復元する",
+ "intro": [
+ "このワークショップでは、破損したストーリー断片の配列から一貫した物語を復元します。",
+ "ループを使った基本的な配列アルゴリズムを一から実装して練習します。"
+ ]
+ },
"lecture-the-var-keyword-and-hoisting": {
"title": "varキーワードとホイスティング",
"intro": [
@@ -3774,18 +3781,18 @@
"このコースでCSSのボックスモデルを学びます。ウェブ上で要素がどのようにレンダリングされるかを理解し、スペース、ボーダー、パディングを操作して望むレイアウトとデザインを実現しましょう。"
]
},
- "top-introduction-to-flexbox": {
- "title": "Flexbox入門",
- "intro": [
- "Flexboxの力を発見しましょう。これは柔軟でレスポンシブなウェブレイアウトの設計を簡単にするレイアウトモデルです。動的で適応的なページ構造を簡単に作成する方法を学びます。"
- ]
- },
"top-learn-block-and-inline": {
"title": "ブロックとインラインの違いを学ぶ",
"intro": [
"HTMLとCSSにおけるブロック要素とインライン要素の違いを探求しましょう。このコースはこれらの表示タイプがレイアウトや動作にどのように影響するかを解説し、情報に基づいたデザイン判断を可能にします。"
]
},
+ "top-introduction-to-flexbox": {
+ "title": "Flexbox入門",
+ "intro": [
+ "Flexboxの力を発見しましょう。これは柔軟でレスポンシブなウェブレイアウトの設計を簡単にするレイアウトモデルです。動的で適応的なページ構造を簡単に作成する方法を学びます。"
+ ]
+ },
"top-learn-variables-and-operators": {
"title": "変数と演算子を学ぶ",
"intro": [
@@ -6287,12 +6294,6 @@
"Tailwind CSSのフレックスボックスレイアウト、カラー、ブレークポイントなどのユーティリティクラスを使う練習をします。"
]
},
- "lab-photography-exhibit": {
- "title": "写真展のデザインをする",
- "intro": [
- "このラボではTailwind CSSを使って写真展のウェブページをデザインする練習をします。"
- ]
- },
"review-css-libraries-and-frameworks": {
"title": "CSSライブラリとフレームワークの復習",
"intro": [
@@ -6306,6 +6307,12 @@
"CSSライブラリとフレームワークについて学んだことをこのクイズで試しましょう。"
]
},
+ "lab-photography-exhibit": {
+ "title": "写真展のデザインをする",
+ "intro": [
+ "このラボではTailwind CSSを使って写真展のウェブページをデザインする練習をします。"
+ ]
+ },
"lecture-introduction-to-typescript": {
"title": "TypeScript入門",
"intro": [
@@ -6372,18 +6379,6 @@
"このワークショップでは、TypeScriptの扱いを続けて練習しながら占いアプリを作成します。"
]
},
- "lab-flashcard-quiz-app": {
- "title": "フラッシュカードクイズアプリを作る",
- "intro": [
- "このラボでは、TypeScriptを使ってフラッシュカードクイズアプリを作成します。"
- ]
- },
- "lab-digital-pet-game": {
- "title": "デジタルペットゲームを作る",
- "intro": [
- "このラボでは、TypeScriptとReactで学んだことを活かしてデジタルペットゲームを作成します。"
- ]
- },
"workshop-build-a-football-player-card-builder": {
"title": "フットボール選手カードビルダーを作る",
"intro": [
@@ -6401,6 +6396,18 @@
"title": "TypeScriptクイズ",
"intro": ["このクイズでTypeScriptの学習内容をテストしてください。"]
},
+ "lab-flashcard-quiz-app": {
+ "title": "フラッシュカードクイズアプリを作る",
+ "intro": [
+ "このラボでは、TypeScriptを使ってフラッシュカードクイズアプリを作成します。"
+ ]
+ },
+ "lab-digital-pet-game": {
+ "title": "デジタルペットゲームを作る",
+ "intro": [
+ "このラボでは、TypeScriptとReactで学んだことを活かしてデジタルペットゲームを作成します。"
+ ]
+ },
"review-front-end-libraries": {
"title": "フロントエンドライブラリ復習",
"intro": [
@@ -7176,12 +7183,12 @@
"node-package-manager": "Nodeパッケージマネージャー",
"lab-prime-number-checker-module": "素数チェッカーモジュールを作成する",
"http-and-the-web-standards-model": "HTTPとウェブ標準モデル",
- "rest-api-and-web-services": "REST APIとウェブサービス",
- "lab-timestamp-microservice": "タイムスタンプマイクロサービスを作成する",
"introduction-to-express": "Express入門",
"lab-personal-profile-app": "個人プロフィールアプリケーションを作成する",
- "error-handling-in-express": "Expressのエラーハンドリング",
"express-middleware": "Expressミドルウェア",
+ "rest-api-and-web-services": "REST APIとウェブサービス",
+ "lab-timestamp-microservice": "タイムスタンプマイクロサービスを作成する",
+ "error-handling-in-express": "Expressのエラーハンドリング",
"websockets": "WebSockets",
"lab-chat-app": "チャットアプリを作成する",
"security-and-privacy": "セキュリティとプライバシー",
@@ -7192,109 +7199,91 @@
},
"module-intros": {
"introduction-to-nodejs": {
- "note": "2026年後半公開予定",
"intro": [
"このモジュールでは、Node.jsの基本的な使い方を学びます。"
]
},
"nodejs-core-modules": {
- "note": "2026年後半公開予定",
"intro": [
"このモジュールでは、fs、os、pathなどの一般的なNode.jsコアモジュールについて学びます。その後、ワークショップやラボで学んだことを実践し、短いクイズで知識を確認します。"
]
},
"node-package-manager": {
- "note": "2026年後半公開予定",
"intro": [
"このモジュールでは、開発者がプロジェクトの依存関係やスクリプトを管理するために使うNodeパッケージマネージャーを紹介します。その後、ワークショップやラボで学んだことを実践し、短いクイズで知識を確認します。"
]
},
"lab-prime-number-checker-module": {
- "note": "2026年後半公開予定",
"intro": [
"素数チェッカーを作成して、npmモジュールの構築とエクスポートを練習してください。"
]
},
"http-and-the-web-standards-model": {
- "note": "2026年後半公開予定",
"intro": [
"このモジュールでは、HTTP(ハイパーテキスト転送プロトコル)やリクエスト-レスポンスモデル、一般的なレスポンスコード、DNS、TCP/IPなどの重要な概念を学びます。その後、自分でウェブサーバーを構築するワークショップで実践し、短いクイズで知識を確認します。"
]
},
- "rest-api-and-web-services": {
- "note": "2026年後半公開予定",
+ "introduction-to-express": {
"intro": [
- "このモジュールでは、REST API(表現状態転送アプリケーションプログラミングインターフェース)とマイクロサービスの仕組みについて学びます。その後、短いクイズで知識を確認します。"
+ "このモジュールでは、RESTful APIを構築するためのフレームワークであるExpress.jsを紹介します。その後、ワークショップやラボでスキルを実践し、短いクイズで知識を確認します。"
]
},
- "lab-timestamp-microservice": {
- "note": "2026年後半公開予定",
+ "lab-personal-profile-app": {
"intro": [
- "タイムスタンプマイクロサービスを作成して、日付解析ロジックを持つRESTful APIの構築を練習してください。"
+ "個人プロフィールアプリケーションを作成して、ExpressサーバーとJSON APIの構築を練習してください。"
]
},
- "introduction-to-express": {
- "note": "2026年後半公開予定",
+ "express-middleware": {
"intro": [
- "このモジュールでは、RESTful APIを構築するためのフレームワークであるExpress.jsを紹介します。その後、ワークショップやラボでスキルを実践し、短いクイズで知識を確認します。"
+ "このモジュールでは、クライアントとサーバー間のリクエストとレスポンスを処理するために使われるExpress.jsのミドルウェアについて学びます。その後、ワークショップとラボでスキルを実践し、短いクイズで知識を確認します。"
]
},
- "lab-personal-profile-app": {
- "note": "2026年後半公開予定",
+ "rest-api-and-web-services": {
"intro": [
- "個人プロフィールアプリケーションを作成して、ExpressサーバーとJSON APIの構築を練習してください。"
+ "このモジュールでは、REST API(表現状態転送アプリケーションプログラミングインターフェース)とマイクロサービスの仕組みについて学びます。その後、短いクイズで知識を確認します。"
]
},
- "error-handling-in-express": {
- "note": "2026年後半公開予定",
+ "lab-timestamp-microservice": {
"intro": [
- "このモジュールでは、Express.jsのエラーハンドリング、デバッグ、ヘルスチェックの仕組みについて学びます。その後、ラボで実践し、短いクイズで知識を確認します。"
+ "タイムスタンプマイクロサービスを作成して、日付解析ロジックを持つRESTful APIの構築を練習してください。"
]
},
- "express-middleware": {
- "note": "2026年後半公開予定",
+ "error-handling-in-express": {
"intro": [
- "このモジュールでは、クライアントとサーバー間のリクエストとレスポンスを処理するために使われるExpress.jsのミドルウェアについて学びます。その後、ワークショップとラボでスキルを実践し、短いクイズで知識を確認します。"
+ "このモジュールでは、Express.jsのエラーハンドリング、デバッグ、ヘルスチェックの仕組みについて学びます。その後、ラボで実践し、短いクイズで知識を確認します。"
]
},
"websockets": {
- "note": "2026年後半公開予定",
"intro": [
"このモジュールでは、クライアントとサーバー間のリアルタイム通信に使われるプロトコルであるWebSocketsを紹介します。その後、ラボやワークショップで学んだことを実践し、短いクイズで知識を確認します。"
]
},
"lab-chat-app": {
- "note": "2026年後半公開予定",
"intro": [
"Node.jsのWebSocketを使ってリアルタイムのマルチクライアントチャットサーバーの構築を練習してください。"
]
},
"security-and-privacy": {
- "note": "2026年後半公開予定",
"intro": [
"このモジュールでは、セキュリティとプライバシーの違い、CSP、Permissions-Policies、PII、CORSの扱いなどの概念について学びます。その後、短いクイズで知識を確認します。"
]
},
"authentication": {
- "note": "2026年後半公開予定",
"intro": [
"このモジュールでは、ウェブアプリケーションの認証の仕組みやJWT、CSRF、Passport、Helmet、暗号化と暗号技術などの重要な概念について学びます。その後、ラボやワークショップで実践し、短いクイズで知識を確認します。"
]
},
"lab-family-movie-watchlist-api": {
- "note": "2026年後半公開予定",
"intro": [
"家族用映画ウォッチリストAPIを作成して、Expressアプリケーションでの認証と認可の実装を練習してください。"
]
},
"back-end-development-and-apis-certification-exam": {
- "note": "2026年後半公開予定",
"intro": [
"この試験に合格してバックエンド開発とAPI認定を取得しましょう。"
]
},
"review-back-end-development-and-apis": {
- "note": "2026年後半公開予定",
"intro": [
"今後の試験に備えてバックエンド開発とAPIの概念を復習しましょう。"
]
@@ -7302,7 +7291,7 @@
},
"blocks": {
"lecture-working-with-nodejs-and-event-driven-architecture": {
- "title": "NodeJSとイベント駆動アーキテクチャの活用",
+ "title": "Node.jsとイベント駆動アーキテクチャの活用",
"intro": [
"Node.jsのコアライブラリ、コンピューターへのNode.jsのインストール方法、バックエンドでNode.jsを使う利点と欠点について学びます。"
]
@@ -7416,24 +7405,6 @@
""
]
},
- "lecture-understanding-rest-api-and-web-services": {
- "title": "REST APIとウェブサービスの理解",
- "intro": [
- "このレッスンでは、REST APIとウェブサービスについて学び、異なるアプリケーションがインターネットを介してどのように通信するかを理解します。"
- ]
- },
- "workshop-build-a-weather-service-api": {
- "title": "天気サービスAPIを作る",
- "intro": [
- "express.Router を使ったルートパラメータとモジュラー型ルーティングを学びながら天気サービスAPIを作ります。"
- ]
- },
- "lab-timestamp-microservice": {
- "title": "タイムスタンプマイクロサービスを作る",
- "intro": [
- "日付解析ロジックを使ったRESTful APIを作る練習として、タイムスタンプマイクロサービスを作成します。"
- ]
- },
"lecture-working-with-express": {
"title": "Expressの使い方",
"intro": [
@@ -7453,16 +7424,10 @@
"ランダムジョークアプリを作りながら、基本的なExpressルーティングとレスポンスメソッドを学びます。"
]
},
- "lab-personal-profile-app": {
- "title": "個人プロフィールアプリを作る",
- "intro": [
- "ExpressサーバーとJSON APIを作る練習として、個人プロフィールアプリケーションを作成します。"
- ]
- },
"review-introduction-to-express": {
"title": "Express入門の復習",
"intro": [
- "クイズを受ける前に、ウェブサービス、REST、マイクロサービス、Express.jsのルーティングを復習しましょう。"
+ "クイズに挑戦する前に、Express.js、ルーティング、レスポンスメソッド、静的ファイルの提供を復習しましょう。"
]
},
"quiz-introduction-to-express": {
@@ -7471,28 +7436,10 @@
"ウェブサービス、REST、マイクロサービス、Express.js、ルーティングの知識をテストしましょう。"
]
},
- "lecture-understanding-error-handling-and-health-checks": {
- "title": "エラーハンドリングとヘルスチェックの理解",
- "intro": [
- "このレッスンでは、Expressにおけるエラーハンドリングとヘルスチェックについて学びます。"
- ]
- },
- "workshop-build-a-bank-api": {
- "title": "銀行APIを作る",
- "intro": [
- "銀行APIを作りながら、Express 5のエラーハンドリング、ヘルスチェック、グレースフルシャットダウンを学びます。"
- ]
- },
- "review-error-handling-in-express": {
- "title": "Expressのエラーハンドリング復習",
- "intro": [
- "クイズを受ける前に、HTTPステータスコード、エラーハンドリング、デバッグ、ログ記録、ヘルスチェック、グレースフルシャットダウンを復習しましょう。"
- ]
- },
- "quiz-error-handling-in-express": {
- "title": "Expressのエラーハンドリングクイズ",
+ "lab-personal-profile-app": {
+ "title": "個人プロフィールアプリを作る",
"intro": [
- "HTTPステータスコード、エラーハンドリング、デバッグ、ログ記録、ヘルスチェック、グレースフルシャットダウンの知識をテストしましょう。"
+ "ExpressサーバーとJSON APIを作る練習として、個人プロフィールアプリケーションを作成します。"
]
},
"lecture-express-middleware": {
@@ -7525,6 +7472,54 @@
"Expressのミドルウェア、アプリケーションレベル、ルーターレベル、エラーハンドリング、組み込みおよびサードパーティのミドルウェアの知識をテストしましょう。"
]
},
+ "lecture-understanding-rest-api-and-web-services": {
+ "title": "REST APIとウェブサービスの理解",
+ "intro": [
+ "このレッスンでは、REST APIとウェブサービスについて学び、異なるアプリケーションがインターネットを介してどのように通信するかを理解します。"
+ ]
+ },
+ "workshop-build-a-weather-service-api": {
+ "title": "天気サービスAPIを作る",
+ "intro": [
+ "express.Router を使ったルートパラメータとモジュラー型ルーティングを学びながら天気サービスAPIを作ります。"
+ ]
+ },
+ "review-rest-api-and-web-services": {
+ "title": "REST APIとウェブサービスの復習",
+ "intro": [
+ "ウェブサービス、RESTアーキテクチャ、HTTPステータスコード、マイクロサービスを復習します。"
+ ]
+ },
+ "lab-timestamp-microservice": {
+ "title": "タイムスタンプマイクロサービスを作る",
+ "intro": [
+ "日付解析ロジックを使ったRESTful APIを作る練習として、タイムスタンプマイクロサービスを作成します。"
+ ]
+ },
+ "lecture-understanding-error-handling-and-health-checks": {
+ "title": "エラーハンドリングとヘルスチェックの理解",
+ "intro": [
+ "このレッスンでは、Expressにおけるエラーハンドリングとヘルスチェックについて学びます。"
+ ]
+ },
+ "workshop-build-a-bank-api": {
+ "title": "銀行APIを作る",
+ "intro": [
+ "銀行APIを作りながら、Express 5のエラーハンドリング、ヘルスチェック、グレースフルシャットダウンを学びます。"
+ ]
+ },
+ "review-error-handling-in-express": {
+ "title": "Expressのエラーハンドリング復習",
+ "intro": [
+ "クイズを受ける前に、HTTPステータスコード、エラーハンドリング、デバッグ、ログ記録、ヘルスチェック、グレースフルシャットダウンを復習しましょう。"
+ ]
+ },
+ "quiz-error-handling-in-express": {
+ "title": "Expressのエラーハンドリングクイズ",
+ "intro": [
+ "HTTPステータスコード、エラーハンドリング、デバッグ、ログ記録、ヘルスチェック、グレースフルシャットダウンの知識をテストしましょう。"
+ ]
+ },
"lecture-understanding-websockets": {
"title": "WebSocketsの理解",
"intro": [
@@ -8427,7 +8422,7 @@
"title": "カフェメニューをデザインする",
"intro": [
"CSSはブラウザーにウェブページの表示方法を指示します。色、フォント、サイズなどHTML要素の様々なスタイルを設定できます。",
- "このワークショップでは、カフェのウェブページ用メニューページをデザインしながらCSSを学びます。"
+ "このワークショップでは、カフェのメニューページをデザインしながらCSSを学びます。"
]
},
"lab-business-card": {
@@ -9695,7 +9690,7 @@
"title": "カフェメニューをデザインする",
"intro": [
"CSSはブラウザにウェブページの表示方法を指示します。CSSを使ってHTML要素の色、フォント、サイズなどを設定できます。",
- "このワークショップでは、カフェのウェブページのメニューページをデザインしながらCSSを学びます。"
+ "このワークショップでは、カフェのメニューページをデザインしながらCSSを学びます。"
]
},
"lab-business-card": {
diff --git a/client/japanese/translations.json b/client/japanese/translations.json
index 69373f5e3c7..10b673160c3 100644
--- a/client/japanese/translations.json
+++ b/client/japanese/translations.json
@@ -558,6 +558,12 @@
"running-tests": "// テスト実行中",
"tests-completed": "// テスト完了",
"console-output": "// コンソール出力",
+ "unavailable-local-resource": "リソースの読み込みに失敗しました:「{{source}}」は利用可能なローカル{{resourceType}}ファイルではありません。使用可能なもの:{{allowedSources}}。",
+ "unavailable-local-resource-no-allowed": "リソースの読み込みに失敗しました:「{{source}}」はこのチャレンジで利用可能なローカル{{resourceType}}ファイルではありません。",
+ "local-resource-type": {
+ "stylesheet": "スタイルシート",
+ "script": "スクリプト"
+ },
"example-app": "<0>この例のプロジェクト0>と機能的に似たアプリを作成してください。例のプロジェクトをコピーせず、自分のスタイルを出しましょう。",
"syntax-error": "テストを実行する前にコードでエラーが発生しました。修正して再度試してください。",
"indentation-error": "コードにインデントエラーがあります。有効なコードブロックを作るために新しい行にpassを追加する必要があるかもしれません。",
@@ -656,25 +662,6 @@
"sub-step-7": "<0>シークレットを追加0>ボタンをクリックしてください",
"summary": "Codespacesセットアップ"
},
- "ona": {
- "intro": "このコースはOnaを使った仮想Linuxマシン上で実行されます。コースを開始するには以下の手順に従ってください:",
- "step-1": "<0>Onaアカウントを作成0>してください(まだお持ちでない場合)",
- "step-2": "下の開始ボタンをクリックしてください",
- "step-3": "表示されるモーダルで作成ボタンをクリックしてください",
- "step-4": "仮想Linuxマシンの読み込みが完了したら、CodeRoad拡張機能を起動してください:",
- "step-5": "VSCodeウィンドウ左上の「ハンバーガーメニュー」をクリックし、",
- "step-6": "<0>表示0>メニューに移動し、",
- "step-7": "<0>コマンドパレット0>をクリックし、",
- "step-8": "<0>CodeRoad: Start0>コマンドを実行してください",
- "step-9": "CodeRoadの指示に従ってコースを完了してください",
- "continue-project": "下の開始ボタンをクリックすると新しいプロジェクトが始まります。以前に{{course}}コースを開始している場合は、<0>Onaダッシュボード0>に行き続行してください。",
- "learn-more": "<0>Onaワークスペース0>について詳しく学ぶ。",
- "logout-warning": "{{course}}コースを完了する前にfreeCodeCampからログアウトすると、進捗はfreeCodeCampアカウントに保存されません。",
- "sub-step-3": "<0>Onaのシークレットページ0>に移動してください",
- "sub-step-4": "<0>CODEROAD_WEBHOOK_TOKEN0>という名前の新しいシークレットを作成してください",
- "sub-step-5": "<0>シークレット0>欄にトークンを貼り付けてください",
- "summary": "Onaセットアップ"
- },
"freecodecamp-os": {
"token-modal": "コースを実行すると、ユーザートークンの入力を求めるモーダルが表示されます。上でコピーしたトークンを貼り付けてください。環境ごとに一度だけ行えば十分です。",
"local": {
@@ -697,16 +684,6 @@
"step-5": "完了すると Simple Browser が開きます。白紙のページが表示された場合は、更新ボタンを使って更新し、コースのホームページを表示してください。",
"step-6": "利用可能なプロジェクトのいずれかをクリックして開始し、プロジェクト内の指示に従って完了させてください。",
"continue-project": "下の開始ボタンをクリックすると新しいマシンが起動します。以前に {{title}} コースを開始している場合は、<0>リポジトリページ0>に移動して以前のワークスペースを再開してください。"
- },
- "ona": {
- "intro": "このコースは、Ona と freeCodeCamp - Courses VS Code拡張機能を使って仮想Linuxマシン上で実行されます。コースを開始するには以下の手順に従ってください。",
- "step-1": "<0>Onaアカウントを作成0>してください(まだお持ちでなければ)。",
- "step-2": "下の開始ボタンをクリックしてください。",
- "step-3": "表示されるモーダルで作成ボタンをクリックしてください。",
- "step-4": "仮想Linuxマシンの読み込みが完了したら、コマンドパレットを開き、<0>freeCodeCamp: Run Course0> コマンドを実行してください。",
- "step-5": "完了すると Simple Browser が開きます。白紙のページが表示された場合は、更新ボタンを使って更新し、コースのホームページを表示してください。",
- "step-6": "利用可能なプロジェクトのいずれかをクリックして開始し、プロジェクト内の指示に従って完了させてください。",
- "continue-project": "下の開始ボタンをクリックすると新しいマシンが起動します。以前に {{course}} コースを開始している場合は、<0>Onaダッシュボード0>に移動して続行してください。"
}
},
"local": {
diff --git a/client/korean/intro.json b/client/korean/intro.json
index 2c00ad660a4..e2a32e33ec3 100644
--- a/client/korean/intro.json
+++ b/client/korean/intro.json
@@ -1352,12 +1352,6 @@
"이 140수업 워크숍에서 SQL 명령어를 더 깊이 배우며 학생 데이터베이스를 완성하세요."
]
},
- "lab-world-cup-database": {
- "title": "월드컵 데이터베이스 만들기",
- "intro": [
- "이 프로젝트에서 월드컵 경기 정보를 PostgreSQL에 입력하는 Bash 스크립트를 만들고 유용한 통계를 쿼리하세요."
- ]
- },
"workshop-kitty-ipsum-translator": {
"title": "키티 입숨 번역기 만들기",
"intro": [
@@ -1371,6 +1365,12 @@
"이 210수업 워크숍에서 PostgreSQL을 사용해 자전거 대여점 대여 정보를 저장하는 대화형 Bash 프로그램을 만드세요."
]
},
+ "lab-world-cup-database": {
+ "title": "월드컵 데이터베이스 만들기",
+ "intro": [
+ "이 프로젝트에서 월드컵 경기 정보를 PostgreSQL에 입력하는 Bash 스크립트를 만들고 유용한 통계를 쿼리하세요."
+ ]
+ },
"lab-salon-appointment-scheduler": {
"title": "살롱 예약 스케줄러 만들기",
"intro": [
@@ -2669,6 +2669,13 @@
"점수에 따라 학생의 성적을 결정하는 조건문을 연습합니다."
]
},
+ "lab-story-fragment-restoration": {
+ "title": "스토리 조각 배열에서 일관된 내러티브 복원하기",
+ "intro": [
+ "이 워크숍에서는 손상된 스토리 조각 배열에서 일관된 내러티브를 복원합니다.",
+ "기본 배열 알고리즘을 처음부터 구현하며 반복문 사용법을 연습하세요."
+ ]
+ },
"lecture-the-var-keyword-and-hoisting": {
"title": "var 키워드와 호이스팅",
"intro": [
@@ -3774,18 +3781,18 @@
"이 과정으로 CSS 박스 모델을 배우세요. 웹에서 요소가 어떻게 렌더링되는지 이해하고, 원하는 레이아웃과 디자인을 위해 간격, 테두리, 패딩을 조작하는 방법을 익히세요."
]
},
- "top-introduction-to-flexbox": {
- "title": "Flexbox 소개",
- "intro": [
- "유연하고 반응형 웹 레이아웃 설계를 단순화하는 레이아웃 모델인 Flexbox의 강력함을 발견하세요. 동적이고 적응력 있는 페이지 구조를 쉽게 만드는 방법을 배우세요."
- ]
- },
"top-learn-block-and-inline": {
"title": "블록과 인라인의 차이 배우기",
"intro": [
"HTML과 CSS에서 블록 요소와 인라인 요소의 차이를 탐구하세요. 이 과정은 이 디스플레이 유형들이 레이아웃과 동작에 미치는 영향을 알려주어 현명한 디자인 결정을 돕습니다."
]
},
+ "top-introduction-to-flexbox": {
+ "title": "Flexbox 소개",
+ "intro": [
+ "유연하고 반응형 웹 레이아웃 설계를 단순화하는 레이아웃 모델인 Flexbox의 강력함을 발견하세요. 동적이고 적응력 있는 페이지 구조를 쉽게 만드는 방법을 배우세요."
+ ]
+ },
"top-learn-variables-and-operators": {
"title": "변수와 연산자 배우기",
"intro": [
@@ -6287,12 +6294,6 @@
"Tailwind CSS 유틸리티 클래스를 사용해 플렉스박스 레이아웃, 색상, 브레이크포인트 등을 다루는 연습을 하세요."
]
},
- "lab-photography-exhibit": {
- "title": "사진 전시회 디자인하기",
- "intro": [
- "이 실습에서 Tailwind CSS를 사용해 사진 전시회 웹페이지를 디자인하는 연습을 하세요."
- ]
- },
"review-css-libraries-and-frameworks": {
"title": "CSS 라이브러리와 프레임워크 복습",
"intro": [
@@ -6306,6 +6307,12 @@
"이 퀴즈로 CSS 라이브러리와 프레임워크에 대해 배운 것을 테스트하세요."
]
},
+ "lab-photography-exhibit": {
+ "title": "사진 전시회 디자인하기",
+ "intro": [
+ "이 실습에서 Tailwind CSS를 사용해 사진 전시회 웹페이지를 디자인하는 연습을 하세요."
+ ]
+ },
"lecture-introduction-to-typescript": {
"title": "TypeScript 소개",
"intro": [
@@ -6372,18 +6379,6 @@
"이 워크숍에서는 TypeScript를 계속 연습하며 운세 앱을 만듭니다."
]
},
- "lab-flashcard-quiz-app": {
- "title": "플래시카드 퀴즈 앱 만들기",
- "intro": [
- "이 실습에서는 TypeScript를 사용해 플래시카드 퀴즈 앱을 만듭니다."
- ]
- },
- "lab-digital-pet-game": {
- "title": "디지털 펫 게임 만들기",
- "intro": [
- "이 실습에서는 TypeScript와 React에서 배운 내용을 활용해 디지털 펫 게임을 만듭니다."
- ]
- },
"workshop-build-a-football-player-card-builder": {
"title": "축구 선수 카드 빌더 만들기",
"intro": [
@@ -6401,6 +6396,18 @@
"title": "TypeScript 퀴즈",
"intro": ["이 퀴즈로 TypeScript 학습 내용을 테스트하세요."]
},
+ "lab-flashcard-quiz-app": {
+ "title": "플래시카드 퀴즈 앱 만들기",
+ "intro": [
+ "이 실습에서는 TypeScript를 사용해 플래시카드 퀴즈 앱을 만듭니다."
+ ]
+ },
+ "lab-digital-pet-game": {
+ "title": "디지털 펫 게임 만들기",
+ "intro": [
+ "이 실습에서는 TypeScript와 React에서 배운 내용을 활용해 디지털 펫 게임을 만듭니다."
+ ]
+ },
"review-front-end-libraries": {
"title": "프론트엔드 라이브러리 복습",
"intro": [
@@ -7176,12 +7183,12 @@
"node-package-manager": "Node 패키지 관리자",
"lab-prime-number-checker-module": "소수 검사 모듈 만들기",
"http-and-the-web-standards-model": "HTTP와 웹 표준 모델",
- "rest-api-and-web-services": "REST API와 웹 서비스",
- "lab-timestamp-microservice": "타임스탬프 마이크로서비스 만들기",
"introduction-to-express": "Express 소개",
"lab-personal-profile-app": "개인 프로필 애플리케이션 만들기",
- "error-handling-in-express": "Express에서의 오류 처리",
"express-middleware": "Express 미들웨어",
+ "rest-api-and-web-services": "REST API와 웹 서비스",
+ "lab-timestamp-microservice": "타임스탬프 마이크로서비스 만들기",
+ "error-handling-in-express": "Express에서의 오류 처리",
"websockets": "웹소켓",
"lab-chat-app": "채팅 애플리케이션 만들기",
"security-and-privacy": "보안과 개인정보 보호",
@@ -7192,109 +7199,91 @@
},
"module-intros": {
"introduction-to-nodejs": {
- "note": "2026년 말 출시 예정",
"intro": [
"이 모듈에서는 Node.js 작업의 기본을 배웁니다."
]
},
"nodejs-core-modules": {
- "note": "2026년 말 출시 예정",
"intro": [
"이 모듈에서는 fs, os, path 등 일반적인 Node.js 코어 모듈을 배우고 워크숍과 실습으로 익힌 후 짧은 퀴즈로 지식을 테스트합니다."
]
},
"node-package-manager": {
- "note": "2026년 말 출시 예정",
"intro": [
"이 모듈에서는 개발자가 프로젝트 의존성과 스크립트를 관리하는 데 사용하는 Node 패키지 관리자를 소개합니다. 이후 워크숍과 실습으로 배운 내용을 연습하고 짧은 퀴즈로 지식을 확인합니다."
]
},
"lab-prime-number-checker-module": {
- "note": "2026년 말 출시 예정",
"intro": [
"소수 검사기를 만들어 NPM 모듈을 빌드하고 내보내는 연습을 하세요."
]
},
"http-and-the-web-standards-model": {
- "note": "2026년 말 출시 예정",
"intro": [
"이 모듈에서는 HTTP(하이퍼텍스트 전송 프로토콜)와 요청-응답 모델, 일반 응답 코드, DNS, TCP/IP 등 중요한 개념을 배우고 웹 서버 구축 워크숍과 짧은 퀴즈로 실습합니다."
]
},
- "rest-api-and-web-services": {
- "note": "2026년 말 출시 예정",
+ "introduction-to-express": {
"intro": [
- "이 모듈에서는 REST API(표현 상태 전송 애플리케이션 프로그래밍 인터페이스)와 마이크로서비스 작동 방식을 배우고 짧은 퀴즈로 지식을 테스트합니다."
+ "이 모듈에서는 RESTful API를 구축하는 데 사용하는 프레임워크인 Express.js를 소개하고 워크숍과 실습으로 기술을 연습한 뒤 짧은 퀴즈로 확인합니다."
]
},
- "lab-timestamp-microservice": {
- "note": "2026년 말 출시 예정",
+ "lab-personal-profile-app": {
"intro": [
- "날짜 파싱 로직을 포함한 RESTful API를 만들어 타임스탬프 마이크로서비스를 빌드하는 연습을 하세요."
+ "Express 서버와 JSON API를 만들어 개인 프로필 애플리케이션을 빌드하는 연습을 하세요."
]
},
- "introduction-to-express": {
- "note": "2026년 말 출시 예정",
+ "express-middleware": {
"intro": [
- "이 모듈에서는 RESTful API를 구축하는 데 사용하는 프레임워크인 Express.js를 소개하고 워크숍과 실습으로 기술을 연습한 뒤 짧은 퀴즈로 확인합니다."
+ "이 모듈에서는 클라이언트와 서버 간 요청과 응답을 처리하는 Express.js 미들웨어를 배우고 워크숍과 실습으로 연습한 뒤 짧은 퀴즈로 확인합니다."
]
},
- "lab-personal-profile-app": {
- "note": "2026년 말 출시 예정",
+ "rest-api-and-web-services": {
"intro": [
- "Express 서버와 JSON API를 만들어 개인 프로필 애플리케이션을 빌드하는 연습을 하세요."
+ "이 모듈에서는 REST API(표현 상태 전송 애플리케이션 프로그래밍 인터페이스)와 마이크로서비스 작동 방식을 배우고 짧은 퀴즈로 지식을 테스트합니다."
]
},
- "error-handling-in-express": {
- "note": "2026년 말 출시 예정",
+ "lab-timestamp-microservice": {
"intro": [
- "이 모듈에서는 Express.js에서 오류 처리, 디버깅, 상태 점검이 어떻게 작동하는지 배우고 실습과 짧은 퀴즈로 익힙니다."
+ "날짜 파싱 로직을 포함한 RESTful API를 만들어 타임스탬프 마이크로서비스를 빌드하는 연습을 하세요."
]
},
- "express-middleware": {
- "note": "2026년 말 출시 예정",
+ "error-handling-in-express": {
"intro": [
- "이 모듈에서는 클라이언트와 서버 간 요청과 응답을 처리하는 Express.js 미들웨어를 배우고 워크숍과 실습으로 연습한 뒤 짧은 퀴즈로 확인합니다."
+ "이 모듈에서는 Express.js에서 오류 처리, 디버깅, 상태 점검이 어떻게 작동하는지 배우고 실습과 짧은 퀴즈로 익힙니다."
]
},
"websockets": {
- "note": "2026년 말 출시 예정",
"intro": [
"이 모듈에서는 클라이언트와 서버 간 실시간 통신에 사용하는 프로토콜인 웹소켓을 소개하고 실습과 워크숍으로 배운 내용을 연습한 뒤 짧은 퀴즈로 테스트합니다."
]
},
"lab-chat-app": {
- "note": "2026년 말 출시 예정",
"intro": [
"Node.js WebSocket을 사용해 실시간 다중 클라이언트 채팅 서버를 빌드하는 연습을 하세요."
]
},
"security-and-privacy": {
- "note": "2026년 말 출시 예정",
"intro": [
"이 모듈에서는 보안과 개인정보 보호의 차이점, CSP, 권한 정책, 개인 식별 정보(PII), CORS 작업 등 다양한 개념을 배우고 짧은 퀴즈로 지식을 확인합니다."
]
},
"authentication": {
- "note": "2026년 말 출시 예정",
"intro": [
"이 모듈에서는 웹 애플리케이션에서 인증이 어떻게 작동하는지, JWT, CSRF, Passport, Helmet, 암호화 및 암호화 기술 등 중요한 개념을 배우고 실습과 워크숍으로 연습한 뒤 짧은 퀴즈로 확인합니다."
]
},
"lab-family-movie-watchlist-api": {
- "note": "2026년 말 출시 예정",
"intro": [
"Express 애플리케이션에서 인증과 권한 부여를 구현해 가족 영화 목록 API를 만드는 연습을 하세요."
]
},
"back-end-development-and-apis-certification-exam": {
- "note": "2026년 말 출시 예정",
"intro": [
"이 시험에 합격해 백엔드 개발 및 API 인증을 받으세요."
]
},
"review-back-end-development-and-apis": {
- "note": "2026년 말 출시 예정",
"intro": [
"다가오는 시험 준비를 위해 백엔드 개발 및 API 개념을 복습하세요."
]
@@ -7302,7 +7291,7 @@
},
"blocks": {
"lecture-working-with-nodejs-and-event-driven-architecture": {
- "title": "NodeJS와 이벤트 기반 아키텍처 작업",
+ "title": "Node.js와 이벤트 기반 아키텍처 다루기",
"intro": [
"Node.js 코어 라이브러리, 컴퓨터에 Node.js 설치 방법, 백엔드에서 Node.js 사용의 장단점을 배우세요."
]
@@ -7416,24 +7405,6 @@
""
]
},
- "lecture-understanding-rest-api-and-web-services": {
- "title": "REST API와 웹 서비스 이해하기",
- "intro": [
- "이 수업에서는 REST API와 웹 서비스가 무엇이며, 인터넷을 통해 서로 다른 애플리케이션이 어떻게 통신하는지 배웁니다."
- ]
- },
- "workshop-build-a-weather-service-api": {
- "title": "날씨 서비스 API 만들기",
- "intro": [
- "날씨 서비스 API를 만들어 express.Router로 라우트 매개변수와 모듈식 라우팅을 배우세요."
- ]
- },
- "lab-timestamp-microservice": {
- "title": "타임스탬프 마이크로서비스 만들기",
- "intro": [
- "날짜 파싱 로직을 포함한 RESTful API를 만들어 타임스탬프 마이크로서비스를 연습하세요."
- ]
- },
"lecture-working-with-express": {
"title": "Express 다루기",
"intro": [
@@ -7453,16 +7424,10 @@
"랜덤 농담 앱을 만들어 기본 Express 라우팅과 응답 메서드를 배우세요."
]
},
- "lab-personal-profile-app": {
- "title": "개인 프로필 앱 만들기",
- "intro": [
- "Express 서버와 JSON API를 만들어 개인 프로필 애플리케이션을 연습하세요."
- ]
- },
"review-introduction-to-express": {
"title": "Express 소개 복습",
"intro": [
- "퀴즈 전에 웹 서비스, REST, 마이크로서비스, Express.js 라우팅을 복습하세요."
+ "퀴즈 전에 Express.js, 라우팅, 응답 메서드, 정적 파일 제공을 검토하세요."
]
},
"quiz-introduction-to-express": {
@@ -7471,28 +7436,10 @@
"웹 서비스, REST, 마이크로서비스, Express.js, 라우팅에 대한 지식을 테스트하세요."
]
},
- "lecture-understanding-error-handling-and-health-checks": {
- "title": "오류 처리와 상태 점검 이해하기",
- "intro": [
- "이 수업에서는 Express에서 오류 처리와 상태 점검에 대해 배웁니다."
- ]
- },
- "workshop-build-a-bank-api": {
- "title": "은행 API 만들기",
- "intro": [
- "은행 API를 만들어 Express 5 오류 처리, 상태 점검, 정상 종료를 배우세요."
- ]
- },
- "review-error-handling-in-express": {
- "title": "Express 오류 처리 복습",
- "intro": [
- "퀴즈 전에 HTTP 상태 코드, 오류 처리, 디버깅, 로깅, 상태 점검, 정상 종료를 복습하세요."
- ]
- },
- "quiz-error-handling-in-express": {
- "title": "Express 오류 처리 퀴즈",
+ "lab-personal-profile-app": {
+ "title": "개인 프로필 앱 만들기",
"intro": [
- "HTTP 상태 코드, 오류 처리, 디버깅, 로깅, 상태 점검, 정상 종료에 대한 지식을 테스트하세요."
+ "Express 서버와 JSON API를 만들어 개인 프로필 애플리케이션을 연습하세요."
]
},
"lecture-express-middleware": {
@@ -7525,6 +7472,54 @@
"애플리케이션 수준, 라우터 수준, 오류 처리, 내장 및 서드파티 미들웨어를 포함한 Express 미들웨어 지식을 테스트하세요."
]
},
+ "lecture-understanding-rest-api-and-web-services": {
+ "title": "REST API와 웹 서비스 이해하기",
+ "intro": [
+ "이 수업에서는 REST API와 웹 서비스가 무엇이며, 인터넷을 통해 서로 다른 애플리케이션이 어떻게 통신하는지 배웁니다."
+ ]
+ },
+ "workshop-build-a-weather-service-api": {
+ "title": "날씨 서비스 API 만들기",
+ "intro": [
+ "날씨 서비스 API를 만들어 express.Router로 라우트 매개변수와 모듈식 라우팅을 배우세요."
+ ]
+ },
+ "review-rest-api-and-web-services": {
+ "title": "REST API 및 웹 서비스 검토",
+ "intro": [
+ "웹 서비스, REST 아키텍처, HTTP 상태 코드, 마이크로서비스를 검토하세요."
+ ]
+ },
+ "lab-timestamp-microservice": {
+ "title": "타임스탬프 마이크로서비스 만들기",
+ "intro": [
+ "날짜 파싱 로직을 포함한 RESTful API를 만들어 타임스탬프 마이크로서비스를 연습하세요."
+ ]
+ },
+ "lecture-understanding-error-handling-and-health-checks": {
+ "title": "오류 처리와 상태 점검 이해하기",
+ "intro": [
+ "이 수업에서는 Express에서 오류 처리와 상태 점검에 대해 배웁니다."
+ ]
+ },
+ "workshop-build-a-bank-api": {
+ "title": "은행 API 만들기",
+ "intro": [
+ "은행 API를 만들어 Express 5 오류 처리, 상태 점검, 정상 종료를 배우세요."
+ ]
+ },
+ "review-error-handling-in-express": {
+ "title": "Express 오류 처리 복습",
+ "intro": [
+ "퀴즈 전에 HTTP 상태 코드, 오류 처리, 디버깅, 로깅, 상태 점검, 정상 종료를 복습하세요."
+ ]
+ },
+ "quiz-error-handling-in-express": {
+ "title": "Express 오류 처리 퀴즈",
+ "intro": [
+ "HTTP 상태 코드, 오류 처리, 디버깅, 로깅, 상태 점검, 정상 종료에 대한 지식을 테스트하세요."
+ ]
+ },
"lecture-understanding-websockets": {
"title": "WebSocket 이해하기",
"intro": [
@@ -8427,7 +8422,7 @@
"title": "카페 메뉴 디자인",
"intro": [
"CSS는 브라우저가 웹페이지를 어떻게 표시할지 알려줍니다. CSS로 HTML 요소의 색상, 폰트, 크기 등 다양한 속성을 설정할 수 있습니다.",
- "이 워크숍에서는 카페 웹페이지 메뉴 페이지를 디자인하며 CSS를 배웁니다."
+ "이 워크숍에서 카페 메뉴 페이지를 디자인하며 CSS를 배우세요."
]
},
"lab-business-card": {
@@ -9695,7 +9690,7 @@
"title": "카페 메뉴 디자인하기",
"intro": [
"CSS는 브라우저가 웹페이지를 어떻게 표시할지 알려줍니다. CSS로 HTML 요소의 색상, 폰트, 크기 등 다양한 부분을 설정할 수 있습니다.",
- "이 워크숍에서 카페 웹페이지 메뉴 페이지를 디자인하며 CSS를 배웁니다."
+ "이 워크숍에서 카페 메뉴 페이지를 디자인하며 CSS를 배우세요."
]
},
"lab-business-card": {
diff --git a/client/korean/translations.json b/client/korean/translations.json
index c51f8598141..925ad32d763 100644
--- a/client/korean/translations.json
+++ b/client/korean/translations.json
@@ -558,6 +558,12 @@
"running-tests": "// 테스트 실행 중",
"tests-completed": "// 테스트 완료",
"console-output": "// 콘솔 출력",
+ "unavailable-local-resource": "리소스를 불러오지 못했습니다: \"{{source}}\"는 사용 가능한 로컬 {{resourceType}} 파일이 아닙니다. 사용 가능한 소스: {{allowedSources}}.",
+ "unavailable-local-resource-no-allowed": "리소스를 불러오지 못했습니다: \"{{source}}\"는 이 도전 과제에서 사용 가능한 로컬 {{resourceType}} 파일이 아닙니다.",
+ "local-resource-type": {
+ "stylesheet": "스타일시트",
+ "script": "스크립트"
+ },
"example-app": "<0>이 예제 프로젝트0>와 기능적으로 유사한 앱을 만드세요. 예제 프로젝트를 복사하지 말고 자신만의 스타일을 적용해 보세요.",
"syntax-error": "테스트를 실행하기 전에 코드에서 오류가 발생했습니다. 수정 후 다시 시도하세요.",
"indentation-error": "코드에 들여쓰기 오류가 있습니다. 유효한 코드 블록을 만들려면 새 줄에 pass를 추가해야 할 수 있습니다.",
@@ -656,25 +662,6 @@
"sub-step-7": "<0>비밀 추가0> 버튼을 클릭하세요",
"summary": "Codespaces 설정"
},
- "ona": {
- "intro": "이 과정은 Ona를 사용하는 가상 Linux 머신에서 실행됩니다. 과정을 시작하려면 다음 지침을 따르세요:",
- "step-1": "<0>Ona 계정 만들기0>가 없으면 만드세요",
- "step-2": "아래 시작 버튼을 클릭하세요",
- "step-3": "팝업 모달에서 생성 버튼을 클릭하세요",
- "step-4": "가상 Linux 머신이 로드되면 다음 방법으로 CodeRoad 확장 기능을 시작하세요:",
- "step-5": "VSCode 창 왼쪽 상단 근처의 \"햄버거\" 메뉴를 클릭하세요,",
- "step-6": "<0>보기0> 메뉴로 이동하세요,",
- "step-7": "<0>명령 팔레트0> 옵션을 클릭하세요,",
- "step-8": "<0>CodeRoad: 시작0> 명령을 실행하세요",
- "step-9": "CodeRoad의 지침을 따라 과정을 완료하세요",
- "continue-project": "아래 시작 버튼을 클릭하면 새 프로젝트가 시작됩니다. 이전에 {{course}} 과정을 시작했다면 <0>Ona 대시보드0>로 가서 계속하세요.",
- "learn-more": "<0>Ona 작업 공간0>에 대해 더 알아보세요.",
- "logout-warning": "전체 {{course}} 과정을 완료하기 전에 freeCodeCamp에서 로그아웃하면 진행 상황이 freeCodeCamp 계정에 저장되지 않습니다.",
- "sub-step-3": "<0>Ona 비밀 페이지0>로 이동하세요",
- "sub-step-4": "<0>CODEROAD_WEBHOOK_TOKEN0>이라는 새 비밀을 만드세요",
- "sub-step-5": "<0>비밀0> 필드에 토큰을 붙여넣으세요",
- "summary": "Ona 설정"
- },
"freecodecamp-os": {
"token-modal": "과정을 실행하면 사용자 토큰을 묻는 모달이 나타납니다. 위에서 복사한 토큰을 붙여넣으세요. 환경별로 한 번만 하면 됩니다.",
"local": {
@@ -697,16 +684,6 @@
"step-5": "완료되면 Simple Browser가 열립니다. 빈 흰색 페이지가 나오면 새로 고침 버튼을 눌러 업데이트하고 과정 홈 페이지를 확인하세요.",
"step-6": "사용 가능한 프로젝트 중 하나를 클릭해 시작한 뒤, 프로젝트 내 지침을 따라 완료하세요.",
"continue-project": "아래 시작 버튼을 클릭하면 새 머신이 시작됩니다. 이전에 {{title}} 과정을 시작했다면 <0>저장소 페이지0>로 가서 이전 작업 공간을 다시 여세요."
- },
- "ona": {
- "intro": "이 과정은 Ona와 freeCodeCamp - Courses VS Code 확장 프로그램을 사용해 가상 Linux 머신에서 실행됩니다. 과정을 시작하려면 다음 지침을 따르세요:",
- "step-1": "<0>Ona 계정을 만드세요0> 없으면",
- "step-2": "아래 시작 버튼을 클릭하세요",
- "step-3": "팝업 모달에서 생성 버튼을 클릭하세요",
- "step-4": "가상 Linux 머신이 로드되면 명령 팔레트를 열고 <0>freeCodeCamp: Run Course0> 명령을 실행하세요",
- "step-5": "완료되면 Simple Browser가 열립니다. 빈 흰색 페이지가 나오면 새로 고침 버튼을 눌러 업데이트하고 과정 홈 페이지를 확인하세요.",
- "step-6": "사용 가능한 프로젝트 중 하나를 클릭해 시작한 뒤, 프로젝트 내 지침을 따라 완료하세요.",
- "continue-project": "아래 시작 버튼을 클릭하면 새 머신이 시작됩니다. 이전에 {{course}} 과정을 시작했다면 <0>Ona 대시보드0>로 가서 계속하세요."
}
},
"local": {
diff --git a/client/portuguese/intro.json b/client/portuguese/intro.json
index 0013ebfd192..b9ba185fe8b 100644
--- a/client/portuguese/intro.json
+++ b/client/portuguese/intro.json
@@ -1352,12 +1352,6 @@
"Nesta oficina de 140 lições, você vai completar seu banco de dados de alunos enquanto aprofunda os comandos SQL."
]
},
- "lab-world-cup-database": {
- "title": "Crie um banco de dados da Copa do Mundo",
- "intro": [
- "Para este projeto, você vai criar um script Bash que insere informações de jogos da Copa do Mundo no PostgreSQL, depois consultar o banco de dados para obter estatísticas úteis."
- ]
- },
"workshop-kitty-ipsum-translator": {
"title": "Crie um tradutor Kitty Ipsum",
"intro": [
@@ -1371,6 +1365,12 @@
"Nesta oficina de 210 lições, você vai criar um programa Bash interativo que armazena informações de aluguel para sua loja de bicicletas usando PostgreSQL."
]
},
+ "lab-world-cup-database": {
+ "title": "Crie um banco de dados da Copa do Mundo",
+ "intro": [
+ "Para este projeto, você vai criar um script Bash que insere informações de jogos da Copa do Mundo no PostgreSQL, depois consultar o banco de dados para obter estatísticas úteis."
+ ]
+ },
"lab-salon-appointment-scheduler": {
"title": "Crie um agendador de horários para salão",
"intro": [
@@ -2669,6 +2669,13 @@
"Você praticará condicionais para determinar a nota do aluno com base na pontuação."
]
},
+ "lab-story-fragment-restoration": {
+ "title": "Restaurar uma narrativa coerente a partir de um array de fragmentos de história",
+ "intro": [
+ "Neste laboratório, você vai restaurar uma narrativa coerente a partir de um array corrompido de fragmentos de história.",
+ "Você vai praticar trabalhar com loops implementando algoritmos fundamentais de array do zero."
+ ]
+ },
"lecture-the-var-keyword-and-hoisting": {
"title": "A palavra-chave var e hoisting",
"intro": [
@@ -3774,18 +3781,18 @@
"Aprenda o modelo de caixa do CSS com este curso. Entenda como os elementos são renderizados na web e aprenda a manipular espaçamento, bordas e preenchimento para alcançar o layout e design desejados."
]
},
- "top-introduction-to-flexbox": {
- "title": "Introdução ao flexbox",
- "intro": [
- "Descubra o poder do Flexbox, um modelo de layout que simplifica o design de layouts web flexíveis e responsivos. Aprenda a criar estruturas de página dinâmicas e adaptativas com facilidade."
- ]
- },
"top-learn-block-and-inline": {
"title": "Aprenda a diferença entre block e inline",
"intro": [
"Explore as diferenças entre elementos block e inline em HTML e CSS. Este curso oferece insights sobre como esses tipos de exibição afetam o layout e o comportamento, capacitando você a tomar decisões de design informadas."
]
},
+ "top-introduction-to-flexbox": {
+ "title": "Introdução ao flexbox",
+ "intro": [
+ "Descubra o poder do Flexbox, um modelo de layout que simplifica o design de layouts web flexíveis e responsivos. Aprenda a criar estruturas de página dinâmicas e adaptativas com facilidade."
+ ]
+ },
"top-learn-variables-and-operators": {
"title": "Aprenda variáveis e operadores",
"intro": [
@@ -6287,12 +6294,6 @@
"Você praticará o uso das classes utilitárias do Tailwind CSS para layouts flexbox, cores, pontos de interrupção e mais."
]
},
- "lab-photography-exhibit": {
- "title": "Projete uma exposição de fotografia",
- "intro": [
- "Neste laboratório, você praticará o uso do Tailwind CSS projetando uma página web para uma exposição de fotografia."
- ]
- },
"review-css-libraries-and-frameworks": {
"title": "Revisão de bibliotecas e frameworks CSS",
"intro": [
@@ -6306,6 +6307,12 @@
"Teste o que aprendeu sobre bibliotecas e frameworks CSS com este quiz."
]
},
+ "lab-photography-exhibit": {
+ "title": "Projete uma exposição de fotografia",
+ "intro": [
+ "Neste laboratório, você praticará o uso do Tailwind CSS projetando uma página web para uma exposição de fotografia."
+ ]
+ },
"lecture-introduction-to-typescript": {
"title": "Introdução ao TypeScript",
"intro": [
@@ -6372,18 +6379,6 @@
"Neste workshop, você vai continuar praticando TypeScript criando um app de previsão do futuro."
]
},
- "lab-flashcard-quiz-app": {
- "title": "Construa um app de quiz com flashcards",
- "intro": [
- "Neste laboratório, você vai praticar o uso de TypeScript criando um app de quiz com flashcards."
- ]
- },
- "lab-digital-pet-game": {
- "title": "Construa um jogo de pet digital",
- "intro": [
- "Neste laboratório, você vai praticar o que aprendeu sobre TypeScript e React criando um jogo de pet digital."
- ]
- },
"workshop-build-a-football-player-card-builder": {
"title": "Construa um criador de cartões de jogador de futebol",
"intro": [
@@ -6401,6 +6396,18 @@
"title": "Quiz de TypeScript",
"intro": ["Teste o que você aprendeu sobre TypeScript com este quiz."]
},
+ "lab-flashcard-quiz-app": {
+ "title": "Construa um app de quiz com flashcards",
+ "intro": [
+ "Neste laboratório, você vai praticar o uso de TypeScript criando um app de quiz com flashcards."
+ ]
+ },
+ "lab-digital-pet-game": {
+ "title": "Construa um jogo de pet digital",
+ "intro": [
+ "Neste laboratório, você vai praticar o que aprendeu sobre TypeScript e React criando um jogo de pet digital."
+ ]
+ },
"review-front-end-libraries": {
"title": "Revisão de bibliotecas front-end",
"intro": [
@@ -7176,12 +7183,12 @@
"node-package-manager": "Gerenciador de pacotes Node",
"lab-prime-number-checker-module": "Crie um módulo verificador de números primos",
"http-and-the-web-standards-model": "HTTP e o modelo de padrões web",
- "rest-api-and-web-services": "API REST e serviços web",
- "lab-timestamp-microservice": "Crie um microsserviço de timestamp",
"introduction-to-express": "Introdução ao Express",
"lab-personal-profile-app": "Crie um app de perfil pessoal",
- "error-handling-in-express": "Tratamento de erros no Express",
"express-middleware": "Middleware do Express",
+ "rest-api-and-web-services": "API REST e serviços web",
+ "lab-timestamp-microservice": "Crie um microsserviço de timestamp",
+ "error-handling-in-express": "Tratamento de erros no Express",
"websockets": "WebSockets",
"lab-chat-app": "Crie um app de chat",
"security-and-privacy": "Segurança e privacidade",
@@ -7192,109 +7199,91 @@
},
"module-intros": {
"introduction-to-nodejs": {
- "note": "Lançamento previsto para o final de 2026",
"intro": [
"Neste módulo, você aprenderá o básico de trabalhar com Node.js."
]
},
"nodejs-core-modules": {
- "note": "Lançamento previsto para o final de 2026",
"intro": [
"Neste módulo, você aprenderá sobre módulos principais comuns do Node.js, incluindo fs, os, path e outros. Depois, praticará o que aprendeu em oficinas e laboratórios e testará seu conhecimento com um quiz curto."
]
},
"node-package-manager": {
- "note": "Lançamento previsto para o final de 2026",
"intro": [
"Neste módulo, você será apresentado ao Node Package Manager, que os desenvolvedores usam para gerenciar dependências e scripts do projeto. Depois, praticará o que aprendeu em oficinas e laboratórios e testará seu conhecimento com um quiz curto."
]
},
"lab-prime-number-checker-module": {
- "note": "Disponível no final de 2026",
"intro": [
"Pratique criar e exportar um módulo npm criando um verificador de números primos."
]
},
"http-and-the-web-standards-model": {
- "note": "Lançamento previsto para o final de 2026",
"intro": [
"Neste módulo, você aprenderá sobre HTTP (Hypertext Transfer Protocol) e outros conceitos importantes, incluindo o modelo requisição-resposta, códigos de resposta comuns, DNS, TCP/IP e mais. Depois, praticará o que aprendeu em uma oficina para criar seu próprio servidor web e testará seu conhecimento com um quiz curto."
]
},
- "rest-api-and-web-services": {
- "note": "Lançamento previsto para o final de 2026",
+ "introduction-to-express": {
"intro": [
- "Neste módulo, você aprenderá sobre a API REST (transferência de estado representacional) e como microserviços funcionam. Depois, fará um quiz curto para testar seu conhecimento."
+ "Neste módulo, você será apresentado ao Express.js, um framework usado para criar APIs RESTful. Depois, praticará suas habilidades em oficinas e laboratórios e testará seu conhecimento com um quiz curto."
]
},
- "lab-timestamp-microservice": {
- "note": "Disponível no final de 2026",
+ "lab-personal-profile-app": {
"intro": [
- "Pratique criar uma API RESTful com lógica de análise de datas criando um microsserviço de timestamp."
+ "Pratique criar um servidor Express e uma API JSON criando uma aplicação de perfil pessoal."
]
},
- "introduction-to-express": {
- "note": "Lançamento previsto para o final de 2026",
+ "express-middleware": {
"intro": [
- "Neste módulo, você será apresentado ao Express.js, um framework usado para criar APIs RESTful. Depois, praticará suas habilidades em oficinas e laboratórios e testará seu conhecimento com um quiz curto."
+ "Neste módulo, você aprenderá sobre middleware no Express.js, usado para tratar requisições e respostas entre cliente e servidor. Depois, praticará suas habilidades em uma oficina e laboratório e testará seu conhecimento com um quiz curto."
]
},
- "lab-personal-profile-app": {
- "note": "Disponível no final de 2026",
+ "rest-api-and-web-services": {
"intro": [
- "Pratique criar um servidor Express e uma API JSON criando uma aplicação de perfil pessoal."
+ "Neste módulo, você aprenderá sobre a API REST (transferência de estado representacional) e como microserviços funcionam. Depois, fará um quiz curto para testar seu conhecimento."
]
},
- "error-handling-in-express": {
- "note": "Lançamento previsto para o final de 2026",
+ "lab-timestamp-microservice": {
"intro": [
- "Neste módulo, você aprenderá como funciona o tratamento de erros, depuração e verificações de saúde no Express.js. Depois, praticará o que aprendeu em um laboratório e testará seu conhecimento com um quiz curto."
+ "Pratique criar uma API RESTful com lógica de análise de datas criando um microsserviço de timestamp."
]
},
- "express-middleware": {
- "note": "Lançamento previsto para o final de 2026",
+ "error-handling-in-express": {
"intro": [
- "Neste módulo, você aprenderá sobre middleware no Express.js, usado para tratar requisições e respostas entre cliente e servidor. Depois, praticará suas habilidades em uma oficina e laboratório e testará seu conhecimento com um quiz curto."
+ "Neste módulo, você aprenderá como funciona o tratamento de erros, depuração e verificações de saúde no Express.js. Depois, praticará o que aprendeu em um laboratório e testará seu conhecimento com um quiz curto."
]
},
"websockets": {
- "note": "Lançamento previsto para o final de 2026",
"intro": [
"Neste módulo, você será apresentado aos websockets, um protocolo usado para comunicação em tempo real entre cliente e servidor. Depois, praticará o que aprendeu em laboratórios e oficinas e testará seu conhecimento com um quiz curto."
]
},
"lab-chat-app": {
- "note": "Disponível no final de 2026",
"intro": [
"Pratique criar um servidor de chat em tempo real para múltiplos clientes usando WebSockets do Node.js."
]
},
"security-and-privacy": {
- "note": "Lançamento previsto para o final de 2026",
"intro": [
"Neste módulo, você aprenderá as diferenças entre segurança e privacidade, além de outros conceitos como CSPs, políticas de permissões, PII, trabalho com CORS e mais. Depois, fará um quiz curto para testar seu conhecimento."
]
},
"authentication": {
- "note": "Lançamento previsto para o final de 2026",
"intro": [
"Neste módulo, você aprenderá como funciona a autenticação em aplicações web, junto com outros conceitos importantes como JWTs, CSRFs, Passport, Helmet, criptografia e encriptação, e mais. Depois, praticará o que aprendeu em laboratórios e oficinas e testará seu conhecimento com um quiz curto."
]
},
"lab-family-movie-watchlist-api": {
- "note": "Disponível no final de 2026",
"intro": [
"Pratique implementar autenticação e autorização em uma aplicação Express criando uma API de lista de filmes para a família."
]
},
"back-end-development-and-apis-certification-exam": {
- "note": "Lançamento previsto para o final de 2026",
"intro": [
"Passe neste exame para obter sua certificação em desenvolvimento back-end e APIs."
]
},
"review-back-end-development-and-apis": {
- "note": "Previsto para o final de 2026",
"intro": [
"Revise os conceitos de desenvolvimento back-end e APIs para se preparar para o próximo exame."
]
@@ -7302,7 +7291,7 @@
},
"blocks": {
"lecture-working-with-nodejs-and-event-driven-architecture": {
- "title": "Trabalhando com NodeJS e arquitetura orientada a eventos",
+ "title": "Trabalhando com Node.js e arquitetura orientada a eventos",
"intro": [
"Aprenda sobre as bibliotecas principais do Node.js, como instalar Node.js no seu computador e as vantagens e desvantagens de usar Node.js no back-end."
]
@@ -7416,24 +7405,6 @@
""
]
},
- "lecture-understanding-rest-api-and-web-services": {
- "title": "Entendendo a API REST e os serviços web",
- "intro": [
- "Nessas lições, você aprenderá sobre APIs REST e serviços web, e como eles permitem que diferentes aplicações se comuniquem pela internet."
- ]
- },
- "workshop-build-a-weather-service-api": {
- "title": "Crie uma API de serviço meteorológico",
- "intro": [
- "Você vai aprender parâmetros de rota e roteamento modular com express.Router construindo uma API de serviço meteorológico."
- ]
- },
- "lab-timestamp-microservice": {
- "title": "Construa um microserviço de timestamp",
- "intro": [
- "Pratique criar uma API RESTful com lógica de análise de datas criando um microserviço de timestamp."
- ]
- },
"lecture-working-with-express": {
"title": "Trabalhando com Express",
"intro": [
@@ -7453,16 +7424,10 @@
"Você vai aprender roteamento básico do Express e métodos de resposta construindo um app de piadas aleatórias."
]
},
- "lab-personal-profile-app": {
- "title": "Construa um app de perfil pessoal",
- "intro": [
- "Pratique criar um servidor Express e uma API JSON criando uma aplicação de perfil pessoal."
- ]
- },
"review-introduction-to-express": {
"title": "Revisão de introdução ao Express",
"intro": [
- "Revise serviços web, REST, microserviços e roteamento do Express.js antes de fazer o quiz."
+ "Revise Express.js, roteamento, métodos de resposta e como servir arquivos estáticos antes de fazer o quiz."
]
},
"quiz-introduction-to-express": {
@@ -7471,28 +7436,10 @@
"Teste seus conhecimentos sobre serviços web, REST, microserviços, Express.js e roteamento."
]
},
- "lecture-understanding-error-handling-and-health-checks": {
- "title": "Entendendo o tratamento de erros e verificações de saúde",
- "intro": [
- "Nessas lições, você aprenderá sobre tratamento de erros e verificações de saúde no Express."
- ]
- },
- "workshop-build-a-bank-api": {
- "title": "Crie uma API bancária",
- "intro": [
- "Você vai aprender tratamento de erros no Express 5, verificações de saúde e desligamentos suaves construindo uma API bancária."
- ]
- },
- "review-error-handling-in-express": {
- "title": "Revisão de tratamento de erros no Express",
- "intro": [
- "Revise códigos de status HTTP, tratamento de erros, depuração, registro, verificações de saúde e desligamentos suaves antes de fazer o quiz."
- ]
- },
- "quiz-error-handling-in-express": {
- "title": "Quiz de tratamento de erros no Express",
+ "lab-personal-profile-app": {
+ "title": "Construa um app de perfil pessoal",
"intro": [
- "Teste seus conhecimentos sobre códigos de status HTTP, tratamento de erros, depuração, registro, verificações de saúde e desligamentos suaves."
+ "Pratique criar um servidor Express e uma API JSON criando uma aplicação de perfil pessoal."
]
},
"lecture-express-middleware": {
@@ -7525,6 +7472,54 @@
"Teste seus conhecimentos sobre middleware do Express, incluindo middleware em nível de aplicação, roteador, tratamento de erros, e middleware embutido e de terceiros."
]
},
+ "lecture-understanding-rest-api-and-web-services": {
+ "title": "Entendendo a API REST e os serviços web",
+ "intro": [
+ "Nessas lições, você aprenderá sobre APIs REST e serviços web, e como eles permitem que diferentes aplicações se comuniquem pela internet."
+ ]
+ },
+ "workshop-build-a-weather-service-api": {
+ "title": "Crie uma API de serviço meteorológico",
+ "intro": [
+ "Você vai aprender parâmetros de rota e roteamento modular com express.Router construindo uma API de serviço meteorológico."
+ ]
+ },
+ "review-rest-api-and-web-services": {
+ "title": "Revisão de API REST e serviços web",
+ "intro": [
+ "Revise serviços web, a arquitetura REST, códigos de status HTTP e microsserviços."
+ ]
+ },
+ "lab-timestamp-microservice": {
+ "title": "Construa um microserviço de timestamp",
+ "intro": [
+ "Pratique criar uma API RESTful com lógica de análise de datas criando um microserviço de timestamp."
+ ]
+ },
+ "lecture-understanding-error-handling-and-health-checks": {
+ "title": "Entendendo o tratamento de erros e verificações de saúde",
+ "intro": [
+ "Nessas lições, você aprenderá sobre tratamento de erros e verificações de saúde no Express."
+ ]
+ },
+ "workshop-build-a-bank-api": {
+ "title": "Crie uma API bancária",
+ "intro": [
+ "Você vai aprender tratamento de erros no Express 5, verificações de saúde e desligamentos suaves construindo uma API bancária."
+ ]
+ },
+ "review-error-handling-in-express": {
+ "title": "Revisão de tratamento de erros no Express",
+ "intro": [
+ "Revise códigos de status HTTP, tratamento de erros, depuração, registro, verificações de saúde e desligamentos suaves antes de fazer o quiz."
+ ]
+ },
+ "quiz-error-handling-in-express": {
+ "title": "Quiz de tratamento de erros no Express",
+ "intro": [
+ "Teste seus conhecimentos sobre códigos de status HTTP, tratamento de erros, depuração, registro, verificações de saúde e desligamentos suaves."
+ ]
+ },
"lecture-understanding-websockets": {
"title": "Entendendo WebSockets",
"intro": [
@@ -8427,7 +8422,7 @@
"title": "Criar um menu de café",
"intro": [
"CSS diz ao navegador como exibir sua página web. Você pode usar CSS para definir cor, fonte, tamanho e outros aspectos dos elementos HTML.",
- "Nesta oficina, você vai aprender CSS criando uma página de menu para um site de café."
+ "Nesta oficina, você vai aprender CSS criando uma página de menu para um café."
]
},
"lab-business-card": {
@@ -9695,7 +9690,7 @@
"title": "Desenhe um menu de café",
"intro": [
"O CSS diz ao navegador como exibir sua página. Você pode usar CSS para definir cor, fonte, tamanho e outros aspectos dos elementos HTML.",
- "Nesta oficina, você aprenderá CSS criando uma página de menu para um site de café."
+ "Nesta oficina, você vai aprender CSS criando uma página de menu para um café."
]
},
"lab-business-card": {
diff --git a/client/portuguese/translations.json b/client/portuguese/translations.json
index 196f656bfc0..5bda15863cf 100644
--- a/client/portuguese/translations.json
+++ b/client/portuguese/translations.json
@@ -558,6 +558,12 @@
"running-tests": "// executando testes",
"tests-completed": "// testes concluídos",
"console-output": "// saída do console",
+ "unavailable-local-resource": "Falha ao carregar o recurso: \"{{source}}\" não é um arquivo local {{resourceType}} disponível. Use: {{allowedSources}}.",
+ "unavailable-local-resource-no-allowed": "Falha ao carregar o recurso: \"{{source}}\" não é um arquivo local {{resourceType}} disponível neste desafio.",
+ "local-resource-type": {
+ "stylesheet": "folha de estilo",
+ "script": "script"
+ },
"example-app": "Construa um app funcionalmente semelhante a <0>este projeto de exemplo0>. Tente não copiar o projeto, dê seu estilo pessoal.",
"syntax-error": "Seu código gerou um erro antes que os testes pudessem ser executados. Por favor, corrija e tente novamente.",
"indentation-error": "Seu código tem um erro de indentação. Pode ser necessário adicionar pass em uma nova linha para formar um bloco válido.",
@@ -656,25 +662,6 @@
"sub-step-7": "Clique no botão <0>Adicionar segredo0>",
"summary": "Configuração do Codespaces"
},
- "ona": {
- "intro": "Este curso roda em uma máquina virtual Linux usando Ona. Siga estas instruções para começar o curso:",
- "step-1": "<0>Crie uma conta no Ona0> se ainda não tiver uma",
- "step-2": "Clique no botão iniciar abaixo",
- "step-3": "No modal que aparecer, clique no botão criar",
- "step-4": "Quando a máquina virtual Linux terminar de carregar, inicie a extensão CodeRoad fazendo o seguinte:",
- "step-5": "Clique no menu \"hambúrguer\" perto do canto superior esquerdo da janela do VSCode,",
- "step-6": "Vá ao menu <0>Exibir0>,",
- "step-7": "Clique na opção <0>Paleta de comandos0>,",
- "step-8": "e execute o comando <0>CodeRoad: Start0>",
- "step-9": "Siga as instruções no CodeRoad para completar o curso",
- "continue-project": "Clicar no botão iniciar abaixo vai começar um novo projeto. Se você já iniciou o curso {{course}}, vá para <0>seu painel do Ona0> para continuar.",
- "learn-more": "Saiba mais sobre <0>workspaces do Ona.0>",
- "logout-warning": "Se você sair do freeCodeCamp antes de completar todo o curso {{course}}, seu progresso não será salvo na sua conta do freeCodeCamp.",
- "sub-step-3": "Navegue até sua <0>página de segredos do Ona0>",
- "sub-step-4": "Crie um novo segredo chamado <0>CODEROAD_WEBHOOK_TOKEN0>",
- "sub-step-5": "No campo <0>Segredo0>, cole seu token",
- "summary": "Configuração do Ona"
- },
"freecodecamp-os": {
"token-modal": "Quando você executar o curso, aparecerá um modal pedindo seu token de usuário. Cole o token que você copiou acima nele. Você só precisa fazer isso uma vez por ambiente.",
"local": {
@@ -697,16 +684,6 @@
"step-5": "O Simple Browser abrirá quando estiver pronto. Se aparecer uma página branca em branco, use o botão de atualizar para atualizá-la e ver a página inicial do curso.",
"step-6": "Clique em um dos projetos disponíveis para iniciá-lo e siga as instruções do projeto para completá-lo.",
"continue-project": "Clicar no botão iniciar abaixo iniciará uma nova máquina. Se você já começou o curso {{title}}, vá para a <0>página do repositório0> para reabrir um workspace anterior."
- },
- "ona": {
- "intro": "Este curso roda em uma máquina virtual Linux usando Ona e a extensão freeCodeCamp - Courses para VS Code. Siga estas instruções para iniciar o curso:",
- "step-1": "<0>Crie uma conta na Ona0> se ainda não tiver uma",
- "step-2": "Clique no botão iniciar abaixo",
- "step-3": "No modal que aparecer, clique no botão criar",
- "step-4": "Quando a máquina virtual Linux terminar de carregar, abra a paleta de comandos e execute o comando <0>freeCodeCamp: Run Course0>",
- "step-5": "O Simple Browser abrirá quando estiver pronto. Se aparecer uma página branca em branco, use o botão de atualizar para atualizá-la e ver a página inicial do curso.",
- "step-6": "Clique em um dos projetos disponíveis para iniciá-lo e siga as instruções do projeto para completá-lo.",
- "continue-project": "Clicar no botão iniciar abaixo iniciará uma nova máquina. Se você já começou o curso {{course}}, vá para <0>seu painel da Ona0> para continuar."
}
},
"local": {
diff --git a/client/swahili/intro.json b/client/swahili/intro.json
index 504fa67c3dd..f8d32c675c2 100644
--- a/client/swahili/intro.json
+++ b/client/swahili/intro.json
@@ -1352,12 +1352,6 @@
"Katika warsha hii yenye mafundisho 140, utakamilisha hifadhidata yako ya wanafunzi huku ukichunguza kwa kina zaidi amri za SQL."
]
},
- "lab-world-cup-database": {
- "title": "Jenga Hifadhidata ya Kombe la Dunia",
- "intro": [
- "Kwa mradi huu, utaunda skripti ya Bash inayoweka taarifa kutoka michezo ya Kombe la Dunia katika PostgreSQL, kisha utatumia hoja ya utafutaji kwenye hifadhidata kupata takwimu muhimu."
- ]
- },
"workshop-kitty-ipsum-translator": {
"title": "Jenga Tafsiri ya Kitty Ipsum",
"intro": [
@@ -1371,6 +1365,12 @@
"Katika warsha hii yenye mafundisho 210, utajenga programu ya Bash inayoshirikiana inayohifadhi taarifa za upangaji wa baiskeli kwa duka lako la kukodisha kwa kutumia PostgreSQL."
]
},
+ "lab-world-cup-database": {
+ "title": "Jenga Hifadhidata ya Kombe la Dunia",
+ "intro": [
+ "Kwa mradi huu, utaunda skripti ya Bash inayoweka taarifa kutoka michezo ya Kombe la Dunia katika PostgreSQL, kisha utatumia hoja ya utafutaji kwenye hifadhidata kupata takwimu muhimu."
+ ]
+ },
"lab-salon-appointment-scheduler": {
"title": "Jenga Ratiba ya Miadi ya Saluni",
"intro": [
@@ -2669,6 +2669,13 @@
"Utatumia masharti kuamua alama ya mwanafunzi kulingana na alama yake."
]
},
+ "lab-story-fragment-restoration": {
+ "title": "Rejesha hadithi inayolingana kutoka kwenye safu ya vipande vya hadithi",
+ "intro": [
+ "Katika warsha hii, utarejesha hadithi inayolingana kutoka kwenye safu ya vipande vya hadithi vilivyoharibika.",
+ "Utajifunza kutumia mizunguko kwa kutekeleza algoriti za msingi za safu ya data kutoka mwanzo."
+ ]
+ },
"lecture-the-var-keyword-and-hoisting": {
"title": "Neno la var na Hoisting",
"intro": [
@@ -3774,18 +3781,18 @@
"Jifunze mfano wa sanduku wa CSS kupitia kozi hii. Elewa jinsi vipengele vinavyoonyeshwa mtandaoni, na jifunze kudhibiti nafasi, mipaka, na nafasi ya ndani ili kufanikisha mpangilio na muundo unaotaka."
]
},
- "top-introduction-to-flexbox": {
- "title": "Utangulizi wa Flexbox",
- "intro": [
- "Gundua nguvu ya Flexbox, mfano wa mpangilio unaorahisisha muundo wa miundo ya mtandao inayojibadilisha kulingana na kifaa. Jifunze jinsi ya kuunda miundo ya kurasa inayobadilika na inayojibadilisha kwa urahisi."
- ]
- },
"top-learn-block-and-inline": {
"title": "Jifunze tofauti kati ya block na inline",
"intro": [
"Chunguza tofauti kati ya vipengele vya block na inline katika HTML na CSS. Kozi hii inatoa ufahamu wa jinsi aina hizi za maonyesho zinavyoathiri mpangilio na tabia, ikikupa uwezo wa kufanya maamuzi sahihi ya muundo."
]
},
+ "top-introduction-to-flexbox": {
+ "title": "Utangulizi wa Flexbox",
+ "intro": [
+ "Gundua nguvu ya Flexbox, mfano wa mpangilio unaorahisisha muundo wa miundo ya mtandao inayojibadilisha kulingana na kifaa. Jifunze jinsi ya kuunda miundo ya kurasa inayobadilika na inayojibadilisha kwa urahisi."
+ ]
+ },
"top-learn-variables-and-operators": {
"title": "Jifunze kuhusu vigezo na waendeshaji",
"intro": [
@@ -6287,12 +6294,6 @@
"Utazoeza kufanya kazi na madarasa ya msaada ya Tailwind CSS kwa mpangilio wa flexbox, rangi, viashiria vya kuvunja na zaidi."
]
},
- "lab-photography-exhibit": {
- "title": "Tengeneza maonyesho ya picha",
- "intro": [
- "Katika maabara hii, utazoeza kufanya kazi na Tailwind CSS kwa kutengeneza ukurasa wa maonyesho ya picha mtandaoni."
- ]
- },
"review-css-libraries-and-frameworks": {
"title": "Kagua maktaba za CSS na mifumo ya kazi",
"intro": [
@@ -6306,6 +6307,12 @@
"Jaribu kile ulichojifunza kuhusu maktaba za CSS na mifumo ya kazi kwa jaribio hili."
]
},
+ "lab-photography-exhibit": {
+ "title": "Tengeneza maonyesho ya picha",
+ "intro": [
+ "Katika maabara hii, utazoeza kufanya kazi na Tailwind CSS kwa kutengeneza ukurasa wa maonyesho ya picha mtandaoni."
+ ]
+ },
"lecture-introduction-to-typescript": {
"title": "Utangulizi wa TypeScript",
"intro": [
@@ -6372,18 +6379,6 @@
"Katika warsha hii, utaendelea kufanya mazoezi ya TypeScript kwa kujenga programu ya kutabiri hatima."
]
},
- "lab-flashcard-quiz-app": {
- "title": "Jenga programu ya jaribio fupi la kadi za kumbukumbu",
- "intro": [
- "Katika maabara hii, utajifunza kutumia TypeScript kwa kujenga programu ya jaribio fupi la kadi za kumbukumbu."
- ]
- },
- "lab-digital-pet-game": {
- "title": "Jenga mchezo wa mnyama wa kidijitali",
- "intro": [
- "Katika maabara hii, utatumia kile ulichojifunza kuhusu TypeScript na React kwa kujenga mchezo wa mnyama wa kidijitali."
- ]
- },
"workshop-build-a-football-player-card-builder": {
"title": "Jenga mtengenezaji wa kadi za wachezaji wa mpira wa miguu",
"intro": [
@@ -6401,6 +6396,18 @@
"title": "Jaribio la TypeScript",
"intro": ["Jaribu kile ulichojifunza kuhusu TypeScript kwa jaribio hili."]
},
+ "lab-flashcard-quiz-app": {
+ "title": "Jenga programu ya jaribio fupi la kadi za kumbukumbu",
+ "intro": [
+ "Katika maabara hii, utajifunza kutumia TypeScript kwa kujenga programu ya jaribio fupi la kadi za kumbukumbu."
+ ]
+ },
+ "lab-digital-pet-game": {
+ "title": "Jenga mchezo wa mnyama wa kidijitali",
+ "intro": [
+ "Katika maabara hii, utatumia kile ulichojifunza kuhusu TypeScript na React kwa kujenga mchezo wa mnyama wa kidijitali."
+ ]
+ },
"review-front-end-libraries": {
"title": "Kagua maktaba za mbele",
"intro": [
@@ -7176,12 +7183,12 @@
"node-package-manager": "Msimamizi wa vifurushi wa Node",
"lab-prime-number-checker-module": "Jenga moduli ya kukagua namba msingi",
"http-and-the-web-standards-model": "HTTP na mfano wa viwango vya mtandao",
- "rest-api-and-web-services": "REST API na huduma za mtandao",
- "lab-timestamp-microservice": "Jenga huduma ndogo ya timestamp",
"introduction-to-express": "Utangulizi wa Express",
"lab-personal-profile-app": "Jenga programu ya wasifu binafsi",
- "error-handling-in-express": "Ushughulikiaji wa hitilafu katika Express",
"express-middleware": "Programu ya kati ya Express",
+ "rest-api-and-web-services": "REST API na huduma za mtandao",
+ "lab-timestamp-microservice": "Jenga huduma ndogo ya timestamp",
+ "error-handling-in-express": "Ushughulikiaji wa hitilafu katika Express",
"websockets": "WebSockets",
"lab-chat-app": "Jenga programu ya mazungumzo",
"security-and-privacy": "Usalama na faragha",
@@ -7192,109 +7199,91 @@
},
"module-intros": {
"introduction-to-nodejs": {
- "note": "Inakuja mwishoni mwa 2026",
"intro": [
"Katika moduli hii, utajifunza misingi ya kufanya kazi na Node.js."
]
},
"nodejs-core-modules": {
- "note": "Inakuja mwishoni mwa 2026",
"intro": [
"Katika moduli hii, utajifunza kuhusu moduli kuu za Node.js kama fs, os, path na zaidi. Kisha utapata fursa ya kufanya mazoezi kupitia warsha na maabara na kupima maarifa yako kupitia jaribio fupi."
]
},
"node-package-manager": {
- "note": "Inakuja mwishoni mwa 2026",
"intro": [
"Katika moduli hii, utatambulishwa na Msimamizi wa vifurushi wa Node, ambao wasanidi programu hutumia kusimamia utegemezi wa miradi na misimbo. Kisha utafanya mazoezi kupitia warsha na maabara na kupima maarifa yako kwa jaribio fupi."
]
},
"lab-prime-number-checker-module": {
- "note": "Inakuja mwishoni mwa 2026",
"intro": [
"Jifunze kujenga na kusafirisha moduli ya npm kwa kuunda kipima namba msingi."
]
},
"http-and-the-web-standards-model": {
- "note": "Inakuja mwishoni mwa 2026",
"intro": [
"Katika moduli hii, utajifunza kuhusu HTTP (Hypertext Transfer Protocol) na dhana nyingine muhimu ikiwemo mfano wa ombi-jibu, nambari za kawaida za jibu, DNS, TCP/IP, na zaidi. Kisha utafanya mazoezi ya kujenga seva yako mwenyewe kupitia warsha na kupima maarifa yako kwa jaribio fupi."
]
},
- "rest-api-and-web-services": {
- "note": "Inakuja mwishoni mwa 2026",
+ "introduction-to-express": {
"intro": [
- "Katika moduli hii, utajifunza kuhusu REST API (uhamishaji wa hali ya uwakilishi (REST)) na jinsi microservices zinavyofanya kazi. Kisha utachukua jaribio fupi kupima maarifa yako."
+ "Katika moduli hii, utatambulishwa na Express.js, ambayo ni mfumo wa kazi unaotumika kujenga RESTful APIs. Kisha utafanya mazoezi kupitia warsha na maabara na kupima maarifa yako kwa jaribio fupi."
]
},
- "lab-timestamp-microservice": {
- "note": "Inakuja mwishoni mwa 2026",
+ "lab-personal-profile-app": {
"intro": [
- "Jifunze kujenga API ya RESTful yenye mantiki ya kuchambua tarehe kwa kuunda huduma ndogo ya timestamp."
+ "Jifunze kujenga seva ya Express na API ya JSON kwa kuunda programu ya wasifu binafsi."
]
},
- "introduction-to-express": {
- "note": "Inakuja mwishoni mwa 2026",
+ "express-middleware": {
"intro": [
- "Katika moduli hii, utatambulishwa na Express.js, ambayo ni mfumo wa kazi unaotumika kujenga RESTful APIs. Kisha utafanya mazoezi kupitia warsha na maabara na kupima maarifa yako kwa jaribio fupi."
+ "Katika moduli hii, utajifunza kuhusu programu ya kati katika Express.js, inayotumika kushughulikia maombi na majibu kati ya mteja na seva. Kisha utafanya mazoezi kupitia warsha na maabara na kupima maarifa yako kwa jaribio fupi."
]
},
- "lab-personal-profile-app": {
- "note": "Inakuja mwishoni mwa 2026",
+ "rest-api-and-web-services": {
"intro": [
- "Jifunze kujenga seva ya Express na API ya JSON kwa kuunda programu ya wasifu binafsi."
+ "Katika moduli hii, utajifunza kuhusu REST API (uhamishaji wa hali ya uwakilishi (REST)) na jinsi microservices zinavyofanya kazi. Kisha utachukua jaribio fupi kupima maarifa yako."
]
},
- "error-handling-in-express": {
- "note": "Inakuja mwishoni mwa 2026",
+ "lab-timestamp-microservice": {
"intro": [
- "Katika moduli hii, utajifunza jinsi usimamizi wa hitilafu, kutafuta makosa, na ukaguzi wa afya unavyofanya kazi katika Express.js. Kisha utafanya mazoezi katika maabara na kupima maarifa yako kwa jaribio fupi."
+ "Jifunze kujenga API ya RESTful yenye mantiki ya kuchambua tarehe kwa kuunda huduma ndogo ya timestamp."
]
},
- "express-middleware": {
- "note": "Inakuja mwishoni mwa 2026",
+ "error-handling-in-express": {
"intro": [
- "Katika moduli hii, utajifunza kuhusu programu ya kati katika Express.js, inayotumika kushughulikia maombi na majibu kati ya mteja na seva. Kisha utafanya mazoezi kupitia warsha na maabara na kupima maarifa yako kwa jaribio fupi."
+ "Katika moduli hii, utajifunza jinsi usimamizi wa hitilafu, kutafuta makosa, na ukaguzi wa afya unavyofanya kazi katika Express.js. Kisha utafanya mazoezi katika maabara na kupima maarifa yako kwa jaribio fupi."
]
},
"websockets": {
- "note": "Inakuja mwishoni mwa 2026",
"intro": [
"Katika moduli hii, utatambulishwa na websockets, ambayo ni itifaki inayotumika kwa mawasiliano ya wakati halisi kati ya mteja na seva. Kisha utafanya mazoezi katika maabara na warsha na kupima maarifa yako kwa jaribio fupi."
]
},
"lab-chat-app": {
- "note": "Inakuja mwishoni mwa 2026",
"intro": [
"Jifunze kujenga seva ya mazungumzo ya wakati halisi kwa wateja wengi ukitumia Node.js WebSockets."
]
},
"security-and-privacy": {
- "note": "Inakuja mwishoni mwa 2026",
"intro": [
"Katika moduli hii, utajifunza tofauti kati ya usalama na faragha pamoja na dhana nyingine ikiwemo CSPs, Sera za Ruhusa, PII, kufanya kazi na CORS, na zaidi. Kisha utachukua jaribio fupi kupima maarifa yako."
]
},
"authentication": {
- "note": "Inakuja mwishoni mwa 2026",
"intro": [
"Katika moduli hii, utajifunza jinsi uthibitisho wa utambulisho unavyofanya kazi katika programu za mtandao pamoja na dhana nyingine muhimu ikiwemo JWTs, CSRFs, Passport, Helmet, usimbaji fiche na usimbaji, na zaidi. Kisha utafanya mazoezi katika maabara na warsha na kupima maarifa yako kwa jaribio fupi."
]
},
"lab-family-movie-watchlist-api": {
- "note": "Inakuja mwishoni mwa 2026",
"intro": [
"Jifunze kutekeleza uthibitisho wa utambulisho na idhini katika programu ya Express kwa kujenga API ya orodha ya filamu za familia."
]
},
"back-end-development-and-apis-certification-exam": {
- "note": "Inakuja mwishoni mwa 2026",
"intro": [
"Pita mtihani huu ili kupata cheti chako cha ukuzaji wa nyuma na APIs."
]
},
"review-back-end-development-and-apis": {
- "note": "Inakuja mwishoni mwa 2026",
"intro": [
"Kagua dhana za ukuzaji wa nyuma na APIs kujiandaa kwa mtihani ujao."
]
@@ -7302,7 +7291,7 @@
},
"blocks": {
"lecture-working-with-nodejs-and-event-driven-architecture": {
- "title": "Kufanya kazi na NodeJS na usanifu unaoendeshwa na matukio",
+ "title": "Kufanya kazi na Node.js na usanifu unaoendeshwa na matukio",
"intro": [
"Jifunze kuhusu maktaba kuu za Node.js, jinsi ya kusanidi Node.js kwenye kompyuta yako, na faida na hasara za kutumia Node.js upande wa nyuma."
]
@@ -7416,24 +7405,6 @@
""
]
},
- "lecture-understanding-rest-api-and-web-services": {
- "title": "Kuelewa REST API na huduma za mtandao",
- "intro": [
- "Katika masomo haya, utajifunza kuhusu REST APIs na huduma za mtandao, na jinsi zinavyoruhusu programu tofauti kuwasiliana kwa kila mmoja kupitia mtandao."
- ]
- },
- "workshop-build-a-weather-service-api": {
- "title": "Jenga API ya huduma ya hali ya hewa",
- "intro": [
- "Utajifunza vigezo vya njia na upangaji njia wa moduli kwa kutumia express.Router kwa kujenga API ya huduma ya hali ya hewa."
- ]
- },
- "lab-timestamp-microservice": {
- "title": "Jenga huduma ndogo ya alama ya wakati",
- "intro": [
- "Fanya mazoezi ya kujenga RESTful API yenye mantiki ya uchambuzi wa tarehe kwa kuunda huduma ndogo ya alama ya wakati."
- ]
- },
"lecture-working-with-express": {
"title": "Kufanya kazi na Express",
"intro": [
@@ -7453,16 +7424,10 @@
"Utajifunza upangaji wa msingi wa Express na njia za majibu kwa kujenga programu ya vichekesho vya nasibu."
]
},
- "lab-personal-profile-app": {
- "title": "Jenga programu ya wasifu binafsi",
- "intro": [
- "Fanya mazoezi ya kujenga seva ya Express na API ya JSON kwa kuunda programu ya wasifu binafsi."
- ]
- },
"review-introduction-to-express": {
"title": "Kagua utangulizi wa Express",
"intro": [
- "Kagua huduma za mtandao, REST, huduma ndogo, na upangaji njia wa Express.js kabla ya kuchukua jaribio fupi."
+ "Kagua Express.js, njia za kuongoza, njia za majibu, na kuhudumia mafaili ya statiki kabla ya kuchukua jaribio fupi."
]
},
"quiz-introduction-to-express": {
@@ -7471,28 +7436,10 @@
"Jaribu maarifa yako kuhusu huduma za mtandao, REST, huduma ndogo, Express.js, na upangaji njia."
]
},
- "lecture-understanding-error-handling-and-health-checks": {
- "title": "Kuelewa usimamizi wa hitilafu na ukaguzi wa afya",
- "intro": [
- "Katika masomo haya, utajifunza kuhusu usimamizi wa hitilafu na ukaguzi wa afya katika Express."
- ]
- },
- "workshop-build-a-bank-api": {
- "title": "Jenga API ya benki",
- "intro": [
- "Utajifunza usimamizi wa makosa wa Express 5, ukaguzi wa afya, na kufunga kwa heshima kwa kujenga API ya benki."
- ]
- },
- "review-error-handling-in-express": {
- "title": "Kagua usimamizi wa hitilafu katika Express",
- "intro": [
- "Kagua nambari za hali za HTTP, usimamizi wa hitilafu, kurekebisha makosa, kuandika kumbukumbu, ukaguzi wa afya, na kufunga kwa heshima kabla ya kuchukua jaribio fupi."
- ]
- },
- "quiz-error-handling-in-express": {
- "title": "Jaribio fupi la usimamizi wa hitilafu katika Express",
+ "lab-personal-profile-app": {
+ "title": "Jenga programu ya wasifu binafsi",
"intro": [
- "Jaribu maarifa yako kuhusu nambari za hali za HTTP, usimamizi wa hitilafu, kurekebisha makosa, kuandika kumbukumbu, ukaguzi wa afya, na kufunga kwa heshima."
+ "Fanya mazoezi ya kujenga seva ya Express na API ya JSON kwa kuunda programu ya wasifu binafsi."
]
},
"lecture-express-middleware": {
@@ -7525,6 +7472,54 @@
"Jaribu maarifa yako kuhusu programu ya kati ya Express, ikiwa ni pamoja na kiwango cha programu, kiwango cha kipanga-njia, usimamizi wa hitilafu, na programu ya kati iliyojengwa ndani na ya wahusika wengine."
]
},
+ "lecture-understanding-rest-api-and-web-services": {
+ "title": "Kuelewa REST API na huduma za mtandao",
+ "intro": [
+ "Katika masomo haya, utajifunza kuhusu REST APIs na huduma za mtandao, na jinsi zinavyoruhusu programu tofauti kuwasiliana kwa kila mmoja kupitia mtandao."
+ ]
+ },
+ "workshop-build-a-weather-service-api": {
+ "title": "Jenga API ya huduma ya hali ya hewa",
+ "intro": [
+ "Utajifunza vigezo vya njia na upangaji njia wa moduli kwa kutumia express.Router kwa kujenga API ya huduma ya hali ya hewa."
+ ]
+ },
+ "review-rest-api-and-web-services": {
+ "title": "Kagua REST API na huduma za mtandao",
+ "intro": [
+ "Kagua huduma za mtandao, usanifu wa REST, nambari za hali za HTTP, na huduma ndogo ndogo."
+ ]
+ },
+ "lab-timestamp-microservice": {
+ "title": "Jenga huduma ndogo ya alama ya wakati",
+ "intro": [
+ "Fanya mazoezi ya kujenga RESTful API yenye mantiki ya uchambuzi wa tarehe kwa kuunda huduma ndogo ya alama ya wakati."
+ ]
+ },
+ "lecture-understanding-error-handling-and-health-checks": {
+ "title": "Kuelewa usimamizi wa hitilafu na ukaguzi wa afya",
+ "intro": [
+ "Katika masomo haya, utajifunza kuhusu usimamizi wa hitilafu na ukaguzi wa afya katika Express."
+ ]
+ },
+ "workshop-build-a-bank-api": {
+ "title": "Jenga API ya benki",
+ "intro": [
+ "Utajifunza usimamizi wa makosa wa Express 5, ukaguzi wa afya, na kufunga kwa heshima kwa kujenga API ya benki."
+ ]
+ },
+ "review-error-handling-in-express": {
+ "title": "Kagua usimamizi wa hitilafu katika Express",
+ "intro": [
+ "Kagua nambari za hali za HTTP, usimamizi wa hitilafu, kurekebisha makosa, kuandika kumbukumbu, ukaguzi wa afya, na kufunga kwa heshima kabla ya kuchukua jaribio fupi."
+ ]
+ },
+ "quiz-error-handling-in-express": {
+ "title": "Jaribio fupi la usimamizi wa hitilafu katika Express",
+ "intro": [
+ "Jaribu maarifa yako kuhusu nambari za hali za HTTP, usimamizi wa hitilafu, kurekebisha makosa, kuandika kumbukumbu, ukaguzi wa afya, na kufunga kwa heshima."
+ ]
+ },
"lecture-understanding-websockets": {
"title": "Kuelewa WebSockets",
"intro": [
@@ -8427,7 +8422,7 @@
"title": "Tengeneza menyu ya kafé",
"intro": [
"CSS inaeleza kivinjari jinsi ya kuonyesha ukurasa wako wa wavuti. Unaweza kutumia CSS kuweka rangi, fonti, ukubwa, na vipengele vingine vya vipengele vya HTML.",
- "Katika warsha hii, utajifunza CSS kwa kutengeneza ukurasa wa menyu kwa tovuti ya kafé."
+ "Katika warsha hii, utajifunza CSS kwa kubuni ukurasa wa menyu kwa ajili ya mkahawa."
]
},
"lab-business-card": {
@@ -9695,7 +9690,7 @@
"title": "Tengeneza Menyu ya Kafe",
"intro": [
"CSS inaeleza kivinjari jinsi ya kuonyesha ukurasa wako wa mtandao. Unaweza kutumia CSS kuweka rangi, fonti, ukubwa, na vipengele vingine vya HTML.",
- "Katika warsha hii, utajifunza CSS kwa kutengeneza ukurasa wa menyu kwa tovuti ya kafe."
+ "Katika warsha hii, utajifunza CSS kwa kubuni ukurasa wa menyu kwa ajili ya mkahawa."
]
},
"lab-business-card": {
diff --git a/client/swahili/translations.json b/client/swahili/translations.json
index bf6b6687b8f..662e614f154 100644
--- a/client/swahili/translations.json
+++ b/client/swahili/translations.json
@@ -558,6 +558,12 @@
"running-tests": "// kuendesha mitihani",
"tests-completed": "// mitihani imemalizika",
"console-output": "// matokeo ya konsoli",
+ "unavailable-local-resource": "Imeshindikana kupakia rasilimali: \"{{source}}\" si faili ya {{resourceType}} ya ndani inayopatikana. Tumia: {{allowedSources}}.",
+ "unavailable-local-resource-no-allowed": "Imeshindikana kupakia rasilimali: \"{{source}}\" si faili ya {{resourceType}} ya ndani inayopatikana katika changamoto hii.",
+ "local-resource-type": {
+ "stylesheet": "lahajedwali",
+ "script": "scripti"
+ },
"example-app": "Jenga programu inayofanana kiutendaji na <0>mradi huu wa mfano0>. Jaribu usikopi mradi wa mfano, toa mtindo wako binafsi.",
"syntax-error": "Msimbo wako umeleta kosa kabla ya mitihani kuanza. Tafadhali rekebisha na ujaribu tena.",
"indentation-error": "Msimbo wako una kosa la upangaji mistari. Huenda unahitaji kuongeza pass kwenye mstari mpya ili kuunda sehemu halali ya msimbo.",
@@ -656,25 +662,6 @@
"sub-step-7": "Bofya kitufe cha <0>Add secret0>",
"summary": "Usanidi wa Codespaces"
},
- "ona": {
- "intro": "Kozi hii inaendeshwa kwenye mashine ya Linux ya mtandao kwa kutumia Ona. Fuata maelekezo haya kuanza kozi:",
- "step-1": "<0>Tengeneza akaunti ya Ona0> ikiwa huna",
- "step-2": "Bofya kitufe cha kuanza hapa chini",
- "step-3": "Katika dirisha linalojitokeza, bofya kitufe cha tengeneza",
- "step-4": "Mara mashine ya Linux ya mtandao itakapomaliza kupakia, anzisha ugani wa CodeRoad kwa:",
- "step-5": "Kubofya menyu ya \"hamburger\" karibu juu kushoto ya dirisha la VSCode,",
- "step-6": "Nenda kwenye menyu ya <0>View0>,",
- "step-7": "Bofya chaguo la <0>Command Palette0>,",
- "step-8": "na endesha amri ya <0>CodeRoad: Start0>",
- "step-9": "Fuata maelekezo katika CodeRoad kumaliza kozi",
- "continue-project": "Kubofya kitufe cha kuanza hapa chini kutaanzisha mradi mpya. Ikiwa umewahi kuanza kozi ya {{course}}, nenda <0>kibodi chako cha Ona0> kuendelea.",
- "learn-more": "Jifunze zaidi kuhusu <0>eneo la kazi la Ona.0>",
- "logout-warning": "Ikiwa utaondoka kwenye freeCodeCamp kabla ya kumaliza kozi yote ya {{course}}, maendeleo yako hayatatazimwa kwenye akaunti yako ya freeCodeCamp.",
- "sub-step-3": "Nenda kwenye <0>ukurasa wa siri za Ona0>",
- "sub-step-4": "Tengeneza siri mpya iitwayo <0>CODEROAD_WEBHOOK_TOKEN0>",
- "sub-step-5": "Katika uwanja wa <0>Secret0>, bandika tokeni yako",
- "summary": "Usanidi wa Ona"
- },
"freecodecamp-os": {
"token-modal": "Unapoendesha kozi, dirisha la modal litaonekana likiomba tokeni yako ya mtumizi. Bandika tokeni uliyoinakili hapo juu ndani yake. Hii unahitaji kufanya mara moja tu kwa kila mazingira.",
"local": {
@@ -697,16 +684,6 @@
"step-5": "Kivinjari Rahisi kitafunguka baada ya kumaliza. Ikiwa ni ukurasa mweupe tupu, tumia kitufe cha onyesha upya kuiboresha na kuona ukurasa wa nyumbani wa kozi.",
"step-6": "Bofya kwenye mojawapo ya miradi inayopatikana kuianza, kisha fuata maelekezo ya mradi kumaliza.",
"continue-project": "Kubofya kitufe cha kuanza kilicho hapa chini kutaanzisha mashine mpya. Ikiwa tayari umeanza kozi ya {{title}}, nenda kwenye <0>ukurasa wa hifadhidata0> kufungua tena eneo la kazi la awali."
- },
- "ona": {
- "intro": "Kozi hii inaendeshwa katika mashine pepe ya Linux kwa kutumia Ona na ugani wa freeCodeCamp - Courses VS Code. Fuata maelekezo haya kuanza kozi:",
- "step-1": "<0>Tengeneza akaunti ya Ona0> ikiwa bado huna",
- "step-2": "Bofya kitufe cha kuanza kilicho hapa chini",
- "step-3": "Katika dirisha la modal linalojitokeza, bofya kitufe cha tengeneza",
- "step-4": "Mara mashine pepe ya Linux itakapomaliza kupakia, fungua orodha ya amri na endesha amri ya <0>freeCodeCamp: Run Course0>",
- "step-5": "Kivinjari Rahisi kitafunguka baada ya kumaliza. Ikiwa ni ukurasa mweupe tupu, tumia kitufe cha onyesha upya kuiboresha na kuona ukurasa wa nyumbani wa kozi.",
- "step-6": "Bofya kwenye mojawapo ya miradi inayopatikana kuianza, kisha fuata maelekezo ya mradi kumaliza.",
- "continue-project": "Kubofya kitufe cha kuanza kilicho hapa chini kutaanzisha mashine mpya. Ikiwa tayari umeanza kozi ya {{course}}, nenda <0>dashibodi yako ya Ona0> kuendelea."
}
},
"local": {
diff --git a/client/ukrainian/intro.json b/client/ukrainian/intro.json
index c954f24e2de..c4ba6e26b5c 100644
--- a/client/ukrainian/intro.json
+++ b/client/ukrainian/intro.json
@@ -1352,12 +1352,6 @@
"У цьому практичному занятті з 140 уроків ви завершите створення бази даних студентів, глибше вивчаючи команди SQL."
]
},
- "lab-world-cup-database": {
- "title": "Створіть базу даних чемпіонату світу",
- "intro": [
- "Для цього проєкту ви створите Bash-скрипт, який вводить інформацію про матчі чемпіонату світу в PostgreSQL, а потім виконує запити до бази даних для отримання корисної статистики."
- ]
- },
"workshop-kitty-ipsum-translator": {
"title": "Створіть перекладач Kitty Ipsum",
"intro": [
@@ -1371,6 +1365,12 @@
"У цьому практичному занятті з 210 уроків ви створите інтерактивну Bash-програму, яка зберігатиме інформацію про оренду для вашого прокату велосипедів за допомогою PostgreSQL."
]
},
+ "lab-world-cup-database": {
+ "title": "Створіть базу даних чемпіонату світу",
+ "intro": [
+ "Для цього проєкту ви створите Bash-скрипт, який вводить інформацію про матчі чемпіонату світу в PostgreSQL, а потім виконує запити до бази даних для отримання корисної статистики."
+ ]
+ },
"lab-salon-appointment-scheduler": {
"title": "Створіть планувальник записів у салон",
"intro": [
@@ -2669,6 +2669,13 @@
"Ви практикуватимете умовні оператори, щоб визначити оцінку студента на основі його балів."
]
},
+ "lab-story-fragment-restoration": {
+ "title": "Відновіть зв’язний сюжет із масиву фрагментів історії",
+ "intro": [
+ "У цій лабораторній роботі ви відновите зв’язний сюжет із пошкодженого масиву фрагментів історії.",
+ "Ви попрактикуєтеся у роботі з циклами, реалізуючи базові алгоритми для масивів з нуля."
+ ]
+ },
"lecture-the-var-keyword-and-hoisting": {
"title": "Ключове слово var і підняття",
"intro": [
@@ -3774,18 +3781,18 @@
"Вивчайте CSS-модель блоку з цим курсом. Зрозумійте, як елементи відтворюються в інтернеті, і навчіться керувати відступами, кордонами та padding, щоб досягти бажаного макета та дизайну."
]
},
- "top-introduction-to-flexbox": {
- "title": "Вступ до гнучкого контейнера",
- "intro": [
- "Відкрийте для себе можливості гнучкого контейнера — моделі макета, що спрощує створення гнучких і адаптивних вебмакетів. Навчіться легко створювати динамічні та адаптивні структури сторінок."
- ]
- },
"top-learn-block-and-inline": {
"title": "Вивчайте різницю між блоковими та рядковими елементами",
"intro": [
"Дослідіть відмінності між блоковими та рядковими елементами в HTML і CSS. Цей курс дає розуміння того, як ці типи відображення впливають на макет і поведінку, допомагаючи приймати обґрунтовані дизайнерські рішення."
]
},
+ "top-introduction-to-flexbox": {
+ "title": "Вступ до гнучкого контейнера",
+ "intro": [
+ "Відкрийте для себе можливості гнучкого контейнера — моделі макета, що спрощує створення гнучких і адаптивних вебмакетів. Навчіться легко створювати динамічні та адаптивні структури сторінок."
+ ]
+ },
"top-learn-variables-and-operators": {
"title": "Вивчайте змінні та оператори",
"intro": [
@@ -6287,12 +6294,6 @@
"Ви попрактикуєтеся у використанні утилітних класів Tailwind CSS для макетів на основі гнучких контейнерів, кольорів, точок зупинки та іншого."
]
},
- "lab-photography-exhibit": {
- "title": "Спроєктуйте виставку фотографій",
- "intro": [
- "У цій лабораторній роботі ви попрактикуєтеся у роботі з Tailwind CSS, створюючи вебсторінку виставки фотографій."
- ]
- },
"review-css-libraries-and-frameworks": {
"title": "Повторення з CSS-бібліотек і фреймворків",
"intro": [
@@ -6306,6 +6307,12 @@
"Перевірте свої знання про CSS-бібліотеки і фреймворки за допомогою цього тесту."
]
},
+ "lab-photography-exhibit": {
+ "title": "Спроєктуйте виставку фотографій",
+ "intro": [
+ "У цій лабораторній роботі ви попрактикуєтеся у роботі з Tailwind CSS, створюючи вебсторінку виставки фотографій."
+ ]
+ },
"lecture-introduction-to-typescript": {
"title": "Вступ до TypeScript",
"intro": [
@@ -6372,18 +6379,6 @@
"У цьому практичному занятті ви продовжите практикуватися з TypeScript, створюючи додаток для ворожіння."
]
},
- "lab-flashcard-quiz-app": {
- "title": "Створіть додаток для тестування з картками",
- "intro": [
- "У цій лабораторній роботі ви попрактикуєтеся з TypeScript, створюючи додаток для тестування з картками."
- ]
- },
- "lab-digital-pet-game": {
- "title": "Створіть гру з цифровим улюбленцем",
- "intro": [
- "У цій лабораторній роботі ви застосуєте знання TypeScript і React, створюючи гру з цифровим улюбленцем."
- ]
- },
"workshop-build-a-football-player-card-builder": {
"title": "Створіть конструктор карток футболістів",
"intro": [
@@ -6401,6 +6396,18 @@
"title": "Тест з TypeScript",
"intro": ["Перевірте свої знання TypeScript за допомогою цього тесту."]
},
+ "lab-flashcard-quiz-app": {
+ "title": "Створіть додаток для тестування з картками",
+ "intro": [
+ "У цій лабораторній роботі ви попрактикуєтеся з TypeScript, створюючи додаток для тестування з картками."
+ ]
+ },
+ "lab-digital-pet-game": {
+ "title": "Створіть гру з цифровим улюбленцем",
+ "intro": [
+ "У цій лабораторній роботі ви застосуєте знання TypeScript і React, створюючи гру з цифровим улюбленцем."
+ ]
+ },
"review-front-end-libraries": {
"title": "Повторення з бібліотек фронтенду",
"intro": [
@@ -7176,12 +7183,12 @@
"node-package-manager": "Менеджер пакетів Node",
"lab-prime-number-checker-module": "Створіть модуль перевірки простих чисел",
"http-and-the-web-standards-model": "HTTP і модель веб-стандартів",
- "rest-api-and-web-services": "REST API та веб-сервіси",
- "lab-timestamp-microservice": "Створіть мікросервіс часових позначок",
"introduction-to-express": "Вступ до Express",
"lab-personal-profile-app": "Створіть застосунок особистого профілю",
- "error-handling-in-express": "Обробка помилок у Express",
"express-middleware": "Підпрограмне забезпечення Express",
+ "rest-api-and-web-services": "REST API та веб-сервіси",
+ "lab-timestamp-microservice": "Створіть мікросервіс часових позначок",
+ "error-handling-in-express": "Обробка помилок у Express",
"websockets": "WebSockets",
"lab-chat-app": "Створіть чат-застосунок",
"security-and-privacy": "Безпека та конфіденційність",
@@ -7192,109 +7199,91 @@
},
"module-intros": {
"introduction-to-nodejs": {
- "note": "Очікується наприкінці 2026 року",
"intro": [
"У цьому модулі ви вивчите основи роботи з Node.js."
]
},
"nodejs-core-modules": {
- "note": "Очікується наприкінці 2026 року",
"intro": [
"У цьому модулі ви дізнаєтеся про загальні основні модулі Node.js, зокрема fs, os, path та інші. Потім ви зможете попрактикуватися у лабораторних роботах і практичних заняттях і перевірити свої знання за допомогою короткого тесту."
]
},
"node-package-manager": {
- "note": "Очікується наприкінці 2026 року",
"intro": [
"У цьому модулі ви ознайомитеся з менеджером пакетів Node, який розробники використовують для керування залежностями та скриптами проєкту. Потім ви попрактикуєтеся у лабораторних роботах і практичних заняттях і перевірите свої знання за допомогою короткого тесту."
]
},
"lab-prime-number-checker-module": {
- "note": "Очікується наприкінці 2026 року",
"intro": [
"Попрактикуйтеся у створенні та експорті модуля npm, створивши перевірку простих чисел."
]
},
"http-and-the-web-standards-model": {
- "note": "Очікується наприкінці 2026 року",
"intro": [
"У цьому модулі ви дізнаєтеся про HTTP (протокол передачі гіпертексту) та інші важливі поняття, зокрема модель запит-відповідь, загальні коди відповідей, DNS, TCP/IP та інше. Потім ви попрактикуєтеся, створивши власний вебсервер на практичному занятті, і перевірите свої знання за допомогою короткого тесту."
]
},
- "rest-api-and-web-services": {
- "note": "Очікується наприкінці 2026 року",
+ "introduction-to-express": {
"intro": [
- "У цьому модулі ви дізнаєтеся про REST API (передача репрезентативного стану через API) і як працюють мікросервіси. Потім ви складете короткий тест для перевірки знань."
+ "У цьому модулі ви ознайомитеся з Express.js — фреймворком для створення RESTful API. Потім ви попрактикуєтеся на лабораторних роботах і практичних заняттях і перевірите свої знання за допомогою короткого тесту."
]
},
- "lab-timestamp-microservice": {
- "note": "Очікується наприкінці 2026 року",
+ "lab-personal-profile-app": {
"intro": [
- "Попрактикуйтеся у створенні RESTful API з логікою розбору дат, створивши мікросервіс часових позначок."
+ "Попрактикуйтеся у створенні сервера Express і JSON API, створивши застосунок особистого профілю."
]
},
- "introduction-to-express": {
- "note": "Очікується наприкінці 2026 року",
+ "express-middleware": {
"intro": [
- "У цьому модулі ви ознайомитеся з Express.js — фреймворком для створення RESTful API. Потім ви попрактикуєтеся на лабораторних роботах і практичних заняттях і перевірите свої знання за допомогою короткого тесту."
+ "У цьому модулі ви дізнаєтеся про підпрограмне забезпечення в Express.js, яке використовується для обробки запитів і відповідей між клієнтом і сервером. Потім ви попрактикуєтеся на практичному занятті та лабораторній роботі і перевірите свої знання за допомогою короткого тесту."
]
},
- "lab-personal-profile-app": {
- "note": "Очікується наприкінці 2026 року",
+ "rest-api-and-web-services": {
"intro": [
- "Попрактикуйтеся у створенні сервера Express і JSON API, створивши застосунок особистого профілю."
+ "У цьому модулі ви дізнаєтеся про REST API (передача репрезентативного стану через API) і як працюють мікросервіси. Потім ви складете короткий тест для перевірки знань."
]
},
- "error-handling-in-express": {
- "note": "Очікується наприкінці 2026 року",
+ "lab-timestamp-microservice": {
"intro": [
- "У цьому модулі ви дізнаєтеся, як працює обробка помилок, налагодження та перевірка стану здоров’я у Express.js. Потім ви попрактикуєтеся у лабораторній роботі і перевірите свої знання за допомогою короткого тесту."
+ "Попрактикуйтеся у створенні RESTful API з логікою розбору дат, створивши мікросервіс часових позначок."
]
},
- "express-middleware": {
- "note": "Очікується наприкінці 2026 року",
+ "error-handling-in-express": {
"intro": [
- "У цьому модулі ви дізнаєтеся про підпрограмне забезпечення в Express.js, яке використовується для обробки запитів і відповідей між клієнтом і сервером. Потім ви попрактикуєтеся на практичному занятті та лабораторній роботі і перевірите свої знання за допомогою короткого тесту."
+ "У цьому модулі ви дізнаєтеся, як працює обробка помилок, налагодження та перевірка стану здоров’я у Express.js. Потім ви попрактикуєтеся у лабораторній роботі і перевірите свої знання за допомогою короткого тесту."
]
},
"websockets": {
- "note": "Очікується наприкінці 2026 року",
"intro": [
"У цьому модулі ви ознайомитеся з протоколом WebSockets, який використовується для обміну даними в реальному часі між клієнтом і сервером. Потім ви попрактикуєтеся у лабораторних роботах і практичних заняттях і перевірите свої знання за допомогою короткого тесту."
]
},
"lab-chat-app": {
- "note": "Очікується наприкінці 2026 року",
"intro": [
"Попрактикуйтеся у створенні чат-сервера в реальному часі для кількох клієнтів за допомогою WebSockets у Node.js."
]
},
"security-and-privacy": {
- "note": "Очікується наприкінці 2026 року",
"intro": [
"У цьому модулі ви дізнаєтеся про відмінності між безпекою та конфіденційністю, а також про інші поняття, зокрема CSP, Permissions-Policies, PII, роботу з CORS та інше. Потім ви складете короткий тест для перевірки знань."
]
},
"authentication": {
- "note": "Очікується наприкінці 2026 року",
"intro": [
"У цьому модулі ви дізнаєтеся, як працює автентифікація у вебзастосунках, а також про важливі поняття, зокрема JWT, CSRF, Passport, Helmet, криптографію та шифрування. Потім ви попрактикуєтеся у лабораторних роботах і практичних заняттях і перевірите свої знання за допомогою короткого тесту."
]
},
"lab-family-movie-watchlist-api": {
- "note": "Очікується наприкінці 2026 року",
"intro": [
"Попрактикуйтеся у реалізації автентифікації та авторизації в застосунку Express, створивши API для сімейного списку фільмів."
]
},
"back-end-development-and-apis-certification-exam": {
- "note": "Очікується наприкінці 2026 року",
"intro": [
"Складіть цей екзамен, щоб отримати сертифікацію з розробки бекенду та API."
]
},
"review-back-end-development-and-apis": {
- "note": "Очікується наприкінці 2026 року",
"intro": [
"Повторіть концепції розробки бекенда та API, щоб підготуватися до майбутнього екзамену."
]
@@ -7302,7 +7291,7 @@
},
"blocks": {
"lecture-working-with-nodejs-and-event-driven-architecture": {
- "title": "Робота з NodeJS та подієво-орієнтованою архітектурою",
+ "title": "Робота з Node.js та архітектурою, орієнтованою на події",
"intro": [
"Дізнайтеся про основні бібліотеки Node.js, як встановити Node.js на свій комп’ютер, а також про переваги та недоліки використання Node.js на бекенді."
]
@@ -7416,24 +7405,6 @@
""
]
},
- "lecture-understanding-rest-api-and-web-services": {
- "title": "Розуміння REST API та веб-сервісів",
- "intro": [
- "У цих уроках ви дізнаєтеся про REST API та веб-сервіси, а також про те, як вони дозволяють різним застосункам спілкуватися між собою через інтернет."
- ]
- },
- "workshop-build-a-weather-service-api": {
- "title": "Створіть API сервісу погоди",
- "intro": [
- "Ви навчитеся параметрам маршруту та модульному маршрутизуванню з express.Router, створюючи API сервісу погоди."
- ]
- },
- "lab-timestamp-microservice": {
- "title": "Створіть мікросервіс часових позначок",
- "intro": [
- "Практикуйте створення RESTful API з логікою розбору дат, створюючи мікросервіс часових позначок."
- ]
- },
"lecture-working-with-express": {
"title": "Робота з Express",
"intro": [
@@ -7453,16 +7424,10 @@
"Ви вивчите базове маршрутизування Express і методи відповіді, створюючи застосунок випадкових жартів."
]
},
- "lab-personal-profile-app": {
- "title": "Створіть застосунок особистого профілю",
- "intro": [
- "Практикуйте створення сервера Express і JSON API, створюючи застосунок особистого профілю."
- ]
- },
"review-introduction-to-express": {
"title": "Повторення введення в Express",
"intro": [
- "Повторіть веб-сервіси, REST, мікросервіси та маршрутизацію Express.js перед проходженням тесту."
+ "Повторіть Express.js, маршрутизацію, методи відповіді та обслуговування статичних файлів перед проходженням тесту."
]
},
"quiz-introduction-to-express": {
@@ -7471,28 +7436,10 @@
"Перевірте свої знання про веб-сервіси, REST, мікросервіси, Express.js і маршрутизацію."
]
},
- "lecture-understanding-error-handling-and-health-checks": {
- "title": "Розуміння обробки помилок і перевірок стану",
- "intro": [
- "У цих уроках ви дізнаєтеся про обробку помилок і перевірки стану в Express."
- ]
- },
- "workshop-build-a-bank-api": {
- "title": "Створіть API банку",
- "intro": [
- "Ви навчитеся обробці помилок Express 5, перевіркам стану та коректному завершенню роботи, створюючи API банку."
- ]
- },
- "review-error-handling-in-express": {
- "title": "Повторення обробки помилок в Express",
- "intro": [
- "Повторіть HTTP статус-коди, обробку помилок, налагодження, логування, перевірки стану та плавне завершення роботи перед проходженням тесту."
- ]
- },
- "quiz-error-handling-in-express": {
- "title": "Тест з обробки помилок в Express",
+ "lab-personal-profile-app": {
+ "title": "Створіть застосунок особистого профілю",
"intro": [
- "Перевірте свої знання про HTTP статус-коди, обробку помилок, налагодження, логування, перевірки стану та плавне завершення роботи."
+ "Практикуйте створення сервера Express і JSON API, створюючи застосунок особистого профілю."
]
},
"lecture-express-middleware": {
@@ -7525,6 +7472,54 @@
"Перевірте свої знання про підпрограмне забезпечення Express, включно з підпрограмним забезпеченням на рівні застосунку, маршрутизатора, обробки помилок, а також вбудованим і стороннім підпрограмним забезпеченням."
]
},
+ "lecture-understanding-rest-api-and-web-services": {
+ "title": "Розуміння REST API та веб-сервісів",
+ "intro": [
+ "У цих уроках ви дізнаєтеся про REST API та веб-сервіси, а також про те, як вони дозволяють різним застосункам спілкуватися між собою через інтернет."
+ ]
+ },
+ "workshop-build-a-weather-service-api": {
+ "title": "Створіть API сервісу погоди",
+ "intro": [
+ "Ви навчитеся параметрам маршруту та модульному маршрутизуванню з express.Router, створюючи API сервісу погоди."
+ ]
+ },
+ "review-rest-api-and-web-services": {
+ "title": "Повторення REST API та веб-сервісів",
+ "intro": [
+ "Повторіть веб-сервіси, архітектуру REST, коди стану HTTP і мікросервіси."
+ ]
+ },
+ "lab-timestamp-microservice": {
+ "title": "Створіть мікросервіс часових позначок",
+ "intro": [
+ "Практикуйте створення RESTful API з логікою розбору дат, створюючи мікросервіс часових позначок."
+ ]
+ },
+ "lecture-understanding-error-handling-and-health-checks": {
+ "title": "Розуміння обробки помилок і перевірок стану",
+ "intro": [
+ "У цих уроках ви дізнаєтеся про обробку помилок і перевірки стану в Express."
+ ]
+ },
+ "workshop-build-a-bank-api": {
+ "title": "Створіть API банку",
+ "intro": [
+ "Ви навчитеся обробці помилок Express 5, перевіркам стану та коректному завершенню роботи, створюючи API банку."
+ ]
+ },
+ "review-error-handling-in-express": {
+ "title": "Повторення обробки помилок в Express",
+ "intro": [
+ "Повторіть HTTP статус-коди, обробку помилок, налагодження, логування, перевірки стану та плавне завершення роботи перед проходженням тесту."
+ ]
+ },
+ "quiz-error-handling-in-express": {
+ "title": "Тест з обробки помилок в Express",
+ "intro": [
+ "Перевірте свої знання про HTTP статус-коди, обробку помилок, налагодження, логування, перевірки стану та плавне завершення роботи."
+ ]
+ },
"lecture-understanding-websockets": {
"title": "Розуміння WebSockets",
"intro": [
@@ -8427,7 +8422,7 @@
"title": "Проєктування меню кафе",
"intro": [
"CSS вказує браузеру, як відображати вашу вебсторінку. Ви можете використовувати CSS, щоб встановити колір, шрифт, розмір і інші властивості HTML-елементів.",
- "У цьому практичному занятті ви вивчите CSS, створюючи сторінку меню для вебсайту кафе."
+ "На цьому практичному занятті ви вивчите CSS, створюючи сторінку меню для кафе."
]
},
"lab-business-card": {
@@ -9695,7 +9690,7 @@
"title": "Створіть меню кафе",
"intro": [
"CSS вказує браузеру, як відображати вашу вебсторінку. Ви можете використовувати CSS, щоб задати колір, шрифт, розмір та інші властивості HTML-елементів.",
- "У цьому практичному занятті ви вивчите CSS, створюючи сторінку меню для вебсайту кафе."
+ "На цьому практичному занятті ви вивчите CSS, створюючи сторінку меню для кафе."
]
},
"lab-business-card": {
diff --git a/client/ukrainian/translations.json b/client/ukrainian/translations.json
index be4ed0d26c4..31de6c9e581 100644
--- a/client/ukrainian/translations.json
+++ b/client/ukrainian/translations.json
@@ -558,6 +558,12 @@
"running-tests": "// запуск тестів",
"tests-completed": "// тести завершено",
"console-output": "// вихідні дані консолі",
+ "unavailable-local-resource": "Не вдалося завантажити ресурс: \"{{source}}\" не є доступним локальним {{resourceType}} файлом. Використовуйте: {{allowedSources}}.",
+ "unavailable-local-resource-no-allowed": "Не вдалося завантажити ресурс: \"{{source}}\" не є доступним локальним {{resourceType}} файлом у цьому завданні.",
+ "local-resource-type": {
+ "stylesheet": "таблиця стилів",
+ "script": "скрипт"
+ },
"example-app": "Створіть застосунок, який функціонально схожий на <0>цей приклад проєкту0>. Намагайтеся не копіювати приклад, додайте свій особистий стиль.",
"syntax-error": "Ваш код викликав помилку до запуску тестів. Будь ласка, виправте її і спробуйте знову.",
"indentation-error": "У вашому коді помилка відступу. Можливо, потрібно додати pass на новому рядку, щоб сформувати дійсний блок коду.",
@@ -656,25 +662,6 @@
"sub-step-7": "Натисніть кнопку <0>Додати секрет0>",
"summary": "Налаштування Codespaces"
},
- "ona": {
- "intro": "Цей курс запускається у віртуальній машині Linux за допомогою Ona. Дотримуйтесь цих інструкцій, щоб почати курс:",
- "step-1": "<0>Створіть обліковий запис Ona0>, якщо у вас його немає",
- "step-2": "Натисніть кнопку початку нижче",
- "step-3": "У спливаючому вікні натисніть кнопку створення",
- "step-4": "Після завантаження віртуальної машини Linux запустіть розширення CodeRoad, виконавши:",
- "step-5": "Натисніть на меню «гамбургер» у верхньому лівому куті вікна VSCode,",
- "step-6": "Перейдіть у меню <0>Вигляд0>,",
- "step-7": "Натисніть на опцію <0>Палітра команд0>,",
- "step-8": "і виконайте команду <0>CodeRoad: Start0>",
- "step-9": "Дотримуйтесь інструкцій у CodeRoad, щоб завершити курс",
- "continue-project": "Натиснення кнопки початку нижче запустить новий проєкт. Якщо ви раніше починали курс {{course}}, перейдіть на <0>вашу панель керування Ona0>, щоб продовжити.",
- "learn-more": "Дізнайтеся більше про <0>робочі простори Ona.0>",
- "logout-warning": "Якщо ви вийдете з freeCodeCamp, не завершивши весь курс {{course}}, ваш прогрес не буде збережено у вашому обліковому записі freeCodeCamp.",
- "sub-step-3": "Перейдіть на вашу <0>сторінку секретів Ona0>",
- "sub-step-4": "Створіть новий секрет із назвою <0>CODEROAD_WEBHOOK_TOKEN0>",
- "sub-step-5": "У полі <0>Секрет0> вставте свій токен",
- "summary": "Налаштування Ona"
- },
"freecodecamp-os": {
"token-modal": "Коли ви запускаєте курс, з’явиться модальне вікно з проханням ввести ваш користувацький токен. Вставте туди токен, який ви скопіювали вище. Це потрібно зробити лише один раз для кожного середовища.",
"local": {
@@ -697,16 +684,6 @@
"step-5": "Коли все буде готово, відкриється Simple Browser. Якщо сторінка порожня і біла, натисніть кнопку оновлення, щоб побачити домашню сторінку курсу.",
"step-6": "Натисніть на один із доступних проєктів, щоб почати його, а потім дотримуйтесь інструкцій у проєкті, щоб його завершити.",
"continue-project": "Натиснення кнопки запуску нижче запустить нову машину. Якщо ви раніше починали курс {{title}}, перейдіть на <0>сторінку репозиторію0>, щоб знову відкрити попереднє робоче середовище."
- },
- "ona": {
- "intro": "Цей курс запускається у віртуальній Linux-машині за допомогою Ona і розширення freeCodeCamp - Courses для VS Code. Дотримуйтесь цих інструкцій, щоб почати курс:",
- "step-1": "<0>Створіть обліковий запис Ona0>, якщо у вас його немає",
- "step-2": "Натисніть кнопку запуску нижче",
- "step-3": "У модальному вікні, що з’явиться, натисніть кнопку створення",
- "step-4": "Коли віртуальна Linux-машина завантажиться, відкрийте палітру команд і виконайте команду <0>freeCodeCamp: Run Course0>",
- "step-5": "Коли все буде готово, відкриється Simple Browser. Якщо сторінка порожня і біла, натисніть кнопку оновлення, щоб побачити домашню сторінку курсу.",
- "step-6": "Натисніть на один із доступних проєктів, щоб почати його, а потім дотримуйтесь інструкцій у проєкті, щоб його завершити.",
- "continue-project": "Натиснення кнопки запуску нижче запустить нову машину. Якщо ви раніше починали курс {{course}}, перейдіть до <0>свого Ona-дашборда0>, щоб продовжити."
}
},
"local": {
diff --git a/curriculum/challenges/arabic/blocks/back-end-development-and-apis-projects/bd7158d8c443edefaeb5bd0f.md b/curriculum/challenges/arabic/blocks/back-end-development-and-apis-projects/bd7158d8c443edefaeb5bd0f.md
index 6130b80d4f0..1fa6aa1de74 100644
--- a/curriculum/challenges/arabic/blocks/back-end-development-and-apis-projects/bd7158d8c443edefaeb5bd0f.md
+++ b/curriculum/challenges/arabic/blocks/back-end-development-and-apis-projects/bd7158d8c443edefaeb5bd0f.md
@@ -50,15 +50,18 @@ dashedName: file-metadata-microservice
عند إرسال ملف، تستلم في استجابة JSON اسم الملف `name`، نوعه `type`، وحجمه `size` بوحدة البايت.
```js
- const formData = new FormData();
- const fileData = await fetch(
- 'https://cdn.freecodecamp.org/weather-icons/01d.png'
- );
- const file = await fileData.blob();
- formData.append('upfile', file, 'icon');
+ const boundary = 'fccBoundary1234567890';
+ const head =
+ `--${boundary}\r\n` +
+ 'Content-Disposition: form-data; name="upfile"; filename="icon"\r\n' +
+ 'Content-Type: image/png\r\n\r\n';
+ const body = new Blob([head, new Uint8Array(70), `\r\n--${boundary}--\r\n`]);
const data = await fetch(code + '/api/fileanalyse', {
method: 'POST',
- body: formData
+ headers: {
+ 'Content-Type': `multipart/form-data; boundary=${boundary}`
+ },
+ body
});
const parsed = await data.json();
assert.property(parsed, 'size');
diff --git a/curriculum/challenges/arabic/blocks/daily-coding-challenges-javascript/6a26df3e2988bcdded204895.md b/curriculum/challenges/arabic/blocks/daily-coding-challenges-javascript/6a26df3e2988bcdded204895.md
index 59bc412ce72..88566c29f44 100644
--- a/curriculum/challenges/arabic/blocks/daily-coding-challenges-javascript/6a26df3e2988bcdded204895.md
+++ b/curriculum/challenges/arabic/blocks/daily-coding-challenges-javascript/6a26df3e2988bcdded204895.md
@@ -1,15 +1,15 @@
---
id: 6a26df3e2988bcdded204895
-title: "تحدٍّ 359: حاسبة معامل الغولف"
+title: "تحدٍّ 359: حاسبة مؤشر الهانديكاب في الغولف"
challengeType: 28
dashedName: challenge-359
---
# --description--
-معطى مصفوفة من نتائج الغولف ومصفوفة مقابلة لقيم بار الدورة، أرجع معامل الإعاقة للاعب الغولف باستخدام الطريقة التالية:
+معطاة مصفوفة من نتائج الغولف ومصفوفة مقابلة لقيم البار لكل ملعب، أرجع مؤشر الهانديكاب للاعب الغولف باستخدام الطريقة التالية:
-- احسب الفرق لكل جولة بطرح قيمة البار من النتيجة، ثم أرجع متوسط كل الفروق مقربًا إلى منزلة عشرية واحدة.
+- احسب الفرق لكل جولة بطرح قيمة البار من النتيجة، ثم أرجع متوسط كل الفروق بعد تقريبه إلى منزلة عشرية واحدة.
# --hints--
@@ -25,10 +25,10 @@ assert.equal(calculateHandicap([72, 72, 72], [72, 72, 72]), 0);
assert.equal(calculateHandicap([80, 76, 78, 78], [72, 72, 72, 72]), 6);
```
-`calculateHandicap([42, 45, 46, 44], [36, 36, 36, 36])` يجب أن تُرجع `8.3`.
+يجب أن تُعيد الدالة `calculateHandicap([42, 45, 46, 45], [36, 36, 36, 36])` القيمة `8.5`.
```js
-assert.equal(calculateHandicap([42, 45, 46, 44], [36, 36, 36, 36]), 8.3);
+assert.equal(calculateHandicap([42, 45, 46, 45], [36, 36, 36, 36]), 8.5);
```
`calculateHandicap([85, 80, 76, 79, 82], [72, 72, 72, 71, 71])` يجب أن تُرجع `8.8`.
diff --git a/curriculum/challenges/arabic/blocks/daily-coding-challenges-python/6a26df3e2988bcdded204895.md b/curriculum/challenges/arabic/blocks/daily-coding-challenges-python/6a26df3e2988bcdded204895.md
index 85667b196b2..28949d86351 100644
--- a/curriculum/challenges/arabic/blocks/daily-coding-challenges-python/6a26df3e2988bcdded204895.md
+++ b/curriculum/challenges/arabic/blocks/daily-coding-challenges-python/6a26df3e2988bcdded204895.md
@@ -31,12 +31,12 @@ TestCase().assertEqual(calculate_handicap([80, 76, 78, 78], [72, 72, 72, 72]), 6
}})
```
-`calculate_handicap([42, 45, 46, 44], [36, 36, 36, 36])` يجب أن تُرجع `8.3`.
+يجب أن تُعيد الدالة `calculate_handicap([42, 45, 46, 45], [36, 36, 36, 36])` القيمة `8.5`.
```js
({test: () => { runPython(`
from unittest import TestCase
-TestCase().assertEqual(calculate_handicap([42, 45, 46, 44], [36, 36, 36, 36]), 8.3)`)
+TestCase().assertEqual(calculate_handicap([42, 45, 46, 45], [36, 36, 36, 36]), 8.5)`)
}})
```
diff --git a/curriculum/challenges/arabic/blocks/data-analysis-with-python-projects/5e46f7e5ac417301a38fb928.md b/curriculum/challenges/arabic/blocks/data-analysis-with-python-projects/5e46f7e5ac417301a38fb928.md
index 2425618a772..6a7df7f4e91 100644
--- a/curriculum/challenges/arabic/blocks/data-analysis-with-python-projects/5e46f7e5ac417301a38fb928.md
+++ b/curriculum/challenges/arabic/blocks/data-analysis-with-python-projects/5e46f7e5ac417301a38fb928.md
@@ -8,9 +8,9 @@ dashedName: mean-variance-standard-deviation-calculator
# --description--
-ستعمل على هذا المشروع باستخدام شفرة البداية من Ona.
+ستعمل على هذا المشروع باستخدام شفرة البداية الخاصة بنا.
-ما زلنا نطوّر الجزء التفاعلي التعليمي من منهج Python. حتى ذلك الحين، إليك بعض الفيديوهات على قناة freeCodeCamp.org على يوتيوب التي ستعلمك كل ما تحتاجه لإكمال هذا المشروع:
+نحن لا نزال نطور الجزء التفاعلي التعليمي من منهج Python. حتى ذلك الحين، إليك بعض الفيديوهات على قناة freeCodeCamp.org على يوتيوب التي ستعلمك كل ما تحتاجه لإكمال هذا المشروع:
- دورة فيديو Python للجميع (14 ساعة)
@@ -53,7 +53,7 @@ dashedName: mean-variance-standard-deviation-calculator
## التطوير
اكتب شفرتك في `mean_var_std.py`. للتطوير، يمكنك استخدام `main.py` لاختبار شفرتك.
-لتشغيل شفرتك، اكتب `python3 main.py` في طرفية Ona واضغط Enter. سيؤدي ذلك إلى تشغيل مفسر CPython المضمّن ملف `main.py`.
+لتشغيل شفرتك، اكتب `python3 main.py` في الطرفية واضغط إدخال. سيؤدي ذلك إلى تشغيل مفسر CPython المضمّن ملف `main.py`.
## الاختبار
diff --git a/curriculum/challenges/arabic/blocks/data-analysis-with-python-projects/5e46f7e5ac417301a38fb929.md b/curriculum/challenges/arabic/blocks/data-analysis-with-python-projects/5e46f7e5ac417301a38fb929.md
index a39cf06a17c..34eceb67af4 100644
--- a/curriculum/challenges/arabic/blocks/data-analysis-with-python-projects/5e46f7e5ac417301a38fb929.md
+++ b/curriculum/challenges/arabic/blocks/data-analysis-with-python-projects/5e46f7e5ac417301a38fb929.md
@@ -8,9 +8,9 @@ dashedName: demographic-data-analyzer
# --description--
-ستعمل على هذا المشروع باستخدام قالب جاهز Ona الخاص بنا.
+ستعمل على هذا المشروع باستخدام شفرة البداية الخاصة بنا.
-ما زلنا نطور الجزء التفاعلي التعليمي من منهج Python. حتى ذلك الحين، إليك بعض الفيديوهات على قناة freeCodeCamp.org على YouTube التي ستعلمك كل ما تحتاجه لإكمال هذا المشروع:
+نحن لا نزال نطور الجزء التفاعلي التعليمي من منهج Python. حتى ذلك الحين، إليك بعض الفيديوهات على قناة freeCodeCamp.org على يوتيوب التي ستعلمك كل ما تحتاجه لإكمال هذا المشروع:
- دورة فيديو Python للجميع (14 ساعة)
@@ -44,11 +44,11 @@ dashedName: demographic-data-analyzer
استخدم قالب الشفرة في الملف `demographic_data_analyzer.py`. حدّث الشفرة بحيث تُعيّن جميع المتغيرات التي قيمتها `None` إلى الحساب أو الشفرة المناسبة. قرب جميع الأعداد العشرية إلى أقرب عُشر.
-## تطوير
+## التطوير
اكتب شفرتك في `demographic_data_analyzer.py`. للتطوير، يمكنك استخدام `main.py` لاختبار شفرتك.
-## اختبار
+## الاختبار
اختبارات الوحدة لهذا المشروع موجودة في `test_module.py`. استوردنا الاختبارات من `test_module.py` إلى `main.py` لملاءمتك.
diff --git a/curriculum/challenges/arabic/blocks/data-analysis-with-python-projects/5e46f7f8ac417301a38fb92a.md b/curriculum/challenges/arabic/blocks/data-analysis-with-python-projects/5e46f7f8ac417301a38fb92a.md
index 44f7a13a77a..a8f142cc8c5 100644
--- a/curriculum/challenges/arabic/blocks/data-analysis-with-python-projects/5e46f7f8ac417301a38fb92a.md
+++ b/curriculum/challenges/arabic/blocks/data-analysis-with-python-projects/5e46f7f8ac417301a38fb92a.md
@@ -8,9 +8,9 @@ dashedName: medical-data-visualizer
# --description--
-ستعمل على هذا المشروع باستخدام قالب البداية Ona الخاص بنا.
+ستعمل على هذا المشروع باستخدام قالبنا الجاهز للبدء.
-ما زلنا نطوّر الجزء التفاعلي التعليمي من منهج Python. حتى ذلك الحين، إليك بعض الفيديوهات على قناة freeCodeCamp.org على يوتيوب التي ستعلمك كل ما تحتاجه لإكمال هذا المشروع:
+نحن لا نزال نطور الجزء التفاعلي التعليمي من منهج Python. حتى ذلك الحين، إليك بعض الفيديوهات على قناة freeCodeCamp.org على يوتيوب التي ستعلمك كل ما تحتاجه لإكمال هذا المشروع:
- دورة فيديو Python للجميع (14 ساعة)
diff --git a/curriculum/challenges/arabic/blocks/data-analysis-with-python-projects/5e46f802ac417301a38fb92b.md b/curriculum/challenges/arabic/blocks/data-analysis-with-python-projects/5e46f802ac417301a38fb92b.md
index d1827ed031a..876f5ef4be0 100644
--- a/curriculum/challenges/arabic/blocks/data-analysis-with-python-projects/5e46f802ac417301a38fb92b.md
+++ b/curriculum/challenges/arabic/blocks/data-analysis-with-python-projects/5e46f802ac417301a38fb92b.md
@@ -8,9 +8,9 @@ dashedName: page-view-time-series-visualizer
# --description--
-ستعمل على هذا المشروع باستخدام قالب البداية Ona الخاص بنا.
+ستعمل على هذا المشروع باستخدام شفرة البداية الخاصة بنا.
-ما زلنا نطور الجزء التفاعلي التعليمي من منهج Python. حتى الآن، إليك بعض الفيديوهات على قناة freeCodeCamp.org على يوتيوب التي ستعلمك كل ما تحتاجه لإكمال هذا المشروع:
+نحن لا نزال نطور الجزء التفاعلي التعليمي من منهج Python. حتى ذلك الحين، إليك بعض الفيديوهات على قناة freeCodeCamp.org على يوتيوب التي ستعلمك كل ما تحتاجه لإكمال هذا المشروع:
- دورة فيديو Python للجميع (14 ساعة)
@@ -30,13 +30,13 @@ dashedName: page-view-time-series-visualizer
لكل مخطط، تأكد من استخدام نسخة من إطار البيانات.
-يتضمن القالب الجاهز أيضًا أوامر لحفظ الصورة وإرجاعها.
+يتضمن قالب البداية أيضًا أوامر لحفظ الصورة وإرجاعها.
-## تطوير
+## التطوير
اكتب شفرتك في `time_series_visualizer.py`. للاختبار أثناء التطوير، يمكنك استخدام `main.py`.
-## اختبار
+## الاختبار
اختبارات الوحدة لهذا المشروع موجودة في `test_module.py`. استوردنا الاختبارات من `test_module.py` إلى `main.py` لملاءمتك.
diff --git a/curriculum/challenges/arabic/blocks/data-analysis-with-python-projects/5e4f5c4b570f7e3a4949899f.md b/curriculum/challenges/arabic/blocks/data-analysis-with-python-projects/5e4f5c4b570f7e3a4949899f.md
index 3a671958938..ec88a0b0a1e 100644
--- a/curriculum/challenges/arabic/blocks/data-analysis-with-python-projects/5e4f5c4b570f7e3a4949899f.md
+++ b/curriculum/challenges/arabic/blocks/data-analysis-with-python-projects/5e4f5c4b570f7e3a4949899f.md
@@ -8,9 +8,9 @@ dashedName: sea-level-predictor
# --description--
-ستعمل على هذا المشروع باستخدام شفرة البداية من Ona.
+ستعمل على هذا المشروع باستخدام شفرة البداية الخاصة بنا.
-ما زلنا نطوّر الجزء التفاعلي التعليمي من منهج Python. حتى ذلك الحين، إليك بعض الفيديوهات على قناة freeCodeCamp.org على يوتيوب التي ستعلمك كل ما تحتاجه لإكمال هذا المشروع:
+نحن لا نزال نطور الجزء التفاعلي التعليمي من منهج Python. حتى ذلك الحين، إليك بعض الفيديوهات على قناة freeCodeCamp.org على يوتيوب التي ستعلمك كل ما تحتاجه لإكمال هذا المشروع:
- دورة فيديو Python للجميع (14 ساعة)
@@ -30,11 +30,11 @@ dashedName: sea-level-predictor
يتضمن قالب البداية أيضًا أوامر لحفظ الصورة وإرجاعها.
-## تطوير
+## التطوير
اكتب شفرتك في `sea_level_predictor.py`. للاختبار أثناء التطوير، يمكنك استخدام `main.py`.
-## اختبار
+## الاختبار
اختبارات الوحدة لهذا المشروع موجودة في `test_module.py`. استوردنا الاختبارات من `test_module.py` إلى `main.py` لملاءمتك.
diff --git a/curriculum/challenges/arabic/blocks/information-security-projects/5e46f979ac417301a38fb932.md b/curriculum/challenges/arabic/blocks/information-security-projects/5e46f979ac417301a38fb932.md
index 9dfeb9a5828..f9df3ebaa5c 100644
--- a/curriculum/challenges/arabic/blocks/information-security-projects/5e46f979ac417301a38fb932.md
+++ b/curriculum/challenges/arabic/blocks/information-security-projects/5e46f979ac417301a38fb932.md
@@ -9,9 +9,9 @@ dashedName: port-scanner
# --description--
-ستعمل على هذا المشروع باستخدام شفرة البداية الخاصة بنا من Ona.
+ستعمل على هذا المشروع باستخدام شفرة البداية الخاصة بنا.
-لا نزال نطور الجزء التفاعلي التعليمي من منهج Python. حتى ذلك الحين، إليك بعض الفيديوهات على قناة freeCodeCamp.org على يوتيوب التي ستعلمك كل ما تحتاجه لإكمال هذا المشروع:
+نحن لا نزال نطور الجزء التفاعلي التعليمي من منهج Python. حتى ذلك الحين، إليك بعض الفيديوهات على قناة freeCodeCamp.org على يوتيوب التي ستعلمك كل ما تحتاجه لإكمال هذا المشروع:
- دورة فيديو Python للجميع (14 ساعة)
diff --git a/curriculum/challenges/arabic/blocks/information-security-projects/5e46f983ac417301a38fb933.md b/curriculum/challenges/arabic/blocks/information-security-projects/5e46f983ac417301a38fb933.md
index 7c44e5e1e5c..28640507519 100644
--- a/curriculum/challenges/arabic/blocks/information-security-projects/5e46f983ac417301a38fb933.md
+++ b/curriculum/challenges/arabic/blocks/information-security-projects/5e46f983ac417301a38fb933.md
@@ -9,7 +9,7 @@ dashedName: sha-1-password-cracker
# --description--
-ستعمل على هذا المشروع باستخدام قالب جاهز Ona الخاص بنا.
+ستعمل على هذا المشروع باستخدام قالبنا الجاهز للبدء.
نحن لا نزال نطور الجزء التفاعلي التعليمي من منهج Python. حتى ذلك الحين، إليك بعض الفيديوهات على قناة freeCodeCamp.org على يوتيوب التي ستعلمك كل ما تحتاجه لإكمال هذا المشروع:
@@ -45,17 +45,17 @@ dashedName: sha-1-password-cracker
تم استيراد مكتبة `hashlib` لك. يجب أن تفكر في استخدامها في شفرتك. تعرف على المزيد عن "hashlib" هنا.
-## تطوير
+## التطوير
اكتب شفرتك في `password_cracker.py`. للتطوير، يمكنك استخدام `main.py` لاختبار شفرتك.
-## اختبار
+## الاختبار
اختبارات الوحدة لهذا المشروع موجودة في `test_module.py`. استوردنا الاختبارات من `test_module.py` إلى `main.py` لملاءمتك.
## الإرسال
-انسخ رابط مشروعك وأرسله إلى freeCodeCamp.
+انسخ عنوان URL الخاص بمشروعك وأرسله إلى freeCodeCamp.
# --hints--
diff --git a/curriculum/challenges/arabic/blocks/lab-availability-table/66b36358ed4f261d64840c24.md b/curriculum/challenges/arabic/blocks/lab-availability-table/66b36358ed4f261d64840c24.md
index 81b93d17015..206d6a542e5 100644
--- a/curriculum/challenges/arabic/blocks/lab-availability-table/66b36358ed4f261d64840c24.md
+++ b/curriculum/challenges/arabic/blocks/lab-availability-table/66b36358ed4f261d64840c24.md
@@ -12,18 +12,18 @@ demoType: onClick
**قصص المستخدم:**
-1. يجب أن يحتوي جدولك على ثلاثة أعمدة على الأقل وخمسة صفوف، بما في ذلك الأقسام العلوية.
-1. يجب أن تكون الخلايا في الصف الأول أقسامًا علوية للجدول تحتوي على أيام الأسبوع.
-1. يجب أن تكون الخلايا في العمود الأول أقسامًا علوية للجدول مع `class` باسم `time` ويجب أن تحتوي على قيم الوقت كنص.
-1. يجب أن تحتوي جميع خلايا البيانات على `class` باسم `available-#`، حيث `#` رقم من `0` إلى `5` يحدد عدد الأشخاص المتاحين في ذلك الوقت.
-1. يجب أن يحتوي جدولك على عنصر `caption` بالنص `Weekly Meeting Availability Schedule`.
-1. يجب أن تحتوي جميع خلايا القسم العلوي في الصف الأول (أيام الأسبوع) على خاصية `scope` بقيمة `col`.
-1. يجب أن تحتوي جميع خلايا القسم العلوي في العمود الأول (خلايا الوقت) على خاصية `scope` بقيمة `row`.
-1. يجب أن تحتوي جميع خلايا البيانات التي تحمل صنف التوفر على خاصية `aria-label` تصف مستوى التوفر (مثلًا، `0 available` لخلايا `available-0`، و`1 available` لخلايا `available-1`، وهكذا، و`5+ available` لخلايا `available-5`).
-1. في محدد `:root`، يجب تعريف ستة متغيرات CSS باسم `--color#`، حيث `#` رقم من `0` إلى `5`، وتعيين قيمة لون لكل منها. استخدم هذه المتغيرات لتعيين لون الخلفية لعناصر `.available-#` المقابلة.
-1. في محدد `:root`، يجب تعريف متغيرات CSS باسم `--solid-border` و`--dashed-border`. استخدم هذه المتغيرات لتنسيق حدود الأسفل لخلايا البيانات، بالتناوب بين حدود صلبة وحدود متقطعة حسب الصف. امنح الصفوف صنفًا إما `sharp` أو `half` لتنسيقها.
-1. يجب أن يحتوي المستند على عنصر `div` بالمعرف `id` باسم `legend`. يجب أن يحتوي على عنصر `span` بالنص `Availability` وعنصر `div` بالمعرف `id` باسم `legend-gradient`.
-1. يجب أن تعطي عنصر `#legend-gradient` تدرجًا خطيًا ينتقل بين جميع الألوان من `--color0` إلى `--color5` بخطوط حادة.
+1. يجب أن يحتوي جدولك على ثلاثة أعمدة وخمسة صفوف على الأقل، بما في ذلك صفوف الرؤوس.
+1. يجب أن يحتوي الصف الأول على خلايا رؤوس جدول تتضمن أيام الأسبوع.
+1. يجب أن يحتوي العمود الأول على خلايا رؤوس جدول تحمل `class` باسم `time` وتتضمن قيم الوقت كنص لها.
+1. يجب أن تحمل جميع خلايا البيانات `class` باسم `available-#`، حيث `#` رقم من `0` إلى `5` يحدد عدد الأشخاص المتاحين في ذلك الوقت.
+1. يجب أن يحتوي جدولك على عنصر `caption` يحمل النص `Weekly Meeting Availability Schedule`.
+1. يجب أن تحمل جميع خلايا رؤوس الجدول في الصف الأول (أيام الأسبوع) خاصية `scope` بالقيمة `col`.
+1. يجب أن تحمل جميع خلايا رؤوس الجدول في العمود الأول (خلايا الوقت) خاصية `scope` بالقيمة `row`.
+1. يجب أن تحمل جميع خلايا البيانات التي تحمل صنف التوفر خاصية `aria-label` تصف مستوى التوفر (مثلًا `0 available` لخلايا `available-0`، و `1 available` لخلايا `available-1`، وهكذا، و `5+ available` لخلايا `available-5`).
+1. في محدد `:root`، يجب تعريف ستة متغيرات CSS بأسماء `--color#`، حيث `#` رقم من `0` إلى `5`، مع إسناد قيمة لون لكل منها. استخدم هذه المتغيرات لتعيين لون خلفية عناصر `.available-#` المقابلة.
+1. في محدد `:root`، يجب تعريف متغيري CSS بالاسمين `--solid-border` و `--dashed-border`. استخدم هذين المتغيرين لتنسيق الحدود السفلية لخلايا البيانات، بالتناوب بين الحدود الصلبة والمتقطعة حسب الصف. امنح الصفوف إما الصنف `sharp` أو `half` لتنسيقها.
+1. يجب أن يكون لديك عنصر `div` يحمل `id` بقيمة `legend`. ويجب أن يحتوي على عنصر `span` يحمل النص `Availability` وعنصر `div` يحمل `id` بقيمة `legend-gradient`.
+1. يجب أن تمنح عنصر `#legend-gradient` تدرجًا لونيًا خطيًا ينتقل بين جميع الألوان من `--color0` إلى `--color5` بخطوط حادة.
**ملاحظة:** تأكد من ربط ورقة الأنماط الخاصة بك في ملف HTML لتطبيق CSS.
@@ -389,7 +389,7 @@ headers.forEach(header => {
يجب أن تحتوي جميع خلايا القسم العلوي في العمود الأول على خاصية `scope` بقيمة `row`.
```js
-const timeHeaders = [...document.querySelectorAll('tr > th:first-child')];
+const timeHeaders = [...document.querySelectorAll('th.time')];
assert.isNotEmpty(timeHeaders);
timeHeaders.forEach(header => {
assert.equal(header.getAttribute('scope'), 'row');
diff --git a/curriculum/challenges/arabic/blocks/lab-cargo-manifest-validator/69a56b5069ca99f7317e6e19.md b/curriculum/challenges/arabic/blocks/lab-cargo-manifest-validator/69a56b5069ca99f7317e6e19.md
index bff8b4c306c..dd36ea4cbf9 100644
--- a/curriculum/challenges/arabic/blocks/lab-cargo-manifest-validator/69a56b5069ca99f7317e6e19.md
+++ b/curriculum/challenges/arabic/blocks/lab-cargo-manifest-validator/69a56b5069ca99f7317e6e19.md
@@ -12,9 +12,9 @@ dashedName: lab-cargo-manifest-validator
سيُمثَّل كل بيان شحن ككائن يحتوي على الخصائص التالية:
- `containerId`: عدد صحيح موجب يحدد حاوية الشحن المرتبطة.
-- `destination`: سلسلة نصية غير فارغة (بعد إزالة الفراغات) تشير إلى وجهة الشحن المستهدفة.
+- `destination`: سلسلة نصية غير فارغة (بعد إزالة الفراغات) تحدد وجهة الشحن.
- `weight`: عدد موجب يمثل وزن الشحنة.
-- `unit`: سلسلة نصية تصف وحدات خاصية الوزن (إما `"kg"` للكيلوغرامات أو `"lb"` للرطل).
+- `unit`: سلسلة نصية تصف وحدة خاصية `weight` للشحنة (إما `"kg"` للكيلوجرام أو `"lb"` للرطل).
- `hazmat`: قيمة منطقية تشير إلى ما إذا كانت هناك حاجة للتعامل مع مواد خطرة.
مثال على كائن بيان شحن:
@@ -34,13 +34,13 @@ dashedName: lab-cargo-manifest-validator
**قصص المستخدم:**
1. يجب تنفيذ دالة باسم `normalizeUnits` بمعلمة `manifest`.
- - يجب ألا تُغيّر الدالة كائن الـ manifest الأصلي ويجب أن تُعيد دائمًا كائنًا جديدًا حيث يُطبع `weight` إلى الكيلوغرامات وتُضبط الخاصية `unit` على القيمة `"kg"`.
- - إذا كان وزن كائن الـ manifest معبرًا عنه بالرطل (`unit: "lb"`)، يجب على الدالة تحويل `weight` إلى الكيلوغرامات باستخدام التحويل التقريبي 1 رطل = 0.45 كجم، وتحديث الخاصية `unit` وفقًا لذلك.
- - إذا كان الوزن معبرًا عنه بالفعل بالكيلوغرامات (`unit: "kg"`)، يجب أن تبقى الخاصيتان `weight` و `unit` دون تغيير.
+ - يجب ألا تُعدل الدالة كائن manifest الأصلي، ويجب أن تُعيد دائمًا كائنًا جديدًا حيث يتم تطبيع `weight` إلى الكيلوغرامات وتعيين `unit` إلى `"kg"`.
+ - إذا كان `weight` في كائن manifest معبرًا عنه بالرطل (`unit: "lb"`)، يجب على الدالة تحويل `weight` إلى الكيلوغرامات باستخدام التحويل التقريبي `1 lb = 0.45 kg`، وتحديث `unit` وفقًا لذلك.
+ - إذا كان `weight` معبرًا عنه بالفعل بالكيلوغرام (`unit: "kg"`)، يجب أن يبقى كل من `weight` و`unit` دون تغيير.
2. يجب تنفيذ دالة باسم `validateManifest` بمعلمة `manifest`.
- - يجب ألا تُغيّر الدالة كائن الـ manifest الأصلي ويجب أن تُعيد دائمًا كائنًا جديدًا.
- - إذا كان الـ manifest المُدخل صالحًا (لا توجد خصائص مفقودة أو غير صالحة)، يجب أن تُعيد الدالة كائنًا فارغًا.
- - إذا لم يكن الـ manifest المُدخل صالحًا، يجب أن تُعيد الدالة كائنًا يحتوي على مدخلات لكل خاصية مفقودة أو غير صالحة. يجب أن تكون قيمة الخصائص المفقودة هي `"Missing"` وقيمة الخصائص غير الصالحة هي `"Invalid"`.
+ - يجب ألا تُعدل الدالة كائن manifest الأصلي، ويجب أن تُعيد دائمًا كائنًا جديدًا.
+ - إذا كان manifest المُدخل صحيحًا (لا توجد خصائص مفقودة أو غير صالحة)، يجب أن تُعيد الدالة كائنًا فارغًا.
+ - إذا لم يكن manifest المُدخل صحيحًا، يجب أن تُعيد الدالة كائنًا يحتوي على مدخلات لكل خاصية مفقودة أو غير صالحة. يجب أن تكون قيمة الخصائص المفقودة `"Missing"` وقيمة الخصائص غير الصالحة `"Invalid"`.
مثال لقيمة الإرجاع عندما يكون كائن الإدخال مفقودًا خاصية `destination` ولديه خاصية `weight` غير صالحة:
@@ -51,12 +51,13 @@ dashedName: lab-cargo-manifest-validator
}
```
-3. يجب أن تنفذ دالة باسم `processManifest` بمعلمة `manifest`. يجب أن تسجل:
- - إذا كان كائن البيان صالحًا، `Validation success: ${containerId}` ثم وزن البيان بالكيلوغرامات على النحو التالي، `Total weight: ${weight} kg`. استخدم `normalizeUnits()` لهذا التحويل.
- - إذا لم يكن كائن البيان صالحًا، `Validation error: ${containerId}` ثم الكائن الذي تُرجعه الدالة `validateManifest()` عند استدعائها مع كائن البيان.
- **ملاحظة:** يجب أن يكون لكل من هذين الحالتين استدعاءان لـ `console.log()`.
+3. يجب تنفيذ دالة باسم `processManifest` بمعلمة `manifest`. يجب أن تسجل الدالة:
+ - إذا كان كائن manifest صحيحًا، فسجّل `Validation success: ${containerId}` ثم قيمة `weight` للـ manifest بالكيلوغرامات، بالصيغة `Total weight: ${weight} kg`. استخدم `normalizeUnits()` لهذا التحويل.
+ - إذا لم يكن كائن manifest صحيحًا، فسجّل `Validation error: ${containerId}` ثم الكائن الذي تُعيده `validateManifest()` عند استدعائها بكائن manifest.
-**ملاحظة:** لا يجب إعلان `normalizeUnits` أو `validateManifest` أو `processManifest` باستخدام `const`، لأن الاختبارات تحتاج إلى إعادة تعيينها.
+**ملاحظة:** يجب أن يحتوي كل من هذين الحالتين على استدعائين لـ `console.log()`.
+
+**ملاحظة:** لا تعلن عن `normalizeUnits` أو `validateManifest` أو `processManifest` باستخدام `const`، لأن الاختبارات تحتاج إلى إعادة تعيينها.
# --before-each--
@@ -120,7 +121,7 @@ console.log = () => {};
# --hints--
-لا يجب إعلان `normalizeUnits` أو `validateManifest` أو `processManifest` باستخدام `const`، لأن الاختبارات تحتاج إلى إعادة تعيينها.
+يجب ألا تعلن عن `normalizeUnits` أو `validateManifest` أو `processManifest` باستخدام `const`، لأن الاختبارات تحتاج إلى إعادة تعيينها.
```js
assert.doesNotThrow(() => {
@@ -140,12 +141,12 @@ assert.equal(params.length, 1);
assert.equal(params[0].toString(), 'manifest');
```
-استدعاء `normalizeUnits()` مع `{ containerId: 68, destination: "Salinas", weight: 101, unit: "lb", hazmat: true }` يجب أن يُرجع الكائن الجديد `{ containerId: 68, destination: "Salinas", weight: 45.45, unit: "kg", hazmat: true }` دون تغيير الإدخال الأصلي.
+يجب أن تُرجع دالة `normalizeUnits` الكائن الجديد `{ containerId: 68, destination: "Salinas", weight: 45.45, unit: "kg", hazmat: true }` عند استدعائها مع `{ containerId: 68, destination: "Salinas", weight: 101, unit: "lb", hazmat: true }`، دون تغيير الكائن الأصلي.
```js
const testObj = {
containerId: 68,
- destination: "Salinas",
+ destination: "Salinas",
weight: 101,
unit: "lb",
hazmat: true
@@ -161,7 +162,7 @@ const expected = {
const copy = normalizeUnits(testObj);
assert.isObject(copy);
-assert.deepEqual(copy, expected, "normalizeUnits() did not return the expected normalized object");
+assert.deepEqual(copy, expected, "normalizeUnits() did not return the expected normalized object.");
assert.notStrictEqual(copy, testObj, "normalizeUnits() should return a new object.");
assert.strictEqual(testObj.containerId, 68, "Original object should not be mutated.");
assert.strictEqual(testObj.destination, "Salinas", "Original object should not be mutated.");
@@ -171,13 +172,13 @@ assert.strictEqual(testObj.hazmat, true, "Original object should not be mutated.
assert.equal(Object.keys(testObj).length, 5, "Original object should not be mutated.");
```
-يجب أن تُرجع دالة `normalizeUnits` نسخة من كائن البيان المُدخل مع تطبيع `weight` إلى الكيلوغرامات وضبط `unit` إلى `"kg"`. استخدم التحويل التقريبي `1 lb = 0.45 kg` لتحويل الوزن.
+يجب أن تُعيد دالة `normalizeUnits` نسخة من كائن البيان المدخل مع تطبيع `weight` إلى الكيلوغرامات وتعيين `unit` إلى `"kg"`. استخدم التحويل التقريبي `1 lb = 0.45 kg` لتحويل `weight`.
```js
_validManifests.forEach((obj, i) => {
const result = normalizeUnits(obj);
- assert.isObject(result, "normalizeUnits should return an object");
- assert.notStrictEqual(result, obj, "normalizeUnits must return a new object, not modify the original");
+ assert.isObject(result, "normalizeUnits() should return an object.");
+ assert.notStrictEqual(result, obj, "normalizeUnits() should return a new object, not mutate the original.");
const expectedWeight = obj.unit === "lb" ? obj.weight * 0.45 : obj.weight;
const expected = {
...obj,
@@ -188,12 +189,12 @@ _validManifests.forEach((obj, i) => {
assert.deepEqual(
result,
expected,
- `normalizeUnits did not return the expected normalized object for manifest at index ${i}`
+ `normalizeUnits() did not return the expected normalized object for manifest at index ${i}.`
);
});
```
-يجب أن تُرجع دالة `normalizeUnits` نسخة جديدة من كائن `manifest` المُدخل دون تغيير الأصلي.
+يجب أن تُرجع دالة `normalizeUnits` نسخة جديدة من كائن البيان المدخل دون تغيير الكائن الأصلي.
```js
const original = {
@@ -231,12 +232,12 @@ assert.equal(params.length, 1);
assert.equal(params[0].toString(), 'manifest');
```
-استدعاء `validateManifest()` مع `{ containerId: 1, destination: "Santa Cruz", weight: 304, unit: "kg", hazmat: false }` يجب أن يُرجع الكائن الجديد `{}`.
+يجب أن تُرجع دالة `validateManifest` كائنًا جديدًا فارغًا `{}` عند استدعائها مع `{ containerId: 1, destination: "Santa Cruz", weight: 304, unit: "kg", hazmat: false }`.
```js
const testObj = {
containerId: 1,
- destination: "Santa Cruz",
+ destination: "Santa Cruz",
weight: 304,
unit: "kg",
hazmat: false
@@ -246,16 +247,16 @@ const expected = {};
const copy = validateManifest(testObj);
assert.isObject(copy);
-assert.deepEqual(copy, expected, "validateManifest() did not return the expected object for a valid manifest");
-assert.notStrictEqual(copy, testObj, "validateManifest() should return a new object, not mutate the original");
-assert.strictEqual(testObj.containerId, 1, "Original object should not be mutated");
-assert.strictEqual(testObj.destination, "Santa Cruz", "Original object should not be mutated");
-assert.strictEqual(testObj.weight, 304, "Original object should not be mutated");
-assert.strictEqual(testObj.unit, "kg", "Original object should not be mutated");
-assert.strictEqual(testObj.hazmat, false, "Original object should not be mutated");
+assert.deepEqual(copy, expected, "validateManifest() did not return the expected object for a valid manifest.");
+assert.notStrictEqual(copy, testObj, "validateManifest() should return a new object, not mutate the original.");
+assert.strictEqual(testObj.containerId, 1, "Original object should not be mutated.");
+assert.strictEqual(testObj.destination, "Santa Cruz", "Original object should not be mutated.");
+assert.strictEqual(testObj.weight, 304, "Original object should not be mutated.");
+assert.strictEqual(testObj.unit, "kg", "Original object should not be mutated.");
+assert.strictEqual(testObj.hazmat, false, "Original object should not be mutated.");
```
-إذا كان كائن البيان المُدخل صالحًا، يجب أن تُرجع دالة `validateManifest` كائنًا فارغًا `{}`.
+يجب أن تُرجع دالة `validateManifest` كائنًا فارغًا `{}` إذا كان كائن البيان المدخل صالحًا.
```js
const solution = {};
@@ -268,7 +269,7 @@ for (const obj of _validManifests) {
}
```
-استدعاء `validateManifest()` مع `{}` يجب أن يُرجع الكائن الجديد `{ containerId: "Missing", destination: "Missing", weight: "Missing", unit: "Missing", hazmat: "Missing" }` دون تغيير الإدخال الأصلي.
+يجب أن تُرجع دالة `validateManifest` الكائن الجديد `{ containerId: "Missing", destination: "Missing", weight: "Missing", unit: "Missing", hazmat: "Missing" }` عند استدعائها مع `{}`، دون تغيير الكائن الأصلي.
```js
const testObj = {};
@@ -283,12 +284,12 @@ const expected = {
const copy = validateManifest(testObj);
assert.isObject(copy);
-assert.deepEqual(copy, expected, "validateManifest() did not return the expected object for missing properties");
-assert.notStrictEqual(copy, testObj, "validateManifest() should return a new object, not mutate the original");
-assert.equal(Object.keys(testObj).length, 0, "validateManifest() should return a new object, not mutate the original");
+assert.deepEqual(copy, expected, "validateManifest() did not return the expected object for missing properties.");
+assert.notStrictEqual(copy, testObj, "validateManifest() should return a new object, not mutate the original.");
+assert.equal(Object.keys(testObj).length, 0, "validateManifest() should return a new object, not mutate the original.");
```
-استدعاء `validateManifest()` مع `{ containerId: null, destination: "Santa Cruz", weight: 304, unit: "kg", hazmat: false }` يجب أن يُرجع الكائن الجديد `{ containerId: "Invalid" }` دون تغيير الإدخال الأصلي.
+يجب أن تُرجع دالة `validateManifest` الكائن الجديد `{ containerId: "Invalid" }` عند استدعائها مع `{ containerId: null, destination: "Santa Cruz", weight: 304, unit: "kg", hazmat: false }`، دون تغيير الكائن الأصلي.
```js
const testObj = {
@@ -305,11 +306,11 @@ const expected = {
const copy = validateManifest(testObj);
assert.isObject(copy);
-assert.deepEqual(copy, expected, "validateManifest() did not return the expected object for null containerId");
-assert.notStrictEqual(copy, testObj, "validateManifest() should return a new object, not mutate the original");
+assert.deepEqual(copy, expected, "validateManifest() did not return the expected object for null containerId.");
+assert.notStrictEqual(copy, testObj, "validateManifest() should return a new object, not mutate the original.");
```
-استدعاء `validateManifest()` مع `{ containerId: 0, destination: 405, weight: -84, unit: "pounds", hazmat: "no" }` يجب أن يُرجع الكائن الجديد `{ containerId: "Invalid", destination: "Invalid", weight: "Invalid", unit: "Invalid", hazmat: "Invalid" }` دون تغيير الإدخال الأصلي.
+يجب أن تُرجع دالة `validateManifest` الكائن الجديد `{ containerId: "Invalid", destination: "Invalid", weight: "Invalid", unit: "Invalid", hazmat: "Invalid" }` عند استدعائها مع `{ containerId: 0, destination: 405, weight: -84, unit: "pounds", hazmat: "no" }`، دون تغيير الكائن الأصلي.
```js
const testObj = {
@@ -330,16 +331,16 @@ const expected = {
const copy = validateManifest(testObj);
assert.isObject(copy);
-assert.deepEqual(copy, expected, "validateManifest() did not return the expected object for invalid properties");
-assert.notStrictEqual(copy, testObj, "validateManifest() should return a new object, not mutate the original");
-assert.strictEqual(testObj.containerId, 0, "Original object should not be mutated");
-assert.strictEqual(testObj.destination, 405, "Original object should not be mutated");
-assert.strictEqual(testObj.weight, -84, "Original object should not be mutated");
-assert.strictEqual(testObj.unit, "pounds", "Original object should not be mutated");
-assert.strictEqual(testObj.hazmat, "no", "Original object should not be mutated");
+assert.deepEqual(copy, expected, "validateManifest() did not return the expected object for invalid properties.");
+assert.notStrictEqual(copy, testObj, "validateManifest() should return a new object, not mutate the original.");
+assert.strictEqual(testObj.containerId, 0, "Original object should not be mutated.");
+assert.strictEqual(testObj.destination, 405, "Original object should not be mutated.");
+assert.strictEqual(testObj.weight, -84, "Original object should not be mutated.");
+assert.strictEqual(testObj.unit, "pounds", "Original object should not be mutated.");
+assert.strictEqual(testObj.hazmat, "no", "Original object should not be mutated.");
```
-استدعاء `validateManifest()` مع `{ containerId: -2 }` يجب أن يُرجع الكائن الجديد `{ containerId: "Invalid", destination: "Missing", weight: "Missing", unit: "Missing", hazmat: "Missing" }` دون تغيير الإدخال الأصلي.
+يجب أن تُرجع دالة `validateManifest` الكائن الجديد `{ containerId: "Invalid", destination: "Missing", weight: "Missing", unit: "Missing", hazmat: "Missing" }` عند استدعائها مع `{ containerId: -2 }`، دون تغيير الكائن الأصلي.
```js
const testObj = {
@@ -356,13 +357,13 @@ const expected = {
const copy = validateManifest(testObj);
assert.isObject(copy);
-assert.deepEqual(copy, expected, "validateManifest() did not return the expected object for invalid and missing properties");
-assert.notStrictEqual(copy, testObj, "validateManifest() should return a new object, not mutate the original");
-assert.strictEqual(testObj.containerId, -2, "Original object should not be mutated");
-assert.equal(Object.keys(testObj).length, 1, "Original object should not be mutated");
+assert.deepEqual(copy, expected, "validateManifest() did not return the expected object for invalid and missing properties.");
+assert.notStrictEqual(copy, testObj, "validateManifest() should return a new object, not mutate the original.");
+assert.strictEqual(testObj.containerId, -2, "Original object should not be mutated.");
+assert.equal(Object.keys(testObj).length, 1, "Original object should not be mutated.");
```
-استدعاء `validateManifest()` مع `{ containerId: 3.50 }` يجب أن يُرجع الكائن الجديد `{ containerId: "Invalid", destination: "Missing", weight: "Missing", unit: "Missing", hazmat: "Missing" }` دون تغيير الإدخال الأصلي. يمكنك استخدام `Number.isInteger()` للتحقق من القيم الصحيحة.
+يجب أن تُرجع دالة `validateManifest` الكائن الجديد `{ containerId: "Invalid", destination: "Missing", weight: "Missing", unit: "Missing", hazmat: "Missing" }` عند استدعائها مع `{ containerId: 3.50 }`، دون تغيير الكائن الأصلي. يمكنك استخدام `Number.isInteger()` للتحقق من القيم الصحيحة.
```js
const testObj = {
@@ -379,13 +380,13 @@ const expected = {
const copy = validateManifest(testObj);
assert.isObject(copy);
-assert.deepEqual(copy, expected, "validateManifest() did not return the expected object for invalid and missing properties");
-assert.notStrictEqual(copy, testObj, "validateManifest() should return a new object, not mutate the original");
-assert.strictEqual(testObj.containerId, 3.50, "Original object should not be mutated");
-assert.equal(Object.keys(testObj).length, 1, "Original object should not be mutated");
+assert.deepEqual(copy, expected, "validateManifest() did not return the expected object for invalid and missing properties.");
+assert.notStrictEqual(copy, testObj, "validateManifest() should return a new object, not mutate the original.");
+assert.strictEqual(testObj.containerId, 3.50, "Original object should not be mutated.");
+assert.equal(Object.keys(testObj).length, 1, "Original object should not be mutated.");
```
-استدعاء `validateManifest()` مع `{ destination: " " }` يجب أن يُرجع الكائن الجديد `{ containerId: "Missing", destination: "Invalid", weight: "Missing", unit: "Missing", hazmat: "Missing" }` دون تغيير الإدخال الأصلي. يمكنك استخدام `String.trim()` لإزالة الفراغات من السلسلة النصية.
+يجب أن تُرجع دالة `validateManifest` الكائن الجديد `{ containerId: "Missing", destination: "Invalid", weight: "Missing", unit: "Missing", hazmat: "Missing" }` عند استدعائها مع `{ destination: " " }`، دون تغيير الكائن الأصلي. يمكنك استخدام `.trim()` لإزالة الفراغات من السلسلة النصية.
```js
const testObj = {
@@ -402,13 +403,13 @@ const expected = {
const copy = validateManifest(testObj);
assert.isObject(copy);
-assert.deepEqual(copy, expected, "validateManifest() did not return the expected object for invalid and missing properties");
-assert.notStrictEqual(copy, testObj, "validateManifest() should return a new object, not mutate the original");
-assert.strictEqual(testObj.destination, " ", "Original object should not be mutated");
-assert.equal(Object.keys(testObj).length, 1, "Original object should not be mutated");
+assert.deepEqual(copy, expected, "validateManifest() did not return the expected object for invalid and missing properties.");
+assert.notStrictEqual(copy, testObj, "validateManifest() should return a new object, not mutate the original.");
+assert.strictEqual(testObj.destination, " ", "Original object should not be mutated.");
+assert.equal(Object.keys(testObj).length, 1, "Original object should not be mutated.");
```
-استدعاء `validateManifest()` مع `{ weight: NaN }` يجب أن يُرجع الكائن الجديد `{ containerId: "Missing", destination: "Missing", weight: "Invalid", unit: "Missing", hazmat: "Missing" }` دون تغيير الإدخال الأصلي. يمكنك استخدام `Number.isNaN()` للتحقق من قيم NaN.
+يجب أن تُرجع دالة `validateManifest` الكائن الجديد `{ containerId: "Missing", destination: "Missing", weight: "Invalid", unit: "Missing", hazmat: "Missing" }` عند استدعائها مع `{ weight: NaN }`، دون تغيير الكائن الأصلي. يمكنك استخدام `Number.isNaN()` للتحقق من قيم `NaN`.
```js
const testObj = {
@@ -425,13 +426,13 @@ const expected = {
const copy = validateManifest(testObj);
assert.isObject(copy);
-assert.deepEqual(copy, expected, "validateManifest() did not return the expected object for invalid and missing properties");
-assert.notStrictEqual(copy, testObj, "validateManifest() should return a new object, not mutate the original");
-assert.ok(Number.isNaN(testObj.weight), "Original object should not be mutated");
-assert.equal(Object.keys(testObj).length, 1, "Original object should not be mutated");
+assert.deepEqual(copy, expected, "validateManifest() did not return the expected object for invalid and missing properties.");
+assert.notStrictEqual(copy, testObj, "validateManifest() should return a new object, not mutate the original.");
+assert.ok(Number.isNaN(testObj.weight), "Original object should not be mutated.");
+assert.equal(Object.keys(testObj).length, 1, "Original object should not be mutated.");
```
-إذا لم يكن كائن البيان المُدخل صالحًا، يجب أن تُرجع دالة `validateManifest` كائنًا يصف الخصائص المفقودة و/أو غير الصالحة.
+يجب أن تُرجع دالة `validateManifest` كائنًا يصف الخصائص المفقودة و/أو غير الصالحة إذا لم يكن كائن البيان المدخل صالحًا.
```js
const solutions = [
@@ -504,7 +505,7 @@ assert.equal(params.length, 1);
assert.equal(params[0].toString(), 'manifest');
```
-استدعاء `processManifest()` مع `{ containerId: 55, destination: "Carmel", weight: 400, unit: "lb", hazmat: false }` يجب أن يسجل أولاً `"Validation success: 55"` ثم يسجل `"Total weight: 180 kg"`.
+يجب أن تسجل دالة `processManifest` أولًا `Validation success: 55` ثم تسجل `Total weight: 180 kg` عند استدعائها مع `{ containerId: 55, destination: "Carmel", weight: 400, unit: "lb", hazmat: false }`.
```js
const testObj = {
@@ -524,8 +525,8 @@ try {
["Validation success: 55"],
["Total weight: 180 kg"]
];
- assert.deepEqual(spy.calls[0], expectedCalls[0], "First log should be the validation success message");
- assert.deepEqual(spy.calls[1], expectedCalls[1], "Second log should be the normalized weight in kg");
+ assert.deepEqual(spy.calls[0], expectedCalls[0], "First log should be the validation success message.");
+ assert.deepEqual(spy.calls[1], expectedCalls[1], "Second log should be the normalized weight in kg.");
} catch (err) {
assert.fail(err);
@@ -534,7 +535,7 @@ try {
}
```
-إذا كان كائن البيان المُدخل صالحًا، يجب أن تسجل دالة `processManifest` أولًا رسالة النجاح، `Validation success: ${containerId}`.
+يجب أن تسجل دالة `processManifest` أولًا رسالة النجاح، `Validation success: ${containerId}`، إذا كان كائن البيان المدخل صالحًا.
```js
const testObj = {
@@ -562,7 +563,7 @@ try {
}
```
-إذا كان كائن البيان المُدخل صالحًا، يجب أن تطبعه دالة `processManifest` إلى الكيلوغرامات باستخدام `normalizeUnits()` ثم تسجل: `Total weight: ${weight} kg`.
+يجب أن تطبع دالة `processManifest` كائن البيان المدخل الصالح بعد تطبيعه إلى الكيلوجرام باستخدام `normalizeUnits()` ثم تسجل `Total weight: ${weight} kg`.
```js
const testObj = {
@@ -590,7 +591,7 @@ try {
}
```
-إذا كان كائن بيان الشحنة المُدخل صحيحًا، يجب أن تقوم دالة `processManifest` بطباعة رسالة نجاح تتضمن قيمة `containerId` للكائن، ثم طباعة قيمة `weight` للكائن بالكيلوغرام. استخدم `normalizeUnits()` للتحويل، ويجب أن يكون هناك استدعاءان لـ `console.log()`.
+يجب أن تقوم دالة `processManifest` بطباعة رسالة نجاح تحتوي على `containerId` للكائن، ثم تطبع قيمة `weight` للكائن بالكيلوغرام إذا كان كائن البيان صالحًا. استخدم `normalizeUnits()` للتحويل، ويجب أن يتضمن ذلك استدعاءين لـ `console.log()`.
```js
const originalNormalize = normalizeUnits;
@@ -605,7 +606,7 @@ try {
assert.isTrue(
called,
- "processManifest should call normalizeUnits() when the manifest is valid"
+ "processManifest() should call normalizeUnits() when the manifest is valid."
);
} catch (err) {
@@ -635,7 +636,7 @@ try {
}
```
-استدعاء `processManifest()` مع `{ containerId: -88, destination: "Soledad", weight: NaN }` يجب أن يسجل أولًا `Validation error: -88` ثم يسجل الكائن `{ containerId: "Invalid", weight: "Invalid", unit: "Missing", hazmat: "Missing" }`.
+يجب أن تسجل دالة `processManifest` أولًا `Validation error: -88` ثم تسجل الكائن `{ containerId: "Invalid", weight: "Invalid", unit: "Missing", hazmat: "Missing" }` عند استدعائها مع `{ containerId: -88, destination: "Soledad", weight: NaN }`.
```js
const testObj = {
@@ -658,8 +659,8 @@ try {
}]
];
- assert.deepEqual(spy.calls[0], expectedCalls[0], "First log should be the validation error message");
- assert.deepEqual(spy.calls[1], expectedCalls[1], "Second log should be the validation result object");
+ assert.deepEqual(spy.calls[0], expectedCalls[0], "First log should be the validation error message.");
+ assert.deepEqual(spy.calls[1], expectedCalls[1], "Second log should be the validation result object.");
} catch (err) {
assert.fail(err);
@@ -668,7 +669,7 @@ try {
}
```
-استدعاء `processManifest()` مع `{ destination: "Watsonville", hazmat: true }` يجب أن يسجل أولًا `Validation error: undefined` ثم يسجل الكائن `{ containerId: "Missing", weight: "Missing", unit: "Missing" }`.
+يجب أن تسجل دالة `processManifest` أولًا `Validation error: undefined` ثم تسجل الكائن `{ containerId: "Missing", weight: "Missing", unit: "Missing" }` عند استدعائها مع `{ destination: "Watsonville", hazmat: true }`.
```js
const testObj = {
@@ -689,8 +690,8 @@ try {
}]
];
- assert.deepEqual(spy.calls[0], expectedCalls[0], "First log should be the validation error message");
- assert.deepEqual(spy.calls[1], expectedCalls[1], "Second log should be the validation result object");
+ assert.deepEqual(spy.calls[0], expectedCalls[0], "First log should be the validation error message.");
+ assert.deepEqual(spy.calls[1], expectedCalls[1], "Second log should be the validation result object.");
} catch (err) {
assert.fail(err);
@@ -699,7 +700,7 @@ try {
}
```
-إذا لم يكن كائن البيان المُدخل صالحًا، يجب أن تسجل دالة `processManifest` أولًا رسالة الخطأ، `Validation error: ${containerId}`.
+يجب أن تسجل دالة `processManifest` أولًا رسالة الخطأ، `Validation error: ${containerId}`، إذا لم يكن كائن البيان المدخل صالحًا.
```js
const spy = __helpers.spyOn(console, "log");
@@ -718,13 +719,13 @@ try {
assert.deepEqual(spy.calls[0], expectedCalls[0]);
} catch (err) {
- assert.fail(err);
+ assert.fail(err);
} finally {
spy.restore();
}
```
-إذا لم يكن كائن البيان المُدخل صالحًا، يجب أن تسجل دالة `processManifest` أيضًا الكائن الذي تُرجعه دالة `validateManifest()` عند استدعائها مع كائن البيان الأصلي. استدعِ `console.log()` مباشرة مع الكائن المُرجع.
+يجب أن تسجل دالة `processManifest` أيضًا الكائن الذي تُرجعه الدالة `validateManifest()` عند استدعائها مع كائن البيان الأصلي إذا لم يكن كائن البيان المدخل صالحًا. استدعِ `console.log()` مباشرة مع الكائن المُرجع.
```js
const originalValidate = validateManifest;
@@ -740,7 +741,7 @@ try {
assert.isTrue(
called,
- "processManifest should call validateManifest() when the manifest is invalid"
+ "processManifest() should call validateManifest() when the manifest is invalid."
);
} catch (err) {
@@ -765,13 +766,13 @@ try {
assert.deepEqual(spy.calls[1], expectedCalls[1]);
} catch (err) {
- assert.fail(err);
+ assert.fail(err);
} finally {
spy.restore();
}
```
-إذا لم يكن كائن البيان المُدخل صالحًا، يجب أن تسجل دالة `processManifest` رسالة خطأ مع `containerId` للكائن، ثم تسجل الكائن الذي تُرجعه دالة `validateManifest()` عند استدعائها مع كائن الإدخال. يجب أن يتضمن ذلك استدعاءين لـ `console.log()`.
+يجب أن تسجل دالة `processManifest` رسالة خطأ مع `containerId` للكائن، ثم تسجل الكائن الذي تُرجعه الدالة `validateManifest()` عند استدعائها مع كائن الإدخال، إذا لم يكن كائن البيان المدخل صالحًا. يجب أن يتضمن ذلك استدعائين لـ `console.log()`.
```js
const originalValidate = validateManifest;
@@ -787,7 +788,7 @@ try {
assert.isTrue(
called,
- "processManifest should call validateManifest() when the manifest is invalid"
+ "processManifest() should call validateManifest() when the manifest is invalid."
);
} catch (err) {
@@ -812,7 +813,7 @@ try {
assert.deepEqual(spy.calls, expectedCalls);
} catch (err) {
- assert.fail(err);
+ assert.fail(err);
} finally {
spy.restore();
}
diff --git a/curriculum/challenges/arabic/blocks/lab-digital-pet-game/68c362b379059c388d3874f2.md b/curriculum/challenges/arabic/blocks/lab-digital-pet-game/68c362b379059c388d3874f2.md
index 2aa21b94fe7..21044c39ec4 100644
--- a/curriculum/challenges/arabic/blocks/lab-digital-pet-game/68c362b379059c388d3874f2.md
+++ b/curriculum/challenges/arabic/blocks/lab-digital-pet-game/68c362b379059c388d3874f2.md
@@ -60,6 +60,7 @@ saveSubmissionToDB: true
```js
globalThis._PET_NAME = 'Fitzgerald';
globalThis._clock = __FakeTimers.install();
+window.fetch = () => Promise.resolve({ json: () => Promise.resolve('Cats sleep for around 13 to 16 hours a day.') });
```
# --after-all--
diff --git a/curriculum/challenges/arabic/blocks/lab-fcc-forum-leaderboard/673c91f0b934834bc4a3ecc2.md b/curriculum/challenges/arabic/blocks/lab-fcc-forum-leaderboard/673c91f0b934834bc4a3ecc2.md
index 706144386a7..b5d5391a1bf 100644
--- a/curriculum/challenges/arabic/blocks/lab-fcc-forum-leaderboard/673c91f0b934834bc4a3ecc2.md
+++ b/curriculum/challenges/arabic/blocks/lab-fcc-forum-leaderboard/673c91f0b934834bc4a3ecc2.md
@@ -50,7 +50,7 @@ demoType: onClick
لاحظ أن قيم `avatar_template` هي مسارات نسبية: تبدأ بـ `/` وتحتوي على عنصر نائب `{size}` يجب استبداله بحجم بكسل. الثابت `avatarUrl` يحمل عنوان URL الأساسي للإضافة عند كون المسار نسبيًا.
-**الهدف:** نفذ قصص المستخدم أدناه واجعل جميع الاختبارات تنجح لإكمال المختبر.
+**الهدف:** إكمال قصص المستخدم أدناه واجتياز جميع الاختبارات لإتمام المختبر.
**قصص المستخدم:**
@@ -93,6 +93,68 @@ demoType: onClick
1. يجب أن تطلب دالة `fetchData` البيانات من `forumLatest` وتستدعي `showLatestPosts` مع تمرير الاستجابة بعد تحويلها إلى JSON.
1. إذا حدث خطأ أثناء جلب البيانات، يجب أن تسجل دالة `fetchData` الخطأ في وحدة التحكم. يجب أن تستخدم تحديدًا `console.log` لهذا الغرض.
+# --before-all--
+
+```js
+const _testUsers = [
+ {
+ avatar_template: '/user_avatar/QuincyLarson_{size}.png',
+ id: 6,
+ name: 'Quincy Larson',
+ username: 'QuincyLarson'
+ },
+ {
+ avatar_template: '/user_avatar/jwilkins.oboe_{size}.png',
+ id: 285941,
+ name: 'Jessica Wilkins',
+ username: 'jwilkins.oboe'
+ },
+ {
+ avatar_template: '/user_avatar/ilenia_{size}.png',
+ id: 170865,
+ name: 'Ilenia',
+ username: 'ilenia'
+ }
+];
+
+const _testPosters = [
+ { user_id: 6 },
+ { user_id: 285941 },
+ { user_id: 170865 }
+];
+
+const _testData = {
+ users: _testUsers,
+ topic_list: {
+ topics: [
+ {
+ bumped_at: '2024-04-15T16:01:26.403Z',
+ category_id: 1,
+ id: 684569,
+ posters: [{ user_id: 6 }, { user_id: 170865 }, { user_id: 285941 }],
+ posts_count: 8,
+ slug: 'the-freecodecamp-podcast-is-back-now-with-video',
+ title: 'The freeCodeCamp Podcast is back – now with video',
+ views: 542
+ },
+ {
+ bumped_at: '2024-04-19T13:52:03.523Z',
+ category_id: 421,
+ id: 686149,
+ posters: [{ user_id: 170865 }],
+ posts_count: 1,
+ slug: 'problem-with-making-changes-to-styles-js',
+ title: 'Problem with making changes to styles. (JS)',
+ views: 9
+ }
+ ]
+ }
+};
+
+window.fetch = () =>
+ Promise.resolve({ json: () => Promise.resolve(_testData) });
+```
+
# --hints--
يجب أن يكون لديك دالة باسم `timeAgo` تأخذ معلمة واحدة.
@@ -297,31 +359,8 @@ assert.lengthOf(avatars, 2);
يجب أن تُرجع دالة `avatars` سلسلة نصية تتكون من ربط عناصر `img`، واحدة لكل ملصق موجود في مصفوفة المستخدمين.
```js
-const posters = [{ user_id: 6 }, { user_id: 285941 }, { user_id: 170865 }];
-const users = [
- {
- avatar_template:
- '/user_avatar/QuincyLarson_{size}.png',
- id: 6,
- name: 'Quincy Larson',
- username: 'QuincyLarson'
- },
- {
- avatar_template:
- '/user_avatar/jwilkins.oboe_{size}.png',
- id: 285941,
- name: 'Jessica Wilkins',
- username: 'jwilkins.oboe'
- },
- {
- avatar_template:
- '/user_avatar/ilenia_{size}.png',
- id: 170865,
- name: 'Ilenia',
- username: 'ilenia'
- },
- { id: 20 }
-];
+const posters = _testPosters;
+const users = [..._testUsers, { id: 20 }];
const actual = avatars(posters, users);
const matches = actual.match(/<\s*img\s+.+?>/g);
assert.lengthOf(matches, 3);
@@ -330,31 +369,8 @@ assert.lengthOf(matches, 3);
يجب أن يحتوي كل عنصر `img` في السلسلة التي تُرجعها دالة `avatars` على نص بديل `alt` بقيمة الخاصية `name` للناشر.
```js
-const posters = [{ user_id: 6 }, { user_id: 285941 }, { user_id: 170865 }];
-const users = [
- {
- avatar_template:
- '/user_avatar/QuincyLarson_{size}.png',
- id: 6,
- name: 'Quincy Larson',
- username: 'QuincyLarson'
- },
- {
- avatar_template:
- '/user_avatar/jwilkins.oboe_{size}.png',
- id: 285941,
- name: 'Jessica Wilkins',
- username: 'jwilkins.oboe'
- },
- {
- avatar_template:
- '/user_avatar/ilenia_{size}.png',
- id: 170865,
- name: 'Ilenia',
- username: 'ilenia'
- },
- { id: 20 }
-];
+const posters = _testPosters;
+const users = [..._testUsers, { id: 20 }];
const actual = avatars(posters, users);
const matches = actual.match(/<\s*img\s+.+?>/g);
@@ -366,31 +382,8 @@ assert.match(matches[2], /alt=('|")Ilenia\1/);
يجب أن تضبط دالة `avatars` حجم كل صورة رمزية عبر الوصول إلى خاصية `avatar_template` واستبدال `{size}` بـ `30`.
```js
-const posters = [{ user_id: 6 }, { user_id: 285941 }, { user_id: 170865 }];
-const users = [
- {
- avatar_template:
- '/user_avatar/QuincyLarson_{size}.png',
- id: 6,
- name: 'Quincy Larson',
- username: 'QuincyLarson'
- },
- {
- avatar_template:
- '/user_avatar/jwilkins.oboe_{size}.png',
- id: 285941,
- name: 'Jessica Wilkins',
- username: 'jwilkins.oboe'
- },
- {
- avatar_template:
- '/user_avatar/ilenia_{size}.png',
- id: 170865,
- name: 'Ilenia',
- username: 'ilenia'
- },
- { id: 20 }
-];
+const posters = _testPosters;
+const users = [..._testUsers, { id: 20 }];
const actual = avatars(posters, users);
assert.notMatch(actual, /\{size\}/);
assert.lengthOf(actual.match(/_30/g), 3);
@@ -399,31 +392,8 @@ assert.lengthOf(actual.match(/_30/g), 3);
يجب أن يحتوي كل عنصر `img` على خاصية `src` مضبوطة على `avatar_template` للمستخدم المطابق. إذا بدأ `avatar_template` بـ `/`، أضف `avatarUrl` مباشرة قبله.
```js
-const posters = [{ user_id: 6 }, { user_id: 285941 }, { user_id: 170865 }];
-const users = [
- {
- avatar_template:
- '/user_avatar/QuincyLarson_{size}.png',
- id: 6,
- name: 'Quincy Larson',
- username: 'QuincyLarson'
- },
- {
- avatar_template:
- '/user_avatar/jwilkins.oboe_{size}.png',
- id: 285941,
- name: 'Jessica Wilkins',
- username: 'jwilkins.oboe'
- },
- {
- avatar_template:
- '/user_avatar/ilenia_{size}.png',
- id: 170865,
- name: 'Ilenia',
- username: 'ilenia'
- },
- { id: 20 }
-];
+const posters = _testPosters;
+const users = [..._testUsers, { id: 20 }];
const actual = avatars(posters, users);
const matches = actual.match(/<\s*img\s+.+?>/g);
@@ -458,19 +428,15 @@ assert.isFunction(fetchData);
يجب أن تطلب دالة `fetchData` البيانات من `https://cdn.freecodecamp.org/curriculum/forum-latest/latest.json`.
```js
-const testArr = [];
-const temp = fetch;
+const spy = __helpers.spyOn(window, 'fetch');
try {
- fetch = source => {
- testArr.push(source);
- return temp(source);
- };
fetchData();
- assert.deepEqual(testArr, [
+ assert.include(
+ spy.calls.map(call => call[0]),
'https://cdn.freecodecamp.org/curriculum/forum-latest/latest.json'
- ]);
+ );
} finally {
- fetch = temp;
+ spy.restore();
}
```
@@ -521,55 +487,7 @@ async () => {
يجب أن تضبط دالة `showLatestPosts` المحتوى الداخلي لـ `#posts-container` إلى سلسلة نصية تتكون من ربط عناصر `tr`، واحدة لكل عنصر في `topics`.
```js
-const data = {
- users: [
- {
- avatar_template:
- '/user_avatar/QuincyLarson_{size}.png',
- id: 6,
- name: 'Quincy Larson',
- username: 'QuincyLarson'
- },
- {
- avatar_template:
- '/user_avatar/jwilkins.oboe_{size}.png',
- id: 285941,
- name: 'Jessica Wilkins',
- username: 'jwilkins.oboe'
- },
- {
- avatar_template:
- '/user_avatar/ilenia_{size}.png',
- id: 170865,
- name: 'Ilenia',
- username: 'ilenia'
- }
- ],
- topic_list: {
- topics: [
- {
- bumped_at: '2024-04-15T16:01:26.403Z',
- category_id: 1,
- id: 684569,
- posters: [{ user_id: 6 }, { user_id: 170865 }, { user_id: 285941 }],
- posts_count: 8,
- slug: 'the-freecodecamp-podcast-is-back-now-with-video',
- title: 'The freeCodeCamp Podcast is back – now with video',
- views: 542
- },
- {
- bumped_at: '2024-04-19T13:52:03.523Z',
- category_id: 421,
- id: 686149,
- posters: [{ user_id: 170865 }],
- posts_count: 1,
- slug: 'problem-with-making-changes-to-styles-js',
- title: 'Problem with making changes to styles. (JS)',
- views: 9
- }
- ]
- }
-};
+const data = _testData;
const pContainer = document.getElementById('posts-container');
pContainer.innerHTML = '';
showLatestPosts(data);
@@ -579,55 +497,7 @@ assert.lengthOf(pContainer.querySelectorAll('tr'), 2);
يجب أن يحتوي كل عنصر `tr` من السلسلة التي تُرجعها دالة `showLatestPosts` على 5 عناصر `td`.
```js
-const data = {
- users: [
- {
- avatar_template:
- '/user_avatar/QuincyLarson_{size}.png',
- id: 6,
- name: 'Quincy Larson',
- username: 'QuincyLarson'
- },
- {
- avatar_template:
- '/user_avatar/jwilkins.oboe_{size}.png',
- id: 285941,
- name: 'Jessica Wilkins',
- username: 'jwilkins.oboe'
- },
- {
- avatar_template:
- '/user_avatar/ilenia_{size}.png',
- id: 170865,
- name: 'Ilenia',
- username: 'ilenia'
- }
- ],
- topic_list: {
- topics: [
- {
- bumped_at: '2024-04-15T16:01:26.403Z',
- category_id: 1,
- id: 684569,
- posters: [{ user_id: 6 }, { user_id: 170865 }, { user_id: 285941 }],
- posts_count: 8,
- slug: 'the-freecodecamp-podcast-is-back-now-with-video',
- title: 'The freeCodeCamp Podcast is back – now with video',
- views: 542
- },
- {
- bumped_at: '2024-04-19T13:52:03.523Z',
- category_id: 421,
- id: 686149,
- posters: [{ user_id: 170865 }],
- posts_count: 1,
- slug: 'problem-with-making-changes-to-styles-js',
- title: 'Problem with making changes to styles. (JS)',
- views: 9
- }
- ]
- }
-};
+const data = _testData;
const pContainer = document.getElementById('posts-container');
pContainer.innerHTML = '';
showLatestPosts(data);
@@ -638,55 +508,7 @@ assert.lengthOf(pContainer.querySelectorAll('tr:last-child>td'), 5);
يجب أن يحتوي أول عنصر `td` في كل صف جدول من السلسلة التي تُرجعها دالة `showLatestPosts` على عنصرين وسم رابط، الأول بصنف `post-title`، و`href` مكون من `Red paragraph
+Red paragraph
Other paragraph
Another paragraph
Yet another paragraph
``` ```css -#para { +#para-1 { color: red; } @@ -67,24 +67,33 @@ p { **ملاحظة**: ستتعلم المزيد عن الفئات المزيفة في الدروس القادمة. -في هذا المثال، ستكون الفقرة الأولى باللون الأحمر لأن محدد المعرف له خصوصية أعلى من الصنف ومحددات النوع. عناصر `.example-para` ستكون باللون الأخضر بينما بقية عناصر الفقرة ستكون باللون الأزرق. +في هذا المثال: + +- سيكون الفقرة الأولى باللون الأحمر لأن محدد المعرف له أولوية أعلى من محددات الأصناف ومحددات النوع. +- الفقرة الثانية التي تحتوي على محدد صنف `.example-para` سيكون لونها أخضر. +- الفقرة الثالثة التي تحتوي على كل من محدد معرف `#para-3` ومحدد صنف `.example-para` سيكون لونها بنفسجي. +- العنصر الفقري المتبقي سيكون لونه أزرق. :::interactive_editor ```html -Example paragraph
+Example paragraph
Other paragraph
-Another paragraph
+Another paragraph
Yet another paragraph
``` ```css -#para { +#para-1 { color: red; } +#para-3 { + color: purple; +} + .example-para { color: green; } @@ -105,13 +114,13 @@ p { ```html -Example paragraph
+Example paragraph
Other paragraph
Yet another paragraph
``` ```css -#para { +#para-1 { color: red; } @@ -130,7 +139,7 @@ p { ```html -Example paragraph
+Example paragraph
Other paragraph
Yet another paragraph
``` @@ -140,7 +149,7 @@ p { color: red; } -#para { +#para-1 { color: green; } @@ -330,7 +339,7 @@ p { ### --feedback-- -اعتبر أعلى خصوصية. +ضع في اعتبارك أعلى قيمة خصوصية. --- @@ -338,7 +347,7 @@ p { ### --feedback-- -اعتبر أعلى خصوصية. +ضع في اعتبارك أعلى قيمة خصوصية. --- @@ -346,7 +355,7 @@ p { ### --feedback-- -اعتبر أعلى خصوصية. +ضع في اعتبارك أعلى قيمة خصوصية. ## --video-solution-- diff --git a/curriculum/challenges/arabic/blocks/lecture-express-middleware/69f42d414b7626e21a922794.md b/curriculum/challenges/arabic/blocks/lecture-express-middleware/69f42d414b7626e21a922794.md index 84a8ae20f40..aa06b3be683 100644 --- a/curriculum/challenges/arabic/blocks/lecture-express-middleware/69f42d414b7626e21a922794.md +++ b/curriculum/challenges/arabic/blocks/lecture-express-middleware/69f42d414b7626e21a922794.md @@ -9,9 +9,7 @@ dashedName: what-is-error-handling-middleware برمجيات وسيطة لمعالجة الأخطاء في Express هي نوع خاص من البرمجيات الوسيطة تُستخدم لمعالجة الأخطاء التي تحدث أثناء دورة الطلب والاستجابة. هي ضرورية لالتقاط الأخطاء غير المتوقعة، وتسجيلها، وتوفير استجابات مناسبة للعميل. -كما رأيت في درس سابق تحت معالجة الأخطاء، تحتوي برمجيات وسيطة معالجة الأخطاء في Express على أربع معلمات: `err`، `req`، `res`، و `next`. تُستدعى هذه البرمجيات الوسيطة عندما يُمرر خطأ إلى الدالة `next()`. - -إليك تذكيرًا بصيغة النحو مرة أخرى: +برمجيات Express الوسيطة لمعالجة الأخطاء تحتوي على أربع معلمات: `err`، `req`، `res`، و `next`. تُستدعى هذه البرمجيات الوسيطة عندما يُمرر خطأ إلى الدالة `next()`. هذه هي الصيغة النحوية: ```js app.use((err, req, res, next) => { diff --git a/curriculum/challenges/arabic/blocks/lecture-express-middleware/69f42d414b7626e21a922795.md b/curriculum/challenges/arabic/blocks/lecture-express-middleware/69f42d414b7626e21a922795.md index cdf492bf116..0093ef10bf3 100644 --- a/curriculum/challenges/arabic/blocks/lecture-express-middleware/69f42d414b7626e21a922795.md +++ b/curriculum/challenges/arabic/blocks/lecture-express-middleware/69f42d414b7626e21a922795.md @@ -13,45 +13,45 @@ dashedName: what-are-examples-of-built-in-and-3rd-party-middleware 1. `express.json()`: برمجية وسيطة مدمجة تقوم بتحليل الحمولة الواردة بصيغة JSON. -```js -app.use(express.json()) -``` + ```js + app.use(express.json()) + ``` 1. `express.static()`: برمجية وسيطة لتقديم الملفات الثابتة مثل الصور وملفات CSS وJavaScript. -```js -app.use(express.static('public')) -``` + ```js + app.use(express.static('public')) + ``` 1. `express.urlencoded()`: برمجية وسيطة تحلل الطلبات الواردة التي تحتوي على حمولة مشفرة بصيغة URL، وهو التنسيق الذي ترسله عادة نماذج HTML. تجعل البيانات المحللة متاحة في `req.body`. -```js -app.use(express.urlencoded({ extended: true })) -``` + ```js + app.use(express.urlencoded({ extended: true })) + ``` **والآن، إليك بعض الأمثلة على البرمجيات الوسيطة التابعة لأطراف ثالثة:** 1. `cors`: برمجية وسيطة شهيرة تابعة لأطراف ثالثة لتمكين مشاركة الموارد عبر الأصول المختلفة. -```bash -npm install cors -``` + ```bash + npm install cors + ``` -```js -const cors = require('cors') -app.use(cors()) -``` + ```js + const cors = require('cors') + app.use(cors()) + ``` 1. `morgan`: برمجية وسيطة لتسجيل طلبات HTTP. -```bash -npm install morgan -``` + ```bash + npm install morgan + ``` -```js -const morgan = require('morgan') -app.use(morgan('tiny')) -``` + ```js + const morgan = require('morgan') + app.use(morgan('tiny')) + ``` الآن، لننظر إلى مثال على استخدام كل من البرمجيات الوسيطة المدمجة وتلك التابعة لأطراف ثالثة: diff --git a/curriculum/challenges/arabic/blocks/lecture-importance-of-semantic-html/672990ecf71a852804ababe7.md b/curriculum/challenges/arabic/blocks/lecture-importance-of-semantic-html/672990ecf71a852804ababe7.md index 63e5194a450..606ca6bbe59 100644 --- a/curriculum/challenges/arabic/blocks/lecture-importance-of-semantic-html/672990ecf71a852804ababe7.md +++ b/curriculum/challenges/arabic/blocks/lecture-importance-of-semantic-html/672990ecf71a852804ababe7.md @@ -11,6 +11,10 @@ dashedName: what-is-the-difference-between-presentational-and-semantic-html العديد من عناصر HTML التقديمية أصبحت مهجورة، وهذا يعني أنها قديمة ولم تعد موصى بها. هناك طرق أفضل للحصول على نفس النتائج. مع ذلك، من المفيد معرفة وجودها، لذا سنلقي نظرة على بعض الأمثلة. +## عناصر HTML التقديمية + +### عنصر `font` + عنصر `font` هو عنصر مهجور يُستخدم لتعيين حجم الخط ولون النص. إليك مثالًا على عنصر `font`. فعّل المحرر التفاعلي وغيّر الحجم من 5 إلى 7 لترى زيادة حجم الخط. @@ -27,6 +31,8 @@ dashedName: what-is-the-difference-between-presentational-and-semantic-html رغم أن هذا العنصر لا يزال يعمل، يجب ألا تستخدمه لأن حجم الخط ولونه يجب أن يُحددا دائمًا في CSS، وليس في HTML. +### عنصر `center` + عنصر `center` هو عنصر مهجور آخر يُستخدم لمركزة المحتوى أفقيًا داخل الحاوية الخاصة به. إليك مثالًا على عنصر `center` يحتوي على نص وعنصر فقرة. فعّل المحرر التفاعلي وأضف وسم `center` حول `Another example text.
` لترى النص مركّزًا في الصفحة. @@ -44,6 +50,8 @@ dashedName: what-is-the-difference-between-presentational-and-semantic-html ::: +### عنصر `big` + بعد ذلك، لدينا عنصر `big`. هذا عنصر HTML تقديمي مهجور آخر يجعل النص المحاط به أكبر بمستوى واحد من النص المحيط. هنا مثال يعرّف فقرة تحتوي على جزأين. فعّل المحرر التفاعلي وأضف وسم `big` حول `Some other text` لترى التغييرات في نافذة المعاينة. @@ -64,6 +72,8 @@ dashedName: what-is-the-difference-between-presentational-and-semantic-html كانت هذه أمثلة على عناصر HTML التقديمية. لكنها جميعًا مهجورة ولم تعد موصى بها. فماذا يجب أن تستخدم بدلًا منها؟ لنرَ. +## HTML الدلالي + HTML الدلالي هو الآن الممارسة الموصى بها. يصف محتوى العناصر، لذا يصبح من الأسهل قراءته وفهمه وصيانته. يمكن لمحركات البحث فهم موقعك بسهولة عند استخدام HTML الدلالي. كما أنه مفيد لأغراض إمكانية الوصول، لأن قارئات الشاشة تحتاج إلى معلومات دلالية لوصف ما يوجد في صفحة الويب. @@ -75,6 +85,8 @@ HTML الدلالي هو الآن الممارسة الموصى بها. يصف - عنصر `section` لتجميع المعلومات ذات الصلة. - عنصر `figure` للرسوم التوضيحية والمخططات. +### مثال على HTML الدلالي + هذا مثال على عنصر `header` يحتوي على عنصر قسم ملاحي. فعّل المحرر التفاعلي وأضف `Products` داخل `nav` لترى التغييرات في نافذة المعاينة. @@ -97,6 +109,8 @@ HTML الدلالي هو الآن الممارسة الموصى بها. يصف تُظهر العناصر الدلالية بوضوح غرضها داخل هيكل HTML. هناك العديد من عناصر HTML الدلالية المختلفة. ستجد بالتأكيد ما يناسب احتياجات مشروعك. +## ملخص + عمل رائع. الآن تعرف الفرق بين HTML التقديمي وHTML الدلالي: HTML الدلالي يصف المحتوى، بينما HTML التقديمي يركز على المظهر. # --questions-- diff --git a/curriculum/challenges/arabic/blocks/lecture-introduction-to-javascript-libraries-and-frameworks/6734e88cc46e6dc679420040.md b/curriculum/challenges/arabic/blocks/lecture-introduction-to-javascript-libraries-and-frameworks/6734e88cc46e6dc679420040.md index 3dee0e268e7..f7db55a75f7 100644 --- a/curriculum/challenges/arabic/blocks/lecture-introduction-to-javascript-libraries-and-frameworks/6734e88cc46e6dc679420040.md +++ b/curriculum/challenges/arabic/blocks/lecture-introduction-to-javascript-libraries-and-frameworks/6734e88cc46e6dc679420040.md @@ -13,7 +13,7 @@ dashedName: what-is-vite-and-how-can-it-be-used-to-set-up-a-new-react-project لإنشاء مشروع جديد باستخدام Vite، ستحتاج إلى استخدام سطر الأوامر. إذا كنت تستخدم جهاز ويندوز، يمكنك استخدام موجه الأوامر أو Windows PowerShell. وإذا كنت تستخدم جهاز ماك، فاستخدم تطبيق Terminal. -في حال لم يكن Node.js مثبتًا لديك، وهو ضروري لعمل npm، إليك رابط الصفحة الرسمية لـ Node.js: https://nodejs.org. اتبع تعليمات التثبيت ثم عد هنا لاستكمال تثبيت React. +إذا لم يكن لديك Node.js مثبتًا، وهو ضروري لعمل npm، فإليك رابط الصفحة الرسمية لـ Node.js: [nodejs.org](https://nodejs.org). اتبع تعليمات التثبيت، ثم عد هنا لاستكمال تثبيت React. بمجرد فتح سطر الأوامر، يمكنك استخدام الأمر التالي: @@ -36,7 +36,7 @@ npm install يضمن أمر `cd my-react-app` تغيير الدليل إلى المكان الصحيح حيث يوجد مشروعك. -يُستخدم أمر `npm install` لتثبيت التبعيات اللازمة لتشغيل مشروع React الخاص بك بشكل صحيح. التبعيات هي مكتبات أو حزم يحتاجها مشروع React ليعمل بشكل صحيح، مثل React نفسه، ReactDOM، أو حزم طرف ثالث توفر وظائف إضافية. +تُستخدم الأمر `npm install` لتثبيت التبعيات اللازمة لتشغيل مشروع React بشكل صحيح. التبعيات هي مكتبات أو حزم يحتاجها مشروع React ليعمل بشكل سليم، مثل React نفسه، و`react-dom`، أو حزم طرف ثالث أخرى توفر وظائف إضافية. عند تشغيل `npm install`، سيقرأ ملف `package.json` في دليل مشروعك ويثبت كل التبعيات المدرجة هناك، مما يسمح لك ببناء وتشغيل تطبيق React دون فقدان أي مكونات ضرورية. @@ -50,11 +50,11 @@ npm install يجب أن ترى قالب البداية الذي وفره لك Vite. -إذا احتجت إلى إيقاف الخادم المحلي، اضغط `CTRL + C` في سطر الأوامر. +إذا احتجت إلى إيقاف الخادم المحلي، اضغط `Ctrl + C` في سطر الأوامر. -لمشاهدة شفرة هذا القالب المبدئي، يمكنك الدخول إلى مشروعك داخل مجلد `src` وستجد ملف `App.jsx`. +لمشاهدة شفرة قالب البداية هذا، افتح مجلد `src` داخل مشروعك، حيث يجب أن تجد ملف `App.jsx`. -من هناك يمكنك البدء بتعديل الملف، حفظ التغييرات، ورؤية التحديثات الجديدة تظهر في المتصفح. +من هناك يمكنك تعديل الملف، حفظ التغييرات، ومراقبة ظهورها في المتصفح. وبذلك، أنت جاهز لبدء بناء تطبيق React الخاص بك! diff --git a/curriculum/challenges/arabic/blocks/lecture-introduction-to-javascript/672d49959621885e9d3e672c.md b/curriculum/challenges/arabic/blocks/lecture-introduction-to-javascript/672d49959621885e9d3e672c.md index 5960a9e4128..4457c692ecc 100644 --- a/curriculum/challenges/arabic/blocks/lecture-introduction-to-javascript/672d49959621885e9d3e672c.md +++ b/curriculum/challenges/arabic/blocks/lecture-introduction-to-javascript/672d49959621885e9d3e672c.md @@ -72,6 +72,16 @@ console.log(age); // 25 ::: +بينما يمكن إعادة تعيين متغير مُعلن باستخدام `let`، لا يمكن إعادة إعلانه. إذا حاولت إعلان نفس المتغير مرة أخرى باستخدام `let`، ستحصل على خطأ: + +```js +let age = 25; + +let age = 90; // SyntaxError: Identifier 'age' has already been declared +``` + +ينطبق نفس الأمر على `const`: لا يمكن إعادة إعلان متغير مُعلن باستخدام `const` أيضًا. + يجب تعيين قيمة للمتغيرات المُعلنة بـ `const` عند وقت الإعلان. إذا حاولت إعلان متغير `const` بدون تعيين قيمة، ستحصل على خطأ: ```js diff --git a/curriculum/challenges/arabic/blocks/lecture-understanding-aria-expanded-aria-live-and-common-aria-states/672a54dff9dc439089f1a219.md b/curriculum/challenges/arabic/blocks/lecture-understanding-aria-expanded-aria-live-and-common-aria-states/672a54dff9dc439089f1a219.md index 2fa0de21db4..551c3b28edc 100644 --- a/curriculum/challenges/arabic/blocks/lecture-understanding-aria-expanded-aria-live-and-common-aria-states/672a54dff9dc439089f1a219.md +++ b/curriculum/challenges/arabic/blocks/lecture-understanding-aria-expanded-aria-live-and-common-aria-states/672a54dff9dc439089f1a219.md @@ -15,6 +15,8 @@ dashedName: what-is-the-aria-live-attribute هناك ثلاث قيم ممكنة لهذه الخاصية، تعتمد على أولوية المعلومات. +## القيمة `assertive` + إذا ضبطت `aria-live` على القيمة `assertive` فهذا يعني أن التحديث مهم جدًا. له أعلى أولوية، لذا يجب إخطار المستخدم فورًا. هذا يعني أن قارئ الشاشة سيقطع أي إعلان يجريه حاليًا ليعلن عن تغيير المحتوى في المنطقة الحية. يمكن أن تكون هذه الانقطاعات مزعجة للغاية، لذا يجب استخدام القيمة `assertive` فقط للإشعارات الحساسة للوقت أو الحرجة. @@ -81,6 +83,8 @@ document.addEventListener("DOMContentLoaded", () => { ::: +## القيمة `polite` + القيمة التالية حسب الأولوية هي `polite`. تعني هذه القيمة أن التحديث غير عاجل، لذا يمكن لقارئ الشاشة الانتظار حتى ينتهي من الإعلان الحالي أو حتى يتوقف المستخدم عن الكتابة قبل إعلان التحديث. معظم المناطق الحية تستخدم القيمة `polite`. @@ -147,10 +151,16 @@ document.addEventListener("DOMContentLoaded", () => { ::: +## القيمة `off` + أدنى قيمة أولوية لـ `aria-live` هي `off`، والتي تعني أن التحديث لن يُعلن عنه إلا إذا كان المحتوى في عنصر يملك تركيز لوحة المفاتيح حاليًا. عمليًا، نادرًا ما تُستخدم هذه القيمة لأن حالة الاستخدام ضيقة جدًا ولا تُنفذ بشكل متسق (إن وُجدت) عبر قارئات الشاشة. إذا كنت تحتاج إلى مناطق حية، خطط لاستخدام `polite` لكل شيء ما عدا الرسائل الحرجة التي تحتاج `assertive`. +## مناطق البث الحي الافتراضية من أدوار ARIA + من المهم أيضًا ملاحظة أن الخاصية `aria-live` ليست مطلوبة إذا كانت المعلومات المحدثة موجودة في عنصر له دور ARIA مثل `alert`، `log`، `marquee`، `status`، أو `timer`، إذ أن هذه الأدوار لها قيم `aria-live` افتراضية. لكن يمكن تغيير القيمة الافتراضية بتعيين `aria-live` صراحة على العنصر. +## اختيار القيمة المناسبة + اختيار القيمة المناسبة لـ `aria-live` يعتمد على أولوية المعلومات المحدثة. إذا كانت التحديثات عاجلة، يجب إخطار المستخدم فورًا باستخدام `assertive`. لكن يجب استخدام هذا فقط إذا كانت التحديثات عاجلة حقًا لأن الانقطاعات المفاجئة قد تشتت المستخدمين وتؤثر على تجربة الاستخدام. diff --git a/curriculum/challenges/arabic/blocks/lecture-understanding-computer-internet-and-tooling-basics/672aa578a2129554d4675049.md b/curriculum/challenges/arabic/blocks/lecture-understanding-computer-internet-and-tooling-basics/672aa578a2129554d4675049.md index 83bb63aafff..7aea513296f 100644 --- a/curriculum/challenges/arabic/blocks/lecture-understanding-computer-internet-and-tooling-basics/672aa578a2129554d4675049.md +++ b/curriculum/challenges/arabic/blocks/lecture-understanding-computer-internet-and-tooling-basics/672aa578a2129554d4675049.md @@ -11,13 +11,13 @@ dashedName: what-are-the-basic-parts-of-a-computer كمطوِّر، من المهم أن تفهم كيفية عمل الكمبيوتر الأساسية من الداخل. -أول مكوِّن رئيسي في الكمبيوتر هو اللوحة الأم. تحتفظ اللوحة الأم بكل الذاكرة والموصلات اللازمة لتشغيل الكمبيوتر. تعمل كلوحة الدوائر الرئيسية للكمبيوتر. +المكوِّن الرئيسي الأول في الكمبيوتر هو اللوحة الأم. تحتفظ اللوحة الأم بكل الذاكرة والموصلات اللازمة لتشغيل الكمبيوتر. تعمل كلوحة الدوائر الرئيسية للكمبيوتر. -داخل صندوق الكمبيوتر وعلى اللوحة الأم، ستجد وحدة المعالجة المركزية (CPU). وحدة المعالجة المركزية هي المعالج المسؤول عن تنفيذ التعليمات وإجراء الحسابات. غالبًا ما يُشار إليها بأنها عقل الكمبيوتر. +داخل صندوق الكمبيوتر، والمثبتة على اللوحة الأم، ستجد وحدة المعالجة المركزية (CPU). وحدة المعالجة المركزية هي معالج مسؤول عن تنفيذ التعليمات وإجراء الحسابات. غالبًا ما يُشار إليها على أنها دماغ الكمبيوتر. -وحدة المعالجة المركزية عبارة عن مربع صغير يحتوي على شريحة تُركب في مقبس وحدة المعالجة المركزية على اللوحة الأم. سرعة المعالج تُقاس بالجيجاهرتز (GHz) والميجاهرتز (MHz). الجيجاهرتز تعني مليار دورة في الثانية، والميجاهرتز تعني مليون دورة في الثانية. +وحدة المعالجة المركزية هي شريحة مربعة صغيرة توضع في مقبس وحدة المعالجة المركزية على اللوحة الأم. تُقاس سرعة وحدة المعالجة المركزية بالجيجاهرتز (GHz) والميجاهرتز (MHz). الجيجاهرتز تعني مليار دورة في الثانية، والميجاهرتز تعني مليون دورة في الثانية. -المكوِّن الحاسم التالي في الكمبيوتر هو ذاكرة النظام قصيرة الأمد، المعروفة باسم ذاكرة الوصول العشوائي (RAM). RAM هي موقع تخزين مؤقت لوحدة المعالجة المركزية في الكمبيوتر. كلما احتاج الكمبيوتر للوصول إلى بيانات بسرعة، يستخدم RAM. +المكوِّن الحاسم التالي في الكمبيوتر هو ذاكرة النظام قصيرة الأمد. تُعرف هذه باسم ذاكرة الوصول العشوائي (RAM). RAM هي موقع تخزين مؤقت لوحدة المعالجة المركزية في الكمبيوتر. في أي وقت يحتاج فيه الكمبيوتر إلى الوصول إلى البيانات بسرعة، يستخدم RAM. كلما زادت ذاكرة الوصول العشوائي في الكمبيوتر، زادت سرعته وزادت البرامج التي يمكنك تشغيلها في نفس الوقت. إذا كانت ذاكرة الوصول العشوائي منخفضة، سيعمل الكمبيوتر ببطء وستلاحظ الفرق في الأداء. @@ -27,11 +27,11 @@ dashedName: what-are-the-basic-parts-of-a-computer القرص الصلب يتكون من طبق دوار وذراع. الطبق هو مكان تخزين البيانات، والذراع يُستخدم لقراءة وكتابة البيانات على الطبق. كلما كان القرص الصلب أسرع، سيقل وقت إقلاع الكمبيوتر وستعمل برامجك بشكل أسرع. -نوع آخر من تخزين البيانات هو محرك الحالة الصلبة، أو SSD. SSD هو ذاكرة فلاش غير متطايرة ويمكن استخدامه بدلًا من القرص الصلب. محركات SSD أسرع وأصغر من الأقراص الصلبة، لكن الأقراص الصلبة أرخص ولها سعة تخزين أكبر. +نوع آخر من تخزين البيانات هو محرك الحالة الصلبة، أو SSD اختصارًا. SSD هو ذاكرة فلاش غير متطايرة ويمكن استخدامه بدلًا من القرص الصلب. محركات SSD أسرع وأصغر من الأقراص الصلبة، لكن الأقراص الصلبة أرخص ولها سعة تخزين أكبر. مكوِّن رئيسي آخر في الكمبيوتر هو وحدة تزويد الطاقة، أو PSU. PSU مسؤولة عن تحويل الكهرباء من مقبس الحائط إلى شكل يمكن للكمبيوتر استخدامه. ترسل الطاقة من المقبس إلى اللوحة الأم، ووحدة المعالجة المركزية، وباقي مكونات الكمبيوتر. -مكوِّن رئيسي آخر هو بطاقات التوسعة. تُركب هذه البطاقات في اللوحة الأم لإضافة وظائف إضافية للكمبيوتر. أمثلة على بطاقات التوسعة هي بطاقة الفيديو، وبطاقة الصوت، وبطاقة الشبكة. +مكوِّن رئيسي آخر هو بطاقة التوسعة. تُدخل هذه البطاقات في اللوحة الأم لإضافة وظائف إضافية للكمبيوتر. من أمثلة بطاقات التوسعة بطاقة الفيديو، وبطاقة الصوت، وبطاقة الشبكة. بطاقة الفيديو، المعروفة أيضًا بوحدة معالجة الرسومات (GPU)، مسؤولة عن عرض الصور على شاشة الكمبيوتر. diff --git a/curriculum/challenges/arabic/blocks/lecture-understanding-computer-internet-and-tooling-basics/672ab82c1a9bbd0e3aabc39d.md b/curriculum/challenges/arabic/blocks/lecture-understanding-computer-internet-and-tooling-basics/672ab82c1a9bbd0e3aabc39d.md index 3c3d33217fb..04159498eeb 100644 --- a/curriculum/challenges/arabic/blocks/lecture-understanding-computer-internet-and-tooling-basics/672ab82c1a9bbd0e3aabc39d.md +++ b/curriculum/challenges/arabic/blocks/lecture-understanding-computer-internet-and-tooling-basics/672ab82c1a9bbd0e3aabc39d.md @@ -7,11 +7,11 @@ dashedName: how-to-effectively-work-with-your-keyboard-mouse-and-other-pointing- # --description-- -لقد اعتدت على العمل بلوحة المفاتيح والفأرة لسنوات طويلة في أنشطة متنوعة مثل الألعاب، أداء مهام العمل، أو تصفح الويب. +لقد عمل الكثير منكم باستخدام لوحة المفاتيح والماوس لسنوات في أنشطة متنوعة مثل الألعاب، وأداء مهام العمل، أو تصفح الويب. لكن سوء استخدام هذه الأجهزة لفترات طويلة قد يؤدي إلى مشاكل صحية خطيرة في المستقبل. -في هذا الدرس، سنغطي طرق العمل مع لوحة المفاتيح والفأرة الخاصة بجهاز الكمبيوتر بطرق صحية. +في هذا الدرس، سنغطي طرق العمل مع لوحة المفاتيح والماوس الخاصة بجهاز الكمبيوتر بطرق صحية. النصيحة الأولى هي الانتباه إلى طريقة إمساك الفأرة. عند العمل على مهام جدية في العمل أو أثناء لحظات الألعاب المكثفة، قد تميل إلى الإمساك بالفأرة بقوة كبيرة. لكن هذا قد يسبب مشاكل خطيرة في اليد والمعصم. لتجنب ذلك، تأكد من إمساك الفأرة بلطف والحفاظ على استرخاء أصابعك. @@ -25,7 +25,7 @@ dashedName: how-to-effectively-work-with-your-keyboard-mouse-and-other-pointing- بينما الحفاظ على وضعية جيدة مهم، تؤكد علميات الراحة الحديثة على أهمية الحركة والجلوس الديناميكي. الجسم البشري مصمم للحركة، والبقاء في وضع ثابت، حتى لو كان مستقيمًا، لفترة طويلة يضغط باستمرار على العمود الفقري. أخذ فترات راحة منتظمة، وتغيير وضعيتك طوال اليوم، والحفاظ على وضع طبيعي للمعصم يساعد على تحسين الدورة الدموية، تقليل التعب، ودعم صحة العمود الفقري على المدى الطويل. -النصيحة الأخيرة هي استخدام اختصارات لوحة المفاتيح كلما أمكن لتقليل الكتابة. هناك العشرات من الاختصارات المتاحة لمهام مثل تصفح الويب، التنقل في نظام التشغيل، العمل داخل محرر الشفرة، وأكثر. لذا من الأفضل البحث عن بعض هذه الاختصارات وبدء دمجها في استخدامك اليومي للكمبيوتر. +النصيحة الأخيرة هي استخدام اختصارات لوحة المفاتيح كلما أمكن لتقليل الحاجة إلى الوصول للماوس. هناك العشرات من الاختصارات المتاحة لمهام مثل التنقل في الويب، والتنقل داخل نظام التشغيل، والعمل داخل محرر الشفرة، وأكثر من ذلك. لذلك، من الأفضل البحث عن بعض هذه الاختصارات وبدء دمجها في استخدامك اليومي للكمبيوتر. أثناء استمرارك في استخدام الفأرة ولوحة المفاتيح في مشاريع البرمجة القادمة وأنشطة أخرى، تذكر أن تضع هذه النصائح الصحية في اعتبارك. @@ -109,7 +109,7 @@ dashedName: how-to-effectively-work-with-your-keyboard-mouse-and-other-pointing- ## --answers-- -يجب أن تكون الفأرة مرتفعة جدًا فوق لوحة المفاتيح. +ارتفاع الماوس لا يهم. ### --feedback-- diff --git a/curriculum/challenges/arabic/blocks/lecture-understanding-computer-internet-and-tooling-basics/672ab83c4297910eade53c2e.md b/curriculum/challenges/arabic/blocks/lecture-understanding-computer-internet-and-tooling-basics/672ab83c4297910eade53c2e.md index 6c1508102c6..8dabf51d2de 100644 --- a/curriculum/challenges/arabic/blocks/lecture-understanding-computer-internet-and-tooling-basics/672ab83c4297910eade53c2e.md +++ b/curriculum/challenges/arabic/blocks/lecture-understanding-computer-internet-and-tooling-basics/672ab83c4297910eade53c2e.md @@ -7,13 +7,13 @@ dashedName: what-are-the-different-types-of-internet-service-providers # --description-- -أولًا، ما هو مزود خدمة الإنترنت، أو ISP؟ هو شركة تبيع وصولًا إلى شبكة الإنترنت العالمية، في الأساس. وهناك ثلاثة مستويات مختلفة لهم. +أولًا، ما هو مزود خدمة الإنترنت أو ISP؟ هو في الأساس شركة تبيع وصولًا إلى شبكة الإنترنت العالمية. وهناك ثلاثة مستويات مختلفة منها. -المستوى الأول هو الشركات العملاقة الكبرى، التي تمتلك البنية التحتية للتعامل مع معظم (إن لم يكن كل) حركة مرور شبكتها بشكل مستقل. +المستوى الأول هو شركات التكتل العملاقة، التي تمتلك البنية التحتية للتعامل مع معظم (إن لم يكن كل) حركة مرور شبكتها بشكل مستقل. المستوى الثاني هو المزودون على مستوى الدولة، الذين يستأجرون أحيانًا وصولًا إلى شبكات المستوى الأول لكن يمكنهم الاعتماد على أنفسهم إلى حد كبير. -المستوى الثالث هو الشركات الصغيرة التي تركز بشكل أساسي على توفير الإنترنت للأسواق المحلية، وتعتمد على مزودي خدمة الإنترنت الأكبر لتوفير بنيتهم التحتية. +المستوى الثالث هو الشركات الصغيرة التي تركز بشكل أساسي على توفير الإنترنت للأسواق المحلية، وتعتمد على مزودي خدمة الإنترنت الأكبر لتوفير بنيتها التحتية. هؤلاء المزودون يقدمون أيضًا أنواعًا مختلفة من الاتصالات. @@ -25,7 +25,7 @@ dashedName: what-are-the-different-types-of-internet-service-providers يستخدم الاتصال الهاتفي أيضًا خطوط الهاتف، لكنه يتطلب اتصالًا حصريًا (يعطل استخدام الخط لأغراض الهاتف عند الاتصال بالإنترنت). هذه تقنية قديمة جدًا وأصبحت غير مستخدمة. -تستخدم الاتصالات الفضائية مجموعة من الأقمار الصناعية التي تدور حول الأرض لربط الأجهزة المختلفة عبر العالم. وأخيرًا، وبطريقة مشابهة، يستخدم مزود الإنترنت المنزلي 5G بنية أبراج الهواتف المحمولة لإبقائك متصلًا. +تستخدم الاتصالات الفضائية مجموعة من الأقمار الصناعية التي تدور حول الأرض لربط الأجهزة المختلفة عبر العالم. وأخيرًا، وبطريقة مشابهة، يستخدم مزود الإنترنت المنزلي 5G بنية أبراج الهاتف الخلوي للحفاظ على اتصالك بالإنترنت. وهذا يجب أن يعطيك نظرة أساسية على أنواع مزودي خدمة الإنترنت وأنواع الاتصالات المتوفرة! diff --git a/curriculum/challenges/arabic/blocks/lecture-understanding-computer-internet-and-tooling-basics/672ab8573f32480f192aaae1.md b/curriculum/challenges/arabic/blocks/lecture-understanding-computer-internet-and-tooling-basics/672ab8573f32480f192aaae1.md index 017e770bbd7..8f96e52370d 100644 --- a/curriculum/challenges/arabic/blocks/lecture-understanding-computer-internet-and-tooling-basics/672ab8573f32480f192aaae1.md +++ b/curriculum/challenges/arabic/blocks/lecture-understanding-computer-internet-and-tooling-basics/672ab8573f32480f192aaae1.md @@ -9,7 +9,7 @@ dashedName: what-are-the-different-types-of-tools-professional-developers-use يعتمد المطوّرون المحترفون على مجموعة متنوعة من الأدوات لزيادة الإنتاجية وجودة الشفرة. دعنا نتعرف على تلك الأدوات، بما في ذلك التي تبدو واضحة جدًا. -أول الأدوات هي الحواسيب. الحاسوب هو بيئة العمل الأساسية للتطوير. قد يكون جهاز مكتبي ثقيل أو حاسوب محمول قابل للحمل يعمل بنظام تشغيل Windows أو macOS أو Linux. +الأداة الأولى هي الكمبيوتر نفسه. الكمبيوتر هو بيئة العمل الأساسية للتطوير. يمكن أن يكون جهاز مكتبي ثقيل أو حاسوب محمول قابل للحمل يعمل بنظام تشغيل Windows أو macOS أو Linux. غالبًا ما يختار المطوّرون المحترفون حواسيب ذات قدرة معالجة سريعة وذاكرة وصول عشوائي كبيرة للتعامل مع المهام التي تستهلك موارد كثيرة. @@ -21,7 +21,7 @@ dashedName: what-are-the-different-types-of-tools-professional-developers-use من محررات الشفرة الأخرى Sublime Text وAtom وNotepad++ وBrackets. -عندما تكتب شفرة باستخدام محررات الشفرة وبيئات التطوير المتكاملة، تحتاج إلى تتبع التغييرات التي تجريها عليها. الأداة التي تتيح لك تتبع هذه التغييرات هي نظام التحكم في الإصدارات. +عندما تكتب شفرة باستخدام محررات الشفرة وبيئات التطوير المتكاملة، تحتاج إلى تتبع التغييرات التي تجريها على تلك الشفرة. الأداة التي تتيح لك تتبع هذه التغييرات هي نظام التحكم في الإصدارات. Git هو نظام التحكم في الإصدارات الأكثر استخدامًا في مجتمع التطوير. @@ -31,8 +31,8 @@ Git هو نظام التحكم في الإصدارات الأكثر استخدا أمثلة على مديري الحزم الشائعة هي: -* NPM وYarn وPNPM لـ JavaScript -* PIP لـ Python +* npm وYarn وpnpm لـ JavaScript +* pip لـ Python * Composer لـ PHP * Maven لـ Java @@ -147,7 +147,7 @@ Git. --- -أنظمة التحكم في الإصدارات +أنظمة التحكم في الإصدارات. ### --feedback-- diff --git a/curriculum/challenges/arabic/blocks/lecture-understanding-error-handling-and-health-checks/69f3046f4c0e76cbdd24858e.md b/curriculum/challenges/arabic/blocks/lecture-understanding-error-handling-and-health-checks/69f3046f4c0e76cbdd24858e.md index 41746e2e8ee..7793df64092 100644 --- a/curriculum/challenges/arabic/blocks/lecture-understanding-error-handling-and-health-checks/69f3046f4c0e76cbdd24858e.md +++ b/curriculum/challenges/arabic/blocks/lecture-understanding-error-handling-and-health-checks/69f3046f4c0e76cbdd24858e.md @@ -34,7 +34,7 @@ app.use((err, req, res, next) => { يعرف Express أنها معالِج أخطاء لأنها تحتوي على أربعة معلمات — المعلمة الجديدة `err`، بالإضافة إلى المعلمات المعتادة `req` و `res` و `next` الخاصة بدوال البرمجيات الوسيطة الأخرى. -في درس قادم، ستتعلم المزيد عن برمجيات التعامل مع الأخطاء وكيف تندمج في سلسلة برمجيات Express الوسيطة الأوسع. +كما رأيت في درس سابق، تندمج برمجيات وسيطة لمعالجة الأخطاء ضمن مجموعة برمجيات وسيطة أوسع في Express. ## كيفية التعامل مع الأخطاء غير المتزامنة diff --git a/curriculum/challenges/arabic/blocks/lecture-understanding-how-to-work-with-classes-in-javascript/6733affc29df1304e2c97e88.md b/curriculum/challenges/arabic/blocks/lecture-understanding-how-to-work-with-classes-in-javascript/6733affc29df1304e2c97e88.md index 6e59264b84c..59d29c859f3 100644 --- a/curriculum/challenges/arabic/blocks/lecture-understanding-how-to-work-with-classes-in-javascript/6733affc29df1304e2c97e88.md +++ b/curriculum/challenges/arabic/blocks/lecture-understanding-how-to-work-with-classes-in-javascript/6733affc29df1304e2c97e88.md @@ -31,6 +31,8 @@ class MyClassName { المحتوى داخل الأقواس المتعرجة يُعرف بجسم الصنف. هنا توضع دالة البناء والطرق. +## تعريف دوال البناء + دالة البناء هي طريقة خاصة تُستدعى تلقائيًا عند إنشاء كائن جديد من الصنف. تُستخدم عادةً لتهيئة خصائص الكائن. في هذا المثال، يمكنك رؤية صنف `Dog` مع دالة بناء. @@ -45,6 +47,8 @@ class Dog { تُستخدم الكلمة المفتاحية `this` هنا للإشارة إلى النسخة الحالية من صنف `Dog`، مما يسمح لك بتعيين خاصية `name` للكائن الجاري إنشاؤه. ستتعلم المزيد عن الكلمة المفتاحية `this` في درس لاحق. +## تعريف الطرق + أسفل دالة البناء، يمكنك إضافة ما يسمى بالطرق. الطرق هي دوال معرفة داخل الصنف تؤدي إجراءات أو عمليات. تُستخدم لتعريف السلوكيات التي يمكن لنسخ الصنف تنفيذها. إليك مثالًا على إضافة طريقة تسمى `bark` إلى صنف `Dog`. @@ -63,6 +67,8 @@ class Dog { عند استدعاء طريقة `bark`، ستُسجل الرسالة في وحدة التحكم مع الاسم الفعلي الذي تم تمريره إليها. إذا أنشأت نسخة من `Dog` بالاسم `"Buddy"`، فإن استدعاء طريقة `bark()` على تلك النسخة سيطبع `"Buddy says woof!"` في وحدة التحكم. +## إنشاء نسخة من الصنف + بمجرد تعريف الصنف، يمكنك إنشاء نسخة منه باستخدام الكلمة المفتاحية `new`، واسم الصنف، والمعلمات الخاصة به. في هذا المثال، ننشئ نسخة جديدة من `Dog` بالاسم `Gino` ثم نُعيّنها إلى المتغير `dog`. @@ -73,7 +79,9 @@ const dog = new Dog("Gino"); عندما تكتب `new Dog("Gino")` في الشفرة، يُنشأ الكائن الجديد وتُستدعى دالة البناء تلقائيًا بالمعلمات المعطاة. -يمكنك بعد ذلك الوصول إلى هذه الخاصية باستخدام ترميز النقطة، كما ترى في السطر التالي من الشفرة: +## الوصول إلى الخصائص والطرق + +يمكنك بعد ذلك الوصول إلى الخاصية `name` باستخدام ترميز النقطة، كما ترى في السطر التالي من الشفرة: ```js console.log(dog.name); @@ -127,6 +135,8 @@ dog.bark(); ::: +## استخدام تعبيرات الصنف + كما ذُكر سابقًا، يمكنك أيضًا تعريف الأصناف كتعبير صنف. هنا يكون الصنف مجهولًا ويتم تعيينه إلى متغير. إليك كيف يبدو المثال السابق كتعبير صنف: diff --git a/curriculum/challenges/arabic/blocks/lecture-understanding-how-to-work-with-classes-in-javascript/673403ca2bb16658309e3632.md b/curriculum/challenges/arabic/blocks/lecture-understanding-how-to-work-with-classes-in-javascript/673403ca2bb16658309e3632.md index 51c6291ca1e..a5542380dd2 100644 --- a/curriculum/challenges/arabic/blocks/lecture-understanding-how-to-work-with-classes-in-javascript/673403ca2bb16658309e3632.md +++ b/curriculum/challenges/arabic/blocks/lecture-understanding-how-to-work-with-classes-in-javascript/673403ca2bb16658309e3632.md @@ -11,6 +11,8 @@ dashedName: how-does-the-this-keyword-work تحتاج هذه المخططات إلى طريقة عامة للإشارة إلى الكائن المحدد الذي يتم إنشاؤه أو الوصول إليه أو تعديله داخل الشفرة. هذا بالضبط ما تُستخدم له الكلمة المفتاحية `this`. تشير إلى السياق الذي من المفترض أن تُنفذ فيه الشفرة. إذا استخدمتها داخل طريقة، ستكون قيمة `this` مرجعًا إلى الكائن المرتبط بتلك الطريقة. بهذه الطريقة، يمكنك الوصول إلى الخصائص والطرق الخاصة بالكائن داخل الصنف وإعادة استخدام الطريقة على كائنات مختلفة. +## دوال البناء + على سبيل المثال، هنا لدينا صنف `Dessert`. هذه المرة، نُعرّف خاصية `hasPeanuts`. ```js @@ -33,6 +35,8 @@ this.hasPeanuts = hasPeanuts; هذا في سياق دالة البناء، لكن يمكنك أيضًا استخدام الكلمة المفتاحية `this` داخل طرق أخرى. +## الطرق + هذا هو صنف `Dessert` مع بعض التغييرات. الآن لدينا خاصيتان: `name` و `price`. ```js @@ -91,10 +95,16 @@ console.log(brownie); كل هذا بفضل الكلمة المفتاحية `this`، التي تمنحك طريقة عامة للإشارة إلى الكائن الحالي داخل الصنف. هذا يسمح لك بإعادة استخدام الطريقة على كائنات مختلفة. +## الدوال والدوال السهمية + هذا في سياق طرق الكائنات، لكن الكلمة المفتاحية `this` سيكون لها أيضًا قيمة في الدوال المستقلة والدوال السهمية. +### الدوال العادية + قيمتها داخل دالة مستقلة عادةً ما تشير إلى الكائن العالمي (في الوضع غير الصارم) أو `undefined` (في الوضع الصارم). +### الدوال السهمية + قيمة الكلمة المفتاحية `this` تختلف قليلاً في الدوال السهمية. الدوال السهمية ترث قيمة `this` من النطاق المحيط الذي تُعرّف فيه. لا تنشئ ربطًا خاصًا بها لـ `this`. هذا يعني أن قيمة `this` تعتمد على السياق الذي تُعرّف فيه الدالة السهمية، وليس على مكان أو كيفية استدعائها. هذا يجعل الدوال السهمية مفيدة للاستدعاءات الراجعة أو للحفاظ على السياق. لكن بسبب هذا، لن تشير قيمة `this` إلى الكائن الحالي في طرق الكائنات، لذا يجب أن تضع هذا في اعتبارك عند العمل مع الدوال السهمية. diff --git a/curriculum/challenges/arabic/blocks/lecture-understanding-the-web-standards-model/69fc757399f4066e674a5160.md b/curriculum/challenges/arabic/blocks/lecture-understanding-the-web-standards-model/69fc757399f4066e674a5160.md index e0122a5ea76..f7d346040aa 100644 --- a/curriculum/challenges/arabic/blocks/lecture-understanding-the-web-standards-model/69fc757399f4066e674a5160.md +++ b/curriculum/challenges/arabic/blocks/lecture-understanding-the-web-standards-model/69fc757399f4066e674a5160.md @@ -14,17 +14,17 @@ dashedName: whats-the-process-for-creating-web-standards 1. ## تحديد الحاجة تبدأ المعايير من وجود احتكاك، مثل اصطدام المطورين بحائط مسدود، أو تنفيذ المتصفحات لنفس السلوك بطرق غير متوافقة، أو وجود قدرة جديدة لا يدعمها النظام الأساسي بعد. شخص ما، في مكان ما، يشعر بالإحباط بما يكفي ليكتب ذلك. يمكن أن يكون هذا الشخص أي أحد؛ مطوِّر، شركة كبيرة بحاجة إلى منتج، أو مهندس داخل فريق المتصفح. ما يهم في هذه المرحلة ليس السلطة، بل الأدلة والأسئلة حول ما إذا كانت المشكلة حقيقية، وهل يواجهها عدد كافٍ من الناس لتبرير اهتمام منصة الويب. -1. **المقترح والنقاش المبكر** - تُكتب الفكرة بشكل غير رسمي عبر مشكلة في GitHub، أو وثيقة قصيرة، أو شرح يصف المشكلة ويرسم حلًا ممكنًا. في هذه المرحلة، الهدف ليس إنتاج مواصفة نهائية، بل معرفة ما إذا كانت المشكلة تثير اهتمام الآخرين. هل يتعرف المطورون الآخرون عليها؟ هل يهتم بائعو المتصفحات؟ هل هناك حل واضح، أم عدة حلول متنافسة؟ في TC39، تتوافق هذه المرحلة المبكرة مع المرحلة 0 والمرحلة 1. في W3C، تحدث غالبًا بشكل غير رسمي في مجموعة مجتمع قبل تأسيس مجموعة عمل رسمية. تتعامل WHATWG مع ذلك من خلال مناقشات مفتوحة على GitHub في مستودعاتها الأساسية. يختلف المكان، لكن الوظيفة واحدة. +1. ## الاقتراح والنقاش المبكر + تُكتب الفكرة بشكل غير رسمي عبر مشكلة في GitHub، أو وثيقة قصيرة، أو شرح يصف المشكلة ويرسم حلاً محتملاً. في هذه المرحلة، الهدف ليس إنتاج مواصفة نهائية، بل معرفة ما إذا كانت المشكلة تثير اهتمام الآخرين. هل يتعرف المطوّرون الآخرون عليها؟ هل يهتم بائعو المتصفحات؟ هل هناك حل واضح، أم عدة حلول متنافسة؟ في TC39، تتوافق هذه المرحلة المبكرة مع المرحلة 0 والمرحلة 1. في W3C، تحدث غالبًا بشكل غير رسمي في مجموعة مجتمع قبل تأسيس مجموعة عمل رسمية. تتعامل WHATWG مع ذلك من خلال مناقشات مفتوحة على GitHub في مستودعاتها الأساسية. المكان يختلف، لكن الوظيفة واحدة. -1. **كتابة المواصفة** - إذا حظي المقترح بدعم، يجب على شخص أو فريق صغير كتابة المواصفة الفعلية، أو spec. المواصفة ليست تدوينة أو درسًا، بل وثيقة دقيقة ورسمية تصف بالضبط كيف يجب أن تتصرف الميزة في كل حالة ممكنة. يجب التفكير وكتابة الحالات الخاصة، وحالات الخطأ، والتفاعلات مع الميزات القائمة، والاعتبارات الأمنية. +1. ## كتابة المواصفة + إذا حظي الاقتراح بدعم، يجب على شخص أو فريق صغير كتابة المواصفة الفعلية، أو spec. المواصفة ليست تدوينة أو درسًا تعليميًا، بل وثيقة دقيقة ورسمية تصف بالضبط كيف يجب أن تتصرف الميزة في كل حالة ممكنة. يجب التفكير في الحالات الحدية، وحالات الخطأ، والتفاعلات مع الميزات القائمة، والاعتبارات الأمنية، وكتابتها كلها. -1. **المراجعة والاعتراض والتكرار** - تُنشر المسودة وتُراجع علنًا، وكذلك من قبل بائعي المتصفحات الآخرين. هنا يحدث معظم العمل الحقيقي. تُثار الاعتراضات، وتُعدل المواصفة. ميزة يرفض محرك متصفح رئيسي تنفيذها نادرًا ما تصبح معيارًا، بغض النظر عن مزاياها التقنية. بناء التوافق في هذه المرحلة قد يستغرق وقتًا طويلًا. بعض المقترحات تتوقف لسنوات بينما يتفاوض البائعون على تفاصيل التصميم. وبعضها يموت تمامًا عندما يتضح أنه لا يمكن التوصل إلى اتفاق. +1. ## المراجعة والاعتراض والتكرار + تُنشر المسودة وتُراجع علنًا، وكذلك من قبل بائعي المتصفحات الآخرين. هنا يحدث معظم العمل الحقيقي. تُثار الاعتراضات، وتُعدل المواصفة. ميزة يرفض محرك متصفح رئيسي تنفيذها نادرًا ما تصبح معيارًا، بغض النظر عن مزاياها التقنية. بناء التوافق في هذه المرحلة قد يستغرق وقتًا طويلًا. بعض الاقتراحات تتوقف لسنوات بينما يتفاوض البائعون على تفاصيل التصميم. وبعضها يموت تمامًا عندما يتضح أنه لا يمكن التوصل إلى اتفاق. -1. **التنفيذ والاختبار** - بمجرد استقرار المواصفة، يبدأ بائعو المتصفحات في تنفيذها. عادةً ما يبدأ ذلك بعلم ميزة أولًا، ليتم اختبارها دون التأثير على المستخدمين الحاليين. يكشف التنفيذ غالبًا عن مشاكل لم تتوقعها المواصفة، فتُعاد إلى المحررين للتوضيح. تتحقق مجموعة اختبارات مشتركة من أن كل تنفيذ يتصرف بنفس الطريقة فعليًا. إذا اجتاز Chrome وFirefox وSafari نفس الاختبارات، فالمواصفة تعمل. إذا اختلفوا، فإما أن المواصفة غير واضحة، أو أن أحد التنفيذات يحتوي على خطأ برمجي. +1. ## التنفيذ والاختبار + بمجرد أن تصبح المواصفة مستقرة بما فيه الكفاية، يبدأ بائعو المتصفحات في تنفيذها. عادةً ما يبدأ ذلك بعلم ميزة أولًا، ليتم اختبارها دون التأثير على المستخدمين الحاليين. غالبًا ما يكشف التنفيذ عن مشاكل لم تتوقعها المواصفة، فتُعاد إلى المحررين للتوضيح. تتحقق مجموعة اختبارات مشتركة من أن كل تنفيذ يتصرف بنفس الطريقة فعليًا. إذا اجتاز Chrome وFirefox وSafari نفس الاختبارات، فالمواصفة تعمل. إذا اختلفوا، فإما أن المواصفة غير واضحة، أو أن أحد التنفيذات يحتوي على خطأ برمجي. 1. ## الإنهاء عندما توجد عدة تنفيذات مستقلة، وتنجح الاختبارات، ويرضى المجتمع، يُنهى المعيار. في W3C، يعني ذلك تحقيق حالة التوصية. في TC39، يعني الوصول إلى المرحلة 4، بعدها تُدرج الميزة في إصدار ECMAScript السنوي التالي. في WHATWG، لا يوجد لحظة إنهاء واحدة، بل يعكس المعيار الحي التوافق الحالي، ويتم تحديثه باستمرار. قد تستغرق العملية بأكملها من بضعة أشهر لإضافة صغيرة غير مثيرة للجدل إلى أكثر من عقد لشيء معقد أو سياسي. على سبيل المثال، اقترح CSS Grid أول مرة في 2011 ولم يُطرح في جميع المتصفحات الرئيسية حتى 2017. تلك الفجوة بين فكرة جيدة ومعيار مستقر مدعوم عالميًا هي حيث يحدث معظم عمل الويب المفتوح بهدوء. @@ -109,7 +109,7 @@ dashedName: whats-the-process-for-creating-web-standards ## --answers-- -لإلغاء الحاجة إلى مواصفة مكتوبة. +استبدال الحاجة إلى مواصفة مكتوبة. ### --feedback-- @@ -121,7 +121,7 @@ dashedName: whats-the-process-for-creating-web-standards --- -لتصنيف أداء المتصفحات لأغراض التسويق. +تصنيف أداء المتصفحات لأغراض التسويق. ### --feedback-- diff --git a/curriculum/challenges/arabic/blocks/lecture-understanding-the-web-standards-model/69fc757399f4066e674a5161.md b/curriculum/challenges/arabic/blocks/lecture-understanding-the-web-standards-model/69fc757399f4066e674a5161.md index 0b62e8e40f7..7615a09c4f2 100644 --- a/curriculum/challenges/arabic/blocks/lecture-understanding-the-web-standards-model/69fc757399f4066e674a5161.md +++ b/curriculum/challenges/arabic/blocks/lecture-understanding-the-web-standards-model/69fc757399f4066e674a5161.md @@ -13,23 +13,23 @@ dashedName: what-does-the-lifecycle-of-web-standards-features-look-like فكر في العملية كدليل القواعد، ودورة الحياة كالأحداث الفعلية التي تحدث أثناء لعب اللعبة. -1. **المقترح** - تبدأ كل ميزة بمشكلة اهتم بها شخص بما يكفي ليكتبها. يقدم مطوِّر أو مهندس متصفح أو شركة مشكلة على GitHub أو شرحًا يصف ما لا يستطيع الويب فعله حاليًا ولماذا يجب أن يفعل. في هذه المرحلة، تكون الفكرة غير محددة، مع أسئلة أكثر من الأجوبة. الهدف ببساطة هو معرفة ما إذا كان هناك من يعاني نفس المشكلة. +1. ## الاقتراح + تبدأ كل ميزة بمشكلة اهتم بها شخص ما بما يكفي ليكتبها. يقدم مطوِّر أو مهندس متصفح أو شركة مشكلة على GitHub أو شرحًا يصف ما لا يستطيع الويب فعله حاليًا ولماذا يجب أن يفعل ذلك. في هذه المرحلة، تكون الفكرة غير محددة، مع وجود أسئلة أكثر من الإجابات. الهدف ببساطة هو معرفة ما إذا كان هناك من يشارك نفس المشكلة. -1. **الحضانة** - إذا لاقى المقترح صدى، يدخل فترة من النقاش المفتوح والتصميم المبكر. تُرسم الطرق المتنافسة، تُجمع حالات الاستخدام، ويختبر المجتمع الفكرة تحت الضغط. تموت العديد من المقترحات هنا، ربما لأن المشكلة ضيقة جدًا، أو لا يوجد حل يرضي الجميع. التي تبقى تظهر بشكل أوضح وبها اهتمام من بعض بائعي المتصفحات. +1. ## الحضانة + إذا لاقى الاقتراح صدى، يدخل فترة من النقاش المفتوح والتصميم المبكر. تُرسم الطرق المتنافسة، وتُجمع حالات الاستخدام، ويختبر المجتمع الفكرة تحت الضغط. تموت العديد من الاقتراحات هنا، ربما لأن المشكلة ضيقة جدًا أو لا يوجد حل يرضي الجميع. الناجون يظهرون بشكل أوضح ويحظون على الأقل ببعض اهتمام بائعي المتصفحات. -1. **المواصفة** - يُكتب المقترح الناجح كمواصفة رسمية. يجب تعريف كل حالة حافة، وحالة خطأ، وتفاعل مع الميزات الحالية بوضوح. هذه هي النقطة التي تلتقي فيها الفكرة الجيدة بالواقع الصعب. يجب أن تتحول المفاهيم الغامضة إلى قواعد دقيقة يمكن لمهندسين مستقلين قراءتها وتنفيذها بشكل مطابق. +1. ## المواصفة + يُكتب الاقتراح الناجح كمواصفة رسمية. يجب تعريف كل حالة طرفية، وحالة خطأ، وتفاعل مع الميزات الحالية بوضوح. هذه هي النقطة التي تلتقي فيها الفكرة الجيدة بالواقع الصعب. يجب أن تتحول المفاهيم الغامضة إلى قواعد دقيقة يمكن لمهندسين مستقلين قراءتها وتنفيذها بشكل متطابق. -1. **اختبار التوافقية** - قبل اعتبار ميزة مستقرة، يجب أن تتصرف بنفس الطريقة في كل متصفح. مجموعة اختبارات منصة الويب من W3C هي الأداة الرئيسية للتحقق من ذلك. هي مجموعة مشتركة من الاختبارات التي يشغلها Chrome وFirefox وSafari وغيرهم على تطبيقاتهم. تعني النتائج المتباينة إما أن المواصفة غامضة، أو أن هناك خطأ برمجي. يجب حل أي منهما قبل تقدم الميزة. +1. ## اختبار التوافقية + قبل اعتبار الميزة مستقرة، يجب أن تتصرف بنفس الطريقة في كل متصفح. مجموعة اختبارات منصة الويب الخاصة بـ W3C هي الأداة الرئيسية للتحقق من ذلك. هي مجموعة مشتركة من الاختبارات التي يشغلها Chrome وFirefox وSafari وغيرهم ضد تطبيقاتهم. تعني النتائج المتباينة إما أن المواصفة غامضة أو أن هناك خطأ برمجي. يجب حل أي منهما قبل تقدم الميزة. -1. **الاعتماد النهائي** - بمجرد أن تجتاز عدة تطبيقات مستقلة الاختبارات، تُعتمد الميزة رسميًا. بالنسبة لـ W3C، تصبح توصية، ولـ TC39 تصل للمرحلة 4، وتُدرج بشكل مستقر في معيار WHATWG الحي. تُرفع الأعلام وتُطرح الميزة للمستخدمين. في هذه المرحلة، تصبح جزءًا من منصة الويب الأساسية التي يمكن لكل مطوِّر الاعتماد عليها إلى أجل غير مسمى. +1. ## الإنهاء + بمجرد أن تجتاز عدة تطبيقات مستقلة الاختبارات، تُنهى الميزة. بالنسبة لـ W3C، تصبح توصية، ولـ TC39، تصل إلى المرحلة 4، وتُدرج بشكل مستقر في المعيار الحي لـ WHATWG. تُرفع الأعلام وتُطرح الميزة للمستخدمين. في هذه المرحلة، تصبح جزءًا من منصة الويب الأساسية، يمكن لكل مطوِّر الاعتماد عليها إلى أجل غير مسمى. -1. **الإهمال** - ليست كل المعايير تدوم جيدًا. تُستبدل بعض الميزات بأخرى أفضل، ويكتشف البعض الآخر أن له آثارًا أمنية أو خصوصية لم تكن واضحة في البداية. عندما تحتاج ميزة إلى الإزالة، تُهمل رسميًا. أي تُدعم لكنها تُعلَّم كشيء يجب على المطوّرين التوقف عن استخدامه. في النهاية تُزال من المواصفة. الإزالة من المتصفحات بطيئة وحذرة، لأن الوعد الأساسي للويب هو استمرار عمل الصفحات القديمة. تبقى بعض الميزات المهملة في المتصفحات لعقود فقط من أجل التوافقية العكسية. +1. ## الإهمال + لا يشيخ كل معيار بشكل جيد. تحل بعض الميزات محلها ميزات أفضل، ويتبين أن بعضها له آثار أمنية أو خصوصية لم تكن واضحة في البداية. عندما تحتاج ميزة إلى الإزالة، تُهمل رسميًا. أي تُدعم لكنها تُعلَن كشيء يجب على المطوِّرين التوقف عن استخدامه. في النهاية، تُزال من المواصفة. الإزالة من المتصفحات بطيئة وحذرة، لأن الوعد الأساسي للويب هو استمرار عمل الصفحات القديمة. تبقى بعض الميزات المهملة في المتصفحات لعقود فقط من أجل التوافقية مع الإصدارات السابقة. # --questions-- @@ -39,7 +39,7 @@ dashedName: what-does-the-lifecycle-of-web-standards-features-look-like ## --answers-- -الحضانة +الاحتضان --- @@ -83,7 +83,7 @@ dashedName: what-does-the-lifecycle-of-web-standards-features-look-like --- -لإلغاء الحاجة إلى مواصفة مكتوبة. +استبدال الحاجة إلى مواصفة مكتوبة. ### --feedback-- diff --git a/curriculum/challenges/arabic/blocks/lecture-understanding-the-web-standards-model/69fc757399f4066e674a5162.md b/curriculum/challenges/arabic/blocks/lecture-understanding-the-web-standards-model/69fc757399f4066e674a5162.md index be1cf7ec2f9..4c35b829783 100644 --- a/curriculum/challenges/arabic/blocks/lecture-understanding-the-web-standards-model/69fc757399f4066e674a5162.md +++ b/curriculum/challenges/arabic/blocks/lecture-understanding-the-web-standards-model/69fc757399f4066e674a5162.md @@ -9,26 +9,26 @@ dashedName: what-are-the-key-principles-that-web-standards-are-built-on معايير الويب ليست مجرد وثائق تقنية، بل تعكس مجموعة من القيم حول ما يجب أن يكون عليه الويب ولمن يجب أن يخدم. فهم هذه المبادئ يساعدك على رؤية ليس فقط كيف يعمل الويب، بل لماذا بُني بهذه الطريقة. دعنا نناقش تلك المبادئ. -1. **الانفتاح** - تُطوَّر معايير الويب بشكل مفتوح وتُنفذ بدون رسوم ترخيص. يمكن لأي شخص قراءة المواصفات، ويمكن لأي شخص بناء متصفح، ولا يمكن لأي شركة فرض رسوم ترخيص على تنفيذ معيار. هذا الانفتاح هو ما يميز الويب عن المنصات المملوكة وما يسمح للفرق الصغيرة ببناء أدوات تصل إلى مليارات الأشخاص دون الحاجة إلى إذن من جهة تحكم. +1. ## الانفتاح + تُطوَّر معايير الويب بشكل مفتوح وتُنفذ بدون رسوم ترخيص. يمكن لأي شخص قراءة المواصفات، ويمكن لأي شخص بناء متصفح، ولا يمكن لأي شركة فرض رسوم ترخيص على تنفيذ معيار. هذا الانفتاح هو ما يميز الويب عن المنصات المملوكة، ويسمح للفرق الصغيرة ببناء أدوات تصل إلى مليارات الأشخاص دون الحاجة إلى إذن من جهة تحكم. -1. **إمكانية الوصول** - صُمم الويب ليكون قابلاً للاستخدام من قبل الجميع، بغض النظر عن القدرة. إمكانية الوصول ليست ميزة إضافية على معايير الويب، بل هي مدمجة في تصميم HTML وCSS وسلوك المتصفح. تحدد إرشادات WCAG التابعة لـ W3C المعيار الرسمي لما يعنيه الوصول في الممارسة. تُعتبر الميزة التي تخلق حواجز للأشخاص الذين يستخدمون قارئ الشاشة أو التنقل عبر لوحة المفاتيح أو تقنية مساعدة ناقصة بالتأكيد في التصميم، وليس فقط من الناحية الأخلاقية. +1. ## إمكانية الوصول + صُمم الويب ليكون قابلاً للاستخدام من قبل الجميع، بغض النظر عن القدرة. إمكانية الوصول ليست إضافة على معايير الويب، بل هي مدمجة في تصميم HTML وCSS وسلوك المتصفح. تحدد إرشادات WCAG التابعة لـ W3C المعيار الرسمي لما يعنيه الوصول في الممارسة. تُعتبر الميزة التي تخلق حواجز للأشخاص الذين يستخدمون قارئ الشاشة أو التنقل عبر لوحة المفاتيح أو تقنية مساعدة ناقصة بالتصميم، وليس فقط من الناحية الأخلاقية. -1. **التشغيل البيني** - المبدأ الأساسي هو أن يعمل الويب بنفس الطريقة في كل مكان. يجب أن تتصرف الصفحة المبنية وفق المعيار بشكل متطابق في Chrome وFirefox وSafari، وعلى أنظمة Windows وmacOS وLinux وAndroid وiOS. بدون التشغيل البيني، ينقسم الويب إلى تجارب خاصة بكل متصفح، ويُجبر المطوّرون على كتابة نفس الشيء عدة مرات. كل معيار موجود، في جوهره، لمنع ذلك. +1. ## التشغيل البيني + المبدأ الأساسي هو أن يعمل الويب بنفس الطريقة في كل مكان. يجب أن تتصرف الصفحة المبنية وفق المعيار بشكل متماثل في Chrome وFirefox وSafari، وعلى أنظمة Windows وmacOS وLinux وAndroid وiOS. بدون التشغيل البيني، ينقسم الويب إلى تجارب خاصة بكل متصفح، ويُجبر المطوّرون على كتابة نفس الشيء عدة مرات. كل معيار موجود، في جوهره، لمنع ذلك. -1. **التوافق مع الإصدارات السابقة** - يلتزم الويب تقريبًا بعدم كسر الأشياء القديمة. يجب أن تُعرض صفحة كُتبت في 1999 بشكل صحيح في متصفح حديث، وتتعامل هيئات المعايير مع هذا الالتزام بجدية عند تصميم ميزات جديدة. لهذا السبب تُضاف القدرات الجديدة فوق القديمة بدلاً من استبدالها. هذا قيد قد يزعج المصممين أحيانًا، لكنه أيضًا ما يجعل الويب منصة متينة وفريدة. +1. ## التوافق مع الإصدارات السابقة + يلتزم الويب بشكل شبه مطلق بعدم كسر الأشياء القديمة. يجب أن تُعرض صفحة مكتوبة في 1999 بشكل صحيح في متصفح حديث، وتلتزم هيئات المعايير بهذا الالتزام بجدية عند تصميم ميزات جديدة. لهذا السبب تُضاف القدرات الجديدة فوق القديمة بدلاً من استبدالها. هذا قيد قد يزعج المصممين أحيانًا، لكنه ما يجعل الويب منصة متينة وفريدة. -1. **الخصوصية والأمان** +1. ## الخصوصية والأمان تُراجع المعايير الحديثة من حيث تأثيرها على الخصوصية والأمان قبل إصدارها. تواجه واجهات برمجة التطبيقات الجديدة التي قد تكشف بيانات المستخدم أو تمكّن التتبع تدقيقًا دقيقًا في عملية المعايير. المبدأ هو أن تحمي المنصة المستخدمين افتراضيًا، وأن لا تأتي ملاءمة المطوّرين على حساب سلامة المستخدم. -1. **التقسيم الطبقي** - يُبنى الويب على طبقات مميزة وقابلة للتكوين: HTML للهيكل، وCSS للعرض، وJavaScript للسلوك. تُصمم المعايير لاحترام هذه الحدود بدلاً من دمجها. يمكن اعتماد ميزة مقسمة بشكل جيد تدريجيًا. الصفحة التي لا تستخدم JavaScript لا تزال تعمل، والمتصفح الذي لا يدعم خاصية CSS جديدة لا يزال يعرض شيئًا معقولًا. هذا الفصل في الاهتمامات هو ما يمنح الويب مرونته. +1. ## التدرج الطبقي + يُبنى الويب على طبقات مميزة وقابلة للتكوين: HTML للهيكل، وCSS للعرض، وJavaScript للسلوك. تُصمم المعايير لاحترام هذه الحدود بدلاً من دمجها. يمكن اعتماد ميزة ذات طبقات جيدة بشكل تدريجي. الصفحة التي لا تستخدم JavaScript لا تزال تعمل، والمتصفح الذي لا يدعم خاصية CSS جديدة لا يزال يعرض شيئًا معقولًا. هذا الفصل في الاهتمامات هو ما يمنح الويب مرونته. -1. **التحسين التدريجي** - مرتبط ارتباطًا وثيقًا بالتقسيم الطبقي هو فكرة أن يعمل الويب للجميع أولًا، ثم يتحسن لمن لديهم متصفحات أو أجهزة أكثر قدرة. يجب أن تتدهور الميزة القياسية بشكل متدرج عند عدم الدعم، لا أن تنكسر تمامًا. يشكل هذا المبدأ كيفية تحديد خصائص CSS الجديدة، وكيفية تعامل واجهات برمجة التطبيقات في JavaScript مع القدرات المفقودة، وكيف تفكر هيئات المعايير في الفجوة بين المتصفحات الحديثة والقديمة التي لا تزال مستخدمة على نطاق واسع حول العالم. +1. ## التحسين التدريجي + مرتبط ارتباطًا وثيقًا بالتدرج الطبقي هو فكرة أن يعمل الويب للجميع أولًا، ثم يتحسن لمن لديهم متصفحات أو أجهزة أكثر قدرة. يجب أن تتدهور الميزة المعيارية بشكل سلس عند عدم الدعم، وليس أن تتعطل تمامًا. يشكل هذا المبدأ كيفية تحديد خصائص CSS الجديدة، وكيفية تعامل واجهات برمجة JavaScript مع القدرات المفقودة، وكيف تفكر هيئات المعايير في الفجوة بين المتصفحات الحديثة والقديمة التي لا تزال مستخدمة على نطاق واسع في العالم. # --questions-- diff --git a/curriculum/challenges/arabic/blocks/lecture-user-interface-design-fundamentals/672baa97f2990e6631d522e7.md b/curriculum/challenges/arabic/blocks/lecture-user-interface-design-fundamentals/672baa97f2990e6631d522e7.md index 4a9ff3911f3..44410380460 100644 --- a/curriculum/challenges/arabic/blocks/lecture-user-interface-design-fundamentals/672baa97f2990e6631d522e7.md +++ b/curriculum/challenges/arabic/blocks/lecture-user-interface-design-fundamentals/672baa97f2990e6631d522e7.md @@ -7,7 +7,9 @@ dashedName: how-do-you-create-good-background-and-foreground-contrast-in-your-de # --interactive-- -**ملاحظة**: قد تستخدم بعض الأمثلة التفاعلية CSS لم تتعلمه بعد. لا تقلق بشأن محاولة فهم كل الشفرة. الهدف من الأمثلة هو عرض معاينات لهذه المفاهيم التصميمية لتفهم كيف تعمل الأمور بشكل أفضل. +**ملاحظة**: قد تستخدم بعض الأمثلة التفاعلية CSS التي لم تتعلمها بعد. لا تقلق بشأن محاولة فهم كل الشفرة. الهدف من الأمثلة هو عرض معاينات لهذه المفاهيم التصميمية لتفهم كيف تعمل الأمور بشكل أفضل. + +## فهم التباين أولًا، قد تحتاج إلى التعرف على التباين. التباين هو الفرق بين لونين - أو مدى سهولة التمييز بينهما. @@ -53,6 +55,8 @@ dashedName: how-do-you-create-good-background-and-foreground-contrast-in-your-de ::: +### تطبيق التباين على النص + بالطبع، في هذه الأمثلة قد يكون التمييز أوضح بسبب التخطيط. لكن ماذا عن تطبيق هذه الألوان على النص؟ يمكنك أن تضع نصًا أسود عالي التباين على خلفية بيضاء، ونصًا بنفسجيًا منخفض التباين على خلفية زرقاء. :::interactive_editor @@ -96,6 +100,8 @@ dashedName: how-do-you-create-good-background-and-foreground-contrast-in-your-de ::: +### معايير التباين في إرشادات إمكانية الوصول لمحتوى الويب (WCAG) + لكن كيف تحدد ما هو "تباين جيد بما فيه الكفاية"؟ لا يمكنك الاعتماد فقط على كيف يبدو النص لك، لأن تجربة كل مستخدم تختلف. لحسن الحظ، توفر إرشادات إمكانية الوصول إلى محتوى الويب (WCAG) معيارًا لذلك. النص الذي له نسبة تباين 4.5:1 يُعتبر معيار AA، وهو الحد الأدنى الذي يجب اتباعه ليكون النص متاحًا لمعظم المستخدمين. والنص الذي له نسبة تباين 7:1 يُعتبر معيار AAA، ويضمن أفضل مستوى من إمكانية الوصول. @@ -141,6 +147,8 @@ dashedName: how-do-you-create-good-background-and-foreground-contrast-in-your-de ::: +### مقارنة نسب التباين العالية والمنخفضة + هناك العديد من المواقع التي يمكنها فحص نسبة التباين بين لونين، لكن معظم المتصفحات تتيح لك القيام بذلك مباشرة في أدوات المطوِّر على موقعك. لنلقِ نظرة على بعض الأمثلة الإضافية لنسبة التباين لفهم المفهوم بشكل أفضل. @@ -221,8 +229,12 @@ dashedName: how-do-you-create-good-background-and-foreground-contrast-in-your-de هذا المثال له نسبة تباين 1.48:1، وهو لا يفي حتى بمعيار AA. +## تعديل خصائص اللون + كيف يمكنك إصلاح ذلك؟ حسنًا، هناك ثلاثة جوانب تؤثر على نسبة التباين. +### تعديل درجة اللون + الأول هو اللون (hue)، الذي يمثل نوع اللون العام، مثل الأحمر أو الأزرق أو البرتقالي. دعنا ننتقل إلى لون أبعد عن الأزرق. في هذه الحالة، سنستخدم الأحمر. :::interactive_editor @@ -267,6 +279,8 @@ dashedName: how-do-you-create-good-background-and-foreground-contrast-in-your-de ::: +### تعديل التشبع + للأسف، هذا التغيير رفع نسبة التباين فقط إلى 1.49:1، مما يعني أنك بحاجة إلى تغيير التشبع، أو "كمية" اللون الموجودة. دعنا نزيد كمية الأحمر في النص. هذا يقربنا كثيرًا من الهدف، بنسبة تباين 3.54:1. :::interactive_editor @@ -325,6 +339,8 @@ dashedName: how-do-you-create-good-background-and-foreground-contrast-in-your-de ::: +### تعديل فاتح اللون + ومع ذلك، يمكنك الاقتراب أكثر بتغيير القيمة الأخيرة، وهي فاتح اللون (lightness). فاتح اللون يمثل كمية الأبيض الموجودة في اللون. دعنا نقلل فاتح اللون للأحمر. الآن هناك أحمر أغمق بكثير مقابل الخلفية الزرقاء الفاتحة، مما يرفع نسبة التباين إلى 10.34:1. @@ -479,7 +495,7 @@ dashedName: how-do-you-create-good-background-and-foreground-contrast-in-your-de ## --answers-- -اللون (Hue) +درجة اللون ### --feedback-- @@ -495,7 +511,7 @@ dashedName: how-do-you-create-good-background-and-foreground-contrast-in-your-de --- -فاتح اللون +السطوع ### --feedback-- diff --git a/curriculum/challenges/arabic/blocks/lecture-what-is-css/672acc100d59d24da7b4e09c.md b/curriculum/challenges/arabic/blocks/lecture-what-is-css/672acc100d59d24da7b4e09c.md index e8d091960b5..f8ed182ff38 100644 --- a/curriculum/challenges/arabic/blocks/lecture-what-is-css/672acc100d59d24da7b4e09c.md +++ b/curriculum/challenges/arabic/blocks/lecture-what-is-css/672acc100d59d24da7b4e09c.md @@ -7,10 +7,14 @@ dashedName: what-are-the-different-types-of-css-combinators # --interactive-- +## مركبات CSS + تُستخدم محدِّدات CSS المركبة لتعريف العلاقة بين المحدِّدات في CSS. تساعد في اختيار العناصر بناءً على علاقتها بعناصر أخرى، مما يسمح بتنسيق أكثر دقة وكفاءة. سنناقش بعض محدِّدات CSS المركبة الأساسية وحالات استخدامها، بدءًا بمحدِّد العنصر التابع. +### مركب العنصر التابع + يُستخدم محدِّد العنصر التابع لاستهداف العناصر التي يطابقها المحدِّد الثاني إذا كانت مسكنة داخل عنصر أصل يطابق المحدِّد الأول. يمكن أن يكون الأصل أبًا أو جدًا أو أي عنصر أصل آخر أعلى في شجرة المستند. لفهم كيفية عمل ذلك بشكل أفضل، دعنا نلقي نظرة على مثال. @@ -42,6 +46,8 @@ figure img { إذا كان لديك عدة صور داخل عنصر `figure`، فإن استخدام محدِّد العنصر التابع سيكون طريقة جيدة لتطبيق حدود سوداء صلبة حول كل صورة من تلك الصور. +### مركب الابن + نوع آخر من المحدِّدات هو محدِّد الطفل. محدِّد الطفل (`>`) في CSS يُستخدم لاختيار العناصر التي هي أبناء مباشرين لعنصر أب محدد. @@ -102,6 +108,8 @@ figure img { لأن العنصرين الآخرين من نوع الفقرة مسكنان داخل عناصر `div`، فلا يُعتبران أبناء مباشرين لصنف `container` ولن يحصلوا على لون النص الأزرق. +### مركب الأخ التالي + نوع آخر شائع من المحدِّدات هو محدِّد الأخ التالي. محدِّد الأخ التالي (`+`) في CSS يختار عنصرًا يتبع مباشرة عنصر أخ محدد. هذا المحدِّد مفيد عندما تريد تطبيق تنسيقات على عنصر يتبع مباشرة عنصرًا آخر، مما يسمح بالتنسيق المستهدف بناءً على موقع العنصر بالنسبة لإخوته. @@ -150,6 +158,8 @@ img + figcaption { في هذا المثال، يختار المجمّع التالي للأخوة (`+`) عنصر `figcaption` الذي يلي مباشرة عنصر `img`. تضيف قاعدة CSS المطبقة `4px solid black border` حول `figcaption`. +### مركب الأخ اللاحق + نوع آخر شائع من المحدِّدات هو محدِّد الأخ اللاحق. محدِّد الأخ اللاحق (`~`) في CSS يختار جميع الإخوة لعنصر محدد الذين يأتون بعده. @@ -202,6 +212,8 @@ h2 ~ p { يستهدف محدِّد الأخ اللاحق (`~`) جميع إخوة الفقرة الذين يظهرون بعد عنصر `h2`، بغض النظر عما إذا كانوا إخوة مباشرين أم لا. +## لماذا تهم مركبات CSS + في الختام، فهم واستخدام محدِّدات CSS المركبة المختلفة يسمح لك بتطبيق تنسيقات دقيقة على عناصر HTML، مما يعزز التحكم ومرونة التصميم. بإتقان هذه المحدِّدات، يمكنك إنشاء قواعد تنسيق أكثر تطورًا واستهدافًا تحسن مظهر ووظائف صفحات الويب الخاصة بك. diff --git a/curriculum/challenges/arabic/blocks/lecture-working-with-code-editors-and-ides/672d26269456511aa3db614d.md b/curriculum/challenges/arabic/blocks/lecture-working-with-code-editors-and-ides/672d26269456511aa3db614d.md index 004e2ccbfdf..adc65522ac7 100644 --- a/curriculum/challenges/arabic/blocks/lecture-working-with-code-editors-and-ides/672d26269456511aa3db614d.md +++ b/curriculum/challenges/arabic/blocks/lecture-working-with-code-editors-and-ides/672d26269456511aa3db614d.md @@ -7,25 +7,25 @@ dashedName: what-is-a-code-editor-and-ide # --description-- -قد تظن أنهما نفس الشيء، لكن ليس تمامًا. محرر الشفرة هو أي تطبيق يسمح لك بتحرير ملفات الشفرة. أما بيئة التطوير المتكاملة (IDE) فهي تطبيق كامل يسمح لك بترجمة الشفرة، وتشغيلها، وتصحيح الأخطاء أثناء تحريرها. +قد تظن أن هذين الشيئين متماثلان، لكنهما ليسا كذلك تمامًا. محرر الشفرة هو أي تطبيق يسمح لك بتحرير ملفات الشفرة. أما بيئة التطوير المتكاملة (IDE) فهي تطبيق كامل يسمح لك بترجمة الشفرة، وتشغيلها، وتصحيح الأخطاء أثناء تحريرها. -ربما تكون بعض الأمثلة مفيدة. +بعض الأمثلة ستساعد في التوضيح. أولًا، دعنا نلقي نظرة على بعض بيئات التطوير المتكاملة الشهيرة. Visual Studio هي بيئة تطوير متكاملة من مايكروسوفت توفر مجموعة شاملة من الأدوات لبناء التطبيقات وتصحيح أخطائها ونشرها عبر منصات مختلفة. -بيئة تطوير متكاملة أخرى هي XCode. Xcode هي بيئة تطوير متكاملة من آبل مصممة لإنشاء وترميز وتصحيح تطبيقات macOS وiOS وwatchOS وtvOS. +بيئة تطوير متكاملة أخرى هي Xcode. Xcode هي بيئة تطوير متكاملة من Apple مصممة لإنشاء، وترميز، وتصحيح الأخطاء في التطبيقات لأنظمة macOS وiOS وwatchOS وtvOS. -وبيئة تطوير متكاملة أخرى هي Android Studio. Android Studio هي بيئة تطوير متكاملة من جوجل مصممة خصيصًا لبناء وتصحيح واختبار تطبيقات أندرويد. +Android Studio، الذي طورته Google، هو بيئة تطوير متكاملة مصممة خصيصًا لبناء، وتصحيح الأخطاء، واختبار تطبيقات Android. هذه مجرد أمثلة قليلة على بيئات التطوير المتكاملة. الآن، دعنا نلقي نظرة على بعض محررات الشفرة الشهيرة. Visual Studio Code هو محرر شفرة خفيف الوزن ومفتوح المصدر من مايكروسوفت يدعم مجموعة واسعة من لغات البرمجة ويوفر ميزات مثل تصحيح الأخطاء، وتظليل الصيغة النحوية، والتحكم في الإصدارات عبر الإضافات. -محرر شهير آخر هو Sublime Text. Sublime Text هو محرر نصوص سريع ومتعدد الاستخدامات معروف بواجهته الأنيقة وميزاته القوية ودعمه لمجموعة واسعة من لغات البرمجة من خلال تظليل الصيغة النحوية القابل للتخصيص والإضافات. +لتجربة تحرير سريعة ومتعددة الاستخدامات، يقدم Sublime Text واجهة أنيقة ودعمًا لمجموعة واسعة من لغات البرمجة من خلال تمييز الصيغة النحوية القابل للتخصيص والإضافات. -وآخر هو Notepad++. هذا محرر نصوص وشفرة مصدرية مجاني ومفتوح المصدر لنظام ويندوز يوفر تظليل الصيغة النحوية، وطَي الشفرة، ومجموعة من الإضافات لتعزيز الإنتاجية والتخصيص. +يمكن لمستخدمي Windows أيضًا استخدام Notepad++، وهو محرر نصوص ومصدر شفرة مجاني ومفتوح المصدر يوفر تمييز الصيغة النحوية، وطي الشفرة، ومجموعة من الإضافات لتعزيز الإنتاجية والتخصيص. -ربما لاحظت كيف يركز محررو الشفرة بشكل أساسي على محتوى النص في الملف، بينما تتيح بيئات التطوير المتكاملة أدوات مختلفة لإدارة الشفرة. +قد لاحظت كيف يركز محررو الشفرة بشكل أساسي على محتوى النص في الملف، بينما تتيح بيئات التطوير المتكاملة أدوات مختلفة لإدارة الشفرة. كل هذه الأمثلة برامج محلية يمكنك تشغيلها على جهاز الكمبيوتر الخاص بك، لكن هناك أيضًا محررات قائمة على السحابة يمكنك استخدامها. @@ -35,11 +35,11 @@ Visual Studio Code هو محرر شفرة خفيف الوزن ومفتوح ال Replit هو منصة عبر الإنترنت توفر بيئة تعاونية للترميز، تتيح للمستخدمين كتابة وتشغيل ومشاركة الشفرة بلغات برمجة مختلفة مباشرة من متصفح الويب. -محرر آخر شهير قائم على السحابة هو GitHub Codespaces. هذه بيئة تطوير قائمة على السحابة توفر وصولًا فوريًا إلى محرر شفرة وأدوات تطوير مهيأة بالكامل مباشرة من GitHub، مما يمكّن الترميز والتعاون بسلاسة. +محرر سحابي شهير آخر هو GitHub Codespaces. هذه بيئة تطوير سحابية توفر وصولًا فوريًا إلى محرر شفرة مُعد بالكامل وأدوات تطوير مباشرة من GitHub، مما يتيح الترميز والتعاون بسلاسة. -وآخر هو Ona. Ona هي بيئة تطوير قائمة على السحابة تتكامل مع GitHub وGitLab، وتوفر مساحات عمل فورية وقابلة للتخصيص للترميز والبناء وتصحيح الأخطاء مباشرة من متصفحك. +تتكامل Ona مع GitHub وGitLab لتوفير مساحات عمل فورية وقابلة للتخصيص للترميز والبناء وتصحيح الأخطاء مباشرة من متصفحك. -وهناك العديد من الخيارات الأخرى. بعض الخيارات، مثل Visual Studio Code، قابلة للتوسيع بشكل كبير ويمكنها العمل مع أنواع مختلفة من المشاريع واللغات. خيارات أخرى قد تكون مخصصة لمجموعة جزئية صغيرة من اللغات أو أنواع المشاريع. +وهناك العديد من الخيارات الأخرى. بعض الخيارات، مثل Visual Studio Code، قابلة للتوسيع بشكل كبير ويمكنها العمل مع العديد من أنواع المشاريع واللغات. خيارات أخرى قد تكون مخصصة لمجموعة جزئية صغيرة من اللغات أو أنواع المشاريع. التطبيق الذي تستخدمه قد يختلف حسب المشروع المحدد. يجب أن تستكشف الخيارات لترى ما يناسب احتياجاتك أفضل. diff --git a/curriculum/challenges/arabic/blocks/lecture-working-with-code-editors-and-ides/672d45583fd75a504136fbbb.md b/curriculum/challenges/arabic/blocks/lecture-working-with-code-editors-and-ides/672d45583fd75a504136fbbb.md index e2e3595eaff..ac173a5e9af 100644 --- a/curriculum/challenges/arabic/blocks/lecture-working-with-code-editors-and-ides/672d45583fd75a504136fbbb.md +++ b/curriculum/challenges/arabic/blocks/lecture-working-with-code-editors-and-ides/672d45583fd75a504136fbbb.md @@ -1,17 +1,17 @@ --- id: 672d45583fd75a504136fbbb -title: كيفية تثبيت Visual Studio Code على جهاز الكمبيوتر الخاص بك +title: كيفية تثبيت Visual Studio Code على جهاز الكمبيوتر challengeType: 19 dashedName: how-to-install-visual-studio-code-onto-your-computer --- # --description-- -لتثبيت VS Code، زر موقعهم لتحصل على المثبت المناسب لنظام التشغيل لديك. تأكد من زيارة موقع VS Code، وليس موقع Visual Studio. +لتثبيت VS Code، زر موقع VS Code لتحصل على المثبت المناسب لنظام التشغيل لديك. تأكد من زيارة موقع VS Code، وليس موقع Visual Studio. -لنظام ويندوز، يمكنك تنزيل مثبت EXE. بعد التنزيل، شغّل الملف وسيرشدك معالج التثبيت خلال العملية. +لنظام ويندوز، يمكنك تحميل مثبت EXE. بعد التحميل، شغّل الملف، وسيأخذك معالج التثبيت خلال خطوات العملية. -لنظام ماك، يمكنك تنزيل أرشيف zip يحتوي على `.app` يمكنك تشغيله. يمكنك أيضًا تثبيت VS Code عبر homebrew. +لنظام ماك، يمكنك تحميل أرشيف `.zip` يحتوي على `.app` يمكنك تشغيله. يمكنك أيضًا تثبيت VS Code عبر Homebrew. افتح تطبيق Terminal على جهاز ماك وشغّل الأمر التالي: diff --git a/curriculum/challenges/arabic/blocks/lecture-working-with-code-editors-and-ides/672d45651d83b450801efb3a.md b/curriculum/challenges/arabic/blocks/lecture-working-with-code-editors-and-ides/672d45651d83b450801efb3a.md index f66c53dd11f..2422e310221 100644 --- a/curriculum/challenges/arabic/blocks/lecture-working-with-code-editors-and-ides/672d45651d83b450801efb3a.md +++ b/curriculum/challenges/arabic/blocks/lecture-working-with-code-editors-and-ides/672d45651d83b450801efb3a.md @@ -9,15 +9,15 @@ dashedName: how-to-create-a-project-and-run-your-code-locally-in-vs-code لتبدأ، يجب أن تعرف أن VS Code يعتبر المشاريع "مساحات عمل". مساحة العمل هي أي مجلد تفتحه في VS Code. -لبدء العمل، ستحتاج إلى استخدام واجهة سطر الأوامر لإنشاء مجلد جديد لمشروعك الجديد. المجلد هو اسم آخر للدليل. +لتبدأ، تحتاج إلى استخدام واجهة سطر الأوامر لإنشاء مجلد جديد لمشروعك الجديد. المجلد هو اسم آخر للدليل. -تسمح لك واجهات سطر الأوامر، أو CLI اختصارًا، بالتفاعل مع نظام التشغيل الخاص بك من خلال أوامر نصية. ستتعلم المزيد عن هذه الأدوات في دروس لاحقة. +تسمح لك واجهات سطر الأوامر، أو CLI اختصارًا، بالتفاعل مع نظام التشغيل الخاص بك عبر أوامر نصية. ستتعلم المزيد عن هذه الأدوات في دروس لاحقة. إذا كنت تستخدم ويندوز، يمكنك استخدام موجه الأوامر أو PowerShell. وإذا كنت على ماك، يمكنك فتح تطبيق Terminal. -بمجرد فتح سطر الأوامر، انتقل إلى مجلد المنزل بكتابة الأمر `cd ~` واضغط `enter` على لوحة المفاتيح. ثم اكتب الأمر `mkdir my-project` واضغط `enter`. الأمر `mkdir`، أو "إنشاء مجلد"، هو الأمر المستخدم لإنشاء مجلد جديد. بعد ذلك، يجب أن تفتح مجلدك الجديد في VS Code. +بمجرد فتح واجهة سطر الأوامر، انتقل إلى مجلد المنزل الخاص بك. في Command Prompt، اكتب `cd /d %USERPROFILE%` واضغط `Enter` على لوحة المفاتيح. في PowerShell أو Terminal على macOS، اكتب `cd ~` واضغط `Enter`. ثم اكتب الأمر `mkdir my-project` واضغط `Enter`. الأمر `mkdir`، أو "إنشاء مجلد"، هو الأمر المستخدم لإنشاء مجلد جديد. بعد ذلك، يجب أن تفتح مجلدك الجديد باستخدام VS Code. -هناك أيضًا بعض الطرق الرسومية الأخرى لإنشاء مجلد جديد. +هناك أيضًا طرق أخرى لفتح مجلد في VS Code. اعتمادًا على نظام التشغيل، قد يكون لديك قائمة سياقية (أو خيار النقر بزر الماوس الأيمن) لفتح VS Code مباشرة من مستكشف الملفات. يمكنك أيضًا النقر نقرًا مزدوجًا على تطبيق VS Code. إذا كنت مرتاحًا مع سطر الأوامر، يمكنك تشغيل الأمر `code /path/to/folder`. @@ -31,15 +31,15 @@ dashedName: how-to-create-a-project-and-run-your-code-locally-in-vs-code بدلاً من ذلك، يجب أن تضع ملف HTML خلف خادم ويب مناسب. قد يبدو هذا مهمة مخيفة إذا كنت جديدًا على البرمجة، لكن هناك طريقة لفعل ذلك مباشرة من VS Code. -ستحتاج أولًا إلى تثبيت إضافة _Live Server_، المتوفرة مجانًا في السوق. +ستحتاج أولًا إلى تثبيت إضافة Live Server، المتوفرة مجانًا في السوق. -انقر على تبويب الإضافات في الزاوية اليسرى واكتب `Live Server` في شريط البحث. +انقر على تبويب الإضافات في الشريط الجانبي الأيسر واكتب `Live Server` في شريط البحث. -بمجرد تثبيتها، يجب أن ترى زر `Go live` في شريط الحالة. تأكد من فتح ملف HTML الخاص بك، ثم انقر عليه. +بمجرد تثبيت الإضافة، يجب أن ترى زر `Go Live` في شريط الحالة. تأكد من فتح ملف HTML الخاص بك، ثم انقر على الزر. -يجب أن تفتح صفحتك الجديدة تلقائيًا في تبويب جديد في المتصفح. إذا لم يحدث ذلك، يمكنك الذهاب مباشرة إلى `http://localhost:5500/` +يجب أن تفتح صفحتك الجديدة تلقائيًا في تبويب جديد في المتصفح. إذا لم يحدث ذلك، يمكنك الذهاب مباشرة إلى `http://localhost:5500/`. -تهانينا! لقد أعددت الآن مشروعك الخاص في VS Code، ويمكنك عرض تغييراتك باستخدام الخادم الحي. +تهانينا! لقد أعددت الآن مشروعك الخاص في VS Code، ويمكنك عرض تغييراتك باستخدام Live Server. # --questions-- @@ -57,7 +57,7 @@ dashedName: how-to-create-a-project-and-run-your-code-locally-in-vs-code --- -المجلد الذي فتحت منه VS Code. +الدليل الذي فتحته في VS Code. --- @@ -121,7 +121,7 @@ dashedName: how-to-create-a-project-and-run-your-code-locally-in-vs-code ## --answers-- -Web Server. +خادم الويب. ### --feedback-- @@ -133,7 +133,7 @@ Live Server. --- -Local Host. +المضيف المحلي. ### --feedback-- @@ -141,7 +141,7 @@ Local Host. --- -HTML Preview. +معاينة HTML. ### --feedback-- diff --git a/curriculum/challenges/arabic/blocks/lecture-working-with-code-editors-and-ides/672d456f4ac35950b300e93f.md b/curriculum/challenges/arabic/blocks/lecture-working-with-code-editors-and-ides/672d456f4ac35950b300e93f.md index 77edb42629f..7b29da4e820 100644 --- a/curriculum/challenges/arabic/blocks/lecture-working-with-code-editors-and-ides/672d456f4ac35950b300e93f.md +++ b/curriculum/challenges/arabic/blocks/lecture-working-with-code-editors-and-ides/672d456f4ac35950b300e93f.md @@ -11,19 +11,19 @@ dashedName: what-are-several-useful-keyboard-shortcuts-for-maximizing-productivi لكن هناك بعض الاختصارات الخاصة بالتطبيق والتي يمكنها رفع إنتاجيتك. يجدر بالذكر أن بعض هذه الاختصارات قد تختلف حسب نظام التشغيل. -على سبيل المثال، `Shift + Alt + F` يشغل أداة التنسيق المهيأة لديك (مثل prettier، لمشروع JavaScript) على الملف المفتوح حاليًا. +على سبيل المثال، `Shift + Alt + F` يُشغّل أداة التنسيق المُعدة لديك (مثل Prettier لمشروع JavaScript) على الملف المفتوح حاليًا. -أو `Ctrl + Shift + F` (ويندوز)، أو `Cmd + Shift + F` (ماك)، للبحث في محتوى النص لجميع الملفات في مساحة العمل. ثم `Ctrl + Shift + H` (ويندوز)، أو `Cmd + Shift + H` (ماك)، إذا أردت تشغيل البحث والاستبدال. +استخدم `Ctrl + Shift + F` (ويندوز/لينكس) أو `Cmd + Shift + F` (ماك) للبحث في محتوى النص لجميع الملفات في مساحة العمل. ثم استخدم `Ctrl + Shift + H` (ويندوز/لينكس) أو `Cmd + Shift + H` (ماك) إذا أردت تشغيل البحث والاستبدال. -إذا احتجت إلى حذف سطر، `Ctrl + Shift + K` (ويندوز)، أو `Cmd + Shift + K` (ماك)، سيحذفه. +إذا احتجت إلى حذف سطر، فإن `Ctrl + Shift + K` (ويندوز/لينكس) أو `Cmd + Shift + K` (ماك) سيحذفه. -هل تحتاج إلى مساحة إضافية لكل شفرتك؟ `Ctrl + B` (ويندوز)، أو `Cmd + B` (ماك)، يخفي الشريط الجانبي - الذي يحتوي على قائمة الملفات وقائمة الإضافات. +هل تحتاج إلى مساحة إضافية لكل شفرتك؟ `Ctrl + B` (ويندوز) أو `Cmd + B` (ماك) يخفي الشريط الجانبي الذي يحتوي على قائمة الملفات وقائمة الإضافات. -أو ربما لا تستطيع رؤية شفرتك؟ `Ctrl + plus` (ويندوز)، أو `Cmd + plus` (ماك)، يزيد من تكبير المحرر، و`Ctrl + minus` (ويندوز)، أو `Cmd + minus` (ماك)، يقلله. +أو ربما لا تستطيع رؤية شفرتك؟ `Ctrl + Plus` (ويندوز) أو `Cmd + Plus` (ماك) يزيد من تكبير المحرر، و`Ctrl + Minus` (ويندوز) أو `Cmd + Minus` (ماك) يقلله. -ميزة أخرى مفيدة في VS Code هي التحرير متعدد الأسطر، الذي يسمح لك بإجراء تغييرات عبر عدة أسطر دفعة واحدة. على سبيل المثال، يمكنك وضع عدة مؤشرات باستخدام `Ctrl + Alt + down` و`Ctrl + Alt + up` (ويندوز/لينكس)، أو `Option + Command + down` و`Option + Command + up` (ماك)، لتمديد المؤشر إلى أسطر متتالية. يمكنك أيضًا الضغط مع الاستمرار على `Alt` (ويندوز/لينكس) أو `Option` (ماك) والنقر لإضافة مؤشرات على أسطر منفصلة حيثما تحتاجها. بمجرد وضع المؤشرات، أي شيء تكتبه أو تحذفه سيطبق على كل تلك المواقع في نفس الوقت — مما يوفر الكثير من الوقت عند العمل على شفرة متكررة. +ميزة أخرى مفيدة في VS Code هي التحرير متعدد الأسطر، الذي يسمح لك بإجراء تغييرات عبر عدة أسطر دفعة واحدة. على سبيل المثال، يمكنك وضع عدة مؤشرات باستخدام `Ctrl + Alt + Down` و`Ctrl + Alt + Up` (ويندوز/لينكس)، أو `Option + Cmd + Down` و`Option + Cmd + Up` (ماك) لتمديد المؤشر إلى أسطر متتالية. يمكنك أيضًا الضغط مع الاستمرار على `Alt` (ويندوز/لينكس) أو `Option` (ماك) والنقر لإضافة مؤشرات على أسطر منفصلة حيثما تحتاجها. بمجرد وضع المؤشرات، أي شيء تكتبه أو تحذفه سيُطبق على كل تلك المواقع في نفس الوقت — مما يوفر الكثير من الوقت عند العمل على شفرة متكررة. -أخيرًا، إذا نسيت أيًا من هذه الاختصارات، لديك دائمًا `Ctrl + Shift + P` (ويندوز)، أو `Cmd + Shift + P` (ماك)، التي تفتح لوحة الأوامر لتختار ما تحتاجه. +أخيرًا، إذا نسيت أيًا من هذه الاختصارات، يمكنك دائمًا استخدام `Ctrl + Shift + P` (ويندوز/لينكس) أو `Cmd + Shift + P` (ماك) لفتح لوحة الأوامر واختيار ما تحتاجه. مع هذه المعرفة، وربما بعض الممارسة، أنت في طريقك لتصبح مستخدمًا محترفًا لـ VS Code. diff --git a/curriculum/challenges/arabic/blocks/lecture-working-with-code-editors-and-ides/672d457bcdd8b350ec2b6254.md b/curriculum/challenges/arabic/blocks/lecture-working-with-code-editors-and-ides/672d457bcdd8b350ec2b6254.md index f616cd1c296..e73ab26779e 100644 --- a/curriculum/challenges/arabic/blocks/lecture-working-with-code-editors-and-ides/672d457bcdd8b350ec2b6254.md +++ b/curriculum/challenges/arabic/blocks/lecture-working-with-code-editors-and-ides/672d457bcdd8b350ec2b6254.md @@ -7,25 +7,25 @@ dashedName: what-are-some-good-vs-code-extensions-you-can-use-in-your-editor # --description-- -_Better Comments_ إضافة تقدم تمييزًا خاصًا لأنواع معينة من تعليقات الشفرة. على سبيل المثال، ستبرز تعليقات "TODO"، بالإضافة إلى صيغة تشير إلى الأسئلة أو التحذيرات. +Better Comments هو امتداد يوفّر تمييزًا خاصًا لأنواع معينة من تعليقات الشفرة. على سبيل المثال، يبرز تعليقات "TODO"، بالإضافة إلى صيغة نحوية تشير إلى الأسئلة أو التحذيرات. -_Code Spell Checker_ يشير إلى وجود أخطاء إملائية في شفرتك. وبما أنه مصمم لملفات الشفرة، فإنه يأخذ في الاعتبار أشياء مثل camel case. +Code Spell Checker يعلّم الكلمات التي تحتوي على أخطاء إملائية في شفرتك. وبما أنه مصمم لملفات الشفرة، فإنه يأخذ في الاعتبار أشياء مثل camel case. -_Error Lens_ يساعدك على اكتشاف أي أخطاء مميزة في شفرتك. بدلًا من الاعتماد على التسطير الذي يعرضه VS Code افتراضيًا، تبرز هذه الإضافة السطر بأكمله وتعرض رسالة الخطأ. +Error Lens يجعل من الصعب تفويت الأخطاء في شفرتك. بدلًا من الاعتماد على التسطير الذي يعرضه VS Code افتراضيًا، يميّز هذا الامتداد السطر بأكمله ويعرض رسالة الخطأ. -_Indent Rainbow_ يضيف ألوانًا لمستويات التراجع المختلفة في شفرتك. مع تلوين أزواج الأقواس الأصلي في VS Code، يساعد هذا بشكل كبير في تحديد نطاق الشفرة التي تعمل عليها. +Indent Rainbow يضيف ألوانًا لمستويات التراجع المختلفة في شفرتك. وبالاشتراك مع تلوين أزواج الأقواس الأصلي في VS Code، يساعد هذا بشكل كبير في تحديد نطاق الشفرة التي تعمل عليها. -أو ربما تبحث عن شيء أكثر عملية؟ فكر في مساعد ذكي، مثل _GitHub Copilot_ أو _Tabnine_، ليقدم لك اقتراحات مضمَّنة أثناء كتابة الشفرة. +أو ربما تبحث عن شيء أكثر عملية؟ فكّر في مساعد ذكي، مثل GitHub Copilot أو Tabnine، ليقدم لك اقتراحات مضمّنة أثناء كتابة الشفرة. -حزمة أيقونات، مثل _VS Code Great Icons_، تساعد على جعل شجرة الملفات أنظف وأسهل في الفهم بنظرة سريعة. وإضافة مثل _Colorize_ تساعدك على فهم القيم في خصائص CSS. +حزمة أيقونات، مثل VS Code Great Icons، تساعد في جعل شجرة الملفات أنظف وأسهل للفهم بنظرة سريعة. وامتداد مثل Colorize يساعدك على فهم القيم في خصائص CSS الخاصة بك. -ستحتاج أيضًا إلى إضافات خاصة باللغات لمشاريعك. إذا كنت تستخدم JavaScript، فربما تريد _ESLint_ و _Prettier_ لفحص وتنسيق الشفرة. وإذا كنت تستخدم TypeScript، فقد تحتاج _Pretty TypeScript Errors_ لرسائل أسهل في القراءة. +ستحتاج أيضًا إلى امتدادات خاصة باللغات لمشاريعك. إذا كنت تستخدم JavaScript، فغالبًا ما تحتاج إلى ESLint وPrettier لفحص وتنسيق الشفرة. وإذا كنت تستخدم TypeScript، قد تحتاج إلى Pretty TypeScript Errors لرسائل أسهل قراءة. -وأخيرًا، يمكنك أيضًا الاستمتاع قليلاً مع محررك. تقدم _VS Code Pets_ حيوانات افتراضية قابلة للتخصيص لترافقك أثناء معالجة بعض الأخطاء البرمجية. +أخيرًا، يمكنك أيضًا الاستمتاع قليلاً مع محررك. VS Code Pets يوفّر حيوانات أليفة افتراضية قابلة للتخصيص لتبقيك رفيقًا أثناء إصلاح الأخطاء البرمجية. -_Power Mode_ يخلق تأثيرات بصرية لافتة عندما تحقق "كومبو" عالي بكتابة المزيد من الشفرة. +Power Mode يخلق تأثيرات بصرية لافتة عندما تحقق "كومبو" عاليًا بكتابة المزيد من الشفرة. -_Discord Presence_ يتيح لك عرض ما تعمل عليه لجميع أصدقائك. +Discord Presence يتيح لك عرض ما تعمل عليه لجميع أصدقائك. وهناك الكثير من الإضافات الأخرى. استكشف سوق الإضافات لترى ما يناسبك أكثر. @@ -33,7 +33,7 @@ _Discord Presence_ يتيح لك عرض ما تعمل عليه لجميع أصد ## --text-- -ما الميزة التي تقدمها إضافة "Better Comments" في VS Code؟ +ما الميزة التي يوفّرها امتداد Better Comments في VS Code؟ ## --answers-- @@ -69,7 +69,7 @@ _Discord Presence_ يتيح لك عرض ما تعمل عليه لجميع أصد ## --text-- -أي إضافة في VS Code توصف بأنها تساعد على اكتشاف الأخطاء المميزة في شفرتك عن طريق عرض رسالة الخطأ على السطر بأكمله؟ +أي امتداد في VS Code يميّز السطر بأكمله ويعرض رسالة الخطأ مضمّنة، بدلًا من الاعتماد على التسطير الافتراضي؟ ## --answers-- @@ -105,7 +105,7 @@ ESLint ## --text-- -ما الميزة الفريدة التي تقدمها إضافة "VS Code Pets"؟ +ما الميزة الفريدة التي يوفّرها امتداد VS Code Pets؟ ## --answers-- diff --git a/curriculum/challenges/arabic/blocks/lecture-working-with-css-flexbox/672aa7f7284b235f46f7d4e9.md b/curriculum/challenges/arabic/blocks/lecture-working-with-css-flexbox/672aa7f7284b235f46f7d4e9.md index 7558140db03..12f7e7a8ee7 100644 --- a/curriculum/challenges/arabic/blocks/lecture-working-with-css-flexbox/672aa7f7284b235f46f7d4e9.md +++ b/curriculum/challenges/arabic/blocks/lecture-working-with-css-flexbox/672aa7f7284b235f46f7d4e9.md @@ -319,7 +319,7 @@ CSS flexbox هو نموذج تخطيط قوي يوفر طريقة مرنة وف ### --feedback-- -فكر في توزيع العناصر داخل الحاوية المرنة. +فكر في كيفية تموضع المحور الرئيسي والمحور المتقاطع بالنسبة لبعضهما. --- @@ -327,7 +327,7 @@ CSS flexbox هو نموذج تخطيط قوي يوفر طريقة مرنة وف ### --feedback-- -فكر في توزيع العناصر داخل الحاوية المرنة. +فكر في كيفية تموضع المحور الرئيسي والمحور المتقاطع بالنسبة لبعضهما. --- @@ -339,7 +339,7 @@ CSS flexbox هو نموذج تخطيط قوي يوفر طريقة مرنة وف ### --feedback-- -فكر في توزيع العناصر داخل الحاوية المرنة. +فكر في كيفية تموضع المحور الرئيسي والمحور المتقاطع بالنسبة لبعضهما. ## --video-solution-- diff --git a/curriculum/challenges/arabic/blocks/lecture-working-with-css-flexbox/672bd658c0e190f674a5e057.md b/curriculum/challenges/arabic/blocks/lecture-working-with-css-flexbox/672bd658c0e190f674a5e057.md index bddffbcffe8..86f4815186a 100644 --- a/curriculum/challenges/arabic/blocks/lecture-working-with-css-flexbox/672bd658c0e190f674a5e057.md +++ b/curriculum/challenges/arabic/blocks/lecture-working-with-css-flexbox/672bd658c0e190f674a5e057.md @@ -7,11 +7,11 @@ dashedName: what-are-some-common-flex-properties # --interactive-- -خصائص Flex هي خصائص يمكنك تطبيقها على الحاويات المرنة لتحديد توزيع العناصر الفرعية. سنغطي بعضًا من أكثرها استخدامًا: `flex-wrap`، و`justify-content`، و`align-items`. +تتحكم خصائص flex في كيفية تصرف العناصر داخل تخطيط مرن، من توزيع على مستوى الحاوية إلى محاذاة ذاتية على مستوى العنصر. سنغطي بعضًا من أكثرها استخدامًا في هذا الدرس: `flex-wrap`، `flex-flow`، `justify-content`، `align-items`، و`align-self`. -لنبدأ بـ `flex-wrap`. تحدد هذه الخاصية كيفية لف العناصر المرنة داخل الحاوية المرنة لتناسب المساحة المتاحة. يمكن أن تأخذ `flex-wrap` ثلاث قيم ممكنة: `nowrap`، و`wrap`، و`wrap-reverse`. القيمة الافتراضية هي `nowrap`—لن تُلف العناصر المرنة إلى سطر جديد حتى لو تجاوز عرضها عرض الحاوية. +لنبدأ بـ `flex-wrap`. تحدد هذه الخاصية كيفية لف العناصر المرنة داخل الحاوية المرنة لتناسب المساحة المتاحة. يمكن أن تأخذ `flex-wrap` ثلاث قيم ممكنة: `nowrap`، `wrap`، و`wrap-reverse`. القيمة الافتراضية هي `nowrap`: لن تُلف العناصر المرنة إلى سطر جديد حتى لو تجاوز عرضها عرض الحاوية. -في الشفرة أدناه، لدينا ثلاثة عناصر `div`. ركز على خاصية `width`. الحاوية `main` ذات الحدود الحمراء لها `width` بقيمة `200px`، بينما العناصر الثلاثة التابعة لها من نوع `div` مجموع `width` لها هو `240px` (كل واحد منها `80px`). +في الشفرة أدناه، لدينا ثلاثة عناصر `div`. لنركز على `width`. الحاوية `main` المحددة بحدود لها `width` مقدارها `200px`، بينما يبلغ مجموع `width` لعناصر `div` الثلاثة الفرعية `240px` (`80px` لكل منها): :::interactive_editor @@ -28,7 +28,7 @@ dashedName: what-are-some-common-flex-properties main { width: 200px; display: flex; - border: 2px solid red; + border: 2px solid #444; } div { @@ -51,7 +51,6 @@ div { ::: - عرض عناصر `div` يتجاوز عرض الحاوية، لكن افتراضيًا سيتم تقليصها لتناسب المساحة المتاحة. إذا أردت لفها عند تجاوز عرضها عرض الحاوية، يمكنك تعيين `flex-wrap: wrap` على الحاوية المرنة: :::interactive_editor @@ -70,7 +69,7 @@ main { width: 200px; display: flex; flex-wrap: wrap; - border: 2px solid red; + border: 2px solid #444; } div { @@ -109,9 +108,10 @@ div { ```css main { width: 200px; + height: 120px; display: flex; flex-flow: column wrap-reverse; - border: 2px solid red; + border: 2px solid #444; } div { @@ -151,7 +151,7 @@ div { main { display: flex; justify-content: flex-start; - border: 2px solid red; + border: 2px solid #444; } div { @@ -191,7 +191,7 @@ div { main { display: flex; justify-content: flex-end; - border: 2px solid red; + border: 2px solid #444; } div { @@ -231,7 +231,7 @@ div { main { display: flex; justify-content: center; - border: 2px solid red; + border: 2px solid #444; } div { @@ -254,7 +254,7 @@ div { ::: -لتوزيع العناصر بالتساوي على طول المحور الرئيسي، يمكنك استخدام `justify-content: space-between`. سيضيف هذا بعض الفراغ بين العناصر المرنة إذا لزم الأمر. +لتوزيع العناصر على المحور الرئيسي بدون فراغات عند الحواف، يمكنك استخدام `justify-content: space-between`. يجلس العنصر الأول عند بداية المحور الرئيسي، والآخر عند نهايته، ويتم توزيع أي مساحة متبقية بين العناصر المجاورة. :::interactive_editor @@ -271,7 +271,7 @@ div { main { display: flex; justify-content: space-between; - border: 2px solid red; + border: 2px solid #444; } div { @@ -294,7 +294,7 @@ div { ::: -`justify-content: space-around` يوزع العناصر المرنة بالتساوي داخل المحور الرئيسي، مضيفًا فراغًا قبل العنصر الأول وبعد العنصر الأخير. هذا الفراغ الإضافي هو نصف الفراغ بين كل زوج من العناصر المجاورة. إذا كان هناك عنصر واحد فقط للتوزيع، فسيتم تمركزه. +`justify-content: space-around` يوزع العناصر المرنة بالتساوي على المحور الرئيسي، مضيفًا فراغًا قبل العنصر الأول وبعد العنصر الأخير. هذه المساحة الإضافية تساوي نصف المسافة بين كل زوج من العناصر المجاورة. إذا كان هناك عنصر واحد فقط للتوزيع، فسيتم تمركزه. :::interactive_editor @@ -311,7 +311,7 @@ div { main { display: flex; justify-content: space-around; - border: 2px solid red; + border: 2px solid #444; } div { @@ -334,8 +334,7 @@ div { ::: - -وأخيرًا، لدينا `justify-content: space-evenly`، التي توزع العناصر بالتساوي على طول المحور الرئيسي. الفراغ بين العناصر والفراغ قبل وبعد العنصرين الأول والأخير متساوٍ تمامًا: +وأخيرًا، لدينا `justify-content: space-evenly`، التي توزع العناصر بالتساوي على المحور الرئيسي. المسافة بين العناصر والمسافة قبل وبعد العنصرين الأول والأخير متساوية تمامًا: :::interactive_editor @@ -352,7 +351,7 @@ div { main { display: flex; justify-content: space-evenly; - border: 2px solid red; + border: 2px solid #444; } div { @@ -390,10 +389,10 @@ div { ```css main { - height: 300px; display: flex; + height: 300px; align-items: center; - border: 2px solid red; + border: 2px solid #444; } div { @@ -431,10 +430,10 @@ div { ```css main { - height: 300px; display: flex; + height: 300px; align-items: flex-start; - border: 2px solid red; + border: 2px solid #444; } div { @@ -472,10 +471,10 @@ div { ```css main { - height: 300px; display: flex; + height: 300px; align-items: flex-end; - border: 2px solid red; + border: 2px solid #444; } div { @@ -498,33 +497,43 @@ div { ::: -لتمديد العناصر المرنة على طول المحور المتقاطع، يمكنك استخدام `align-items: stretch`. هذا يعمل أيضًا مع العناصر التي تُحدد أبعادها تلقائيًا، مثل تلك التي لا تحتوي على `width` أو `height` محددة، أو التي تحتوي فقط على `width` أو `height` كحد أدنى. ستمتد العناصر المرنة لملء الحاوية في اتجاه المحور المتقاطع. +لتمديد العناصر المرنة على المحور المتقاطع، يمكنك استخدام `align-items: stretch`. يؤثر هذا فقط على العناصر التي يكون حجمها على المحور المتقاطع `auto`؛ العناصر التي لها حجم محدد صراحةً على المحور المتقاطع (مثل `height` محدد في حاوية صف) لن تتمدد. العناصر المتأثرة ستملأ الحاوية في اتجاه المحور المتقاطع. :::interactive_editor ```html - -
+## تعيين عائلات الخطوط في CSS
+
في CSS، يمكنك تعيين عائلة الخط باستخدام الخاصية `font-family`. إليك مثالًا على تعيين الخط للفقرة إلى `Arial`:
:::interactive_editor
@@ -29,6 +31,8 @@ dashedName: what-are-font-families
:::
+## خطوط النظام البديل
+
ماذا لو لم يتم العثور على عائلة الخط؟ يمكنك تحديد عدة عائلات خطوط حسب الأولوية من الأعلى إلى الأدنى، بفصلها بفواصل. ستعمل هذه الخطوط البديلة كنظام بديل. في هذا المثال، Arial هو الخط الأساسي وLato هو الخط البديل:
:::interactive_editor
@@ -51,6 +55,8 @@ dashedName: what-are-font-families
يجب أن تعرف أيضًا كيف يعمل هذا الإجراء خلف الكواليس. لا يتوقف اختيار الخط بمجرد توفر الخط الأول. تُختار عائلة الخط حرفًا بحرف، فإذا كان الخط يفتقر إلى حرف معين، يبحث المتصفح عنه في الخطوط ذات الأولوية الأدنى. أليس هذا مثيرًا؟
+## عائلات الخطوط العامة
+
في سياق تطوير الويب، ستجد أيضًا عائلات خطوط عامة. وهي مهمة جدًا. عائلة الخطوط العامة هي خط افتراضي يعرضه متصفح الويب عندما لا تتوفر الخطوط ذات الأولوية الأعلى. لضمان بقاء المحتوى قابلاً للقراءة، يستبدل المتصفح الخط الأصلي بأكثر خط مناسب بناءً على عائلة الخطوط العامة المحددة. بعض أشهرها هي:
- سيريف
@@ -81,6 +87,8 @@ dashedName: what-are-font-families
يجب دائمًا إضافة عائلة الخطوط العامة في نهاية قائمة عائلة الخطوط. تذكر أن الخط العام قد يبدو مختلفًا عن الخط الذي تخيلته في التصميم، لذلك من المفيد دائمًا معاينة شكل هذه الخطوط في المتصفحات المختلفة.
+## خطوط الويب الآمنة
+
لجعل تجربة المستخدم متسقة قدر الإمكان، يُنصح أيضًا باستخدام خطوط آمنة للويب. عادةً ما تكون هذه العائلات مثبتة على معظم الأجهزة، لذا من المرجح جدًا العثور عليها وعرضها بشكل صحيح لمعظم المستخدمين. ستتعلم المزيد عنها في الدروس القادمة.
عائلات الخطوط ضرورية في عالم تصميم الويب. باستخدام خاصية font-family، يمكنك تغيير مظهر وإحساس النص فورًا.
diff --git a/curriculum/challenges/arabic/blocks/lecture-working-with-css-fonts/672bd8453d1371fdb1510fe5.md b/curriculum/challenges/arabic/blocks/lecture-working-with-css-fonts/672bd8453d1371fdb1510fe5.md
index 5f8ebd3f05c..595c95b39be 100644
--- a/curriculum/challenges/arabic/blocks/lecture-working-with-css-fonts/672bd8453d1371fdb1510fe5.md
+++ b/curriculum/challenges/arabic/blocks/lecture-working-with-css-fonts/672bd8453d1371fdb1510fe5.md
@@ -11,6 +11,8 @@ dashedName: how-do-you-work-with-external-fonts-like-font-squirrel-and-google-fo
Google Fonts وFont Squirrel هما مصدران شهيران على الإنترنت للعثور على خطوط مجانية واستخدامها لأغراض تطوير الويب. يمكنك دمجهما في مشاريعك بسهولة كبيرة.
+## خطوط جوجل
+
لنبدأ بـ Google Fonts. هذه خدمة من Google تقدم مجموعة من الخطوط، العديد منها مصمم خصيصًا لتطوير الويب. في واجهة مستخدم Google Fonts، يمكنك رؤية العديد من العناصر المختلفة. دعنا نستعرضها واحدة تلو الأخرى. في الشريط الجانبي الأيسر، ستجد:
- قسم لرؤية الخطوط والعثور عليها وتصفية النتائج.
@@ -18,6 +20,8 @@ Google Fonts وFont Squirrel هما مصدران شهيران على الإنت
- قسم يمكنك فيه العثور على أيقونات لمشاريع الويب الخاصة بك وتحميلها.
- قسم يمكنك من خلاله معرفة المزيد عن الخطوط وأفضل الممارسات المتعلقة بها، يليه قسم للأسئلة المتكررة.
+## معاينة خطوط جوجل
+
لإضافة خط من Google إلى موقعك، يجب أن تذهب إلى القسم الأول (الخطوط). يمكنك تخصيص نص المعاينة في الشريط الجانبي الأيسر حيث يظهر "Preview". فقط اكتب النص الذي تريد رؤيته وسيتم تحديثه تلقائيًا. هذا مفيد لمعاينة الخط مع النص الذي تفكر فيه لموقعك. يمكنك أيضًا تعديل حجم الخط وتصفية الخطوط بناءً على خصائصها.
@@ -28,12 +32,16 @@ Google Fonts وFont Squirrel هما مصدران شهيران على الإنت
+## استخدام خطوط جوجل
+
عندما تكون مستعدًا لإضافة الخط إلى مشروعك، انقر على زر "Get font" الأزرق في الأعلى. ستنتقل إلى صفحة ملخص حيث سترى الخطوط التي اخترتها حاليًا. يمكنك اختيار عدة خطوط في نفس الوقت.
بعد ذلك، عليك اختيار ما إذا كنت تريد تحميل ملفات الخطوط لإضافتها إلى مشروعك كملفات محلية، أو استخدامها كخطوط خارجية وتحميلها من خوادم Google عندما يدخل المستخدم موقعك. انقر على "Download all" إذا أردت تحميلها، أما إذا فضلت استخدامها كخطوط خارجية على خوادم Google، فانقر على "Get embed code". إذا نقرّت على "Get embed code"، سترى التعليمات التي يجب اتباعها لإضافة هذه الخطوط الخارجية إلى مشروعك.
+### ربط خطوط جوجل
+
لمشاريع تطوير الويب، لديك خياران. يمكنك استخدام عنصر `link` أو `@import`. إذا اخترت خيار عنصر `link`، يمكنك نسخ ولصق مقتطف HTML وقواعد CSS لإضافتها إلى مشروعك. يجب تضمين الشفرة داخل عنصر `head` في ملف HTML الخاص بك وإضافة قواعد CSS التي تناسب احتياجاتك.
@@ -141,11 +149,13 @@ Google Fonts وFont Squirrel هما مصدران شهيران على الإنت
هناك قاعدة CSS لكل نمط خط. كل قاعدة تعيّن الخطوط المخصصة مع خطوط النظام البديل في حال لم تُحمّل الخطوط المخصصة بشكل صحيح.
+### استيراد خطوط جوجل
+
إذا اخترت خيار `@import` بدلاً من ذلك، ستحتاج إلى إضافة تلك القاعدة إلى ملف CSS الخاص بك.
-إليك مثالًا:
+إليك مثال:
```css
@import url('https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap');
@@ -159,10 +169,14 @@ Google Fonts وFont Squirrel هما مصدران شهيران على الإنت
وهذا هو Google Fonts. إنه أحد الخيارات الأكثر شعبية للعثور على خطوط مجانية ومفتوحة المصدر لمشاريع تطوير الويب.
+## فونت سكويرل
+
خيار رائع آخر هو Font Squirrel، حيث يمكنك العثور على الخطوط المخصصة التي تتخيلها لتصميمك وتحميلها.
+## معاينة فونت سكويرل
+
إذا بحثت عن خط ونقرت على نتيجة، سترى مزيدًا من التفاصيل عن الخط، بما في ذلك عينات، تجربة اختبار، الرموز، وحزمة خطوط الويب.
@@ -173,6 +187,8 @@ Google Fonts وFont Squirrel هما مصدران شهيران على الإنت
+## استخدام فونت سكويرل
+
بمجرد أن تقرر الخط الذي تريد استخدامه في مشروعك، اذهب إلى تبويب "Webfont Kit". هنا، يمكنك التحقق مما إذا كان ترخيص الخط يسمح لك باستخدامه في تضمينات CSS عبر `@font-face`. يمكنك أيضًا اختيار المجموعة الجزئية والصيغة.
@@ -221,7 +237,7 @@ Google Fonts وFont Squirrel هما مصدران شهيران على الإنت
---
-تحسين توافق المتصفح.
+تحسين التوافق مع المتصفحات.
### --feedback--
diff --git a/curriculum/challenges/arabic/blocks/lecture-working-with-css-fonts/672bd853c985cdfdeb32f4f9.md b/curriculum/challenges/arabic/blocks/lecture-working-with-css-fonts/672bd853c985cdfdeb32f4f9.md
index 5b903808463..d7dd31ae1b0 100644
--- a/curriculum/challenges/arabic/blocks/lecture-working-with-css-fonts/672bd853c985cdfdeb32f4f9.md
+++ b/curriculum/challenges/arabic/blocks/lecture-working-with-css-fonts/672bd853c985cdfdeb32f4f9.md
@@ -13,6 +13,8 @@ dashedName: what-is-the-text-shadow-property
text-shadow: /* Values */
```
+## قيم إزاحة `X` و `Y`
+
في CSS، يمكنك وصف الظل من خلال مزيج من إزاحة `X`، وإزاحة `Y`، ونصف قطر التمويه، واللون. أولًا، تحتاج إلى تحديد إزاحة `X` و`Y`، التي تمثل المسافة الأفقية والعمودية للظل من النص على التوالي. هذه القيم مطلوبة.
إليك مثالًا على كيفية تطبيق إزاحة `X` و`Y` على الظل. نطبق خاصية `text-shadow` مع إزاحة x مقدارها `3px` وإزاحة y مقدارها `2px`:
@@ -32,7 +34,11 @@ p {
:::
-في المتصفح، سيبدو النص والظل متشابهين لكن يمكننا أيضًا تخصيص لون الظل بتحديد القيمة قبل أو بعد الإزاحة. لنحدد لون الظل. سنستخدم لونًا سداسيًا عشريًا هنا لكن يمكنك استخدام أي صيغة لون صالحة.
+في المتصفح، سيبدو النص والظل متشابهين.
+
+## إضافة لون إلى الظل
+
+يمكننا أيضًا تخصيص لون الظل بتحديد القيمة قبل أو بعد الإزاحة. لنحدد لون الظل. سنستخدم لونًا سداسيًا هنا لكن يمكنك استخدام أي صيغة لون صالحة.
:::interactive_editor
@@ -66,7 +72,11 @@ p {
:::
-في المتصفح، سيكون للظل لون محدد، لذا يمكننا تمييزه بسهولة عن النص. الآن بعد أن يمكننا التمييز بين الظل والنص، من المهم أيضًا معرفة كيف تؤثر القيم الموجبة والسالبة على إزاحة الظل. القيم الموجبة لإزاحة `X` و`Y` تحرك الظل إلى اليمين والأسفل على التوالي، بينما القيم السالبة تحرك الظل إلى اليسار والأعلى. إليك مثالًا يستخدم القيم السالبة بدلاً من ذلك:
+في المتصفح، سيكون للظل لون محدد، لذا يمكننا تمييزه بسهولة عن النص.
+
+## قيم الإزاحة الموجبة والسالبة
+
+الآن بعد أن يمكننا التمييز بين الظل والنص، من المهم أيضًا معرفة كيف تؤثر القيم الموجبة والسالبة على إزاحة الظل. القيم الموجبة لإزاحة `X` و `Y` تحرك الظل إلى اليمين والأسفل على التوالي، بينما القيم السالبة تحرك الظل إلى اليسار والأعلى. إليك مثالًا يستخدم القيم السالبة بدلاً من ذلك:
:::interactive_editor
@@ -83,7 +93,11 @@ p {
:::
-الآن سيتحرك الظل إلى اليسار والأعلى بالنسبة للنص. رائع. لكن الظل لا يبدو جيدًا جدًا، لأنه يشبه النص الأصلي تمامًا لكنه موضوع خلفه. لجعله يبدو أجمل، نحتاج إلى إضافة قيمة ثالثة، وهي نصف قطر التمويه. هذه القيمة اختيارية لكنها تجعل الظل يبدو أكثر نعومة ودقة. القيمة الافتراضية لنصف قطر التمويه هي صفر. كلما زادت القيمة، زاد التمويه، مما يعني أن الظل يصبح أخف.
+الآن سيتحرك الظل إلى اليسار والأعلى بالنسبة للنص. ممتاز.
+
+## نصف قطر التمويه
+
+لكن الظل لا يبدو جيدًا جدًا، لأنه يشبه النص الأصلي تمامًا لكنه موضوع خلفه. لجعله يبدو أجمل، نحتاج إلى إضافة قيمة ثالثة، وهي نصف قطر التمويه. هذه القيمة اختيارية لكنها تجعل الظل يبدو أكثر نعومة ودقة. القيمة الافتراضية لنصف قطر التمويه هي صفر. كلما زادت القيمة، زاد التمويه، مما يعني أن الظل يصبح أخف.
هنا، نحدد نصف قطر التمويه إلى `3px` ونعود إلى القيم الموجبة للإزاحة:
@@ -104,6 +118,8 @@ p {
الآن بدأ الظل يبدو كظل حقيقي. أصبح أكثر تمويهًا ودقة، لذا يمكننا التركيز على النص الرئيسي بينما يضيف الظل بعض الأناقة في الخلفية. من هنا، يمكننا تعديل القيم قليلاً حتى نجد مزيجًا من الإزاحة واللون ونصف قطر التمويه يناسب احتياجاتنا.
+## إضافة عدة ظلال
+
من المفيد أيضًا معرفة أن النص يمكن أن يحتوي على أكثر من ظل واحد. فقط اكتبهم في نفس خاصية `text-shadow` مفصولين بفواصل. سيتم تطبيقهم على طبقات، من الأمام إلى الخلف، مع الظل الأول في الأعلى.
إليك مثالًا على فقرة بها ثلاثة ظلال مطبقة على طبقات. لاحظ أن كل هذه الظلال معرفة في نفس خاصية `text-shadow` ومفصولة بفواصل:
diff --git a/curriculum/challenges/arabic/blocks/lecture-working-with-css-transforms-overflow-and-filters/672bccc8ea33bad87abb3c56.md b/curriculum/challenges/arabic/blocks/lecture-working-with-css-transforms-overflow-and-filters/672bccc8ea33bad87abb3c56.md
index b2b505a7677..d60f0e22263 100644
--- a/curriculum/challenges/arabic/blocks/lecture-working-with-css-transforms-overflow-and-filters/672bccc8ea33bad87abb3c56.md
+++ b/curriculum/challenges/arabic/blocks/lecture-working-with-css-transforms-overflow-and-filters/672bccc8ea33bad87abb3c56.md
@@ -19,6 +19,8 @@ dashedName: what-is-the-difference-between-content-box-and-border-box
قيمة الخاصية `box-sizing` هي `content-box` افتراضيًا، لكن يمكنك اختيار `border-box` إذا احتجت لذلك. سنستعرض أولًا `content-box` ثم ننتقل إلى `border-box`.
+## مراجعة نموذج الصندوق في CSS
+
لفهم كيفية عمل النماذج، يجب أن تكون على دراية بالمفاهيم الأربعة الأساسية من نموذج الصندوق في CSS. دعنا نراجعها بسرعة.
- مساحة المحتوى هي المساحة التي يشغلها محتوى العنصر.
@@ -26,6 +28,8 @@ dashedName: what-is-the-difference-between-content-box-and-border-box
- الحدود هي الإطار الذي يحيط بمساحة المحتوى والحشو.
- الهامش هو المساحة خارج الحدود التي تفصل العنصر عن العناصر الأخرى.
+## كيف يعمل `content-box`
+
في نموذج `content-box`، العرض والارتفاع الذي تحدده لعنصر يحدد أبعاد مساحة المحتوى، لكنه لا يشمل الحشو أو الحدود أو الهامش. استخدم `content-box` عندما تحتاج إلى تحكم دقيق في مساحة المحتوى. عند تعيين `width` و `height`، فأنت تحدد فقط حجم المحتوى نفسه.
لإيجاد العرض الكلي للعنصر، تحتاج إلى إضافة الحشو الأيسر والأيمن، والحدود اليسرى واليمنى. وبالمثل، يمكن إيجاد الارتفاع الكلي للعنصر بإضافة ارتفاع المحتوى، الحشو العلوي والسفلي، والحدود العلوية والسفلية.
@@ -52,10 +56,14 @@ div {
في هذه الحالة، إذا استخدمنا `content-box` ستكون مساحة المحتوى 300px في 200px. الحجم الكلي المعروض يشمل الحشو والحدود — على سبيل المثال، العرض الكلي = 300px (المحتوى) + 40px (الحشو) + 8px (الحدود) = 348px؛ ويتم حساب الارتفاع الكلي بنفس الطريقة.
+## كيف يعمل `border-box`
+
رائع! الآن دعنا نستعرض `border-box`. هو مختلف لأنه العرض والارتفاع الذي تحدده يشمل محتوى العنصر، الحشو، والحدود (لكن لا يشمل الهامش). استخدم `border-box` عندما تريد أن يبقى الحجم الكلي للعنصر ثابتًا حتى لو تغير الحشو أو الحدود — وهذا مفيد غالبًا في التخطيطات المتجاوبة.
مع `border-box`، يُدرج الحشو والحدود داخل الحجم المحدد للعنصر. يصبح `width` و `height` اللذان تحددهما هما الأبعاد الكلية للعنصر: المحتوى + الحشو + الحدود؛ بينما يبقى الهامش مستبعدًا.
+## مقارنة بين النموذجين
+
في المثال التالي، هناك عنصران `div` لهما نفس الأبعاد لكن بقيم مختلفة لـ `box-sizing`. لاحظ كيف يؤدي هذا إلى أحجام كلية مختلفة عند العرض في المتصفح:
:::interactive_editor
diff --git a/curriculum/challenges/arabic/blocks/lecture-working-with-dates/6733aafb9c0802f66cc1e056.md b/curriculum/challenges/arabic/blocks/lecture-working-with-dates/6733aafb9c0802f66cc1e056.md
index 3f5707e56ce..e67df741d08 100644
--- a/curriculum/challenges/arabic/blocks/lecture-working-with-dates/6733aafb9c0802f66cc1e056.md
+++ b/curriculum/challenges/arabic/blocks/lecture-working-with-dates/6733aafb9c0802f66cc1e056.md
@@ -34,21 +34,31 @@ console.log(now);
بالنسبة للوقت، يستخدم تنسيق الوقت العسكري، لذا `14:30` تعني `2:30 PM`. `GMT-0700` هي إزاحة المنطقة الزمنية، و`Pacific Daylight Time` هو اسم المنطقة الزمنية.
-يمكنك أيضًا تمرير تاريخ ووقت محددين إلى كائن `Date` بتوفير قيم السنة والشهر واليوم والساعة والدقيقة والثانية والميلي ثانية كمعلمات.
+إليك مثالًا على إنشاء كائن `Date` جديد باستخدام سلسلة نصية لتاريخ محدد:
-إليك مثال على إنشاء كائن `Date` جديد بتاريخ ووقت محددين:
+:::interactive_editor
+
+```js
+const dateFromString = new Date("July 4, 1776 12:00:00");
+
+console.log(dateFromString);
+```
+
+:::
+
+يمكنك أيضًا تمرير تاريخ ووقت محددين إلى كائن `Date` عبر توفير قيم السنة والشهر واليوم والساعة والدقيقة والثانية والميلي ثانية كمعلمات:
:::interactive_editor
```js
-const specificDate = new Date("July 4, 1776 12:00:00");
+const dateFromArguments = new Date(1776, 6, 4, 12, 0, 0, 0);
-console.log(specificDate);
+console.log(dateFromArguments);
```
:::
-هذا مفيد عندما تحتاج إلى العمل مع تاريخ ووقت محددين بدلاً من التاريخ والوقت الحاليين. يجب أن يكون الإدخال دائمًا سلسلة نصية، ويجب أن يكون التنسيق قابلاً للتعرف عليه من قبل كائن `Date`.
+هذا مفيد عندما تحتاج إلى العمل مع تاريخ ووقت محددين بدلاً من التاريخ والوقت الحاليين.
للحصول على التاريخ والوقت الحاليين، يمكنك استخدام الطريقة `Date.now()`، التي تُرجع عدد المللي ثانية منذ `January 1, 1970, 00:00:00 UTC`. يُعرف هذا باسم وقت العصر اليونكس.
diff --git a/curriculum/challenges/arabic/blocks/lecture-working-with-file-systems/672ac403a9ba7732b31c6480.md b/curriculum/challenges/arabic/blocks/lecture-working-with-file-systems/672ac403a9ba7732b31c6480.md
index c6b39864746..61e28d0fc43 100644
--- a/curriculum/challenges/arabic/blocks/lecture-working-with-file-systems/672ac403a9ba7732b31c6480.md
+++ b/curriculum/challenges/arabic/blocks/lecture-working-with-file-systems/672ac403a9ba7732b31c6480.md
@@ -51,7 +51,7 @@ WOFF هو تنسيق خط حديث، صُمم خصيصًا لأغراض تطوي
عادةً ما تُكتب هذه الملفات بتنسيق يسمى Markdown. باستخدام Markdown، يمكنك إنشاء مستندات منظمة تحتوي على عناوين، وعناوين فرعية، وروابط، وصور، وقوائم، وأكثر. لملفات Markdown امتداد `.md` أو `.markdown`.
-هنا يمكنك العثور على ملف `README` لمستودع freeCodeCamp على GitHub: https://github.com/freeCodeCamp/freeCodeCamp/blob/main/README.md
+هنا يمكنك العثور على ملف `README` لمستودع freeCodeCamp على GitHub: `https://github.com/freeCodeCamp/freeCodeCamp/blob/main/README.md`
يمكنك إنشاء هذا الهيكل التفصيلي والتنسيق باستخدام Markdown.
diff --git a/curriculum/challenges/arabic/blocks/lecture-working-with-node-core-modules/695cc6a5eefd305381ec90bc.md b/curriculum/challenges/arabic/blocks/lecture-working-with-node-core-modules/695cc6a5eefd305381ec90bc.md
index ea50037c1ca..7dbba8a46c3 100644
--- a/curriculum/challenges/arabic/blocks/lecture-working-with-node-core-modules/695cc6a5eefd305381ec90bc.md
+++ b/curriculum/challenges/arabic/blocks/lecture-working-with-node-core-modules/695cc6a5eefd305381ec90bc.md
@@ -148,7 +148,7 @@ async function readFileContent() {
const fileContent = await fs.readFile("article.md", "utf8");
console.log("File content:", fileContent);
} catch (err) {
- console.log("File read successfully");
+ console.error("Error reading file:", err);
}
}
@@ -169,7 +169,7 @@ async function readFileContent() {
const fileContent = await fs.readFile("article.md");
console.log("File content:", fileContent);
} catch (err) {
- console.log("File read successfully");
+ console.error("Error reading file:", err);
}
}
diff --git a/curriculum/challenges/arabic/blocks/lecture-working-with-nodejs-and-event-driven-architecture/68ff6d2f232c60f0fa68ef86.md b/curriculum/challenges/arabic/blocks/lecture-working-with-nodejs-and-event-driven-architecture/68ff6d2f232c60f0fa68ef86.md
index 7f64bd8303a..a720c601a4e 100644
--- a/curriculum/challenges/arabic/blocks/lecture-working-with-nodejs-and-event-driven-architecture/68ff6d2f232c60f0fa68ef86.md
+++ b/curriculum/challenges/arabic/blocks/lecture-working-with-nodejs-and-event-driven-architecture/68ff6d2f232c60f0fa68ef86.md
@@ -19,11 +19,11 @@ dashedName: what-is-node-and-what-are-some-differences-between-the-browser-and-n
تملك JavaScript على جانب العميل هذه القيود لأنها صُممت في الأصل لتعمل حصريًا على متصفحات الويب.
-توفر متصفحات الويب بيئة العمل اللازمة لتشغيل شفرة JavaScript، بما في ذلك محرك JavaScript. كما توفر وصولًا إلى نموذج كائن المستند (DOM)، حتى تتمكن من الوصول إلى عناصر HTML في شفرتك.
+توفر متصفحات الويب بيئة العمل اللازمة لتشغيل شفرة JavaScript، بما في ذلك محرك JavaScript. كما توفر وصولًا إلى نموذج كائن المستند (DOM)، بحيث يمكنك الوصول إلى عناصر HTML في شفرتك.
-في السابق، لم نكن نستطيع تشغيل JavaScript خارج المتصفح، لكن الآن يمكننا ذلك باستخدام Node.js.
+لفترة طويلة، كان استخدام JavaScript مقتصرًا تقريبًا على المتصفحات فقط، لكن مع Node.js يمكنك تشغيلها خارج المتصفح أيضًا.
-Node.js هي بيئة تشغيل JavaScript. تُعرف رسميًا بأنها "بيئة تشغيل JavaScript مفتوحة المصدر وعبر المنصات".
+Node.js هي بيئة تشغيل JavaScript. تُعرف رسميًا بأنها "بيئة تشغيل JavaScript مفتوحة المصدر وعبر المنصات."
لنرَ ماذا يعني هذا:
@@ -43,7 +43,7 @@ Node.js هي بيئة تشغيل JavaScript. تُعرف رسميًا بأنها
على سبيل المثال، من المتصفح يمكنك الوصول إلى واجهة برمجة تطبيقات DOM، لكن هناك قيود على الوصول إلى نظام الملفات المحلي. بالمقابل، من بيئة تشغيل Node يمكنك الوصول إلى معظم موارد النظام، بما في ذلك نظام الملفات، لكن ليس إلى DOM.
-كلتا بيئتي JavaScript توفران كائنًا عالميًا. في بيئة تشغيل JavaScript في المتصفح، يُسمى هذا الكائن `window`. يوفر كائن `window` وصولًا إلى وظائف متعلقة بالمتصفح، مثل الوصول إلى طرق التلاعب بـ DOM، وإدارة الكوكيز، والتعامل مع أحداث المتصفح. في بيئة Node.js، يُسمى هذا الكائن العالمي `global`. يوفر كائن `global` وصولًا إلى وظائف خاصة بـ Node.js، مثل الوحدات المدمجة للعمل مع الملفات المحلية، والشبكات، والتفاعل مع نظام التشغيل.
+تقدم بيئتا تشغيل JavaScript كائنًا عالميًا. في بيئة تشغيل JavaScript الخاصة بالمتصفح، يُسمى هذا الكائن `window`. يوفر كائن `window` هذا وصولًا إلى وظائف متعلقة بالمتصفح، مثل الوصول إلى طرق التلاعب بـ DOM، وإدارة ملفات تعريف الارتباط، والتعامل مع أحداث المتصفح. في بيئة Node.js، يُسمى هذا الكائن العالمي `global`. يوفر كائن `global` وصولًا إلى وظائف خاصة بـ Node.js، مثل الوحدات المدمجة للعمل مع الملفات المحلية، والشبكات، والتفاعل مع نظام التشغيل.
أخيرًا، فرق مهم آخر هو أنه يمكنك اختيار إصدار Node.js الذي تريد استخدامه في خادمك. لكن لا يمكنك التحكم في إصدار بيئة المتصفح التي سيستخدمها زوار موقعك.
@@ -103,7 +103,7 @@ Node.js هي بيئة تشغيل JavaScript. تُعرف رسميًا بأنها
---
-بيئة تشغيل Node تستخدم كائن window ككائن عالمي، بينما المتصفحات تستخدم الكائن global.
+بيئة تشغيل Node تستخدم الكائن `window` ككائنها العالمي، بينما تستخدم المتصفحات الكائن `global`.
### --feedback--
diff --git a/curriculum/challenges/arabic/blocks/lecture-working-with-nodejs-and-event-driven-architecture/68ff6d372ad364f285f0522e.md b/curriculum/challenges/arabic/blocks/lecture-working-with-nodejs-and-event-driven-architecture/68ff6d372ad364f285f0522e.md
index daac5ba87c4..6557f43ef51 100644
--- a/curriculum/challenges/arabic/blocks/lecture-working-with-nodejs-and-event-driven-architecture/68ff6d372ad364f285f0522e.md
+++ b/curriculum/challenges/arabic/blocks/lecture-working-with-nodejs-and-event-driven-architecture/68ff6d372ad364f285f0522e.md
@@ -11,7 +11,7 @@ dashedName: what-are-the-advantages-and-disadvantages-to-using-node-on-the-back-
بنية Node تمثل ميزة أخرى. فهي تعتمد على بنية غير حابسة، مدفوعة بالأحداث، وهي رائعة لتطوير التطبيقات في الوقت الحقيقي، حيث تكون الاستجابة والكفاءة ضرورية لخلق تجربة مستخدم جيدة.
-هنا يصبح مفهوم "الخيوط" مهمًا جدًا. الخيط هو مسار تنفيذ داخل عملية، مثل برنامج كمبيوتر يعمل حاليًا.
+هنا يصبح مفهوم "الخيوط" مهمًا جدًا. الخيط هو مسار تنفيذ داخل عملية، أي برنامج كمبيوتر يعمل حاليًا.
تعتمد بنية Node على خيط واحد وحلقة أحداث يمكنها التعامل بفعالية مع عدد كبير من الطلبات المتزامنة وعمليات الإدخال/الإخراج. هذا يجعلها مثالية للتطبيقات التي تتطلب معالجة طلبات متعددة في نفس الوقت.
@@ -25,13 +25,13 @@ dashedName: what-are-the-advantages-and-disadvantages-to-using-node-on-the-back-
من ناحية أخرى، لدى Node.js بعض العيوب أو القيود التي يجب أن تكون على علم بها.
-كما تعلمت، فإنه يشغل خيطًا واحدًا فقط في كل مرة، مما يعني أنه يمكنه التعامل مع عملية واحدة فقط في كل مرة. بينما تسمح بنيته بأن يكون فعالًا في التعامل مع الطلبات المتزامنة، قد تحجب المهام التي تستهلك وحدة المعالجة المركزية الخيط الرئيسي وتؤدي إلى مشاكل في الأداء.
+كما تعلم، يشغل JavaScript الخاص بك على خيط واحد، مما يعني أنه يمكنه تنفيذ جزء واحد فقط من الشفرة في كل مرة. بينما تسمح بنيته بأن يكون فعالًا في التعامل مع الطلبات المتزامنة (المتزامنة في الوقت نفسه)، قد تؤدي المهام التي تستهلك وحدة المعالجة المركزية إلى حجب الخيط الرئيسي وتسبب مشاكل في الأداء.
تشمل أمثلة المهام التي تستهلك وحدة المعالجة المركزية العمليات الرياضية المعقدة، ومعالجة الصور والفيديو، والتشفير. هناك طرق للتغلب على ذلك، لكنها عادةً ما تزيد من تعقيد التطبيق.
-تعتمد Node.js أيضًا على البرمجة غير المتزامنة. في البرمجة غير المتزامنة، تبدأ مهمة قد تستغرق وقتًا طويلاً للتنفيذ، ولكن بدلاً من الانتظار حتى تكتمل، يستمر البرنامج الرئيسي في العمل بينما تعمل المهمة غير المتزامنة بالتوازي. عند اكتمال المهمة، يتعامل البرنامج مع النتيجة.
+في البرمجة غير المتزامنة، تبدأ مهمة قد تستغرق وقتًا طويلاً للتنفيذ، ولكن بدلاً من الانتظار حتى تكتمل، يستمر البرنامج الرئيسي في العمل بينما تعمل المهمة غير المتزامنة في الخلفية.
-غالبًا ما تتضمن هذه العملية ما نعرفه بـ "الاستدعاءات الراجعة"، وهي دوال تحدد ما يحدث عند اكتمال العمليات غير المتزامنة. الطبيعة غير المتزامنة لـ Node.js قد تجعل الشفرة أكثر صعوبة في القراءة والفهم وتصحيح الأخطاء.
+غالبًا ما تتضمن هذه العملية ما نعرفه بـ "استدعاءات راجعة"، وهي دوال تحدد ما يحدث عند اكتمال العمليات غير المتزامنة. الطبيعة غير المتزامنة لـ Node.js قد تجعل الشفرة أكثر صعوبة في القراءة والفهم ومعالجة الأخطاء.
وأخيرًا، يجب أن تكون حذرًا عند اختيار الحزم من `npm`، مدير حزم Node، لأن بعضها قد لا يُحافظ عليه باستمرار، مما قد يُدخل ثغرات أمنية في تطبيقك. كمطور، يجب أن تُقيّم كل حزمة بعناية وتتحقق مما إذا كانت تتبع أفضل الممارسات في الجودة والأمان.
diff --git a/curriculum/challenges/arabic/blocks/lecture-working-with-nodejs-and-event-driven-architecture/68ff6d39d7ed9ef36ff281f3.md b/curriculum/challenges/arabic/blocks/lecture-working-with-nodejs-and-event-driven-architecture/68ff6d39d7ed9ef36ff281f3.md
index 1584230c86b..1fabcd72a2f 100644
--- a/curriculum/challenges/arabic/blocks/lecture-working-with-nodejs-and-event-driven-architecture/68ff6d39d7ed9ef36ff281f3.md
+++ b/curriculum/challenges/arabic/blocks/lecture-working-with-nodejs-and-event-driven-architecture/68ff6d39d7ed9ef36ff281f3.md
@@ -17,7 +17,7 @@ dashedName: how-can-you-install-node-on-your-computer
على macOS وLinux، يمكنك تثبيت NVM مباشرة عبر سكربت شل.
-لكن بالنسبة لـ macOS، لاحظ أن الوثائق الرسمية لـ NVM تشير إلى أنه "يجب تثبيت أدوات سطر أوامر Xcode يدويًا قبل تشغيل سكربت التثبيت، وإلا سيفشل التثبيت."
+لكن بالنسبة لنظام macOS، لاحظ أن الوثائق الرسمية لـ NVM تشير إلى أنه "يجب تثبيت أدوات سطر أوامر Xcode يدويًا قبل تشغيل سكربت التثبيت، وإلا سيفشل التثبيت."
على macOS، يمكنك تثبيت أدوات سطر أوامر Xcode بتشغيل هذا الأمر في الطرفية:
@@ -41,7 +41,7 @@ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
```
-للحصول على أحدث إصدار من NVM في الوقت الذي تقرأ فيه هذا المقال، يرجى الرجوع إلى الوثائق الرسمية لـ NVM: `https://github.com/nvm-sh/nvm?tab=readme-ov-file#install--update-script`. هناك ستجد هذه الأوامر مع أحدث رقم إصدار.
+للحصول على أحدث إصدار من NVM في الوقت الذي تقرأ فيه هذا الدرس، يرجى الرجوع إلى الوثائق الرسمية لـ NVM: `https://github.com/nvm-sh/nvm?tab=readme-ov-file#install--update-script`. هناك ستجد هذه الأوامر مع أحدث رقم إصدار.
قد تحتاج إلى إعادة تشغيل الطرفية بعد اكتمال العملية لتحميل الأمر الجديد والإعدادات الجديدة.
@@ -101,7 +101,7 @@ node -v
الإصدارات الرسمية من NVM تدعم Windows فقط في حالات محددة. إذا كان لديك Windows Subsystem for Linux (WSL) مُثبت على جهازك، يمكنك اتباع دليل macOS/Linux أعلاه لتثبيت واستخدام NVM.
-لكن بالنسبة لـ Windows نفسه، هناك بعض البدائل. أحدها هو `nvm-windows`، أداة لإدارة إصدارات Node.js على Windows. هذا مشروع منفصل تمامًا عن مشروع NVM الرسمي. لكن هدف هذه الأدوات هو نفسه — مساعدتك على العمل مع إصدارات متعددة من Node.js على نفس الجهاز.
+ومع ذلك، بالنسبة لنظام Windows نفسه، هناك بعض البدائل. أحدها هو `nvm-windows`، أداة لإدارة إصدارات Node.js على Windows. هذا مشروع منفصل تمامًا عن مشروع NVM الرسمي. لكن هدف هذه الأدوات هو نفسه: مساعدتك على العمل مع إصدارات متعددة من Node.js على نفس الجهاز.
قبل تثبيت `nvm-windows`، يجب أن تعرف أن المستودع الرسمي يوصي بإلغاء تثبيت أي تثبيت سابق لـ Node قبل تثبيت NVM على Windows. إذا كانت هذه هي المرة الأولى التي تثبت فيها Node.js، فستكون الأمور على ما يرام. أما إذا كان لديك إصدارات أخرى مثبتة، فمن الأفضل إلغاء تثبيتها أولًا.
@@ -155,7 +155,7 @@ nvm use 20
يمكنك أيضًا التحقق من الإصدار الحالي لـ Node.js بهذا الأمر:
-```bash
+```powershell
node -v
```
@@ -165,25 +165,25 @@ node -v
أيضًا، بينما تعمل كل هذه الأوامر مع NVM المثبت على macOS/Linux، بما في ذلك WSL، قد تعمل بشكل مختلف أو قد لا تعمل على الإطلاق مع `nvm-windows`. سنوفر أوامر بديلة لـ `nvm-windows` متى أمكن.
-### كيفية تعديل سياسة تنفيذ Powershell
+### كيفية تعديل سياسة تنفيذ PowerShell
-إذا كنت تستخدم Windows وتتابع مع Powershell و`nvm-windows`، قد تحتاج إلى تعديل سياسة تنفيذ Powershell. السياسة الافتراضية لـ Powershell هي `Restricted`، وهي إجراء أمني لمنع تشغيل السكربتات.
+إذا كنت تستخدم Windows وتتابع مع PowerShell و`nvm-windows`، قد تحتاج إلى تعديل سياسة تنفيذ PowerShell. السياسة الافتراضية لتنفيذ PowerShell هي `Restricted`، وهي إجراء أمني لمنع تشغيل السكربتات.
-أولًا، شغّل Powershell كمسؤول بالنقر بزر الفأرة الأيمن على Powershell، ثم النقر على “تشغيل كمسؤول“.
+أولًا، شغّل PowerShell كمسؤول بالنقر بزر الفأرة الأيمن على PowerShell، ثم النقر على "تشغيل كمسؤول".
-ثم، لرؤية سياسة التنفيذ الحالية لجلسة Powershell الحالية، شغّل الأمر التالي:
+بعدها، لرؤية سياسة التنفيذ الحالية لجلسة PowerShell الحالية، شغّل الأمر التالي:
```powershell
Get-ExecutionPolicy
```
-أخيرًا، لتعيين سياسة تنفيذ Powershell إلى `RemoteSigned`، التي تسمح بتشغيل السكربتات المحلية و`npm`، استخدم الأمر التالي:
+أخيرًا، لتعيين سياسة تنفيذ PowerShell إلى `RemoteSigned`، التي تسمح بتشغيل السكربتات المحلية و`npm`، استخدم الأمر التالي:
```powershell
Set-ExecutionPolicy RemoteSigned
```
-بعد تشغيل الأمر أعلاه، يمكنك إغلاق نافذة Powershell الخاصة بالمسؤول، وفتح نافذة Powershell عادية.
+بعد تشغيل الأمر أعلاه، يمكنك إغلاق نافذة PowerShell الخاصة بالمسؤول، وفتح نافذة PowerShell عادية بدون صلاحيات المسؤول.
### عرض جميع الإصدارات
@@ -271,7 +271,7 @@ node -v
npm -v
```
-### تشغيل ملف JavaScript
+### تشغيل ملف جافاسكريبت
يشغل هذا الأمر ملف JavaScript الذي تحدده في بيئة تشغيل Node.js النشطة حاليًا:
diff --git a/curriculum/challenges/arabic/blocks/lecture-working-with-operator-behavior/6732719e2e3ad4d947410b65.md b/curriculum/challenges/arabic/blocks/lecture-working-with-operator-behavior/6732719e2e3ad4d947410b65.md
index 79489a8da67..fc9c680c04a 100644
--- a/curriculum/challenges/arabic/blocks/lecture-working-with-operator-behavior/6732719e2e3ad4d947410b65.md
+++ b/curriculum/challenges/arabic/blocks/lecture-working-with-operator-behavior/6732719e2e3ad4d947410b65.md
@@ -11,7 +11,13 @@ dashedName: how-does-operator-precedence-work
تحدد أسبقية العمليات ترتيب تنفيذ العمليات في التعبير. تُنفذ العوامل ذات الأسبقية الأعلى قبل تلك ذات الأسبقية الأقل. فكر في أسبقية العمليات كما في الرياضيات، حيث تتم عملية القسمة والضرب قبل الجمع والطرح.
-بدون اتباع هذه القاعدة، ستعطي المعادلات الأساسية إجابة خاطئة. يعمل JavaScript بنفس الطريقة. لديه قواعده الخاصة لتحديد أي العوامل تأتي أولًا، ثانيًا، وهكذا. على سبيل المثال، انظر إلى التعبير أدناه:
+بدون اتباع هذه القاعدة، ستعطي المعادلات الأساسية إجابة خاطئة. جافاسكريبت تعمل بنفس الطريقة. لديها قواعدها الخاصة لتحديد أي العوامل تأتي أولاً، ثم الثاني، وهكذا.
+
+## الأسبقية في التعبيرات الحسابية
+
+### أسبقية الضرب
+
+على سبيل المثال، ألق نظرة على التعبير أدناه:
:::interactive_editor
@@ -25,36 +31,42 @@ console.log(result); // 14
لو أن JavaScript نفذ هذا التعبير من اليسار إلى اليمين، كنت تتوقع أن يكون `2 + 3 = 5`، ثم `5 * 4 = 20`. لكن لأن الضرب له أسبقية أعلى من الجمع، ينفذ JavaScript الجزء `3 * 4` أولًا، مما ينتج `2 + 12 = 14`.
-أحيانًا، قد تريد أن تُنفذ أجزاء معينة من التعبير أولًا بغض النظر عن قواعد الأسبقية. يمكنك استخدام الأقواس العادية، `()`, لفعل ذلك. أي شيء داخل الأقواس يُنفذ أولًا مهما كان. دعنا نجعل الجزء `2 + 3` من المثال السابق يُنفذ أولًا:
+### أسبقية القسمة
+
+عامل القسمة له أسبقية أعلى من الجمع أو الطرح أيضًا:
:::interactive_editor
```js
-const result = (2 + 3) * 4;
+const result = 2 + 6 / 3;
-console.log(result); // 20
+console.log(result); // 4
```
:::
-في المثال أعلاه، تجبر الأقواس JavaScript على تنفيذ `2 + 3` أولًا، ثم ضرب الناتج في `4`. هذا يعطيك `20` بدلًا من `14`.
+لو أن JavaScript نفذ هذا التعبير من اليسار إلى اليمين، قد تتوقع أن يكون `2 + 6 = 8`، ثم `8 / 3 = 2.67`. لكن بما أن القسمة لها أسبقية أعلى من الجمع، ينفذ JavaScript القسمة أولًا: `6 / 3 = 2`، ثم يضيف `2 + 2`، مما يعطي النتيجة `4`.
-عامل القسمة له أسبقية أعلى من الجمع أو الطرح أيضًا:
+### استخدام الأقواس العادية لتجاوز الأسبقية
+
+أحيانًا، قد ترغب في تنفيذ أجزاء معينة من التعبير أولاً، بغض النظر عن قواعد الأسبقية. يمكنك استخدام الأقواس العادية، `()`, للقيام بذلك. أي شيء داخل الأقواس يُحلل أولاً مهما كان. دعنا نجعل الجزء `2 + 3` من مثال الضرب يُحلل أولاً:
:::interactive_editor
```js
-const result = 2 + 6 / 3;
+const result = (2 + 3) * 4;
-console.log(result); // 4
+console.log(result); // 20
```
:::
-لو أن JavaScript نفذ هذا التعبير من اليسار إلى اليمين، قد تتوقع أن يكون `2 + 6 = 8`، ثم `8 / 3 = 2.67`. لكن بما أن القسمة لها أسبقية أعلى من الجمع، ينفذ JavaScript القسمة أولًا: `6 / 3 = 2`، ثم يضيف `2 + 2`، مما يعطي النتيجة `4`.
+في المثال أعلاه، تجبر الأقواس JavaScript على تنفيذ `2 + 3` أولًا، ثم ضرب الناتج في `4`. هذا يعطيك `20` بدلًا من `14`.
لذا، في كل من الضرب والقسمة، ستحدث هذه العمليات دائمًا قبل الجمع والطرح ما لم تستخدم الأقواس لتغيير الترتيب. فماذا يحدث إذا كانت العوامل لها نفس الأسبقية؟ يستخدم JavaScript الترابط لتحديد ترتيب التنفيذ.
+## فهم الترابط
+
الترابط هو ما يخبر JavaScript ما إذا كان ينفذ العوامل من اليسار إلى اليمين أو من اليمين إلى اليسار. بالنسبة لمعظم العوامل مثل الجمع والضرب، يكون الترابط من اليسار إلى اليمين. لذا، يعالج JavaScript هذه العوامل من أقصى اليسار في التعبير إلى اليمين:
:::interactive_editor
@@ -84,6 +96,8 @@ console.log(a + b); // 10
في المثال أعلاه، يعين JavaScript القيمة `5` إلى `b` أولًا، ثم يعين `b` (التي أصبحت الآن `5`) إلى `a`.
+### عامل الأس
+
عامل الأس أيضًا له ترابط من اليمين إلى اليسار:
:::interactive_editor
diff --git a/curriculum/challenges/arabic/blocks/lecture-working-with-regular-expressions/6733c5e54e3a154c8078ed48.md b/curriculum/challenges/arabic/blocks/lecture-working-with-regular-expressions/6733c5e54e3a154c8078ed48.md
index d39bee80543..1d5b0c7c1a8 100644
--- a/curriculum/challenges/arabic/blocks/lecture-working-with-regular-expressions/6733c5e54e3a154c8078ed48.md
+++ b/curriculum/challenges/arabic/blocks/lecture-working-with-regular-expressions/6733c5e54e3a154c8078ed48.md
@@ -17,6 +17,8 @@ const regex = /^\d\d\d\d$/;
وهذا يعمل: سيطابق أربعة أحرف رقمية. لكن بدلًا من كتابة نفس الصنف عدة مرات، يمكنك إعطاؤه محددًا كميًا.
+## المحددات الكمية الدقيقة
+
تُعرف المحددات الكمية بأقواس متعرجة تحتوي على رقم أو رقمين. دعنا نستخدم محددًا كميًا في نمطنا:
```js
@@ -40,6 +42,8 @@ console.log(regex.test("1234567")); // false
النمط يطابق فقط السلسلة التي تحتوي على أربعة أرقام بالضبط، لأننا استخدمنا وسم الرابط ووسم الرابط للنهاية، ومحددنا الكمي يسمح بأربعة أرقام فقط بالضبط. لكن ربما رمز التعريف يحتاج فقط إلى حد أدنى من أربعة أرقام.
+## المحددات الكمية للحد الأدنى والحد الأقصى
+
للسماح بأربعة أرقام أو أكثر، أضف فاصلة بعد الرقم في المحدد الكمي:
```js
@@ -84,6 +88,10 @@ console.log(regex.test("1234567")); // false
لاحظ أنه لا يمكنك استخدام هذه الصيغة لتحديد الحد الأقصى فقط: يجب دائمًا تحديد الحد الأدنى. لكن إذا حددت الحد الأدنى بـ `1`، يمكنك تحقيق نفس النتيجة فعليًا.
+## المحددات الكمية المختصرة
+
+### المحدد الكمي علامة الاستفهام (`?`)
+
تلقينا متطلبات محدثة من المستخدمين. يمكن الآن أن تبدأ الرموز بحرف اختياريًا. نعرف بالفعل صنف الحرف لذلك، فلنضيفه إلى التعبير النمطي:
```js
@@ -122,6 +130,8 @@ console.log(regex.test("1234567")); // false
نمطنا الآن يسمح بحرف اختياري واحد، يليه من أربعة إلى ستة أرقام.
+### المحدد الكمي النجمة (`*`)
+
للأسف، أدركنا للتو أننا قرأنا المتطلبات بشكل خاطئ. نحتاج للسماح بأي عدد من الحروف قبل الأرقام. يمكننا استخدام محددنا الكمي مع حد أدنى `0` وبدون حد أقصى محدد:
```js
@@ -144,6 +154,8 @@ console.log(regex.test("1234567")); // false
:::
+### المحدد الكمي علامة الجمع (`+`)
+
الآن نطابق بنجاح أي معرف يحتوي على صفر أو أكثر من الحروف متبوعة بأربعة إلى ستة أرقام. لكن تبين أن هذا يتسبب في تعطل نظامنا: يجب علينا فعليًا أن نطلب وجود حرف واحد على الأقل.
مرة أخرى، يمكننا استخدام محدد كمي بحد أدنى واحد وبدون حد أقصى محدد، أو يمكننا استخدام صيغة خاصة أخرى، وهي رمز الزائد (`+`):
diff --git a/curriculum/challenges/arabic/blocks/lecture-working-with-the-dom-click-events-and-web-apis/673368ccf52205329b729378.md b/curriculum/challenges/arabic/blocks/lecture-working-with-the-dom-click-events-and-web-apis/673368ccf52205329b729378.md
index 696a5c6e069..b4514450098 100644
--- a/curriculum/challenges/arabic/blocks/lecture-working-with-the-dom-click-events-and-web-apis/673368ccf52205329b729378.md
+++ b/curriculum/challenges/arabic/blocks/lecture-working-with-the-dom-click-events-and-web-apis/673368ccf52205329b729378.md
@@ -7,12 +7,16 @@ dashedName: what-is-the-difference-between-innertext-textcontent-and-innerhtml
# --interactive--
+## نظرة عامة
+
دعنا نتعلم عن `innerText` و `textContent` و `innerHTML`.
هذه خصائص يمكنك الوصول إليها في JavaScript للحصول على محتوى عنصر HTML أو تغييره. رغم أنها قد تبدو متشابهة جدًا في البداية، إلا أن هناك اختلافات رئيسية بينها. اختيار الخاصية المناسبة يعتمد على حالتك الخاصة، فلنبدأ.
لنبدأ بـ `innerText`.
+## فهم innerText
+
`innerText` يمثل النص المرئي داخل عنصر HTML وعناصره التابعة. هذه الخاصية لا تشمل النص المخفي أو وسوم HTML، بل النص المعروض فقط.
على سبيل المثال، هنا ترى عنصر `div` يحتوي على فقرتين:
@@ -109,6 +113,8 @@ container.innerText = "JavaScript is awesome!";
جيد. الآن لنتحدث عن `textContent`.
+## فهم textContent
+
`textContent` يعيد النص العادي داخل العنصر، بما في ذلك كل النص داخل العناصر التابعة.
الفرق الأهم بين `innerText` و `textContent` هو أن `textContent` يعيد دائمًا النص الكامل لعنصر HTML وعناصره التابعة، بغض النظر عن كونه مرئيًا أو مخفيًا.
@@ -181,6 +187,8 @@ container.textContent = "New content";
:::
+## المقارنة مع innerHTML
+
وأخيرًا، لنتحدث عن كيف يختلف `textContent` و `innerText` عن `innerHTML`.
تذكر أنه مع `innerHTML` يمكنك تعيين محتوى HTML الداخلي لعنصر. هذا مفيد لإدخال HTML جديد في DOM بشكل ديناميكي.
@@ -189,6 +197,8 @@ container.textContent = "New content";
لتجنب ذلك، يُنصح باستخدام خاصية `textContent` لإدخال نص عادي بدلاً من ذلك.
+## ملخص الفروقات الرئيسية
+
توفر خصائص `innerText` و `textContent` و `innerHTML` في JavaScript طرقًا مختلفة للوصول إلى محتوى عناصر HTML والتعامل معه. يجب أن تفهم الفروقات بينها إذا كان هدفك العمل بفعالية مع محتوى HTML في JavaScript.
# --questions--
diff --git a/curriculum/challenges/arabic/blocks/machine-learning-with-python-projects/5e46f8d6ac417301a38fb92d.md b/curriculum/challenges/arabic/blocks/machine-learning-with-python-projects/5e46f8d6ac417301a38fb92d.md
index a402fb1b576..5a8a812ccd4 100644
--- a/curriculum/challenges/arabic/blocks/machine-learning-with-python-projects/5e46f8d6ac417301a38fb92d.md
+++ b/curriculum/challenges/arabic/blocks/machine-learning-with-python-projects/5e46f8d6ac417301a38fb92d.md
@@ -10,7 +10,7 @@ dashedName: rock-paper-scissors
في هذا التحدٍّ، ستنشئ برنامجًا للعب حجر ورقة مقص. البرنامج الذي يختار عشوائيًا عادةً ما يفوز بنسبة 50% من الوقت. لتجاوز هذا التحدٍّ، يجب أن يلعب برنامجك مباريات ضد أربعة روبوتات مختلفة، ويفوز بما لا يقل عن 60% من الألعاب في كل مباراة.
-ستعمل على هذا المشروع باستخدام قالب أونا الجاهز.
+ستعمل على هذا المشروع باستخدام شفرة البداية الخاصة بنا.
ما زلنا نطوّر الجزء التفاعلي التعليمي من منهج تعلم الآلة. في الوقت الحالي، عليك استخدام مصادر أخرى لتتعلم كيفية تجاوز هذا التحدٍّ.
diff --git a/curriculum/challenges/arabic/blocks/review-introduction-to-express/6a0354d43d4c00eca38561f7.md b/curriculum/challenges/arabic/blocks/review-introduction-to-express/6a0354d43d4c00eca38561f7.md
index 24a80e0719f..625d2560849 100644
--- a/curriculum/challenges/arabic/blocks/review-introduction-to-express/6a0354d43d4c00eca38561f7.md
+++ b/curriculum/challenges/arabic/blocks/review-introduction-to-express/6a0354d43d4c00eca38561f7.md
@@ -7,53 +7,6 @@ dashedName: review-introduction-to-express
# --description--
-## خدمات الويب وواجهات برمجة التطبيقات
-
-- **API (واجهة برمجة التطبيقات)**: طريقة عامة لتواصل البرمجيات مع بعضها.
-- **خدمة ويب**: نوع محدد من API يستخدم تقنيات الويب مثل HTTP لتبادل البيانات عبر الشبكة. كل خدمة ويب هي API، لكن ليس كل API هي خدمة ويب.
-- **الخصائص الرئيسية لخدمة الويب**: تعمل على خادم، تتيح التواصل بين الآلات، غير مرتبطة بلغة برمجة معينة، غير مرتبطة بمنصة معينة، وتستخدم بروتوكولات ويب قياسية (HTTP/HTTPS، FTP، SMTP).
-- **REST (نقل الحالة التمثيلية)**: أكثر أنواع خدمات الويب استخدامًا اليوم. تتيح الوصول إلى الموارد المحددة بمسارات URL مثل `/users` أو `/users/20`. عادةً ما تكون الاستجابات بصيغة JSON، لكنها قد تكون XML أو نصًا عاديًا.
-- **SOAP (بروتوكول الوصول البسيط للكائنات)**: يستخدم XML فقط. شائع في أنظمة المؤسسات التي تحتاج إلى معايير وأمان أكثر صرامة.
-- **XML-RPC**: يستخدم XML لترميز الطلبات والاستجابات. خفيف الوزن لكنه أقل مرونة من REST.
-- **القسم العلوي `Accept`**: يستخدمه العميل ليخبر الخادم بصيغة الاستجابة المطلوبة، مثل `Accept: application/json`.
-
-## بنية REST
-
-- **عديم الحالة**: يجب أن يحتوي كل طلب على كل المعلومات التي يحتاجها الخادم لمعالجته. الخادم لا يتذكر الطلبات السابقة.
-- **المورد**: قطعة بيانات يمكن الوصول إليها أو تعديلها، محددة بواسطة URL (مثل `/products/1`).
-- **طرق HTTP في REST**:
- - `GET` — استرجاع مورد
- - `POST` — إنشاء مورد جديد
- - `PUT` / `PATCH` — تحديث مورد موجود
- - `DELETE` — حذف مورد
-
-## رموز حالة HTTP
-
-بعد معالجة الطلب، يرد الخادم برمز حالة يشير إلى النتيجة:
-
-- `200` **(OK)**: تم تنفيذ الطلب بنجاح
-- `201` **(Created)**: تم إنشاء مورد جديد
-- `400` **(Bad Request)**: أرسل العميل بيانات غير صحيحة
-- `404` **(Not Found)**: المورد المطلوب غير موجود
-- `500` **(Internal Server Error)**: حدث خطأ في الخادم
-
-### كيف يعمل طلب REST
-
-1. يرسل العميل طلبًا مع طريقة، URL، رؤوس اختيارية، وجسم اختياري.
-2. يتحقق الخادم من صحة الطلب ويحدد المورد.
-3. ينفذ الخادم الإجراء (استرجاع، إنشاء، تحديث، أو حذف).
-4. يبني الخادم استجابة مع رمز حالة وجسم اختياري (عادة JSON).
-5. يرسل الخادم الاستجابة — لا يتم تخزين حالة العميل.
-6. يتحقق العميل من رمز الحالة ويعالج البيانات المستلمة.
-
-## التطبيقات الأحادية مقابل الخدمات المصغرة
-
-- **التطبيق الأحادي**: قاعدة شفرة واحدة كبيرة حيث تتواجد واجهة المستخدم، قاعدة البيانات، وAPI معًا. يعمل جيدًا للتطبيقات الصغيرة لكنه يصبح أصعب في الصيانة والتوسع مع النمو.
-- **الخدمات المصغرة**: بنية تقسم التطبيق الكبير إلى خدمات أصغر مستقلة. كل خدمة تتعامل مع قدرة عمل واحدة (مثل المنتجات، الطلبات، المدفوعات) ويمكن أن يكون لها قاعدة شفرة، قاعدة بيانات، وفريق خاص بها.
-- **كيف تتواصل الخدمات المصغرة**: عبر APIs أو أنظمة قائمة على الرسائل.
-- **مزايا الخدمات المصغرة**: تطوير أسرع، عزل أفضل للأخطاء، وحرية استخدام لغات أو أُطُر مختلفة لكل خدمة.
-- **تحديات الخدمات المصغرة**: تصحيح أخطاء أكثر تعقيدًا، إدارة بنية تحتية أصعب، وزيادة الحمل الشبكي بين الخدمات.
-
## ما هو Express.js؟
- **Express**: إطار عمل ويب بسيط ومرن مبني على Node.js يسهل بناء خوادم الويب وواجهات برمجة التطبيقات.
diff --git a/curriculum/challenges/arabic/blocks/review-javascript/6723d3cfdd0717d3f1bf27e3.md b/curriculum/challenges/arabic/blocks/review-javascript/6723d3cfdd0717d3f1bf27e3.md
index 8bc09c88e66..ece1f852b6f 100644
--- a/curriculum/challenges/arabic/blocks/review-javascript/6723d3cfdd0717d3f1bf27e3.md
+++ b/curriculum/challenges/arabic/blocks/review-javascript/6723d3cfdd0717d3f1bf27e3.md
@@ -3468,9 +3468,7 @@ document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/";
## IndexedDB
-- **التعريف**: IndexedDB تُستخدم لتخزين البيانات المهيكلة في المتصفح. وهي مدمجة في متصفحات الويب الحديثة، مما يسمح لتطبيقات الويب بتخزين واسترجاع كائنات JavaScript بكفاءة.
-
-- **التعريف**: تُستخدم IndexedDB لتخزين البيانات المنظمة في المتصفح. وهي مدمجة في متصفحات الويب الحديثة، مما يسمح لتطبيقات الويب بتخزين واسترجاع كائنات جافاسكريبت بكفاءة.
+- **التعريف**: تُستخدم IndexedDB لتخزين البيانات المهيكلة في المتصفح. وهي مدمجة في متصفحات الويب الحديثة، مما يسمح لتطبيقات الويب بتخزين واسترجاع كائنات JavaScript بكفاءة.
## عمال التخزين المؤقت / الخدمة (Cache/Service Workers)
diff --git a/curriculum/challenges/arabic/blocks/review-local-storage-and-crud/6723d0ac516099c902394e8b.md b/curriculum/challenges/arabic/blocks/review-local-storage-and-crud/6723d0ac516099c902394e8b.md
index 17dff64f78d..fbbe299acbe 100644
--- a/curriculum/challenges/arabic/blocks/review-local-storage-and-crud/6723d0ac516099c902394e8b.md
+++ b/curriculum/challenges/arabic/blocks/review-local-storage-and-crud/6723d0ac516099c902394e8b.md
@@ -121,7 +121,7 @@ document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/";
## IndexedDB
-- **التعريف**: تُستخدم IndexedDB لتخزين البيانات المنظمة في المتصفح. وهي مدمجة في متصفحات الويب الحديثة، مما يسمح لتطبيقات الويب بتخزين واسترجاع كائنات جافاسكريبت بكفاءة.
+- **التعريف**: تُستخدم IndexedDB لتخزين البيانات المهيكلة في المتصفح. وهي مدمجة في متصفحات الويب الحديثة، مما يسمح لتطبيقات الويب بتخزين واسترجاع كائنات JavaScript بكفاءة.
## عمال التخزين المؤقت / الخدمة (Cache/Service Workers)
diff --git a/curriculum/challenges/arabic/blocks/review-rest-api-and-web-services/6a7c78ad958a597ee788ad2a.md b/curriculum/challenges/arabic/blocks/review-rest-api-and-web-services/6a7c78ad958a597ee788ad2a.md
new file mode 100644
index 00000000000..70f21e576e1
--- /dev/null
+++ b/curriculum/challenges/arabic/blocks/review-rest-api-and-web-services/6a7c78ad958a597ee788ad2a.md
@@ -0,0 +1,59 @@
+---
+id: 6a7c78ad958a597ee788ad2a
+title: مراجعة واجهة برمجة التطبيقات REST وخدمات الويب
+challengeType: 31
+dashedName: review-rest-api-and-web-services
+---
+
+# --description--
+
+## خدمات الويب وواجهات برمجة التطبيقات
+
+- **API (واجهة برمجة التطبيقات)**: طريقة عامة لتواصل البرمجيات مع بعضها.
+- **خدمة ويب**: نوع محدد من API يستخدم تقنيات الويب مثل HTTP لتبادل البيانات عبر الشبكة. كل خدمة ويب هي API، لكن ليس كل API هي خدمة ويب.
+- **الخصائص الرئيسية لخدمة الويب**: تعمل على خادم، تتيح التواصل بين الآلات، غير مرتبطة بلغة برمجة معينة، غير مرتبطة بمنصة معينة، وتستخدم بروتوكولات ويب قياسية (HTTP/HTTPS، FTP، SMTP).
+- **REST (نقل الحالة التمثيلية)**: أكثر أنواع خدمات الويب استخدامًا اليوم. تتيح الوصول إلى الموارد المحددة بمسارات URL مثل `/users` أو `/users/20`. عادةً ما تكون الاستجابات بصيغة JSON، لكنها قد تكون XML أو نصًا عاديًا.
+- **SOAP (بروتوكول الوصول البسيط للكائنات)**: يستخدم XML فقط. شائع في أنظمة المؤسسات التي تحتاج إلى معايير وأمان أكثر صرامة.
+- **XML-RPC**: يستخدم XML لترميز الطلبات والاستجابات. خفيف الوزن لكنه أقل مرونة من REST.
+- **القسم العلوي `Accept`**: يستخدمه العميل ليخبر الخادم بصيغة الاستجابة المطلوبة، مثل `Accept: application/json`.
+
+## بنية REST
+
+- **عديم الحالة**: يجب أن يحتوي كل طلب على كل المعلومات التي يحتاجها الخادم لمعالجته. الخادم لا يتذكر الطلبات السابقة.
+- **المورد**: قطعة بيانات يمكن الوصول إليها أو تعديلها، محددة بواسطة URL (مثل `/products/1`).
+- **طرق HTTP في REST**:
+ - `GET` — استرجاع مورد
+ - `POST` — إنشاء مورد جديد
+ - `PUT` / `PATCH` — تحديث مورد موجود
+ - `DELETE` — حذف مورد
+
+## رموز حالة HTTP
+
+بعد معالجة الطلب، يرد الخادم برمز حالة يشير إلى النتيجة:
+
+- `200` **(OK)**: تم تنفيذ الطلب بنجاح
+- `201` **(Created)**: تم إنشاء مورد جديد
+- `400` **(Bad Request)**: أرسل العميل بيانات غير صحيحة
+- `404` **(Not Found)**: المورد المطلوب غير موجود
+- `500` **(Internal Server Error)**: حدث خطأ في الخادم
+
+### كيف يعمل طلب REST
+
+1. يرسل العميل طلبًا مع طريقة، URL، رؤوس اختيارية، وجسم اختياري.
+2. يتحقق الخادم من صحة الطلب ويحدد المورد.
+3. ينفذ الخادم الإجراء (استرجاع، إنشاء، تحديث، أو حذف).
+4. يبني الخادم استجابة مع رمز حالة وجسم اختياري (عادة JSON).
+5. يرسل الخادم الاستجابة — لا يتم تخزين حالة العميل.
+6. يتحقق العميل من رمز الحالة ويعالج البيانات المستلمة.
+
+## التطبيقات الأحادية مقابل الخدمات المصغرة
+
+- **التطبيق الأحادي**: قاعدة شفرة واحدة كبيرة حيث تتواجد واجهة المستخدم، قاعدة البيانات، وAPI معًا. يعمل جيدًا للتطبيقات الصغيرة لكنه يصبح أصعب في الصيانة والتوسع مع النمو.
+- **الخدمات المصغرة**: بنية تقسم التطبيق الكبير إلى خدمات أصغر مستقلة. كل خدمة تتعامل مع قدرة عمل واحدة (مثل المنتجات، الطلبات، المدفوعات) ويمكن أن يكون لها قاعدة شفرة، قاعدة بيانات، وفريق خاص بها.
+- **كيف تتواصل الخدمات المصغرة**: عبر APIs أو أنظمة قائمة على الرسائل.
+- **مزايا الخدمات المصغرة**: تطوير أسرع، عزل أفضل للأخطاء، وحرية استخدام لغات أو أُطُر مختلفة لكل خدمة.
+- **تحديات الخدمات المصغرة**: تصحيح أخطاء أكثر تعقيدًا، إدارة بنية تحتية أصعب، وزيادة الحمل الشبكي بين الخدمات.
+
+# --assignment--
+
+راجع مواضيع ومفاهيم واجهة برمجة التطبيقات REST وخدمات الويب.
diff --git a/curriculum/challenges/arabic/blocks/workshop-build-a-football-player-card-builder/69e89d557d4b78bf83a02ae6.md b/curriculum/challenges/arabic/blocks/workshop-build-a-football-player-card-builder/69e89d557d4b78bf83a02ae6.md
index 74d285b962a..18ba4355818 100644
--- a/curriculum/challenges/arabic/blocks/workshop-build-a-football-player-card-builder/69e89d557d4b78bf83a02ae6.md
+++ b/curriculum/challenges/arabic/blocks/workshop-build-a-football-player-card-builder/69e89d557d4b78bf83a02ae6.md
@@ -396,10 +396,10 @@ body {
const { useState } = React;
export const FootballPlayerCard = () => {
- return (
+ return (
--fcc-editable-region--
-
--fcc-editable-region--
-
+
--fcc-editable-region--
);
-}
+};
export const FootballPlayerCard = () => {
return Player Info
Player Stats
Live Preview
Updates as you type
-123 Free Code Camp Drive
+