import type { SlashCommandHandler } from './types' import type { CommandSearchResult } from '../types' import { languages } from '@/i18n-config/language' import i18n from '@/i18n-config/i18next-config' import { registerCommands, unregisterCommands } from './command-bus' // Language dependency types type LanguageDeps = { setLocale?: (locale: string) => Promise } const buildLanguageCommands = (query: string): CommandSearchResult[] => { const q = query.toLowerCase() const list = languages.filter(item => item.supported && ( !q || item.name.toLowerCase().includes(q) || String(item.value).toLowerCase().includes(q) )) return list.map(item => ({ id: `lang-${item.value}`, title: item.name, description: i18n.t('app.gotoAnything.actions.languageChangeDesc'), type: 'command' as const, data: { command: 'i18n.set', args: { locale: item.value } }, })) } /** * Language command handler * Integrates UI building, search, and registration logic */ export const languageCommand: SlashCommandHandler = { name: 'language', aliases: ['lang'], description: 'Switch between different languages', async search(args: string, _locale: string = 'en') { // Return language options directly, regardless of parameters return buildLanguageCommands(args) }, register(deps: LanguageDeps) { registerCommands({ 'i18n.set': async (args) => { const locale = args?.locale if (locale) await deps.setLocale?.(locale) }, }) }, unregister() { unregisterCommands(['i18n.set']) }, }