diff --git a/frontend/package.json b/frontend/package.json index 66cc8dbd..2b20a22e 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -16,9 +16,12 @@ "@tanstack/react-virtual": "^3.13.23", "axios": "^1.7.2", "framer-motion": "^12.38.0", + "i18next": "^23.11.5", + "i18next-browser-languagedetector": "^8.0.0", "qrcode": "^1.5.4", "react": "^18.3.1", "react-dom": "^18.3.1", + "react-i18next": "^14.1.2", "recharts": "^3.8.1", "rollup-plugin-visualizer": "^7.0.1", "web-vitals": "^5.1.0" diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index 5faec365..51ca5a1d 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -53,6 +53,7 @@ function App() { const { canInstall, install, updateAvailable, applyUpdate } = usePWA(); const { queue: queueOffline, pendingCount } = useOfflineQueue(); const { theme, isDark, toggleTheme } = useTheme(); + useRTL(); const prefersReduced = useReducedMotion(); const v = makeVariants(prefersReduced); const tap = tapScale(prefersReduced); @@ -212,6 +213,7 @@ function App() { > {isDark ? '☀️ Light' : '🌙 Dark'} + {canInstall && (