iobroker.time-tracker 0.2.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 (143) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +386 -0
  3. package/admin/i18n/de.json +34 -0
  4. package/admin/i18n/en.json +1 -0
  5. package/admin/i18n/es.json +34 -0
  6. package/admin/i18n/fr.json +34 -0
  7. package/admin/i18n/it.json +34 -0
  8. package/admin/i18n/nl.json +34 -0
  9. package/admin/i18n/pl.json +34 -0
  10. package/admin/i18n/pt.json +34 -0
  11. package/admin/i18n/ru.json +34 -0
  12. package/admin/i18n/uk.json +34 -0
  13. package/admin/i18n/zh-cn.json +34 -0
  14. package/admin/jsonConfig.json +266 -0
  15. package/admin/time-tracker.png +0 -0
  16. package/build/lib/adapter/automation.js +100 -0
  17. package/build/lib/adapter/automation.js.map +7 -0
  18. package/build/lib/adapter/commands.js +160 -0
  19. package/build/lib/adapter/commands.js.map +7 -0
  20. package/build/lib/adapter/messages.js +207 -0
  21. package/build/lib/adapter/messages.js.map +7 -0
  22. package/build/lib/adapter/presence.js +129 -0
  23. package/build/lib/adapter/presence.js.map +7 -0
  24. package/build/lib/adapter/states.js +330 -0
  25. package/build/lib/adapter/states.js.map +7 -0
  26. package/build/lib/adapter/triggers.js +92 -0
  27. package/build/lib/adapter/triggers.js.map +7 -0
  28. package/build/lib/db/database.js +96 -0
  29. package/build/lib/db/database.js.map +7 -0
  30. package/build/lib/db/migrations.js +603 -0
  31. package/build/lib/db/migrations.js.map +7 -0
  32. package/build/lib/db/repositories/absences.js +432 -0
  33. package/build/lib/db/repositories/absences.js.map +7 -0
  34. package/build/lib/db/repositories/audit.js +90 -0
  35. package/build/lib/db/repositories/audit.js.map +7 -0
  36. package/build/lib/db/repositories/automations.js +326 -0
  37. package/build/lib/db/repositories/automations.js.map +7 -0
  38. package/build/lib/db/repositories/entries.js +335 -0
  39. package/build/lib/db/repositories/entries.js.map +7 -0
  40. package/build/lib/db/repositories/holidays.js +156 -0
  41. package/build/lib/db/repositories/holidays.js.map +7 -0
  42. package/build/lib/db/repositories/payouts.js +221 -0
  43. package/build/lib/db/repositories/payouts.js.map +7 -0
  44. package/build/lib/db/repositories/rfid.js +264 -0
  45. package/build/lib/db/repositories/rfid.js.map +7 -0
  46. package/build/lib/db/repositories/rules.js +356 -0
  47. package/build/lib/db/repositories/rules.js.map +7 -0
  48. package/build/lib/db/repositories/settings.js +91 -0
  49. package/build/lib/db/repositories/settings.js.map +7 -0
  50. package/build/lib/db/repositories/terminals.js +243 -0
  51. package/build/lib/db/repositories/terminals.js.map +7 -0
  52. package/build/lib/db/repositories/triggers.js +240 -0
  53. package/build/lib/db/repositories/triggers.js.map +7 -0
  54. package/build/lib/db/repositories/users.js +491 -0
  55. package/build/lib/db/repositories/users.js.map +7 -0
  56. package/build/lib/db/seed.js +180 -0
  57. package/build/lib/db/seed.js.map +7 -0
  58. package/build/lib/domain/avatar.js +63 -0
  59. package/build/lib/domain/avatar.js.map +7 -0
  60. package/build/lib/domain/breaks.js +70 -0
  61. package/build/lib/domain/breaks.js.map +7 -0
  62. package/build/lib/domain/calculation.js +150 -0
  63. package/build/lib/domain/calculation.js.map +7 -0
  64. package/build/lib/domain/holidays.js +113 -0
  65. package/build/lib/domain/holidays.js.map +7 -0
  66. package/build/lib/domain/punch.js +99 -0
  67. package/build/lib/domain/punch.js.map +7 -0
  68. package/build/lib/domain/target.js +89 -0
  69. package/build/lib/domain/target.js.map +7 -0
  70. package/build/lib/errors.js +56 -0
  71. package/build/lib/errors.js.map +7 -0
  72. package/build/lib/reports/labels.js +358 -0
  73. package/build/lib/reports/labels.js.map +7 -0
  74. package/build/lib/reports/pdf.js +308 -0
  75. package/build/lib/reports/pdf.js.map +7 -0
  76. package/build/lib/reports/types.js +32 -0
  77. package/build/lib/reports/types.js.map +7 -0
  78. package/build/lib/reports/xls.js +211 -0
  79. package/build/lib/reports/xls.js.map +7 -0
  80. package/build/lib/services/aggregation.js +495 -0
  81. package/build/lib/services/aggregation.js.map +7 -0
  82. package/build/lib/services/auth.js +381 -0
  83. package/build/lib/services/auth.js.map +7 -0
  84. package/build/lib/services/backup.js +372 -0
  85. package/build/lib/services/backup.js.map +7 -0
  86. package/build/lib/services/closing.js +106 -0
  87. package/build/lib/services/closing.js.map +7 -0
  88. package/build/lib/services/sessionSecret.js +100 -0
  89. package/build/lib/services/sessionSecret.js.map +7 -0
  90. package/build/lib/services/sync.js +278 -0
  91. package/build/lib/services/sync.js.map +7 -0
  92. package/build/lib/util/time.js +125 -0
  93. package/build/lib/util/time.js.map +7 -0
  94. package/build/lib/web/api.js +2589 -0
  95. package/build/lib/web/api.js.map +7 -0
  96. package/build/lib/web/cookies.js +80 -0
  97. package/build/lib/web/cookies.js.map +7 -0
  98. package/build/lib/web/events.js +50 -0
  99. package/build/lib/web/events.js.map +7 -0
  100. package/build/lib/web/pin-guard.js +86 -0
  101. package/build/lib/web/pin-guard.js.map +7 -0
  102. package/build/lib/web/problem.js +129 -0
  103. package/build/lib/web/problem.js.map +7 -0
  104. package/build/lib/web/rate-limit.js +65 -0
  105. package/build/lib/web/rate-limit.js.map +7 -0
  106. package/build/lib/web/router.js +274 -0
  107. package/build/lib/web/router.js.map +7 -0
  108. package/build/lib/web/server.js +189 -0
  109. package/build/lib/web/server.js.map +7 -0
  110. package/build/lib/web/static.js +151 -0
  111. package/build/lib/web/static.js.map +7 -0
  112. package/build/lib/web/stream.js +135 -0
  113. package/build/lib/web/stream.js.map +7 -0
  114. package/build/main.js +986 -0
  115. package/build/main.js.map +7 -0
  116. package/io-package.json +221 -0
  117. package/package.json +131 -0
  118. package/src-pwa/src/i18n/de.json +359 -0
  119. package/src-pwa/src/i18n/en.json +359 -0
  120. package/src-pwa/src/i18n/es.json +359 -0
  121. package/src-pwa/src/i18n/fr.json +359 -0
  122. package/src-pwa/src/i18n/index.ts +96 -0
  123. package/src-pwa/src/i18n/it.json +359 -0
  124. package/src-pwa/src/i18n/nl.json +359 -0
  125. package/src-pwa/src/i18n/pl.json +359 -0
  126. package/src-pwa/src/i18n/pt.json +359 -0
  127. package/src-pwa/src/i18n/ru.json +359 -0
  128. package/src-pwa/src/i18n/uk.json +359 -0
  129. package/src-pwa/src/i18n/zh-cn.json +359 -0
  130. package/www/assets/index-QI3wrEvW.js +119 -0
  131. package/www/assets/index-QI3wrEvW.js.map +1 -0
  132. package/www/assets/workbox-window.prod.es5-Bd17z0YL.js +3 -0
  133. package/www/assets/workbox-window.prod.es5-Bd17z0YL.js.map +1 -0
  134. package/www/favicon.svg +16 -0
  135. package/www/icon-192.png +0 -0
  136. package/www/icon-512.png +0 -0
  137. package/www/index.html +38 -0
  138. package/www/manifest.webmanifest +1 -0
  139. package/www/person.png +0 -0
  140. package/www/sw.js +3 -0
  141. package/www/sw.js.map +1 -0
  142. package/www/workbox-9c191d2f.js +3 -0
  143. package/www/workbox-9c191d2f.js.map +1 -0
@@ -0,0 +1,359 @@
1
+ {
2
+ "app.title": "Time tracking",
3
+ "app.offline": "Offline – punches are queued",
4
+ "app.online": "Connected",
5
+ "nav.dashboard": "Punch",
6
+ "nav.month": "Month",
7
+ "nav.reports": "Reports",
8
+ "nav.absences": "Absences",
9
+ "nav.sync": "Sync",
10
+ "nav.profile": "Profile",
11
+ "nav.logout": "Sign out",
12
+ "nav.menu": "Menu",
13
+ "login.title": "Sign in",
14
+ "login.login": "User name",
15
+ "login.password": "Password",
16
+ "login.submit": "Sign in",
17
+ "login.failed": "Sign in failed",
18
+ "error.invalid_credentials": "User name or password is not correct.",
19
+ "error.locked_out": "Too many failed attempts. Please try again later.",
20
+ "error.network_error": "The server is not reachable.",
21
+ "error.permission_denied": "You are not allowed to do this.",
22
+ "error.no_session": "Your session has expired, please sign in again.",
23
+ "error.session_expired": "Your session has expired, please sign in again.",
24
+ "error.csrf_rejected": "The request was rejected for security reasons, please try again.",
25
+ "error.user_inactive": "This account is deactivated.",
26
+ "error.not_found": "Not found.",
27
+ "error.bad_request": "The input was not accepted.",
28
+ "error.revision_conflict": "The punch was changed in the meantime, please reload.",
29
+ "error.conflict": "The change conflicts with existing data.",
30
+ "error.report_font_missing": "This report needs a Unicode font (report_font_path).",
31
+ "error.unknown_error": "Unexpected error.",
32
+ "punch.now": "Punch",
33
+ "punch.in": "Clock in",
34
+ "punch.out": "Clock out",
35
+ "punch.quick": "Quick punch",
36
+ "punch.open": "Clocked in since {{time}}",
37
+ "punch.closed": "Not clocked in",
38
+ "punch.last": "Last punch {{time}}",
39
+ "punch.worked": "Worked today",
40
+ "punch.target": "Target today",
41
+ "punch.balance": "Balance today",
42
+ "punch.queued": "Saved offline – it will be sent automatically",
43
+ "punch.sent": "Punch stored ({{time}})",
44
+ "punch.note": "Note",
45
+ "month.title": "Month",
46
+ "month.previous": "Previous month",
47
+ "month.next": "Next month",
48
+ "month.worked": "Worked",
49
+ "month.target": "Target",
50
+ "month.balance": "Balance",
51
+ "error.edit_window_closed": "Outside the edit window",
52
+ "admin.profile.pauseRules": "Own break rules",
53
+ "admin.profile.pauseRulesHint": "Rules for this employee only: they replace the company rule with the same “from minutes”. Without own rules the company table applies.",
54
+ "report.csv": "Raw data (CSV)",
55
+ "month.edit": "Correct",
56
+ "month.editTitle": "Correct punches · {{date}}",
57
+ "month.editHint": "Only inside the edit window - older days are changed by the administration.",
58
+ "month.time": "Time",
59
+ "month.direction": "Direction",
60
+ "month.directionIn": "In",
61
+ "month.directionOut": "Out",
62
+ "month.addPunch": "Add punch",
63
+ "month.pause": "Break",
64
+ "month.paidBreak": "of which paid",
65
+ "month.open": "open",
66
+ "month.holiday": "Holiday",
67
+ "month.absence": "Absence",
68
+ "month.empty": "No days in this month.",
69
+ "month.months": "Months of the year",
70
+ "report.xls": "Excel",
71
+ "report.pdf": "PDF",
72
+ "report.failed": "The statement could not be created.",
73
+ "reports.title": "Reports",
74
+ "reports.year": "Year",
75
+ "reports.yearTotals": "Year totals",
76
+ "reports.monthTotals": "Month totals",
77
+ "reports.overtime": "Overtime",
78
+ "reports.vacation": "Vacation (taken / entitlement)",
79
+ "reports.paidOut": "Paid out: {{minutes}}",
80
+ "reports.empty": "No data for this period.",
81
+ "absences.title": "Absences",
82
+ "absences.type": "Type",
83
+ "absences.from": "From",
84
+ "absences.to": "To",
85
+ "absences.status": "Status",
86
+ "absences.portion": "Day share",
87
+ "absences.typeHint": "Code of the absence type, e.g. F for vacation",
88
+ "absences.create": "Request absence",
89
+ "absences.created": "Absence requested.",
90
+ "absences.empty": "No absences in this year.",
91
+ "sync.title": "Synchronisation",
92
+ "sync.pending": "{{count}} punch(es) waiting",
93
+ "sync.none": "Nothing to send.",
94
+ "sync.flush": "Send now",
95
+ "sync.done": "Sent: {{accepted}}, duplicates: {{duplicates}}, conflicts: {{conflicts}}",
96
+ "sync.conflicts": "Open conflicts",
97
+ "sync.conflictOf": "{{date}} · {{time}}",
98
+ "sync.accept": "Keep server value",
99
+ "sync.dismiss": "Discard",
100
+ "sync.resolved": "Conflict resolved.",
101
+ "sync.empty": "No open conflicts.",
102
+ "sync.permission": "You are not allowed to resolve conflicts.",
103
+ "profile.title": "Profile",
104
+ "profile.user": "User",
105
+ "profile.roles": "Permissions",
106
+ "profile.language": "Language",
107
+ "profile.newPassword": "New password",
108
+ "profile.changePassword": "Change password",
109
+ "profile.changed": "Password changed, please sign in again.",
110
+ "admin.title": "Administration",
111
+ "admin.forbidden": "You are not allowed to open the administration.",
112
+ "admin.users": "Employees",
113
+ "admin.backup": "Backups",
114
+ "admin.user.login": "Login",
115
+ "admin.user.name": "Name",
116
+ "admin.user.password": "Password",
117
+ "admin.user.passwordHint": "At least 8 characters with upper and lower case and digits.",
118
+ "admin.user.roles": "Roles",
119
+ "admin.user.active": "Active",
120
+ "admin.user.inactive": "Deactivated",
121
+ "admin.user.create": "Add employee",
122
+ "admin.user.pin": "PIN",
123
+ "admin.user.pinTitle": "Badge PIN for {{name}}",
124
+ "admin.user.newPin": "New PIN",
125
+ "admin.user.pinHint": "4 to 8 digits for the terminal",
126
+ "admin.user.empty": "No employees yet.",
127
+ "admin.backup.create": "Create backup now",
128
+ "admin.backup.upload": "Upload backup",
129
+ "admin.backup.uploadHint": "Pick a downloaded backup (.sqlite) - it is checked and applied on the next start.",
130
+ "admin.backup.delete": "Delete",
131
+ "admin.backup.deleteTitle": "Delete backup",
132
+ "admin.backup.deleteConfirm": "The backup {{name}} is deleted. This cannot be undone.",
133
+ "admin.backup.empty": "No backups yet.",
134
+ "admin.backup.retention": "Backups older than {{days}} days are removed, the newest one is always kept.",
135
+ "admin.backup.done": "Backup {{name}} written, {{removed}} old file(s) removed.",
136
+ "common.save": "Save",
137
+ "common.cancel": "Cancel",
138
+ "common.loading": "Loading…",
139
+ "common.retry": "Retry",
140
+ "common.close": "Close",
141
+ "common.refresh": "Refresh",
142
+ "common.none": "–",
143
+ "terminal.title": "Terminal",
144
+ "terminal.deviceToken": "Device token",
145
+ "terminal.connect": "Connect",
146
+ "terminal.badge": "Badge",
147
+ "terminal.noPin": "No PIN is needed on this terminal.",
148
+ "terminal.pin": "PIN",
149
+ "terminal.select": "Choose your name",
150
+ "terminal.disabled": "The terminal is switched off in the adapter settings.",
151
+ "admin.terminals": "Terminals",
152
+ "admin.terminal.name": "Name",
153
+ "admin.terminal.location": "Location",
154
+ "admin.terminal.pinRequired": "Employees need their PIN",
155
+ "admin.terminal.create": "Create terminal",
156
+ "admin.terminal.tokenOnce": "Copy the device token now — it is stored as a hash and shown only once:",
157
+ "admin.terminal.url": "Open this address on the kiosk device:",
158
+ "admin.terminal.revoke": "Revoke",
159
+ "admin.terminal.revoked": "revoked",
160
+ "admin.terminal.users": "Employees",
161
+ "admin.terminal.usersHint": "Leave everything off to show all employees on this terminal.",
162
+ "admin.terminal.usersAll": "all employees",
163
+ "admin.terminal.empty": "No terminal created yet.",
164
+ "admin.terminal.confirmRevoke": "Revoke “{{name}}”? Its device token stops working immediately.",
165
+ "admin.settings": "Settings",
166
+ "admin.settings.fontPath": "Unicode font file for PDF statements (.ttf/.otf)",
167
+ "admin.user.profile": "Work profile",
168
+ "admin.user.profileTitle": "Work profile · {{name}}",
169
+ "admin.profile.percent": "Employment level (%)",
170
+ "admin.profile.weeklyHours": "Weekly hours at 100 %",
171
+ "admin.profile.workdays": "Working days",
172
+ "admin.profile.overtimeModel": "Overtime model",
173
+ "admin.profile.model.monthly": "Monthly",
174
+ "admin.profile.model.yearly": "Yearly",
175
+ "admin.profile.model.cumulative": "Cumulative",
176
+ "admin.profile.vacationPerYear": "Vacation days per year",
177
+ "admin.profile.vacationCarryover": "Vacation carried over (days)",
178
+ "admin.profile.overtimeCarryover": "Overtime carried over (hours)",
179
+ "admin.profile.vorholzeitPerYear": "“Vorholzeit” per year (hours)",
180
+ "admin.profile.pausePaid": "Paid break minutes per day",
181
+ "admin.profile.pausePaidHint": "That many minutes of the break count as working time (0 = the break is not paid).",
182
+ "admin.settings.pauseMode": "Breaks",
183
+ "admin.settings.pauseModeTitle": "Break rule",
184
+ "admin.settings.pauseModeHint": "How the break of a day is determined.",
185
+ "admin.settings.pauseRules": "Break rules",
186
+ "admin.settings.pauseRulesHint": "Applies to days without a punched break: from the given block length (first to last punch of a block) the minutes are deducted.",
187
+ "admin.settings.pauseFrom": "from minutes",
188
+ "admin.settings.pauseTo": "to minutes (empty = no end)",
189
+ "admin.settings.pauseMinutes": "break minutes",
190
+ "admin.settings.pauseActive": "Rule active",
191
+ "admin.settings.pauseAdd": "Add rule",
192
+ "admin.settings.pauseSave": "Save break rules",
193
+ "admin.settings.pauseMode.auto": "Punched break, otherwise the rules",
194
+ "admin.settings.pauseMode.punched": "Only punched breaks",
195
+ "admin.settings.pauseMode.staffel": "Only the graduated rules",
196
+ "admin.settings.fontPathHint": "Needed for Russian, Ukrainian and Chinese; empty = built-in fonts, which only cover Latin-1.",
197
+ "admin.settings.advanced": "All instance settings (technical names, 1/0 for switches)",
198
+ "admin.settings.setting.edit_window_days": "Edit window (days)",
199
+ "admin.settings.setting.quick_round_minutes": "Quick rounding (min)",
200
+ "admin.settings.setting.absence_calc_until_today": "Absences to today",
201
+ "admin.settings.setting.absence_deduct_worktime": "Deduct absences",
202
+ "admin.settings.setting.print_limit_days": "Print limit (days)",
203
+ "admin.settings.setting.holiday_country": "Holiday country",
204
+ "admin.settings.setting.default_language": "Default language",
205
+ "admin.settings.setting.session_ttl_minutes": "Session (minutes)",
206
+ "admin.settings.setting.backup_retention_days": "Keep backups (days)",
207
+ "admin.settings.setting.attendance_list_visible": "Attendance list",
208
+ "admin.settings.setting.timezone": "Time zone",
209
+ "admin.settings.saved": "Settings saved.",
210
+ "admin.holidays": "Public holidays",
211
+ "admin.holiday.date": "Date (YYYY-MM-DD)",
212
+ "admin.holiday.name": "Name",
213
+ "holiday.newYear": "New Year",
214
+ "holiday.epiphany": "Epiphany",
215
+ "holiday.goodFriday": "Good Friday",
216
+ "holiday.easterMonday": "Easter Monday",
217
+ "holiday.labourDay": "Labour Day",
218
+ "holiday.ascension": "Ascension Day",
219
+ "holiday.whitMonday": "Whit Monday",
220
+ "holiday.corpusChristi": "Corpus Christi",
221
+ "holiday.nationalDay": "National Day",
222
+ "holiday.germanUnity": "German Unity Day",
223
+ "holiday.assumption": "Assumption Day",
224
+ "holiday.allSaints": "All Saints' Day",
225
+ "holiday.immaculateConception": "Immaculate Conception",
226
+ "holiday.christmas": "Christmas Day",
227
+ "holiday.boxingDay": "Boxing Day",
228
+ "admin.holiday.add": "Add holiday",
229
+ "admin.holiday.year": "Year",
230
+ "admin.holiday.region": "Region (optional)",
231
+ "admin.holiday.empty": "No holiday recorded for this year.",
232
+ "admin.tags": "Badges (RFID/NFC)",
233
+ "admin.tag.label": "Label",
234
+ "admin.tag.user": "Employee",
235
+ "admin.tag.create": "Create badge",
236
+ "admin.tag.linkOnce": "Write this link onto the tag or open it on the phone:",
237
+ "admin.tag.delete": "Delete",
238
+ "admin.tag.active": "active",
239
+ "admin.tag.expired": "expired",
240
+ "admin.tag.revoked": "revoked",
241
+ "admin.tag.lastUsed": "last used",
242
+ "admin.tag.remove": "Remove permanently",
243
+ "admin.tag.edit": "Edit",
244
+ "admin.tag.reissue": "New link",
245
+ "admin.tag.editTitle": "Edit badge",
246
+ "admin.tag.editHint": "A different employee or a new validity issues a new link — the link handed out before stops working immediately.",
247
+ "admin.tag.validityDays": "Validity (days)",
248
+ "admin.tag.oldLinkDead": "The link handed out before no longer works.",
249
+ "admin.tag.qrAlt": "QR code of the badge link",
250
+ "admin.tag.empty": "No badge created yet.",
251
+ "nav.statistics": "Statistics",
252
+ "statistics.from": "From",
253
+ "statistics.to": "To",
254
+ "statistics.employee": "Employee",
255
+ "statistics.worked": "Worked",
256
+ "statistics.target": "Target",
257
+ "statistics.balance": "Balance",
258
+ "statistics.openDays": "Open days",
259
+ "statistics.totals": "All employees",
260
+ "scan.title": "Badge",
261
+ "scan.done": "Punched for {{name}} at {{time}}",
262
+ "scan.failed": "The badge could not be used: {{reason}}",
263
+ "presence.title": "Presence",
264
+ "presence.present": "Present",
265
+ "presence.absent": "Away",
266
+ "presence.tapPin": "Enter the PIN to clock in or out",
267
+ "presence.cancel": "Cancel",
268
+ "presence.updated": "{{name}} is now {{state}}",
269
+ "presence.disabled": "The kiosk terminal is switched off in the instance settings.",
270
+ "admin.user.photo": "Photo",
271
+ "admin.user.photoTitle": "Photo of {{name}}",
272
+ "admin.user.photoChoose": "Choose picture",
273
+ "admin.user.photoRemove": "Remove picture",
274
+ "admin.user.photoHint": "PNG, JPEG, WEBP or GIF up to 256 KB. Without a picture the placeholder is shown.",
275
+ "admin.corrections": "Time corrections",
276
+ "corrections.employee": "Employee",
277
+ "corrections.previous": "Previous month",
278
+ "corrections.next": "Next month",
279
+ "corrections.reason": "Reason",
280
+ "corrections.reasonHint": "Kept in the audit trail of the adapter",
281
+ "corrections.add": "Add punch or day",
282
+ "corrections.addTitle": "Add a punch",
283
+ "corrections.addHint": "Leave “clock out” empty when only one punch is missing",
284
+ "corrections.editTitle": "Change punch",
285
+ "corrections.remove": "Delete punch",
286
+ "corrections.date": "Date",
287
+ "corrections.from": "Clock in",
288
+ "corrections.to": "Clock out",
289
+ "corrections.direction": "Direction",
290
+ "corrections.note": "Note",
291
+ "corrections.empty": "No punches in this month",
292
+ "corrections.byAdmin": "added by the administration",
293
+ "corrections.history": "History",
294
+ "corrections.actor": "By",
295
+ "corrections.actionCreate": "Added",
296
+ "corrections.actionUpdate": "Changed",
297
+ "corrections.actionDelete": "Deleted",
298
+ "keypad.backspace": "Backspace",
299
+ "admin.settings.branding": "Company branding",
300
+ "admin.settings.brandingHint": "Logo, background picture and background colour of this installation. The sign in screen and the kiosk screens show them as well.",
301
+ "admin.settings.brandLogo": "Choose logo",
302
+ "admin.settings.brandBackground": "Choose background",
303
+ "admin.brand.imageResized": "Scaled down for display ({{size}}).",
304
+ "admin.brand.imageTooLarge": "Even scaled down the picture is still too big.",
305
+ "admin.brand.imageType": "Only PNG, JPEG, WEBP or GIF are possible.",
306
+ "admin.brand.imageUnreadable": "The picture could not be read.",
307
+ "admin.settings.brandColor": "Background colour",
308
+ "admin.settings.brandColorHint": "Hex value like #1a2b3c, empty for the default",
309
+ "admin.settings.brandColorPresets": "Suggested colours",
310
+ "admin.settings.brandColorDefault": "Default",
311
+ "admin.backup.download": "Download",
312
+ "admin.backup.restore": "Restore",
313
+ "admin.backup.restoreTitle": "Restore a backup",
314
+ "admin.backup.restoreConfirm": "The backup {{name}} is applied when the adapter starts next time; the current database is kept next to it as a file. Restart the instance afterwards.",
315
+ "admin.backup.pendingHint": "{{name}} is applied when the adapter starts next time ({{users}} employees, {{entries}} punches) - restart the instance.",
316
+ "error.backup_invalid": "That file is not a backup of this adapter.",
317
+ "admin.settings.brandImageRemove": "Remove picture",
318
+ "admin.settings.brandColorDefaultHint": "Resets the background colour and the background picture",
319
+ "admin.triggers": "Triggers (ioBroker)",
320
+ "admin.triggersHint": "A state of another adapter punches or sets the presence — a fingerprint reader, a button or a door contact. It fires only when the value changes. As the value you can write `toggle`: then every change fires (for example on and off again).",
321
+ "admin.trigger.label": "Label",
322
+ "admin.trigger.sourceState": "State",
323
+ "admin.trigger.mode": "Trigger",
324
+ "admin.trigger.modeCondition": "State carries the value",
325
+ "admin.trigger.modeUser": "Value is the employee",
326
+ "admin.trigger.condition": "Value",
327
+ "admin.trigger.user": "Employee",
328
+ "admin.trigger.action": "Action",
329
+ "admin.trigger.actionPunch": "Punch (in or out)",
330
+ "admin.trigger.actionQuickPunch": "Punch with quick rounding",
331
+ "admin.trigger.actionPresent": "Set to present",
332
+ "admin.trigger.actionAbsent": "Set to absent",
333
+ "admin.trigger.cooldown": "Cooldown (seconds)",
334
+ "admin.trigger.active": "Active",
335
+ "admin.trigger.add": "Add trigger",
336
+ "admin.trigger.lastFired": "Last fired",
337
+ "admin.trigger.empty": "No trigger yet.",
338
+ "admin.trigger.conditionHint": "Value, or `toggle` to fire on every change",
339
+ "admin.settings.automations": "Rules (automatic)",
340
+ "admin.settings.automationsHint": "What the adapter does on its own: clock out at the configured local time, report a missing punch or remind after working too long without a break. A rule runs at most once per employee and day.",
341
+ "admin.automation.kind": "Kind",
342
+ "admin.automation.kindClockIn": "Clock in automatically",
343
+ "admin.automation.kindClockOut": "Clock out automatically",
344
+ "admin.automation.kindMissingPunch": "Report a missing punch",
345
+ "admin.automation.kindBreakReminder": "Break reminder",
346
+ "admin.automation.at": "Time",
347
+ "admin.automation.atHint": "Local time of the employee",
348
+ "admin.automation.after": "After (minutes)",
349
+ "admin.automation.user": "Employee",
350
+ "admin.automation.allUsers": "all employees",
351
+ "admin.automation.add": "Add rule",
352
+ "admin.automation.empty": "No rule yet.",
353
+ "admin.automation.runs": "Last runs",
354
+ "admin.automation.weekdays": "Days of the week",
355
+ "admin.automation.repeat": "Repeat",
356
+ "admin.automation.repeatDay": "once a day",
357
+ "admin.automation.repeatWeek": "once a week",
358
+ "admin.settings.setting.report_font_path": "PDF font file"
359
+ }