pgbus 0.2.1 → 0.2.3

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 (51) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +88 -25
  3. data/app/controllers/pgbus/api/insights_controller.rb +5 -4
  4. data/app/controllers/pgbus/application_controller.rb +40 -0
  5. data/app/controllers/pgbus/insights_controller.rb +3 -2
  6. data/app/controllers/pgbus/locale_controller.rb +15 -0
  7. data/app/helpers/pgbus/application_helper.rb +67 -7
  8. data/app/views/layouts/pgbus/application.html.erb +51 -16
  9. data/app/views/pgbus/dashboard/_processes_table.html.erb +7 -7
  10. data/app/views/pgbus/dashboard/_queues_table.html.erb +9 -9
  11. data/app/views/pgbus/dashboard/_recent_failures.html.erb +7 -7
  12. data/app/views/pgbus/dashboard/_stats_cards.html.erb +10 -10
  13. data/app/views/pgbus/dashboard/show.html.erb +1 -1
  14. data/app/views/pgbus/dead_letter/_messages_table.html.erb +20 -20
  15. data/app/views/pgbus/dead_letter/index.html.erb +5 -5
  16. data/app/views/pgbus/dead_letter/show.html.erb +12 -12
  17. data/app/views/pgbus/events/index.html.erb +11 -11
  18. data/app/views/pgbus/events/show.html.erb +6 -6
  19. data/app/views/pgbus/insights/show.html.erb +41 -21
  20. data/app/views/pgbus/jobs/_enqueued_table.html.erb +20 -20
  21. data/app/views/pgbus/jobs/_failed_table.html.erb +12 -12
  22. data/app/views/pgbus/jobs/index.html.erb +5 -5
  23. data/app/views/pgbus/jobs/show.html.erb +13 -13
  24. data/app/views/pgbus/locks/index.html.erb +11 -11
  25. data/app/views/pgbus/outbox/index.html.erb +15 -15
  26. data/app/views/pgbus/processes/_processes_table.html.erb +8 -8
  27. data/app/views/pgbus/processes/index.html.erb +1 -1
  28. data/app/views/pgbus/queues/_queues_list.html.erb +15 -15
  29. data/app/views/pgbus/queues/index.html.erb +1 -1
  30. data/app/views/pgbus/queues/show.html.erb +11 -11
  31. data/app/views/pgbus/recurring_tasks/_tasks_table.html.erb +15 -15
  32. data/app/views/pgbus/recurring_tasks/index.html.erb +2 -2
  33. data/app/views/pgbus/recurring_tasks/show.html.erb +21 -21
  34. data/config/i18n-tasks.yml +41 -0
  35. data/config/locales/da.yml +348 -0
  36. data/config/locales/de.yml +348 -0
  37. data/config/locales/en.yml +348 -0
  38. data/config/locales/es.yml +348 -0
  39. data/config/locales/fi.yml +348 -0
  40. data/config/locales/fr.yml +348 -0
  41. data/config/locales/it.yml +348 -0
  42. data/config/locales/ja.yml +348 -0
  43. data/config/locales/nb.yml +348 -0
  44. data/config/locales/nl.yml +348 -0
  45. data/config/locales/pt.yml +348 -0
  46. data/config/locales/sv.yml +348 -0
  47. data/config/routes.rb +2 -0
  48. data/lib/pgbus/configuration.rb +8 -2
  49. data/lib/pgbus/engine.rb +4 -0
  50. data/lib/pgbus/version.rb +1 -1
  51. metadata +15 -1
@@ -5,16 +5,16 @@
5
5
  <p class="mt-1 text-sm text-gray-500"><%= @task[:class_name] || @task[:command] %></p>
6
6
  </div>
7
7
  <div class="flex space-x-2">
8
- <%= button_to @task[:enabled] ? "Disable" : "Enable",
8
+ <%= button_to @task[:enabled] ? t("pgbus.recurring_tasks.show.disable") : t("pgbus.recurring_tasks.show.enable"),
9
9
  pgbus.toggle_recurring_task_path(@task[:id]),
10
10
  class: "inline-flex items-center rounded-md px-3 py-2 text-sm font-medium " \
11
11
  "#{@task[:enabled] ? 'bg-yellow-100 text-yellow-700 hover:bg-yellow-200' : 'bg-green-100 text-green-700 hover:bg-green-200'}" %>
12
12
  <% if @task[:enabled] %>
13
- <%= button_to "Run Now",
13
+ <%= button_to t("pgbus.recurring_tasks.show.run_now"),
14
14
  pgbus.enqueue_recurring_task_path(@task[:id]),
15
15
  class: "inline-flex items-center rounded-md bg-blue-600 px-3 py-2 text-sm font-medium text-white hover:bg-blue-700" %>
16
16
  <% end %>
17
- <%= link_to "Back", pgbus.recurring_tasks_path,
17
+ <%= link_to t("pgbus.recurring_tasks.show.back"), pgbus.recurring_tasks_path,
18
18
  class: "inline-flex items-center rounded-md bg-gray-100 px-3 py-2 text-sm font-medium text-gray-700 hover:bg-gray-200" %>
19
19
  </div>
20
20
  </div>
@@ -22,7 +22,7 @@
22
22
 
23
23
  <div class="grid grid-cols-1 lg:grid-cols-3 gap-6 mb-8">
24
24
  <div class="rounded-lg bg-white dark:bg-gray-800 p-5 shadow ring-1 ring-gray-200 dark:ring-gray-700">
25
- <p class="text-sm font-medium text-gray-500">Schedule</p>
25
+ <p class="text-sm font-medium text-gray-500"><%= t("pgbus.recurring_tasks.show.schedule") %></p>
26
26
  <p class="mt-1 text-lg font-semibold text-gray-900 dark:text-white"><%= @task[:schedule] %></p>
27
27
  <% if @task[:human_schedule] && @task[:human_schedule] != @task[:schedule] %>
28
28
  <p class="text-xs text-gray-400"><%= @task[:human_schedule] %></p>
@@ -30,7 +30,7 @@
30
30
  </div>
31
31
 
32
32
  <div class="rounded-lg bg-white dark:bg-gray-800 p-5 shadow ring-1 ring-gray-200 dark:ring-gray-700">
33
- <p class="text-sm font-medium text-gray-500">Next Run</p>
33
+ <p class="text-sm font-medium text-gray-500"><%= t("pgbus.recurring_tasks.show.next_run") %></p>
34
34
  <% if @task[:enabled] && @task[:next_run_at] %>
35
35
  <p class="mt-1 text-lg font-semibold text-gray-900 dark:text-white"><%= pgbus_time_ago_future(@task[:next_run_at]) %></p>
36
36
  <p class="text-xs text-gray-400"><%= @task[:next_run_at]&.strftime("%Y-%m-%d %H:%M:%S %Z") %></p>
@@ -40,50 +40,50 @@
40
40
  </div>
41
41
 
42
42
  <div class="rounded-lg bg-white dark:bg-gray-800 p-5 shadow ring-1 ring-gray-200 dark:ring-gray-700">
43
- <p class="text-sm font-medium text-gray-500">Status</p>
44
- <p class="mt-1"><%= @task[:enabled] ? pgbus_recurring_health_badge(@task) : raw('<span class="inline-flex items-center rounded-full bg-gray-100 px-2.5 py-0.5 text-xs font-medium text-gray-600">Disabled</span>') %></p>
43
+ <p class="text-sm font-medium text-gray-500"><%= t("pgbus.recurring_tasks.show.status") %></p>
44
+ <p class="mt-1"><%= @task[:enabled] ? pgbus_recurring_health_badge(@task) : content_tag(:span, t("pgbus.recurring_tasks.show.disabled"), class: "inline-flex items-center rounded-full bg-gray-100 px-2.5 py-0.5 text-xs font-medium text-gray-600") %></p>
45
45
  </div>
46
46
  </div>
47
47
 
48
48
  <div class="rounded-lg bg-white dark:bg-gray-800 shadow ring-1 ring-gray-200 dark:ring-gray-700 mb-8">
49
49
  <div class="px-4 py-3 border-b border-gray-200">
50
- <h2 class="text-lg font-medium text-gray-900 dark:text-white">Configuration</h2>
50
+ <h2 class="text-lg font-medium text-gray-900 dark:text-white"><%= t("pgbus.recurring_tasks.show.configuration") %></h2>
51
51
  </div>
52
52
  <div class="p-4">
53
53
  <dl class="grid grid-cols-1 sm:grid-cols-2 gap-4">
54
54
  <div>
55
- <dt class="text-sm font-medium text-gray-500">Job Class</dt>
55
+ <dt class="text-sm font-medium text-gray-500"><%= t("pgbus.recurring_tasks.show.labels.job_class") %></dt>
56
56
  <dd class="mt-1 text-sm text-gray-900 dark:text-white"><%= @task[:class_name] || "—" %></dd>
57
57
  </div>
58
58
  <% if @task[:command] %>
59
59
  <div>
60
- <dt class="text-sm font-medium text-gray-500">Command</dt>
60
+ <dt class="text-sm font-medium text-gray-500"><%= t("pgbus.recurring_tasks.show.labels.command") %></dt>
61
61
  <dd class="mt-1 text-sm text-gray-900 dark:text-white font-mono text-xs"><%= @task[:command] %></dd>
62
62
  </div>
63
63
  <% end %>
64
64
  <div>
65
- <dt class="text-sm font-medium text-gray-500">Queue</dt>
66
- <dd class="mt-1 text-sm text-gray-900 dark:text-white"><%= @task[:queue_name] || "default" %></dd>
65
+ <dt class="text-sm font-medium text-gray-500"><%= t("pgbus.recurring_tasks.show.labels.queue") %></dt>
66
+ <dd class="mt-1 text-sm text-gray-900 dark:text-white"><%= @task[:queue_name] || t("pgbus.recurring_tasks.show.default_queue") %></dd>
67
67
  </div>
68
68
  <div>
69
- <dt class="text-sm font-medium text-gray-500">Priority</dt>
69
+ <dt class="text-sm font-medium text-gray-500"><%= t("pgbus.recurring_tasks.show.labels.priority") %></dt>
70
70
  <dd class="mt-1 text-sm text-gray-900 dark:text-white"><%= @task[:priority] %></dd>
71
71
  </div>
72
72
  <% if @task[:arguments]&.any? %>
73
73
  <div class="sm:col-span-2">
74
- <dt class="text-sm font-medium text-gray-500">Arguments</dt>
74
+ <dt class="text-sm font-medium text-gray-500"><%= t("pgbus.recurring_tasks.show.labels.arguments") %></dt>
75
75
  <dd class="mt-1 text-sm text-gray-900 dark:text-white font-mono text-xs"><%= @task[:arguments].inspect %></dd>
76
76
  </div>
77
77
  <% end %>
78
78
  <% if @task[:description] %>
79
79
  <div class="sm:col-span-2">
80
- <dt class="text-sm font-medium text-gray-500">Description</dt>
80
+ <dt class="text-sm font-medium text-gray-500"><%= t("pgbus.recurring_tasks.show.labels.description") %></dt>
81
81
  <dd class="mt-1 text-sm text-gray-900 dark:text-white"><%= @task[:description] %></dd>
82
82
  </div>
83
83
  <% end %>
84
84
  <div>
85
- <dt class="text-sm font-medium text-gray-500">Source</dt>
86
- <dd class="mt-1 text-sm text-gray-900 dark:text-white"><%= @task[:static] ? "Config file" : "Dynamic" %></dd>
85
+ <dt class="text-sm font-medium text-gray-500"><%= t("pgbus.recurring_tasks.show.labels.source") %></dt>
86
+ <dd class="mt-1 text-sm text-gray-900 dark:text-white"><%= @task[:static] ? t("pgbus.recurring_tasks.show.source_config") : t("pgbus.recurring_tasks.show.source_dynamic") %></dd>
87
87
  </div>
88
88
  </dl>
89
89
  </div>
@@ -91,14 +91,14 @@
91
91
 
92
92
  <div class="rounded-lg bg-white dark:bg-gray-800 shadow ring-1 ring-gray-200 dark:ring-gray-700">
93
93
  <div class="px-4 py-3 border-b border-gray-200">
94
- <h2 class="text-lg font-medium text-gray-900 dark:text-white">Recent Executions</h2>
94
+ <h2 class="text-lg font-medium text-gray-900 dark:text-white"><%= t("pgbus.recurring_tasks.show.recent_executions") %></h2>
95
95
  </div>
96
96
  <% if @task[:executions]&.any? %>
97
97
  <table class="min-w-full divide-y divide-gray-200 dark:divide-gray-700">
98
98
  <thead class="bg-gray-50 dark:bg-gray-900">
99
99
  <tr>
100
- <th class="px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase">Scheduled For</th>
101
- <th class="px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase">Enqueued At</th>
100
+ <th class="px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"><%= t("pgbus.recurring_tasks.show.execution_headers.scheduled_for") %></th>
101
+ <th class="px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"><%= t("pgbus.recurring_tasks.show.execution_headers.enqueued_at") %></th>
102
102
  </tr>
103
103
  </thead>
104
104
  <tbody class="divide-y divide-gray-200 dark:divide-gray-700">
@@ -116,7 +116,7 @@
116
116
  </table>
117
117
  <% else %>
118
118
  <div class="p-8 text-center text-gray-500">
119
- <p>No executions recorded yet</p>
119
+ <p><%= t("pgbus.recurring_tasks.show.no_executions") %></p>
120
120
  </div>
121
121
  <% end %>
122
122
  </div>
@@ -0,0 +1,41 @@
1
+ ---
2
+ # i18n-tasks configuration for Pgbus engine
3
+ # https://github.com/glebm/i18n-tasks
4
+
5
+ base_locale: en
6
+ locales: [en, da, de, es, fi, fr, it, ja, nb, nl, pt, sv]
7
+
8
+ data:
9
+ router: pattern_router
10
+ read:
11
+ - config/locales/%{locale}.yml
12
+ - config/locales/**/*.%{locale}.yml
13
+ write:
14
+ - config/locales/%{locale}.yml
15
+ yaml:
16
+ write:
17
+ line_width: -1
18
+
19
+ search:
20
+ paths:
21
+ - app/
22
+ exclude:
23
+ - "*.md"
24
+ - app/assets/images
25
+ strict: false
26
+
27
+ translation:
28
+ backend: openai
29
+ openai_api_key: <%= ENV["OPENAI_API_KEY"] %>
30
+ openai_model: gpt-4.1-mini
31
+
32
+ ignore_missing:
33
+ - "activerecord.*"
34
+
35
+ ignore_unused:
36
+ - "pgbus.helpers.*"
37
+ - "pgbus.insights.show.time_ranges.*"
38
+ - "pgbus.insights.show.charts.series_name"
39
+ - "pgbus.insights.show.charts.failed_to_load"
40
+ - "pgbus.insights.show.charts.no_data"
41
+ - "pgbus.recurring_tasks.index.task_count.*"
@@ -0,0 +1,348 @@
1
+ ---
2
+ da:
3
+ pgbus:
4
+ dashboard:
5
+ processes_table:
6
+ empty: Ingen processer kører
7
+ headers:
8
+ host: Vært
9
+ kind: Type
10
+ pid: PID
11
+ status: Status
12
+ title: Aktive processer
13
+ queues_table:
14
+ empty: Ingen køer fundet
15
+ headers:
16
+ depth: Dybde
17
+ oldest: Ældste (s)
18
+ queue: Kø
19
+ total: Total
20
+ visible: Synlig
21
+ title: Køer
22
+ view_all: Se alle
23
+ recent_failures:
24
+ empty: Ingen fejl
25
+ headers:
26
+ error: Fejl
27
+ queue: Kø
28
+ when: Hvornår
29
+ title: Seneste fejl
30
+ view_all: Se alle
31
+ show:
32
+ title: Dashboard
33
+ stats_cards:
34
+ enqueued: Sat i kø
35
+ failed_dlq: Mislykkedes / DLQ
36
+ processes: Processer
37
+ queues: Køer
38
+ recurring: Gentagende
39
+ throughput: Gennemløb
40
+ throughput_unit: besk/s
41
+ view_tasks: Se opgaver
42
+ visible: synlig
43
+ dead_letter:
44
+ index:
45
+ discard_all: Kassér alle
46
+ discard_all_confirm: Slet permanent alle DLQ-beskeder?
47
+ retry_all: Prøv igen alle
48
+ retry_all_confirm: Prøv igen alle DLQ-beskeder?
49
+ title: Dead Letter Queue
50
+ messages_table:
51
+ arguments: Argumenter
52
+ discard: Kassér
53
+ discard_confirm: Slet permanent?
54
+ empty: Dead letter queue er tom
55
+ full_json_payload: Fuld JSON-payload
56
+ headers:
57
+ enqueued: Sat i kø
58
+ id: ID
59
+ job_class: Jobklasse
60
+ reads: Læsninger
61
+ source_queue: Kildekø
62
+ headers_section: Headers
63
+ job_id: 'Job ID:'
64
+ metadata: Metadata
65
+ metadata_labels:
66
+ executions: 'Udførelser:'
67
+ last_read: 'Sidst læst:'
68
+ priority: 'Prioritet:'
69
+ queue: 'Kø:'
70
+ visible_at: 'Synlig ved:'
71
+ retry: Forsøg igen
72
+ show:
73
+ back: Tilbage til DLQ
74
+ discard: Kassér
75
+ discard_confirm: Slet permanent?
76
+ headers: Overskrifter
77
+ labels:
78
+ enqueued_at: Indsat kl.
79
+ read_count: Antal læsninger
80
+ source_queue: Kildekø
81
+ visibility_timeout: Synlighedstimeout
82
+ not_found: Besked ikke fundet
83
+ payload: Indhold
84
+ retry: Forsøg igen
85
+ title: 'DLQ-besked #%{id}'
86
+ events:
87
+ index:
88
+ processed_empty: Ingen begivenheder behandlet endnu
89
+ processed_headers:
90
+ event_id: Begivenheds-ID
91
+ handler: Håndterer
92
+ processed_at: Behandlet kl.
93
+ processed_title: Behandlede begivenheder
94
+ subscribers_empty: Ingen abonnenter registreret
95
+ subscribers_headers:
96
+ handler: Håndterer
97
+ pattern: Mønster
98
+ queue: Kø
99
+ subscribers_title: Registrerede abonnenter
100
+ title: Begivenheder
101
+ show:
102
+ back: Tilbage til begivenheder
103
+ labels:
104
+ event_id: Begivenheds-ID
105
+ handler: Håndterer
106
+ processed_at: Behandlet kl.
107
+ not_found: Begivenhed ikke fundet
108
+ title: Begivenhed %{event_id}
109
+ helpers:
110
+ paused_badge: Pause
111
+ queue_badge:
112
+ dlq: DLQ
113
+ queue: Kø
114
+ recurring_health:
115
+ active: Aktiv
116
+ pending: Afventer
117
+ status_badge:
118
+ healthy: Sund
119
+ stale: Forældet
120
+ insights:
121
+ show:
122
+ charts:
123
+ failed_to_load: Kunne ikke indlæse diagramdata
124
+ no_data: Ingen data endnu
125
+ series_name: Job/min
126
+ status_distribution: Statusfordeling
127
+ throughput: Gennemstrømning (job/min)
128
+ description_html: Jobpræstationsmålinger for de sidste %{range}
129
+ slowest:
130
+ empty: Ingen jobstatistikker endnu
131
+ headers:
132
+ avg: Gns.
133
+ count: Antal
134
+ job_class: Jobklasse
135
+ max: Max
136
+ title: Langsommeste jobklasser (gennemsnitlig varighed)
137
+ summary:
138
+ avg_duration: Gennemsnitlig varighed
139
+ dead_lettered: Døde breve
140
+ failed: Mislykkedes
141
+ max_duration: Maksimal varighed
142
+ succeeded: Succesfuld
143
+ total_jobs: Totale job
144
+ time_ranges:
145
+ 1h: 1t
146
+ 24h: 24t
147
+ 30d: 30d
148
+ 7d: 7d
149
+ title: Indsigter
150
+ jobs:
151
+ enqueued_table:
152
+ arguments: Argumenter
153
+ empty: Ingen job i kø
154
+ full_json_payload: Fuld JSON-payload
155
+ headers:
156
+ enqueued: I kø
157
+ id: ID
158
+ job_class: Jobklasse
159
+ queue: Kø
160
+ reads: Læsninger
161
+ headers_section: Headers
162
+ job_id: 'Job ID:'
163
+ metadata: Metadata
164
+ metadata_labels:
165
+ last_read: 'Sidste læsning:'
166
+ locale: 'Locale:'
167
+ priority: 'Prioritet:'
168
+ queue: 'Kø:'
169
+ scheduled: 'Planlagt:'
170
+ timezone: 'Tidszone:'
171
+ visible_at: 'Synlig fra:'
172
+ title: Job i kø
173
+ failed_table:
174
+ discard: Kassér
175
+ discard_confirm: Kassér dette job?
176
+ empty: Ingen mislykkede job
177
+ headers:
178
+ actions: Handlinger
179
+ error: Fejl
180
+ failed: Mislykkedes
181
+ id: ID
182
+ queue: Kø
183
+ retries: Forsøg
184
+ retry: Forsøg igen
185
+ title: Mislykkede job
186
+ index:
187
+ discard_all: Kassér alle
188
+ discard_all_confirm: Kassér alle mislykkede job?
189
+ retry_all: Forsøg alle igen
190
+ retry_all_confirm: Forsøg alle mislykkede job igen?
191
+ title: Job
192
+ show:
193
+ back: Tilbage til job
194
+ backtrace: Stacktrace
195
+ discard: Kassér
196
+ discard_confirm: Slet dette job permanent?
197
+ error_message: Fejlmeddelelse
198
+ labels:
199
+ error_class: Fejlklasse
200
+ failed_at: Mislykkedes ved
201
+ queue: Kø
202
+ retry_count: Antal forsøg
203
+ not_found: Job ikke fundet
204
+ payload: Indhold
205
+ retry: Forsøg igen
206
+ title: 'Mislykket job #%{id}'
207
+ layout:
208
+ brand: Pgbus
209
+ nav:
210
+ dashboard: Dashboard
211
+ dlq: DLQ
212
+ events: Begivenheder
213
+ insights: Indsigter
214
+ jobs: Jobs
215
+ locks: Låse
216
+ outbox: Udbakke
217
+ processes: Processer
218
+ queues: Køer
219
+ recurring: Gentagende
220
+ title: Pgbus Dashboard
221
+ toggle_dark_mode: Skift til mørk tilstand
222
+ locks:
223
+ index:
224
+ description: Aktive unikke låse forhindrer duplikeret jobudførelse
225
+ empty: Ingen aktive låse
226
+ executing: Udfører
227
+ headers:
228
+ age: Alder
229
+ expires: Udløber
230
+ job_class: Jobklasse
231
+ lock_key: Låsenøgle
232
+ owner: Ejer
233
+ state: Status
234
+ queued: I kø
235
+ title: Joblåse
236
+ outbox:
237
+ index:
238
+ description: Transaktionelle udbakke-poster, der venter på publicering til PGMQ
239
+ empty: Ingen udbakkeposter
240
+ headers:
241
+ created: Oprettet
242
+ id: ID
243
+ payload: Indhold
244
+ priority: Prioritet
245
+ queue_topic: Kø / Emne
246
+ status: Status
247
+ pending: Afventer
248
+ published: Publiceret
249
+ stats:
250
+ no_age: "—"
251
+ oldest_age: "%{seconds}s"
252
+ oldest_unpublished: Ældste upublicerede
253
+ total: Total
254
+ unpublished: Upubliceret
255
+ title: Udbakke
256
+ processes:
257
+ index:
258
+ title: Processer
259
+ processes_table:
260
+ empty: Ingen processer kører
261
+ headers:
262
+ hostname: Værtsnavn
263
+ kind: Type
264
+ last_heartbeat: Sidste Heartbeat
265
+ metadata: Metadata
266
+ pid: PID
267
+ status: Status
268
+ queues:
269
+ index:
270
+ title: Køer
271
+ queues_list:
272
+ empty: Ingen køer fundet
273
+ headers:
274
+ actions: Handlinger
275
+ depth: Dybde
276
+ newest: Nyeste (s)
277
+ oldest: Ældste (s)
278
+ queue: Kø
279
+ total_ever: Total nogensinde
280
+ visible: Synlig
281
+ pause: Pause
282
+ pause_confirm: Pause behandling i %{name}?
283
+ paused: Pauset
284
+ purge: Rens
285
+ purge_confirm: Rens alle beskeder fra %{name}?
286
+ resume: Genoptag
287
+ show:
288
+ depth: 'Dybde:'
289
+ empty: Køen er tom
290
+ headers:
291
+ enqueued: Sat i kø
292
+ id: ID
293
+ payload: Indhold
294
+ reads: Læsninger
295
+ vt: VT
296
+ purge_confirm: Rens alle beskeder?
297
+ purge_queue: Rens kø
298
+ total: 'Total:'
299
+ visible: 'Synlig:'
300
+ recurring_tasks:
301
+ index:
302
+ task_count:
303
+ one: "%{count} opgave konfigureret"
304
+ other: "%{count} opgaver konfigureret"
305
+ title: Gentagne opgaver
306
+ show:
307
+ back: Tilbage
308
+ configuration: Konfiguration
309
+ default_queue: standard
310
+ disable: Deaktiver
311
+ disabled: Deaktiveret
312
+ enable: Aktiver
313
+ execution_headers:
314
+ enqueued_at: Sat i kø den
315
+ scheduled_for: Planlagt til
316
+ labels:
317
+ arguments: Argumenter
318
+ command: Kommando
319
+ description: Beskrivelse
320
+ job_class: Jobklasse
321
+ priority: Prioritet
322
+ queue: Kø
323
+ source: Kilde
324
+ next_run: Næste kørsel
325
+ no_executions: Ingen udførelser registreret endnu
326
+ recent_executions: Seneste udførelser
327
+ run_now: Kør nu
328
+ schedule: Planlæg
329
+ source_config: Konfigurationsfil
330
+ source_dynamic: Dynamisk
331
+ status: Status
332
+ tasks_table:
333
+ default_queue: standard
334
+ disable: Deaktiver
335
+ disabled: Deaktiveret
336
+ empty_hint: Tilføj opgaver til config/recurring.yml
337
+ empty_title: Ingen tilbagevendende opgaver konfigureret
338
+ enable: Aktiver
339
+ headers:
340
+ actions: Handlinger
341
+ last_run: Sidste kørsel
342
+ next_run: Næste kørsel
343
+ queue: Kø
344
+ schedule: Planlæg
345
+ status: Status
346
+ task: Opgave
347
+ never: Aldrig
348
+ run_now: Kør nu