fix: make plugin settings translatable

This commit is contained in:
yassinedorbozgithub 2025-04-10 15:36:21 +01:00
parent 76b155f373
commit 96f6ab55f7

View File

@ -12,6 +12,7 @@ import { OnEvent } from '@nestjs/event-emitter';
import { I18nService } from '@/i18n/services/i18n.service'; import { I18nService } from '@/i18n/services/i18n.service';
import { PluginService } from '@/plugins/plugins.service'; import { PluginService } from '@/plugins/plugins.service';
import { PluginType } from '@/plugins/types'; import { PluginType } from '@/plugins/types';
import { SettingType } from '@/setting/schemas/types';
import { SettingService } from '@/setting/services/setting.service'; import { SettingService } from '@/setting/services/setting.service';
import { BaseService } from '@/utils/generics/base-service'; import { BaseService } from '@/utils/generics/base-service';
@ -57,21 +58,33 @@ export class TranslationService extends BaseService<Translation> {
PluginType.block, PluginType.block,
block.message.plugin, 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 for (const [key, value] of Object.entries(block.message.args)) {
Object.entries(block.message.args).forEach(([l, arg]) => { switch (settingTypeMap.get(key)) {
const setting = defaultSettings?.find(({ label }) => label === l); case SettingType.multiple_text:
if (setting?.translatable) { strings = strings.concat(value);
if (Array.isArray(arg)) { break;
// array of text case SettingType.text:
strings = strings.concat(arg); case SettingType.textarea:
} else if (typeof arg === 'string') { strings.push(value);
// text break;
strings.push(arg); default:
break;
} }
} }
});
} else if ('text' in block.message && Array.isArray(block.message.text)) { } else if ('text' in block.message && Array.isArray(block.message.text)) {
// array of text // array of text
strings = strings.concat(block.message.text); strings = strings.concat(block.message.text);