mirror of
https://github.com/Ku6epXBOCTuK/easy-png-tools.git
synced 2026-09-14 13:36:36 +00:00
64 lines
2.1 KiB
TypeScript
64 lines
2.1 KiB
TypeScript
import type { ParamDef, ToolEntry } from "$lib/registry";
|
|
import type { SearchDoc } from "./matching";
|
|
import { getMergedDict } from "./locale.svelte";
|
|
import { ru } from "./ru";
|
|
|
|
/**
|
|
* Строки инструмента на активной локали.
|
|
* Русский текст живёт в самом реестре (базовая локаль),
|
|
* переводы — в секции tools словарей; отсутствие ключа даёт фолбэк на реестр.
|
|
*/
|
|
export function toolTitle(tool: ToolEntry): string {
|
|
return getMergedDict().tools[tool.id]?.title ?? tool.title;
|
|
}
|
|
|
|
export function toolDescription(tool: ToolEntry): string {
|
|
return getMergedDict().tools[tool.id]?.description ?? tool.description;
|
|
}
|
|
|
|
export function paramLabel(tool: ToolEntry, param: ParamDef): string {
|
|
const viaDict = getMergedDict().tools[tool.id]?.params?.[param.id];
|
|
if (viaDict) return viaDict;
|
|
const viaDef = param as { label?: string };
|
|
return viaDef.label ?? param.id;
|
|
}
|
|
|
|
export function optionLabel(
|
|
tool: ToolEntry,
|
|
param: ParamDef,
|
|
value: string,
|
|
): string {
|
|
const viaDict = getMergedDict().tools[tool.id]?.options?.[param.id]?.[value];
|
|
if (viaDict) return viaDict;
|
|
if (param.type === "select") {
|
|
return param.options.find((o) => o.value === value)?.label ?? value;
|
|
}
|
|
return value;
|
|
}
|
|
|
|
function dedupe(values: string[]): string[] {
|
|
return [...new Set(values.filter((v) => v.length > 0))];
|
|
}
|
|
|
|
/**
|
|
* Поисковый документ инструмента: строки активной локали, русского и английского
|
|
* (реестр) вместе — запрос находит инструмент по любому из языков независимо
|
|
* от того, какой сейчас включён.
|
|
*/
|
|
export function toolSearchDoc(tool: ToolEntry): SearchDoc {
|
|
const active = getMergedDict().tools[tool.id];
|
|
return {
|
|
id: tool.id,
|
|
titles: dedupe([
|
|
active?.title ?? "",
|
|
ru.tools[tool.id]?.title ?? "",
|
|
tool.title,
|
|
]),
|
|
descriptions: dedupe([
|
|
active?.description ?? "",
|
|
ru.tools[tool.id]?.description ?? "",
|
|
tool.description,
|
|
]),
|
|
};
|
|
}
|