diff --git a/apps/react/src/app/i18n/i18n.ts b/apps/react/src/app/i18n/i18n.ts index a1eaeb7d3..0d9f95b95 100644 --- a/apps/react/src/app/i18n/i18n.ts +++ b/apps/react/src/app/i18n/i18n.ts @@ -1,8 +1,17 @@ import i18n from 'i18next' import { initReactI18next } from 'react-i18next' +import ruData from '../../../public/assets/i18n/ru.json' +import enData from '../../../public/assets/i18n/en.json' +import esData from '../../../public/assets/i18n/es.json' +import frData from '../../../public/assets/i18n/fr.json' +import itData from '../../../public/assets/i18n/it.json' +import jaData from '../../../public/assets/i18n/ja.json' +import koData from '../../../public/assets/i18n/ko.json' +import deData from '../../../public/assets/i18n/de.json' +import zhData from '../../../public/assets/i18n/zh.json' // Flatten nested translation objects -const flattenTranslations = (obj: any, prefix = ''): Record => { +const flattenTranslations = (obj: any): Record => { const result: Record = {} const flatten = (current: any, path: string) => { @@ -16,7 +25,7 @@ const flattenTranslations = (obj: any, prefix = ''): Record => { } } - flatten(obj, prefix) + flatten(obj, '') return result } @@ -49,21 +58,30 @@ const getInitialLanguage = (): string => { const lng = getInitialLanguage() -// Initialize with empty resources, will be loaded dynamically +// Create resources with flattened translations +const ruFlat = flattenTranslations(ruData) +const resources = { + ru: { translation: ruFlat }, + en: { translation: flattenTranslations(enData) }, + es: { translation: flattenTranslations(esData) }, + fr: { translation: flattenTranslations(frData) }, + it: { translation: flattenTranslations(itData) }, + ja: { translation: flattenTranslations(jaData) }, + ko: { translation: flattenTranslations(koData) }, + de: { translation: flattenTranslations(deData) }, + zh: { translation: flattenTranslations(zhData) }, +} + +// Debug logging +console.log('i18n: Selected language:', lng) +console.log('i18n: SHARED.TRIP_TYPE value:', ruFlat['SHARED.TRIP_TYPE']) +console.log('i18n: SHARED.SELECT_CITY value:', ruFlat['SHARED.SELECT_CITY']) +console.log('i18n: Number of keys in ru.translation:', Object.keys(ruFlat).length) + i18n .use(initReactI18next) .init({ - resources: { - ru: { translation: {} }, - en: { translation: {} }, - es: { translation: {} }, - fr: { translation: {} }, - it: { translation: {} }, - ja: { translation: {} }, - ko: { translation: {} }, - de: { translation: {} }, - zh: { translation: {} }, - }, + resources, fallbackLng: 'ru', lng, defaultNS: 'translation', @@ -76,27 +94,4 @@ i18n }, }) -// Load translations dynamically -const loadLanguage = async (language: string) => { - try { - const response = await fetch(`/assets/i18n/${language}.json`) - if (!response.ok) throw new Error(`Failed to load ${language} translations`) - - const data = await response.json() - const flattened = flattenTranslations(data) - - i18n.addResourceBundle(language, 'translation', flattened, true, true) - } catch (error) { - console.error(`Error loading ${language} translations:`, error) - } -} - -// Load current language -loadLanguage(lng).then(() => { - // Also preload fallback language - if (lng !== 'ru') { - loadLanguage('ru') - } -}) - export default i18n