Skip to content

Commit 4ff2a0a

Browse files
authored
Merge pull request #91 from javaevolved/copilot/add-content-translation-arabic
Add Arabic (ar) translation
2 parents b5164b6 + 97d13f4 commit 4ff2a0a

File tree

118 files changed

+1993
-2
lines changed

Some content is hidden

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

118 files changed

+1993
-2
lines changed

html-generators/generate.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,7 @@ void buildLocale(String locale, Templates templates, SequencedMap<String, Snippe
219219
var extraTokens = new LinkedHashMap<String, String>();
220220
extraTokens.putAll(strings);
221221
extraTokens.put("locale", locale);
222+
extraTokens.put("htmlDir", locale.equals("ar") ? "rtl" : "ltr");
222223
extraTokens.put("ogLocale", locale.replace("-", "_"));
223224
extraTokens.put("basePrefix", basePrefix);
224225
extraTokens.put("homeUrl", homeUrl);
@@ -264,6 +265,7 @@ void buildLocale(String locale, Templates templates, SequencedMap<String, Snippe
264265
indexTokens.put("tipCards", tipCards);
265266
indexTokens.put("snippetCount", String.valueOf(allSnippets.size()));
266267
indexTokens.put("locale", locale);
268+
indexTokens.put("htmlDir", locale.equals("ar") ? "rtl" : "ltr");
267269
indexTokens.put("ogLocale", locale.replace("-", "_"));
268270
indexTokens.put("canonicalUrl", isEnglish ? BASE_URL : BASE_URL + "/" + locale);
269271
indexTokens.put("homeUrl", homeUrl);

html-generators/generate.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,8 @@ def generate_html(template, why_card_template, related_card_template,
223223
"supportDescription": escape(data["support"]["description"]),
224224
"supportBadge": _support_badge(data["support"]["state"]),
225225
"supportBadgeClass": _support_badge_class(data["support"]["state"]),
226+
"locale": "en",
227+
"htmlDir": "ltr",
226228
"canonicalUrl": f"{BASE_URL}/{cat}/{slug}.html",
227229
"flatUrl": f"{BASE_URL}/{slug}.html",
228230
"titleJson": json_escape(data["title"]),
@@ -285,6 +287,8 @@ def main():
285287
index_html = replace_tokens(index_template, {
286288
"tipCards": tip_cards,
287289
"snippetCount": str(count),
290+
"locale": "en",
291+
"htmlDir": "ltr",
288292
})
289293
with open(os.path.join(SITE_DIR, "index.html"), "w") as f:
290294
f.write(index_html)

html-generators/locales.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,6 @@ en=English
33
de=Deutsch
44
es=Español
55
pt-BR=Português (Brasil)
6+
ar=العربية
67
fr=Français
78
ja=日本語

templates/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<!DOCTYPE html>
2-
<html lang="{{locale}}">
2+
<html lang="{{locale}}" dir="{{htmlDir}}">
33
<head>
44
<meta charset="UTF-8">
55
<meta name="viewport" content="width=device-width, initial-scale=1.0">

templates/slug-template.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<!DOCTYPE html>
2-
<html lang="{{locale}}">
2+
<html lang="{{locale}}" dir="{{htmlDir}}">
33
<head>
44
<meta charset="UTF-8">
55
<meta name="viewport" content="width=device-width, initial-scale=1.0">
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
title: "Collectors.teeing()"
2+
oldApproach: "تمريرتان على البيانات"
3+
modernApproach: "teeing()"
4+
summary: "احسب تجميعَين في تمريرة واحدة على Stream."
5+
explanation: "يُرسل Collectors.teeing() كل عنصر إلى مُجمِّعَين فرعيَّين ثم يدمج النتيجتين. يتجنّب هذا تكرار تدفق البيانات مرتين أو استخدام متراكم قابل للتعديل."
6+
whyModernWins:
7+
- icon: ""
8+
title: "تمريرة واحدة"
9+
desc: "تمر على Stream مرة واحدة بدلاً من مرتين."
10+
- icon: "🧩"
11+
title: "قابل للتركيب"
12+
desc: "ادمج أي مُجمِّعَين باستخدام دالة دمج."
13+
- icon: "🔒"
14+
title: "نتيجة ثابتة"
15+
desc: "ادمج مباشرةً في record أو كائن قيمة."
16+
support:
17+
description: "متاح على نطاق واسع منذ JDK 12 (مارس 2019)"
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
title: "نسخ المجموعات بصورة ثابتة"
2+
oldApproach: "نسخ يدوي + تغليف"
3+
modernApproach: "List.copyOf()"
4+
summary: "أنشئ نسخة ثابتة من أي مجموعة في استدعاء واحد."
5+
explanation: "تُنشئ List.copyOf() و Set.copyOf() و Map.copyOf() نسخاً ثابتة من المجموعات الموجودة. إذا كان المصدر مجموعةً ثابتةً بالفعل فلن تُنشأ نسخة."
6+
whyModernWins:
7+
- icon: ""
8+
title: "نسخ ذكي"
9+
desc: "يتجاوز النسخ إذا كان المصدر ثابتاً بالفعل."
10+
- icon: "📏"
11+
title: "استدعاء واحد"
12+
desc: "لا حاجة لإنشاء ArrayList يدوياً ثم تغليفه."
13+
- icon: "🛡️"
14+
title: "نسخة دفاعية"
15+
desc: "التغييرات في المصدر لا تؤثر على النسخة."
16+
support:
17+
description: "متاح على نطاق واسع منذ JDK 10 (مارس 2018)"
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
title: "إنشاء قوائم ثابتة"
2+
oldApproach: "تغليف مطوّل"
3+
modernApproach: "List.of()"
4+
summary: "أنشئ قوائم ثابتة في تعبير واحد نظيف."
5+
explanation: "تُنشئ List.of() قائمةً ثابتةً حقيقيةً دون تغليف أو نسخ دفاعية. وهي لا تقبل القيم الفارغة وهي ثابتة هيكلياً. كانت الطريقة القديمة تتطلب ثلاثة استدعاءات متداخلة."
6+
whyModernWins:
7+
- icon: "📏"
8+
title: "استدعاء واحد"
9+
desc: "استبدل ثلاثة استدعاءات متداخلة بدالة مصنع واحدة."
10+
- icon: "🔒"
11+
title: "ثابتة حقاً"
12+
desc: "ليست مجرد غلاف — القائمة نفسها ثابتة."
13+
- icon: "🛡️"
14+
title: "آمنة من القيم الفارغة"
15+
desc: "ترفض عناصر null وقت الإنشاء وتفشل مبكراً."
16+
support:
17+
description: "متاح على نطاق واسع منذ JDK 9 (سبتمبر 2017)"
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
title: "إنشاء خرائط ثابتة"
2+
oldApproach: "نمط بناء الخريطة"
3+
modernApproach: "Map.of()"
4+
summary: "أنشئ خرائط ثابتة مضمّنةً دون مُنشئ."
5+
explanation: "تقبل Map.of() أزواجاً من المفاتيح والقيم مضمّنةً وتُرجع خريطةً ثابتة. للحصول على أكثر من 10 إدخالات، استخدم Map.ofEntries() مع أزواج Map.entry()."
6+
whyModernWins:
7+
- icon: "📏"
8+
title: "إنشاء مضمّن"
9+
desc: "لا حاجة لخريطة مؤقتة قابلة للتعديل."
10+
- icon: "🔒"
11+
title: "نتيجة ثابتة"
12+
desc: "لا يمكن تعديل الخريطة بعد إنشائها."
13+
- icon: "🚫"
14+
title: "لا مفاتيح/قيم فارغة"
15+
desc: "تُرفض الإدخالات الفارغة فوراً."
16+
support:
17+
description: "متاح على نطاق واسع منذ JDK 9 (سبتمبر 2017)"
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
title: "إنشاء مجموعات ثابتة"
2+
oldApproach: "تغليف مطوّل"
3+
modernApproach: "Set.of()"
4+
summary: "أنشئ مجموعات ثابتة باستدعاء مصنع واحد."
5+
explanation: "تُنشئ Set.of() مجموعةً ثابتةً حقيقيةً ترفض القيم الفارغة والعناصر المكررة وقت الإنشاء. لا مزيد من تغليف المجموعات القابلة للتعديل."
6+
whyModernWins:
7+
- icon: "📏"
8+
title: "موجز"
9+
desc: "سطر واحد بدلاً من ثلاثة استدعاءات متداخلة."
10+
- icon: "🚫"
11+
title: "يكشف التكرار"
12+
desc: "يُطلق استثناءً إذا مررت عناصر مكررة عن طريق الخطأ."
13+
- icon: "🔒"
14+
title: "ثابتة"
15+
desc: "لا إضافة أو حذف ممكن بعد الإنشاء."
16+
support:
17+
description: "متاح على نطاق واسع منذ JDK 9 (سبتمبر 2017)"

0 commit comments

Comments
 (0)