Compare commits
2 Commits
v0.4.0
...
45cd5fefcb
| Author | SHA1 | Date | |
|---|---|---|---|
| 45cd5fefcb | |||
| 7940134381 |
@@ -7,14 +7,7 @@ All notable changes to this project are documented here. The format follows
|
|||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
## [0.4.0] - 2026-08-31
|
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
- Agendula now speaks **German** and **Brazilian Portuguese**, the first
|
|
||||||
community translations. Pick one under **Settings → App language**, or in
|
|
||||||
Android's own per-app language settings; leave it on *System default* and
|
|
||||||
Agendula follows your phone. Anything not yet translated falls back to
|
|
||||||
English.
|
|
||||||
- Agendula can now be translated. Pick or request a language on Weblate and
|
- Agendula can now be translated. Pick or request a language on Weblate and
|
||||||
translate in the browser — the link sits at the top of the language picker in
|
translate in the browser — the link sits at the top of the language picker in
|
||||||
**Settings → App language**. Partial translations are fine; anything
|
**Settings → App language**. Partial translations are fine; anything
|
||||||
|
|||||||
@@ -29,8 +29,8 @@ android {
|
|||||||
// release itself (versionCode is pinned to MAJOR*10000 + MINOR*100 +
|
// release itself (versionCode is pinned to MAJOR*10000 + MINOR*100 +
|
||||||
// PATCH from versionName, e.g. 0.2.0 -> 200). The Gitea release is marked
|
// PATCH from versionName, e.g. 0.2.0 -> 200). The Gitea release is marked
|
||||||
// as a pre-release while MAJOR is 0. See docs/RELEASING.md.
|
// as a pre-release while MAJOR is 0. See docs/RELEASING.md.
|
||||||
versionCode = 400
|
versionCode = 302
|
||||||
versionName = "0.4.0"
|
versionName = "0.3.2"
|
||||||
|
|
||||||
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -501,17 +501,13 @@ private fun taskWhenLines(task: Task): Pair<String, String?>? {
|
|||||||
val due = task.due
|
val due = task.due
|
||||||
return when {
|
return when {
|
||||||
start != null && due != null -> {
|
start != null && due != null -> {
|
||||||
val allDay = task.isAllDay
|
val sameDay = start.formatDate() == due.formatDate()
|
||||||
val sameDay = start.formatDate(allDay) == due.formatDate(allDay)
|
val primary = if (sameDay) due.formatDate() else "${start.formatDate()} – ${due.formatDate()}"
|
||||||
val primary =
|
val secondary = if (task.isAllDay) null else "${start.formatTime()} – ${due.formatTime()}"
|
||||||
if (sameDay) due.formatDate(allDay)
|
|
||||||
else "${start.formatDate(allDay)} – ${due.formatDate(allDay)}"
|
|
||||||
val secondary = if (allDay) null else "${start.formatTime()} – ${due.formatTime()}"
|
|
||||||
primary to secondary
|
primary to secondary
|
||||||
}
|
}
|
||||||
due != null -> due.formatDate(task.isAllDay) to if (task.isAllDay) null else due.formatTime()
|
due != null -> due.formatDate() to if (task.isAllDay) null else due.formatTime()
|
||||||
start != null ->
|
start != null -> start.formatDate() to if (task.isAllDay) null else start.formatTime()
|
||||||
start.formatDate(task.isAllDay) to if (task.isAllDay) null else start.formatTime()
|
|
||||||
else -> null
|
else -> null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -653,7 +653,7 @@ private fun ScheduleRow(
|
|||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
Text(
|
Text(
|
||||||
text = value.formatDate(allDay),
|
text = value.formatDate(),
|
||||||
style = MaterialTheme.typography.titleMedium,
|
style = MaterialTheme.typography.titleMedium,
|
||||||
color = valueColor,
|
color = valueColor,
|
||||||
modifier = Modifier.clickable(onClick = onPick).padding(vertical = 8.dp, horizontal = 6.dp),
|
modifier = Modifier.clickable(onClick = onPick).padding(vertical = 8.dp, horizontal = 6.dp),
|
||||||
@@ -865,7 +865,7 @@ private fun ParentPickerSheet(
|
|||||||
GroupedRow(
|
GroupedRow(
|
||||||
title = task.title.ifBlank { stringResource(R.string.task_untitled) },
|
title = task.title.ifBlank { stringResource(R.string.task_untitled) },
|
||||||
position = positionOf(index, section.tasks.size),
|
position = positionOf(index, section.tasks.size),
|
||||||
summary = task.due?.formatDate(task.isAllDay),
|
summary = task.due?.formatDate(),
|
||||||
selected = task.taskId == selectedId,
|
selected = task.taskId == selectedId,
|
||||||
minHeight = 56.dp,
|
minHeight = 56.dp,
|
||||||
onClick = { choose(task.taskId) },
|
onClick = { choose(task.taskId) },
|
||||||
|
|||||||
@@ -98,9 +98,6 @@ import de.jeanlucmakiola.agendula.domain.TaskSection
|
|||||||
import de.jeanlucmakiola.agendula.domain.TaskSections
|
import de.jeanlucmakiola.agendula.domain.TaskSections
|
||||||
import de.jeanlucmakiola.agendula.ui.common.priorityAccent
|
import de.jeanlucmakiola.agendula.ui.common.priorityAccent
|
||||||
import de.jeanlucmakiola.floret.components.Position
|
import de.jeanlucmakiola.floret.components.Position
|
||||||
import de.jeanlucmakiola.floret.components.SnackChip
|
|
||||||
import de.jeanlucmakiola.floret.components.SnackChipHeight
|
|
||||||
import de.jeanlucmakiola.floret.components.SnackChipMargin
|
|
||||||
import de.jeanlucmakiola.floret.time.formatDateTimeCompact
|
import de.jeanlucmakiola.floret.time.formatDateTimeCompact
|
||||||
import de.jeanlucmakiola.floret.components.pastelize
|
import de.jeanlucmakiola.floret.components.pastelize
|
||||||
import de.jeanlucmakiola.floret.components.positionOf
|
import de.jeanlucmakiola.floret.components.positionOf
|
||||||
@@ -192,18 +189,13 @@ fun TaskListScreen(
|
|||||||
Box(
|
Box(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.align(Alignment.BottomStart)
|
.align(Alignment.BottomStart)
|
||||||
.padding(
|
.padding(start = 16.dp, bottom = inner.calculateBottomPadding() + 16.dp)
|
||||||
start = SnackChipMargin,
|
.height(56.dp),
|
||||||
bottom = inner.calculateBottomPadding() + SnackChipMargin,
|
|
||||||
)
|
|
||||||
.height(SnackChipHeight),
|
|
||||||
contentAlignment = Alignment.CenterStart,
|
contentAlignment = Alignment.CenterStart,
|
||||||
) {
|
) {
|
||||||
SnackChip(
|
UndoChip(
|
||||||
visible = undoTarget != null,
|
visible = undoTarget != null,
|
||||||
message = stringResource(R.string.task_deleted),
|
onUndo = {
|
||||||
actionLabel = stringResource(R.string.undo),
|
|
||||||
onAction = {
|
|
||||||
undoTarget?.let { viewModel.undoDelete(it.taskId) }
|
undoTarget?.let { viewModel.undoDelete(it.taskId) }
|
||||||
undoTarget = null
|
undoTarget = null
|
||||||
},
|
},
|
||||||
@@ -213,6 +205,47 @@ fun TaskListScreen(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A compact floating "snackchip" for an undoable delete — a rounded pill (not a
|
||||||
|
* full-width snackbar) sized to its content, sliding up from the bottom centre.
|
||||||
|
*/
|
||||||
|
@Composable
|
||||||
|
private fun UndoChip(visible: Boolean, onUndo: () -> Unit, modifier: Modifier = Modifier) {
|
||||||
|
AnimatedVisibility(
|
||||||
|
visible = visible,
|
||||||
|
enter = slideInVertically { it } + fadeIn(),
|
||||||
|
exit = slideOutVertically { it } + fadeOut(),
|
||||||
|
modifier = modifier,
|
||||||
|
) {
|
||||||
|
Surface(
|
||||||
|
color = MaterialTheme.colorScheme.surfaceContainerHighest,
|
||||||
|
contentColor = MaterialTheme.colorScheme.onSurface,
|
||||||
|
shape = RoundedCornerShape(50),
|
||||||
|
shadowElevation = 6.dp,
|
||||||
|
) {
|
||||||
|
Row(
|
||||||
|
verticalAlignment = Alignment.CenterVertically,
|
||||||
|
modifier = Modifier.padding(start = 20.dp, end = 8.dp, top = 6.dp, bottom = 6.dp),
|
||||||
|
horizontalArrangement = Arrangement.spacedBy(12.dp),
|
||||||
|
) {
|
||||||
|
Text(
|
||||||
|
text = stringResource(R.string.task_deleted),
|
||||||
|
style = MaterialTheme.typography.bodyMedium,
|
||||||
|
)
|
||||||
|
TextButton(
|
||||||
|
onClick = onUndo,
|
||||||
|
contentPadding = PaddingValues(horizontal = 16.dp, vertical = 6.dp),
|
||||||
|
) {
|
||||||
|
Text(
|
||||||
|
text = stringResource(R.string.undo),
|
||||||
|
style = MaterialTheme.typography.labelLarge,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@OptIn(ExperimentalMaterial3Api::class, ExperimentalFoundationApi::class)
|
@OptIn(ExperimentalMaterial3Api::class, ExperimentalFoundationApi::class)
|
||||||
@Composable
|
@Composable
|
||||||
private fun TaskListBody(
|
private fun TaskListBody(
|
||||||
|
|||||||
@@ -1,190 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<resources>
|
|
||||||
<string name="back">Zurück</string>
|
|
||||||
<string name="save">Speichern</string>
|
|
||||||
<string name="delete">Löschen</string>
|
|
||||||
<string name="edit">Bearbeiten</string>
|
|
||||||
<string name="field_description">Beschreibung</string>
|
|
||||||
<string name="task_deleted">Gelöscht</string>
|
|
||||||
<string name="app_name">Agendula</string>
|
|
||||||
<string name="task_untitled">Unbenannte Aufgabe</string>
|
|
||||||
<string name="tasks_title">Aufgaben</string>
|
|
||||||
<string name="task_list_empty">Keine Aufgaben bisher.</string>
|
|
||||||
<string name="task_list_failure">Aufgaben konnten nicht geladen werden.</string>
|
|
||||||
<string name="smart_no_date">Kein Datum</string>
|
|
||||||
<string name="smart_completed">Abgeschlossen</string>
|
|
||||||
<string name="task_detail_title">Aufgabe</string>
|
|
||||||
<string name="task_detail_not_found">Diese Aufgabe ist nicht mehr verfügbar.</string>
|
|
||||||
<string name="edit_task_title">Aufgabe bearbeiten</string>
|
|
||||||
<string name="new_task_title">Neue Aufgabe</string>
|
|
||||||
<string name="field_title">Titel</string>
|
|
||||||
<string name="edit_save_failed">Konnte nicht gespeichert werden. Versuche es erneut.</string>
|
|
||||||
<string name="add_task_hint">Aufgabe hinzufügen</string>
|
|
||||||
<string name="add_subtask_hint">Unteraufgabe hinzufügen</string>
|
|
||||||
<string name="cd_add_task">Aufgabe hinzufügen</string>
|
|
||||||
<string name="cd_complete">Abgeschlossen</string>
|
|
||||||
<string name="cd_reopen">Erneut öffnen</string>
|
|
||||||
<string name="undo">Rückgängig</string>
|
|
||||||
<string name="section_today">Heute</string>
|
|
||||||
<string name="cd_expand_subtasks">Unteraufgaben anzeigen</string>
|
|
||||||
<string name="cd_collapse_subtasks">Unteraufgaben ausblenden</string>
|
|
||||||
<string name="section_overdue">Überfällig</string>
|
|
||||||
<string name="section_upcoming">Anstehend</string>
|
|
||||||
<string name="section_no_date">Kein Datum</string>
|
|
||||||
<string name="section_completed">Abgeschlossen</string>
|
|
||||||
<string name="priority_none">Keine</string>
|
|
||||||
<string name="priority_low">Niedrig</string>
|
|
||||||
<string name="priority_medium">Mittel</string>
|
|
||||||
<string name="priority_high">Hoch</string>
|
|
||||||
<string name="detail_mark_complete">Als abgeschlossen markieren</string>
|
|
||||||
<string name="detail_mark_incomplete">Als nicht abgeschlossen markieren</string>
|
|
||||||
<string name="detail_list">Liste</string>
|
|
||||||
<string name="detail_due">Fällig</string>
|
|
||||||
<string name="detail_start">Beginn</string>
|
|
||||||
<string name="detail_priority">Priorität</string>
|
|
||||||
<string name="detail_progress">Fortschritt</string>
|
|
||||||
<string name="detail_subtasks">Unteraufgaben</string>
|
|
||||||
<string name="detail_parent">Hauptaufgabe</string>
|
|
||||||
<string name="detail_part_of">Teil von</string>
|
|
||||||
<string name="edit_list_label">Liste</string>
|
|
||||||
<string name="edit_start_label">Beginn</string>
|
|
||||||
<string name="edit_due_label">Fällig</string>
|
|
||||||
<string name="edit_all_day">Ganzer Tag</string>
|
|
||||||
<string name="edit_priority_label">Priorität</string>
|
|
||||||
<string name="edit_progress_label">Fortschritt</string>
|
|
||||||
<string name="edit_parent_label">Hauptaufgabe</string>
|
|
||||||
<string name="edit_parent_none">Keine (Hauptebene)</string>
|
|
||||||
<string name="edit_parent_search">Aufgaben suchen</string>
|
|
||||||
<string name="edit_parent_empty">Keine passenden Aufgaben in der Liste gefunden.</string>
|
|
||||||
<string name="edit_reminder_label">Erinnerungen</string>
|
|
||||||
<string name="edit_set">Übernehmen</string>
|
|
||||||
<string name="edit_clear">Leeren</string>
|
|
||||||
<string name="edit_title_hint">Aufgaben-Titel</string>
|
|
||||||
<string name="edit_when">Wann</string>
|
|
||||||
<string name="edit_more_fields">Weitere Felder</string>
|
|
||||||
<string name="close">Schließen</string>
|
|
||||||
<string name="dialog_cancel">Abbrechen</string>
|
|
||||||
<string name="edit_conflict_title">Termin wurde extern geändert</string>
|
|
||||||
<string name="edit_conflict_body">Die Aufgabe wurde seit der Öffnung wo anders geändert (über Sync oder einer anderen App). Möchtest die Änderungen überschreiben?</string>
|
|
||||||
<string name="edit_conflict_overwrite">Überschreiben</string>
|
|
||||||
<string name="reminder_none">Keine</string>
|
|
||||||
<string name="reminder_at_due">Zum Start der Aufgabe</string>
|
|
||||||
<string name="reminder_5_min">5 Minuten vorher</string>
|
|
||||||
<string name="reminder_10_min">10 Minuten vorher</string>
|
|
||||||
<string name="reminder_30_min">30 Minuten vorher</string>
|
|
||||||
<string name="reminder_1_hour">1 Stunde vorher</string>
|
|
||||||
<string name="reminder_1_day">1 Tag vorher</string>
|
|
||||||
<string name="reminder_custom">Benutzerdefiniert</string>
|
|
||||||
<string name="reminder_custom_with_value">Benutzerdefiniert (%1$s)</string>
|
|
||||||
<string name="reminder_custom_set">Übernehmen</string>
|
|
||||||
<string name="reminder_custom_amount">Anzahl eingeben</string>
|
|
||||||
<string name="reminder_use_default">Standard verwenden</string>
|
|
||||||
<string name="reminder_unit_minutes">Minuten</string>
|
|
||||||
<string name="reminder_unit_hours">Stunden</string>
|
|
||||||
<string name="reminder_unit_days">Tage</string>
|
|
||||||
<string name="reminder_unit_weeks">Woche</string>
|
|
||||||
<string name="settings_list_reminders_title">Erinnerungen (Pro Liste)</string>
|
|
||||||
<string name="settings_list_reminders_hint">Überschreibe die Standard-Erinnerungen für individuelle Listen</string>
|
|
||||||
<string name="settings_list_reminder_inherits">Standard (%1$s)</string>
|
|
||||||
<string name="error_blank_title">Gebe einen Titel ein.</string>
|
|
||||||
<string name="error_no_list">Wähle eine Liste.</string>
|
|
||||||
<string name="error_due_before_start">Fälligkeit darf nicht vor dem Start liegen.</string>
|
|
||||||
<string name="error_reminder_without_due">Setze ein Fälligkeits-Datum für Erinnerungen.</string>
|
|
||||||
<string name="lists_header">Listen</string>
|
|
||||||
<string name="new_task">Neue Aufgabe</string>
|
|
||||||
<string name="lists_failure">Deine Aufgaben konnten nicht gelesen werden.</string>
|
|
||||||
<string name="lists_empty">Keine Aufgaben-Listen bisher. Füge eine in deiner Aufgaben-App hinzu oder mit der + Schaltfläche.</string>
|
|
||||||
<string name="smart_today">Heute</string>
|
|
||||||
<string name="smart_overdue">Überfällig</string>
|
|
||||||
<string name="smart_upcoming">Anstehend</string>
|
|
||||||
<string name="smart_all">Alle</string>
|
|
||||||
<string name="open_count">%1$d offen</string>
|
|
||||||
<string name="home_today_progress">%1$d von %2$d erledigt</string>
|
|
||||||
<string name="home_today_remaining">%1$d übrig</string>
|
|
||||||
<string name="home_today_all_done">Alles erledigt 🎉</string>
|
|
||||||
<string name="home_today_empty">Heute keine Fälligkeiten 🎉</string>
|
|
||||||
<string name="home_upcoming_view_all">Alle anzeigen</string>
|
|
||||||
<string name="home_due_today">Heute</string>
|
|
||||||
<string name="home_due_tomorrow">Morgen</string>
|
|
||||||
<string name="home_search_hint">Aufgaben suchen</string>
|
|
||||||
<string name="home_search_clear">Suche zurücksetzen</string>
|
|
||||||
<string name="home_search_close">Suche schließen</string>
|
|
||||||
<string name="home_search_empty">Keine Aufgaben passen zu „%1$s“</string>
|
|
||||||
<string name="reminder_due_at">Fälligkeiten %1$s</string>
|
|
||||||
<string name="reminder_channel_name">Aufgaben Erinnerungen</string>
|
|
||||||
<string name="reminder_channel_desc">Benachrichtigungen für fällige Aufgaben.</string>
|
|
||||||
<string name="onboarding_no_provider_title">Eine Task-App wird benötigt</string>
|
|
||||||
<string name="onboarding_no_provider_body">Agendula zeigt und bearbeitet die Aufgaben, die in OpenTasks oder tasks.org gespeichert sind und per DAVx5 synchronisiert werden. Installiere eine davon, um zu starten.</string>
|
|
||||||
<string name="onboarding_permission_title">Erlaube Zugriff auf deine Aufgaben</string>
|
|
||||||
<string name="onboarding_permission_body">Agendula benötigt die Berechtigung, deine Aufgaben zu lesen und zu schreiben. Das ist die einzige Berechtigung, die es jemals anfragt.</string>
|
|
||||||
<string name="onboarding_permission_button">Zugriff gewähren</string>
|
|
||||||
<string name="onboarding_install_opentasks">Installiere OpenTasks</string>
|
|
||||||
<string name="onboarding_install_tasksorg">Installiere tasks.org</string>
|
|
||||||
<string name="reminder_onboarding_title">Verpasse nichts, was fällig ist</string>
|
|
||||||
<string name="reminder_onboarding_body">Aufgaben-Apps senden selbst keine Erinnerungen, daher liefert Agendula sie für dich. Schalte sie ein, um eine Benachrichtigung zu erhalten, wenn eine Aufgabe fällig ist.</string>
|
|
||||||
<string name="reminder_onboarding_enable_button">Erinnerungen aktivieren</string>
|
|
||||||
<string name="reminder_onboarding_skip_button">Nicht jetzt</string>
|
|
||||||
<string name="reminder_benefit_delivery_title">Agendula erinnert dich</string>
|
|
||||||
<string name="reminder_benefit_delivery_body">Es plant eine Benachrichtigung für jede Aufgabe mit einem Fälligkeitsdatum.</string>
|
|
||||||
<string name="reminder_benefit_timing_title">Auf deinem Zeitplan</string>
|
|
||||||
<string name="reminder_benefit_timing_body">Wähle in den Einstellungen, wie weit im Voraus du erinnert werden möchtest.</string>
|
|
||||||
<string name="reminder_benefit_reversible_title">Jederzeit änderbar</string>
|
|
||||||
<string name="reminder_benefit_reversible_body">Schalte Erinnerungen aus, wann immer du willst — es ist nur ein Schalter.</string>
|
|
||||||
<string name="settings_title">Einstellungen</string>
|
|
||||||
<string name="settings_section_appearance">Darstellung</string>
|
|
||||||
<string name="settings_appearance_subtitle">Theme und Farbe</string>
|
|
||||||
<string name="settings_section_task_form">Aufgaben-Formular</string>
|
|
||||||
<string name="settings_task_form_subtitle">Standard Felder, Liste und Unter-Aufgaben</string>
|
|
||||||
<string name="settings_reminders_subtitle">Benachrichtigungen für fällige Aufgaben</string>
|
|
||||||
<string name="settings_form_fields_hint">Standardmäßig angezeigte Felder — alles Weitere liegt hinter „Weitere Felder“.</string>
|
|
||||||
<string name="settings_dynamic_color_unavailable">Verfügbar für Android 12 und höher</string>
|
|
||||||
<string name="settings_about_author">von Jean-Luc Makiola</string>
|
|
||||||
<string name="settings_about_source">Quellcode</string>
|
|
||||||
<string name="settings_license">Lizenz</string>
|
|
||||||
<string name="settings_about_support">Entwicklung unterstützen</string>
|
|
||||||
<string name="settings_about_version">Version %1$s</string>
|
|
||||||
<string name="settings_about_logo_desc">Calendula-App-Symbol</string>
|
|
||||||
<string name="settings_language">App-Sprache</string>
|
|
||||||
<string name="settings_language_auto">Systemstandard</string>
|
|
||||||
<string name="settings_report_problem">Problem melden</string>
|
|
||||||
<string name="settings_report_problem_hint">Öffne den Issue-Tracker</string>
|
|
||||||
<string name="crash_report_issue_title">Absturzbericht</string>
|
|
||||||
<string name="settings_theme">Design</string>
|
|
||||||
<string name="settings_theme_system">System folgen</string>
|
|
||||||
<string name="settings_theme_light">Hell</string>
|
|
||||||
<string name="settings_theme_dark">Dunkel</string>
|
|
||||||
<string name="settings_dynamic_color">Dynamische Farben</string>
|
|
||||||
<string name="settings_dynamic_color_hint">Verwende Farben aus dem Hintergrundbild</string>
|
|
||||||
<string name="settings_section_reminders">Erinnerungen</string>
|
|
||||||
<string name="settings_reminders">Fälligkeits-Erinnerungen</string>
|
|
||||||
<string name="settings_reminders_hint">Benachrichtige mich wenn eine Aufgabe fällig ist</string>
|
|
||||||
<string name="settings_default_reminder">Wann erinnern</string>
|
|
||||||
<string name="settings_exact_alarms">Exakter Zeitpunkt</string>
|
|
||||||
<string name="settings_exact_alarms_allowed">Die Erinnerungen erfolgen zum exakten Zeitpunkt</string>
|
|
||||||
<string name="settings_exact_alarms_blocked">Blockiert – tippe, um exakte Erinnerungen zu erlauben</string>
|
|
||||||
<string name="settings_section_tasks">Aufgaben</string>
|
|
||||||
<string name="settings_default_list">Standard-Liste</string>
|
|
||||||
<string name="settings_default_list_first">Erste verfügbare Felder</string>
|
|
||||||
<string name="settings_add_subtask_row">Zeile \"Unteraufgaben hinzufügen\" anzeigen</string>
|
|
||||||
<string name="settings_add_subtask_row_hint">Ein Eingabefeld am Ende der Unteraufgaben einer aufgeklappten Aufgabe</string>
|
|
||||||
<string name="settings_bottom_add_bar">Untere Schnellhinzufüge-Leiste</string>
|
|
||||||
<string name="settings_bottom_add_bar_hint">Füge Aufgaben hinzu, über eine Leiste, die unten an einer Liste angepinnt ist, statt über die schwebende Schaltfläche</string>
|
|
||||||
<plurals name="reminder_minutes">
|
|
||||||
<item quantity="one">%1$d Minute vorher</item>
|
|
||||||
<item quantity="other">%1$d Minuten vorher</item>
|
|
||||||
</plurals>
|
|
||||||
<plurals name="reminder_hours">
|
|
||||||
<item quantity="one">%1$d Stunde vorher</item>
|
|
||||||
<item quantity="other">%1$d Stunden vorher</item>
|
|
||||||
</plurals>
|
|
||||||
<plurals name="reminder_days">
|
|
||||||
<item quantity="one">%1$d Tag vorher</item>
|
|
||||||
<item quantity="other">%1$d Tage vorher</item>
|
|
||||||
</plurals>
|
|
||||||
<plurals name="reminder_weeks">
|
|
||||||
<item quantity="one">%1$d Woche vorher</item>
|
|
||||||
<item quantity="other">%1$d Wochen vorher</item>
|
|
||||||
</plurals>
|
|
||||||
<string name="settings_translate">Hilf beim Übersetzen</string>
|
|
||||||
<string name="settings_translate_hint">Füge eine Sprache auf Weblate hinzu oder verbessere sie</string>
|
|
||||||
</resources>
|
|
||||||
@@ -1,196 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<resources>
|
|
||||||
<string name="app_name">Agendula</string>
|
|
||||||
<string name="app_tagline">Um app de tarefas em Material 3 Expressive. \nFlorescendo.</string>
|
|
||||||
<string name="task_untitled">Tarefa sem título</string>
|
|
||||||
<string name="back">Voltar</string>
|
|
||||||
<string name="save">Salvar</string>
|
|
||||||
<string name="delete">Deletar</string>
|
|
||||||
<string name="tasks_title">Tarefas</string>
|
|
||||||
<string name="task_list_empty">Nenhuma tarefa aqui ainda.</string>
|
|
||||||
<string name="task_list_failure">Não foi possível carregar estas tarefas.</string>
|
|
||||||
<string name="smart_no_date">Sem data</string>
|
|
||||||
<string name="smart_completed">Completo</string>
|
|
||||||
<string name="task_detail_title">Tarefa</string>
|
|
||||||
<string name="task_detail_not_found">Esta tarefa não existe mais.</string>
|
|
||||||
<string name="edit">Editar</string>
|
|
||||||
<string name="edit_task_title">Editar tarefa</string>
|
|
||||||
<string name="new_task_title">Nova tarefa</string>
|
|
||||||
<string name="field_title">Título</string>
|
|
||||||
<string name="field_description">Descrição</string>
|
|
||||||
<string name="edit_save_failed">Não foi possível salvar. Tente novamente.</string>
|
|
||||||
<string name="add_task_hint">Adicionar tarefa</string>
|
|
||||||
<string name="add_subtask_hint">Adicionar subtarefa</string>
|
|
||||||
<string name="cd_add_task">Adicionar tarefa</string>
|
|
||||||
<string name="cd_complete">Concluído</string>
|
|
||||||
<string name="cd_reopen">Reabrir</string>
|
|
||||||
<string name="task_deleted">Deletado</string>
|
|
||||||
<string name="undo">Desfazer</string>
|
|
||||||
<string name="cd_expand_subtasks">Mostrar subtarefas</string>
|
|
||||||
<string name="cd_collapse_subtasks">Esconder subtarefas</string>
|
|
||||||
<string name="section_overdue">Prazo expirado</string>
|
|
||||||
<string name="section_today">Hoje</string>
|
|
||||||
<string name="section_upcoming">A seguir</string>
|
|
||||||
<string name="section_no_date">Sem data</string>
|
|
||||||
<string name="section_completed">Concluído</string>
|
|
||||||
<string name="priority_none">Nenhuma</string>
|
|
||||||
<string name="priority_low">Baixa</string>
|
|
||||||
<string name="priority_medium">Média</string>
|
|
||||||
<string name="priority_high">Alta</string>
|
|
||||||
<string name="detail_mark_complete">Marcar como concluído</string>
|
|
||||||
<string name="detail_mark_incomplete">Marcar como não concluído</string>
|
|
||||||
<string name="detail_list">Lista</string>
|
|
||||||
<string name="detail_due">Prazo</string>
|
|
||||||
<string name="detail_start">Inicia</string>
|
|
||||||
<string name="detail_priority">Prioridade</string>
|
|
||||||
<string name="detail_progress">Progresso</string>
|
|
||||||
<string name="detail_subtasks">Subtarefas</string>
|
|
||||||
<string name="detail_parent">Tarefa pai</string>
|
|
||||||
<string name="detail_part_of">Parte de</string>
|
|
||||||
<string name="percent_complete">%1$d%%</string>
|
|
||||||
<string name="edit_list_label">Lista</string>
|
|
||||||
<string name="edit_start_label">Inicia</string>
|
|
||||||
<string name="edit_due_label">Prazo</string>
|
|
||||||
<string name="edit_all_day">O dia todo</string>
|
|
||||||
<string name="edit_priority_label">Prioridade</string>
|
|
||||||
<string name="edit_progress_label">Progresso</string>
|
|
||||||
<string name="edit_parent_label">Tarefa pai</string>
|
|
||||||
<string name="edit_parent_none">Nenhum (primeiro nível)</string>
|
|
||||||
<string name="edit_parent_search">Buscar tarefas</string>
|
|
||||||
<string name="edit_parent_empty">Nenhuma tarefa correspondente nesta lista.</string>
|
|
||||||
<string name="edit_reminder_label">Lembrete</string>
|
|
||||||
<string name="edit_set">Ajustar</string>
|
|
||||||
<string name="edit_clear">Limpar</string>
|
|
||||||
<string name="edit_title_hint">Título da tarefa</string>
|
|
||||||
<string name="edit_when">Quando</string>
|
|
||||||
<string name="edit_more_fields">Mais campos</string>
|
|
||||||
<string name="close">Fechar</string>
|
|
||||||
<string name="dialog_cancel">Cancelar</string>
|
|
||||||
<string name="edit_conflict_title">A tarefa foi alterada em outro lugar</string>
|
|
||||||
<string name="edit_conflict_body">Esta tarefa foi atualizada em outro local (uma sincronização ou outro app) desde que você a abriu. Sobrescrever estas mudanças com suas edições?</string>
|
|
||||||
<string name="edit_conflict_overwrite">Sobrescrever</string>
|
|
||||||
<string name="reminder_none">Nenhum</string>
|
|
||||||
<string name="reminder_at_due">Na hora da tarefa</string>
|
|
||||||
<string name="reminder_5_min">5 minutos antes</string>
|
|
||||||
<string name="reminder_10_min">10 minutos antes</string>
|
|
||||||
<string name="reminder_30_min">30 minutos antes</string>
|
|
||||||
<string name="reminder_1_hour">1 hora antes</string>
|
|
||||||
<string name="reminder_1_day">1 dia antes</string>
|
|
||||||
<string name="reminder_custom">Personalizado</string>
|
|
||||||
<string name="reminder_custom_with_value">Personalizado (%1$s)</string>
|
|
||||||
<string name="reminder_custom_set">Ajustar</string>
|
|
||||||
<string name="reminder_custom_amount">Insira uma quantidade</string>
|
|
||||||
<string name="reminder_use_default">Usar padrão</string>
|
|
||||||
<string name="reminder_unit_minutes">Minutos</string>
|
|
||||||
<string name="reminder_unit_hours">Horas</string>
|
|
||||||
<string name="reminder_unit_days">Dias</string>
|
|
||||||
<string name="reminder_unit_weeks">Semanas</string>
|
|
||||||
<string name="settings_list_reminders_title">Lembretes por lista</string>
|
|
||||||
<string name="settings_list_reminders_hint">Alterar o lembrete padrão para listas individuais</string>
|
|
||||||
<string name="settings_list_reminder_inherits">Padrão (%1$s)</string>
|
|
||||||
<string name="error_blank_title">Insira um título.</string>
|
|
||||||
<string name="error_no_list">Escolha uma lista.</string>
|
|
||||||
<string name="error_due_before_start">Prazo não pode ser antes do início.</string>
|
|
||||||
<string name="error_reminder_without_due">Ajuste um prazo para usar um lembrete.</string>
|
|
||||||
<string name="lists_header">Listas</string>
|
|
||||||
<string name="new_task">Nova tarefa</string>
|
|
||||||
<string name="lists_failure">Não foi possível ler suas tarefas.</string>
|
|
||||||
<string name="lists_empty">Nenhuma lista de tarefas ainda. Adicione uma no seu app de tarefas ou com o botão +.</string>
|
|
||||||
<string name="smart_today">Hoje</string>
|
|
||||||
<string name="smart_overdue">Prazo expirado</string>
|
|
||||||
<string name="smart_upcoming">A seguir</string>
|
|
||||||
<string name="smart_all">Tudo</string>
|
|
||||||
<string name="open_count">%1$d abertos</string>
|
|
||||||
<string name="home_today_progress">%1$d de %2$d concluídos</string>
|
|
||||||
<string name="home_today_remaining">%1$d restantes</string>
|
|
||||||
<string name="home_today_all_done">Tudo pronto 🎉</string>
|
|
||||||
<string name="home_today_empty">Nada terminando hoje 🎉</string>
|
|
||||||
<string name="home_upcoming_view_all">Ver tudo</string>
|
|
||||||
<string name="home_due_today">Hoje</string>
|
|
||||||
<string name="home_due_tomorrow">Amanhã</string>
|
|
||||||
<string name="home_search_hint">Buscar tarefas</string>
|
|
||||||
<string name="home_search_clear">Limpar buscas</string>
|
|
||||||
<string name="home_search_close">Fechar busca</string>
|
|
||||||
<string name="home_search_empty">Nenhuma tarefa corresponde a \"%1$s\"</string>
|
|
||||||
<string name="reminder_due_at">Termina em %1$s</string>
|
|
||||||
<string name="reminder_channel_name">Lembretes de tarefas</string>
|
|
||||||
<string name="reminder_channel_desc">Notificações para tarefas com prazo.</string>
|
|
||||||
<string name="onboarding_no_provider_title">Um app de tarefas é necessário</string>
|
|
||||||
<string name="onboarding_no_provider_body">O Agendula mostra e edita as tarefas armazenadas no OpenTasks ou tasks.org, sincronizadas pelo DAVx5. Instale um para começar.</string>
|
|
||||||
<string name="onboarding_permission_title">Permitir acesso às suas tarefas</string>
|
|
||||||
<string name="onboarding_permission_body">O Agendula precisa de permissão para ler e salvar suas tarefas. É tudo o que ele pede.</string>
|
|
||||||
<string name="onboarding_permission_button">Conceder acesso às tarefas</string>
|
|
||||||
<string name="onboarding_install_opentasks">Instalar OpenTasks</string>
|
|
||||||
<string name="onboarding_install_tasksorg">Instalar tasks.org</string>
|
|
||||||
<string name="reminder_onboarding_title">Nunca perca seus prazos</string>
|
|
||||||
<string name="reminder_onboarding_body">Apps de tarefas não enviam lembretes sozinhos, então o Agendula os entrega para você. Ative para receber uma notificação de quando uma tarefa estiver no prazo.</string>
|
|
||||||
<string name="reminder_onboarding_enable_button">Ativar lembretes</string>
|
|
||||||
<string name="reminder_onboarding_skip_button">Agora não</string>
|
|
||||||
<string name="reminder_benefit_delivery_title">O Agendula lembra você</string>
|
|
||||||
<string name="reminder_benefit_delivery_body">Ele agenda uma notificação para cada tarefa com prazo.</string>
|
|
||||||
<string name="reminder_benefit_timing_title">Na sua rotina</string>
|
|
||||||
<string name="reminder_benefit_timing_body">Escolha o quão à frente quer ser lembrado em Ajustes.</string>
|
|
||||||
<string name="reminder_benefit_reversible_title">Altere a qualquer momento</string>
|
|
||||||
<string name="reminder_benefit_reversible_body">Desative os lembretes quando quiser — é só um botão.</string>
|
|
||||||
<string name="settings_title">Ajustes</string>
|
|
||||||
<string name="settings_section_appearance">Aparência</string>
|
|
||||||
<string name="settings_appearance_subtitle">Tema e cor</string>
|
|
||||||
<string name="settings_section_task_form">Formulário de tarefa</string>
|
|
||||||
<string name="settings_task_form_subtitle">Campos, listas e subtarefas padrão</string>
|
|
||||||
<string name="settings_reminders_subtitle">Notificações para tarefas com prazo acabando</string>
|
|
||||||
<string name="settings_form_fields_hint">Campos mostrados por padrão em uma nova tarefa. O resto está atrás de \"Mais campos\".</string>
|
|
||||||
<string name="settings_dynamic_color_unavailable">Disponível no Android 12 e mais recente</string>
|
|
||||||
<string name="settings_about_author">por Jean-Luc Makiola</string>
|
|
||||||
<string name="settings_about_source">Código-fonte</string>
|
|
||||||
<string name="settings_license">Licença</string>
|
|
||||||
<string name="settings_about_support">Apoie o desenvolvimento</string>
|
|
||||||
<string name="settings_about_version">Versão %1$s</string>
|
|
||||||
<string name="settings_about_logo_desc">Ícone de app do Agendula</string>
|
|
||||||
<string name="settings_language">Idioma do app</string>
|
|
||||||
<string name="settings_language_auto">Padrão do sistema</string>
|
|
||||||
<string name="settings_translate">Ajude a traduzir</string>
|
|
||||||
<string name="settings_translate_hint">Adicione ou melhore um idioma no Weblate</string>
|
|
||||||
<string name="settings_report_problem">Relate um problema</string>
|
|
||||||
<string name="settings_report_problem_hint">Abrir o rastreador de problemas</string>
|
|
||||||
<string name="crash_report_issue_title">Relatório de quebra</string>
|
|
||||||
<string name="settings_theme">Tema</string>
|
|
||||||
<string name="settings_theme_system">Seguir o sistema</string>
|
|
||||||
<string name="settings_theme_light">Claro</string>
|
|
||||||
<string name="settings_theme_dark">Escuro</string>
|
|
||||||
<string name="settings_dynamic_color">Cor dinâmica</string>
|
|
||||||
<string name="settings_dynamic_color_hint">Usar cores do papel de parede</string>
|
|
||||||
<string name="settings_section_reminders">Lembretes</string>
|
|
||||||
<string name="settings_reminders">Lembretes no prazo</string>
|
|
||||||
<string name="settings_reminders_hint">Me notifique quando uma tarefa estiver no prazo</string>
|
|
||||||
<string name="settings_default_reminder">Quando lembrar</string>
|
|
||||||
<string name="settings_exact_alarms">Na hora</string>
|
|
||||||
<string name="settings_exact_alarms_allowed">Lembretes disparam na mesma hora</string>
|
|
||||||
<string name="settings_exact_alarms_blocked">Bloqueado — toque para permitir lembretes na hora</string>
|
|
||||||
<string name="settings_section_tasks">Tarefas</string>
|
|
||||||
<string name="settings_default_list">Lista padrão</string>
|
|
||||||
<string name="settings_default_list_first">Primeira lista disponível</string>
|
|
||||||
<string name="settings_add_subtask_row">Mostrar uma linha \"adicionar subtarefa\"</string>
|
|
||||||
<string name="settings_add_subtask_row_hint">Um campo Adicionar no fim das subtarefas de uma tarefa expandida</string>
|
|
||||||
<string name="settings_bottom_add_bar">Barra adicionar-rápido abaixo</string>
|
|
||||||
<string name="settings_bottom_add_bar_hint">Adicione tarefas de uma barra presa abaixo de uma lista, em vez do botão flutuante</string>
|
|
||||||
<plurals name="reminder_minutes">
|
|
||||||
<item quantity="one">%1$d minuto antes</item>
|
|
||||||
<item quantity="many">%1$d minutos antes</item>
|
|
||||||
<item quantity="other">%1$d minutos antes</item>
|
|
||||||
</plurals>
|
|
||||||
<plurals name="reminder_hours">
|
|
||||||
<item quantity="one">%1$d hora antes</item>
|
|
||||||
<item quantity="many">%1$d horas antes</item>
|
|
||||||
<item quantity="other">%1$d horas antes</item>
|
|
||||||
</plurals>
|
|
||||||
<plurals name="reminder_days">
|
|
||||||
<item quantity="one">%1$d dia antes</item>
|
|
||||||
<item quantity="many">%1$d dias antes</item>
|
|
||||||
<item quantity="other">%1$d dias antes</item>
|
|
||||||
</plurals>
|
|
||||||
<plurals name="reminder_weeks">
|
|
||||||
<item quantity="one">%1$d semana antes</item>
|
|
||||||
<item quantity="many">%1$d semanas antes</item>
|
|
||||||
<item quantity="other">%1$d semanas antes</item>
|
|
||||||
</plurals>
|
|
||||||
</resources>
|
|
||||||
@@ -8,6 +8,4 @@
|
|||||||
-->
|
-->
|
||||||
<locale-config xmlns:android="http://schemas.android.com/apk/res/android">
|
<locale-config xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<locale android:name="en" />
|
<locale android:name="en" />
|
||||||
<locale android:name="de" />
|
|
||||||
<locale android:name="pt-BR" />
|
|
||||||
</locale-config>
|
</locale-config>
|
||||||
|
|||||||
@@ -1,17 +0,0 @@
|
|||||||
### Added
|
|
||||||
- Agendula now speaks **German** and **Brazilian Portuguese**, the first
|
|
||||||
community translations. Pick one under **Settings → App language**, or in
|
|
||||||
Android's own per-app language settings; leave it on *System default* and
|
|
||||||
Agendula follows your phone. Anything not yet translated falls back to
|
|
||||||
English.
|
|
||||||
- Agendula can now be translated. Pick or request a language on Weblate and
|
|
||||||
translate in the browser — the link sits at the top of the language picker in
|
|
||||||
**Settings → App language**. Partial translations are fine; anything
|
|
||||||
untranslated falls back to English.
|
|
||||||
|
|
||||||
### Changed
|
|
||||||
- Agendula's home is now **Codeberg** (`jlmakiola/agendula`) — that's where the
|
|
||||||
source, issues, pull requests and releases live. The Source and License links
|
|
||||||
in Settings, the issue-reporting link and the F-Droid metadata all point there
|
|
||||||
now. The self-hosted Gitea instance stays as build infrastructure.
|
|
||||||
|
|
||||||
Submodule floret-kit updated: e047a2bd48...5a576c4d28
Reference in New Issue
Block a user