One Calendar is a privacy-first calendar web app built with Next.js. It has modern security features, including e2ee, password-protected sharing, and self-destructing share links 📅 calendar.xyehr.cn
5
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge pull request #131 from EvanTechDev/codex/add-4-day-view-similar-to-google-calendar

feat: add 4-day calendar view, align dialog actions, and clean locale copy

authored by

Evan Huang and committed by
GitHub
de0dd4cc 7543467c

+144 -42
+47 -3
components/app/calendar.tsx
··· 36 36 AlertDialogTitle, 37 37 } from "@/components/ui/alert-dialog" 38 38 39 - type ViewType = "day" | "week" | "month" | "year" | "analytics" | "settings" 39 + type ViewType = "day" | "week" | "four-day" | "month" | "year" | "analytics" | "settings" 40 40 41 41 export interface CalendarEvent { 42 42 id: string ··· 160 160 e.preventDefault() 161 161 setView("year") 162 162 break 163 + case "5": 164 + e.preventDefault() 165 + setView("four-day") 166 + break 163 167 case "ArrowRight": 164 168 e.preventDefault() 165 169 handleNext() ··· 214 218 setDate((prevDate) => { 215 219 if (view === "day") return subDays(prevDate, 1) 216 220 if (view === "week") return subDays(prevDate, 7) 221 + if (view === "four-day") return subDays(prevDate, 4) 217 222 if (view === "year") return subYears(prevDate, 1) 218 223 return subDays(prevDate, 30) 219 224 }) ··· 223 228 setDate((prevDate) => { 224 229 if (view === "day") return addDays(prevDate, 1) 225 230 if (view === "week") return addDays(prevDate, 7) 231 + if (view === "four-day") return addDays(prevDate, 4) 226 232 if (view === "year") return addYears(prevDate, 1) 227 233 return addDays(prevDate, 30) 228 234 }) ··· 234 240 return date.getFullYear().toString() 235 241 } 236 242 243 + if (view === "four-day") { 244 + const startDate = new Date(date) 245 + const endDate = addDays(startDate, 3) 246 + const options: Intl.DateTimeFormatOptions = { month: "short", day: "numeric" } 247 + return `${startDate.toLocaleDateString(language, options)} - ${endDate.toLocaleDateString(language, options)}` 248 + } 249 + 237 250 if (language === "en") { 238 251 const options: Intl.DateTimeFormatOptions = { year: "numeric", month: "long" } 239 252 return date.toLocaleDateString(language, options) ··· 491 504 <div className="relative z-50"> 492 505 <Select 493 506 value={ 494 - view === "day" || view === "week" || view === "month" || view === "year" 507 + view === "day" || view === "week" || view === "four-day" || view === "month" || view === "year" 495 508 ? view 496 - : defaultView === "day" || defaultView === "week" || defaultView === "month" || defaultView === "year" 509 + : defaultView === "day" || defaultView === "week" || defaultView === "four-day" || defaultView === "month" || defaultView === "year" 497 510 ? defaultView 498 511 : "week" 499 512 } ··· 508 521 <SelectItem value="week">{t.week}</SelectItem> 509 522 <SelectItem value="month">{t.month}</SelectItem> 510 523 <SelectItem value="year">{t.year}</SelectItem> 524 + <SelectItem value="four-day">{t.fourDay}</SelectItem> 511 525 512 526 </SelectGroup> 513 527 </SelectContent> ··· 645 659 646 660 updateEvent(updatedEvent) 647 661 }} 662 + /> 663 + )} 664 + {view === "four-day" && ( 665 + <WeekView 666 + date={date} 667 + events={filteredEvents} 668 + onEventClick={handleEventClick} 669 + onTimeSlotClick={handleTimeSlotClick} 670 + language={language} 671 + firstDayOfWeek={firstDayOfWeek} 672 + timezone={timezone} 673 + timeFormat={timeFormat} 674 + onEditEvent={handleEventEdit} 675 + onDeleteEvent={(event) => handleEventDelete(event.id)} 676 + onShareEvent={(event) => { 677 + setPreviewEvent(event) 678 + setPreviewOpen(true) 679 + setOpenShareImmediately(true)}} 680 + onBookmarkEvent={toggleBookmark} 681 + onEventDrop={(event, newStartDate, newEndDate) => { 682 + const updatedEvent = { 683 + ...event, 684 + startDate: newStartDate, 685 + endDate: newEndDate 686 + } 687 + 688 + updateEvent(updatedEvent) 689 + }} 690 + daysToShow={4} 691 + fixedStartDate={date} 648 692 /> 649 693 )} 650 694 {view === "month" && (
+5 -7
components/app/event/event-dialog.tsx
··· 851 851 <Textarea id="description" value={description} onChange={(e) => setDescription(e.target.value)} /> 852 852 </div> 853 853 854 - <div className="flex justify-between"> 854 + <div className="flex justify-end gap-2"> 855 + <Button type="button" variant="outline" onClick={() => onOpenChange(false)}> 856 + {t.cancel} 857 + </Button> 858 + <Button type="submit">{event ? t.update : t.save}</Button> 855 859 {event && ( 856 860 <Button 857 861 type="button" ··· 864 868 {t.delete} 865 869 </Button> 866 870 )} 867 - <div className="flex space-x-2"> 868 - <Button type="button" variant="outline" onClick={() => onOpenChange(false)}> 869 - {t.cancel} 870 - </Button> 871 - <Button type="submit">{event ? t.update : t.save}</Button> 872 - </div> 873 871 </div> 874 872 </form> 875 873 </DialogContent>
+2
components/app/profile/settings.tsx
··· 176 176 <SelectItem value="week">{t.week}</SelectItem> 177 177 <SelectItem value="month">{t.month}</SelectItem> 178 178 <SelectItem value="year">{t.year}</SelectItem> 179 + <SelectItem value="four-day">{t.fourDay}</SelectItem> 179 180 </SelectContent> 180 181 </Select> 181 182 </div> ··· 225 226 <div><Kbd>2</Kbd> - {t.weekView}</div> 226 227 <div><Kbd>3</Kbd> - {t.monthView}</div> 227 228 <div><Kbd>4</Kbd> - {t.yearView}</div> 229 + <div><Kbd>5</Kbd> - {t.fourDayView}</div> 228 230 <div><Kbd>→</Kbd> - {t.nextPeriod}</div> 229 231 <div><Kbd>←</Kbd> - {t.previousPeriod}</div> 230 232 </div>
+4 -3
components/app/sidebar/sidebar.tsx
··· 269 269 ))} 270 270 </div> 271 271 </div> 272 - <div> 272 + </div> 273 + <DialogFooter className="justify-end"> 274 + <Button variant="outline" onClick={() => setManageCategoriesOpen(false)}>{t.cancel}</Button> 273 275 <Button onClick={addCategory} disabled={!newCategoryName}> 274 276 <Plus className="mr-2 h-4 w-4" /> 275 277 {t.addCategory} 276 278 </Button> 277 - </div> 278 - </div> 279 + </DialogFooter> 279 280 </DialogContent> 280 281 </Dialog> 281 282 </div>
+13 -4
components/app/views/week-view.tsx
··· 9 9 ContextMenuTrigger, 10 10 } from "@/components/ui/context-menu" 11 11 import { Edit3, Share2, Bookmark, Trash2 } from "lucide-react" 12 - import { format, startOfWeek, endOfWeek, eachDayOfInterval, isSameDay, isWithinInterval, add } from "date-fns" 12 + import { format, startOfWeek, endOfWeek, eachDayOfInterval, isSameDay, isWithinInterval, add, addDays, startOfDay } from "date-fns" 13 13 import { cn } from "@/lib/utils" 14 14 import { translations, type Language } from "@/lib/i18n" 15 15 ··· 27 27 onShareEvent?: (event: CalendarEvent) => void 28 28 onBookmarkEvent?: (event: CalendarEvent) => void 29 29 onEventDrop?: (event: CalendarEvent, newStartDate: Date, newEndDate: Date) => void // 新增拖拽事件处理函数 30 + daysToShow?: number 31 + fixedStartDate?: Date 30 32 } 31 33 32 34 interface CalendarEvent { ··· 52 54 onShareEvent, 53 55 onBookmarkEvent, 54 56 onEventDrop, // 新增拖拽事件处理函数 57 + daysToShow, 58 + fixedStartDate, 55 59 }: WeekViewProps) { 56 60 const weekStart = startOfWeek(date, { weekStartsOn: firstDayOfWeek }) 57 61 const weekEnd = endOfWeek(date, { weekStartsOn: firstDayOfWeek }) 58 - const weekDays = eachDayOfInterval({ start: weekStart, end: weekEnd }) 62 + const weekDays = daysToShow 63 + ? Array.from({ length: daysToShow }, (_, index) => 64 + addDays(startOfDay(fixedStartDate ?? date), index), 65 + ) 66 + : eachDayOfInterval({ start: weekStart, end: weekEnd }) 59 67 const hours = Array.from({ length: 24 }, (_, i) => i) 68 + const gridTemplateColumns = `100px repeat(${weekDays.length}, minmax(0, 1fr))` 60 69 const today = new Date() 61 70 const t = translations[language] 62 71 ··· 628 637 629 638 return ( 630 639 <div className="flex flex-col h-full"> 631 - <div className="grid grid-cols-[100px_repeat(7,1fr)] divide-x relative z-30 bg-background"> 640 + <div className="grid divide-x relative z-30 bg-background" style={{ gridTemplateColumns }}> 632 641 <div className="sticky top-0 z-30 bg-background" /> 633 642 {weekDays.map((day) => { 634 643 // 获取当天的事件 ··· 664 673 })} 665 674 </div> 666 675 667 - <div className="flex-1 grid grid-cols-[100px_repeat(7,1fr)] divide-x overflow-auto" ref={scrollContainerRef}> 676 + <div className="flex-1 grid divide-x overflow-auto" style={{ gridTemplateColumns }} ref={scrollContainerRef}> 668 677 <div className="text-sm text-muted-foreground"> 669 678 {hours.map((hour) => ( 670 679 <div key={hour} className="h-[60px] relative border-gray-200">
+2
locales/de.json
··· 7 7 "addNewCalendar": "Neuen Kalender hinzufügen", 8 8 "day": "Tag", 9 9 "week": "Woche", 10 + "fourDay": "4 Tage", 10 11 "month": "Monat", 11 12 "analytics": "Analysen", 12 13 "searchEvents": "Ereignisse suchen", ··· 158 159 "weekView": "Wochenansicht", 159 160 "monthView": "Monatsansicht", 160 161 "yearView": "Jahresansicht", 162 + "fourDayView": "4-Tage-Ansicht", 161 163 "nextPeriod": "Nächster Zeitraum", 162 164 "previousPeriod": "Vorheriger Zeitraum", 163 165 "userProfile": "Benutzerprofil",
+3 -1
locales/en-GB.json
··· 7 7 "addNewCalendar": "Add New Calendar", 8 8 "day": "Day", 9 9 "week": "Week", 10 + "fourDay": "Four Days", 10 11 "month": "Month", 11 12 "analytics": "Analytics", 12 13 "searchEvents": "Search Events", ··· 158 159 "weekView": "Week View", 159 160 "monthView": "Month View", 160 161 "yearView": "Year View", 162 + "fourDayView": "Four-Day View", 161 163 "nextPeriod": "Next Period", 162 164 "previousPeriod": "Previous Period", 163 165 "userProfile": "User Profile", ··· 387 389 "changeEncryptionKeyAction": "Change encryption key", 388 390 "signOutHelp": "Sign out of your account and return to sign-in.", 389 391 "deleteAccountDataHelp": "Delete calendar data stored locally and in the cloud for this account.", 390 - "deleteAccountPermanentHelp": "Permanently remove your Clerk account and related data.", 392 + "deleteAccountPermanentHelp": "Permanently remove your account and related data.", 391 393 "manageProfileDescription": "Manage your name, email addresses, and OAuth connections.", 392 394 "avatar": "Avatar", 393 395 "uploading": "Uploading...",
+3 -1
locales/en.json
··· 7 7 "addNewCalendar": "Add New Calendar", 8 8 "day": "Day", 9 9 "week": "Week", 10 + "fourDay": "Four Days", 10 11 "month": "Month", 11 12 "analytics": "Analytics", 12 13 "searchEvents": "Search Events", ··· 158 159 "weekView": "Week View", 159 160 "monthView": "Month View", 160 161 "yearView": "Year View", 162 + "fourDayView": "Four-Day View", 161 163 "nextPeriod": "Next Period", 162 164 "previousPeriod": "Previous Period", 163 165 "userProfile": "User Profile", ··· 387 389 "changeEncryptionKeyAction": "Change encryption key", 388 390 "signOutHelp": "Sign out of your account and return to sign-in.", 389 391 "deleteAccountDataHelp": "Delete calendar data stored locally and in the cloud for this account.", 390 - "deleteAccountPermanentHelp": "Permanently remove your Clerk account and related data.", 392 + "deleteAccountPermanentHelp": "Permanently remove your account and related data.", 391 393 "manageProfileDescription": "Manage your name, email addresses, and OAuth connections.", 392 394 "avatar": "Avatar", 393 395 "uploading": "Uploading...",
+3 -1
locales/es.json
··· 7 7 "addNewCalendar": "Añadir nuevo calendario", 8 8 "day": "Día", 9 9 "week": "Semana", 10 + "fourDay": "4 días", 10 11 "month": "Mes", 11 12 "analytics": "Analíticas", 12 13 "searchEvents": "Buscar eventos", ··· 158 159 "weekView": "Vista de semana", 159 160 "monthView": "Vista de mes", 160 161 "yearView": "Vista de año", 162 + "fourDayView": "Vista de 4 días", 161 163 "nextPeriod": "Siguiente período", 162 164 "previousPeriod": "Período anterior", 163 165 "userProfile": "Perfil de usuario", ··· 387 389 "changeEncryptionKeyAction": "Cambiar llave de cifrado", 388 390 "signOutHelp": "Cierra la sesión de tu cuenta y vuelve al inicio de sesión.", 389 391 "deleteAccountDataHelp": "Elimina los datos del calendario almacenados localmente y en la nube para esta cuenta.", 390 - "deleteAccountPermanentHelp": "Elimina permanentemente tu cuenta de Clerk y los datos relacionados.", 392 + "deleteAccountPermanentHelp": "Elimina permanentemente tu cuenta y los datos relacionados.", 391 393 "manageProfileDescription": "Gestiona tu nombre, direcciones de correo electrónico y conexiones OAuth.", 392 394 "avatar": "Avatar", 393 395 "uploading": "Subiendo...",
+3 -1
locales/fi.json
··· 7 7 "addNewCalendar": "Lisää uusi kalenteri", 8 8 "day": "Päivä", 9 9 "week": "Viikko", 10 + "fourDay": "4 päivää", 10 11 "month": "Kuukausi", 11 12 "analytics": "Analytiikka", 12 13 "searchEvents": "Etsi tapahtumia", ··· 158 159 "weekView": "Viikkonäkymä", 159 160 "monthView": "Kuukausinäkymä", 160 161 "yearView": "Vuosinäkymä", 162 + "fourDayView": "4 päivän näkymä", 161 163 "nextPeriod": "Seuraava jakso", 162 164 "previousPeriod": "Edellinen jakso", 163 165 "userProfile": "Käyttäjäprofiili", ··· 387 389 "changeEncryptionKeyAction": "Vaihda salausavain", 388 390 "signOutHelp": "Kirjaudu ulos tilistäsi ja palaa kirjautumissivulle.", 389 391 "deleteAccountDataHelp": "Poista kalenteritiedot, jotka on tallennettu paikallisesti ja pilvessä tälle tilille.", 390 - "deleteAccountPermanentHelp": "Poista Clerk-tilisi ja siihen liittyvät tiedot pysyvästi.", 392 + "deleteAccountPermanentHelp": "Poista tilisi ja siihen liittyvät tiedot pysyvästi.", 391 393 "manageProfileDescription": "Hallitse nimeäsi, sähköpostiosoitteitasi ja OAuth-yhteyksiäsi.", 392 394 "avatar": "Profiilikuva", 393 395 "uploading": "Ladataan...",
+3 -1
locales/fr.json
··· 7 7 "addNewCalendar": "Ajouter un nouveau calendrier", 8 8 "day": "Jour", 9 9 "week": "Semaine", 10 + "fourDay": "4 jours", 10 11 "month": "Mois", 11 12 "analytics": "Analytiques", 12 13 "searchEvents": "Rechercher des événements", ··· 158 159 "weekView": "Vue hebdomadaire", 159 160 "monthView": "Vue mensuelle", 160 161 "yearView": "Vue annuelle", 162 + "fourDayView": "Vue sur 4 jours", 161 163 "nextPeriod": "Période suivante", 162 164 "previousPeriod": "Période précédente", 163 165 "userProfile": "Profil utilisateur", ··· 387 389 "changeEncryptionKeyAction": "Changer la clé de chiffrement", 388 390 "signOutHelp": "Déconnectez-vous de votre compte et revenez à la page de connexion.", 389 391 "deleteAccountDataHelp": "Supprimez les données de calendrier stockées localement et dans le cloud pour ce compte.", 390 - "deleteAccountPermanentHelp": "Supprimez définitivement votre compte Clerk et les données associées.", 392 + "deleteAccountPermanentHelp": "Supprimez définitivement votre compte et les données associées.", 391 393 "manageProfileDescription": "Gérez votre nom, vos adresses e-mail et vos connexions OAuth.", 392 394 "avatar": "Avatar", 393 395 "uploading": "Envoi en cours...",
+3 -1
locales/hi.json
··· 7 7 "addNewCalendar": "नया कैलेंडर जोड़ें", 8 8 "day": "दिन", 9 9 "week": "सप्ताह", 10 + "fourDay": "4 दिन", 10 11 "month": "महीना", 11 12 "analytics": "विश्लेषण", 12 13 "searchEvents": "इवेंट खोजें", ··· 158 159 "weekView": "सप्ताह दृश्य", 159 160 "monthView": "महीना दृश्य", 160 161 "yearView": "वर्ष दृश्य", 162 + "fourDayView": "4-दिवसीय दृश्य", 161 163 "nextPeriod": "अगला अवधि", 162 164 "previousPeriod": "पिछला अवधि", 163 165 "userProfile": "उपयोगकर्ता प्रोफ़ाइल", ··· 387 389 "changeEncryptionKeyAction": "एन्क्रिप्शन कुंजी बदलें", 388 390 "signOutHelp": "अपने खाते से साइन आउट करें और साइन-इन पर वापस जाएं।", 389 391 "deleteAccountDataHelp": "इस खाते के लिए स्थानीय और क्लाउड में संग्रहीत कैलेंडर डेटा हटाएं।", 390 - "deleteAccountPermanentHelp": "अपने Clerk खाते और संबंधित डेटा को स्थायी रूप से हटा दें।", 392 + "deleteAccountPermanentHelp": "अपने खाते और संबंधित डेटा को स्थायी रूप से हटा दें।", 391 393 "manageProfileDescription": "अपना नाम, ईमेल पते और OAuth कनेक्शन प्रबंधित करें।", 392 394 "avatar": "अवतार", 393 395 "uploading": "अपलोड हो रहा है...",
+3 -1
locales/is.json
··· 7 7 "addNewCalendar": "Bæta við nýju dagatali", 8 8 "day": "Dagur", 9 9 "week": "Vika", 10 + "fourDay": "4 dagar", 10 11 "month": "Mánuður", 11 12 "analytics": "Greiningar", 12 13 "searchEvents": "Leita að viðburðum", ··· 158 159 "weekView": "Vikusýn", 159 160 "monthView": "Mánaðarsýn", 160 161 "yearView": "Árssýn", 162 + "fourDayView": "4 daga sýn", 161 163 "nextPeriod": "Næsta tímabil", 162 164 "previousPeriod": "Fyrra tímabil", 163 165 "userProfile": "Notandaprófíll", ··· 387 389 "changeEncryptionKeyAction": "Breyta dulritunarlykli", 388 390 "signOutHelp": "Skráðu þig út úr aðgangi og farðu aftur í innskráningu.", 389 391 "deleteAccountDataHelp": "Eyða dagatalsgögnum sem vistað er staðbundið og í skýi fyrir þennan aðgang.", 390 - "deleteAccountPermanentHelp": "Fjarlægja Clerk aðganginn þinn og tengd gögn varanlega.", 392 + "deleteAccountPermanentHelp": "Fjarlægðu aðganginn þinn og tengd gögn varanlega.", 391 393 "manageProfileDescription": "Stjórnaðu nafni, netföngum og OAuth tengingum.", 392 394 "avatar": "Avatar", 393 395 "uploading": "Hleð upp...",
+3 -1
locales/it.json
··· 7 7 "addNewCalendar": "Aggiungi Nuovo Calendario", 8 8 "day": "Giorno", 9 9 "week": "Settimana", 10 + "fourDay": "4 giorni", 10 11 "month": "Mese", 11 12 "analytics": "Analisi", 12 13 "searchEvents": "Cerca Eventi", ··· 158 159 "weekView": "Vista Settimana", 159 160 "monthView": "Vista Mese", 160 161 "yearView": "Vista Anno", 162 + "fourDayView": "Vista 4 giorni", 161 163 "nextPeriod": "Periodo Successivo", 162 164 "previousPeriod": "Periodo Precedente", 163 165 "userProfile": "Profilo Utente", ··· 387 389 "changeEncryptionKeyAction": "Cambia chiave di crittografia", 388 390 "signOutHelp": "Esci dal tuo account e torna alla pagina di accesso.", 389 391 "deleteAccountDataHelp": "Elimina i dati del calendario memorizzati localmente e nel cloud per questo account.", 390 - "deleteAccountPermanentHelp": "Rimuovi permanentemente il tuo account Clerk e i dati correlati.", 392 + "deleteAccountPermanentHelp": "Rimuovi definitivamente il tuo account e i dati correlati.", 391 393 "manageProfileDescription": "Gestisci il tuo nome, indirizzi email e connessioni OAuth.", 392 394 "avatar": "Avatar", 393 395 "uploading": "Caricamento...",
+3 -1
locales/ja.json
··· 7 7 "addNewCalendar": "新しいカレンダーを追加", 8 8 "day": "日", 9 9 "week": "週", 10 + "fourDay": "4日間", 10 11 "month": "月", 11 12 "analytics": "分析", 12 13 "searchEvents": "イベントを検索", ··· 158 159 "weekView": "週表示", 159 160 "monthView": "月表示", 160 161 "yearView": "年表示", 162 + "fourDayView": "4日表示", 161 163 "nextPeriod": "次の期間", 162 164 "previousPeriod": "前の期間", 163 165 "userProfile": "ユーザープロフィール", ··· 387 389 "changeEncryptionKeyAction": "暗号化キーを変更", 388 390 "signOutHelp": "アカウントからログアウトし、ログインページに戻ります。", 389 391 "deleteAccountDataHelp": "このアカウントのローカルおよびクラウドに保存されたカレンダーデータを削除します。", 390 - "deleteAccountPermanentHelp": "Clerkアカウントと関連データを永久に削除します。", 392 + "deleteAccountPermanentHelp": "アカウントと関連データを完全に削除します。", 391 393 "manageProfileDescription": "名前、メールアドレス、OAuth接続を管理します。", 392 394 "avatar": "アバター", 393 395 "uploading": "アップロード中...",
+3 -1
locales/ko.json
··· 7 7 "addNewCalendar": "새 달력 추가", 8 8 "day": "일", 9 9 "week": "주", 10 + "fourDay": "4일", 10 11 "month": "월", 11 12 "analytics": "분석", 12 13 "searchEvents": "이벤트 검색", ··· 158 159 "weekView": "주 뷰", 159 160 "monthView": "월 뷰", 160 161 "yearView": "년 뷰", 162 + "fourDayView": "4일 보기", 161 163 "nextPeriod": "다음 기간", 162 164 "previousPeriod": "이전 기간", 163 165 "userProfile": "사용자 프로필", ··· 387 389 "changeEncryptionKeyAction": "암호화 키 변경", 388 390 "signOutHelp": "계정에서 로그아웃하고 로그인 페이지로 돌아갑니다.", 389 391 "deleteAccountDataHelp": "이 계정의 로컬 및 클라우드에 저장된 달력 데이터를 삭제합니다.", 390 - "deleteAccountPermanentHelp": "Clerk 계정 및 관련 데이터를 영구적으로 제거합니다.", 392 + "deleteAccountPermanentHelp": "계정 및 관련 데이터를 영구적으로 삭제합니다.", 391 393 "manageProfileDescription": "이름, 이메일 주소 및 OAuth 연결을 관리합니다.", 392 394 "avatar": "아바타", 393 395 "uploading": "업로드 중...",
+3 -1
locales/nb.json
··· 7 7 "addNewCalendar": "Legg til ny kalender", 8 8 "day": "Dag", 9 9 "week": "Uke", 10 + "fourDay": "4 dager", 10 11 "month": "Måned", 11 12 "analytics": "Analyser", 12 13 "searchEvents": "Søk i hendelser", ··· 158 159 "weekView": "Ukevisning", 159 160 "monthView": "Månedsvisning", 160 161 "yearView": "Årsvisning", 162 + "fourDayView": "4-dagers visning", 161 163 "nextPeriod": "Neste periode", 162 164 "previousPeriod": "Forrige periode", 163 165 "userProfile": "Brukerprofil", ··· 387 389 "changeEncryptionKeyAction": "Endre krypteringsnøkkel", 388 390 "signOutHelp": "Logg ut av kontoen din og gå tilbake til pålogging.", 389 391 "deleteAccountDataHelp": "Slett kalenderdata lagret lokalt og i skyen for denne kontoen.", 390 - "deleteAccountPermanentHelp": "Fjern Clerk-kontoen din og tilhørende data permanent.", 392 + "deleteAccountPermanentHelp": "Fjern kontoen din og tilhørende data permanent.", 391 393 "manageProfileDescription": "Administrer navn, e-postadresser og OAuth-tilkoblinger.", 392 394 "avatar": "Avatar", 393 395 "uploading": "Laster opp...",
+3 -1
locales/nl.json
··· 7 7 "addNewCalendar": "Nieuwe agenda toevoegen", 8 8 "day": "Dag", 9 9 "week": "Week", 10 + "fourDay": "4 dagen", 10 11 "month": "Maand", 11 12 "analytics": "Analyse", 12 13 "searchEvents": "Afspraken zoeken", ··· 158 159 "weekView": "Weekweergave", 159 160 "monthView": "Maandweergave", 160 161 "yearView": "Jaarweergave", 162 + "fourDayView": "4-daagse weergave", 161 163 "nextPeriod": "Volgende periode", 162 164 "previousPeriod": "Vorige periode", 163 165 "userProfile": "Gebruikersprofiel", ··· 387 389 "changeEncryptionKeyAction": "Versleutelingssleutel wijzigen", 388 390 "signOutHelp": "Meld u af van uw account en keer terug naar de aanmeldpagina.", 389 391 "deleteAccountDataHelp": "Verwijder agenda-gegevens die lokaal en in de cloud zijn opgeslagen voor dit account.", 390 - "deleteAccountPermanentHelp": "Verwijder uw Clerk-account en gerelateerde gegevens permanent.", 392 + "deleteAccountPermanentHelp": "Verwijder uw account en gerelateerde gegevens permanent.", 391 393 "manageProfileDescription": "Beheer uw naam, e-mailadressen en OAuth-verbindingen.", 392 394 "avatar": "Avatar", 393 395 "uploading": "Bezig met uploaden...",
+3 -1
locales/pl.json
··· 7 7 "addNewCalendar": "Dodaj nowy kalendarz", 8 8 "day": "Dzień", 9 9 "week": "Tydzień", 10 + "fourDay": "4 dni", 10 11 "month": "Miesiąc", 11 12 "analytics": "Analizy", 12 13 "searchEvents": "Wyszukaj wydarzenia", ··· 158 159 "weekView": "Widok tygodnia", 159 160 "monthView": "Widok miesiąca", 160 161 "yearView": "Widok roku", 162 + "fourDayView": "Widok 4 dni", 161 163 "nextPeriod": "Następny okres", 162 164 "previousPeriod": "Poprzedni okres", 163 165 "userProfile": "Profil użytkownika", ··· 387 389 "changeEncryptionKeyAction": "Zmień klucz szyfrowania", 388 390 "signOutHelp": "Wyloguj się ze swojego konta i wróć do ekranu logowania.", 389 391 "deleteAccountDataHelp": "Usuń dane kalendarza przechowywane lokalnie i w chmurze dla tego konta.", 390 - "deleteAccountPermanentHelp": "Trwale usuń swoje konto Clerk i powiązane dane.", 392 + "deleteAccountPermanentHelp": "Trwale usuń swoje konto i powiązane dane.", 391 393 "manageProfileDescription": "Zarządzaj swoim imieniem, nazwiskiem, adresami e-mail i połączeniami OAuth.", 392 394 "avatar": "Awatar", 393 395 "uploading": "Przesyłanie...",
+3 -1
locales/pt.json
··· 7 7 "addNewCalendar": "Adicionar Novo Calendário", 8 8 "day": "Dia", 9 9 "week": "Semana", 10 + "fourDay": "4 dias", 10 11 "month": "Mês", 11 12 "analytics": "Análises", 12 13 "searchEvents": "Procurar Eventos", ··· 158 159 "weekView": "Visualização Semanal", 159 160 "monthView": "Visualização Mensal", 160 161 "yearView": "Visualização Anual", 162 + "fourDayView": "Visualização de 4 dias", 161 163 "nextPeriod": "Próximo Período", 162 164 "previousPeriod": "Período Anterior", 163 165 "userProfile": "Perfil do Usuário", ··· 387 389 "changeEncryptionKeyAction": "Alterar chave de criptografia", 388 390 "signOutHelp": "Faça logout da sua conta e retorne para a tela de login.", 389 391 "deleteAccountDataHelp": "Exclua os dados do calendário armazenados localmente e na nuvem para esta conta.", 390 - "deleteAccountPermanentHelp": "Remova permanentemente sua conta Clerk e os dados relacionados.", 392 + "deleteAccountPermanentHelp": "Remova permanentemente sua conta e os dados relacionados.", 391 393 "manageProfileDescription": "Gerencie seu nome, endereços de e-mail e conexões OAuth.", 392 394 "avatar": "Avatar", 393 395 "uploading": "Carregando...",
+3 -1
locales/ro.json
··· 7 7 "addNewCalendar": "Adaugă calendar nou", 8 8 "day": "Zi", 9 9 "week": "Săptămână", 10 + "fourDay": "4 zile", 10 11 "month": "Lună", 11 12 "analytics": "Analize", 12 13 "searchEvents": "Caută evenimente", ··· 158 159 "weekView": "Vizualizare săptămână", 159 160 "monthView": "Vizualizare lună", 160 161 "yearView": "Vizualizare an", 162 + "fourDayView": "Vizualizare 4 zile", 161 163 "nextPeriod": "Perioada următoare", 162 164 "previousPeriod": "Perioada anterioară", 163 165 "userProfile": "Profil utilizator", ··· 387 389 "changeEncryptionKeyAction": "Schimbă cheia de criptare", 388 390 "signOutHelp": "Deconectați-vă din cont și reveniți la autentificare.", 389 391 "deleteAccountDataHelp": "Ștergeți datele calendarului stocate local și în cloud pentru acest cont.", 390 - "deleteAccountPermanentHelp": "Eliminați definitiv contul dvs. Clerk și datele asociate.", 392 + "deleteAccountPermanentHelp": "Eliminați definitiv contul dvs. și datele asociate.", 391 393 "manageProfileDescription": "Gestionați-vă numele, adresele de email și conexiunile OAuth.", 392 394 "avatar": "Avatar", 393 395 "uploading": "Se încarcă...",
+3 -1
locales/ru.json
··· 7 7 "addNewCalendar": "Добавить новый календарь", 8 8 "day": "День", 9 9 "week": "Неделя", 10 + "fourDay": "4 дня", 10 11 "month": "Месяц", 11 12 "analytics": "Аналитика", 12 13 "searchEvents": "Поиск событий", ··· 158 159 "weekView": "Просмотр недели", 159 160 "monthView": "Просмотр месяца", 160 161 "yearView": "Просмотр года", 162 + "fourDayView": "Просмотр 4 дней", 161 163 "nextPeriod": "Следующий период", 162 164 "previousPeriod": "Предыдущий период", 163 165 "userProfile": "Профиль пользователя", ··· 387 389 "changeEncryptionKeyAction": "Изменить ключ шифрования", 388 390 "signOutHelp": "Выйдите из своего аккаунта и вернитесь к входу.", 389 391 "deleteAccountDataHelp": "Удалите данные календаря, хранящиеся локально и в облаке для этого аккаунта.", 390 - "deleteAccountPermanentHelp": "Постоянно удалите свой аккаунт Clerk и связанные данные.", 392 + "deleteAccountPermanentHelp": "Навсегда удалите свой аккаунт и связанные данные.", 391 393 "manageProfileDescription": "Управляйте своим именем, адресами электронной почты и подключениями OAuth.", 392 394 "avatar": "Аватар", 393 395 "uploading": "Загрузка...",
+3 -1
locales/sv.json
··· 7 7 "addNewCalendar": "Lägg till ny kalender", 8 8 "day": "Dag", 9 9 "week": "Vecka", 10 + "fourDay": "4 dagar", 10 11 "month": "Månad", 11 12 "analytics": "Analys", 12 13 "searchEvents": "Sök händelser", ··· 158 159 "weekView": "Veckovy", 159 160 "monthView": "Månadsvy", 160 161 "yearView": "Årsvy", 162 + "fourDayView": "4-dagarsvy", 161 163 "nextPeriod": "Nästa period", 162 164 "previousPeriod": "Föregående period", 163 165 "userProfile": "Användarprofil", ··· 387 389 "changeEncryptionKeyAction": "Ändra krypteringsnyckel", 388 390 "signOutHelp": "Logga ut från ditt konto och återgå till inloggning.", 389 391 "deleteAccountDataHelp": "Radera kalenderdata som lagras lokalt och i molnet för detta konto.", 390 - "deleteAccountPermanentHelp": "Ta bort ditt Clerk-konto och relaterad data permanent.", 392 + "deleteAccountPermanentHelp": "Ta bort ditt konto och relaterade data permanent.", 391 393 "manageProfileDescription": "Hantera ditt namn, e-postadresser och OAuth-anslutningar.", 392 394 "avatar": "Avatar", 393 395 "uploading": "Laddar upp...",
+3 -1
locales/uk.json
··· 7 7 "addNewCalendar": "Додати новий календар", 8 8 "day": "День", 9 9 "week": "Тиждень", 10 + "fourDay": "4 дні", 10 11 "month": "Місяць", 11 12 "analytics": "Аналітика", 12 13 "searchEvents": "Пошук подій", ··· 158 159 "weekView": "Тижневий перегляд", 159 160 "monthView": "Місячний перегляд", 160 161 "yearView": "Річний перегляд", 162 + "fourDayView": "Перегляд 4 днів", 161 163 "nextPeriod": "Наступний період", 162 164 "previousPeriod": "Попередній період", 163 165 "userProfile": "Профіль користувача", ··· 387 389 "changeEncryptionKeyAction": "Змінити ключ шифрування", 388 390 "signOutHelp": "Вийти з облікового запису та повернутися до входу.", 389 391 "deleteAccountDataHelp": "Видалити дані календаря, збережені локально та в хмарі для цього облікового запису.", 390 - "deleteAccountPermanentHelp": "Назавжди видалити ваш обліковий запис Clerk та пов'язані з ним дані.", 392 + "deleteAccountPermanentHelp": "Назавжди видаліть свій обліковий запис і пов’язані з ним дані.", 391 393 "manageProfileDescription": "Керуйте своїм ім'ям, адресами електронної пошти та підключеннями OAuth.", 392 394 "avatar": "Аватар", 393 395 "uploading": "Завантаження...",
+3 -1
locales/vi.json
··· 7 7 "addNewCalendar": "Thêm lịch mới", 8 8 "day": "Ngày", 9 9 "week": "Tuần", 10 + "fourDay": "4 ngày", 10 11 "month": "Tháng", 11 12 "analytics": "Phân tích", 12 13 "searchEvents": "Tìm kiếm sự kiện", ··· 158 159 "weekView": "Chế độ xem tuần", 159 160 "monthView": "Chế độ xem tháng", 160 161 "yearView": "Chế độ xem năm", 162 + "fourDayView": "Chế độ xem 4 ngày", 161 163 "nextPeriod": "Kỳ tiếp theo", 162 164 "previousPeriod": "Kỳ trước", 163 165 "userProfile": "Hồ sơ người dùng", ··· 387 389 "changeEncryptionKeyAction": "Thay đổi khóa mã hóa", 388 390 "signOutHelp": "Đăng xuất khỏi tài khoản và quay lại đăng nhập.", 389 391 "deleteAccountDataHelp": "Xóa dữ liệu lịch được lưu trữ cục bộ và trên đám mây cho tài khoản này.", 390 - "deleteAccountPermanentHelp": "Xóa vĩnh viễn tài khoản Clerk của bạn và dữ liệu liên quan.", 392 + "deleteAccountPermanentHelp": "Xóa vĩnh viễn tài khoản của bạn và dữ liệu liên quan.", 391 393 "manageProfileDescription": "Quản lý tên, địa chỉ email và kết nối OAuth của bạn.", 392 394 "avatar": "Ảnh đại diện", 393 395 "uploading": "Đang tải lên...",
+4 -2
locales/yue.json
··· 7 7 "addNewCalendar": "加新日曆", 8 8 "day": "日", 9 9 "week": "週", 10 + "fourDay": "4 日", 10 11 "month": "月", 11 12 "analytics": "分析", 12 13 "searchEvents": "搵事件", ··· 158 159 "weekView": "週檢視", 159 160 "monthView": "月檢視", 160 161 "yearView": "年檢視", 162 + "fourDayView": "4 日檢視", 161 163 "nextPeriod": "下一個週期", 162 164 "previousPeriod": "上一個週期", 163 165 "userProfile": "用戶資料", ··· 387 389 "changeEncryptionKeyAction": "更改加密密鑰", 388 390 "signOutHelp": "登出帳戶並返回登入頁面。", 389 391 "deleteAccountDataHelp": "刪除呢個帳戶喺本地同雲端儲存嘅日曆數據。", 390 - "deleteAccountPermanentHelp": "永久刪除你嘅 Clerk 帳戶同相關數據。", 392 + "deleteAccountPermanentHelp": "永久刪除你嘅帳戶同相關數據。", 391 393 "manageProfileDescription": "管理你嘅姓名、電郵地址同 OAuth 連接。", 392 394 "avatar": "頭像", 393 395 "uploading": "上傳緊...", ··· 451 453 "shareQrGenerateFailed": "二維碼生成失敗", 452 454 "done": "完成", 453 455 "protected": "已保護" 454 - } 456 + }
+3 -1
locales/zh-CN.json
··· 7 7 "addNewCalendar": "添加新日历", 8 8 "day": "日", 9 9 "week": "周", 10 + "fourDay": "4 天", 10 11 "month": "月", 11 12 "analytics": "分析", 12 13 "searchEvents": "搜索事件", ··· 158 159 "weekView": "周视图", 159 160 "monthView": "月视图", 160 161 "yearView": "年视图", 162 + "fourDayView": "4 天视图", 161 163 "nextPeriod": "下一个周期", 162 164 "previousPeriod": "上一个周期", 163 165 "userProfile": "用户资料", ··· 387 389 "changeEncryptionKeyAction": "更改加密密钥", 388 390 "signOutHelp": "退出账户并返回登录页面。", 389 391 "deleteAccountDataHelp": "删除此账户在本地和云端存储的日历数据。", 390 - "deleteAccountPermanentHelp": "永久删除您的 Clerk 账户及相关数据。", 392 + "deleteAccountPermanentHelp": "永久删除您的账户及相关数据。", 391 393 "manageProfileDescription": "管理您的姓名、邮箱地址和 OAuth 连接。", 392 394 "avatar": "头像", 393 395 "uploading": "正在上传...",
+3 -1
locales/zh-HK.json
··· 7 7 "addNewCalendar": "新增日曆", 8 8 "day": "日", 9 9 "week": "週", 10 + "fourDay": "4 天", 10 11 "month": "月", 11 12 "analytics": "分析", 12 13 "searchEvents": "搜尋活動", ··· 158 159 "weekView": "週視圖", 159 160 "monthView": "月視圖", 160 161 "yearView": "年視圖", 162 + "fourDayView": "4 天視圖", 161 163 "nextPeriod": "下一個時期", 162 164 "previousPeriod": "上一個時期", 163 165 "userProfile": "使用者個人檔案", ··· 387 389 "changeEncryptionKeyAction": "變更加密金鑰", 388 390 "signOutHelp": "登出你的帳戶並返回登入頁面。", 389 391 "deleteAccountDataHelp": "刪除此帳戶儲存在本地和雲端的日曆數據。", 390 - "deleteAccountPermanentHelp": "永久刪除你的 Clerk 帳戶及相關數據。", 392 + "deleteAccountPermanentHelp": "永久刪除你的帳戶及相關數據。", 391 393 "manageProfileDescription": "管理你的名稱、電郵地址和 OAuth 連線。", 392 394 "avatar": "頭像", 393 395 "uploading": "上傳中...",
+4 -2
locales/zh-TW.json
··· 7 7 "addNewCalendar": "新增行事曆", 8 8 "day": "日", 9 9 "week": "週", 10 + "fourDay": "4 天", 10 11 "month": "月", 11 12 "analytics": "分析", 12 13 "searchEvents": "搜尋事件", ··· 158 159 "weekView": "週檢視", 159 160 "monthView": "月檢視", 160 161 "yearView": "年檢視", 162 + "fourDayView": "4 天檢視", 161 163 "nextPeriod": "下一個週期", 162 164 "previousPeriod": "上一個週期", 163 165 "userProfile": "用戶資料", ··· 387 389 "changeEncryptionKeyAction": "更改加密金鑰", 388 390 "signOutHelp": "登出帳戶並返回登入頁面。", 389 391 "deleteAccountDataHelp": "刪除此帳戶在本地和雲端儲存的行事曆資料。", 390 - "deleteAccountPermanentHelp": "永久刪除您的 Clerk 帳戶及相關資料。", 392 + "deleteAccountPermanentHelp": "永久刪除您的帳戶及相關資料。", 391 393 "manageProfileDescription": "管理您的姓名、電子郵件地址和 OAuth 連線。", 392 394 "avatar": "頭像", 393 395 "uploading": "上傳中...", ··· 451 453 "shareQrGenerateFailed": "二維條碼生成失敗", 452 454 "done": "完成", 453 455 "protected": "已保護" 454 - } 456 + }