Files
nanobot/webui/src/channel-plugins/i18n.ts
T

52 lines
1.3 KiB
TypeScript

import type { TFunction } from "i18next";
type ChannelFieldMessages = {
label: string;
placeholder?: string;
help?: string;
choices?: Record<string, string>;
};
export type ChannelMessages = {
displayName?: string;
description: string;
requirements: string;
setup: {
primaryAction?: string;
docsLabel?: string;
officialLabel?: string;
summary?: string;
tryIt?: string;
steps: string[];
fields?: Record<string, ChannelFieldMessages>;
actions?: Record<string, string>;
presets?: Record<string, string>;
};
custom?: Record<string, string>;
};
export type ChannelTranslator = (
key: string,
fallback: string,
values?: Record<string, unknown>,
) => string;
export function channelNamespace(channel: string): string {
return `channel-${channel}`;
}
export function channelTranslator(t: TFunction, channel: string): ChannelTranslator {
const namespace = channelNamespace(channel);
return (key, fallback, values = {}) => t(key, {
ns: namespace,
defaultValue: fallback,
...values,
});
}
export function channelFieldMessageKey(channel: string, configKey: string): string {
const prefix = `channels.${channel}.`;
const field = configKey.startsWith(prefix) ? configKey.slice(prefix.length) : configKey;
return field.replace(/[^A-Za-z0-9_-]+/g, "_");
}