Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Countix/Components/EmptyStateView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ struct EmptyStateView: View {
Text(verbatim: L10n.tr("No events for %@", DateFormatting.eventDate.string(from: selectedDate)))
.font(.title3.weight(.semibold))

Text("Pick another day from the calendar or create a new event to start your countdown collection.")
Text(L10n.tr("Pick another day from the calendar or create a new event to start your countdown collection."))
.font(.body)
.foregroundStyle(.secondary)
.multilineTextAlignment(.center)
Expand Down
4 changes: 2 additions & 2 deletions Countix/Components/GlassAddButton.swift
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ struct GlassAddButton: View {
.foregroundStyle(.white)
}

Text("Add New Event")
Text(L10n.tr("Add New Event"))
.font(.headline.weight(.semibold))
.foregroundStyle(.white)
}
Expand Down Expand Up @@ -46,7 +46,7 @@ struct GlassAddButton: View {
}
}
.buttonStyle(.plain)
.accessibilityLabel("Add New Event")
.accessibilityLabel(L10n.tr("Add New Event"))
}
}

Expand Down
2 changes: 1 addition & 1 deletion Countix/Views/CalendarStripView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ struct CalendarStripView: View {
}
.buttonStyle(.plain)

Button("Today", action: onToday)
Button(L10n.tr("Today"), action: onToday)
.font(.subheadline.weight(.semibold))
.foregroundStyle(.white)
.padding(.horizontal, Constants.spacing * 3.5)
Expand Down
34 changes: 17 additions & 17 deletions Countix/Views/EventFormView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -64,11 +64,11 @@ struct EventFormView: View {
.toolbar {
ToolbarItem(placement: .topBarLeading) {
if formStep == .details {
Button("Cancel") {
Button(L10n.tr("Cancel")) {
dismiss()
}
} else {
Button("Back") {
Button(L10n.tr("Back")) {
withAnimation(.easeInOut(duration: 0.2)) {
formStep = .details
}
Expand Down Expand Up @@ -104,23 +104,23 @@ struct EventFormView: View {
}
}
}
.alert("Delete Event?", isPresented: $isShowingDeleteAlert) {
Button("Delete", role: .destructive) {
.alert(L10n.tr("Delete Event?"), isPresented: $isShowingDeleteAlert) {
Button(L10n.tr("Delete"), role: .destructive) {
onDelete?()
dismiss()
}
Button("Cancel", role: .cancel) {}
Button(L10n.tr("Cancel"), role: .cancel) {}
} message: {
Text("This event will be permanently removed.")
Text(L10n.tr("This event will be permanently removed."))
}
}

private var introCard: some View {
VStack(alignment: .leading, spacing: Constants.spacing * 2.5) {
Text(existingEvent == nil ? "Design a new countdown" : "Refine your countdown")
Text(existingEvent == nil ? L10n.tr("Design a new countdown") : L10n.tr("Refine your countdown"))
.font(.title2.weight(.bold))

Text("Set title, date, time and display mode. Then set colors and optional image in preview before saving.")
Text(L10n.tr("Set title, date, time and display mode. Then set colors and optional image in preview before saving."))
.font(.body)
.foregroundStyle(.secondary)
}
Expand All @@ -139,17 +139,17 @@ struct EventFormView: View {
private var formCard: some View {
VStack(alignment: .leading, spacing: 16) {
fieldContainer(title: L10n.tr("Title")) {
TextField("Conference opening, anniversary, departure...", text: $viewModel.title)
TextField(L10n.tr("Conference opening, anniversary, departure..."), text: $viewModel.title)
.textInputAutocapitalization(.words)
.padding(Constants.spacing * 3.5)
.background(.thinMaterial, in: RoundedRectangle(cornerRadius: 18, style: .continuous))
}

DatePicker("Event Date", selection: $viewModel.eventDate, displayedComponents: .date)
DatePicker(L10n.tr("Event Date"), selection: $viewModel.eventDate, displayedComponents: .date)
.datePickerStyle(.graphical)

fieldContainer(title: L10n.tr("Time")) {
DatePicker("Event Time", selection: $viewModel.eventTime, displayedComponents: .hourAndMinute)
DatePicker(L10n.tr("Event Time"), selection: $viewModel.eventTime, displayedComponents: .hourAndMinute)
.datePickerStyle(.wheel)
.labelsHidden()
}
Expand Down Expand Up @@ -190,10 +190,10 @@ struct EventFormView: View {

private var previewStep: some View {
VStack(alignment: .leading, spacing: 16) {
Text("Widget Preview")
Text(L10n.tr("Widget Preview"))
.font(.title3.weight(.bold))

Text("Choose colors and optional image, then save.")
Text(L10n.tr("Choose colors and optional image, then save."))
.font(.body)
.foregroundStyle(.secondary)

Expand All @@ -204,7 +204,7 @@ struct EventFormView: View {
Button(role: .destructive) {
isShowingDeleteAlert = true
} label: {
Label("Delete Event", systemImage: "trash")
Label(L10n.tr("Delete Event"), systemImage: "trash")
.font(.subheadline.weight(.semibold))
.frame(maxWidth: .infinity)
.padding(.vertical, 12)
Expand Down Expand Up @@ -240,7 +240,7 @@ struct EventFormView: View {
fieldContainer(title: L10n.tr("Background Image (Optional)")) {
VStack(alignment: .leading, spacing: 12) {
PhotosPicker(selection: $selectedPhotoItem, matching: .images) {
Label("Choose Image", systemImage: "photo.on.rectangle")
Label(L10n.tr("Choose Image"), systemImage: "photo.on.rectangle")
.font(.subheadline.weight(.semibold))
.padding(.horizontal, 14)
.padding(.vertical, 10)
Expand All @@ -260,11 +260,11 @@ struct EventFormView: View {
viewModel.backgroundImageData = nil
selectedPhotoItem = nil
} label: {
Label("Remove Image", systemImage: "trash")
Label(L10n.tr("Remove Image"), systemImage: "trash")
.font(.subheadline.weight(.semibold))
}
} else {
Text("No image selected")
Text(L10n.tr("No image selected"))
.font(.subheadline)
.foregroundStyle(.secondary)
}
Expand Down
12 changes: 6 additions & 6 deletions Countix/Views/HomeView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ struct HomeView: View {
.presentationDragIndicator(.visible)
}
.alert(
"Delete Event?",
L10n.tr("Delete Event?"),
isPresented: Binding(
get: { pendingDeletionEvent != nil },
set: { isPresented in
Expand All @@ -97,11 +97,11 @@ struct HomeView: View {
),
presenting: pendingDeletionEvent
) { event in
Button("Delete", role: .destructive) {
Button(L10n.tr("Delete"), role: .destructive) {
deleteEvent(event)
pendingDeletionEvent = nil
}
Button("Cancel", role: .cancel) {
Button(L10n.tr("Cancel"), role: .cancel) {
pendingDeletionEvent = nil
}
} message: { event in
Expand Down Expand Up @@ -157,7 +157,7 @@ struct HomeView: View {
private var eventsSection: some View {
VStack(alignment: .leading, spacing: Constants.spacing * 4) {
HStack {
Text("Events")
Text(L10n.tr("Events"))
.font(.title2.weight(.semibold))

Spacer()
Expand All @@ -178,13 +178,13 @@ struct HomeView: View {
Button {
editingEvent = event
} label: {
Label("Edit", systemImage: "pencil")
Label(L10n.tr("Edit"), systemImage: "pencil")
}

Button(role: .destructive) {
pendingDeletionEvent = event
} label: {
Label("Delete", systemImage: "trash")
Label(L10n.tr("Delete"), systemImage: "trash")
}
}
}
Expand Down
70 changes: 70 additions & 0 deletions Countix/de.lproj/Localizable.strings
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
"Event Countdown" = "Ereignis-Countdown";
"Your premium timeline for the moments that matter." = "Deine Premium-Timeline für die Momente, die zählen.";
"Delete Event?" = "Ereignis löschen?";
"Delete Event" = "Ereignis löschen";
"Delete" = "Löschen";
"Cancel" = "Abbrechen";
"\"%@\" will be permanently removed." = "\"%@\" wird dauerhaft entfernt.";
"%d total" = "%d insgesamt";
"%d today" = "%d heute";
"Events" = "Ereignisse";
"Edit" = "Bearbeiten";
"Passed" = "Vergangen";
"Upcoming" = "Anstehend";
"No events for %@" = "Keine Ereignisse für %@";
"Pick another day from the calendar or create a new event to start your countdown collection." = "Wähle einen anderen Tag aus dem Kalender oder erstelle ein neues Ereignis, um deine Countdown-Sammlung zu starten.";
"Add New Event" = "Neues Ereignis hinzufügen";
"Today" = "Heute";
"Back" = "Zurück";
"Preview" = "Vorschau";
"New Event" = "Neues Ereignis";
"Edit Event" = "Ereignis bearbeiten";
"Save" = "Speichern";
"Update" = "Aktualisieren";
"This event will be permanently removed." = "Dieses Ereignis wird dauerhaft entfernt.";
"Design a new countdown" = "Einen neuen Countdown entwerfen";
"Refine your countdown" = "Deinen Countdown verfeinern";
"Set title, date, time and display mode. Then set colors and optional image in preview before saving." = "Titel, Datum, Uhrzeit und Anzeigemodus festlegen. Dann Farben und optionales Bild in der Vorschau vor dem Speichern einstellen.";
"Title" = "Titel";
"Conference opening, anniversary, departure..." = "Konferenzeröffnung, Jubiläum, Abreise...";
"Event Date" = "Ereignisdatum";
"Time" = "Uhrzeit";
"Event Time" = "Ereigniszeit";
"Display Mode" = "Anzeigemodus";
"Widget Preview" = "Widget-Vorschau";
"Choose colors and optional image, then save." = "Farben und optionales Bild wählen, dann speichern.";
"Color Options" = "Farboptionen";
"Background Image (Optional)" = "Hintergrundbild (optional)";
"Choose Image" = "Bild wählen";
"Remove Image" = "Bild entfernen";
"No image selected" = "Kein Bild ausgewählt";
"Event passed" = "Ereignis vergangen";
"%d year" = "%d Jahr";
"%d years" = "%d Jahre";
"%d month" = "%d Monat";
"%d months" = "%d Monate";
"%d day" = "%d Tag";
"%d days" = "%d Tage";
"%d hour" = "%d Stunde";
"%d hours" = "%d Stunden";
"%d minute" = "%d Minute";
"%d minutes" = "%d Minuten";
"%d second" = "%d Sekunde";
"%d seconds" = "%d Sekunden";
"Years" = "Jahre";
"Months" = "Monate";
"Days" = "Tage";
"Hours" = "Stunden";
"Minutes" = "Minuten";
"Seconds" = "Sekunden";
"Full Countdown" = "Vollständiger Countdown";
"Blue" = "Blau";
"Orange" = "Orange";
"Green" = "Grün";
"Yellow" = "Gelb";
"Purple" = "Lila";
"Primary" = "Primär";
"Secondary" = "Sekundär";
"Red" = "Rot";
"Light Blue" = "Hellblau";
"Pink" = "Rosa";
1 change: 1 addition & 0 deletions Countix/en.lproj/Localizable.strings
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
"Event Countdown" = "Event Countdown";
"Your premium timeline for the moments that matter." = "Your premium timeline for the moments that matter.";
"Delete Event?" = "Delete Event?";
"Delete Event" = "Delete Event";
"Delete" = "Delete";
"Cancel" = "Cancel";
"\"%@\" will be permanently removed." = "\"%@\" will be permanently removed.";
Expand Down
70 changes: 70 additions & 0 deletions Countix/es.lproj/Localizable.strings
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
"Event Countdown" = "Cuenta atrás para eventos";
"Your premium timeline for the moments that matter." = "Tu línea de tiempo premium para los momentos que importan.";
"Delete Event?" = "¿Eliminar evento?";
"Delete Event" = "Eliminar evento";
"Delete" = "Eliminar";
"Cancel" = "Cancelar";
"\"%@\" will be permanently removed." = "\"%@\" se eliminará de forma permanente.";
"%d total" = "%d en total";
"%d today" = "%d hoy";
"Events" = "Eventos";
"Edit" = "Editar";
"Passed" = "Pasado";
"Upcoming" = "Próximo";
"No events for %@" = "No hay eventos para %@";
"Pick another day from the calendar or create a new event to start your countdown collection." = "Elige otro día del calendario o crea un nuevo evento para comenzar tu colección de cuentas atrás.";
"Add New Event" = "Añadir nuevo evento";
"Today" = "Hoy";
"Back" = "Atrás";
"Preview" = "Vista previa";
"New Event" = "Nuevo evento";
"Edit Event" = "Editar evento";
"Save" = "Guardar";
"Update" = "Actualizar";
"This event will be permanently removed." = "Este evento se eliminará de forma permanente.";
"Design a new countdown" = "Diseña una nueva cuenta atrás";
"Refine your countdown" = "Refina tu cuenta atrás";
"Set title, date, time and display mode. Then set colors and optional image in preview before saving." = "Establece el título, la fecha, la hora y el modo de visualización. Luego, elige los colores y una imagen opcional en la vista previa antes de guardar.";
"Title" = "Título";
"Conference opening, anniversary, departure..." = "Apertura de conferencia, aniversario, salida...";
"Event Date" = "Fecha del evento";
"Time" = "Hora";
"Event Time" = "Hora del evento";
"Display Mode" = "Modo de visualización";
"Widget Preview" = "Vista previa del widget";
"Choose colors and optional image, then save." = "Elige los colores y una imagen opcional, luego guarda.";
"Color Options" = "Opciones de color";
"Background Image (Optional)" = "Imagen de fondo (opcional)";
"Choose Image" = "Elegir imagen";
"Remove Image" = "Eliminar imagen";
"No image selected" = "Ninguna imagen seleccionada";
"Event passed" = "Evento pasado";
"%d year" = "%d año";
"%d years" = "%d años";
"%d month" = "%d mes";
"%d months" = "%d meses";
"%d day" = "%d día";
"%d days" = "%d días";
"%d hour" = "%d hora";
"%d hours" = "%d horas";
"%d minute" = "%d minuto";
"%d minutes" = "%d minutos";
"%d second" = "%d segundo";
"%d seconds" = "%d segundos";
"Years" = "Años";
"Months" = "Meses";
"Days" = "Días";
"Hours" = "Horas";
"Minutes" = "Minutos";
"Seconds" = "Segundos";
"Full Countdown" = "Cuenta atrás completa";
"Blue" = "Azul";
"Orange" = "Naranja";
"Green" = "Verde";
"Yellow" = "Amarillo";
"Purple" = "Púrpura";
"Primary" = "Primario";
"Secondary" = "Secundario";
"Red" = "Rojo";
"Light Blue" = "Azul claro";
"Pink" = "Rosa";
Loading