bulkrax 9.4.1 → 9.4.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 (48) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +8 -2
  3. data/app/assets/javascripts/bulkrax/datatables.js +43 -8
  4. data/app/assets/javascripts/bulkrax/importers_stepper.js +221 -26
  5. data/app/assets/stylesheets/bulkrax/stepper/_review.scss +14 -12
  6. data/app/controllers/bulkrax/entries_controller.rb +2 -2
  7. data/app/controllers/bulkrax/exporters_controller.rb +3 -3
  8. data/app/controllers/bulkrax/guided_imports_controller.rb +3 -1
  9. data/app/controllers/bulkrax/importers_controller.rb +5 -5
  10. data/app/jobs/bulkrax/importer_job.rb +3 -0
  11. data/app/matchers/bulkrax/application_matcher.rb +5 -6
  12. data/app/models/bulkrax/csv_entry.rb +1 -1
  13. data/app/parsers/bulkrax/csv_parser.rb +15 -12
  14. data/app/parsers/concerns/bulkrax/csv_parser/csv_template_generation.rb +4 -1
  15. data/app/parsers/concerns/bulkrax/csv_parser/csv_validation.rb +10 -8
  16. data/app/parsers/concerns/bulkrax/csv_parser/csv_validation_helpers.rb +68 -35
  17. data/app/parsers/concerns/bulkrax/csv_parser/csv_validation_hierarchy.rb +9 -7
  18. data/app/services/bulkrax/csv_template/file_validator.rb +1 -1
  19. data/app/services/bulkrax/csv_template/mapping_manager.rb +15 -6
  20. data/app/services/bulkrax/csv_template/split_formatter.rb +10 -3
  21. data/app/services/bulkrax/split_pattern_coercion.rb +42 -0
  22. data/app/services/bulkrax/stepper_response_formatter.rb +2 -1
  23. data/app/services/bulkrax/validation_error_csv_builder.rb +36 -12
  24. data/app/validators/bulkrax/csv_row/child_reference.rb +2 -1
  25. data/app/validators/bulkrax/csv_row/parent_reference.rb +1 -1
  26. data/app/validators/bulkrax/csv_row/required_values.rb +17 -3
  27. data/app/views/bulkrax/exporters/edit.html.erb +1 -1
  28. data/app/views/bulkrax/exporters/index.html.erb +3 -1
  29. data/app/views/bulkrax/exporters/new.html.erb +1 -1
  30. data/app/views/bulkrax/exporters/show.html.erb +1 -1
  31. data/app/views/bulkrax/guided_imports/new.html.erb +7 -0
  32. data/app/views/bulkrax/importers/_edit_item_buttons.html.erb +3 -3
  33. data/app/views/bulkrax/importers/index.html.erb +2 -0
  34. data/app/views/bulkrax/importers/new.html.erb +1 -1
  35. data/app/views/bulkrax/importers/show.html.erb +3 -1
  36. data/app/views/bulkrax/shared/_datatable_i18n.html.erb +3 -0
  37. data/config/locales/bulkrax.de.yml +89 -0
  38. data/config/locales/bulkrax.en.yml +52 -0
  39. data/config/locales/bulkrax.es.yml +89 -0
  40. data/config/locales/bulkrax.fr.yml +89 -0
  41. data/config/locales/bulkrax.it.yml +89 -0
  42. data/config/locales/bulkrax.pt-BR.yml +89 -0
  43. data/config/locales/bulkrax.zh.yml +90 -0
  44. data/db/migrate/20260424081537_remove_parents_from_bulkrax_importer_runs.rb +9 -0
  45. data/db/migrate/20260429000000_remove_orphan_columns_from_bulkrax_importer_runs.rb +11 -0
  46. data/lib/bulkrax/version.rb +1 -1
  47. data/lib/bulkrax.rb +15 -1
  48. metadata +8 -4
@@ -520,6 +520,13 @@
520
520
  </div>
521
521
  </div>
522
522
 
523
+ <div class="review-section review-errors" style="display: none;">
524
+ <h4><%= t('bulkrax.importer.guided_import.step3.section_errors') %></h4>
525
+ <div class="review-errors-list">
526
+ <!-- Will be populated by JS -->
527
+ </div>
528
+ </div>
529
+
523
530
  <div class="review-section review-warnings" style="display: none;">
524
531
  <h4><%= t('bulkrax.importer.guided_import.step3.section_warnings') %></h4>
525
532
  <div class="review-warnings-list">
@@ -2,12 +2,12 @@
2
2
  <div class="modal-dialog" role="document">
3
3
  <div class="modal-content">
4
4
  <div class="modal-body">
5
- <h5>Options for Updating an Entry</h5>
5
+ <h5><%= t('bulkrax.importer.edit_form.entry_modal_title') %></h5>
6
6
  <hr />
7
- <p>Rebuild metadata and files.</p>
7
+ <p><%= t('bulkrax.importer.edit_form.entry_rebuild_hint') %></p>
8
8
  <%= link_to t('helpers.action.importer.build'), item_entry_path(item, e), method: :patch, class: 'btn btn-primary' %>
9
9
  <hr />
10
- <p>Remove existing work and then recreate the works metadata and files.</p>
10
+ <p><%= t('bulkrax.importer.edit_form.entry_remove_and_recreate_hint') %></p>
11
11
  <%= link_to t('helpers.action.importer.remove_and_build'), item_entry_path(item, e, destroy_first: true), method: :patch, class: 'btn btn-primary' %>
12
12
  </div>
13
13
  <div class="modal-footer">
@@ -16,6 +16,8 @@
16
16
  <meta name="turbolinks-cache-control" content="no-cache">
17
17
  <% end %>
18
18
 
19
+ <%= render 'bulkrax/shared/datatable_i18n' %>
20
+
19
21
  <div class="panel card panel-default">
20
22
  <div class="panel-body card-body">
21
23
  <div class="table-responsive">
@@ -1,5 +1,5 @@
1
1
  <% provide :page_header do %>
2
- <h1><span class="fa fa-edit" aria-hidden="true"></span> New Importer</h1>
2
+ <h1><span class="fa fa-edit" aria-hidden="true"></span> <%= t('bulkrax.headings.new_importer') %></h1>
3
3
  <% end %>
4
4
  <div class="row">
5
5
  <div class="col-md-12">
@@ -1,3 +1,5 @@
1
+ <%= render 'bulkrax/shared/datatable_i18n' %>
2
+
1
3
  <div class="col-xs-12 main-header d-flex justify-content-between align-items-center">
2
4
  <h1><span class="fa fa-cloud-upload" aria-hidden="true"></span> Importer: <%= @importer.name %></h1>
3
5
  <div class="pull-right">
@@ -58,7 +60,7 @@
58
60
  <div class="accordion-container">
59
61
  <div class="accordion-heading" role="tab" id="parser-fields-heading">
60
62
  <a class="accordion-title" role="button" data-toggle="collapse" data-target="#parser-fields-importer-show" aria-expanded="true" aria-controls="parser-fields-importer-show">
61
- Parser fields:
63
+ <%= t('bulkrax.importer.labels.parser_fields') %>:
62
64
  </a>
63
65
  <a role="button" data-toggle="collapse" data-target="#parser-fields-importer-show" aria-expanded="true" aria-controls="parser-fields-importer-show">
64
66
  <div class="accordion-icon fa fa-times-circle" aria-hidden="true"></div>
@@ -0,0 +1,3 @@
1
+ <script>
2
+ window.BulkraxI18n = Object.assign({}, window.BulkraxI18n || {}, { datatable: <%= raw json_escape(I18n.t('bulkrax.datatable').to_json) %> });
3
+ </script>
@@ -17,13 +17,23 @@ de:
17
17
  record_link: "%{record_type} Link"
18
18
  unknown: Unbekannt
19
19
  exporter:
20
+ hints:
21
+ generated_metadata: Diese exportierten Felder können derzeit nicht importiert werden.
22
+ include_thumbnails: Diese exportierten Felder können derzeit nicht importiert werden.
23
+ limit: Lassen Sie das Feld leer oder geben Sie 0 ein, um alle Datensätze einzuschließen.
20
24
  labels:
21
25
  all: Alle
22
26
  collection: Sammlung
27
+ collection_entries: Sammlungseinträge
28
+ download: Herunterladen
29
+ export_format: Exportformat
23
30
  export_from: Exportieren von
24
31
  export_source: Exportquelle
25
32
  export_type: Art des Exports
26
33
  field_mapping: Feldzuordnung
34
+ file_set_entries: Dateisatzeinträge
35
+ filter_by_date: Nach Datum filtern
36
+ finish_date: Enddatum
27
37
  full: Metadaten und Dateien
28
38
  generated_metadata: Generierte Metadaten einbeziehen?
29
39
  importer: Importeur
@@ -33,7 +43,20 @@ de:
33
43
  name: Name
34
44
  parser_fields: Parserfelder
35
45
  parser_klass: Parser
46
+ start_date: Startdatum
47
+ status: Status
48
+ total_entries: Gesamtzahl der Einträge
49
+ total_work_entries: Gesamtzahl der Werke
36
50
  user: Benutzer
51
+ work_entries: Werkeinträge
52
+ workflow_status:
53
+ approved: Genehmigt
54
+ broken_url: Defekte URL
55
+ deleted: Gelöscht
56
+ in_process: In Bearbeitung
57
+ ingested: Aufgenommen
58
+ needs_repair: Benötigt Reparatur
59
+ unapproved: Nicht genehmigt
37
60
  worktype: Arbeitsart
38
61
  prompts:
39
62
  export_from: Bitte wählen Sie eine Exportquelle aus.
@@ -45,8 +68,14 @@ de:
45
68
  one: 'Ein Fehler verhinderte das Speichern dieses Exporters:'
46
69
  other: "%{count}-Fehler verhinderten das Speichern dieses Exporters:"
47
70
  headings:
71
+ edit_exporter: Exporter bearbeiten
72
+ edit_importer: Importer bearbeiten
73
+ exporters: Exporteure
48
74
  importers: Importeure
75
+ new_exporter: Neuer Exporter
76
+ new_importer: Neuer Importer
49
77
  upload_corrected_entries: 'Korrigierte Einträge hochgeladen: %{name}'
78
+ upload_corrected_entries_action: Korrigierte Einträge hochladen
50
79
  importer:
51
80
  bagit:
52
81
  bags_to_import: 'Zu importierender Beutel oder Beutel:'
@@ -77,6 +106,9 @@ de:
77
106
  private: Privat
78
107
  public: Öffentlich
79
108
  edit_form:
109
+ entry_modal_title: Optionen zum Aktualisieren eines Eintrags
110
+ entry_rebuild_hint: Metadaten und Dateien neu erstellen.
111
+ entry_remove_and_recreate_hint: Bestehendes Werk entfernen und anschließend Metadaten und Dateien des Werks neu erstellen.
80
112
  modal_title: Optionen zum Aktualisieren des Importers
81
113
  remove_and_rerun_hint: Löschen Sie alle Ihre Arbeiten und führen Sie den Import anschließend erneut von einer leeren Seite aus. Dadurch werden alle Dateien und Verknüpfungen entfernt, und alle seit dem letzten Import vorgenommenen Änderungen gehen verloren.
82
114
  update_and_harvest_hint: Aktualisieren Sie die Werte im Importformular und aktualisieren Sie die Elemente, die sich in der Quelle geändert haben.
@@ -96,19 +128,23 @@ de:
96
128
  override_rights_statement: Wenn diese Option aktiviert ist, wird immer die ausgewählte Rechteanweisung verwendet. Wenn sie deaktiviert ist, werden die Rechteanweisung oder die Rechteanweisung aus dem Datensatz verwendet. Der angegebene Wert wird nur verwendet, wenn dc:rights leer ist.
97
129
  labels:
98
130
  admin_set: Verwaltungssatz
131
+ collection_entries: Sammlungseinträge
99
132
  entry_id: Eintrags-ID
100
133
  exporter: Exporteur
134
+ file_set_entries: Dateisatzeinträge
101
135
  frequency: Frequenz
102
136
  identifier: Kennung
103
137
  importer: Importeur
104
138
  limit: Limit
105
139
  name: Name
140
+ parser_fields: Parserfelder
106
141
  parser_klass: Parser
107
142
  total_collections: Gesamteinnahmen
108
143
  total_file_sets: Gesamtdateisätze
109
144
  total_work_entries: Total Works
110
145
  type: Typ
111
146
  user: Benutzer
147
+ work_entries: Werkeinträge
112
148
  oai:
113
149
  hints:
114
150
  metadata_prefix: Zum Beispiel oai_dc, dcterms oder oai_qdc
@@ -185,6 +221,8 @@ de:
185
221
  review_total: "%{total} Gesamt — %{collections} Sammlungen, %{works} Werke, %{file_sets} Dateisätze"
186
222
  review_visibility: 'Sichtweite:'
187
223
  server_error: Bei der Validierung ist ein Serverfehler aufgetreten. Bitte versuchen Sie es erneut oder kontaktieren Sie den Support.
224
+ existing_record_badge: vorhanden
225
+ existing_record_title: Dieser Datensatz ist bereits im Repository vorhanden und wird beim Import verknüpft.
188
226
  shared_badge: geteilt
189
227
  starting: Es geht los...
190
228
  upload_csv_and_zip: CSV-Dateien + separat hochgeladene Dateien
@@ -199,9 +237,20 @@ de:
199
237
  validating: Validierung läuft...
200
238
  validation_failed: Die Validierung ist fehlgeschlagen. Bitte versuchen Sie es erneut.
201
239
  validation_timeout: Die Validierung ist fehlgeschlagen. Ihre Dateien sind möglicherweise zu groß. Bitte versuchen Sie es mit kleineren Dateien oder kontaktieren Sie den Support.
240
+ validation_truncated_note: auf %{shown} gekürzt – laden Sie die Fehler-CSV für die vollständige Liste herunter
241
+ validation_truncated_tooltip: Diese Liste ist begrenzt, damit die Seite übersichtlich bleibt. Die vollständige Liste finden Sie in der heruntergeladenen Fehler-CSV-Datei.
202
242
  visibility_institution: Institution
203
243
  visibility_private: Privat
204
244
  visibility_public: Öffentlich
245
+ warning_category_circular_reference: Zirkelbezug
246
+ warning_category_default_work_type_used: Standard-Werktyp verwendet
247
+ warning_category_duplicate_source_identifier: Doppelter Quell-Identifikator in CSV
248
+ warning_category_existing_source_identifier: Vorhandener Quell-Identifikator (wird aktualisiert)
249
+ warning_category_invalid_child_reference: Ungültige Kind-Referenz
250
+ warning_category_invalid_controlled_value: Ungültiger Wert aus kontrolliertem Vokabular
251
+ warning_category_invalid_parent_reference: Ungültige Eltern-Referenz
252
+ warning_category_missing_required_value: Erforderlicher Wert fehlt
253
+ warning_category_missing_source_identifier: Quell-Identifikator fehlt
205
254
  zip_limit: 'Es ist nur eine ZIP-Datei zulässig. Folgende Dateien wurden nicht hinzugefügt:'
206
255
  nav:
207
256
  back: Zurück
@@ -264,6 +313,7 @@ de:
264
313
  large_import_message_html: Sie sind im Begriff, <span class="total-items-count">%{count}</span> Artikel zu importieren. Große Importe dauern länger und sind schwieriger zu beheben. Erwägen Sie, den Import in kleinere Pakete aufzuteilen.
265
314
  large_import_warning: Warnung vor großen Importen
266
315
  ready_to_import: Bereit zum Importieren
316
+ section_errors: Fehler
267
317
  section_files: Dateien
268
318
  section_records: Aufzeichnungen
269
319
  section_settings: Einstellungen
@@ -324,6 +374,14 @@ de:
324
374
  errors:
325
375
  message: "Das referenzierte übergeordnete Element '%{value}' existiert nicht als %{field} in dieser CSV-Datei."
326
376
  suggestion: "Prüfen Sie auf Tippfehler oder fügen Sie den Datensatz für das übergeordnete Element hinzu."
377
+ child_reference_validator:
378
+ errors:
379
+ message: "Das referenzierte untergeordnete Element '%{value}' existiert nicht als %{field} in dieser CSV-Datei."
380
+ suggestion: "Prüfen Sie auf Tippfehler oder fügen Sie den Datensatz für das untergeordnete Element hinzu."
381
+ circular_reference_validator:
382
+ errors:
383
+ message: "'%{value}' ist Teil einer zirkulären Eltern-Kind-Beziehung."
384
+ suggestion: "Überprüfen Sie die Eltern-/Kind-Spalten und entfernen Sie die fehlerhaften Referenzen."
327
385
  passed: Validierung erfolgreich
328
386
  passed_warnings: Validierung mit Warnungen bestanden
329
387
  recognized_fields: 'Erkannte Felder: %{fields}'
@@ -340,7 +398,14 @@ de:
340
398
  errors:
341
399
  message: "Das Feld '%{field}' ist erforderlich, ist aber für diese Zeile leer."
342
400
  suggestion: "Geben Sie einen Wert für '%{field}' ein."
401
+ validation_error_csv_builder:
402
+ empty_column: "Spalte %{column} hat keine Überschrift und wird beim Import ignoriert"
403
+ missing_file: "Fehlende Datei: %{filename}"
404
+ missing_required_column: "Fehlende Pflichtspalte '%{field}' (%{model})"
405
+ unrecognized_column: "Unbekannte Spalte '%{column}'"
406
+ unrecognized_column_with_suggestion: "Unbekannte Spalte '%{column}' (meinten Sie '%{suggestion}'?)"
343
407
  unable_to_process: Die Validierungsdateien konnten nicht verarbeitet werden.
408
+ empty_column: 'Spalte %{column} (keine Überschrift)'
344
409
  notices_desc: 'Diese Hinweise können Auswirkungen auf den Import Ihrer CSV-Datei haben:'
345
410
  notices_title: Importhinweise
346
411
  unrecognized_desc: 'Diese Spalten werden beim Import ignoriert:'
@@ -405,11 +470,35 @@ de:
405
470
  name: Name
406
471
  next_run: Nächster Lauf
407
472
  status: Status
473
+ status_set_at: Status gesetzt am
408
474
  total_collection_entries: Gesamtzahl der Sammlungseinträge
409
475
  total_file_set_entries: Gesamtzahl der Dateisätze
410
476
  total_work_entries: Gesamtzahl der Arbeitseinsätze
411
477
  type: Typ
412
478
  updated_at: Aktualisiert am
479
+ datatable:
480
+ filters:
481
+ filter_by_entry_class: Nach Eintragsklasse filtern
482
+ filter_by_status: Nach Status filtern
483
+ language:
484
+ empty_table: Keine Daten in der Tabelle verfügbar
485
+ info: Zeige _START_ bis _END_ von _TOTAL_ Einträgen
486
+ info_empty: Zeige 0 bis 0 von 0 Einträgen
487
+ info_filtered: (gefiltert aus _MAX_ Gesamteinträgen)
488
+ length_menu: _MENU_ Einträge anzeigen
489
+ loading_records: Lade...
490
+ next: Weiter
491
+ previous: Zurück
492
+ processing: Wird verarbeitet...
493
+ search: 'Suche:'
494
+ zero_records: Keine passenden Einträge gefunden
495
+ status:
496
+ complete: Abgeschlossen
497
+ complete_with_failures: Abgeschlossen (mit Fehlern)
498
+ deleted: Gelöscht
499
+ failed: Fehlgeschlagen
500
+ pending: Ausstehend
501
+ skipped: Übersprungen
413
502
  helpers:
414
503
  action:
415
504
  exporter:
@@ -25,6 +25,7 @@ en:
25
25
  all: All
26
26
  collection: Collection
27
27
  collection_entries: Collection Entries
28
+ download: Download
28
29
  export_format: Export Format
29
30
  export_from: Export From
30
31
  export_source: Export Source
@@ -67,8 +68,14 @@ en:
67
68
  one: '1 error prohibited this exporter from being saved:'
68
69
  other: "%{count} errors prohibited this exporter from being saved:"
69
70
  headings:
71
+ edit_exporter: Edit Exporter
72
+ edit_importer: Edit Importer
73
+ exporters: Exporters
70
74
  importers: Importers
75
+ new_exporter: New Exporter
76
+ new_importer: New Importer
71
77
  upload_corrected_entries: 'Upload Corrected Entries: %{name}'
78
+ upload_corrected_entries_action: Upload Corrected Entries
72
79
  importer:
73
80
  bagit:
74
81
  bags_to_import: 'Bag or Bags to Import:'
@@ -99,6 +106,9 @@ en:
99
106
  private: Private
100
107
  public: Public
101
108
  edit_form:
109
+ entry_modal_title: Options for Updating an Entry
110
+ entry_rebuild_hint: Rebuild metadata and files.
111
+ entry_remove_and_recreate_hint: Remove existing work and then recreate the works metadata and files.
102
112
  modal_title: Options for Updating the Importer
103
113
  remove_and_rerun_hint: Remove all works and then run the import again from a clean slate. This will remove all files and associations and any edits made since the last import will be lost.
104
114
  update_and_harvest_hint: Update the values in the importer form and update items that have changed at the source.
@@ -127,6 +137,7 @@ en:
127
137
  importer: Importer
128
138
  limit: Limit
129
139
  name: Name
140
+ parser_fields: Parser fields
130
141
  parser_klass: Parser
131
142
  total_collections: Total Collections
132
143
  total_file_sets: Total File Sets
@@ -226,9 +237,20 @@ en:
226
237
  validating: Validating...
227
238
  validation_failed: Validation failed. Please try again.
228
239
  validation_timeout: Validation timed out. Your files may be too large. Please try with smaller files or contact support.
240
+ validation_truncated_note: truncated to %{shown} — download errors CSV for full list
241
+ validation_truncated_tooltip: This list is capped to keep the page readable. The full list is in the Download errors CSV file.
229
242
  visibility_institution: Institution
230
243
  visibility_private: Private
231
244
  visibility_public: Public
245
+ warning_category_circular_reference: Circular reference
246
+ warning_category_default_work_type_used: Default work type used
247
+ warning_category_duplicate_source_identifier: Duplicate source identifier in CSV
248
+ warning_category_existing_source_identifier: Existing source identifier (will update)
249
+ warning_category_invalid_child_reference: Invalid child reference
250
+ warning_category_invalid_controlled_value: Invalid controlled vocabulary value
251
+ warning_category_invalid_parent_reference: Invalid parent reference
252
+ warning_category_missing_required_value: Missing required value
253
+ warning_category_missing_source_identifier: Missing source identifier
232
254
  zip_limit: 'Only 1 ZIP file allowed. The following files were not added:'
233
255
  nav:
234
256
  back: Back
@@ -291,6 +313,7 @@ en:
291
313
  large_import_message_html: You're about to import <span class="total-items-count">%{count}</span> items. Large imports take longer and are harder to troubleshoot. Consider splitting into smaller batches.
292
314
  large_import_warning: Large Import Warning
293
315
  ready_to_import: Ready to Import
316
+ section_errors: Errors
294
317
  section_files: Files
295
318
  section_records: Records
296
319
  section_settings: Settings
@@ -375,6 +398,12 @@ en:
375
398
  errors:
376
399
  message: "Field '%{field}' is required but is empty for this row."
377
400
  suggestion: "Add a value for '%{field}'."
401
+ validation_error_csv_builder:
402
+ empty_column: "Column %{column} has no header and will be ignored during import"
403
+ missing_file: "Missing file: %{filename}"
404
+ missing_required_column: "Missing required column '%{field}' (%{model})"
405
+ unrecognized_column: "Unrecognized column '%{column}'"
406
+ unrecognized_column_with_suggestion: "Unrecognized column '%{column}' (did you mean '%{suggestion}'?)"
378
407
  unable_to_process: Unable to process files for validation
379
408
  empty_column: 'Column %{column} (no header)'
380
409
  notices_desc: 'These notices may affect how your CSV is imported:'
@@ -447,6 +476,29 @@ en:
447
476
  total_work_entries: Total Work Entries
448
477
  type: Type
449
478
  updated_at: Updated At
479
+ datatable:
480
+ filters:
481
+ filter_by_entry_class: Filter by Entry Class
482
+ filter_by_status: Filter by Status
483
+ language:
484
+ empty_table: No data available in table
485
+ info: Showing _START_ to _END_ of _TOTAL_ entries
486
+ info_empty: Showing 0 to 0 of 0 entries
487
+ info_filtered: (filtered from _MAX_ total entries)
488
+ length_menu: Show _MENU_ entries
489
+ loading_records: Loading...
490
+ next: Next
491
+ previous: Previous
492
+ processing: Processing...
493
+ search: 'Search:'
494
+ zero_records: No matching records found
495
+ status:
496
+ complete: Complete
497
+ complete_with_failures: Complete (with failures)
498
+ deleted: Deleted
499
+ failed: Failed
500
+ pending: Pending
501
+ skipped: Skipped
450
502
  helpers:
451
503
  action:
452
504
  exporter:
@@ -17,13 +17,23 @@ es:
17
17
  record_link: Enlace %{record_type}
18
18
  unknown: Desconocido
19
19
  exporter:
20
+ hints:
21
+ generated_metadata: Estos campos exportados no se pueden importar actualmente.
22
+ include_thumbnails: Estos campos exportados no se pueden importar actualmente.
23
+ limit: Deje en blanco o 0 para todos los registros
20
24
  labels:
21
25
  all: Todo
22
26
  collection: Recopilación
27
+ collection_entries: Entradas de colección
28
+ download: Descargar
29
+ export_format: Formato de exportación
23
30
  export_from: Exportar desde
24
31
  export_source: Fuente de exportación
25
32
  export_type: Tipo de Exportación
26
33
  field_mapping: Mapeo de campos
34
+ file_set_entries: Entradas de conjunto de archivos
35
+ filter_by_date: Filtrar por fecha
36
+ finish_date: Fecha de finalización
27
37
  full: Metadatos y archivos
28
38
  generated_metadata: "¿Incluir metadatos generados?"
29
39
  importer: Importador
@@ -33,7 +43,20 @@ es:
33
43
  name: Nombre
34
44
  parser_fields: Campos del analizador
35
45
  parser_klass: Analizador sintáctico
46
+ start_date: Fecha de inicio
47
+ status: Estado
48
+ total_entries: Total de entradas
49
+ total_work_entries: Total de obras
36
50
  user: Usuario
51
+ work_entries: Entradas de obras
52
+ workflow_status:
53
+ approved: Aprobado
54
+ broken_url: URL rota
55
+ deleted: Eliminado
56
+ in_process: En proceso
57
+ ingested: Ingresado
58
+ needs_repair: Necesita reparación
59
+ unapproved: No aprobado
37
60
  worktype: Tipo de trabajo
38
61
  prompts:
39
62
  export_from: Por favor seleccione una fuente de exportación
@@ -45,8 +68,14 @@ es:
45
68
  one: '1 error impidió que se guardara este exportador:'
46
69
  other: 'Los errores %{count} impidieron que se guardara este exportador:'
47
70
  headings:
71
+ edit_exporter: Editar exportador
72
+ edit_importer: Editar importador
73
+ exporters: Exportadores
48
74
  importers: Importadores
75
+ new_exporter: Nuevo exportador
76
+ new_importer: Nuevo importador
49
77
  upload_corrected_entries: 'Subir entradas corregidas: %{name}'
78
+ upload_corrected_entries_action: Subir entradas corregidas
50
79
  importer:
51
80
  bagit:
52
81
  bags_to_import: 'Bolsa o Bolsas para Importar:'
@@ -77,6 +106,9 @@ es:
77
106
  private: Privado
78
107
  public: Público
79
108
  edit_form:
109
+ entry_modal_title: Opciones para actualizar una entrada
110
+ entry_rebuild_hint: Reconstruir metadatos y archivos.
111
+ entry_remove_and_recreate_hint: Eliminar la obra existente y luego volver a crear los metadatos y archivos de la obra.
80
112
  modal_title: Opciones para actualizar el importador
81
113
  remove_and_rerun_hint: Elimine todos los trabajos y vuelva a importar desde cero. Esto eliminará todos los archivos y asociaciones, y se perderán todas las modificaciones realizadas desde la última importación.
82
114
  update_and_harvest_hint: Actualice los valores en el formulario del importador y actualice los elementos que han cambiado en la fuente.
@@ -96,19 +128,23 @@ es:
96
128
  override_rights_statement: Si está marcada, usar siempre la declaración de derechos seleccionada. Si no está marcada, usar los derechos o la declaración de derechos del registro y usar solo el valor proporcionado si dc:rights está en blanco.
97
129
  labels:
98
130
  admin_set: Conjunto administrativo
131
+ collection_entries: Entradas de colección
99
132
  entry_id: ID de entrada
100
133
  exporter: Exportador
134
+ file_set_entries: Entradas de conjunto de archivos
101
135
  frequency: Frecuencia
102
136
  identifier: Identificador
103
137
  importer: Importador
104
138
  limit: Límite
105
139
  name: Nombre
140
+ parser_fields: Campos del analizador
106
141
  parser_klass: Analizador sintáctico
107
142
  total_collections: Colecciones totales
108
143
  total_file_sets: Conjuntos totales de archivos
109
144
  total_work_entries: Obras totales
110
145
  type: Tipo
111
146
  user: Usuario
147
+ work_entries: Entradas de obras
112
148
  oai:
113
149
  hints:
114
150
  metadata_prefix: Como oai_dc, dcterms o oai_qdc
@@ -185,6 +221,8 @@ es:
185
221
  review_total: "%{total} en total: %{collections} colecciones, %{works} obras, %{file_sets} conjuntos de archivos"
186
222
  review_visibility: 'Visibilidad:'
187
223
  server_error: Error del servidor durante la validación. Inténtalo de nuevo o contacta con el soporte técnico.
224
+ existing_record_badge: existente
225
+ existing_record_title: Este registro ya existe en el repositorio y se enlazará durante la importación.
188
226
  shared_badge: compartido
189
227
  starting: A partir de...
190
228
  upload_csv_and_zip: CSV + archivos cargados por separado
@@ -199,9 +237,20 @@ es:
199
237
  validating: Validando...
200
238
  validation_failed: Error en la validación. Inténtalo de nuevo.
201
239
  validation_timeout: Se agotó el tiempo de validación. Es posible que sus archivos sean demasiado grandes. Intente con archivos más pequeños o contacte con el soporte técnico.
240
+ validation_truncated_note: truncado a %{shown} — descargue el CSV de errores para ver la lista completa
241
+ validation_truncated_tooltip: Esta lista está limitada para mantener la página legible. La lista completa está en el archivo CSV de errores descargable.
202
242
  visibility_institution: Institución
203
243
  visibility_private: Privado
204
244
  visibility_public: Público
245
+ warning_category_circular_reference: Referencia circular
246
+ warning_category_default_work_type_used: Tipo de obra predeterminado utilizado
247
+ warning_category_duplicate_source_identifier: Identificador de origen duplicado en el CSV
248
+ warning_category_existing_source_identifier: Identificador de origen existente (se actualizará)
249
+ warning_category_invalid_child_reference: Referencia secundaria no válida
250
+ warning_category_invalid_controlled_value: Valor de vocabulario controlado no válido
251
+ warning_category_invalid_parent_reference: Referencia principal no válida
252
+ warning_category_missing_required_value: Falta un valor obligatorio
253
+ warning_category_missing_source_identifier: Falta el identificador de origen
205
254
  zip_limit: 'Solo se permite un archivo ZIP. No se agregaron los siguientes archivos:'
206
255
  nav:
207
256
  back: Atrás
@@ -264,6 +313,7 @@ es:
264
313
  large_import_message_html: Está a punto de importar <span class="total-items-count">%{count}</span> artículos. Las importaciones grandes tardan más y son más difíciles de solucionar. Considere dividir el proceso en lotes más pequeños.
265
314
  large_import_warning: Advertencia sobre grandes importaciones
266
315
  ready_to_import: Listo para importar
316
+ section_errors: Errores
267
317
  section_files: Archivos
268
318
  section_records: Archivos
269
319
  section_settings: Ajustes
@@ -324,6 +374,14 @@ es:
324
374
  errors:
325
375
  message: "El elemento primario referenciado '%{value}' no existe como %{field} en este CSV."
326
376
  suggestion: "Busque errores tipográficos o añada el registro primario."
377
+ child_reference_validator:
378
+ errors:
379
+ message: "El elemento secundario referenciado '%{value}' no existe como %{field} en este CSV."
380
+ suggestion: "Busque errores tipográficos o añada el registro secundario."
381
+ circular_reference_validator:
382
+ errors:
383
+ message: "'%{value}' forma parte de una relación padre-hijo circular."
384
+ suggestion: "Revise las columnas de padre/hijo y elimine las referencias incorrectas."
327
385
  passed: Validación aprobada
328
386
  passed_warnings: Validación aprobada con advertencias
329
387
  recognized_fields: 'Campos reconocidos: %{fields}'
@@ -340,7 +398,14 @@ es:
340
398
  errors:
341
399
  message: "El campo '%{field}' es obligatorio pero está vacío para esta fila."
342
400
  suggestion: "Añada un valor para '%{field}'."
401
+ validation_error_csv_builder:
402
+ empty_column: "La columna %{column} no tiene encabezado y se ignorará durante la importación"
403
+ missing_file: "Archivo faltante: %{filename}"
404
+ missing_required_column: "Falta la columna obligatoria '%{field}' (%{model})"
405
+ unrecognized_column: "Columna no reconocida '%{column}'"
406
+ unrecognized_column_with_suggestion: "Columna no reconocida '%{column}' (¿quiso decir '%{suggestion}'?)"
343
407
  unable_to_process: No se pueden procesar archivos para su validación
408
+ empty_column: 'Columna %{column} (sin encabezado)'
344
409
  notices_desc: 'Estos avisos pueden afectar cómo se importa su CSV:'
345
410
  notices_title: Avisos de importación
346
411
  unrecognized_desc: 'Estas columnas se ignorarán durante la importación:'
@@ -405,11 +470,35 @@ es:
405
470
  name: Nombre
406
471
  next_run: Próxima carrera
407
472
  status: Estado
473
+ status_set_at: Estado establecido en
408
474
  total_collection_entries: Entradas totales de la colección
409
475
  total_file_set_entries: Entradas totales del conjunto de archivos
410
476
  total_work_entries: Total de entradas de trabajo
411
477
  type: Tipo
412
478
  updated_at: Actualizado en
479
+ datatable:
480
+ filters:
481
+ filter_by_entry_class: Filtrar por clase de entrada
482
+ filter_by_status: Filtrar por estado
483
+ language:
484
+ empty_table: No hay datos disponibles en la tabla
485
+ info: Mostrando _START_ a _END_ de _TOTAL_ entradas
486
+ info_empty: Mostrando 0 a 0 de 0 entradas
487
+ info_filtered: (filtrado de _MAX_ entradas en total)
488
+ length_menu: Mostrar _MENU_ entradas
489
+ loading_records: Cargando...
490
+ next: Siguiente
491
+ previous: Anterior
492
+ processing: Procesando...
493
+ search: 'Buscar:'
494
+ zero_records: No se encontraron registros coincidentes
495
+ status:
496
+ complete: Completo
497
+ complete_with_failures: Completo (con errores)
498
+ deleted: Eliminado
499
+ failed: Fallido
500
+ pending: Pendiente
501
+ skipped: Omitido
413
502
  helpers:
414
503
  action:
415
504
  exporter: