Add localization (DE/EN), vertical-scroll month view, context menus, custom colors
- Vertical-scroll month view with multi-day event spans, zig-zag month divider, CW number per week, on-demand event loading while scrolling - Top bar redesign: icon-only view picker on right, month title centered - Long-press context menus on day cells (month) and hour slots (week/day) for "New event", "Open in week view", "Open in day view", "Open in month view" - Localization system with system/de/en switch covering top bar, view picker, settings, menu, profile, server, accounts, event editor, agenda - Three new color pickers (text/background/line) + today-marker color applied in calendar views; current-time line now uses today color - App icon: removed alpha channel, accent color set to icon green (#20A050) - TestFlight: ITSAppUsesNonExemptEncryption=NO baked into Info.plist keys Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -4,13 +4,13 @@ import SwiftUI
|
||||
enum CalViewType: String, CaseIterable {
|
||||
case month, week, day, quarter, agenda
|
||||
|
||||
var label: String {
|
||||
func label(_ lang: String) -> String {
|
||||
switch self {
|
||||
case .month: return "Monat"
|
||||
case .week: return "Woche"
|
||||
case .day: return "Tag"
|
||||
case .quarter: return "Quartal"
|
||||
case .agenda: return "Termine"
|
||||
case .month: return L10n.t("view.month", lang)
|
||||
case .week: return L10n.t("view.week", lang)
|
||||
case .day: return L10n.t("view.day", lang)
|
||||
case .quarter: return L10n.t("view.quarter", lang)
|
||||
case .agenda: return L10n.t("view.agenda", lang)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -221,28 +221,29 @@ class CalendarStore {
|
||||
}
|
||||
}
|
||||
|
||||
func titleForCurrentView() -> String {
|
||||
func titleForCurrentView(language: String) -> String {
|
||||
let cal = userCalendar
|
||||
let fmt = DateFormatter()
|
||||
let loc = L10n.locale(language)
|
||||
let fmt = DateFormatter(); fmt.locale = loc
|
||||
switch viewType {
|
||||
case .month:
|
||||
fmt.dateFormat = "MMMM yyyy"
|
||||
return fmt.string(from: currentDate)
|
||||
fmt.dateFormat = "LLLL yyyy"
|
||||
return fmt.string(from: currentDate).capitalized(with: loc)
|
||||
case .quarter:
|
||||
fmt.dateFormat = "MMM yyyy"
|
||||
fmt.dateFormat = "LLL yyyy"
|
||||
let m3 = cal.date(byAdding: .month, value: 2, to: currentDate) ?? currentDate
|
||||
return "\(fmt.string(from: currentDate)) – \(fmt.string(from: m3))"
|
||||
case .week:
|
||||
let weekStart = cal.date(from: cal.dateComponents([.yearForWeekOfYear, .weekOfYear], from: currentDate))!
|
||||
let weekEnd = cal.date(byAdding: .day, value: 6, to: weekStart)!
|
||||
fmt.dateFormat = "d. MMM"
|
||||
let ef = DateFormatter(); ef.dateFormat = "d. MMM yyyy"
|
||||
let ef = DateFormatter(); ef.locale = loc; ef.dateFormat = "d. MMM yyyy"
|
||||
return "\(fmt.string(from: weekStart)) – \(ef.string(from: weekEnd))"
|
||||
case .day:
|
||||
fmt.dateFormat = "EEEE, d. MMMM yyyy"
|
||||
return fmt.string(from: currentDate)
|
||||
case .agenda:
|
||||
return "Termine"
|
||||
return L10n.t("view.agenda", language)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user