index.ts 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import i18n from 'i18next';
  2. import { initReactI18next } from 'react-i18next';
  3. import LanguageDetector from 'i18next-browser-languagedetector';
  4. // Import translations directly for bundling
  5. import en from './locales/en';
  6. import de from './locales/de';
  7. import fr from './locales/fr';
  8. import ja from './locales/ja';
  9. import it from './locales/it';
  10. import ptBR from './locales/pt-BR';
  11. const resources = {
  12. en: { translation: en },
  13. de: { translation: de },
  14. fr: { translation: fr },
  15. ja: { translation: ja },
  16. it: { translation: it },
  17. 'pt-BR': { translation: ptBR },
  18. };
  19. i18n
  20. .use(LanguageDetector)
  21. .use(initReactI18next)
  22. .init({
  23. resources,
  24. fallbackLng: 'en',
  25. supportedLngs: ['en', 'de', 'fr', 'ja', 'it', 'pt-BR'],
  26. detection: {
  27. // Order of detection methods
  28. order: ['localStorage', 'navigator', 'htmlTag'],
  29. // Key to use in localStorage
  30. lookupLocalStorage: 'bambutrack_language',
  31. // Cache user language
  32. caches: ['localStorage'],
  33. },
  34. interpolation: {
  35. escapeValue: false, // React already escapes
  36. },
  37. react: {
  38. useSuspense: false,
  39. },
  40. });
  41. export default i18n;
  42. // Helper to get available languages
  43. export const availableLanguages = [
  44. { code: 'en', name: 'English', nativeName: 'English' },
  45. { code: 'de', name: 'German', nativeName: 'Deutsch' },
  46. { code: 'fr', name: 'French', nativeName: 'Français' },
  47. { code: 'ja', name: 'Japanese', nativeName: '日本語' },
  48. { code: 'it', name: 'Italian', nativeName: 'Italiano' },
  49. { code: 'pt-BR', name: 'Portuguese (Brazil)', nativeName: 'Português (Brasil)' },
  50. ];