From 96f6ab55f78a5274d8c2a69f67693c4c90ca5aff Mon Sep 17 00:00:00 2001 From: yassinedorbozgithub Date: Thu, 10 Apr 2025 15:36:21 +0100 Subject: [PATCH 1/2] fix: make plugin settings translatable --- api/src/i18n/services/translation.service.ts | 39 +++++++++++++------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/api/src/i18n/services/translation.service.ts b/api/src/i18n/services/translation.service.ts index c2adddd8..7ffc66ec 100644 --- a/api/src/i18n/services/translation.service.ts +++ b/api/src/i18n/services/translation.service.ts @@ -12,6 +12,7 @@ import { OnEvent } from '@nestjs/event-emitter'; import { I18nService } from '@/i18n/services/i18n.service'; import { PluginService } from '@/plugins/plugins.service'; import { PluginType } from '@/plugins/types'; +import { SettingType } from '@/setting/schemas/types'; import { SettingService } from '@/setting/services/setting.service'; import { BaseService } from '@/utils/generics/base-service'; @@ -57,21 +58,33 @@ export class TranslationService extends BaseService { PluginType.block, block.message.plugin, ); - const defaultSettings = await plugin?.getDefaultSettings(); + const defaultSettings = (await plugin?.getDefaultSettings()) || []; + const filteredSettings = defaultSettings.filter( + ({ translatable, type }) => + [ + SettingType.text, + SettingType.textarea, + SettingType.multiple_text, + ].includes(type) && + (translatable === undefined || translatable === true), + ); + const settingTypeMap = new Map( + filteredSettings.map((setting) => [setting.label, setting.type]), + ); - // plugin - Object.entries(block.message.args).forEach(([l, arg]) => { - const setting = defaultSettings?.find(({ label }) => label === l); - if (setting?.translatable) { - if (Array.isArray(arg)) { - // array of text - strings = strings.concat(arg); - } else if (typeof arg === 'string') { - // text - strings.push(arg); - } + for (const [key, value] of Object.entries(block.message.args)) { + switch (settingTypeMap.get(key)) { + case SettingType.multiple_text: + strings = strings.concat(value); + break; + case SettingType.text: + case SettingType.textarea: + strings.push(value); + break; + default: + break; } - }); + } } else if ('text' in block.message && Array.isArray(block.message.text)) { // array of text strings = strings.concat(block.message.text); From 3d1c3f43286959716e8a091e7a9dffe174708d10 Mon Sep 17 00:00:00 2001 From: yassinedorbozgithub Date: Thu, 10 Apr 2025 15:38:26 +0100 Subject: [PATCH 2/2] fix: add a settingType variable --- api/src/i18n/services/translation.service.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/api/src/i18n/services/translation.service.ts b/api/src/i18n/services/translation.service.ts index 7ffc66ec..64a6a1c0 100644 --- a/api/src/i18n/services/translation.service.ts +++ b/api/src/i18n/services/translation.service.ts @@ -73,7 +73,9 @@ export class TranslationService extends BaseService { ); for (const [key, value] of Object.entries(block.message.args)) { - switch (settingTypeMap.get(key)) { + const settingType = settingTypeMap.get(key); + + switch (settingType) { case SettingType.multiple_text: strings = strings.concat(value); break;