Repository: darkskyapp/forecast-io-translations
Pull request #41 (2015-08-14 14:09:31)

Added Ukrainian translation
Just a quick translation to Ukrainian


Patch:
diff --git a/lib/lang/ua.js b/lib/lang/ua.js
new file mode 100644
index 0000000..b738147
--- /dev/null
+++ b/lib/lang/ua.js
@@ -0,0 +1,222 @@
+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;
+  };
+
+  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);
+    });
+  },
+  /* Capitalize the first word of the sentence and end with a period. */
+  "sentence": function(str) {
+    /* 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/ua.json b/test_cases/ua.json
new file mode 100644
index 0000000..5b2bacc
--- /dev/null
+++ b/test_cases/ua.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"]]]
+}