diff --git a/client/packages/lowcoder-core/lib/index.cjs b/client/packages/lowcoder-core/lib/index.cjs
index 6738a7ba5..40c891575 100644
--- a/client/packages/lowcoder-core/lib/index.cjs
+++ b/client/packages/lowcoder-core/lib/index.cjs
@@ -1,3 +1,5 @@
+// this is used in Node.js ??
+
'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
@@ -7589,15 +7591,62 @@ function requireReactJsxRuntime_development () {
} (jsxRuntime));
var en = {};
-
var zh = {};
+var de = {};
+var fr = {};
+var es = {};
+var it = {};
+var ar = {};
+var th = {};
+var vi = {};
+var ms = {};
+var id = {};
+var hi = {};
+var ta = {};
+var kn = {};
+var ml = {};
+var ru = {};
+var pl = {};
+var cs = {};
+var uk = {};
+var bg = {};
+var sr = {};
+var hr = {};
+var sk = {};
+var sl = {};
+var mk = {};
+var pt = {};
// file examples: en, enGB, zh, zhHK
var localeData = /*#__PURE__*/Object.freeze({
__proto__: null,
en: en,
- zh: zh
+ zh: zh,
+ de: de,
+ fr: fr,
+ es: es,
+ it: it,
+ ar: ar,
+ th: th,
+ vi: vi,
+ ms: ms,
+ id: id,
+ hi: hi,
+ ta: ta,
+ kn: kn,
+ ml: ml,
+ ru: ru,
+ pl: pl,
+ cs: cs,
+ uk: uk,
+ bg: bg,
+ sr: sr,
+ hr: hr,
+ sk: sk,
+ sl: sl,
+ mk: mk,
+ pt: pt
});
var ErrorKind;
@@ -11156,8 +11205,14 @@ originalMessage) {
}
var varName = el.value;
// Enforce that all required values are provided by the caller.
+ var value = "";
if (!(values && varName in values)) {
- throw new MissingValueError(varName, originalMessage);
+ // throw new MissingValueError(varName, originalMessage);
+ console.log("No value provided for the variable \"" + varName + "\". " + originalMessage);
+ value = varName;
+ }
+ else {
+ value = values[varName];
}
var value = values[varName];
if (isArgumentElement(el)) {
@@ -11511,11 +11566,18 @@ See the accompanying LICENSE file for terms.
*/
var IntlMessageFormat = IntlMessageFormat$1;
-var defaultLocale = "en";
+var defaultLocale = "en";
var locales = [defaultLocale];
+// Falk - Adapted the central translator to check if a localStorage key is existing.
+
+const uiLanguage = localStorage.getItem('lowcoder_uiLanguage');
+
if (globalThis.navigator) {
- if (navigator.languages && navigator.languages.length > 0) {
+ if (uiLanguage) {
+ locales = [uiLanguage];
+ }
+ else if (navigator.languages && navigator.languages.length > 0) {
locales = __spreadArray([], navigator.languages, true);
}
else {
@@ -11582,7 +11644,9 @@ function getDataByLocale(fileData, suffix, filterLocales, targetLocales) {
return { data: data, language: name_1.slice(0, 2) };
}
}
- throw new Error("Not found ".concat(names));
+ console.error("Not found ".concat(names));
+ // better to continue the app without crashing
+ // throw new Error("Not found ".concat(names));
}
var globalMessageKeyPrefix = "@";
var globalMessages = Object.fromEntries(Object.entries(getDataByLocale(localeData, "").data).map(function (_a) {
@@ -11628,7 +11692,7 @@ var Translator = /** @class */ (function () {
return Translator;
}());
function getI18nObjects(fileData, filterLocales) {
- return getDataByLocale(fileData, "Obj", filterLocales).data;
+ return getDataByLocale(fileData, "Obj", filterLocales)?.data;
}
exports.AbstractComp = AbstractComp;
diff --git a/client/packages/lowcoder-core/lib/index.d.ts b/client/packages/lowcoder-core/lib/index.d.ts
index 27d0c31a4..ea81c29e7 100644
--- a/client/packages/lowcoder-core/lib/index.d.ts
+++ b/client/packages/lowcoder-core/lib/index.d.ts
@@ -1,3 +1,5 @@
+// this is the tpyes file next to index.js
+
///
import React, { ReactNode } from 'react';
diff --git a/client/packages/lowcoder-core/lib/index.js b/client/packages/lowcoder-core/lib/index.js
index 26fc137ef..f2b298d74 100644
--- a/client/packages/lowcoder-core/lib/index.js
+++ b/client/packages/lowcoder-core/lib/index.js
@@ -11194,11 +11194,16 @@ originalMessage) {
continue;
}
var varName = el.value;
+ var value = "";
// Enforce that all required values are provided by the caller.
if (!(values && varName in values)) {
- throw new MissingValueError(varName, originalMessage);
+ console.log("No value provided for the variable \"" + varName + "\". " + originalMessage);
+ // throw new MissingValueError(varName, originalMessage);
+ value = varName;
+ }
+ else {
+ value = values[varName];
}
- var value = values[varName];
if (isArgumentElement(el)) {
if (!value || typeof value === 'string' || typeof value === 'number') {
value =
diff --git a/client/packages/lowcoder-core/src/i18n/index.tsx b/client/packages/lowcoder-core/src/i18n/index.tsx
index 9a89de3b6..553d25d8d 100644
--- a/client/packages/lowcoder-core/src/i18n/index.tsx
+++ b/client/packages/lowcoder-core/src/i18n/index.tsx
@@ -3,12 +3,20 @@ import IntlMessageFormat from "intl-messageformat";
import log from "loglevel";
import { Fragment } from "react";
+// this is a copy of the translator from ../../lib/index.js
+// TODO: check if this file is used at all
+
const defaultLocale = "en";
let locales = [defaultLocale];
+// Falk - Adapted the central translator to check if a localStorage key is existing.
+const uiLanguage = localStorage.getItem('lowcoder_uiLanguage');
if (globalThis.navigator) {
- if (navigator.languages && navigator.languages.length > 0) {
+ if (uiLanguage) {
+ locales = [uiLanguage];
+ }
+ else if (navigator.languages && navigator.languages.length > 0) {
locales = [...navigator.languages];
} else {
locales = [navigator.language || ((navigator as any).userLanguage as string) || defaultLocale];
@@ -69,8 +77,6 @@ function getDataByLocale(
targetLocales?: string[]
) {
- console.log("Überraschung", fileData);
-
let localeInfos = [...fallbackLocaleInfos];
const targetLocaleInfo = parseLocales(targetLocales || []);
@@ -99,8 +105,8 @@ function getDataByLocale(
return { data: data as T, language: name.slice(0, 2) };
}
}
-
- throw new Error(`Not found ${names}`);
+ console.error(`Not found ${names}`);
+ // throw new Error(`Not found ${names}`);
}
type AddDot = T extends "" ? "" : `.${T}`;
@@ -190,5 +196,5 @@ export class Translator {
}
export function getI18nObjects(fileData: object, filterLocales?: string) {
- return getDataByLocale(fileData, "Obj", filterLocales).data;
+ return getDataByLocale(fileData, "Obj", filterLocales)?.data;
}
diff --git a/client/packages/lowcoder/src/i18n/locales/de.ts b/client/packages/lowcoder/src/i18n/locales/de.ts
index 2075c450b..0cb17b4ad 100644
--- a/client/packages/lowcoder/src/i18n/locales/de.ts
+++ b/client/packages/lowcoder/src/i18n/locales/de.ts
@@ -1960,18 +1960,18 @@ export const de: typeof en = {
"temporaryState": {
...en.temporaryState,
"value": "Anfangswert",
- "valueTooltip": "Der Anfangswert, der im temporären Status gespeichert wird, kann ein beliebiger gültiger JSON-Wert sein.",
- "docLink": "Lies mehr über temporäre Staaten...",
+ "valueTooltip": "Der Anfangswert, der im temporären Zustand gespeichert wird, kann ein beliebiger gültiger JSON-Wert sein.",
+ "docLink": "Lies mehr über temporäre Zustände...",
"pathTypeError": "Pfad muss entweder ein String oder ein Array von Werten sein",
"unStructuredError": "Unstrukturierte Daten {prev} können nicht von {path} aktualisiert werden",
"valueDesc": "Vorläufiger Zustandswert",
- "deleteMessage": "Der temporäre Status wurde erfolgreich gelöscht. Du kannst {undoKey} zum Rückgängigmachen verwenden.",
+ "deleteMessage": "Der temporäre Zustand wurde erfolgreich gelöscht. Du kannst {undoKey} zum Rückgängigmachen verwenden.",
"documentationText": "Temporäre Zustände in Lowcoder sind eine leistungsstarke Funktion zur Verwaltung komplexer Variablen, die den Zustand von Komponenten in deiner Anwendung dynamisch aktualisieren. Diese Zustände dienen als Zwischenspeicher für Daten, die sich im Laufe der Zeit aufgrund von Benutzerinteraktionen oder anderen Prozessen ändern können."
},
"dataResponder": {
...en.dataResponder,
"data": "Daten",
- "dataDesc": "Daten des aktuellen Datenresponders",
+ "dataDesc": "Daten des aktuellen Data Responders",
"dataTooltip": "Wenn diese Daten geändert werden, lösen sie nachfolgende Aktionen aus.",
"docLink": "Lies mehr über die Data Responders...",
"deleteMessage": "Der Data Responder wurde erfolgreich gelöscht. Du kannst {undoKey} zum Rückgängigmachen verwenden.",
@@ -2295,7 +2295,7 @@ export const de: typeof en = {
"update": "Was gibt's Neues?",
"version": "Version",
"versionWithColon": "Version: ",
- "submitIssue": "Ausgabe einreichen"
+ "submitIssue": "Problem melden"
},
"header": {
...en.header,
@@ -2304,11 +2304,11 @@ export const de: typeof en = {
"recoverAppSnapshotTitle": "Diese Version wiederherstellen?",
"recoverAppSnapshotContent": "Stelle die aktuelle App auf die Version wieder her, die zum Zeitpunkt {time} erstellt wurde.",
"recoverAppSnapshotMessage": "Diese Version wiederherstellen",
- "returnEdit": "Zurück zur Redaktion",
+ "returnEdit": "Zurück zum Bearbeiten",
"deploy": "Veröffentlichen",
"export": "Exportieren nach JSON",
"editName": "Name bearbeiten",
- "duplicate": "Duplizieren {type}",
+ "duplicate": "{type} Duplizieren",
"snapshot": "Bearbeitungs-Historie",
"scriptsAndStyles": "Skripte und Stil",
"appSettings": "App-Einstellungen",
diff --git a/client/packages/lowcoder/src/util/localStorageUtil.ts b/client/packages/lowcoder/src/util/localStorageUtil.ts
index 2eb1a3dfd..0710fc8d1 100644
--- a/client/packages/lowcoder/src/util/localStorageUtil.ts
+++ b/client/packages/lowcoder/src/util/localStorageUtil.ts
@@ -106,11 +106,11 @@ export function getMainCompValue(): object {
export type HomeLayoutType = "list" | "card";
export function saveHomeLayout(layout: HomeLayoutType) {
- localStorage.setItem("home_layout", layout);
+ localStorage.setItem("lowcoder_home_layout", layout);
}
export function getHomeLayout(): HomeLayoutType {
- const layout = localStorage.getItem("home_layout");
+ const layout = localStorage.getItem("lowcoder_home_layout");
return layout === "list" || layout === "card" ? layout : "card";
}