createTranslationHelper.ts•1.2 kB
import { cosmiconfigSync } from 'cosmiconfig';
import os from 'os';
export interface TranslationHelper {
t: (key: string, fallback: string) => string;
dump: () => Record<string, string>;
}
export function createTranslationHelper(options?: {
configName?: string;
searchDir?: string;
}): TranslationHelper {
const usedKeys: Record<string, string> = {};
const configName = options?.configName ?? 'backlog-mcp-server';
// Load config file
const explorer = cosmiconfigSync(configName);
const searchPath = options?.searchDir ?? os.homedir();
const configResult = explorer.search(searchPath);
const config = configResult?.config || {};
function toEnvKey(key: string): string {
return `BACKLOG_MCP_${key}`;
}
function t(key: string, fallback: string): string {
const upperKey = key.toUpperCase();
if (usedKeys[upperKey]) {
return usedKeys[upperKey];
}
// Priority:ENV → config → fallback
const value =
process.env[toEnvKey(upperKey)] || config[upperKey] || fallback;
usedKeys[upperKey] = value;
return value;
}
function dump(): Record<string, string> {
return { ...usedKeys };
}
return { t, dump };
}