@botfabrik/engine-webclient 4.98.4 → 4.99.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -298,38 +298,46 @@ Diese Einstellung ist nützlich, wenn der Chatbot noch in Entwicklung ist und di
298
298
 
299
299
  ## Texte / Übersetzungen anpassen
300
300
 
301
- Sämtliche Texte des Webclients können angepasst werden. Dazu müssen im Bot-Projekt die Locale-Dateien modifiziert werden. Die anzupassenden Texte sind unter dem Namen des Webclients (z.B. `webclient`) aufzuführen.
301
+ Sämtliche Texte des Webclients können angepasst werden. Dazu müssen im Bot-Projekt die Locale-Dateien modifiziert werden. Die anzupassenden Texte sind unter `website-messenger` aufzuführen.
302
302
 
303
303
  Beispiel (de.json)
304
304
 
305
305
  ```json
306
306
  {
307
- "webclient": {
308
- "page.title": "Apptiva Chatbot",
309
- "message-input-label": "Nachricht eingeben ...",
310
- "export-transcript": {
311
- "email": {
312
- "title": "Konversation per E-Mail versenden",
313
- "description": "Geben Sie Ihre E-Mail-Adresse ein, um den Chatverlauf zu erhalten.",
314
- "cancel": "Abbrechen",
315
- "send": "Senden",
316
- "placeholder": "Ihre E-Mail-Adresse",
317
- "invalid": "Bitte gültige E-Mail-Adresse eingeben.",
318
- "success": "Ich habe den Chatverlauf an Ihre E-Mail-Adresse gesendet."
319
- },
320
- "pdf": {
321
- "title": "Konversation als PDF",
322
- "description": "Laden Sie die Konversation als PDF herunter.",
323
- "cancel": "Abbrechen",
324
- "download": "Herunterladen"
307
+ "website-messenger": {
308
+ // Texte die für alle Client-Instanzen gelten
309
+ "defaults": {
310
+ "page.title": "Apptiva Chatbot",
311
+ "message-input-label": "Nachricht eingeben ...",
312
+ "export-transcript": {
313
+ "email": {
314
+ "title": "Konversation per E-Mail versenden",
315
+ "description": "Geben Sie Ihre E-Mail-Adresse ein, um den Chatverlauf zu erhalten.",
316
+ "cancel": "Abbrechen",
317
+ "send": "Senden",
318
+ "placeholder": "Ihre E-Mail-Adresse",
319
+ "invalid": "Bitte gültige E-Mail-Adresse eingeben.",
320
+ "success": "Ich habe den Chatverlauf an Ihre E-Mail-Adresse gesendet."
321
+ },
322
+ "pdf": {
323
+ "title": "Konversation als PDF",
324
+ "description": "Laden Sie die Konversation als PDF herunter.",
325
+ "cancel": "Abbrechen",
326
+ "download": "Herunterladen"
327
+ }
325
328
  }
326
329
  },
327
- "general-conditions": {
328
- "header": "**Nutzungsbedingungen**", // Wird hier der Text leer gelassen, wird der Header inkl. Body nicht angezeigt.
329
- "body": "Bitte berücksichtigen Sie die folgenden Punkte:\n\n - ...",
330
- "accept-conditions-note": "Mit der Verwendung des Chats erklären Sie sich mit den Nutzungsbedingungen einverstanden." // Wird hier der Text leer gelassen, so wird dieses Element nicht angezeigt.
331
- },
332
- "powered-by": "Bubble Chat by [Apptiva](https://apptiva.ch)"
330
+ "overrides": {
331
+ // Texte die nur für die Client-Instanz `webclient` gelten
332
+ "webclient": {
333
+ "general-conditions": {
334
+ "header": "**Nutzungsbedingungen**", // Wird hier der Text leer gelassen, wird der Header inkl. Body nicht angezeigt.
335
+ "body": "Bitte berücksichtigen Sie die folgenden Punkte:\n\n - ...",
336
+ "accept-conditions-note": "Mit der Verwendung des Chats erklären Sie sich mit den Nutzungsbedingungen einverstanden." // Wird hier der Text leer gelassen, so wird dieses Element nicht angezeigt.
337
+ },
338
+ "powered-by": "Bubble Chat by [Apptiva](https://apptiva.ch)"
339
+ }
340
+ }
333
341
  }
334
342
  }
335
343
  ```
@@ -1,6 +1,24 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ const flat_1 = require("flat");
4
+ const TRANSLATION_KEY = 'website-messenger';
3
5
  const setTranslations = (socket, bot, clientLocale, clientName) => {
4
- socket.emit('set-translations', clientLocale, bot.translation.getResourceBundle(clientLocale)[clientName] || {});
6
+ socket.emit('set-translations', clientLocale, getTranslationsByClient(bot, clientLocale, clientName));
7
+ };
8
+ const getTranslationsByClient = (bot, clientLocale, clientName) => {
9
+ const deprecatedTranslations = bot.translation.getResourceBundle(clientLocale)[clientName];
10
+ if (deprecatedTranslations) {
11
+ bot.logger.warn('Website-Messenger is using deprecated translation structure');
12
+ return deprecatedTranslations;
13
+ }
14
+ else {
15
+ const webMessengerTranslations = bot.translation.getResourceBundle(clientLocale)[TRANSLATION_KEY] || {};
16
+ const defaults = webMessengerTranslations['defaults'] || {};
17
+ const overrides = webMessengerTranslations['overrides']?.[clientName] || {};
18
+ const defaultFlat = (0, flat_1.flatten)(defaults);
19
+ const overrideFlat = (0, flat_1.flatten)(overrides);
20
+ const mergedTranslations = { ...defaultFlat, ...overrideFlat };
21
+ return mergedTranslations;
22
+ }
5
23
  };
6
24
  exports.default = setTranslations;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@botfabrik/engine-webclient",
3
- "version": "4.98.4",
3
+ "version": "4.99.0",
4
4
  "description": "Webclient for Botfabriks Bot Engine",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -27,6 +27,7 @@
27
27
  "@node-saml/passport-saml": "^5.1.0",
28
28
  "accept-language-parser": "^1.5.0",
29
29
  "express": "^5.1.0",
30
+ "flat": "^6.0.1",
30
31
  "jsonwebtoken": "^9.0.2",
31
32
  "passport": "^0.7.0",
32
33
  "uuid": "^11.1.0"
@@ -43,5 +44,5 @@
43
44
  "tsx": "^4.20.5",
44
45
  "typescript": "5.9.2"
45
46
  },
46
- "gitHead": "6f46718f88da42376557550d9cc04bc307e5b55d"
47
+ "gitHead": "46d18bc5c9ed34ab3dc1d13c1805c437e31a6732"
47
48
  }