import i18n from 'i18next'; import { initReactI18next } from 'react-i18next'; import { SUPPORTED_LANGUAGE_CODES, resolveSupportedLanguage, type LanguageCode, } from '../../shared/language'; // EN import enCommon from './locales/en/common.json'; import enSettings from './locales/en/settings.json'; import enDashboard from './locales/en/dashboard.json'; import enChat from './locales/en/chat.json'; import enChannels from './locales/en/channels.json'; import enAgents from './locales/en/agents.json'; import enSkills from './locales/en/skills.json'; import enCron from './locales/en/cron.json'; import enSetup from './locales/en/setup.json'; // ZH import zhCommon from './locales/zh/common.json'; import zhSettings from './locales/zh/settings.json'; import zhDashboard from './locales/zh/dashboard.json'; import zhChat from './locales/zh/chat.json'; import zhChannels from './locales/zh/channels.json'; import zhAgents from './locales/zh/agents.json'; import zhSkills from './locales/zh/skills.json'; import zhCron from './locales/zh/cron.json'; import zhSetup from './locales/zh/setup.json'; // JA import jaCommon from './locales/ja/common.json'; import jaSettings from './locales/ja/settings.json'; import jaDashboard from './locales/ja/dashboard.json'; import jaChat from './locales/ja/chat.json'; import jaChannels from './locales/ja/channels.json'; import jaAgents from './locales/ja/agents.json'; import jaSkills from './locales/ja/skills.json'; import jaCron from './locales/ja/cron.json'; import jaSetup from './locales/ja/setup.json'; // RU import ruCommon from './locales/ru/common.json'; import ruSettings from './locales/ru/settings.json'; import ruDashboard from './locales/ru/dashboard.json'; import ruChat from './locales/ru/chat.json'; import ruChannels from './locales/ru/channels.json'; import ruAgents from './locales/ru/agents.json'; import ruSkills from './locales/ru/skills.json'; import ruCron from './locales/ru/cron.json'; import ruSetup from './locales/ru/setup.json'; export const SUPPORTED_LANGUAGES = [ { code: 'en', label: 'English' }, { code: 'zh', label: '中文' }, { code: 'ja', label: '日本語' }, { code: 'ru', label: 'Русский' }, ] as const satisfies ReadonlyArray<{ code: LanguageCode; label: string }>; const resources = { en: { common: enCommon, settings: enSettings, dashboard: enDashboard, chat: enChat, channels: enChannels, agents: enAgents, skills: enSkills, cron: enCron, setup: enSetup, }, zh: { common: zhCommon, settings: zhSettings, dashboard: zhDashboard, chat: zhChat, channels: zhChannels, agents: zhAgents, skills: zhSkills, cron: zhCron, setup: zhSetup, }, ja: { common: jaCommon, settings: jaSettings, dashboard: jaDashboard, chat: jaChat, channels: jaChannels, agents: jaAgents, skills: jaSkills, cron: jaCron, setup: jaSetup, }, ru: { common: ruCommon, settings: ruSettings, dashboard: ruDashboard, chat: ruChat, channels: ruChannels, agents: ruAgents, skills: ruSkills, cron: ruCron, setup: ruSetup, }, }; i18n .use(initReactI18next) .init({ resources, lng: resolveSupportedLanguage(typeof navigator !== 'undefined' ? navigator.language : undefined), fallbackLng: 'en', supportedLngs: [...SUPPORTED_LANGUAGE_CODES], defaultNS: 'common', ns: ['common', 'settings', 'dashboard', 'chat', 'channels', 'agents', 'skills', 'cron', 'setup'], interpolation: { escapeValue: false, // React already escapes }, react: { useSuspense: false, }, }); export default i18n;