Handle non-string values in Language.ts without logging debug messages
authorTim Düsterhus <duesterhus@woltlab.com>
Tue, 9 Mar 2021 13:43:52 +0000 (14:43 +0100)
committerTim Düsterhus <duesterhus@woltlab.com>
Tue, 9 Mar 2021 13:43:52 +0000 (14:43 +0100)
ts/WoltLabSuite/Core/Date/Picker.ts
ts/WoltLabSuite/Core/Date/Time/Relative.ts
ts/WoltLabSuite/Core/Date/Util.ts
ts/WoltLabSuite/Core/Language.ts
wcfsetup/install/files/js/WoltLabSuite/Core/Language.js

index a4fe0b67e00f33512a3255eea787b61f94c3e773..bfb1ca2f7acdd31d1b3ca1bd0db90b2cec63335f 100644 (file)
@@ -75,7 +75,7 @@ function createPicker() {
   monthYearContainer.appendChild(_dateMonth);
 
   let months = "";
-  const monthNames = Language.get("__monthsShort");
+  const monthNames = (Language.get("__monthsShort") as any) as string[];
   for (let i = 0; i < 12; i++) {
     months += `<option value="${i}">${monthNames[i]}</option>`;
   }
@@ -106,7 +106,7 @@ function createPicker() {
   item.className = "weekdays";
   _dateGrid.appendChild(item);
 
-  const weekdays = Language.get("__daysShort");
+  const weekdays = (Language.get("__daysShort") as any) as string[];
   for (let i = 0; i < 7; i++) {
     let day = i + _firstDayOfWeek;
     if (day > 6) {
index 507dbd404c94021070c008df0848746d42571478..f7e268fd3a2243d42dadee3aa2a867305e118b7c 100644 (file)
@@ -86,7 +86,7 @@ function rebuild(element: HTMLTimeElement, date: Date, timestamp: number): void
     // get day of week
     const dateObj = DateUtil.getTimezoneDate(elTimestamp * 1000, parseInt(elOffset, 10) * 1000);
     const dow = dateObj.getDay();
-    const day = Language.get("__days")[dow];
+    const day = ((Language.get("__days") as any) as string[])[dow];
 
     element.textContent = Language.get("wcf.date.relative.pastDays", { days: days, day: day, time: elTime });
   }
index 84fdd6f2b47801a3751ca894d15383e76861c6b0..09c67b368911b79c94f55e525ea3f08fcd4e6d5e 100644 (file)
@@ -117,11 +117,11 @@ export function format(date: Date, format: string): string {
         break;
       case "l":
         // `Monday` through `Sunday` (localized)
-        char = Language.get("__days")[date.getDay()];
+        char = ((Language.get("__days") as any) as string[])[date.getDay()];
         break;
       case "D":
         // `Mon` through `Sun` (localized)
-        char = Language.get("__daysShort")[date.getDay()];
+        char = ((Language.get("__daysShort") as any) as string[])[date.getDay()];
         break;
       case "S":
         // ignore english ordinal suffix
@@ -139,11 +139,11 @@ export function format(date: Date, format: string): string {
         break;
       case "F":
         // `January` through `December` (localized)
-        char = Language.get("__months")[date.getMonth()];
+        char = ((Language.get("__months") as any) as string[])[date.getMonth()];
         break;
       case "M":
         // `Jan` through `Dec` (localized)
-        char = Language.get("__monthsShort")[date.getMonth()];
+        char = ((Language.get("__monthsShort") as any) as string[])[date.getMonth()];
         break;
 
       // year
index e61b0e62eec5e6dea384ba66ea07734a952da8e0..1a47988eeaa82a1335cba13157350c0d271f4194 100644 (file)
@@ -27,7 +27,19 @@ export function addObject(object: LanguageItems): void {
  * Adds a single language item to the store.
  */
 export function add(key: string, value: string): void {
-  addToStore(key, compile(value));
+  if (typeof value === "string") {
+    addToStore(key, compile(value));
+  } else {
+    // Historically a few items that are added to the language store do not represent actual phrases, but
+    // instead contain a collection (i.e. Array) of items. Most notably these are entries related to date
+    // processing, containg lists of localized month / weekday names.
+    //
+    // Despite this method technically only taking `string`s as the `value` we need to correctly handle
+    // them which we do by simply storing a function that returns the value as-is.
+    addToStore(key, function () {
+      return value;
+    });
+  }
 }
 
 /**
index ae76f0b437a4ef4175d33c6c43c10383fc9a1a9b..9afa7c0729bf16fdeb35f1de595041c09f7b6764 100644 (file)
@@ -26,7 +26,20 @@ define(["require", "exports", "tslib", "./Template", "./Language/Store", "./Lang
      * Adds a single language item to the store.
      */
     function add(key, value) {
-        Store_1.add(key, compile(value));
+        if (typeof value === "string") {
+            Store_1.add(key, compile(value));
+        }
+        else {
+            // Historically a few items that are added to the language store do not represent actual phrases, but
+            // instead contain a collection (i.e. Array) of items. Most notably these are entries related to date
+            // processing, containg lists of localized month / weekday names.
+            //
+            // Despite this method technically only taking `string`s as the `value` we need to correctly handle
+            // them which we do by simply storing a function that returns the value as-is.
+            Store_1.add(key, function () {
+                return value;
+            });
+        }
     }
     exports.add = add;
     /**