Repository: darkskyapp/forecast-io-translations
Pull request #62 (2016-01-30 21:42:47)

Added Czech translation
This is Czech translation for your forecast API - it is based on Slovak translation, as those languages are closely related. All tests are passing.


Patch:
diff --git a/lib/lang/cs.js b/lib/lang/cs.js
new file mode 100644
index 0000000..8d6a4fc
--- /dev/null
+++ b/lib/lang/cs.js
@@ -0,0 +1,231 @@
+function endsWith(str, suffix) {
+  return str.indexOf(suffix, str.length - suffix.length) !== -1;
+}
+
+function remove_prefix_and_use_genitive(a) {
+  switch(a) {
+    case "dnes ráno":
+      return "dnešního rána";
+    case "dnes dopoledne":
+      return "dnešního dopoledne";
+    case "dnes odpoledne":
+      return "dnešního odpoledne";
+    case "dnes podvečer":
+      return "dnešního podvečera";
+    case "dnes večer":
+      return "dnešního večera";
+    case "dnes pozdě večer":
+      return "dnešního pozdního večera";
+    case "dnes v noci":
+      return "dnešní noci";
+    case "dnes pozdě v noci":
+      return "dnešní pozdní noci";
+    case "zítra ráno":
+      return "zítřejšího rána";
+    case "zítra odpoledne":
+      return "zítřejšího odpoledne";
+    case "zítra večer":
+      return "zítřejšího večera";
+    case "zítra v noci":
+      return "zítřejší noci";
+    case "ráno":
+      return "rána";
+    case "odpoledne":
+      return "odpoledne";
+    case "večer":
+      return "večera";
+    case "v noci":
+      return "noci";
+    case "v pondělí":
+      return "pondelí";
+    case "v úterý":
+      return "uterý";
+    case "ve středu":
+      return "středy";
+    case "ve čtvrtek":
+      return "čtvrtka";
+    case "v pátek":
+      return "pátku";
+    case "v sobotu":
+      return "soboty";
+    case "v neděli":
+      return "neděle";
+    default:
+        return a;
+  } 
+}
+
+function join_with_shared_prefix(a, b, joiner) {
+  var m = a,
+      i = 0,
+      j;
+
+  /* HACK: This gets around "today through on Tuesday" or cases like it, which
+   * are incorrect in English. */
+  if(m === "today" || m === "tomorrow")
+    m = "on " + m;
+
+  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 strip_prefix(period) {
+  return period.slice(0, 9) === "overnight" ? period.slice(4) :
+         period.slice(0, 7) ===   "in the " ? period.slice(7) :
+                                              period;
+}
+
+module.exports = require("../template")({
+  "clear": "jasno",
+  "no-precipitation": "bez srážek",
+  "mixed-precipitation": "smíšené srážky",
+  "possible-very-light-precipitation": "možnost velmi slabých srážek",
+  "very-light-precipitation": "velmi slabé srážky",
+  "possible-light-precipitation": "možnost slabých srážek",
+  "light-precipitation": "slabé srážky",
+  "medium-precipitation": "srážky",
+  "heavy-precipitation": "silné srážky",
+  "possible-very-light-rain": "možnost mrholení",
+  "very-light-rain": "mrholení",
+  "possible-light-rain": "možnost slabého deště",
+  "light-rain": "slabý déšť",
+  "medium-rain": "déšť",
+  "heavy-rain": "vydatný déšť",
+  "possible-very-light-sleet": "možnost slabého deště se sněhem",
+  "very-light-sleet": "slabý déšť se sněhem",
+  "possible-light-sleet": "možnost slabého deště se sněhem",
+  "light-sleet": "slabý déšť se sněhem",
+  "medium-sleet": "déšť se sněhem",
+  "heavy-sleet": "vydatný déšť se sněhem",
+  "possible-very-light-snow": "možnost slabého sněžení",
+  "very-light-snow": "slabé sněžení",
+  "possible-light-snow": "možnost slabého sněžení",
+  "light-snow": "slabé sněžení",
+  "medium-snow": "sněžení",
+  "heavy-snow": "vydatné sněžení",
+  "light-wind": "slabý vítr",
+  "medium-wind": "větrno",
+  "heavy-wind": "silný vítr",
+  "low-humidity": "nízká vlhkost",
+  "high-humidity": "vysoká vlhkost",
+  "fog": "mlhavo",
+  "light-clouds": "částečně zamračeno",
+  "medium-clouds": "převážně zamračeno",
+  "heavy-clouds": "zamračeno",
+  "today-morning": "dnes ráno",
+  "later-today-morning": "dnes dopoledne",
+  "today-afternoon": "dnes odpoledne",
+  "later-today-afternoon": "dnes podvečer",
+  "today-evening": "dnes večer",
+  "later-today-evening": "dnes pozdě večer",
+  "today-night": "dnes v noci",
+  "later-today-night": "dnes pozdě v noci",
+  "tomorrow-morning": "zítra ráno",
+  "tomorrow-afternoon": "zítra odpoledne",
+  "tomorrow-evening": "zítra večer",
+  "tomorrow-night": "zítra v noci",
+  "morning": "ráno",
+  "afternoon": "odpoledne",
+  "evening": "večer",
+  "night": "v noci",
+  "today": "dnes",
+  "tomorrow": "zítra",
+  "sunday": "v neděli",
+  "monday": "v pondělí",
+  "tuesday": "v úterý",
+  "wednesday": "ve středu",
+  "thursday": "ve čtvrtek",
+  "friday": "v pátek",
+  "saturday": "v sobotu",
+  "minutes": "$1 min.",
+  "fahrenheit": "$1°F",
+  "celsius": "$1°C",
+  "inches": "$1 in",
+  "centimeters": "$1 cm",
+  "less-than": "méně než $1",
+  "and": function(a, b) {
+    return join_with_shared_prefix(
+      a,
+      b,
+      " a "
+    );
+  },
+  "through": function(a, b) {
+    return "od " + remove_prefix_and_use_genitive(a) + " do " + remove_prefix_and_use_genitive(b);
+  },
+  "with": "$1, $2",
+  "range": "$1-$2",
+  "parenthetical": function(a, b) {
+    return a + " (" + b + (a === "smíšené srážky" ? " sněhu)" : ")");
+  },
+  "for-hour": "$1 hodinu",
+  "starting-in": "$1 za $2",
+  "stopping-in": "$1 skončí za $2",
+  "starting-then-stopping-later": "$1 za $2, skončí o $3 později",
+  "stopping-then-starting-later": "$1 skončí za $2 a začne znovu o $3 později",
+  "for-day": "Během dne $1",
+  "starting": function(a, b) {
+    return "od " + remove_prefix_and_use_genitive(b) + " " + a;
+  },
+  "until": function(condition, period) {
+    return condition + " až do " + remove_prefix_and_use_genitive(period);
+  },
+  "until-starting-again": function(condition, a, b) {
+    var starting = "";
+    if(endsWith(condition, "srážky"))
+      starting = ", které začnou znovu ";
+    else if(endsWith(condition, "déšť") || endsWith(condition, "déšť se sněhem") || endsWith(condition, "vítr"))
+      starting = ", který začne znovu ";
+    else if(endsWith(condition, "sněžení") || endsWith(condition, "mrholení"))
+      starting = ", které začne znovu ";
+    else if(endsWith(condition, "vlhkost"))
+      starting = ", která začne znovu ";
+    else if(endsWith(condition, "zamračeno") || endsWith(condition, "mlhavo"))
+      starting = "a začne znovu ";
+    
+    return condition + " až do " + remove_prefix_and_use_genitive(a) + starting + b;
+  },
+  "starting-continuing-until": function(condition, a, b) {
+    var continuing = "";
+    if(endsWith(condition, "srážky"))
+      continuing = ", které přetrvají až do ";
+    else if(endsWith(condition, "déšť") || endsWith(condition, "déšť se sněhem") || endsWith(condition, "vítr"))
+      continuing = ", který přetrvá až do ";
+    else if(endsWith(condition, "snežení") || endsWith(condition, "mrholení"))
+      continuing = ", které přetrvá až do ";
+    else if(endsWith(condition, "vlhkost"))
+      continuing = ", která přetrvá až do ";
+    else if(endsWith(condition, "zamračeno") || endsWith(condition, "mlhavo"))
+      continuing = " a přetrvá až do ";
+    return "od " + remove_prefix_and_use_genitive(a) + " " + condition + continuing + remove_prefix_and_use_genitive(b);
+  },
+  "during": "$2 $1",
+  "for-week": "$1 během týdne",
+  "over-weekend": "$1 přes víkend",
+  "temperatures-peaking": "$2 s teplotním maximem $1",
+  "temperatures-rising": "$2 s teplotami stoupajícími k $1",
+  "temperatures-valleying": "$2 s teplotním minimem $1",
+  "temperatures-falling": "$2 s teplotami klesajícími k $1",
+  /* Capitalize the first letter of first word. */
+  "title": function(str) {
+    return str.charAt(0).toUpperCase() + str.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/cs.json b/test_cases/cs.json
new file mode 100644
index 0000000..5483aa5
--- /dev/null
+++ b/test_cases/cs.json
@@ -0,0 +1,257 @@
+{
+  "Jasno":
+    ["title", "clear"],
+
+  "Možnost velmi slabých srážek":
+    ["title", "possible-very-light-precipitation"],
+
+  "Slabé srážky":
+    ["title", "very-light-precipitation"],
+
+  "Možnost slabých srážek":
+    ["title", "possible-light-precipitation"],
+
+  "Slabé srážky":
+    ["title", "light-precipitation"],
+
+  "Srážky":
+    ["title", "medium-precipitation"],
+
+  "Silné srážky":
+    ["title", "heavy-precipitation"],
+
+  "Možnost mrholení":
+    ["title", "possible-very-light-rain"],
+
+  "Mrholení":
+    ["title", "very-light-rain"],
+
+  "Možnost slabého deště":
+    ["title", "possible-light-rain"],
+
+  "Slabý déšť":
+    ["title", "light-rain"],
+
+  "Déšť":
+    ["title", "medium-rain"],
+
+  "Vydatný déšť":
+    ["title", "heavy-rain"],
+
+  "Možnost slabého deště se sněhem":
+    ["title", "possible-very-light-sleet"],
+
+  "Slabý déšť se sněhem":
+    ["title", "very-light-sleet"],
+
+  "Možnost slabého deště se sněhem":
+    ["title", "possible-light-sleet"],
+
+  "Slabý déšť se sněhem":
+    ["title", "light-sleet"],
+
+  "Déšť se sněhem":
+    ["title", "medium-sleet"],
+
+  "Vydatný déšť se sněhem":
+    ["title", "heavy-sleet"],
+
+  "Možnost slabého sněžení":
+    ["title", "possible-very-light-snow"],
+
+  "Slabé sněžení":
+    ["title", "very-light-snow"],
+
+  "Možnost slabého sněžení":
+    ["title", "possible-light-snow"],
+
+  "Slabé sněžení":
+    ["title", "light-snow"],
+
+  "Sněžení":
+    ["title", "medium-snow"],
+
+  "Vydatné sněžení":
+    ["title", "heavy-snow"],
+
+  "Větrno":
+    ["title", "medium-wind"],
+
+  "Silný vítr":
+    ["title", "heavy-wind"],
+
+  "Mlhavo":
+    ["title", "fog"],
+
+  "Převážně zamračeno":
+    ["title", "medium-clouds"],
+
+  "Zamračeno":
+    ["title", "heavy-clouds"],
+
+  "Nízká vlhkost a slabý vítr":
+    ["title", ["and", "low-humidity", "light-wind"]],
+
+  "Mrholení a silný vítr":
+    ["title", ["and", "very-light-rain", "heavy-wind"]],
+
+  "Vysoká vlhkost a částečně zamračeno":
+    ["title", ["and", "high-humidity", "light-clouds"]],
+
+
+  "Jasno hodinu.":
+    ["sentence", ["for-hour", "clear"]],
+
+  "Slabé sněžení za 35 min.":
+    ["sentence", ["starting-in", "very-light-snow", ["minutes", 35]]],
+
+  "Slabý déšť skončí za 15 min.":
+    ["sentence", ["stopping-in", "light-rain", ["minutes", 15]]],
+
+  "Vydatný déšť se sněhem za 20 min., skončí o 30 min. později.":
+    ["sentence",
+      ["starting-then-stopping-later",
+        "heavy-sleet",
+        ["minutes", 20],
+        ["minutes", 30]]],
+
+  "Déšť skončí za 25 min. a začne znovu o 8 min. později.":
+    ["sentence",
+      ["stopping-then-starting-later",
+        "medium-rain",
+        ["minutes", 25],
+        ["minutes", 8]]],
+
+  "Během dne převážně zamračeno.":
+    ["sentence", ["for-day", "medium-clouds"]],
+
+  "Od rána slabý déšť se sněhem.":
+    ["sentence", ["starting", "very-light-sleet", "morning"]],
+
+  "Větrno až do dnešní noci.":
+    ["sentence", ["until", "medium-wind", "today-night"]],
+
+  "Silné srážky až do odpoledne.":
+    ["sentence", ["until", "heavy-precipitation", "afternoon"]],
+
+  "Odpoledne slabý vítr.":
+    ["sentence", ["during", "light-wind", "afternoon"]],
+
+  "Dnes pozdě večer a zítra ráno sněžení.":
+    ["sentence", ["during",
+      "medium-snow",
+      ["and", "later-today-evening", "tomorrow-morning"]]],
+
+  "Vydatný déšť až do dnešního dopoledne, který začne znovu dnes večer.":
+    ["sentence", ["until-starting-again",
+      "heavy-rain",
+      "later-today-morning",
+      "today-evening"]],
+
+  "Od dnešní pozdní noci zamračeno a zítra odpoledne vydatné sněžení.":
+    ["sentence", ["starting-continuing-until",
+      "heavy-clouds",
+      "evening",
+      "night"]],
+
+  "Od odpoledne částečně zamračeno a přetrvá až do večera.":
+    ["sentence",
+      ["starting-continuing-until",
+        "light-clouds",
+        "afternoon",
+        "evening"]],
+
+  "Dnes podvečer slabý déšť se sněhem a zítra ráno mlhavo.":
+    ["sentence", ["and",
+      ["during", "light-sleet", "later-today-afternoon"],
+      ["during", "fog", "tomorrow-morning"]]],
+
+  "Od dnešního rána silný vítr, který přetrvá až do dnešního odpoledne a zítra ráno déšť se sněhem.":
+    ["sentence", ["and",
+      ["starting-continuing-until",
+        "heavy-wind",
+        "today-morning",
+        "today-afternoon"],
+      ["during", "medium-sleet", "tomorrow-morning"]]],
+
+  "Od dnešní pozdní noci zamračeno a zítra odpoledne vydatné sněžení.":
+    ["sentence", ["and",
+      ["starting", "heavy-clouds", "later-today-night"],
+      ["during", "heavy-snow", "tomorrow-afternoon"]]],
+
+  "Dnes v noci nízká vlhkost a od zítřejšího večera slabé srážky, které přetrvají až do zítřejší noci.":
+    ["sentence", ["and",
+      ["during", "low-humidity", "today-night"],
+      ["starting-continuing-until",
+        "light-precipitation",
+        "tomorrow-evening",
+        "tomorrow-night"]]],
+
+  "V noci sněžení (5 in).":
+    ["sentence", ["during",
+      ["parenthetical", "medium-snow", ["inches", 5]],
+      "night"]],
+
+  "Dnes dopoledne slabé sněžení (2 cm).":
+    ["sentence", ["during",
+      ["parenthetical", "light-snow", ["centimeters", 2]],
+      "later-today-morning"]],
+
+  "Během dne vydatné sněžení (8-12 in).":
+    ["sentence", ["for-day",
+      ["parenthetical", "heavy-snow", ["inches", ["range", 8, 12]]]]],
+
+  "Odpoledne sněžení (méně než 1 cm).":
+    ["sentence", ["during",
+      ["parenthetical", "medium-snow", ["less-than", ["centimeters", 1]]],
+      "afternoon"]],
+
+
+  "Bez srážek během týdne, zítra s teplotním maximem 85°F.":
+    ["sentence", ["with",
+      ["for-week", "no-precipitation"],
+      ["temperatures-peaking",
+        ["fahrenheit", 85],
+        "tomorrow"]]],
+
+  "Smíšené srážky přes víkend, ve čtvrtek s teplotami stoupajícími k 32°C.":
+    ["sentence", ["with",
+      ["over-weekend", "mixed-precipitation"],
+      ["temperatures-rising",
+        ["celsius", 32],
+        "thursday"]]],
+
+  "V pondělí mrholení, v pátek s teplotním minimem 15°F.":
+    ["sentence", ["with",
+      ["during", "very-light-rain", "monday"],
+      ["temperatures-valleying",
+        ["fahrenheit", 15],
+        "friday"]]],
+
+  "V úterý a ve středu slabé sněžení, v neděli s teplotami klesajícími k 0°C.":
+    ["sentence", ["with",
+      ["during", "light-snow", ["and", "tuesday", "wednesday"]],
+      ["temperatures-falling",
+        ["celsius", 0],
+        "sunday"]]],
+
+  "Od dnes do soboty srážky, v pondělí s teplotním maximem 100°F.":
+    ["sentence", ["with",
+      ["during",
+        "medium-precipitation",
+        ["through", "today", "saturday"]],
+      ["temperatures-peaking",
+        ["fahrenheit", 100],
+        "monday"]]],
+
+  "Během dne smíšené srážky (1-3 in sněhu).":
+    ["sentence",
+      ["for-day",
+        ["parenthetical", "mixed-precipitation", ["inches", ["range", 1, 3]]]]],
+
+  "Vydatné sněžení (1-3 in)":
+    ["title", ["parenthetical", "heavy-snow", ["inches", ["range", 1, 3]]]],
+
+  "Vydatné sněžení (3-5 cm)":
+    ["title", ["parenthetical", "heavy-snow", ["centimeters", ["range", 3, 5]]]]
+}