bulkrax 9.4.0 → 9.4.2

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 (52) 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/controllers/concerns/bulkrax/importer_file_handler.rb +1 -6
  11. data/app/errors/bulkrax/unzip_error.rb +16 -0
  12. data/app/jobs/bulkrax/importer_job.rb +40 -9
  13. data/app/matchers/bulkrax/application_matcher.rb +5 -6
  14. data/app/models/bulkrax/csv_entry.rb +1 -1
  15. data/app/models/bulkrax/importer.rb +3 -16
  16. data/app/parsers/bulkrax/application_parser.rb +50 -33
  17. data/app/parsers/bulkrax/bagit_parser.rb +12 -0
  18. data/app/parsers/bulkrax/csv_parser.rb +163 -49
  19. data/app/parsers/concerns/bulkrax/csv_parser/csv_template_generation.rb +4 -1
  20. data/app/parsers/concerns/bulkrax/csv_parser/csv_validation.rb +10 -8
  21. data/app/parsers/concerns/bulkrax/csv_parser/csv_validation_helpers.rb +69 -36
  22. data/app/parsers/concerns/bulkrax/csv_parser/csv_validation_hierarchy.rb +9 -7
  23. data/app/services/bulkrax/csv_template/file_validator.rb +1 -1
  24. data/app/services/bulkrax/csv_template/mapping_manager.rb +15 -6
  25. data/app/services/bulkrax/csv_template/split_formatter.rb +10 -3
  26. data/app/services/bulkrax/split_pattern_coercion.rb +42 -0
  27. data/app/services/bulkrax/stepper_response_formatter.rb +2 -1
  28. data/app/services/bulkrax/validation_error_csv_builder.rb +36 -12
  29. data/app/validators/bulkrax/csv_row/child_reference.rb +2 -1
  30. data/app/validators/bulkrax/csv_row/parent_reference.rb +1 -1
  31. data/app/validators/bulkrax/csv_row/required_values.rb +17 -3
  32. data/app/views/bulkrax/exporters/edit.html.erb +1 -1
  33. data/app/views/bulkrax/exporters/index.html.erb +3 -1
  34. data/app/views/bulkrax/exporters/new.html.erb +1 -1
  35. data/app/views/bulkrax/exporters/show.html.erb +1 -1
  36. data/app/views/bulkrax/guided_imports/new.html.erb +7 -0
  37. data/app/views/bulkrax/importers/_edit_item_buttons.html.erb +3 -3
  38. data/app/views/bulkrax/importers/index.html.erb +2 -0
  39. data/app/views/bulkrax/importers/new.html.erb +1 -1
  40. data/app/views/bulkrax/importers/show.html.erb +3 -1
  41. data/app/views/bulkrax/shared/_datatable_i18n.html.erb +3 -0
  42. data/config/locales/bulkrax.de.yml +95 -2
  43. data/config/locales/bulkrax.en.yml +58 -2
  44. data/config/locales/bulkrax.es.yml +95 -2
  45. data/config/locales/bulkrax.fr.yml +95 -2
  46. data/config/locales/bulkrax.it.yml +95 -2
  47. data/config/locales/bulkrax.pt-BR.yml +95 -2
  48. data/config/locales/bulkrax.zh.yml +96 -2
  49. data/db/migrate/20260424081537_remove_parents_from_bulkrax_importer_runs.rb +9 -0
  50. data/lib/bulkrax/version.rb +1 -1
  51. data/lib/bulkrax.rb +15 -1
  52. metadata +8 -4
@@ -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
@@ -315,8 +365,7 @@ de:
315
365
  missing_required_hint: Fügen Sie diese Spalte zu Ihrer CSV-Datei hinzu.
316
366
  missing_required_title: Fehlende Pflichtfelder
317
367
  missing_rights_desc: Ihre CSV-Datei enthält keine Spalte „rights_statement“. Sie können diese entweder Ihrer CSV-Datei hinzufügen oder im nächsten Schritt eine Standard-Rechteerklärung auswählen.
318
- multiple_csv_same_dir: Mehrere CSV-Dateien im selben Verzeichnis innerhalb der ZIP-Datei gefunden
319
- multiple_csv_same_level: Mehrere CSV-Dateien auf derselben Ebene innerhalb der ZIP-Datei gefunden
368
+ multiple_csv: Mehrere CSV-Dateien befinden sich auf der obersten Ebene des ZIP-Archivs, sodass die primäre CSV nicht bestimmt werden kann. Belassen Sie genau eine CSV auf dieser Ebene; weitere CSVs müssen tiefer verschachtelt sein.
320
369
  no_csv_in_zip: Es wurden keine CSV-Dateien im ZIP-Archiv gefunden.
321
370
  no_csv_uploaded: Es wurde keine CSV-Metadatendatei hochgeladen.
322
371
  no_files_uploaded: Es wurden keine Dateien hochgeladen.
@@ -325,6 +374,14 @@ de:
325
374
  errors:
326
375
  message: "Das referenzierte übergeordnete Element '%{value}' existiert nicht als %{field} in dieser CSV-Datei."
327
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."
328
385
  passed: Validierung erfolgreich
329
386
  passed_warnings: Validierung mit Warnungen bestanden
330
387
  recognized_fields: 'Erkannte Felder: %{fields}'
@@ -341,11 +398,23 @@ de:
341
398
  errors:
342
399
  message: "Das Feld '%{field}' ist erforderlich, ist aber für diese Zeile leer."
343
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}'?)"
344
407
  unable_to_process: Die Validierungsdateien konnten nicht verarbeitet werden.
408
+ empty_column: 'Spalte %{column} (keine Überschrift)'
345
409
  notices_desc: 'Diese Hinweise können Auswirkungen auf den Import Ihrer CSV-Datei haben:'
346
410
  notices_title: Importhinweise
347
411
  unrecognized_desc: 'Diese Spalten werden beim Import ignoriert:'
348
412
  unrecognized_title: Nicht anerkannte Felder
413
+ unzip:
414
+ errors:
415
+ multiple_csv: Mehrere CSV-Dateien befinden sich auf der obersten Ebene des ZIP-Archivs, sodass die primäre CSV nicht bestimmt werden kann. Belassen Sie genau eine CSV auf dieser Ebene; weitere CSVs müssen tiefer verschachtelt sein.
416
+ no_csv: Es wurden keine CSV-Dateien im ZIP-Archiv gefunden.
417
+ unsafe_entry: "Das ZIP enthält einen Eintrag mit unsicherem Pfad (%{name}). Einträge dürfen weder absolute Pfade noch Referenzen auf übergeordnete Verzeichnisse verwenden."
349
418
  validations:
350
419
  errors_prohibited:
351
420
  one: 'Ein Fehler verhinderte das Speichern dieses Importers:'
@@ -401,11 +470,35 @@ de:
401
470
  name: Name
402
471
  next_run: Nächster Lauf
403
472
  status: Status
473
+ status_set_at: Status gesetzt am
404
474
  total_collection_entries: Gesamtzahl der Sammlungseinträge
405
475
  total_file_set_entries: Gesamtzahl der Dateisätze
406
476
  total_work_entries: Gesamtzahl der Arbeitseinsätze
407
477
  type: Typ
408
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
409
502
  helpers:
410
503
  action:
411
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
@@ -342,8 +365,7 @@ en:
342
365
  missing_required_hint: add this column to your CSV
343
366
  missing_required_title: Missing Required Fields
344
367
  missing_rights_desc: Your CSV does not include a rights_statement column. You can add it to your CSV or select a Default Rights Statement in the next step.
345
- multiple_csv_same_dir: Multiple CSV files found in the same directory within ZIP
346
- multiple_csv_same_level: Multiple CSV files found at the same level within ZIP
368
+ multiple_csv: Multiple CSV files share the shallowest directory level in the ZIP, so the primary CSV cannot be determined. Keep exactly one CSV at that level; any additional CSVs must be nested deeper.
347
369
  no_csv_in_zip: No CSV files found in ZIP
348
370
  no_csv_uploaded: No CSV metadata file uploaded
349
371
  no_files_uploaded: No files uploaded
@@ -376,12 +398,23 @@ en:
376
398
  errors:
377
399
  message: "Field '%{field}' is required but is empty for this row."
378
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}'?)"
379
407
  unable_to_process: Unable to process files for validation
380
408
  empty_column: 'Column %{column} (no header)'
381
409
  notices_desc: 'These notices may affect how your CSV is imported:'
382
410
  notices_title: Import Notices
383
411
  unrecognized_desc: 'These columns will be ignored during import:'
384
412
  unrecognized_title: Unrecognized Fields
413
+ unzip:
414
+ errors:
415
+ multiple_csv: Multiple CSV files share the shallowest directory level in the ZIP, so the primary CSV cannot be determined. Keep exactly one CSV at that level; any additional CSVs must be nested deeper.
416
+ no_csv: No CSV file found in the ZIP
417
+ unsafe_entry: "The ZIP contains an entry with an unsafe path (%{name}). Entries must not use absolute paths or parent-directory references."
385
418
  validations:
386
419
  errors_prohibited:
387
420
  one: '1 error prohibited this importer from being saved:'
@@ -443,6 +476,29 @@ en:
443
476
  total_work_entries: Total Work Entries
444
477
  type: Type
445
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
446
502
  helpers:
447
503
  action:
448
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
@@ -315,8 +365,7 @@ es:
315
365
  missing_required_hint: Añade esta columna a tu CSV
316
366
  missing_required_title: Campos obligatorios faltantes
317
367
  missing_rights_desc: Su archivo CSV no incluye la columna "rights_statement". Puede añadirla o seleccionar una "Declaración de derechos predeterminada" en el siguiente paso.
318
- multiple_csv_same_dir: Se encontraron varios archivos CSV en el mismo directorio dentro de ZIP
319
- multiple_csv_same_level: Se encontraron varios archivos CSV en el mismo nivel dentro de ZIP
368
+ multiple_csv: Hay varios archivos CSV en el nivel menos profundo del ZIP, por lo que no se puede determinar el CSV principal. Mantén exactamente un CSV en ese nivel; cualquier CSV adicional debe estar anidado más profundamente.
320
369
  no_csv_in_zip: No se encontraron archivos CSV en ZIP
321
370
  no_csv_uploaded: No se cargó ningún archivo de metadatos CSV
322
371
  no_files_uploaded: No hay archivos subidos
@@ -325,6 +374,14 @@ es:
325
374
  errors:
326
375
  message: "El elemento primario referenciado '%{value}' no existe como %{field} en este CSV."
327
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."
328
385
  passed: Validación aprobada
329
386
  passed_warnings: Validación aprobada con advertencias
330
387
  recognized_fields: 'Campos reconocidos: %{fields}'
@@ -341,11 +398,23 @@ es:
341
398
  errors:
342
399
  message: "El campo '%{field}' es obligatorio pero está vacío para esta fila."
343
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}'?)"
344
407
  unable_to_process: No se pueden procesar archivos para su validación
408
+ empty_column: 'Columna %{column} (sin encabezado)'
345
409
  notices_desc: 'Estos avisos pueden afectar cómo se importa su CSV:'
346
410
  notices_title: Avisos de importación
347
411
  unrecognized_desc: 'Estas columnas se ignorarán durante la importación:'
348
412
  unrecognized_title: Campos no reconocidos
413
+ unzip:
414
+ errors:
415
+ multiple_csv: Hay varios archivos CSV en el nivel menos profundo del ZIP, por lo que no se puede determinar el CSV principal. Mantén exactamente un CSV en ese nivel; cualquier CSV adicional debe estar anidado más profundamente.
416
+ no_csv: No se encontraron archivos CSV en ZIP
417
+ unsafe_entry: "El ZIP contiene una entrada con una ruta no segura (%{name}). Las entradas no deben usar rutas absolutas ni referencias al directorio padre."
349
418
  validations:
350
419
  errors_prohibited:
351
420
  one: '1 error impidió que se guardara este importador:'
@@ -401,11 +470,35 @@ es:
401
470
  name: Nombre
402
471
  next_run: Próxima carrera
403
472
  status: Estado
473
+ status_set_at: Estado establecido en
404
474
  total_collection_entries: Entradas totales de la colección
405
475
  total_file_set_entries: Entradas totales del conjunto de archivos
406
476
  total_work_entries: Total de entradas de trabajo
407
477
  type: Tipo
408
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
409
502
  helpers:
410
503
  action:
411
504
  exporter: