Repository: darkskyapp/forecast-io-translations
Pull request #63 (2016-02-08 19:29:09)

Added Icelandic translation with tests.
I'd really like to be able to use your wonderful API with my native language so there you go =)


Patch:
diff --git a/lib/lang/is.js b/lib/lang/is.js
new file mode 100644
index 0000000..f4fb552
--- /dev/null
+++ b/lib/lang/is.js
@@ -0,0 +1,145 @@
+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 strip_prefix(period) {
+  return period.slice(0, 13) === "yfir nóttina" ? period.slice(5) :
+         period.slice(0, 4) ===   "um " ? period.slice(3) :
+                                              period;
+}
+
+module.exports = require("../template")({
+  "clear": "heiðskýrt",
+  "no-precipitation": "engin úrkoma",
+  "mixed-precipitation": "úrkoma með köflum",
+  "possible-very-light-precipitation": "möguleiki á lítilsháttar úrkomu",
+  "very-light-precipitation": "lítilsháttar úrkoma",
+  "possible-light-precipitation": "möguleiki á smávægilegri úrkomu",
+  "light-precipitation": "smávægileg úrkoma",
+  "medium-precipitation": "úrkoma",
+  "heavy-precipitation": "mikil úrkoma",
+  "possible-very-light-rain": "líkur á úða",
+  "very-light-rain": "úði",
+  "possible-light-rain": "líkur á skúrum",
+  "light-rain": "skúrir",
+  "medium-rain": "rigning",
+  "heavy-rain": "mikil rigning",
+  "possible-very-light-sleet": "líkur á lítilsháttar slyddu",
+  "very-light-sleet": "lítilsháttar slydda",
+  "possible-light-sleet": "líkur á smávægilegri slyddu",
+  "light-sleet": "smávægileg slydda",
+  "medium-sleet": "slydda",
+  "heavy-sleet": "mikil slydda",
+  "possible-very-light-snow": "líkur á lítilsháttar snjókomu",
+  "very-light-snow": "lítilsháttar snjókoma",
+  "possible-light-snow": "líkur á smávægilegri snjókomu",
+  "light-snow": "smávægileg snjókoma",
+  "medium-snow": "snjókoma",
+  "heavy-snow": "mikil snjókoma",
+  "light-wind": "gola",
+  "medium-wind": "rok",
+  "heavy-wind": "hávaðarok",
+  "low-humidity": "lítill raki",
+  "high-humidity": "mikill raki",
+  "fog": "þoka",
+  "light-clouds": "skýjað að hluta til",
+  "medium-clouds": "skýjað",
+  "heavy-clouds": "alskýjað",
+  "today-morning": "þennan morguninn",
+  "later-today-morning": "seinna um morguninn",
+  "today-afternoon": "þennan eftirmiðsdag",
+  "later-today-afternoon": "seinnipart dags",
+  "today-evening": "í kvöld",
+  "later-today-evening": "seinna í kvöld",
+  "today-night": "í nótt",
+  "later-today-night": "seinna í nótt",
+  "tomorrow-morning": "í fyrramálið",
+  "tomorrow-afternoon": "seinnipart morgundags",
+  "tomorrow-evening": "annað kvöld",
+  "tomorrow-night": "næstu nótt",
+  "morning": "um morguninn",
+  "afternoon": "í síðdeginu",
+  "evening": "um kvöldið",
+  "night": "yfir nóttina",
+  "today": "í dag",
+  "tomorrow": "á morgun",
+  "sunday": "á sunnudag",
+  "monday": "á mánudag",
+  "tuesday": "á þriðjudag",
+  "wednesday": "á miðvikudag",
+  "thursday": "á fimmtudag",
+  "friday": "á föstudag",
+  "saturday": "á laugardag",
+  "minutes": "$1 mín.",
+  "fahrenheit": "$1\u00B0F",
+  "celsius": "$1\u00B0C",
+  "inches": "$1 in.",
+  "centimeters": "$1 cm.",
+  "less-than": "undir $1",
+  "and": function(a, b) {
+    return join_with_shared_prefix(
+      a,
+      b,
+      a.indexOf(",") !== -1 ? " - " : " og "
+    );
+  },
+  "through": function(a, b) {
+    return join_with_shared_prefix(a, b, " þangað til ");
+  },
+  "with": "$1, með $2",
+  "range": "$1\u2013$2",
+  "parenthetical": "$1 ($2)",
+  "for-hour": "$1 næsta klukkutímann",
+  "starting-in": "$1 sem byrjar eftir $2",
+  "stopping-in": "$1, líkur eftir $2",
+  "starting-then-stopping-later": "$1 sem byrjar eftir $2, líkur $3 seinna",
+  "stopping-then-starting-later": "$1 sem líkur eftir $2, byrjar aftur $3 seinna",
+  "for-day": "$1 yfir daginn",
+  "starting": "$1, byrjar $2",
+  "until": function(condition, period) {
+    return condition + " þangað til " + strip_prefix(period);
+  },
+  "until-starting-again": function(condition, a, b) {
+    return condition + " þangað til " + strip_prefix(a) + ", byrjar aftur " + b;
+  },
+  "starting-continuing-until": function(condition, a, b) {
+    return condition + ", byrjar " + a + " og heldur áfram yfir " +
+           strip_prefix(b);
+  },
+  "during": "$1 $2",
+  "for-week": "$1 yfir vikuna",
+  "over-weekend": "$1 yfir helgina",
+  "temperatures-peaking": "hita upp að $1 $2",
+  "temperatures-rising": "hita að nálgast $1 $2",
+  "temperatures-valleying": "hita niður í $1 $2",
+  "temperatures-falling": "hita að falla niður í $1 $2",
+  /* Capitalize the first character in the word.
+   * We never titleize nor camelcase words in an sentence in Icelandic. */
+  "title": function(str) {
+    str = str.charAt(0).toUpperCase() + str.slice(1);
+    return str;
+  },
+  /* 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/is.json b/test_cases/is.json
new file mode 100644
index 0000000..e76cebb
--- /dev/null
+++ b/test_cases/is.json
@@ -0,0 +1,251 @@
+{
+  "Heiðskýrt":
+    ["title", "clear"],
+
+  "Möguleiki á lítilsháttar úrkomu":
+    ["title", "possible-very-light-precipitation"],
+
+  "Lítilsháttar úrkoma":
+    ["title", "very-light-precipitation"],
+
+  "Möguleiki á smávægilegri úrkomu":
+    ["title", "possible-light-precipitation"],
+
+  "Smávægileg úrkoma":
+    ["title", "light-precipitation"],
+
+  "Úrkoma":
+    ["title", "medium-precipitation"],
+
+  "Mikil úrkoma":
+    ["title", "heavy-precipitation"],
+
+  "Líkur á úða":
+    ["title", "possible-very-light-rain"],
+
+  "Úði":
+    ["title", "very-light-rain"],
+
+  "Líkur á skúrum":
+    ["title", "possible-light-rain"],
+
+  "Skúrir":
+    ["title", "light-rain"],
+
+  "Rigning":
+    ["title", "medium-rain"],
+
+  "Mikil rigning":
+    ["title", "heavy-rain"],
+
+  "Líkur á lítilsháttar slyddu":
+    ["title", "possible-very-light-sleet"],
+
+  "Lítilsháttar slydda":
+    ["title", "very-light-sleet"],
+
+  "Líkur á smávægilegri slyddu":
+    ["title", "possible-light-sleet"],
+
+  "Smávægileg slydda":
+    ["title", "light-sleet"],
+
+  "Slydda":
+    ["title", "medium-sleet"],
+
+  "Mikil slydda":
+    ["title", "heavy-sleet"],
+
+  "Líkur á lítilsháttar snjókomu":
+    ["title", "possible-very-light-snow"],
+
+  "Lítilsháttar snjókoma":
+    ["title", "very-light-snow"],
+
+  "Líkur á smávægilegri snjókomu":
+    ["title", "possible-light-snow"],
+
+  "Smávægileg snjókoma":
+    ["title", "light-snow"],
+
+  "Snjókoma":
+    ["title", "medium-snow"],
+
+  "Mikil snjókoma":
+    ["title", "heavy-snow"],
+
+  "Rok":
+    ["title", "medium-wind"],
+
+  "Hávaðarok":
+    ["title", "heavy-wind"],
+
+  "Þoka":
+    ["title", "fog"],
+
+  "Skýjað":
+    ["title", "medium-clouds"],
+
+  "Alskýjað":
+    ["title", "heavy-clouds"],
+
+  "Lítill raki og gola":
+    ["title", ["and", "low-humidity", "light-wind"]],
+
+  "Úði og hávaðarok":
+    ["title", ["and", "very-light-rain", "heavy-wind"]],
+
+  "Mikill raki og skýjað að hluta til":
+    ["title", ["and", "high-humidity", "light-clouds"]],
+
+
+  "Heiðskýrt næsta klukkutímann.":
+    ["sentence", ["for-hour", "clear"]],
+
+  "Lítilsháttar snjókoma sem byrjar eftir 35 mín.":
+    ["sentence", ["starting-in", "very-light-snow", ["minutes", 35]]],
+
+  "Skúrir, líkur eftir 15 mín.":
+    ["sentence", ["stopping-in", "light-rain", ["minutes", 15]]],
+
+  "Mikil slydda sem byrjar eftir 20 mín., líkur 30 mín. seinna.":
+    ["sentence",
+      ["starting-then-stopping-later",
+        "heavy-sleet",
+        ["minutes", 20],
+        ["minutes", 30]]],
+
+  "Rigning sem líkur eftir 25 mín., byrjar aftur 8 mín. seinna.":
+    ["sentence",
+      ["stopping-then-starting-later",
+        "medium-rain",
+        ["minutes", 25],
+        ["minutes", 8]]],
+
+
+  "Skýjað yfir daginn.":
+    ["sentence", ["for-day", "medium-clouds"]],
+
+  "Lítilsháttar slydda, byrjar um morguninn.":
+    ["sentence", ["starting", "very-light-sleet", "morning"]],
+
+  "Rok þangað til í nótt.":
+    ["sentence", ["until", "medium-wind", "today-night"]],
+
+  "Mikil úrkoma þangað til í síðdeginu.":
+    ["sentence", ["until", "heavy-precipitation", "afternoon"]],
+
+  "Gola í síðdeginu.":
+    ["sentence", ["during", "light-wind", "afternoon"]],
+
+  "Snjókoma seinna í kvöld og í fyrramálið.":
+    ["sentence", ["during",
+      "medium-snow",
+      ["and", "later-today-evening", "tomorrow-morning"]]],
+
+  "Mikil rigning þangað til seinna um morguninn, byrjar aftur í kvöld.":
+    ["sentence", ["until-starting-again",
+      "heavy-rain",
+      "later-today-morning",
+      "today-evening"]],
+
+  "Alskýjað, byrjar um kvöldið og heldur áfram yfir nóttina.":
+    ["sentence", ["starting-continuing-until",
+      "heavy-clouds",
+      "evening",
+      "night"]],
+
+  "Smávægileg slydda seinnipart dags og þoka í fyrramálið.":
+    ["sentence", ["and",
+      ["during", "light-sleet", "later-today-afternoon"],
+      ["during", "fog", "tomorrow-morning"]]],
+
+  "Hávaðarok, byrjar þennan morguninn og heldur áfram yfir þennan eftirmiðsdag - slydda í fyrramálið.":
+    ["sentence", ["and",
+      ["starting-continuing-until",
+        "heavy-wind",
+        "today-morning",
+        "today-afternoon"],
+      ["during", "medium-sleet", "tomorrow-morning"]]],
+
+  "Alskýjað, byrjar seinna í nótt - mikil snjókoma seinnipart morgundags.":
+    ["sentence", ["and",
+      ["starting", "heavy-clouds", "later-today-night"],
+      ["during", "heavy-snow", "tomorrow-afternoon"]]],
+
+  "Lítill raki í nótt og smávægileg úrkoma, byrjar annað kvöld og heldur áfram yfir næstu nótt.":
+    ["sentence", ["and",
+      ["during", "low-humidity", "today-night"],
+      ["starting-continuing-until",
+        "light-precipitation",
+        "tomorrow-evening",
+        "tomorrow-night"]]],
+
+  "Snjókoma (5 in.) yfir nóttina.":
+    ["sentence", ["during",
+      ["parenthetical", "medium-snow", ["inches", 5]],
+      "night"]],
+
+  "Smávægileg snjókoma (2 cm.) seinna um morguninn.":
+    ["sentence", ["during",
+      ["parenthetical", "light-snow", ["centimeters", 2]],
+      "later-today-morning"]],
+
+  "Mikil snjókoma (8\u201312 in.) yfir daginn.":
+    ["sentence", ["for-day",
+      ["parenthetical", "heavy-snow", ["inches", ["range", 8, 12]]]]],
+
+  "Snjókoma (undir 1 cm.) í síðdeginu.":
+    ["sentence", ["during",
+      ["parenthetical", "medium-snow", ["less-than", ["centimeters", 1]]],
+      "afternoon"]],
+
+
+  "Engin úrkoma yfir vikuna, með hita upp að 85\u00B0F á morgun.":
+    ["sentence", ["with",
+      ["for-week", "no-precipitation"],
+      ["temperatures-peaking",
+        ["fahrenheit", 85],
+        "tomorrow"]]],
+
+  "Úrkoma með köflum yfir helgina, með hita að nálgast 32\u00B0C á fimmtudag.":
+    ["sentence", ["with",
+      ["over-weekend", "mixed-precipitation"],
+      ["temperatures-rising",
+        ["celsius", 32],
+        "thursday"]]],
+
+  "Úði á mánudag, með hita niður í 15\u00B0F á föstudag.":
+    ["sentence", ["with",
+      ["during", "very-light-rain", "monday"],
+      ["temperatures-valleying",
+        ["fahrenheit", 15],
+        "friday"]]],
+
+  "Smávægileg snjókoma á þriðjudag og miðvikudag, með hita að falla niður í 0\u00B0C á sunnudag.":
+    ["sentence", ["with",
+      ["during", "light-snow", ["and", "tuesday", "wednesday"]],
+      ["temperatures-falling",
+        ["celsius", 0],
+        "sunday"]]],
+
+  "Úrkoma í dag þangað til á laugardag, með hita upp að 100\u00B0F á mánudag.":
+    ["sentence", ["with",
+      ["during",
+        "medium-precipitation",
+        ["through", "today", "saturday"]],
+      ["temperatures-peaking",
+        ["fahrenheit", 100],
+        "monday"]]],
+
+  "Úrkoma með köflum (1\u20133 in.) yfir daginn.":
+    ["sentence",
+      ["for-day",
+        ["parenthetical", "mixed-precipitation", ["inches", ["range", 1, 3]]]]],
+
+  "Mikil snjókoma (1\u20133 in.)":
+    ["title", ["parenthetical", "heavy-snow", ["inches", ["range", 1, 3]]]],
+
+  "Mikil snjókoma (3\u20135 cm.)":
+    ["title", ["parenthetical", "heavy-snow", ["centimeters", ["range", 3, 5]]]]
+}