iobroker.kanban 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +224 -0
  3. package/admin/i18n/de.json +100 -0
  4. package/admin/i18n/en.json +100 -0
  5. package/admin/i18n/es.json +100 -0
  6. package/admin/i18n/fr.json +100 -0
  7. package/admin/i18n/it.json +100 -0
  8. package/admin/i18n/nl.json +100 -0
  9. package/admin/i18n/pl.json +100 -0
  10. package/admin/i18n/pt.json +100 -0
  11. package/admin/i18n/ru.json +100 -0
  12. package/admin/i18n/uk.json +100 -0
  13. package/admin/i18n/zh-cn.json +100 -0
  14. package/admin/jsonConfig.json +668 -0
  15. package/admin/kanban.png +0 -0
  16. package/io-package.json +299 -0
  17. package/lib/cron.js +203 -0
  18. package/lib/dueat.js +77 -0
  19. package/lib/events.js +24 -0
  20. package/lib/holidays.js +167 -0
  21. package/lib/i18n-server.js +301 -0
  22. package/lib/notify.js +627 -0
  23. package/lib/scheduler.js +198 -0
  24. package/lib/server.js +799 -0
  25. package/lib/store.js +1500 -0
  26. package/main.js +382 -0
  27. package/package.json +58 -0
  28. package/www/css/app.css +1022 -0
  29. package/www/i18n/de.json +238 -0
  30. package/www/i18n/en.json +238 -0
  31. package/www/i18n/es.json +238 -0
  32. package/www/i18n/fr.json +238 -0
  33. package/www/i18n/it.json +238 -0
  34. package/www/i18n/nl.json +238 -0
  35. package/www/i18n/pl.json +238 -0
  36. package/www/i18n/pt.json +238 -0
  37. package/www/i18n/ru.json +238 -0
  38. package/www/i18n/uk.json +238 -0
  39. package/www/i18n/zh-cn.json +238 -0
  40. package/www/index.html +171 -0
  41. package/www/js/api.js +98 -0
  42. package/www/js/app.js +411 -0
  43. package/www/js/board.js +983 -0
  44. package/www/js/colorpicker.js +165 -0
  45. package/www/js/dialogs.js +1419 -0
  46. package/www/js/i18n.js +43 -0
  47. package/www/vendor/marked.min.js +69 -0
  48. package/www/vendor/purify.min.js +3 -0
  49. package/www/vendor/sortable.min.js +2 -0
@@ -0,0 +1,238 @@
1
+ {
2
+ "topbar.selectBoard": "Board wählen",
3
+ "topbar.activeUser": "Aktiver Benutzer",
4
+ "topbar.filterMine": "Nur meine Karten anzeigen",
5
+ "topbar.addCard": "+ Karte",
6
+ "topbar.theme": "Theme wechseln",
7
+ "topbar.share": "Ansichten",
8
+ "topbar.settings": "Einstellungen",
9
+ "board.loading": "Lade…",
10
+ "board.empty": "Kein Board vorhanden — über ⚙ ein Board anlegen.",
11
+ "board.addCard": "+ Karte hinzufügen",
12
+ "col.hideDone": "Erledigte ausblenden",
13
+ "col.showDone": "Erledigte einblenden",
14
+ "badge.recurring": "Wiederkehrende Aufgabe",
15
+ "badge.description": "Hat eine Beschreibung",
16
+ "card.titleNew": "Neue Karte",
17
+ "card.titleEdit": "Karte bearbeiten",
18
+ "card.title": "Titel",
19
+ "card.titleRequired": "Bitte einen Titel eingeben",
20
+ "card.description": "Beschreibung",
21
+ "card.markdown": "(Markdown)",
22
+ "card.dueDate": "Fällig am",
23
+ "card.timeToggleTitle": "Zusätzlich eine Uhrzeit setzen",
24
+ "card.time": "Uhrzeit",
25
+ "card.priority": "Priorität",
26
+ "card.column": "Spalte",
27
+ "card.assignees": "Zuständig",
28
+ "card.requiredLegend": "Pflichtfeld",
29
+ "card.assigneeRequired": "Bitte mindestens einen Zuständigen wählen",
30
+ "card.labels": "Labels",
31
+ "card.color": "Kartenfarbe",
32
+ "card.link": "Link",
33
+ "card.location": "Ort",
34
+ "card.locationPlaceholder": "z.B. Rathaus, Musterstr. 1",
35
+ "card.calendarInviteTitle": "Nur wirksam mit Fälligkeitsdatum",
36
+ "card.calendarDuration": "Dauer",
37
+ "card.calendarDurationTitle": "Länge des Termins in der Kalender-Einladung (hh:mm)",
38
+ "card.calendarInvite": "Kalender-Einladung (.ics) an Benachrichtigung anhängen",
39
+ "card.recurrence": "Wiederholung",
40
+ "card.checklist": "Checkliste",
41
+ "card.addCheckItem": "+ Punkt hinzufügen",
42
+ "card.delete": "Löschen",
43
+ "card.manage": "Verwalten",
44
+ "card.manageTitle": "Karte übertragen oder klonen",
45
+ "card.cancel": "Abbrechen",
46
+ "card.save": "Speichern",
47
+ "card.checkPlaceholder": "Punkt…",
48
+ "card.checkDrag": "Punkt verschieben",
49
+ "prio.normal": "Normal",
50
+ "prio.high": "Hoch",
51
+ "prio.urgent": "Dringend",
52
+ "rec.none": "Keine",
53
+ "rec.daily": "Täglich",
54
+ "rec.weekly": "Wöchentlich",
55
+ "rec.monthly": "Monatlich (Tag im Monat)",
56
+ "rec.monthlyWeekday": "Monatlich (Wochentag)",
57
+ "rec.workday": "Arbeitstag im Monat",
58
+ "rec.yearly": "Jährlich",
59
+ "rec.everyNDays": "Alle X Tage",
60
+ "rec.interval": "Intervall (Tage)",
61
+ "rec.dayOfMonth": "Tag im Monat",
62
+ "rec.month": "Monat",
63
+ "rec.which": "Welcher",
64
+ "rec.position": "Position",
65
+ "rec.n": "n",
66
+ "rec.ordinalLast": "letzter",
67
+ "rec.hint.daily": "Erscheint nach dem Erledigen wieder am nächsten Tag.",
68
+ "rec.hint.weekly": "Erledigt → neue Karte am nächsten gewählten Wochentag.",
69
+ "rec.hint.monthly": "Erledigt → neue Karte am gewählten Tag im Folgemonat.",
70
+ "rec.hint.monthly_weekday": "Erledigt → neue Karte am gewählten Wochentag (z.B. 2. Dienstag) im Folgemonat.",
71
+ "rec.hint.workday": "Erledigt → neue Karte am gewählten Arbeitstag im Folgemonat (Wochenenden und Feiertage werden übersprungen).",
72
+ "rec.hint.yearly": "Erledigt → neue Karte am gewählten Tag/Monat im nächsten Jahr.",
73
+ "rec.hint.every_n_days": "Erledigt → neue Karte nach der eingestellten Anzahl Tage.",
74
+ "wd.first": "erster",
75
+ "wd.last": "letzter",
76
+ "wd.nth": "n-ter (von vorn)",
77
+ "wd.nthLast": "n-ter (von hinten)",
78
+ "month.1": "Januar",
79
+ "month.2": "Februar",
80
+ "month.3": "März",
81
+ "month.4": "April",
82
+ "month.5": "Mai",
83
+ "month.6": "Juni",
84
+ "month.7": "Juli",
85
+ "month.8": "August",
86
+ "month.9": "September",
87
+ "month.10": "Oktober",
88
+ "month.11": "November",
89
+ "month.12": "Dezember",
90
+ "weekday.1": "Mo",
91
+ "weekday.2": "Di",
92
+ "weekday.3": "Mi",
93
+ "weekday.4": "Do",
94
+ "weekday.5": "Fr",
95
+ "weekday.6": "Sa",
96
+ "weekday.7": "So",
97
+ "label.new": "+ Neu",
98
+ "label.namePlaceholder": "Label-Name",
99
+ "color.own": "Eigene Farbe",
100
+ "color.none": "keine Farbe",
101
+ "boards.boardTitle": "Board-Titel",
102
+ "boards.columns": "Spalten (ziehen zum Sortieren)",
103
+ "boards.columnName": "Spaltenname",
104
+ "boards.wipTitle": "WIP-Limit",
105
+ "boards.done": "Erledigt",
106
+ "boards.allowAdd": "Neu",
107
+ "boards.deleteColumnTitle": "Spalte löschen (Karten wandern in die erste Spalte)",
108
+ "boards.addColumn": "+ Spalte hinzufügen",
109
+ "boards.labels": "Labels",
110
+ "boards.deleteLabelTitle": "Label löschen",
111
+ "boards.addLabel": "+ Label hinzufügen",
112
+ "boards.linkTarget": "Link in Benachrichtigungen",
113
+ "boards.linkBoard": "Board-Ansicht (Karte hervorheben)",
114
+ "boards.linkEdit": "Karten-Editor öffnen",
115
+ "boards.linkUrl": "Eigene URL",
116
+ "boards.linkUrlField": "Eigene URL (feste Adresse)",
117
+ "boards.members": "Mitglieder (zuweisbare Benutzer)",
118
+ "boards.membersHint": "Pro Board muss mindestens ein Benutzer ausgewählt sein.",
119
+ "boards.membersRequiredShort": "Jedes Board braucht mindestens einen Benutzer.",
120
+ "boards.memberRemoveTitle": "Mitglied entfernen",
121
+ "boards.memberRemoveMsg": "{count} Karte(n) haben nur {names} als zuständige Person. Diese Karten behalten die Zuordnung, tauchen aber nicht mehr im Personenfilter auf. Trotzdem entfernen?",
122
+ "boards.deleteBoard": "Board löschen",
123
+ "boards.close": "Schließen",
124
+ "boards.save": "Speichern",
125
+ "boards.newBoard": "Neues Board…",
126
+ "boards.noneYet": "Noch kein Board vorhanden — oben einen Namen eingeben und auf „Anlegen\" klicken.",
127
+ "boards.create": "Anlegen",
128
+ "share.title": "Ansichten",
129
+ "share.hint": "Link mit vordefinierten Filtern und Ansichts-Optionen erzeugen – z.B. zum Einbetten (Lovelace-Webpage-Card) oder Weitergeben.",
130
+ "share.board": "Board",
131
+ "share.users": "Benutzer (leer = alle)",
132
+ "share.labels": "Labels ausblenden (leer = alle zeigen)",
133
+ "share.labelsHide": "Diese Labels ausblenden",
134
+ "share.labelsOnly": "Nur diese Labels zeigen",
135
+ "share.visibleColumns": "Sichtbare Spalten",
136
+ "share.doneLimit": "Max. sichtbare erledigte Aufgaben (leer = alle, 0 = keine)",
137
+ "share.doneLimitAll": "alle",
138
+ "share.hideSettings": "Einstellungen-Zahnrad ausblenden",
139
+ "share.embed": "Einbettmodus (kompakt, für iframe)",
140
+ "share.generatedUrl": "Generierte URL",
141
+ "share.copy": "Kopieren",
142
+ "share.copied": "Kopiert ✓",
143
+ "confirm.deleteCard": "Karte in den Papierkorb verschieben? Von dort ist sie 30 Tage lang wiederherstellbar.",
144
+ "confirm.deleteBoard": "Board \"{title}\" mit allen Karten löschen?",
145
+ "error.moveFailed": "Verschieben fehlgeschlagen: {msg}",
146
+ "error.saveFailed": "Speichern fehlgeschlagen: {msg}",
147
+ "boards.avatars": "Benutzer-Avatare (Bild statt Initiale)",
148
+ "avatar.choose": "Bild wählen",
149
+ "user.color": "Farbe",
150
+ "avatar.remove": "Avatar entfernen",
151
+ "avatar.failed": "Upload fehlgeschlagen: {msg}",
152
+ "error.loadFailed": "Fehler beim Laden",
153
+ "settings.title": "Einstellungen",
154
+ "settings.tabBoard": "Board",
155
+ "settings.tabUsers": "Benutzer",
156
+ "card.checklistToggle": "Checkliste ein-/ausklappen",
157
+ "boards.colTitle": "Titel",
158
+ "boards.colMax": "Max",
159
+ "boards.colWip": "WIP",
160
+ "boards.legendTitle": "Name der Spalte",
161
+ "boards.legendMax": "Max. angezeigte Karten (0 = alle)",
162
+ "boards.legendWip": "WIP-Limit — nur visuell (0 = kein Limit)",
163
+ "boards.legendAdd": "Hier können Karten angelegt werden",
164
+ "boards.legendDone": "Markiert die Spalte als erledigt",
165
+ "boards.maxTitle": "Max. angezeigte Karten pro Spalte (0 = alle)",
166
+ "boards.dragTitle": "Ziehen zum Umsortieren",
167
+ "board.moreCards": "+{n} weitere",
168
+ "board.moreCardsTitle": "Weitere Karten durch das Anzeige-Limit ausgeblendet",
169
+ "col.trash": "Papierkorb",
170
+ "sort.mode": "Sortierung",
171
+ "sort.manual": "Drag & Drop",
172
+ "sort.grid": "Anfasser",
173
+ "sort.gripTitle": "Zum Verschieben ziehen",
174
+ "sort.due": "Fälligkeit",
175
+ "sort.priority": "Priorität",
176
+ "sort.age": "Alter in Spalte",
177
+ "sort.reverse": "Reihenfolge umkehren",
178
+ "card.doneLabel": "Erledigt",
179
+ "card.copy": "Karte kopieren",
180
+ "card.edit": "Karte bearbeiten",
181
+ "trash.daysLeft": "noch {n} Tage",
182
+ "trash.restore": "Wiederherstellen",
183
+ "trash.purge": "Endgültig löschen",
184
+ "trash.empty": "Papierkorb leeren",
185
+ "trash.showToggle": "Papierkorb einblenden",
186
+ "confirm.title": "Bestätigen",
187
+ "confirm.ok": "OK",
188
+ "confirm.cancel": "Abbrechen",
189
+ "confirm.purgeCard": "Diese Karte endgültig und unwiderruflich löschen?",
190
+ "confirm.emptyTrash": "Alle Karten im Papierkorb endgültig löschen?",
191
+ "cleanup.title": "Erledigte Karten in den Papierkorb",
192
+ "cleanup.off": "Aus",
193
+ "cleanup.age": "Nach Alter",
194
+ "cleanup.count": "Nach Anzahl",
195
+ "cleanup.days": "Tage",
196
+ "cleanup.countLabel": "Anzahl",
197
+ "cleanup.hint": "Verschiebt alte erledigte Karten automatisch in den Papierkorb (täglich und beim Start). Von dort werden sie nach 30 Tagen endgültig gelöscht.",
198
+ "boards.lastBoard": "Das letzte Board kann nicht gelöscht werden.",
199
+ "boards.editingBoard": "Welches Board bearbeitet wird",
200
+ "boards.showBoard": "Dieses Board anzeigen",
201
+ "boards.showConfirm": "Zum Board \"{title}\" wechseln? Der Einstellungs-Dialog bleibt geöffnet.",
202
+ "boards.unsavedTitle": "Ungespeicherte Änderungen",
203
+ "boards.unsavedMsg": "Es gibt ungespeicherte Änderungen an diesem Board. Speichern oder verwerfen?",
204
+ "boards.discard": "Verwerfen",
205
+ "transfer.title": "Verwalten",
206
+ "transfer.targetBoard": "Ziel-Board",
207
+ "transfer.targetColumn": "Ziel-Spalte",
208
+ "transfer.move": "Verschieben",
209
+ "transfer.noOtherBoards": "Es gibt kein weiteres Board, auf das übertragen werden könnte.",
210
+ "transfer.copy": "Kopieren",
211
+ "transfer.clone": "Klonen",
212
+ "transfer.cloneHint": "Die Karte wird mit allen Inhalten dupliziert – der Klon landet direkt unter dem Original.",
213
+ "transfer.dropLabels": "{n} Label(s) ohne Entsprechung werden entfernt.",
214
+ "transfer.dropAssignees": "{n} Zuständige sind im Ziel-Board keine Mitglieder und werden entfernt.",
215
+ "transfer.pickAssignee": "Keiner der bisherigen Zuständigen ist Mitglied dieses Boards. Bitte mindestens eine zuständige Person wählen.",
216
+ "desc.close": "Schließen",
217
+ "rec.cron": "Cron-Ausdruck",
218
+ "rec.cronExpr": "Muster",
219
+ "rec.hint.cron": "Erledigt → neue Karte am nächsten Tag, der zum Muster passt. Minute und Stunde legen die Uhrzeit der Karte fest.",
220
+ "cron.empty": "Muster eingeben, z. B. 0 8 * * 1-5",
221
+ "cron.next": "Nächste: {dates}",
222
+ "cron.everyDayAt": "Jeden Tag um {time}",
223
+ "cron.monthlyAt": "Jeden {day}. im Monat um {time}",
224
+ "cron.rangeAt": "{from} bis {to} um {time}",
225
+ "cron.daysAt": "{days} um {time}",
226
+ "cron.minute": "Minute",
227
+ "cron.hour": "Stunde",
228
+ "cron.day": "Tag",
229
+ "cron.month": "Monat",
230
+ "cron.weekday": "Wochentag",
231
+ "cron.sun": "Sonntag",
232
+ "cron.mon": "Montag",
233
+ "cron.tue": "Dienstag",
234
+ "cron.wed": "Mittwoch",
235
+ "cron.thu": "Donnerstag",
236
+ "cron.fri": "Freitag",
237
+ "cron.sat": "Samstag"
238
+ }
@@ -0,0 +1,238 @@
1
+ {
2
+ "topbar.selectBoard": "Select board",
3
+ "topbar.activeUser": "Active user",
4
+ "topbar.filterMine": "Show only my cards",
5
+ "topbar.addCard": "+ Card",
6
+ "topbar.theme": "Switch theme",
7
+ "topbar.share": "Views",
8
+ "topbar.settings": "Settings",
9
+ "board.loading": "Loading…",
10
+ "board.empty": "No board yet — create one via ⚙.",
11
+ "board.addCard": "+ Add card",
12
+ "col.hideDone": "Hide completed",
13
+ "col.showDone": "Show completed",
14
+ "badge.recurring": "Recurring task",
15
+ "badge.description": "Has a description",
16
+ "card.titleNew": "New card",
17
+ "card.titleEdit": "Edit card",
18
+ "card.title": "Title",
19
+ "card.titleRequired": "Please enter a title",
20
+ "card.description": "Description",
21
+ "card.markdown": "(Markdown)",
22
+ "card.dueDate": "Due date",
23
+ "card.timeToggleTitle": "Also set a time",
24
+ "card.time": "Time",
25
+ "card.priority": "Priority",
26
+ "card.column": "Column",
27
+ "card.assignees": "Assignees",
28
+ "card.requiredLegend": "Required",
29
+ "card.assigneeRequired": "Please select at least one assignee",
30
+ "card.labels": "Labels",
31
+ "card.color": "Card color",
32
+ "card.link": "Link",
33
+ "card.location": "Location",
34
+ "card.locationPlaceholder": "e.g. Town hall, Main St. 1",
35
+ "card.calendarInviteTitle": "Only effective with a due date",
36
+ "card.calendarDuration": "Duration",
37
+ "card.calendarDurationTitle": "Length of the appointment in the calendar invite (hh:mm)",
38
+ "card.calendarInvite": "Attach calendar invite (.ics) to notification",
39
+ "card.recurrence": "Recurrence",
40
+ "card.checklist": "Checklist",
41
+ "card.addCheckItem": "+ Add item",
42
+ "card.delete": "Delete",
43
+ "card.manage": "Manage",
44
+ "card.manageTitle": "Transfer or clone card",
45
+ "card.cancel": "Cancel",
46
+ "card.save": "Save",
47
+ "card.checkPlaceholder": "Item…",
48
+ "card.checkDrag": "Reorder item",
49
+ "prio.normal": "Normal",
50
+ "prio.high": "High",
51
+ "prio.urgent": "Urgent",
52
+ "rec.none": "None",
53
+ "rec.daily": "Daily",
54
+ "rec.weekly": "Weekly",
55
+ "rec.monthly": "Monthly (day of month)",
56
+ "rec.monthlyWeekday": "Monthly (weekday)",
57
+ "rec.workday": "Working day of month",
58
+ "rec.yearly": "Yearly",
59
+ "rec.everyNDays": "Every X days",
60
+ "rec.interval": "Interval (days)",
61
+ "rec.dayOfMonth": "Day of month",
62
+ "rec.month": "Month",
63
+ "rec.which": "Which",
64
+ "rec.position": "Position",
65
+ "rec.n": "n",
66
+ "rec.ordinalLast": "last",
67
+ "rec.hint.daily": "After completion, reappears the next day.",
68
+ "rec.hint.weekly": "Completed → new card on the next selected weekday.",
69
+ "rec.hint.monthly": "Completed → new card on the selected day of the following month.",
70
+ "rec.hint.monthly_weekday": "Completed → new card on the selected weekday (e.g. 2nd Tuesday) of the following month.",
71
+ "rec.hint.workday": "Completed → new card on the selected working day of the following month (weekends and public holidays are skipped).",
72
+ "rec.hint.yearly": "Completed → new card on the selected day/month next year.",
73
+ "rec.hint.every_n_days": "Completed → new card after the configured number of days.",
74
+ "wd.first": "first",
75
+ "wd.last": "last",
76
+ "wd.nth": "nth (from start)",
77
+ "wd.nthLast": "nth (from end)",
78
+ "month.1": "January",
79
+ "month.2": "February",
80
+ "month.3": "March",
81
+ "month.4": "April",
82
+ "month.5": "May",
83
+ "month.6": "June",
84
+ "month.7": "July",
85
+ "month.8": "August",
86
+ "month.9": "September",
87
+ "month.10": "October",
88
+ "month.11": "November",
89
+ "month.12": "December",
90
+ "weekday.1": "Mon",
91
+ "weekday.2": "Tue",
92
+ "weekday.3": "Wed",
93
+ "weekday.4": "Thu",
94
+ "weekday.5": "Fri",
95
+ "weekday.6": "Sat",
96
+ "weekday.7": "Sun",
97
+ "label.new": "+ New",
98
+ "label.namePlaceholder": "Label name",
99
+ "color.own": "Custom color",
100
+ "color.none": "no color",
101
+ "boards.boardTitle": "Board title",
102
+ "boards.columns": "Columns (drag to reorder)",
103
+ "boards.columnName": "Column name",
104
+ "boards.wipTitle": "WIP limit",
105
+ "boards.done": "Done",
106
+ "boards.allowAdd": "New",
107
+ "boards.deleteColumnTitle": "Delete column (cards move to the first column)",
108
+ "boards.addColumn": "+ Add column",
109
+ "boards.labels": "Labels",
110
+ "boards.deleteLabelTitle": "Delete label",
111
+ "boards.addLabel": "+ Add label",
112
+ "boards.linkTarget": "Link in notifications",
113
+ "boards.linkBoard": "Board view (highlight card)",
114
+ "boards.linkEdit": "Open card editor",
115
+ "boards.linkUrl": "Custom URL",
116
+ "boards.linkUrlField": "Custom URL (fixed address)",
117
+ "boards.members": "Members (assignable users)",
118
+ "boards.membersHint": "Each board needs at least one selected user.",
119
+ "boards.membersRequiredShort": "Each board needs at least one user.",
120
+ "boards.memberRemoveTitle": "Remove member",
121
+ "boards.memberRemoveMsg": "{count} card(s) have only {names} assigned. Those cards keep the assignment but no longer appear in the person filter. Remove anyway?",
122
+ "boards.deleteBoard": "Delete board",
123
+ "boards.close": "Close",
124
+ "boards.save": "Save",
125
+ "boards.newBoard": "New board…",
126
+ "boards.noneYet": "No board yet — enter a name above and click \"Create\".",
127
+ "boards.create": "Create",
128
+ "share.title": "Views",
129
+ "share.hint": "Create a link with predefined filters and view options – e.g. for embedding (Lovelace webpage card) or sharing.",
130
+ "share.board": "Board",
131
+ "share.users": "Users (empty = all)",
132
+ "share.labels": "Hide labels (empty = show all)",
133
+ "share.labelsHide": "Hide these labels",
134
+ "share.labelsOnly": "Show only these labels",
135
+ "share.visibleColumns": "Visible columns",
136
+ "share.doneLimit": "Max. visible completed tasks (empty = all, 0 = none)",
137
+ "share.doneLimitAll": "all",
138
+ "share.hideSettings": "Hide settings gear",
139
+ "share.embed": "Embed mode (compact, for iframe)",
140
+ "share.generatedUrl": "Generated URL",
141
+ "share.copy": "Copy",
142
+ "share.copied": "Copied ✓",
143
+ "confirm.deleteCard": "Move this card to the trash? You can restore it from there for 30 days.",
144
+ "confirm.deleteBoard": "Delete board \"{title}\" with all its cards?",
145
+ "error.moveFailed": "Move failed: {msg}",
146
+ "error.saveFailed": "Save failed: {msg}",
147
+ "boards.avatars": "User avatars (image instead of initials)",
148
+ "avatar.choose": "Choose image",
149
+ "user.color": "Color",
150
+ "avatar.remove": "Remove avatar",
151
+ "avatar.failed": "Upload failed: {msg}",
152
+ "error.loadFailed": "Loading failed",
153
+ "settings.title": "Settings",
154
+ "settings.tabBoard": "Board",
155
+ "settings.tabUsers": "Users",
156
+ "card.checklistToggle": "Toggle checklist",
157
+ "boards.colTitle": "Title",
158
+ "boards.colMax": "Max",
159
+ "boards.colWip": "WIP",
160
+ "boards.legendTitle": "Column name",
161
+ "boards.legendMax": "Max. displayed cards (0 = all)",
162
+ "boards.legendWip": "WIP limit — visual only (0 = no limit)",
163
+ "boards.legendAdd": "Cards can be added here",
164
+ "boards.legendDone": "Marks the column as done",
165
+ "boards.maxTitle": "Max. displayed cards per column (0 = all)",
166
+ "boards.dragTitle": "Drag to reorder",
167
+ "board.moreCards": "+{n} more",
168
+ "board.moreCardsTitle": "More cards hidden by the display limit",
169
+ "col.trash": "Trash",
170
+ "sort.mode": "Sorting",
171
+ "sort.manual": "Drag & drop",
172
+ "sort.grid": "Drag handles",
173
+ "sort.gripTitle": "Drag to reorder",
174
+ "sort.due": "Due date",
175
+ "sort.priority": "Priority",
176
+ "sort.age": "Age in column",
177
+ "sort.reverse": "Reverse order",
178
+ "card.doneLabel": "Done",
179
+ "card.copy": "Copy card",
180
+ "card.edit": "Edit card",
181
+ "trash.daysLeft": "{n} days left",
182
+ "trash.restore": "Restore",
183
+ "trash.purge": "Delete permanently",
184
+ "trash.empty": "Empty trash",
185
+ "trash.showToggle": "Show trash",
186
+ "confirm.title": "Confirm",
187
+ "confirm.ok": "OK",
188
+ "confirm.cancel": "Cancel",
189
+ "confirm.purgeCard": "Permanently and irreversibly delete this card?",
190
+ "confirm.emptyTrash": "Permanently delete all cards in the trash?",
191
+ "cleanup.title": "Move done cards to the trash",
192
+ "cleanup.off": "Off",
193
+ "cleanup.age": "By age",
194
+ "cleanup.count": "By count",
195
+ "cleanup.days": "Days",
196
+ "cleanup.countLabel": "Count",
197
+ "cleanup.hint": "Automatically moves old done cards to the trash (daily and on start). From there they are permanently deleted after 30 days.",
198
+ "boards.lastBoard": "The last board cannot be deleted.",
199
+ "boards.editingBoard": "Which board is being edited",
200
+ "boards.showBoard": "Show this board",
201
+ "boards.showConfirm": "Switch to board \"{title}\"? The settings dialog stays open.",
202
+ "boards.unsavedTitle": "Unsaved changes",
203
+ "boards.unsavedMsg": "There are unsaved changes to this board. Save or discard?",
204
+ "boards.discard": "Discard",
205
+ "transfer.title": "Manage",
206
+ "transfer.targetBoard": "Target board",
207
+ "transfer.targetColumn": "Target column",
208
+ "transfer.move": "Move",
209
+ "transfer.noOtherBoards": "There is no other board to transfer to.",
210
+ "transfer.copy": "Copy",
211
+ "transfer.clone": "Clone",
212
+ "transfer.cloneHint": "The card is duplicated with all its content – the clone is placed right below the original.",
213
+ "transfer.dropLabels": "{n} label(s) without a match will be removed.",
214
+ "transfer.dropAssignees": "{n} assignee(s) are not members of the target board and will be removed.",
215
+ "transfer.pickAssignee": "None of the current assignees is a member of this board. Please choose at least one assignee.",
216
+ "desc.close": "Close",
217
+ "rec.cron": "Cron expression",
218
+ "rec.cronExpr": "Pattern",
219
+ "rec.hint.cron": "Done → new card on the next day matching the pattern. Minute and hour set the time of the card.",
220
+ "cron.empty": "Enter a pattern, e.g. 0 8 * * 1-5",
221
+ "cron.next": "Next: {dates}",
222
+ "cron.everyDayAt": "Every day at {time}",
223
+ "cron.monthlyAt": "Day {day} of every month at {time}",
224
+ "cron.rangeAt": "{from} to {to} at {time}",
225
+ "cron.daysAt": "{days} at {time}",
226
+ "cron.minute": "Minute",
227
+ "cron.hour": "Hour",
228
+ "cron.day": "Day",
229
+ "cron.month": "Month",
230
+ "cron.weekday": "Weekday",
231
+ "cron.sun": "Sunday",
232
+ "cron.mon": "Monday",
233
+ "cron.tue": "Tuesday",
234
+ "cron.wed": "Wednesday",
235
+ "cron.thu": "Thursday",
236
+ "cron.fri": "Friday",
237
+ "cron.sat": "Saturday"
238
+ }