Repository: darkskyapp/forecast-io-translations
Pull request #35 (2015-06-07 18:54:14)

Added Arabic translation
Arabic translation with its test case.


Patch:
diff --git a/lib/lang/ar.js b/lib/lang/ar.js
new file mode 100644
index 0000000..cdef0ff
--- /dev/null
+++ b/lib/lang/ar.js
@@ -0,0 +1,123 @@
+
+function join(a, b, joiner) {
+	return (a.slice(0, 4) === "يوم " && b.slice(0, 4) === "يوم " && joiner === " و ")
+			? "يومي " + a.slice(4) + joiner + b.slice(4)
+			: a + joiner + b;
+}
+
+function strip_prefix(period) {
+  return period.slice(0, 10) === "خلال الليل" ? period.slice(5) : 
+         period.slice(0, 3) ===   "في " ? period.slice(3) :
+                                              period;
+}
+
+module.exports = require("../template")({
+	"clear": "صافِ",
+  "no-precipitation": "لا أمطار",
+  "mixed-precipitation": "هطول أمطار وثلوج",
+  "possible-very-light-precipitation": "إحتمالية هطول أمطار خفيفة",
+  "very-light-precipitation": "أمطار خفيفة",
+  "possible-light-precipitation": "إحتمالية هطول أمطار خفيفة",
+  "light-precipitation": "أمطار خفيفة",
+  "medium-precipitation": "أمطار متوسطة",
+  "heavy-precipitation": "أمطار غزيرة",
+  "possible-very-light-rain": "إحتمالية هطول أمطار خفيفة",
+  "very-light-rain": "أمطار خفيفة",
+  "possible-light-rain": "إحتمالية أمطار خفيفة",
+  "light-rain": "أمطار خفيفة",
+  "medium-rain": "أمطار متوسطة",
+  "heavy-rain": "أمطار غزيرة",
+  "possible-very-light-sleet": "إحتمالية موجة صقيع خفيفة",
+  "very-light-sleet": "موجة صقيع خفيفة",
+  "possible-light-sleet": "إحتمالية موجة صقيع خفيفة",
+  "light-sleet": "موجة صقيع خفيفة",
+  "medium-sleet": "صقيع",
+  "heavy-sleet": "موجة صقيع شديدة",
+  "possible-very-light-snow": "احتمالية تساقط ثلوج خفيفة",
+  "very-light-snow": "رياح خفيفة",
+  "possible-light-snow": "احتمالية تساقط ثلوج خفيفة",
+  "light-snow": "ثلوج خفيفة",
+  "medium-snow": "ثلوج",
+  "heavy-snow": "ثلوج كثيفة",
+  "light-wind": "رياح خفيفة",
+  "medium-wind": "رياح متوسطة",
+  "heavy-wind": "عواصف",
+  "low-humidity": "اجواء جافة",
+  "high-humidity": "اجواء رطبة",
+  "fog": "اجواء غائمة",
+  "light-clouds": "غائم جزئياً",
+  "medium-clouds": "اجواء غائمة",
+  "heavy-clouds": "اجواء غائمة",
+  "today-morning": "هذا الصباح",
+  "later-today-morning": "لاحقاً هذا الصباح",
+  "today-afternoon": "بعد الظهر",
+  "later-today-afternoon": "لاحقاً بعد الظهر",
+  "today-evening": "هذا المساء",
+  "later-today-evening": "لاحقاً هذا المساء",
+  "today-night": "الليلة",
+  "later-today-night": "لاحقاً الليلة",
+  "tomorrow-morning": "الغد صباحاً",
+  "tomorrow-afternoon": "غداً بعد الظهر",
+  "tomorrow-evening": "الغد مساءً",
+  "tomorrow-night": "الغد ليلاً",
+  "morning": "في الصباح",
+  "afternoon": "بعد الظهيرة",
+  "evening": "في المساء",
+  "night": "خلال الليل",
+  "today": "اليوم",
+  "tomorrow": "غداً",
+  "sunday": "يوم الأحد",
+  "monday": "يوم الإثنين",
+  "tuesday": "يوم الثلاثاء",
+  "wednesday": "يوم الأربعاء",
+  "thursday": "يوم الخميس",
+  "friday": "يوم الجمعة",
+  "saturday": "يوم السبت",
+  "minutes": "$1 دقيقة",
+  "fahrenheit": "$1\u00B0F",
+  "celsius": "$1\u00B0C",
+  "inches": "$1 انش",
+  "centimeters": "$1 سم",
+  "less-than": "أقل من $1",
+  "and": function(a, b) {
+    return join( a, b, " و " );
+  },
+  "through": function(a, b) {
+    return join(a, b, " حتى ");
+  },
+  "with": "$1 مع $2",
+  "range": "$1\u2013$2",
+  "parenthetical": function(a, b) {
+    return a + " (" + b + (a === "هطول أمطار وثلوج" ? " من الثلج)" : ")" );//a + " (" + b + ")";
+  },
+  "for-hour": "$1 لهذه الساعة",
+  "starting-in": "$1 تبدأ خلال $2",
+  "stopping-in": "$1 تتوقف خلال $2",
+  "starting-then-stopping-later": "$1 تبدأ خلال $2 وتتوقف لاحقاً خلال $3",
+  "stopping-then-starting-later": "$1 تتوقف خلال $2 وتبدأ لاحقاً خلال $3",
+  "for-day": "$1 خلال اليوم",
+  "starting": "$1 تبدأ $2",
+  "until": function(condition, period) {
+    return condition + " حتى " + strip_prefix(period);
+  },
+  "until-starting-again": function(condition, a, b) {
+    return condition + " حتى " + strip_prefix(a) + " وتبدأ مجدداً في " + strip_prefix(b);
+  },
+  "starting-continuing-until": function(condition, a, b) {
+    return condition + " تبدأ في " + strip_prefix(a) + " وتستمر حتى " + strip_prefix(b);
+  },
+  "during": "$1 $2",
+  "for-week": "$1 خلال الأسبوع",
+  "over-weekend": "$1 خلال نهاية الأسبوع",
+  "temperatures-peaking": "درجات حرارة تبلغ ذروتها عند $1 $2",
+  "temperatures-rising": "درجات حرارة ترتفع حتى $1 $2",
+  "temperatures-valleying": "انخفاض درجات الحرارة لأدنى مستوى لها عند $1 $2",
+  "temperatures-falling": "درجات حرارة تنخفض حتى $1 $2",
+  "title": function(str) {
+    return str;
+  },
+  "sentence": function(str) {
+    return str;
+  }
+  
+});
\ No newline at end of file


Test patch:
diff --git a/test_cases/ar.json b/test_cases/ar.json
new file mode 100644
index 0000000..ff1e272
--- /dev/null
+++ b/test_cases/ar.json
@@ -0,0 +1,251 @@
+{
+  "صافِ":
+    ["title", "clear"],
+
+  "إحتمالية هطول أمطار خفيفة":
+    ["title", "possible-very-light-precipitation"],
+
+  "أمطار خفيفة":
+    ["title", "very-light-precipitation"],
+
+  "إحتمالية هطول أمطار خفيفة":
+    ["title", "possible-light-precipitation"],
+
+  "أمطار خفيفة":
+    ["title", "light-precipitation"],
+
+  "أمطار متوسطة":
+    ["title", "medium-precipitation"],
+
+  "أمطار غزيرة":
+    ["title", "heavy-precipitation"],
+
+  "إحتمالية هطول أمطار خفيفة":
+    ["title", "possible-very-light-rain"],
+
+  "أمطار خفيفة":
+    ["title", "very-light-rain"],
+
+  "إحتمالية أمطار خفيفة":
+    ["title", "possible-light-rain"],
+
+  "أمطار خفيفة":
+    ["title", "light-rain"],
+
+  "أمطار متوسطة":
+    ["title", "medium-rain"],
+
+  "أمطار غزيرة":
+    ["title", "heavy-rain"],
+
+  "إحتمالية موجة صقيع خفيفة":
+    ["title", "possible-very-light-sleet"],
+
+  "موجة صقيع خفيفة":
+    ["title", "very-light-sleet"],
+
+  "إحتمالية موجة صقيع خفيفة":
+    ["title", "possible-light-sleet"],
+
+  "موجة صقيع خفيفة":
+    ["title", "light-sleet"],
+
+  "صقيع":
+    ["title", "medium-sleet"],
+
+  "موجة صقيع شديدة":
+    ["title", "heavy-sleet"],
+
+  "احتمالية تساقط ثلوج خفيفة":
+    ["title", "possible-very-light-snow"],
+
+  "ثلوج خفيفة":
+    ["title", "very-light-snow"],
+
+  "احتمالية تساقط ثلوج خفيفة":
+    ["title", "possible-light-snow"],
+
+  "ثلوج خفيفة":
+    ["title", "light-snow"],
+
+  "ثلوج":
+    ["title", "medium-snow"],
+
+  "ثلوج كثيفة":
+    ["title", "heavy-snow"],
+
+  "رياح متوسطة":
+    ["title", "medium-wind"],
+
+  "عواصف":
+    ["title", "heavy-wind"],
+
+  "اجواء غائمة":
+    ["title", "fog"],
+
+  "اجواء غائمة":
+    ["title", "medium-clouds"],
+
+  "اجواء غائمة":
+    ["title", "heavy-clouds"],
+
+  "اجواء جافة و رياح خفيفة":
+    ["title", ["and", "low-humidity", "light-wind"]],
+
+  "أمطار خفيفة و عواصف":
+    ["title", ["and", "very-light-rain", "heavy-wind"]],
+
+  "اجواء رطبة و غائم جزئياً":
+    ["title", ["and", "high-humidity", "light-clouds"]],
+
+
+  "صافِ لهذه الساعة":
+    ["sentence", ["for-hour", "clear"]],
+
+  "رياح خفيفة تبدأ خلال 35 دقيقة":
+    ["sentence", ["starting-in", "very-light-snow", ["minutes", 35]]],
+
+  "أمطار خفيفة تتوقف خلال 15 دقيقة":
+    ["sentence", ["stopping-in", "light-rain", ["minutes", 15]]],
+
+  "موجة صقيع شديدة تبدأ خلال 20 دقيقة وتتوقف لاحقاً خلال 30 دقيقة":
+    ["sentence",
+      ["starting-then-stopping-later",
+        "heavy-sleet",
+        ["minutes", 20],
+        ["minutes", 30]]],
+
+  "أمطار متوسطة تتوقف خلال 25 دقيقة وتبدأ لاحقاً خلال 8 دقيقة":
+    ["sentence",
+      ["stopping-then-starting-later",
+        "medium-rain",
+        ["minutes", 25],
+        ["minutes", 8]]],
+
+
+  "اجواء غائمة خلال اليوم":
+    ["sentence", ["for-day", "medium-clouds"]],
+
+  "موجة صقيع خفيفة تبدأ في الصباح":
+    ["sentence", ["starting", "very-light-sleet", "morning"]],
+
+  "رياح متوسطة حتى الليلة":
+    ["sentence", ["until", "medium-wind", "today-night"]],
+
+  "أمطار غزيرة حتى بعد الظهيرة":
+    ["sentence", ["until", "heavy-precipitation", "afternoon"]],
+
+  "رياح خفيفة بعد الظهيرة":
+    ["sentence", ["during", "light-wind", "afternoon"]],
+
+  "ثلوج لاحقاً هذا المساء و الغد صباحاً":
+    ["sentence", ["during",
+      "medium-snow",
+      ["and", "later-today-evening", "tomorrow-morning"]]],
+
+  "أمطار غزيرة حتى لاحقاً هذا الصباح وتبدأ مجدداً في هذا المساء":
+    ["sentence", ["until-starting-again",
+      "heavy-rain",
+      "later-today-morning",
+      "today-evening"]],
+
+  "اجواء غائمة تبدأ في المساء وتستمر حتى الليل":
+    ["sentence", ["starting-continuing-until",
+      "heavy-clouds",
+      "evening",
+      "night"]],
+
+  "موجة صقيع خفيفة لاحقاً بعد الظهر و اجواء غائمة الغد صباحاً":
+    ["sentence", ["and",
+      ["during", "light-sleet", "later-today-afternoon"],
+      ["during", "fog", "tomorrow-morning"]]],
+
+  "عواصف تبدأ في هذا الصباح وتستمر حتى بعد الظهر و صقيع الغد صباحاً":
+    ["sentence", ["and",
+      ["starting-continuing-until",
+        "heavy-wind",
+        "today-morning",
+        "today-afternoon"],
+      ["during", "medium-sleet", "tomorrow-morning"]]],
+
+  "اجواء غائمة تبدأ لاحقاً الليلة و ثلوج كثيفة غداً بعد الظهر":
+    ["sentence", ["and",
+      ["starting", "heavy-clouds", "later-today-night"],
+      ["during", "heavy-snow", "tomorrow-afternoon"]]],
+
+  "اجواء جافة الليلة و أمطار خفيفة تبدأ في الغد مساءً وتستمر حتى الغد ليلاً":
+    ["sentence", ["and",
+      ["during", "low-humidity", "today-night"],
+      ["starting-continuing-until",
+        "light-precipitation",
+        "tomorrow-evening",
+        "tomorrow-night"]]],
+
+  "ثلوج (5 انش) خلال الليل":
+    ["sentence", ["during",
+      ["parenthetical", "medium-snow", ["inches", 5]],
+      "night"]],
+
+  "ثلوج خفيفة (2 سم) لاحقاً هذا الصباح":
+    ["sentence", ["during",
+      ["parenthetical", "light-snow", ["centimeters", 2]],
+      "later-today-morning"]],
+
+  "ثلوج كثيفة (8\u201312 انش) خلال اليوم":
+    ["sentence", ["for-day",
+      ["parenthetical", "heavy-snow", ["inches", ["range", 8, 12]]]]],
+
+  "ثلوج (أقل من 1 سم) بعد الظهيرة":
+    ["sentence", ["during",
+      ["parenthetical", "medium-snow", ["less-than", ["centimeters", 1]]],
+      "afternoon"]],
+
+
+  "لا أمطار خلال الأسبوع مع درجات حرارة تبلغ ذروتها عند 85\u00B0F غداً":
+    ["sentence", ["with",
+      ["for-week", "no-precipitation"],
+      ["temperatures-peaking",
+        ["fahrenheit", 85],
+        "tomorrow"]]],
+
+  "هطول أمطار وثلوج خلال نهاية الأسبوع مع درجات حرارة ترتفع حتى 32\u00B0C يوم الخميس":
+    ["sentence", ["with",
+      ["over-weekend", "mixed-precipitation"],
+      ["temperatures-rising",
+        ["celsius", 32],
+        "thursday"]]],
+
+  "أمطار خفيفة يوم الإثنين مع انخفاض درجات الحرارة لأدنى مستوى لها عند 15\u00B0F يوم الجمعة":
+    ["sentence", ["with",
+      ["during", "very-light-rain", "monday"],
+      ["temperatures-valleying",
+        ["fahrenheit", 15],
+        "friday"]]],
+
+  "ثلوج خفيفة يومي الثلاثاء و الأربعاء مع درجات حرارة تنخفض حتى 0\u00B0C يوم الأحد":
+    ["sentence", ["with",
+      ["during", "light-snow", ["and", "tuesday", "wednesday"]],
+      ["temperatures-falling",
+        ["celsius", 0],
+        "sunday"]]],
+
+  "أمطار متوسطة اليوم حتى يوم السبت مع درجات حرارة تبلغ ذروتها عند 100\u00B0F يوم الإثنين":
+    ["sentence", ["with",
+      ["during",
+        "medium-precipitation",
+        ["through", "today", "saturday"]],
+      ["temperatures-peaking",
+        ["fahrenheit", 100],
+        "monday"]]],
+
+  "هطول أمطار وثلوج (1\u20133 انش من الثلج) خلال اليوم":
+    ["sentence",
+      ["for-day",
+        ["parenthetical", "mixed-precipitation", ["inches", ["range", 1, 3]]]]],
+
+  "ثلوج كثيفة (1\u20133 انش)":
+    ["title", ["parenthetical", "heavy-snow", ["inches", ["range", 1, 3]]]],
+
+  "ثلوج كثيفة (3\u20135 سم)":
+    ["title", ["parenthetical", "heavy-snow", ["centimeters", ["range", 3, 5]]]]
+}