أو وسوم— اكتب Markdown فقط." +- icon: "👁" + title: "أفضل في المحررات" + desc: "Markdown يُعرَض بشكل جميل في IDEs الحديثة ومحررات النصوص." +support: + description: "متاح منذ JDK 23 (سبتمبر 2024)" diff --git a/translations/content/ar/language/module-import-declarations.yaml b/translations/content/ar/language/module-import-declarations.yaml new file mode 100644 index 0000000..0559438 --- /dev/null +++ b/translations/content/ar/language/module-import-declarations.yaml @@ -0,0 +1,17 @@ +title: "تصريحات استيراد الوحدات" +oldApproach: "استيرادات كثيرة" +modernApproach: "import module" +summary: "استورد جميع الحزم التي تُصدّرها وحدة في تصريح واحد." +explanation: "تتيح لك تصريحات استيراد الوحدات استيراد كل ما تُصدّره وحدة بسطر واحد. هذا مفيد بشكل خاص لـ java.base التي تغطي المجموعات والـ I/O والتدفقات والمزيد." +whyModernWins: +- icon: "🧹" + title: "سطر واحد" + desc: "استبدل جداراً من الاستيرادات باستيراد وحدة واحد." +- icon: "📦" + title: "واعٍ بالوحدات" + desc: "يستفيد من نظام الوحدات لاستيراد مجموعات حزم متماسكة." +- icon: "🚀" + title: "بدايات سريعة" + desc: "مثالي للسكريبتات والنماذج الأولية حيث تكون قوائم الاستيراد مُرهِقة." +support: + description: "أُنهي في JDK 25 LTS (JEP 511، سبتمبر 2025)." diff --git a/translations/content/ar/language/pattern-matching-instanceof.yaml b/translations/content/ar/language/pattern-matching-instanceof.yaml new file mode 100644 index 0000000..73c371b --- /dev/null +++ b/translations/content/ar/language/pattern-matching-instanceof.yaml @@ -0,0 +1,17 @@ +title: "مطابقة الأنماط لـ instanceof" +oldApproach: "instanceof + تحويل" +modernApproach: "متغير النمط" +summary: "ادمج فحص النوع والتحويل في خطوة واحدة بمطابقة الأنماط." +explanation: "تُزيل مطابقة الأنماط لـ instanceof التحويلَ المكرر بعد فحص النوع. المتغير محدود النطاق تلقائياً إلى أين يتطابق النمط مما يجعل الكود أكثر أماناً وأقصر." +whyModernWins: +- icon: "🔄" + title: "لا تحويل مكرر" + desc: "فحص النوع وربط المتغير يحدثان في تعبير واحد." +- icon: "📏" + title: "أسطر أقل" + desc: "سطر واحد بدلاً من اثنين — سطر التحويل يختفي كلياً." +- icon: "🛡️" + title: "أمان النطاق" + desc: "متغير النمط في النطاق فقط أين النوع مضمون." +support: + description: "متاح على نطاق واسع منذ JDK 16 (مارس 2021)" diff --git a/translations/content/ar/language/pattern-matching-switch.yaml b/translations/content/ar/language/pattern-matching-switch.yaml new file mode 100644 index 0000000..8cad14a --- /dev/null +++ b/translations/content/ar/language/pattern-matching-switch.yaml @@ -0,0 +1,17 @@ +title: "مطابقة الأنماط في switch" +oldApproach: "سلسلة if-else" +modernApproach: "أنماط الأنواع" +summary: "استبدل سلاسل instanceof إذا كانت if-else بأنماط نوع switch نظيفة." +explanation: "تتيح مطابقة الأنماط في switch مطابقة الأنواع مباشرةً ودمج فحص النوع والتحويل والربط في تسمية حالة واحدة موجزة. يتحقق المترجم من الشمولية." +whyModernWins: +- icon: "📐" + title: "إيزاع منظّم" + desc: "switch يجعل بنية التفريع صريحةً وقابلةً للمسح." +- icon: "🎯" + title: "صيغة التعبير" + desc: "يُرجع قيمةً مباشرةً — لا متغير قابل للتعديل مطلوب." +- icon: "🛡️" + title: "آمن" + desc: "المترجم يتحقق من شمولية جميع الأنواع الفرعية المُغلقة." +support: + description: "متاح على نطاق واسع منذ JDK 21 LTS (سبتمبر 2023)" diff --git a/translations/content/ar/language/primitive-types-in-patterns.yaml b/translations/content/ar/language/primitive-types-in-patterns.yaml new file mode 100644 index 0000000..1d55c5c --- /dev/null +++ b/translations/content/ar/language/primitive-types-in-patterns.yaml @@ -0,0 +1,17 @@ +title: "الأنواع الأولية في الأنماط" +oldApproach: "فحوصات النطاق اليدوية" +modernApproach: "أنماط الأنواع الأولية" +summary: "مطابقة الأنماط تعمل الآن مع الأنواع الأولية لا مع الكائنات فحسب." +explanation: "يُوسّع Java 25 مطابقة الأنماط للأنواع الأولية. يمكنك استخدام int و long و double وغيرها في أنماط switch مع حراس when مما يُزيل الحاجة للتغليف أو فحوصات النطاق اليدوية." +whyModernWins: +- icon: "📦" + title: "لا تغليف" + desc: "طابق الأنواع الأولية مباشرةً — لا حاجة لغلاف Integer." +- icon: "🎯" + title: "تناسق الأنماط" + desc: "نفس بنية النمط للكائنات والأنواع الأولية." +- icon: "⚡" + title: "أداء أفضل" + desc: "تجنّب تكلفة التغليف التلقائي في مطابقة الأنماط." +support: + description: "معاينة في JDK 25 (المعاينة الثالثة، JEP 507). يتطلب --enable-preview." diff --git a/translations/content/ar/language/private-interface-methods.yaml b/translations/content/ar/language/private-interface-methods.yaml new file mode 100644 index 0000000..ba2ffda --- /dev/null +++ b/translations/content/ar/language/private-interface-methods.yaml @@ -0,0 +1,17 @@ +title: "الدوال الخاصة في الواجهات" +oldApproach: "منطق مكرّر" +modernApproach: "الدوال الخاصة" +summary: "استخرج المنطق المشترك في الواجهات باستخدام الدوال الخاصة." +explanation: "يسمح Java 9 بالدوال الخاصة في الواجهات مما يُتيح لك مشاركة الكود بين الدوال الافتراضية دون كشف تفاصيل التطبيق للفئات المُنفِّذة." +whyModernWins: +- icon: "🧩" + title: "إعادة استخدام الكود" + desc: "شارك المنطق بين الدوال الافتراضية دون تكرار." +- icon: "🔐" + title: "التغليف" + desc: "تفاصيل التطبيق تظل مخفيةً عن الفئات المُنفِّذة." +- icon: "🧹" + title: "واجهات غير مكررة" + desc: "لا مزيد من النسخ واللصق بين الدوال الافتراضية." +support: + description: "متاح على نطاق واسع منذ JDK 9 (سبتمبر 2017)" diff --git a/translations/content/ar/language/record-patterns.yaml b/translations/content/ar/language/record-patterns.yaml new file mode 100644 index 0000000..e2d5e43 --- /dev/null +++ b/translations/content/ar/language/record-patterns.yaml @@ -0,0 +1,17 @@ +title: "أنماط Record (التفكيك)" +oldApproach: "وصول يدوي" +modernApproach: "التفكيك" +summary: "فكّك Records مباشرةً في الأنماط — استخرج الحقول في خطوة واحدة." +explanation: "تتيح أنماط Record تحليل مكوّنات Record مباشرةً في instanceof و switch. الأنماط المتداخلة مدعومة أيضاً مما يُتيح المطابقة العميقة دون متغيرات وسيطة." +whyModernWins: +- icon: "🎯" + title: "استخراج مباشر" + desc: "الوصول لمكوّنات Record دون استدعاء دوال الوصول يدوياً." +- icon: "🪆" + title: "قابل للتداخل" + desc: "يمكن للأنماط التداخل — طابق Records الداخلية في تعبير واحد." +- icon: "📏" + title: "كود مضغوط" + desc: "خمسة أسطر تصبح اثنين — طقوس أقل ووضوح مماثل." +support: + description: "متاح على نطاق واسع منذ JDK 21 LTS (سبتمبر 2023)" diff --git a/translations/content/ar/language/records-for-data-classes.yaml b/translations/content/ar/language/records-for-data-classes.yaml new file mode 100644 index 0000000..70af2f0 --- /dev/null +++ b/translations/content/ar/language/records-for-data-classes.yaml @@ -0,0 +1,17 @@ +title: "Records لفئات البيانات" +oldApproach: "POJO مطوّل" +modernApproach: "record" +summary: "سطر واحد يستبدل أكثر من 30 سطراً من الكليشيهات لحاملات البيانات الثابتة." +explanation: "تولّد Records تلقائياً المُنشئ ودوال الوصول (x() و y()) و equals() و hashCode() و toString(). وهي ثابتة بتصميمها ومثالية لـ DTOs وكائنات القيم ومطابقة الأنماط." +whyModernWins: +- icon: "⚡" + title: "تعريف بسطر واحد" + desc: "سطر واحد يستبدل المُنشئ ودوال الجلب و equals و hashCode و toString." +- icon: "🔒" + title: "ثابتة بشكل افتراضي" + desc: "جميع الحقول نهائية — لا أخطاء setters." +- icon: "🧩" + title: "صديقة للأنماط" + desc: "Records تعمل مع أنماط التفكيك في switch و instanceof." +support: + description: "متاح على نطاق واسع منذ JDK 16 (مارس 2021)" diff --git a/translations/content/ar/language/sealed-classes.yaml b/translations/content/ar/language/sealed-classes.yaml new file mode 100644 index 0000000..dcb8343 --- /dev/null +++ b/translations/content/ar/language/sealed-classes.yaml @@ -0,0 +1,17 @@ +title: "الفئات المُغلقة للتسلسلات الهرمية للأنواع" +oldApproach: "تسلسل هرمي مفتوح" +modernApproach: "sealed permits" +summary: "قيّد الفئات التي يمكنها امتداد نوع — مما يُتيح switches شاملة." +explanation: "الفئات المُغلقة تُعرِّف مجموعةً مغلقةً من الأنواع الفرعية. المترجم يعرف جميع الحالات الممكنة مما يُتيح مطابقة أنماط شاملة دون فرع default. مع Records تُنمذج الأنواع الجبرية." +whyModernWins: +- icon: "🔐" + title: "تسلسل هرمي متحكَّم به" + desc: "فقط الأنواع الفرعية المسموحة يمكنها الامتداد — لا فئات فرعية مفاجئة." +- icon: "✅" + title: "مطابقة شاملة" + desc: "المترجم يتحقق من أن switch يغطي جميع الحالات، لا حاجة لـ default." +- icon: "📐" + title: "أنواع جبرية" + desc: "نمذجة أنواع المجموع بشكل طبيعي — مُغلق + records = ADTs في Java." +support: + description: "متاح على نطاق واسع منذ JDK 17 LTS (سبتمبر 2021)" diff --git a/translations/content/ar/language/static-members-in-inner-classes.yaml b/translations/content/ar/language/static-members-in-inner-classes.yaml new file mode 100644 index 0000000..b42e9c3 --- /dev/null +++ b/translations/content/ar/language/static-members-in-inner-classes.yaml @@ -0,0 +1,17 @@ +title: "الأعضاء الثابتة في الفئات الداخلية" +oldApproach: "يجب استخدام فئة متداخلة ثابتة" +modernApproach: "أعضاء ثابتة في الفئات الداخلية" +summary: "عرّف الأعضاء الثابتة في الفئات الداخلية دون الحاجة للفئات المتداخلة الثابتة." +explanation: "قبل Java 16، يمكن فقط للفئات المتداخلة الثابتة احتواء الأعضاء الثابتة. لم تستطع الفئات الداخلية (غير الثابتة) امتلاك ثوابت لأنها تتطلب مثيلاً مُحيطاً. يُرخّي Java 16 هذا القيد مسمحاً بالحقول والدوال والأنواع المتداخلة الثابتة في الفئات الداخلية." +whyModernWins: +- icon: "🔓" + title: "مرونة أكبر" + desc: "يمكن للفئات الداخلية الآن امتلاك أعضاء ثابتة عند الحاجة." +- icon: "🧩" + title: "حالة مشتركة" + desc: "تتبّع الحالة المشتركة عبر مثيلات الفئة الداخلية." +- icon: "📐" + title: "حرية التصميم" + desc: "لا حاجة لترقية إلى فئة متداخلة ثابتة لمجرد حقل ثابت واحد." +support: + description: "متاح على نطاق واسع منذ JDK 16 (مارس 2021)" diff --git a/translations/content/ar/language/static-methods-in-interfaces.yaml b/translations/content/ar/language/static-methods-in-interfaces.yaml new file mode 100644 index 0000000..5ef741f --- /dev/null +++ b/translations/content/ar/language/static-methods-in-interfaces.yaml @@ -0,0 +1,17 @@ +title: "الدوال الثابتة في الواجهات" +oldApproach: "فئات الأدوات" +modernApproach: "الدوال الثابتة في الواجهات" +summary: "أضف دوال أدوات ثابتة مباشرةً للواجهات بدلاً من فئات أدوات منفصلة." +explanation: "قبل Java 8، كانت دوال الأدوات المرتبطة بواجهة يجب أن تعيش في فئة منفصلة (مثل Collections لـ Collection). تتيح الدوال الثابتة في الواجهات إبقاء الأدوات ذات الصلة معاً. شائعة في الواجهات البرمجية الحديثة مثل Comparator.comparing() و Stream.of() و List.of()." +whyModernWins: +- icon: "📦" + title: "تنظيم أفضل" + desc: "أبقِ الأدوات ذات الصلة مع الواجهة لا في فئة منفصلة." +- icon: "🔍" + title: "قابلية الاكتشاف" + desc: "دوال المصنع والمساعدة موجودة أين تتوقعها." +- icon: "🧩" + title: "تماسك الواجهة البرمجية" + desc: "لا حاجة لفئات *Utils أو *Helper منفصلة." +support: + description: "متاح منذ JDK 8 (مارس 2014)" diff --git a/translations/content/ar/language/switch-expressions.yaml b/translations/content/ar/language/switch-expressions.yaml new file mode 100644 index 0000000..091a37a --- /dev/null +++ b/translations/content/ar/language/switch-expressions.yaml @@ -0,0 +1,17 @@ +title: "تعبيرات switch" +oldApproach: "جملة switch" +modernApproach: "تعبير switch" +summary: "switch كتعبير يُرجع قيمةً — لا break ولا تسقيط." +explanation: "تُرجع تعبيرات switch قيمةً مباشرةً وتستخدم بنية السهم لمنع أخطاء التسقيط ويتحقق المترجم من الشمولية. يستبدل هذا الصيغة الجملية عرضة الأخطاء." +whyModernWins: +- icon: "🎯" + title: "يُرجع قيمة" + desc: "أسنِد نتيجة switch مباشرةً — لا متغير مؤقت مطلوب." +- icon: "🛡️" + title: "لا تسقيط" + desc: "بنية السهم تُزيل أخطاء التسقيط العرضية من break المفقود." +- icon: "✅" + title: "فحص الشمولية" + desc: "المترجم يضمن تغطية جميع الحالات." +support: + description: "متاح على نطاق واسع منذ JDK 14 (مارس 2020)" diff --git a/translations/content/ar/language/text-blocks-for-multiline-strings.yaml b/translations/content/ar/language/text-blocks-for-multiline-strings.yaml new file mode 100644 index 0000000..afadfda --- /dev/null +++ b/translations/content/ar/language/text-blocks-for-multiline-strings.yaml @@ -0,0 +1,17 @@ +title: "كتل النص للسلاسل متعددة الأسطر" +oldApproach: "تسلسل السلاسل" +modernApproach: "كتل النص" +summary: "اكتب سلاسل متعددة الأسطر بشكل طبيعي باستخدام كتل النص ثلاثية الاقتباس." +explanation: "تتيح لك كتل النص كتابة سلاسل متعددة الأسطر كما تظهر تماماً. لا مزيد من إفلات علامات الاقتباس أو إضافة \n. يُزيل المترجم المسافات البادئة العرضية تلقائياً." +whyModernWins: +- icon: "📖" + title: "مقروء كما هو" + desc: "JSON وSQL وHTML تبدو كـ JSON وSQL وHTML حقيقية في المصدر." +- icon: "🚫" + title: "لا جحيم الإفلات" + desc: "علامات الاقتباس المضمّنة لا تحتاج إفلات بالشرطة المائلة." +- icon: "📐" + title: "مسافات بادئة ذكية" + desc: "المسافات البادئة تُقلَّص تلقائياً بناءً على موضع المُحدِّد الختامي." +support: + description: "متاح على نطاق واسع منذ JDK 15 (سبتمبر 2020)" diff --git a/translations/content/ar/language/type-inference-with-var.yaml b/translations/content/ar/language/type-inference-with-var.yaml new file mode 100644 index 0000000..161f5eb --- /dev/null +++ b/translations/content/ar/language/type-inference-with-var.yaml @@ -0,0 +1,17 @@ +title: "استنتاج النوع باستخدام var" +oldApproach: "أنواع صريحة" +modernApproach: "الكلمة المفتاحية var" +summary: "استخدم var لاستنتاج نوع المتغيرات المحلية — ضجيج أقل بنفس الأمان." +explanation: "منذ Java 10، يستنتج المترجم أنواع المتغيرات المحلية من الجانب الأيمن. يقلّل هذا الضجيج البصري دون التضحية بأمان الأنواع. استخدم var عندما يكون النوع واضحاً من السياق." +whyModernWins: +- icon: "⚡" + title: "كليشيه أقل" + desc: "لا حاجة لتكرار الأنواع العامة المعقدة على كلا جانبي التعيين." +- icon: "👁" + title: "قابلية قراءة أفضل" + desc: "ركّز على أسماء المتغيرات والقيم لا على تصريحات الأنواع." +- icon: "🔒" + title: "آمن من حيث الأنواع" + desc: "يستنتج المترجم النوع الدقيق ويطبّقه وقت الترجمة." +support: + description: "متاح على نطاق واسع منذ JDK 10 (مارس 2018)" diff --git a/translations/content/ar/language/unnamed-variables.yaml b/translations/content/ar/language/unnamed-variables.yaml new file mode 100644 index 0000000..08e4fa8 --- /dev/null +++ b/translations/content/ar/language/unnamed-variables.yaml @@ -0,0 +1,17 @@ +title: "المتغيرات غير المُسمّاة بـ _" +oldApproach: "متغير غير مستخدَم" +modernApproach: "عنصر نائب _" +summary: "استخدم _ للإشارة إلى عدم الاستخدام المتعمّد لمتغير." +explanation: "المتغيرات غير المُسمّاة تُبلّغ القرّاء والأدوات بأن قيمةً تُهمَل عمداً. لا مزيد من أسماء 'ignored' أو 'unused' ولا تحذيرات IDE." +whyModernWins: +- icon: "📢" + title: "نية واضحة" + desc: "_ يقول صراحةً 'هذه القيمة غير مطلوبة هنا'." +- icon: "🔇" + title: "لا تحذيرات" + desc: "لن تُعلّم IDEs والـ linters المتغيرات غير المستخدَمة عمداً." +- icon: "🧹" + title: "تعبيرات lambda أنظف" + desc: "تعبيرات lambda متعددة المعاملات أنظف عند الحاجة لبعض المعاملات فقط." +support: + description: "أُنهيت في JDK 22 (JEP 456، مارس 2024)." diff --git a/translations/content/ar/security/key-derivation-functions.yaml b/translations/content/ar/security/key-derivation-functions.yaml new file mode 100644 index 0000000..b7f9f8c --- /dev/null +++ b/translations/content/ar/security/key-derivation-functions.yaml @@ -0,0 +1,17 @@ +title: "دوال اشتقاق المفاتيح" +oldApproach: "PBKDF2 يدوي" +modernApproach: "KDF API" +summary: "اشتق مفاتيح التشفير باستخدام KDF API القياسية." +explanation: "توفر KDF API واجهةً قياسيةً لدوال اشتقاق المفاتيح بما فيها HKDF. تستبدل النمط المحرج SecretKeyFactory + PBEKeySpec بواجهة برمجية منشئ نظيفة." +whyModernWins: +- icon: "📐" + title: "واجهة برمجية نظيفة" + desc: "نمط المنشئ بدلاً من مُنشئات KeySpec المحرجة." +- icon: "🔧" + title: "دعم HKDF" + desc: "خوارزمية HKDF الحديثة إلى جانب PBKDF2." +- icon: "🛡️" + title: "قياسية" + desc: "واجهة برمجية موحّدة لجميع خوارزميات اشتقاق المفاتيح." +support: + description: "أُنهيت في JDK 25 LTS (JEP 510، سبتمبر 2025)." diff --git a/translations/content/ar/security/pem-encoding.yaml b/translations/content/ar/security/pem-encoding.yaml new file mode 100644 index 0000000..5aa67e1 --- /dev/null +++ b/translations/content/ar/security/pem-encoding.yaml @@ -0,0 +1,17 @@ +title: "ترميز/فك ترميز PEM" +oldApproach: "Base64 يدوي + رؤوس" +modernApproach: "PEM API" +summary: "رمّز وفك ترميز الكائنات التشفيرية بصيغة PEM أصلياً." +explanation: "توفر PEM API ترميزاً/فك ترميزاً قياسياً للشهادات والمفاتيح والكائنات التشفيرية الأخرى بصيغة PEM. لا مزيد من تغليف Base64 اليدوي مع رؤوس BEGIN/END." +whyModernWins: +- icon: "🧹" + title: "لا Base64 يدوي" + desc: "رؤوس PEM والتفاف الأسطر و Base64 تُعالَج تلقائياً." +- icon: "🔄" + title: "ثنائي الاتجاه" + desc: "رمّز إلى PEM وفك ترميز من PEM بواجهة برمجية واحدة." +- icon: "🛡️" + title: "تنسيق قياسي" + desc: "يُنتج مخرجات PEM متوافقة مع RFC 7468." +support: + description: "معاينة في JDK 25 (JEP 470). يتطلب --enable-preview." diff --git a/translations/content/ar/security/random-generator.yaml b/translations/content/ar/security/random-generator.yaml new file mode 100644 index 0000000..419afae --- /dev/null +++ b/translations/content/ar/security/random-generator.yaml @@ -0,0 +1,17 @@ +title: "واجهة RandomGenerator" +oldApproach: "new Random() / ThreadLocalRandom" +modernApproach: "مصنع RandomGenerator" +summary: "استخدم واجهة RandomGenerator لاختيار خوارزميات أرقام عشوائية بالاسم دون الارتباط بفئة محددة." +explanation: "قدّم JDK 17 الـ RandomGenerator كواجهة مشتركة لجميع تطبيقات RNG. بدلاً من ترميز new Random() أو ThreadLocalRandom يمكنك اختيار الخوارزميات بالاسم عبر مصنع مما يُسهّل التبديل بين الخوارزميات المحسَّنة لحالات استخدام مختلفة." +whyModernWins: +- icon: "🔧" + title: "مستقل عن الخوارزمية" + desc: "اختر أفضل خوارزمية RNG بالاسم دون تغيير بنية الكود." +- icon: "⚡" + title: "خوارزميات أفضل" + desc: "الوصول إلى مولّدات LXM الحديثة ذات الخصائص الإحصائية المتفوقة." +- icon: "🔗" + title: "واجهة برمجية موحّدة" + desc: "واجهة واحدة تغطي Random و ThreadLocalRandom و SplittableRandom والمزيد." +support: + description: "متاح منذ JDK 17 (سبتمبر 2021، JEP 356)." diff --git a/translations/content/ar/security/strong-random.yaml b/translations/content/ar/security/strong-random.yaml new file mode 100644 index 0000000..6cdb6b2 --- /dev/null +++ b/translations/content/ar/security/strong-random.yaml @@ -0,0 +1,17 @@ +title: "توليد أعداد عشوائية قوية" +oldApproach: "new SecureRandom()" +modernApproach: "getInstanceStrong()" +summary: "احصل على أقوى تطبيق SecureRandom للمنصة." +explanation: "تُرجع getInstanceStrong() تطبيق SecureRandom المُهيَّأ باعتباره الأقوى على المنصة. يتحكم في هذا خاصية أمان securerandom.strongAlgorithms." +whyModernWins: +- icon: "🛡️" + title: "الأقوى المتاح" + desc: "تختار تلقائياً أفضل خوارزمية للمنصة." +- icon: "📖" + title: "نية صريحة" + desc: "تُعبّر بوضوح عن الحاجة لعشوائية قوية." +- icon: "��" + title: "قابل للتهيئة" + desc: "يمكن للمسؤولين تغيير الخوارزمية القوية عبر خصائص الأمان." +support: + description: "متاح على نطاق واسع منذ JDK 9 (سبتمبر 2017)" diff --git a/translations/content/ar/security/tls-default.yaml b/translations/content/ar/security/tls-default.yaml new file mode 100644 index 0000000..ea65896 --- /dev/null +++ b/translations/content/ar/security/tls-default.yaml @@ -0,0 +1,17 @@ +title: "TLS 1.3 بشكل افتراضي" +oldApproach: "تهيئة TLS يدوية" +modernApproach: "TLS 1.3 الافتراضي" +summary: "TLS 1.3 مُفعَّل بشكل افتراضي — لا حاجة لتهيئة بروتوكول صريحة." +explanation: "أضاف Java 11 دعم TLS 1.3 وجعله البروتوكول المُفضَّل. يستخدمه HttpClient تلقائياً. لا مزيد من تحديد إصدارات البروتوكول يدوياً للاتصالات الآمنة." +whyModernWins: +- icon: "🛡️" + title: "أكثر أماناً" + desc: "TLS 1.3 يزيل مجموعات التشفير وأنماط المصافحة المهجورة." +- icon: "⚡" + title: "مصافحة أسرع" + desc: "TLS 1.3 يكتمل في رحلة واحدة مقابل اثنتين." +- icon: "🆓" + title: "صفر تهيئة" + desc: "آمن بشكل افتراضي — لا اختيار بروتوكول صريح مطلوب." +support: + description: "متاح على نطاق واسع منذ JDK 11 (سبتمبر 2018)" diff --git a/translations/content/ar/streams/collectors-flatmapping.yaml b/translations/content/ar/streams/collectors-flatmapping.yaml new file mode 100644 index 0000000..7ba2adc --- /dev/null +++ b/translations/content/ar/streams/collectors-flatmapping.yaml @@ -0,0 +1,17 @@ +title: "Collectors.flatMapping()" +oldApproach: "flatMap متداخل" +modernApproach: "flatMapping()" +summary: "استخدم flatMapping() للتسطيح داخل مُجمِّع grouping." +explanation: "يُطبّق Collectors.flatMapping() تعييناً من-واحد-إلى-كثير كمُجمِّع فرعي. وهو مكافئ المُجمِّع لـ Stream.flatMap() — مفيد داخل groupingBy أو partitioningBy." +whyModernWins: +- icon: "🧩" + title: "قابل للتركيب" + desc: "يعمل كمُجمِّع فرعي داخل groupingBy." +- icon: "📐" + title: "تمريرة واحدة" + desc: "سطّح وجمّع في تمريرة Stream واحدة." +- icon: "🔗" + title: "قابل للتداخل" + desc: "ادمجه مع مُجمِّعات فرعية أخرى." +support: + description: "متاح على نطاق واسع منذ JDK 9 (سبتمبر 2017)" diff --git a/translations/content/ar/streams/optional-ifpresentorelse.yaml b/translations/content/ar/streams/optional-ifpresentorelse.yaml new file mode 100644 index 0000000..595536f --- /dev/null +++ b/translations/content/ar/streams/optional-ifpresentorelse.yaml @@ -0,0 +1,17 @@ +title: "Optional.ifPresentOrElse()" +oldApproach: "if/else على Optional" +modernApproach: "ifPresentOrElse()" +summary: "تعامل مع الحالة الموجودة والفارغة لـ Optional في استدعاء واحد." +explanation: "تأخذ ifPresentOrElse() Consumer للحالة الموجودة و Runnable للحالة الفارغة. تتجنّب النمط المضاد isPresent/get." +whyModernWins: +- icon: "📏" + title: "تعبير واحد" + desc: "كلا الحالتين تُعالَجان في استدعاء دالة واحد." +- icon: "🚫" + title: "لا get()" + desc: "يُزيل النمط الخطر isPresent() + get()." +- icon: "🔗" + title: "سائل" + desc: "يتسلسل بشكل طبيعي بعد findUser() أو أي دالة تُرجع Optional." +support: + description: "متاح على نطاق واسع منذ JDK 9 (سبتمبر 2017)" diff --git a/translations/content/ar/streams/optional-or.yaml b/translations/content/ar/streams/optional-or.yaml new file mode 100644 index 0000000..500d997 --- /dev/null +++ b/translations/content/ar/streams/optional-or.yaml @@ -0,0 +1,17 @@ +title: "احتياط Optional.or()" +oldApproach: "احتياط متداخل" +modernApproach: "سلسلة .or()" +summary: "سلسل احتياطات Optional دون تحققات متداخلة." +explanation: "يُرجع Optional.or() الـ Optional الأصلي إذا كان يحتوي قيمةً وإلا يُقيّم المورّد للحصول على Optional بديل. المورّدون كسولون — لا يُستدعَون إلا عند الحاجة." +whyModernWins: +- icon: "🔗" + title: "قابل للتسلسل" + desc: "كدّس الاحتياطات في خط أنابيب مقروء." +- icon: "⚡" + title: "تقييم كسول" + desc: "مورّدو الاحتياط لا يُنفَّذون إلا عند الحاجة." +- icon: "📖" + title: "تصريحي" + desc: "يُقرأ كـ 'جرّب الأساسي أو الثانوي أو الافتراضي'." +support: + description: "متاح على نطاق واسع منذ JDK 9 (سبتمبر 2017)" diff --git a/translations/content/ar/streams/predicate-not.yaml b/translations/content/ar/streams/predicate-not.yaml new file mode 100644 index 0000000..a49eb37 --- /dev/null +++ b/translations/content/ar/streams/predicate-not.yaml @@ -0,0 +1,17 @@ +title: "Predicate.not()" +oldApproach: "نفي lambda" +modernApproach: "Predicate.not()" +summary: "استخدم Predicate.not() لنفي مراجع الدوال بشكل نظيف بدلاً من تغليفات lambda." +explanation: "قبل Java 11، كان نفي مرجع دالة يتطلب تغليفه في lambda. يتيح Predicate.not() نفي أي Predicate مباشرةً مع الإبقاء على الكود مقروءاً ومتّسقاً مع أسلوب مرجع الدالة." +whyModernWins: +- icon: "👁" + title: "نفي أنظف" + desc: "لا حاجة لتغليف مراجع الدوال في lambdas لمجرد نفيها." +- icon: "🔗" + title: "قابل للتركيب" + desc: "يعمل مع أي Predicate مما يُتيح سلاسل Predicate نظيفة." +- icon: "📖" + title: "يُقرأ بشكل طبيعي" + desc: "Predicate.not(String::isBlank) يُقرأ كاللغة الإنجليزية." +support: + description: "متاح منذ JDK 11 (سبتمبر 2018)." diff --git a/translations/content/ar/streams/stream-gatherers.yaml b/translations/content/ar/streams/stream-gatherers.yaml new file mode 100644 index 0000000..cc49e6d --- /dev/null +++ b/translations/content/ar/streams/stream-gatherers.yaml @@ -0,0 +1,17 @@ +title: "تجميعات Stream" +oldApproach: "Collector مخصص" +modernApproach: "gather()" +summary: "استخدم Gatherers للعمليات الوسيطة المخصصة في Stream." +explanation: "Gatherers عمليات Stream وسيطة جديدة يمكنها التعبير عن تحويلات معقدة مثل النوافذ المنزلقة والمجموعات ذات الحجم الثابت وعمليات المسح التي كانت مستحيلةً بعمليات Stream القياسية." +whyModernWins: +- icon: "🧩" + title: "قابل للتركيب" + desc: "تتركّب Gatherers مع عمليات Stream الأخرى." +- icon: "📦" + title: "عمليات مدمجة" + desc: "windowFixed و windowSliding و fold و scan جاهزة للاستخدام." +- icon: "🔧" + title: "قابل للتوسيع" + desc: "اكتب Gatherers مخصصة لأي تحويل وسيط." +support: + description: "أُنهيت في JDK 24 (JEP 485، مارس 2025)." diff --git a/translations/content/ar/streams/stream-iterate-predicate.yaml b/translations/content/ar/streams/stream-iterate-predicate.yaml new file mode 100644 index 0000000..24ab45d --- /dev/null +++ b/translations/content/ar/streams/stream-iterate-predicate.yaml @@ -0,0 +1,17 @@ +title: "Stream.iterate() مع Predicate" +oldApproach: "iterate + limit" +modernApproach: "iterate(seed, pred, op)" +summary: "استخدم Predicate لإيقاف التكرار — مثل حلقة for في صيغة Stream." +explanation: "تعمل Stream.iterate(seed, hasNext, next) ثلاثية الوسائط كحلقة for: seed هو البداية و hasNext يُحدّد متى تتوقف و next تُنتج القيمة التالية." +whyModernWins: +- icon: "🎯" + title: "إنهاء طبيعي" + desc: "توقف بناءً على شرط لا بحد تعسفي." +- icon: "📐" + title: "مكافئ حلقة for" + desc: "نفس دلالات for(seed; hasNext; next)." +- icon: "🛡️" + title: "لا خطر Stream لا نهائي" + desc: "Predicate يضمن الإنهاء." +support: + description: "متاح على نطاق واسع منذ JDK 9 (سبتمبر 2017)" diff --git a/translations/content/ar/streams/stream-mapmulti.yaml b/translations/content/ar/streams/stream-mapmulti.yaml new file mode 100644 index 0000000..af74c00 --- /dev/null +++ b/translations/content/ar/streams/stream-mapmulti.yaml @@ -0,0 +1,17 @@ +title: "Stream.mapMulti()" +oldApproach: "flatMap + List" +modernApproach: "mapMulti()" +summary: "أصدر صفراً أو أكثر من العناصر لكل إدخال دون إنشاء Streams وسيطة." +explanation: "mapMulti() بديل إمراطي لـ flatMap يتجنّب إنشاء كائنات Stream وسيطة لكل عنصر. أكثر كفاءةً عندما ينتج التعيين عدداً صغيراً من العناصر." +whyModernWins: +- icon: "⚡" + title: "تخصيص أقل" + desc: "لا Stream وسيطة تُنشأ لكل عنصر." +- icon: "🎯" + title: "أسلوب إمراطي" + desc: "استخدم الحلقات والشروط مباشرةً." +- icon: "📐" + title: "مرن" + desc: "أصدر صفراً أو واحداً أو عناصر كثيرة بتحكم كامل." +support: + description: "متاح على نطاق واسع منذ JDK 16 (مارس 2021)" diff --git a/translations/content/ar/streams/stream-of-nullable.yaml b/translations/content/ar/streams/stream-of-nullable.yaml new file mode 100644 index 0000000..5d7f7b4 --- /dev/null +++ b/translations/content/ar/streams/stream-of-nullable.yaml @@ -0,0 +1,17 @@ +title: "Stream.ofNullable()" +oldApproach: "فحص null" +modernApproach: "ofNullable()" +summary: "أنشئ Stream بصفر أو عنصر واحد من قيمة قابلة للإلغاء." +explanation: "تُرجع Stream.ofNullable() Stream بعنصر واحد إذا كانت القيمة غير فارغة أو Stream فارغ إذا كانت null. يُزيل نمط الفحص الثلاثي للقيمة الفارغة." +whyModernWins: +- icon: "📏" + title: "موجز" + desc: "استدعاء واحد يستبدل الشرط الثلاثي." +- icon: "🔗" + title: "مناسب لـ flatMap" + desc: "مثالي داخل flatMap لتخطّي القيم الفارغة." +- icon: "🛡️" + title: "آمن من null" + desc: "لا خطر NPE — null يصبح Stream فارغاً." +support: + description: "متاح على نطاق واسع منذ JDK 9 (سبتمبر 2017)" diff --git a/translations/content/ar/streams/stream-takewhile-dropwhile.yaml b/translations/content/ar/streams/stream-takewhile-dropwhile.yaml new file mode 100644 index 0000000..db06a7b --- /dev/null +++ b/translations/content/ar/streams/stream-takewhile-dropwhile.yaml @@ -0,0 +1,17 @@ +title: "Stream takeWhile / dropWhile" +oldApproach: "حلقة يدوية" +modernApproach: "takeWhile/dropWhile" +summary: "خذ أو أسقط عناصر من Stream بناءً على Predicate." +explanation: "تُرجع takeWhile() العناصر طالما Predicate صحيح وتتوقف عند أول خطأ. تتخطّى dropWhile() العناصر طالما صحيح وتُرجع البقية. كلتاهما تعملان بشكل أفضل على Streams المرتّبة." +whyModernWins: +- icon: "🎯" + title: "دارة قصيرة" + desc: "تتوقف المعالجة فور فشل Predicate." +- icon: "🔗" + title: "مناسب لخطوط الأنابيب" + desc: "يتسلسل مع عمليات Stream الأخرى بشكل طبيعي." +- icon: "📖" + title: "تصريحي" + desc: "takeWhile يُقرأ كاللغة الطبيعية: 'خذ طالما أقل من 100'." +support: + description: "متاح على نطاق واسع منذ JDK 9 (سبتمبر 2017)" diff --git a/translations/content/ar/streams/stream-tolist.yaml b/translations/content/ar/streams/stream-tolist.yaml new file mode 100644 index 0000000..39bf97e --- /dev/null +++ b/translations/content/ar/streams/stream-tolist.yaml @@ -0,0 +1,17 @@ +title: "Stream.toList()" +oldApproach: "Collectors.toList()" +modernApproach: ".toList()" +summary: "يستبدل toList() النهائي collect(Collectors.toList()) المطوّل." +explanation: "تُرجع Stream.toList() قائمةً غير قابلة للتعديل. وهي مكافئة لـ .collect(Collectors.toUnmodifiableList()) لكن أقصر بكثير. ملاحظة: النتيجة غير قابلة للتعديل بخلاف Collectors.toList()." +whyModernWins: +- icon: "📏" + title: "7 أحرف مقابل 24" + desc: ".toList() تستبدل .collect(Collectors.toList())." +- icon: "🔒" + title: "ثابتة" + desc: "قائمة النتيجة لا يمكن تعديلها." +- icon: "📖" + title: "سائلة" + desc: "تُقرأ بشكل طبيعي في نهاية خط الأنابيب." +support: + description: "متاح على نطاق واسع منذ JDK 16 (مارس 2021)" diff --git a/translations/content/ar/streams/virtual-thread-executor.yaml b/translations/content/ar/streams/virtual-thread-executor.yaml new file mode 100644 index 0000000..700bb81 --- /dev/null +++ b/translations/content/ar/streams/virtual-thread-executor.yaml @@ -0,0 +1,17 @@ +title: "منفّذ الخيوط الافتراضية" +oldApproach: "مجمع خيوط ثابت" +modernApproach: "منفّذ الخيوط الافتراضية" +summary: "استخدم منفّذات الخيوط الافتراضية للتزامن الخفيف غير المحدود." +explanation: "ينشئ منفّذ الخيوط الافتراضية خيطاً افتراضياً جديداً لكل مهمة. لا حاجة لضبط حجم المجمع — الخيوط الافتراضية رخيصة بما يكفي لإنشاء الملايين منها." +whyModernWins: +- icon: "♾️" + title: "لا حجم" + desc: "لا حجم مجمع لضبطه — أنشئ خيوطاً بقدر الحاجة." +- icon: "⚡" + title: "خفيف الوزن" + desc: "الخيوط الافتراضية تستخدم كيلوبايتات لا ميغابايتات." +- icon: "🧹" + title: "قابل للإغلاق التلقائي" + desc: "try-with-resources يتعامل مع الإيقاف تلقائياً." +support: + description: "متاح على نطاق واسع منذ JDK 21 LTS (سبتمبر 2023)" diff --git a/translations/content/ar/strings/string-chars-stream.yaml b/translations/content/ar/strings/string-chars-stream.yaml new file mode 100644 index 0000000..750d9e2 --- /dev/null +++ b/translations/content/ar/strings/string-chars-stream.yaml @@ -0,0 +1,17 @@ +title: "أحرف السلسلة كـ Stream" +oldApproach: "حلقة يدوية" +modernApproach: "تدفق chars()" +summary: "عالج أحرف السلاسل كخط أنابيب Stream." +explanation: "تُرجع String.chars() تدفق IntStream من قيم الأحرف مما يُتيح المعالجة الوظيفية. لدعم Unicode تتعامل codePoints() مع الأحرف التكميلية بشكل صحيح." +whyModernWins: +- icon: "🔗" + title: "قابل للتسلسل" + desc: "استخدم filter و map و collect على تدفقات الأحرف." +- icon: "📐" + title: "تصريحي" + desc: "صِف ما تريد فعله لا كيفية التكرار." +- icon: "🌐" + title: "جاهز لـ Unicode" + desc: "codePoints() يتعامل بشكل صحيح مع الرموز التعبيرية والأحرف التكميلية." +support: + description: "متاح منذ JDK 8+ (محسَّن في 9+)" diff --git a/translations/content/ar/strings/string-formatted.yaml b/translations/content/ar/strings/string-formatted.yaml new file mode 100644 index 0000000..b8900af --- /dev/null +++ b/translations/content/ar/strings/string-formatted.yaml @@ -0,0 +1,17 @@ +title: "String.formatted()" +oldApproach: "String.format()" +modernApproach: "formatted()" +summary: "استدعِ formatted() على سلسلة القالب نفسها." +explanation: "String.formatted() دالة مثيل مكافئة لـ String.format() لكن تُستدعى على سلسلة التنسيق. تُقرأ بشكل أكثر طبيعيةً في التدفق من اليسار إلى اليمين." +whyModernWins: +- icon: "📖" + title: "يُقرأ بشكل طبيعي" + desc: "قالب.formatted(وسائط) يتدفق أفضل من String.format(قالب، وسائط)." +- icon: "🔗" + title: "قابل للتسلسل" + desc: "يمكن تسلسله مع دوال السلسلة الأخرى." +- icon: "📏" + title: "أقل تعقيداً" + desc: "يُسقط استدعاء String.format() الثابت الزائد." +support: + description: "متاح على نطاق واسع منذ JDK 15 (سبتمبر 2020)" diff --git a/translations/content/ar/strings/string-indent-transform.yaml b/translations/content/ar/strings/string-indent-transform.yaml new file mode 100644 index 0000000..83eda45 --- /dev/null +++ b/translations/content/ar/strings/string-indent-transform.yaml @@ -0,0 +1,17 @@ +title: "String.indent() و transform()" +oldApproach: "مسافات بادئة يدوية" +modernApproach: "indent() / transform()" +summary: "أضف مسافات بادئة للنص وسلسل تحويلات السلاسل بشكل سائل." +explanation: "تضيف indent(n) مسافات n لكل سطر. تُطبّق transform(fn) أي دالة وتُرجع النتيجة مما يُتيح تسلسل عمليات السلاسل بشكل سائل." +whyModernWins: +- icon: "📏" + title: "مدمجة" + desc: "المسافات البادئة عملية شائعة — الآن في استدعاء واحد." +- icon: "🔗" + title: "قابل للتسلسل" + desc: "transform() يُتيح خطوط أنابيب سائلة على السلاسل." +- icon: "🧹" + title: "كود نظيف" + desc: "لا تقطيع أسطر يدوي ولا حلقات StringBuilder." +support: + description: "متاح على نطاق واسع منذ JDK 12 (مارس 2019)" diff --git a/translations/content/ar/strings/string-isblank.yaml b/translations/content/ar/strings/string-isblank.yaml new file mode 100644 index 0000000..a636ad5 --- /dev/null +++ b/translations/content/ar/strings/string-isblank.yaml @@ -0,0 +1,17 @@ +title: "String.isBlank()" +oldApproach: "trim().isEmpty()" +modernApproach: "isBlank()" +summary: "تحقق من السلاسل الفارغة باستدعاء دالة واحدة." +explanation: "تُرجع isBlank() القيمة true إذا كانت السلسلة فارغةً أو تحتوي مسافات بيضاء فقط بما فيها مسافات Unicode التي تُفوِّتها trim()." +whyModernWins: +- icon: "📖" + title: "موثّقة ذاتياً" + desc: "isBlank() تقول بالضبط ما تتحقق منه." +- icon: "🌐" + title: "واعية بـ Unicode" + desc: "تتعامل مع جميع مسافات Unicode لا ASCII فقط." +- icon: "⚡" + title: "لا تخصيص" + desc: "لا سلسلة وسيطة مُقلَّصة تُنشأ." +support: + description: "متاح على نطاق واسع منذ JDK 11 (سبتمبر 2018)" diff --git a/translations/content/ar/strings/string-lines.yaml b/translations/content/ar/strings/string-lines.yaml new file mode 100644 index 0000000..0d199e6 --- /dev/null +++ b/translations/content/ar/strings/string-lines.yaml @@ -0,0 +1,17 @@ +title: "String.lines() لتقسيم الأسطر" +oldApproach: "split(\"\\\\n\")" +modernApproach: "lines()" +summary: "استخدم String.lines() لتقسيم النص إلى Stream من الأسطر دون تكلفة regex." +explanation: "تُرجع String.lines() تدفق Stream
من الأسطر مُقسَّمة بـ \\n أو \\r أو \\r\\n. أكثر كسلاً وكفاءةً من split() وتتجنّب تجميع regex وتتكامل بشكل طبيعي مع Stream API." +whyModernWins: +- icon: "⚡" + title: "بث كسول" + desc: "الأسطر تُنتَج عند الطلب لا دفعةً واحدة كـ split()." +- icon: "🔧" + title: "نهايات أسطر عالمية" + desc: "تتعامل مع \\n و \\r و \\r\\n تلقائياً دون regex." +- icon: "🔗" + title: "تكامل Stream" + desc: "تُرجع Stream للاستخدام المباشر مع filter و map و collect." +support: + description: "متاح منذ JDK 11 (سبتمبر 2018)." diff --git a/translations/content/ar/strings/string-repeat.yaml b/translations/content/ar/strings/string-repeat.yaml new file mode 100644 index 0000000..fb33eb4 --- /dev/null +++ b/translations/content/ar/strings/string-repeat.yaml @@ -0,0 +1,17 @@ +title: "String.repeat()" +oldApproach: "حلقة StringBuilder" +modernApproach: "repeat()" +summary: "كرّر سلسلةً n مرة دون حلقة." +explanation: "تُرجع String.repeat(int) السلسلة مُدمَجةً مع نفسها n مرات. تتعامل مع الحالات الطرفية: repeat(0) تُرجع سلسلةً فارغة و repeat(1) تُرجع السلسلة نفسها." +whyModernWins: +- icon: "📏" + title: "سطر واحد" + desc: "استبدل 5 أسطر من كود StringBuilder باستدعاء واحد." +- icon: "⚡" + title: "مُحسَّنة" + desc: "التطبيق الداخلي مُحسَّن للتكرارات الكبيرة." +- icon: "📖" + title: "نية واضحة" + desc: "repeat(3) ينقل الغرض فوراً." +support: + description: "متاح على نطاق واسع منذ JDK 11 (سبتمبر 2018)" diff --git a/translations/content/ar/strings/string-strip.yaml b/translations/content/ar/strings/string-strip.yaml new file mode 100644 index 0000000..4511c3a --- /dev/null +++ b/translations/content/ar/strings/string-strip.yaml @@ -0,0 +1,17 @@ +title: "String.strip() مقابل trim()" +oldApproach: "trim()" +modernApproach: "strip()" +summary: "استخدم التجريد الواعي بـ Unicode بـ strip() و stripLeading() و stripTrailing()." +explanation: "تُزيل trim() فقط الأحرف ≤ U+0020 (أحرف التحكم ASCII والمسافة). تستخدم strip() الدالة Character.isWhitespace() التي تتعامل مع مسافات Unicode مثل المسافة غير الفاصلة والمسافة الأيديوغرافية وغيرها." +whyModernWins: +- icon: "🌐" + title: "صحيحة من حيث Unicode" + desc: "تتعامل مع جميع أحرف المسافة البيضاء من كل كتابة." +- icon: "🎯" + title: "اتجاهية" + desc: "stripLeading() و stripTrailing() للتجريد من جهة واحدة." +- icon: "🛡️" + title: "أقل أخطاءً" + desc: "لا مسافات بيضاء مفاجئة في النصوص الدولية." +support: + description: "متاح على نطاق واسع منذ JDK 11 (سبتمبر 2018)" diff --git a/translations/content/ar/tooling/aot-class-preloading.yaml b/translations/content/ar/tooling/aot-class-preloading.yaml new file mode 100644 index 0000000..dbc162b --- /dev/null +++ b/translations/content/ar/tooling/aot-class-preloading.yaml @@ -0,0 +1,17 @@ +title: "التحميل المسبق للفئات بـ AOT" +oldApproach: "بدء بارد في كل مرة" +modernApproach: "ذاكرة تخزين AOT" +summary: "خزّن تحميل الفئات والترجمة مؤقتاً للبدء الفوري." +explanation: "يُخزّن التحميل المسبق للفئات بـ AOT الفئات المحمَّلة والمرتبطة من تشغيل تدريبي مؤقتاً. في عمليات البدء اللاحقة تُحمَّل الفئات من الذاكرة المؤقتة متجاوزةً التحقق والربط. مع ترجمة AOT يُقلّص هذا وقت البدء بشكل كبير." +whyModernWins: +- icon: "⚡" + title: "بدء أسرع" + desc: "تخطّ تحميل الفئات والتحقق والربط." +- icon: "📦" + title: "حالة مخزّنة" + desc: "التشغيل التدريبي يلتقط الحالة المثلى للفئات." +- icon: "🔧" + title: "لا تغييرات في الكود" + desc: "يعمل مع التطبيقات الموجودة — فقط أضف علامات JVM." +support: + description: "متاح كميزة قياسية في JDK 25 LTS (JEPs 514/515، سبتمبر 2025)." diff --git a/translations/content/ar/tooling/built-in-http-server.yaml b/translations/content/ar/tooling/built-in-http-server.yaml new file mode 100644 index 0000000..a3f6883 --- /dev/null +++ b/translations/content/ar/tooling/built-in-http-server.yaml @@ -0,0 +1,17 @@ +title: "خادم HTTP مدمج" +oldApproach: "خادم/إطار خارجي" +modernApproach: "أداة jwebserver CLI" +summary: "يتضمّن Java 18 خادم HTTP ملفات بسيطاً مدمجاً للنماذج الأولية وتقديم الملفات." +explanation: "أضاف JDK 18 خادم ملفات HTTP بسيطاً صفري التبعيات يمكن الوصول إليه عبر أداة سطر الأوامر jwebserver أو SimpleFileServer API. يُقدّم الملفات الثابتة من مجلد محدد دون أي تهيئة. أداة CLI مثالية للنماذج الأولية السريعة والاختبار ومشاركة الملفات." +whyModernWins: +- icon: "🚀" + title: "إعداد صفري" + desc: "شغّل jwebserver في أي مجلد — لا تثبيت ولا تهيئة ولا تبعيات." +- icon: "📦" + title: "مدمج في JDK" + desc: "يُشحَن مع كل تثبيت JDK 18+، متاح دائماً على أي جهاز به Java." +- icon: "🧪" + title: "رائع للنماذج الأولية" + desc: "قدّم الملفات الثابتة فوراً لاختبار HTML أو APIs أو تطوير الواجهة الأمامية." +support: + description: "متاح منذ JDK 18 (مارس 2022)" diff --git a/translations/content/ar/tooling/compact-object-headers.yaml b/translations/content/ar/tooling/compact-object-headers.yaml new file mode 100644 index 0000000..fbe4146 --- /dev/null +++ b/translations/content/ar/tooling/compact-object-headers.yaml @@ -0,0 +1,17 @@ +title: "رؤوس الكائنات المضغوطة" +oldApproach: "رؤوس 128 بت" +modernApproach: "رؤوس 64 بت" +summary: "قلّص حجم رأس الكائن إلى النصف لكثافة ذاكرة وكفاءة ذاكرة تخزين مؤقت أفضل." +explanation: "تُقلّص رؤوس الكائنات المضغوطة الحمل الزائد لكل كائن من 128 بتاً إلى 64 بتاً على منصات 64 بت. هذا يوفّر الذاكرة ويُحسّن استخدام ذاكرة التخزين المؤقت خاصةً للتطبيقات ذات الكائنات الصغيرة الكثيرة." +whyModernWins: +- icon: "📦" + title: "رؤوس أصغر بـ 50%" + desc: "8 بايت بدلاً من 16 لكل كائن." +- icon: "⚡" + title: "استخدام أفضل لذاكرة التخزين المؤقت" + desc: "المزيد من الكائنات تتسع في أسطر ذاكرة التخزين المؤقت للمعالج." +- icon: "📊" + title: "كثافة أعلى" + desc: "تسع المزيد من الكائنات في نفس حجم الكومة." +support: + description: "أُنهيت في JDK 25 LTS (JEP 519، سبتمبر 2025)." diff --git a/translations/content/ar/tooling/jfr-profiling.yaml b/translations/content/ar/tooling/jfr-profiling.yaml new file mode 100644 index 0000000..762611b --- /dev/null +++ b/translations/content/ar/tooling/jfr-profiling.yaml @@ -0,0 +1,17 @@ +title: "JFR للتنميط" +oldApproach: "مُنمِّط خارجي" +modernApproach: "Java Flight Recorder" +summary: "نمّط أي تطبيق Java بـ Flight Recorder المدمج — لا أدوات خارجية." +explanation: "Java Flight Recorder (JFR) أداة تنميط منخفضة الحمل مدمجة في JVM. تلتقط أحداثاً لـ CPU والذاكرة وGC وI/O والخيوط والأحداث المخصصة بتأثير أداء ضئيل (~1%)." +whyModernWins: +- icon: "🆓" + title: "مدمج" + desc: "لا مُنمِّط خارجي للتثبيت أو الترخيص." +- icon: "⚡" + title: "حمل منخفض" + desc: "~1% تأثير أداء — آمن للإنتاج." +- icon: "📊" + title: "أحداث غنية" + desc: "CPU والذاكرة وGC والخيوط وI/O والأقفال والأحداث المخصصة." +support: + description: "متاح على نطاق واسع منذ JDK 9/11 (مفتوح المصدر في 11)" diff --git a/translations/content/ar/tooling/jshell-prototyping.yaml b/translations/content/ar/tooling/jshell-prototyping.yaml new file mode 100644 index 0000000..69c3051 --- /dev/null +++ b/translations/content/ar/tooling/jshell-prototyping.yaml @@ -0,0 +1,17 @@ +title: "JShell للنماذج الأولية" +oldApproach: "إنشاء ملف + ترجمة + تشغيل" +modernApproach: "REPL لـ jshell" +summary: "جرّب تعبيرات Java بشكل تفاعلي دون إنشاء ملفات." +explanation: "JShell حلقة Read-Eval-Print لـ Java. اختبر التعبيرات وجرّب الواجهات البرمجية وصمّم النماذج الأولية دون إنشاء ملفات أو ترجمة أو كتابة دالة main. إكمال بالتبويب ووثائق مضمّنة متاحة." +whyModernWins: +- icon: "⚡" + title: "ردود فعل فورية" + desc: "اكتب تعبيراً واستقبل النتيجة فوراً." +- icon: "📝" + title: "لا ملفات مطلوبة" + desc: "لا ملفات .java ولا خطوة ترجمة." +- icon: "🔍" + title: "استكشاف الواجهة البرمجية" + desc: "إكمال التبويب يساعد في اكتشاف الدوال والمعاملات." +support: + description: "متاح على نطاق واسع منذ JDK 9 (سبتمبر 2017)" diff --git a/translations/content/ar/tooling/junit6-with-jspecify.yaml b/translations/content/ar/tooling/junit6-with-jspecify.yaml new file mode 100644 index 0000000..94c9a53 --- /dev/null +++ b/translations/content/ar/tooling/junit6-with-jspecify.yaml @@ -0,0 +1,17 @@ +title: "JUnit 6 مع أمان null في JSpecify" +oldApproach: "واجهة برمجية غير مُعلَّقة" +modernApproach: "واجهة برمجية مُعلَّقة بـ @NullMarked" +summary: "يعتمد JUnit 6 تعليقات JSpecify @NullMarked مما يجعل عقود null صريحةً عبر واجهة التأكيدات." +explanation: "شُحِن JUnit 5 دون تعليقات قابلية الإلغاء القياسية تاركاً المطوّرين يخمّنون هل معاملات التأكيدات أو القيم المُرجَعة يمكن أن تكون null. يعتمد JUnit 6 JSpecify عبر وحدته بأكملها: التعليق @NullMarked يجعل جميع الأنواع غير المُعلَّقة non-null بشكل افتراضي، و@Nullable يُعلّم الاستثناءات. تُعلّق فئة Assertions صراحةً معاملات مثل assertNull(@Nullable Object actual) وfail(@Nullable String message)." +whyModernWins: +- icon: "📜" + title: "عقود صريحة" + desc: "@NullMarked على وحدة JUnit 6 يوثّق دلالات null مباشرةً في الواجهة البرمجية — لا قراءة مصدر مطلوبة." +- icon: "🛡️" + title: "أمان وقت الترجمة" + desc: "IDEs والمحللات تُحذّر عند تمرير null حيث يُتوقع non-null مما يكشف الأخطاء قبل تشغيل الاختبارات." +- icon: "🌐" + title: "معيار النظام البيئي" + desc: "JSpecify تعتمده Spring و Guava وغيرهم — دلالات null متّسقة عبر مكدسك بالكامل." +support: + description: "متاح منذ JUnit 6.0 (أكتوبر 2025، يتطلب Java 17+)" diff --git a/translations/content/ar/tooling/multi-file-source.yaml b/translations/content/ar/tooling/multi-file-source.yaml new file mode 100644 index 0000000..85649f7 --- /dev/null +++ b/translations/content/ar/tooling/multi-file-source.yaml @@ -0,0 +1,17 @@ +title: "مُشغّل مصدر متعدد الملفات" +oldApproach: "ترجمة الكل أولاً" +modernApproach: "مُشغّل المصدر" +summary: "شغّل برامج متعددة الملفات دون خطوة ترجمة صريحة." +explanation: "يمكن لـ Java 22+ ترجمة ملفات المصدر المُشار إليها تلقائياً عند الإطلاق من ملف .java. هذا يجعل برامج متعددة الملفات الصغيرة بنفس سهولة تشغيل السكريبتات دون الحاجة لـ Maven أو Gradle." +whyModernWins: +- icon: "🚀" + title: "إعداد صفري" + desc: "لا أداة بناء مطلوبة للبرامج متعددة الملفات الصغيرة." +- icon: "🔗" + title: "حلّ تلقائي" + desc: "الفئات المُشار إليها تُوجَد وتُرجَم تلقائياً." +- icon: "📝" + title: "شبيه بالسكريبت" + desc: "شغّل برامج متعددة الملفات كسكريبتات." +support: + description: "متاح منذ JDK 22 (مارس 2024)" diff --git a/translations/content/ar/tooling/single-file-execution.yaml b/translations/content/ar/tooling/single-file-execution.yaml new file mode 100644 index 0000000..5628a72 --- /dev/null +++ b/translations/content/ar/tooling/single-file-execution.yaml @@ -0,0 +1,17 @@ +title: "تنفيذ ملف واحد" +oldApproach: "ترجمة خطوتين" +modernApproach: "إطلاق مباشر" +summary: "شغّل برامج Java أحادية الملف مباشرةً دون javac." +explanation: "يمكن لمُشغّل Java ترجمة ملف مصدر واحد وتشغيله في أمر واحد. مع دعم shebang على Unix يمكن أن تعمل ملفات Java كسكريبتات. لا خطوة ترجمة منفصلة مطلوبة." +whyModernWins: +- icon: "⚡" + title: "أمر واحد" + desc: "java File.java تُرجم وتشغّل في خطوة واحدة." +- icon: "📝" + title: "شبيه بالسكريبت" + desc: "أضف سطر shebang لجعل ملفات .java سكريبتات قابلة للتنفيذ." +- icon: "🎓" + title: "صديق للتعلّم" + desc: "يشغّل القادمون الجدد الكود فوراً دون تعلّم أدوات البناء." +support: + description: "متاح على نطاق واسع منذ JDK 11 (سبتمبر 2018)" diff --git a/translations/strings/ar.yaml b/translations/strings/ar.yaml new file mode 100644 index 0000000..0e3893f --- /dev/null +++ b/translations/strings/ar.yaml @@ -0,0 +1,80 @@ +site: + tagline: "تطوّرت Java. يمكن لكودك ذلك أيضاً." + tagline_line1: "تطوّرت Java." + tagline_line2: "يمكن لكودك ذلك أيضاً." + description: "مجموعة من مقاطع كود Java الحديثة. كل نمط قديم بجانب بديله الحديث والنظيف — جنباً إلى جنب." + heroSnippetCount: "✦ {{snippetCount}} نمطاً حديثاً · Java 8 ← Java 25" + heroOld: قديم + heroModern: حديث + allComparisons: جميع المقارنات + snippetsBadge: "{{snippetCount}} مقتطفاً" +nav: + allPatterns: "→ جميع الأنماط" + toggleTheme: تبديل المظهر + viewOnGitHub: عرض على GitHub + selectLanguage: اختر اللغة +breadcrumb: + home: الرئيسية +sections: + codeComparison: مقارنة الكود + whyModernWins: لماذا يتفوق الأسلوب الحديث + oldApproach: الأسلوب القديم + modernApproach: الأسلوب الحديث + sinceJdk: "منذ JDK" + difficulty: الصعوبة + jdkSupport: دعم JDK + howItWorks: كيف يعمل + relatedDocs: توثيق ذو صلة + relatedPatterns: أنماط ذات صلة +filters: + show: "عرض:" + all: الكل +difficulty: + beginner: مبتدئ + intermediate: متوسط + advanced: متقدم +search: + placeholder: "البحث في المقتطفات…" + noResults: لم يتم العثور على نتائج. + esc: ESC + searchTrigger: "بحث…" + navigate: تنقل + open: فتح + close: إغلاق +cards: + old: قديم + modern: حديث + hoverHint: "مرر للرؤية الحديث ←" + hoverHintRelated: "مرر للرؤية الحديث ←" + touchHint: "👆 انقر أو اسحب ←" +copy: + copy: نسخ + copied: "تم النسخ!" +share: + label: مشاركة +view: + expandAll: توسيع الكل + collapseAll: طي الكل +stats: + modernPatterns: الأنماط الحديثة + jdkVersions: إصدارات JDK المشمولة + categories: الفئات + linesOfPython: أسطر Python المطلوبة +footer: + tagline: "تطوّرت Java. يمكن لكودك ذلك أيضاً." + madeWith: "صُنع بـ ❤️ بواسطة" + and: و + inspiredBy: مستوحى من + viewOnGitHub: عرض على GitHub +copilot: + headline: "حدّث قاعدة كود Java الخاصة بك مع GitHub Copilot." + description: "دع Copilot يساعدك في ترحيل الأنماط القديمة إلى Java الحديثة — تلقائياً." + appModernization: "تحديث التطبيقات ←" + javaGuide: "دليل Java ←" +support: + available: متاح + preview: معاينة + experimental: تجريبي +untranslated: + notice: "هذه الصفحة لم تُترجم بعد إلى {{localeName}}." + viewInEnglish: عرض بالإنجليزية