diff --git a/next-i18next.config.js b/next-i18next.config.js index d5a94cc02..788692dfd 100644 --- a/next-i18next.config.js +++ b/next-i18next.config.js @@ -4,19 +4,20 @@ module.exports = { i18n: { defaultLocale: "en", locales: [ - "en", - "es", + "cs", "da", "de", + "en", + "es", "fr", + "hu", "it", "ko", "nl", - "sv", "pl", - "pt", "pt-BR", - "hu", + "pt", + "sv", "zh", ], localePath: path.resolve("./public/locales"), diff --git a/public/locales/cs/app.json b/public/locales/cs/app.json new file mode 100644 index 000000000..49636b4d0 --- /dev/null +++ b/public/locales/cs/app.json @@ -0,0 +1,132 @@ +{ + "12h": "12-hodinový", + "24h": "24-hodinový", + "addParticipant": "Přidat účastníka", + "addTimeOption": "Vybrat konkrétní čas", + "alreadyVoted": "Již jste hlasoval", + "applyToAllDates": "Použít pro všechny termíny", + "areYouSure": "Jste si jisti?", + "back": "Zpět", + "calendarHelp": "Hlasování nelze vytvořit bez žádných možností. Chcete-li pokračovat, přidejte alespoň jednu možnost.", + "calendarHelpTitle": "Zapomněli jste něco?", + "cancel": "Zrušit", + "comment": "Okomentovat", + "commentPlaceholder": "Zanechte komentář k této anketě (uvidí jej všichni)", + "comments": "Komentáře", + "continue": "Pokračovat", + "copied": "Zkopírováno", + "copyLink": "Zkopírovat odkaz", + "createdBy": "od {{name}}", + "createPoll": "Vytvořit anketu", + "creatingDemo": "Vytvářím demo anketu…", + "delete": "Smazat", + "deleteComment": "Odstranit komentář", + "deleteDate": "Odstranit termín", + "deletedPoll": "Smazaná anketa", + "deletedPollInfo": "Tato anketa již neexistuje.", + "deletePoll": "Smazat anketu", + "deletePollDescription": "Všechna data související s touto anketou budou smazána. Pro potvrzení, prosím, zadejte \"{{confirmText}}” do níže uvedeného pole:", + "deletingOptionsWarning": "Mažete možnosti, pro které účastníci hlasovali. Jejich hlasy budou taktéž smazány.", + "demoPollNotice": "Demo ankety se po jednom dni automaticky odstraní", + "description": "Popis", + "descriptionPlaceholder": "Ahoj všichni, prosím, hlasujte pro termíny, které vám vyhovují!", + "donate": "Podpořit", + "edit": "Upravit", + "editDetails": "Upravit údaje", + "editOptions": "Upravit možnosti", + "email": "E-mail", + "emailPlaceholder": "karel.novak@email.com", + "endingGuestSessionNotice": "Jakmile relace hosta skončí, nelze ji obnovit. Nebudete moci upravovat žádné hlasy nebo komentáře, které jste v rámci relace zapracovali.", + "endSession": "Ukončit relaci", + "errorCreate": "Jejda! Při vytváření ankety došlo k chybě. Chyba byla zaznamenána a na její opravě pracujeme.", + "exportToCsv": "Exportovat do CSV", + "finish": "Dokončit", + "forgetMe": "Zapomenout mě", + "goToAdmin": "Přejít do administrace", + "guest": "Host", + "guestSessionNotice": "Používáte relaci hosta. Díky tomu Vás rozpoznáme, pokud se vrátíte později a budete moci upravit své hlasy.", + "guestSessionReadMore": "Přečtěte si o relaci hosta více.", + "hide": "Skrýt", + "ifNeedBe": "Pokud je to nutné", + "linkHasExpired": "Platnost tohoto odkazu vypršela nebo již není platný", + "loading": "Načítám…", + "loadingParticipants": "Načítám účastníky…", + "location": "Místo", + "locationPlaceholder": "Příjemná kavárna v centru", + "lockPoll": "Zamknout anketu", + "login": "Přihlásit", + "loginCheckInbox": "Zkontrolujte si prosím svou e-mailovou schránku.", + "loginMagicLinkSent": "Kouzelný odkaz byl zaslán na:", + "loginSendMagicLink": "Zaslat kouzelný odkaz", + "loginViaMagicLink": "Přihlásit se pomocí kouzelného odkazu", + "loginViaMagicLinkDescription": "Pošleme vám e-mail s kouzelným odkazem, kterým se můžete do aplikace přihlásit.", + "loginWithValidEmail": "Zadejte platnou e-mailovou adresu", + "logout": "Odhlásit se", + "manage": "Spravovat", + "menu": "Menu", + "mixedOptionsDescription": "Nemůžete mít ve stejné anketě souběžně datum i čas. Kterou volbu chcete zachovat?", + "mixedOptionsKeepDates": "Zachovat datum", + "mixedOptionsKeepTimes": "Zachovat čas", + "mixedOptionsTitle": "Vydržte chvilku…🤔", + "monday": "Pondělí", + "monthView": "Měsíční pohled", + "name": "Jméno", + "namePlaceholder": "Karel Novák", + "new": "Nový", + "newPoll": "Nová anketa", + "next": "Další", + "nextMonth": "Další měsíc", + "no": "Ne", + "noDatesSelected": "Nebyl vybrán žádný termín", + "notificationsDisabled": "Oznámení byla vypnuta", + "notificationsOff": "Oznámení jsou vypnuta", + "notificationsOn": "Oznámení jsou zapnuta", + "notificationsOnDescription": "Jakmile se v anketě něco změní, dostanete upozornění na adresu {{email}}.", + "notificationsVerifyEmail": "Pro zapnutí oznámení musíte ověřit svůj e-mail", + "noVotes": "Nikdo pro tuto možnost nehlasoval", + "ok": "Ok", + "options": "Možnosti", + "participant": "Účastník", + "participantCount_other": "{{count}} účastníků", + "participantCount": "{{count}} účastník", + "pollHasBeenLocked": "Anketa byla uzamčena", + "pollHasBeenVerified": "Vaše anketa byla ověřena", + "pollOwnerNotice": "Dobrý den, {{name}}, zdá se, že jste vlastníkem této ankety.", + "pollsEmpty": "Nebyly vytvořeny žádné ankety", + "possibleAnswers": "Možné odpovědi", + "preferences": "Předvolby", + "previousMonth": "Předchozí měsíc", + "profileLogin": "Profil - přihlášení", + "profileUser": "Profil - {{username}}", + "requiredNameError": "Jméno je vyžadováno", + "save": "Uložit", + "saveInstruction": "Vyberte svou dostupnost a klikněte na {{save}}", + "share": "Sdílet", + "shareDescription": "Tento odkaz zašlete vašim účastníkům, aby mohli v anketě hlasovat.", + "shareLink": "Odkaz ke sdílení", + "specifyTimes": "Určete časy", + "specifyTimesDescription": "Zahrnout počáteční a koncové časy pro každý termín", + "stepSummary": "Krok {{current}} z {{total}}", + "sunday": "Neděli", + "timeAndDate": "Čas & datum", + "timeFormat": "Formát času:", + "timeZone": "Časová zóna:", + "title": "Název", + "titlePlaceholder": "Měsíční setkání", + "today": "Dnes", + "unlockPoll": "Odemknout anketu", + "unverifiedMessage": "Na adresu {{email}} byl zaslán odkaz pro ověření e-mailové adresy.", + "user": "Uživatel", + "vote": "Hlasovat", + "voteCount_other": "{{count}} hlasů", + "voteCount": "{{count}} hlas", + "weekStartsOn": "Týden začíná v", + "weekView": "Týdenní pohled", + "whatsThis": "Co to znamená?", + "yes": "Ano", + "you": "Vy", + "yourDetails": "Vaše údaje", + "yourName": "Vaše jméno…", + "yourProfile": "Váš profil", + "yourPolls": "Vaše ankety" +} diff --git a/public/locales/cs/common.json b/public/locales/cs/common.json new file mode 100644 index 000000000..7a80d016a --- /dev/null +++ b/public/locales/cs/common.json @@ -0,0 +1,15 @@ +{ + "blog": "Blog", + "discussions": "Diskuze", + "donate": "Podpořit", + "footerCredit": "Vytvořil @imlukevella", + "footerSponsor": "Tento projekt je financován uživateli. Zvažte jeho podporu příspěvkem.", + "home": "Domů", + "language": "Jazyk", + "links": "Odkazy", + "poweredBy": "Poháněn", + "privacyPolicy": "Ochrana osobních údajů", + "starOnGithub": "Dejte nám hvězdu na Github", + "support": "Podpora", + "volunteerTranslator": "Pomozte přeložit tento web" +} diff --git a/public/locales/cs/errors.json b/public/locales/cs/errors.json new file mode 100644 index 000000000..329a04999 --- /dev/null +++ b/public/locales/cs/errors.json @@ -0,0 +1,6 @@ +{ + "notFoundTitle": "404 nenalezeno", + "notFoundDescription": "Nemohli jsme najít stránku, kterou hledáte.", + "goToHome": "Přejít domů", + "startChat": "Zahájit chat" +} diff --git a/public/locales/cs/homepage.json b/public/locales/cs/homepage.json new file mode 100644 index 000000000..66f8adb81 --- /dev/null +++ b/public/locales/cs/homepage.json @@ -0,0 +1,36 @@ +{ + "3Ls": "Ano—se 3 L", + "adFree": "Bez reklam", + "adFreeDescription": "Nechte svůj blokátor reklam spát = tady nebude potřeba.", + "comments": "Komentáře", + "commentsDescription": "Účastníci se mohou vyjádřit k vašemu průzkumu a komentáře budou viditelné pro všechny.", + "features": "Funkce", + "featuresSubheading": "Plánování, chytřeji", + "follow": "Sledujte", + "getStarted": "Začněme", + "heroSubText": "Najděte správné datum bez běhání tam a zpět", + "heroText": "Plánujte
setkání skupin
snadno", + "links": "Odkazy", + "liveDemo": "Demo", + "metaDescription": "Vytvořte ankety a hlasujte pro nalezení nejlepšího dne nebo času. Bezplatná alternativa k Doodle.", + "metaTitle": "Rallly - naplánovat setkání skupin", + "mobileFriendly": "Vhodné pro mobil", + "mobileFriendlyDescription": "Funguje skvěle na mobilních zařízeních, aby účastníci mohli odpovídat na ankety, ať jsou kdekoliv.", + "new": "Nové", + "noLoginRequired": "Bez přihlášení", + "noLoginRequiredDescription": "Pro vytvoření nebo účast v anketě se nemusíte přihlásit", + "notifications": "Oznámení", + "notificationsDescription": "Sledujte kdo odpověděl. Dostávejte upozornění, když účastníci hlasují nebo komentují Vaši anketu.", + "openSource": "Open-source", + "openSourceDescription": "Veškerý kód je plně open-source a k dispozici na GitHub.", + "participant": "Účastník", + "participantCount_other": "{{count}} účastníků", + "participantCount": "{{count}} účastník", + "perfect": "Skvěle!", + "principles": "Zásady", + "principlesSubheading": "Nejsme jako ostatní", + "selfHostable": "Vlastní hosting", + "selfHostableDescription": "Rozjeďte si vlastní server a získejte plnou kontrolu nad svými daty", + "timeSlots": "Časové sloty", + "timeSlotsDescription": "Nastavte počáteční a koncový čas pro každou možnost ve Vaší anketě. Časy mohou být automaticky upraveny podle časové zóny každého účastníka, nebo mohou být nastaveny tak, aby zcela časové zóny ignorovaly." +} diff --git a/src/components/poll/language-selector.tsx b/src/components/poll/language-selector.tsx index c64842336..de59c905b 100644 --- a/src/components/poll/language-selector.tsx +++ b/src/components/poll/language-selector.tsx @@ -19,19 +19,20 @@ export const LanguageSelect: React.VoidFunctionComponent<{ }} > + + - + - + - ); }; diff --git a/src/middleware.ts b/src/middleware.ts index 42c7a857d..35ecef190 100644 --- a/src/middleware.ts +++ b/src/middleware.ts @@ -2,20 +2,21 @@ import languageParser from "accept-language-parser"; import { NextRequest, NextResponse } from "next/server"; const supportedLocales = [ - "en", - "es", + "cs", "da", "de", + "en", + "es", "fr", + "hu", "it", "ko", "nl", - "sv", - "hu", - "zh", - "pt", - "pt-BR", "pl", + "pt-BR", + "pt", + "sv", + "zh", ]; export function middleware({ headers, cookies, nextUrl }: NextRequest) { diff --git a/src/utils/dayjs.tsx b/src/utils/dayjs.tsx index 8dfedefa0..6db974899 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"), }, + cs: { + weekStartsOn: "monday", + timeFormat: "24h", + import: () => import("dayjs/locale/cs"), + }, pl: { weekStartsOn: "monday", timeFormat: "24h",