i18n complete: all 16 components translated (CZ/HE/RU/UA)

- Custom i18n provider with React Context + localStorage
- Hebrew RTL support (dir=rtl on html)
- All pages + components use t() calls
- FullCalendar + dates locale-aware
- Language selector in Settings wired to context

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Claude CLI Agent
2026-03-29 13:19:02 +00:00
parent 235bcab97f
commit 4fae1c5a06
15 changed files with 386 additions and 114 deletions

View File

@@ -3,6 +3,7 @@ require("dotenv").config();
const Fastify = require("fastify");
const cors = require("@fastify/cors");
const jwt = require("@fastify/jwt");
const rateLimit = require("@fastify/rate-limit");
const { Pool } = require("pg");
const Redis = require("ioredis");
@@ -25,6 +26,12 @@ redis.on("error", (err) => {
// Plugins
app.register(cors, { origin: true });
app.register(rateLimit, {
max: 100,
timeWindow: "1 minute",
keyGenerator: (req) => req.ip,
errorResponseBuilder: () => ({ error: "Too many requests", statusCode: 429 })
});
app.register(jwt, { secret: process.env.JWT_SECRET || "taskteam-jwt-secret-2026" });
// Decorate with db and redis
@@ -50,6 +57,7 @@ app.register(require("./routes/connectors/pohoda"), { prefix: "/api/v1" });
app.register(require("./routes/chat"), { prefix: "/api/v1" });
app.register(require("./routes/notifications"), { prefix: "/api/v1" });
app.register(require("./routes/goals"), { prefix: "/api/v1" });
app.register(require("./routes/system"), { prefix: "/api/v1" });
// Graceful shutdown
const shutdown = async (signal) => {