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 && (