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 enChat from './locales/en/chat.json'; import enSetup from './locales/en/setup.json'; import enDashboard from './locales/en/dashboard.json'; // ZH import zhCommon from './locales/zh/common.json'; import zhSettings from './locales/zh/settings.json'; import zhChat from './locales/zh/chat.json'; import zhSetup from './locales/zh/setup.json'; import zhDashboard from './locales/zh/dashboard.json'; // JA import jaCommon from './locales/ja/common.json'; import jaSettings from './locales/ja/settings.json'; import jaChat from './locales/ja/chat.json'; import jaSetup from './locales/ja/setup.json'; import jaDashboard from './locales/ja/dashboard.json'; // RU import ruCommon from './locales/ru/common.json'; import ruSettings from './locales/ru/settings.json'; import ruChat from './locales/ru/chat.json'; import ruSetup from './locales/ru/setup.json'; import ruDashboard from './locales/ru/dashboard.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, chat: enChat, setup: enSetup, dashboard: enDashboard, }, zh: { common: zhCommon, settings: zhSettings, chat: zhChat, setup: zhSetup, dashboard: zhDashboard, }, ja: { common: jaCommon, settings: jaSettings, chat: jaChat, setup: jaSetup, dashboard: jaDashboard, }, ru: { common: ruCommon, settings: ruSettings, chat: ruChat, setup: ruSetup, dashboard: ruDashboard, }, }; i18n .use(initReactI18next) .init({ resources, lng: resolveSupportedLanguage(typeof navigator !== 'undefined' ? navigator.language : undefined), fallbackLng: 'en', supportedLngs: [...SUPPORTED_LANGUAGE_CODES], defaultNS: 'common', ns: ['common', 'settings', 'chat', 'setup', 'dashboard'], interpolation: { escapeValue: false, // React already escapes }, react: { useSuspense: false, }, }); export default i18n;