diff --git a/next-i18next.config.js b/next-i18next.config.js
index 7fc45da2e..d5a94cc02 100644
--- a/next-i18next.config.js
+++ b/next-i18next.config.js
@@ -13,6 +13,7 @@ module.exports = {
"ko",
"nl",
"sv",
+ "pl",
"pt",
"pt-BR",
"hu",
diff --git a/public/locales/pl/app.json b/public/locales/pl/app.json
new file mode 100644
index 000000000..8e52b1598
--- /dev/null
+++ b/public/locales/pl/app.json
@@ -0,0 +1,132 @@
+{
+ "12h": "12-godzinny",
+ "24h": "24-godzinny",
+ "addParticipant": "Dodaj uczestnika",
+ "addTimeOption": "Dodaj opcję czasową",
+ "alreadyVoted": "Już zagłosowałeś",
+ "applyToAllDates": "Zastosuj do wszystkich dat",
+ "areYouSure": "Jesteś pewny?",
+ "back": "Powrót",
+ "calendarHelp": "Nie możesz utworzyć ankiety bez żadnej opcji. Dodaj co najmniej jedną opcję, aby kontynuować.",
+ "calendarHelpTitle": "Zapomniałeś o czymś?",
+ "cancel": "Anuluj",
+ "comment": "Skomentuj",
+ "commentPlaceholder": "Zostaw komentarz do tej ankiety (widoczny dla wszystkich)",
+ "comments": "Komentarze",
+ "continue": "Kontynuuj",
+ "copied": "Skopiowano",
+ "copyLink": "Kopiuj link",
+ "createdBy": "od {{name}}",
+ "createPoll": "Utwórz ankietę",
+ "creatingDemo": "Tworzenie ankiety demonstracyjnej…",
+ "delete": "Usuń",
+ "deleteComment": "Usuń komentarz",
+ "deleteDate": "Usuń datę",
+ "deletedPoll": "Usuń ankietę",
+ "deletedPollInfo": "Ta ankieta już nie istnieje.",
+ "deletePoll": "Usuń ankietę",
+ "deletePollDescription": "Wszystkie dane związane z tą ankietą zostaną usunięte. Aby potwierdzić, wpisz „{{confirmText}}” poniższej:",
+ "deletingOptionsWarning": "Usuwasz opcje, na które głosowali uczestnicy. Ich głosy również zostaną usunięte.",
+ "demoPollNotice": "Ankiety demonstracyjne są automatycznie usuwane po 1 dniu",
+ "description": "Opis",
+ "descriptionPlaceholder": "Cześć wszystkim, wybierzcie terminy, które Wam pasują!",
+ "donate": "Wesprzyj nas",
+ "edit": "Edytuj",
+ "editDetails": "Edytuj szczegóły",
+ "editOptions": "Edytuj opcje",
+ "email": "Email",
+ "emailPlaceholder": "jan.kowalski@email.com",
+ "endingGuestSessionNotice": "Po zakończeniu sesji gościa nie można jej wznowić. Nie będzie można edytować żadnych głosów ani komentarzy dodanych podczas tej sesji.",
+ "endSession": "Zakończ sesję",
+ "errorCreate": "Oh nie! Podczas tworzenia ankiety wystąpił problem. Błąd został zarejestrowany i spróbujemy go naprawić.",
+ "exportToCsv": "Eksport do CSV",
+ "finish": "Zakończ",
+ "forgetMe": "Zapomnij mnie",
+ "goToAdmin": "Przejdź do panelu administratora",
+ "guest": "Gość",
+ "guestSessionNotice": "Używasz sesji gościa. Pozwala nam to rozpoznać, jeśli wrócisz później, abyś mógł edytować swoje głosy.",
+ "guestSessionReadMore": "Przeczytaj więcej o sesjach gości.",
+ "hide": "Ukryj",
+ "ifNeedBe": "W razie potrzeby",
+ "linkHasExpired": "Twój link wygasł lub nie jest już ważny",
+ "loading": "Wczytywanie…",
+ "loadingParticipants": "Wczytywanie uczestników…",
+ "location": "Lokalizacja",
+ "locationPlaceholder": "Sklep z kawą Joe",
+ "lockPoll": "Zablokuj ankietę",
+ "login": "Logowanie",
+ "loginCheckInbox": "Sprawdź swoją skrzynkę.",
+ "loginMagicLinkSent": "Magiczny link został wysłany na:",
+ "loginSendMagicLink": "Wyślij mi magiczny link",
+ "loginViaMagicLink": "Zaloguj się za pomocą magicznego linku",
+ "loginViaMagicLinkDescription": "Wyślemy Ci e-mail z magicznym linkiem, którego możesz użyć do logowania.",
+ "loginWithValidEmail": "Wpisz prawidłowy adres e-mail",
+ "logout": "Wyloguj",
+ "manage": "Zarządzaj",
+ "menu": "Menu",
+ "mixedOptionsDescription": "Nie możesz mieć w tej samej ankiecie obu opcji daty i godziny. Które chciałbyś zachować?",
+ "mixedOptionsKeepDates": "Zachowaj opcje daty",
+ "mixedOptionsKeepTimes": "Zachowaj opcje czasu",
+ "mixedOptionsTitle": "Poczekaj minutę…🤔",
+ "monday": "Poniedziałek",
+ "monthView": "Widok Miesięczny",
+ "name": "Imię",
+ "namePlaceholder": "Jan Kowalski",
+ "new": "Nowy",
+ "newPoll": "Nowa ankieta",
+ "next": "Dalej",
+ "nextMonth": "Następny miesiąc",
+ "no": "Nie",
+ "noDatesSelected": "Nie wybrano dat",
+ "notificationsDisabled": "Powiadomienia zostały wyłączone",
+ "notificationsOff": "Powiadomienia są wyłączone",
+ "notificationsOn": "Powiadomienia są włączone",
+ "notificationsOnDescription": "Wiadomość e-mail zostanie wysłana na {{email}}, gdy będzie aktywność w tej ankiecie.",
+ "notificationsVerifyEmail": "Aby włączyć powiadomienia, musisz zweryfikować swój adres e-mail",
+ "noVotes": "Nikt nie głosował na tę opcję",
+ "ok": "Ok",
+ "options": "Opcje",
+ "participant": "Uczestnik",
+ "participantCount_other": "{{count}} uczestników",
+ "participantCount": "{{count}} uczestnik",
+ "pollHasBeenLocked": "Ta ankieta została zablokowana",
+ "pollHasBeenVerified": "Twoja ankieta została zweryfikowana",
+ "pollOwnerNotice": "Hej {{name}}, wygląda na to, że jesteś właścicielem tej ankiety.",
+ "pollsEmpty": "Nie utworzono ankiet",
+ "possibleAnswers": "Możliwe opcje",
+ "preferences": "Ustawienia",
+ "previousMonth": "Poprzedni miesiąc",
+ "profileLogin": "Profil - logowanie",
+ "profileUser": "Profil - {{username}}",
+ "requiredNameError": "Imię jest wymagane",
+ "save": "Zapisz",
+ "saveInstruction": "Wybierz swoją dostępność i kliknij {{save}}",
+ "share": "Udostępnij",
+ "shareDescription": "Przekaż ten link uczestnikom, aby mogli zagłosować na ankietę.",
+ "shareLink": "Udostępnij link",
+ "specifyTimes": "Podaj czas",
+ "specifyTimesDescription": "Dołącz godziny rozpoczęcia i zakończenia dla każdej opcji",
+ "stepSummary": "Etap {{current}} z {{total}}",
+ "sunday": "Niedziela",
+ "timeAndDate": "Czas i data",
+ "timeFormat": "Format czasu:",
+ "timeZone": "Strefa czasowa:",
+ "title": "Tytuł",
+ "titlePlaceholder": "Miesięczne spotkanie",
+ "today": "Dziś",
+ "unlockPoll": "Odblokuj ankietę",
+ "unverifiedMessage": "Na adres {{email}} został wysłany e-mail z linkiem do weryfikacji adresu.",
+ "user": "Użytkownik",
+ "vote": "Głosuj",
+ "voteCount_other": "{{count}} głosów",
+ "voteCount": "{{count}} głos",
+ "weekStartsOn": "Pierwszy dzień tygodnia",
+ "weekView": "Widok tygodniowy",
+ "whatsThis": "Co to jest?",
+ "yes": "Tak",
+ "you": "Ty",
+ "yourDetails": "Twoje dane",
+ "yourName": "Twoje imię…",
+ "yourProfile": "Twój profil",
+ "yourPolls": "Twoje ankiety"
+}
diff --git a/public/locales/pl/common.json b/public/locales/pl/common.json
new file mode 100644
index 000000000..9bd68525c
--- /dev/null
+++ b/public/locales/pl/common.json
@@ -0,0 +1,15 @@
+{
+ "blog": "Blog",
+ "discussions": "Dyskusje",
+ "donate": "Wesprzyj nas",
+ "footerCredit": "Stworzone przez @imlukevella",
+ "footerSponsor": "Ten projekt jest finansowany przez użytkowników. Proszę rozważyć wsparcie go poprzez darowiznę.",
+ "home": "Strona główna",
+ "language": "Język",
+ "links": "Linki",
+ "poweredBy": "Dzięki wsparciu",
+ "privacyPolicy": "Polityka prywatności",
+ "starOnGithub": "Dodaj gwiazdkę na GitHubie",
+ "support": "Wsparcie",
+ "volunteerTranslator": "Pomóź w przetłumaczeniu tej strony"
+}
diff --git a/public/locales/pl/errors.json b/public/locales/pl/errors.json
new file mode 100644
index 000000000..55c1ec366
--- /dev/null
+++ b/public/locales/pl/errors.json
@@ -0,0 +1,6 @@
+{
+ "notFoundTitle": "404 brak strony",
+ "notFoundDescription": "Nie mogliśmy znaleźć strony, której szukasz.",
+ "goToHome": "Przejdź do strony głównej",
+ "startChat": "Rozpocznij czat"
+}
diff --git a/public/locales/pl/homepage.json b/public/locales/pl/homepage.json
new file mode 100644
index 000000000..5430d622c
--- /dev/null
+++ b/public/locales/pl/homepage.json
@@ -0,0 +1,36 @@
+{
+ "3Ls": "Tak—z 3 L",
+ "adFree": "Bez reklam",
+ "adFreeDescription": "Możesz dać odpocząć swojemu blokowaniu reklam — nie będziesz go tutaj potrzebował.",
+ "comments": "Komentarze",
+ "commentsDescription": "Uczestnicy mogą komentować Twoją ankietę, a komentarze będą widoczne dla wszystkich.",
+ "features": "Funkcje",
+ "featuresSubheading": "Planowanie w sprytny sposób",
+ "follow": "Obserwuj",
+ "getStarted": "Zacznij",
+ "heroSubText": "Znajdź właściwą datę bez wracania tam i z powrotem",
+ "heroText": "Zaplanuj
spotkania grupowe
z łatwością",
+ "links": "Linki",
+ "liveDemo": "Demo",
+ "metaDescription": "Twórz ankiety i głosuj, aby znaleźć najlepszy dzień lub godzinę. Bezpłatna alternatywa dla Doodle.",
+ "metaTitle": "Rallly - Zaplanuj spotkania grupowe",
+ "mobileFriendly": "Dostosowane do urządzeń mobilnych",
+ "mobileFriendlyDescription": "Działa świetnie na urządzeniach mobilnych, dzięki czemu uczestnicy mogą odpowiadać na ankiety, gdziekolwiek się znajdują.",
+ "new": "Nowość",
+ "noLoginRequired": "Nie wymaga logowania",
+ "noLoginRequiredDescription": "Nie musisz się logować, aby utworzyć lub wziąć udział w ankiecie",
+ "notifications": "Powiadomienia",
+ "notificationsDescription": "Śledź, kto odpowiedział. Otrzymuj powiadomienia, gdy uczestnicy zagłosują lub skomentują Twoją ankietę.",
+ "openSource": "Open-source",
+ "openSourceDescription": "Kod jest w pełni open-source i dostępna na GitHub.",
+ "participant": "Uczestnik",
+ "participantCount_other": "{{count}} uczestników",
+ "participantCount": "{{count}} uczestnik",
+ "perfect": "Idealne!",
+ "principles": "Założenia",
+ "principlesSubheading": "Nie jesteśmy jak inni",
+ "selfHostable": "Self-hostable",
+ "selfHostableDescription": "Uruchom go na własnym serwerze, aby mieć pełną kontrolę nad swoimi danymi",
+ "timeSlots": "Przedziały czasowe",
+ "timeSlotsDescription": "Ustaw indywidualne godziny rozpoczęcia i zakończenia dla każdej opcji w swojej ankiecie. Czasy mogą być automatycznie dostosowywane do strefy czasowej każdego uczestnika lub mogą być ustawione tak, aby całkowicie ignorować strefy czasowe."
+}
diff --git a/src/components/poll/language-selector.tsx b/src/components/poll/language-selector.tsx
index ed0772eea..c64842336 100644
--- a/src/components/poll/language-selector.tsx
+++ b/src/components/poll/language-selector.tsx
@@ -28,6 +28,7 @@ export const LanguageSelect: React.VoidFunctionComponent<{
+
diff --git a/src/middleware.ts b/src/middleware.ts
index 98adac8d3..42c7a857d 100644
--- a/src/middleware.ts
+++ b/src/middleware.ts
@@ -15,6 +15,7 @@ const supportedLocales = [
"zh",
"pt",
"pt-BR",
+ "pl",
];
export function middleware({ headers, cookies, nextUrl }: NextRequest) {
diff --git a/src/utils/dayjs.tsx b/src/utils/dayjs.tsx
index cd78fc891..8dfedefa0 100644
--- a/src/utils/dayjs.tsx
+++ b/src/utils/dayjs.tsx
@@ -60,6 +60,11 @@ const dayjsLocales: Record<
timeFormat: "24h",
import: () => import("dayjs/locale/sv"),
},
+ pl: {
+ weekStartsOn: "monday",
+ timeFormat: "24h",
+ import: () => import("dayjs/locale/pl"),
+ },
pt: {
weekStartsOn: "monday",
timeFormat: "24h",