Repository: darkskyapp/forecast-io-translations
Pull request #72 (2016-04-20 12:08:01)

Added Belorussian translations and test cases


Patch:
diff --git a/lib/lang/be.js b/lib/lang/be.js
new file mode 100644
index 0000000..c8f091d
--- /dev/null
+++ b/lib/lang/be.js
@@ -0,0 +1,231 @@
+function join_with_shared_prefix(a, b, joiner) {
+  var m = a,
+      i = 0,
+      j;
+
+  while(i !== m.length &&
+        i !== b.length &&
+        m.charCodeAt(i) === b.charCodeAt(i))
+    ++i;
+
+  while(i && m.charCodeAt(i - 1) !== 32)
+    --i;
+
+  return a + joiner + b.slice(i);
+}
+
+function time2(time)
+{
+  switch(time) {
+    case "раніцай":
+      time = "раніцы";
+      break;
+    case "днём":
+      time = "сярэдзіны дня";
+      break;
+    case "вечарам":
+      time = "вечара";
+      break;
+    case "ноччу":
+      time = "ночы";
+      break;
+    case "сёння ранкам":
+      time="сённяшняй раніцы";
+      break;
+    case "сёння позняй раніцай":
+      time="сённяшняй позняй раніцы";
+      break;
+    case "сёння днём":
+      time="сярэдзіны дня";
+      break;
+    case "сёння познім днём":
+      time="сённяшняга позняга дня";
+      break;
+    case "сёння ўвечары":
+      time="сённяшняга вечара";
+      break;
+    case "сёння познім вечарам":
+      time="сённяшняга позняга вечара";
+      break;
+    case "сёння ноччу":
+      time="сённяшняй ночы";
+      break;
+    case "сёння позняй ноччу":
+      time="сённяшняй позняй ночы";
+      break;
+    case "заўтра раніцай":
+      time="заўтрашняй раніцы";
+      break;
+    case "заўтра днём":
+      time="заўтрашняга дня";
+      break;
+    case "заўтра ўвечары":
+      time="заўтрашняга вечара";
+      break;
+    case "ўвечары":
+      time="вечара";
+      break;
+    case "заўтра ноччу":
+      time="заўтрашняй ночы";
+      break;
+    case "у нядзелю":
+      time="нядзелі";
+      break;
+    case "у панядзелак":
+      time="панядзелка";
+      break;
+    case "у аўторак":
+      time="аўторка";
+      break;
+    case "у сераду":
+      time="серады";
+      break;
+    case "у чацвер":
+      time="чацвярга";
+      break;
+    case "у пятніцу":
+      time="пятніцы";
+      break;
+    case "у суботу":
+      time="суботы";
+      break;
+  };
+
+  return time;
+}
+
+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 in.",
+  "centimeters": "$1 см.",
+  "less-than": "менш за $1",
+  "and": function(a, b) {
+    return join_with_shared_prefix(
+      a,
+      b,
+      a.indexOf(",") !== -1 ? ", і " : " і "
+    );
+  },
+  "through": function(a, b) {
+    return join_with_shared_prefix(a, time2(b), " і да ");
+  },
+  "with": "$1, з $2",
+  "range": "$1\u2013$2",
+  "parenthetical": "$1 ($2)",
+  "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, time) {
+    return condition + " да " + time2(time);
+  },
+  "until-starting-again": function(condition, timeUntil, timeAgain){
+    timeUntil = time2(timeUntil);
+    return condition + " да " + timeUntil + ", пачынаючыся зноў " + timeAgain;
+  },
+  "starting-continuing-until": function(condition, timeFrom, timeTo) {
+    timeFrom = time2(timeFrom);
+    timeTo = time2(timeTo);
+    return condition + ", пачынаючыся з " + timeFrom + ", і да " + timeTo;
+  },
+  "during": function(condition, time) {
+    return condition + " " + time;
+  },
+  "for-week": "$1 на працягу ўсяго тыдня",
+  "over-weekend": "$1 на працягу ўсіх выходных",
+  "temperatures-peaking": "тэмпературай, што ўздымаецца да максімуму $1 $2",
+  "temperatures-rising": "тэмпературай, што ўздымаецца да $1 $2",
+  "temperatures-valleying": "тэмпературай, якая апускаецца да $1 $2",
+  "temperatures-falling": "тэмпературай, якая апускаецца да мінімуму $1 $2",
+  /* Capitalize the first letter of every word, except if that word is "e". */
+  "title": function(str) {
+    return str.replace(/\S+/g, function(word) {
+      return word === "і" ?
+        word :
+        word.charAt(0).toUpperCase() + word.slice(1);
+    });
+  },
+  /* Replace u with short u after vowels in the begnning of the words, 
+   * capitalize the first word of the sentence and end with a period. */
+  "sentence": function(str) {
+    /* Replace u with short u after vowels in the begnning of the words */
+    str = str.replace(/[аеёіоуыэюя]\sу/gi, function(word) {
+      return word.slice(0, -1) + "ў";
+    });
+    
+    /* Capitalize. */
+    str = str.charAt(0).toUpperCase() + str.slice(1);
+
+    /* Add a period if there isn't already one. */
+    if(str.charAt(str.length - 1) !== ".")
+      str += ".";
+
+    return str;
+  }
+});


Test patch:
diff --git a/test_cases/be.json b/test_cases/be.json
new file mode 100644
index 0000000..4567640
--- /dev/null
+++ b/test_cases/be.json
@@ -0,0 +1,245 @@
+{
+  "Ясна":
+    ["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", "light-wind"],
+
+  "Вецер":
+    ["title", "medium-wind"],
+
+  "Моцны Вецер":
+    ["title", "heavy-wind"],
+
+  "Суха":
+    ["title", "low-humidity"],
+
+  "Вільготна":
+    ["title", "high-humidity"],
+
+  "Туман":
+    ["title", "fog"],
+
+  "Невялікая Воблачнасць":
+    ["title", "light-clouds"],
+
+  "Воблачна":
+    ["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",
+        "morning",
+        "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", ["centimeters", 5]],
+      "night"]],
+
+  "Невялікі снег (2 см.) сёння позняй раніцай.":
+    ["sentence", ["during",
+      ["parenthetical", "light-snow", ["centimeters", 2]],
+      "later-today-morning"]],
+
+  "Снег (менш за 1 см.) днём.":
+    ["sentence", ["during",
+      ["parenthetical", "medium-snow", ["less-than", ["centimeters", 1]]],
+      "afternoon"]],
+
+  "Без ападкаў на працягу ўсяго тыдня, з тэмпературай, што ўздымаецца да максімуму 35\u00B0C заўтра.":
+    ["sentence", ["with",
+      ["for-week", "no-precipitation"],
+      ["temperatures-peaking",
+        ["celsius", 35],
+        "tomorrow"]]],
+
+  "Змешаныя ападкі на працягу ўсіх выходных, з тэмпературай, што ўздымаецца да 32\u00B0C у чацвер.":
+    ["sentence", ["with",
+      ["over-weekend", "mixed-precipitation"],
+      ["temperatures-rising",
+        ["celsius", 32],
+        "thursday"]]],
+
+  "Нязначны дождж у панядзелак, з тэмпературай, якая апускаецца да 15\u00B0C у пятніцу.":
+    ["sentence", ["with",
+      ["during", "very-light-rain", "monday"],
+      ["temperatures-valleying",
+        ["celsius", 15],
+        "friday"]]],
+
+  "Невялікі снег у аўторак і сераду, з тэмпературай, якая апускаецца да мінімуму 0°C у нядзелю.":
+    ["sentence", ["with",
+      ["during", "light-snow", ["and", "tuesday", "wednesday"]],
+      ["temperatures-falling",
+        ["celsius", 0],
+        "sunday"]]],
+
+  "Ападкі сёння і да суботы, з тэмпературай, што ўздымаецца да максімуму 37°C у панядзелак.":
+    ["sentence", ["with",
+      ["during",
+        "medium-precipitation",
+        ["through", "today", "saturday"]],
+      ["temperatures-peaking",
+        ["celsius", 37],
+        "monday"]]]
+}