From 235bcab97f898c033dc2c4c8af41e3992454b91f Mon Sep 17 00:00:00 2001 From: Claude CLI Agent Date: Sun, 29 Mar 2026 13:13:34 +0000 Subject: [PATCH] i18n: integrate translations into components - StatusBadge, TaskForm, tasks page use i18n hook - All 4 language files complete (cs, he, ru, ua) Co-Authored-By: Claude Opus 4.6 (1M context) --- apps/tasks/app/tasks/page.tsx | 26 ++++++------ apps/tasks/components/StatusBadge.tsx | 15 ++++--- apps/tasks/components/TaskForm.tsx | 58 ++++++++++++++------------- apps/tasks/components/TaskModal.tsx | 9 +++-- 4 files changed, 56 insertions(+), 52 deletions(-) diff --git a/apps/tasks/app/tasks/page.tsx b/apps/tasks/app/tasks/page.tsx index cd51e76..540ab68 100644 --- a/apps/tasks/app/tasks/page.tsx +++ b/apps/tasks/app/tasks/page.tsx @@ -4,6 +4,7 @@ import { useEffect, useState, useCallback, useMemo } from "react"; import { useRouter } from "next/navigation"; import { useAuth } from "@/lib/auth"; import { getTasks, getGroups, createTask, updateTask, Task, Group } from "@/lib/api"; +import { useTranslation } from "@/lib/i18n"; import TaskCard from "@/components/TaskCard"; import GroupSelector from "@/components/GroupSelector"; import TaskModal from "@/components/TaskModal"; @@ -13,6 +14,7 @@ type StatusFilter = "all" | "pending" | "in_progress" | "done" | "cancelled"; export default function TasksPage() { const { token } = useAuth(); + const { t } = useTranslation(); const router = useRouter(); const [tasks, setTasks] = useState([]); const [groups, setGroups] = useState([]); @@ -47,7 +49,7 @@ export default function TasksPage() { setTasks(tasksRes.data || []); setGroups(groupsRes.data || []); } catch (err) { - console.error("Chyba pri nacitani:", err); + console.error("Load error:", err); } finally { setLoading(false); } @@ -73,7 +75,7 @@ export default function TasksPage() { // Show overlay if (newGroupId === null) { - setSwipeOverlay({ name: "Vse", icon: null }); + setSwipeOverlay({ name: t("tasks.all"), icon: null }); } else { const group = groups.find((g) => g.id === newGroupId); setSwipeOverlay({ name: group?.name || "", icon: group?.icon || null }); @@ -87,7 +89,7 @@ export default function TasksPage() { setSwipeDirection(null); }, 600); }, - [groupOrder, currentGroupIndex, groups] + [groupOrder, currentGroupIndex, groups, t] ); // Swipe handlers for cycling groups @@ -114,16 +116,16 @@ export default function TasksPage() { await updateTask(token, taskId, { status: "done" }); loadData(); } catch (err) { - console.error("Chyba pri dokoncovani:", err); + console.error("Complete error:", err); } } const statusOptions: { value: StatusFilter; label: string }[] = [ - { value: "all", label: "Vse" }, - { value: "pending", label: "Ceka" }, - { value: "in_progress", label: "Probiha" }, - { value: "done", label: "Hotovo" }, - { value: "cancelled", label: "Zruseno" }, + { value: "all", label: t("tasks.all") }, + { value: "pending", label: t("tasks.status.pending") }, + { value: "in_progress", label: t("tasks.status.in_progress") }, + { value: "done", label: t("tasks.status.done") }, + { value: "cancelled", label: t("tasks.status.cancelled") }, ]; if (!token) return null; @@ -189,9 +191,9 @@ export default function TasksPage() { ) : tasks.length === 0 ? (
-

Zadne ukoly

+

{t("tasks.noTasks")}

- Vytvorte prvni ukol pomoci tlacitka + + {t("tasks.createFirst")}

) : ( @@ -212,7 +214,7 @@ export default function TasksPage() {