feat(i18n): Implement multilingual support with Polish and English translations

- Added translation context and provider for managing language state.
- Integrated translation functionality into existing components (TaskStatusDropdown, Navigation).
- Created LanguageSwitcher component for language selection.
- Updated task statuses and navigation labels to use translations.
- Added Polish translations for various UI elements, including navigation, tasks, projects, and contracts.
- Refactored utility functions to return localized strings for deadlines and date formatting.
This commit is contained in:
Chop
2025-07-27 22:01:15 +02:00
parent 9b6307eabe
commit e828aa660b
16 changed files with 1166 additions and 234 deletions

View File

@@ -11,8 +11,10 @@ import SearchBar from "@/components/ui/SearchBar";
import FilterBar from "@/components/ui/FilterBar";
import { LoadingState } from "@/components/ui/States";
import { formatDate } from "@/lib/utils";
import { useTranslation } from "@/lib/i18n";
export default function ContractsMainPage() {
const { t } = useTranslation();
const [contracts, setContracts] = useState([]);
const [loading, setLoading] = useState(true);
const [searchTerm, setSearchTerm] = useState("");
@@ -133,13 +135,13 @@ export default function ContractsMainPage() {
const getStatusBadge = (status) => {
switch (status) {
case "active":
return <Badge variant="success">Aktywna</Badge>;
return <Badge variant="success">{t('contracts.active')}</Badge>;
case "completed":
return <Badge variant="secondary">Zakończona</Badge>;
return <Badge variant="secondary">{t('common.completed')}</Badge>;
case "ongoing":
return <Badge variant="primary">W trakcie</Badge>;
return <Badge variant="primary">{t('contracts.withoutEndDate')}</Badge>;
default:
return <Badge>Nieznany</Badge>;
return <Badge>{t('common.unknown')}</Badge>;
}
};
@@ -170,17 +172,17 @@ export default function ContractsMainPage() {
return (
<PageContainer>
<PageHeader
title="Umowy"
description="Zarządzaj swoimi umowami i kontraktami"
title={t('contracts.title')}
description={t('contracts.subtitle')}
>
<Link href="/contracts/new">
<Button variant="primary" size="lg">
<span className="mr-2"></span>
Nowa umowa
{t('contracts.newContract')}
</Button>
</Link>
</PageHeader>
<LoadingState message="Ładowanie umów..." />
<LoadingState message={t('navigation.loading')} />
</PageContainer>
);
}
@@ -225,13 +227,13 @@ export default function ContractsMainPage() {
return (
<PageContainer>
<PageHeader
title="Umowy"
description="Zarządzaj swoimi umowami i kontraktami"
title={t('contracts.title')}
description={t('contracts.subtitle')}
>
<Link href="/contracts/new">
<Button variant="primary" size="lg">
<span className="mr-2"></span>
Nowa umowa
{t('contracts.newContract')}
</Button>
</Link>{" "}
</PageHeader>