Repository: darkskyapp/forecast-io-translations (js)

Issue:
Support Thunderstorm and Next-Week Properties in Polish
In the near future, the API will begin generating the following new properties:

*   `possible-thunderstorm`
*   `thunderstorm`
*   `next-sunday`
*   `next-monday`
*   `next-tuesday`
*   `next-wednesday`
*   `next-thursday`
*   `next-friday`
*   `next-saturday`

Add support for these properties to Polish. (Information is available in the README, and examples are visible in `/lib/lang/en.js` and `/test_cases/en.js`.)


Pull request description:
Polish translation update
Closes #108 + some minor changes.

Patch:
diff --git a/lib/lang/pl.js b/lib/lang/pl.js
index 262c3d0..589a186 100644
--- a/lib/lang/pl.js
+++ b/lib/lang/pl.js
@@ -1,29 +1,58 @@
 function join_with_shared_prefix(a, b, joiner) {
   var m = a,
+      n = b,
       i = 0,
       j;
+  if(m === "we wtorek")
+    m = "w wtorek";
+  if(n === "we wtorek")
+    n = "w wtorek";
   while(i !== m.length &&
-        i !== b.length &&
-        m.charCodeAt(i) === b.charCodeAt(i))
+        i !== n.length &&
+        m.charCodeAt(i) === n.charCodeAt(i))
     ++i;
   while(i && m.charCodeAt(i - 1) !== 32)
     --i;
+  if(i === 2 && b === "we wtorek")
+    i = 3;
   return a + joiner + b.slice(i);
 }
 
-function for_through(a) {
-  if ("w poniedziałek"===a) return "poniedziałku";
-  else if ("we wtorek"===a) return "wtorku";
-  else if ("w środę"===a) return "środy";
-  else if ("w czwartek"===a) return "czwartku";
-  else if ("w piątek"===a) return "piątku";
-  else if ("w sobotę"===a) return "soboty";
-  else if ("w niedzielę"===a) return "niedzieli";
-  else if ("rano"===a) return "rana";
-  else if ("po południu"===a) return "popołudnia";
-  else if ("wieczorem"===a) return "wieczora";
-  else if ("nocą"===a) return "nocy";
-  else return a;
+function genitive_form(a) {
+  switch(a) {
+    case "jutro":
+      return "jutra";
+    case "w poniedziałek":
+      return "poniedziałku";
+    case "we wtorek":
+      return "wtorku";
+    case "w środę":
+      return "środy";
+    case "w czwartek":
+      return "czwartku";
+    case "w piątek":
+      return "piątku";
+    case "w sobotę":
+      return "soboty";
+    case "w niedzielę":
+      return "niedzieli";
+    case "w przyszły poniedziałek":
+      return "przyszłego poniedziałku";
+    case "w przyszły wtorek":
+      return "przyszłego wtorku";
+    case "w przyszłą środę":
+      return "przyszłej środy";
+    case "w przyszły czwartek":
+      return "przyszłego czwartku";
+    case "w przyszły piątek":
+      return "przyszłego piątku";
+    case "w przyszłą sobotę":
+      return "przyszłej soboty";
+    case "w przyszłą niedzielę":
+      return "przyszłej niedzieli";
+    default:
+        return a;
+  } 
 }
 
 module.exports = require("../template")({
@@ -54,6 +83,8 @@ module.exports = require("../template")({
   "light-snow": "niewielki śnieg",
   "medium-snow": "śnieg",
   "heavy-snow": "śnieżyca",
+  "possible-thunderstorm": "możliwa burza",
+  "thunderstorm": "burza",
   "light-wind": "słaby wiatr",
   "medium-wind": "umiarkowany wiatr",
   "heavy-wind": "silny wiatr",
@@ -88,6 +119,13 @@ module.exports = require("../template")({
   "thursday": "w czwartek",
   "friday": "w piątek",
   "saturday": "w sobotę",
+  "next-sunday": "w przyszłą niedzielę",
+  "next-monday": "w przyszły poniedziałek",
+  "next-tuesday": "w przyszły wtorek",
+  "next-wednesday": "w przyszłą środę",
+  "next-thursday": "w przyszły czwartek",
+  "next-friday": "w przyszły piątek",
+  "next-saturday": "w przyszłą sobotę",
   "minutes": "$1 min.",
   "fahrenheit": "$1\u00B0F",
   "celsius": "$1\u00B0C",
@@ -98,7 +136,10 @@ module.exports = require("../template")({
     var times = ["w poniedziałek","we wtorek","w środę","w czwartek","w piątek",
                  "w sobotę","w niedzielę","rano","po południu","wieczorem","nocą",
                  "przed południem","późnym popołudniem","późnym wieczorem","późno w nocy",
-                 "dzisiaj","jutro","jutro rano","jutro po południu","jutro wieczorem"];
+                 "dzisiaj","jutro","jutro rano","jutro po południu","jutro wieczorem",
+                 "w przyszły poniedziałek","w przyszły wtorek","w przyszłą środę",
+                 "w przyszły czwartek","w przyszły piątek","w przyszłą sobotę",
+                 "w przyszłą niedzielę"];
     return join_with_shared_prefix(
       a,
       b,
@@ -106,11 +147,13 @@ module.exports = require("../template")({
     );
   },
   "through": function(a, b) {    
-    return 'od ' + for_through(a) + ' do ' + for_through(b);
+    return 'od ' + genitive_form(a) + ' do ' + genitive_form(b);
   },
   "with": "$1, $2",
   "range": "$1\u2013$2",
-  "parenthetical": "$1 ($2)",
+  "parenthetical": function(a, b) {
+    return a + " (" + b + (a === "przelotne opady" ? " śniegu)" : ")");
+  },
   "for-hour": "$1 przez godzinę",
   "starting-in": "$1 za $2",
   "stopping-in": "$1 skończy się za $2",
@@ -133,10 +176,10 @@ module.exports = require("../template")({
   "during": "$2 $1",
   "for-week": "$1 w ciągu tygodnia",
   "over-weekend": "$1 w ciągu weekendu",
-  "temperatures-peaking": "$2 temperatura maksymalna $1",
-  "temperatures-rising": "$2 temperatura do $1",
+  "temperatures-peaking": "$2 temperatura wzrośnie do $1",
+  "temperatures-rising": "$2 ocieplenie do $1",
   "temperatures-valleying": "$2 temperatura spadnie do $1",
-  "temperatures-falling": "$2 temperatura około $1",
+  "temperatures-falling": "$2 ochłodzenie do $1",
   /* Capitalize the first letter of every word is no adequate for this module */
   "title": function(str) {
     return str.charAt(0).toUpperCase() + str.slice(1);


Test patch:
diff --git a/test_cases/pl.json b/test_cases/pl.json
index e15ae59..73d65f7 100644
--- a/test_cases/pl.json
+++ b/test_cases/pl.json
@@ -200,14 +200,14 @@
       "afternoon"]],
 
 
-  "Brak opadów w ciągu tygodnia, jutro temperatura maksymalna 85\u00B0F.":
+  "Brak opadów w ciągu tygodnia, jutro temperatura wzrośnie do 85\u00B0F.":
     ["sentence", ["with",
       ["for-week", "no-precipitation"],
       ["temperatures-peaking",
         ["fahrenheit", 85],
         "tomorrow"]]],
 
-  "Przelotne opady w ciągu weekendu, w czwartek temperatura do 32\u00B0C.":
+  "Przelotne opady w ciągu weekendu, w czwartek ocieplenie do 32\u00B0C.":
     ["sentence", ["with",
       ["over-weekend", "mixed-precipitation"],
       ["temperatures-rising",
@@ -221,19 +221,43 @@
         ["fahrenheit", 15],
         "friday"]]],
 
-  "We wtorek i w środę niewielki śnieg, w niedzielę temperatura około 0\u00B0C.":
+  "We wtorek i przyszłą środę niewielki śnieg, w niedzielę ochłodzenie do 0\u00B0C.":
     ["sentence", ["with",
-      ["during", "light-snow", ["and", "tuesday", "wednesday"]],
+      ["during", "light-snow", ["and", "tuesday", "next-wednesday"]],
       ["temperatures-falling",
         ["celsius", 0],
         "sunday"]]],
 
-  "Od dzisiaj do soboty opady, w poniedziałek temperatura maksymalna 100\u00B0F.":
+  "Od dzisiaj do soboty opady, w poniedziałek temperatura wzrośnie do 100\u00B0F.":
     ["sentence", ["with",
       ["during",
         "medium-precipitation",
         ["through", "today", "saturday"]],
       ["temperatures-peaking",
         ["fahrenheit", 100],
-        "monday"]]]
+        "monday"]]],
+
+  "Przelotne opady (1\u20133 in śniegu) w ciągu dnia.":
+    ["sentence",
+      ["for-day",
+        ["parenthetical", "mixed-precipitation", ["inches", ["range", 1, 3]]]]],
+
+  "Śnieżyca (1\u20133 in)":
+    ["title", ["parenthetical", "heavy-snow", ["inches", ["range", 1, 3]]]],
+
+  "Śnieżyca (3\u20135 cm)":
+    ["title", ["parenthetical", "heavy-snow", ["centimeters", ["range", 3, 5]]]],
+
+  "Możliwa burza":
+    ["title", "possible-thunderstorm"],
+
+  "Ulewa, burza":
+    ["title", ["and", "heavy-rain", "thunderstorm"]],
+
+  "W poniedziałek i wtorek możliwy niewielki deszcz, we wtorek ochłodzenie do 18\u00B0C.":
+    ["sentence", ["with",
+      ["during", "possible-light-rain", ["and", "monday", "tuesday"]],
+      ["temperatures-falling",
+        ["celsius", 18],
+        "tuesday"]]]
 }