@semiont/react-ui 0.5.31 → 0.5.33

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 (72) hide show
  1. package/dist/{PdfAnnotationCanvas.client-LSH3PZPY.js → PdfAnnotationCanvas.client-7EYCQF6V.js} +3 -3
  2. package/dist/{ar-AZBRADEB.js → ar-PYOTZERT.js} +6 -3
  3. package/dist/{bn-CCEW6AOS.js → bn-5SYTY67O.js} +6 -3
  4. package/dist/{chunk-SDKFZLEX.js → chunk-BADNZBAL.js} +6 -3
  5. package/dist/{chunk-G4VHL4UA.js → chunk-D3TOB356.js} +31 -31
  6. package/dist/{cs-HXPF2CTE.js → cs-BCA77OVY.js} +6 -3
  7. package/dist/{da-K5NTK7LH.js → da-LFLFOUMU.js} +6 -3
  8. package/dist/{de-GMRQEDZI.js → de-55TAX5Q2.js} +6 -3
  9. package/dist/{el-EUB4CI4G.js → el-PZ7OBJZD.js} +6 -3
  10. package/dist/{en-R5XA26NF.js → en-H4MQUZWO.js} +2 -2
  11. package/dist/{es-Z32DAZ6W.js → es-PSVJOIBC.js} +6 -3
  12. package/dist/{fa-G7HN6B32.js → fa-CFR54IER.js} +6 -3
  13. package/dist/{fi-3YBLZO7I.js → fi-E7YPW5B3.js} +6 -3
  14. package/dist/{fr-VUBH7BBS.js → fr-4OOHYZSV.js} +6 -3
  15. package/dist/{he-WQQEY26B.js → he-TWJR3AKD.js} +6 -3
  16. package/dist/{hi-HJZ6W4JB.js → hi-F6RRLYIK.js} +6 -3
  17. package/dist/{id-ZOGZ37MI.js → id-JRC3ZLJW.js} +6 -3
  18. package/dist/index.css +4 -1
  19. package/dist/index.d.ts +8 -0
  20. package/dist/index.js +13 -5
  21. package/dist/{it-DT6UW66F.js → it-IWYDLO43.js} +6 -3
  22. package/dist/{ja-RUKQCOLO.js → ja-YETT5V5B.js} +6 -3
  23. package/dist/{ko-ZH5ADKZM.js → ko-YX5NVOG4.js} +6 -3
  24. package/dist/{ms-Y2AFPZTU.js → ms-3FAOUVYS.js} +6 -3
  25. package/dist/{nl-OQEWIXNA.js → nl-UYCI5TXI.js} +6 -3
  26. package/dist/{no-KPAYJZWY.js → no-ZR3EQ2NI.js} +6 -3
  27. package/dist/{pl-WSXK2UUD.js → pl-FPLBWLWX.js} +6 -3
  28. package/dist/{pt-NWRJRUCK.js → pt-JOJPVHDL.js} +6 -3
  29. package/dist/{ro-3CGVMOC6.js → ro-WHNIABHY.js} +6 -3
  30. package/dist/{sv-HGSEBA7S.js → sv-KWSW2ERR.js} +6 -3
  31. package/dist/test-utils.js +2 -2
  32. package/dist/{th-NZ4G352Z.js → th-5OOFP4VL.js} +6 -3
  33. package/dist/{tr-LGGS4DLW.js → tr-NJUOJ2KQ.js} +6 -3
  34. package/dist/{uk-AIX536L4.js → uk-MFJCRRB2.js} +6 -3
  35. package/dist/{vi-V6CVQZLQ.js → vi-TFR4NPYP.js} +6 -3
  36. package/dist/{zh-AGKPGI3L.js → zh-47SIEPEL.js} +6 -3
  37. package/package.json +5 -5
  38. package/src/components/AssistProgress.tsx +16 -0
  39. package/src/components/__tests__/AssistProgress.denominator.test.tsx +78 -0
  40. package/src/components/resource/panels/AssistSection.css +4 -1
  41. package/src/components/resource/panels/ReferencesPanel.tsx +2 -0
  42. package/src/components/resource/panels/UnifiedAnnotationsPanel.css +1 -1
  43. package/src/components/resource/panels/__tests__/HighlightPanel.out-of-order.test.tsx +99 -0
  44. package/translations/ar.json +5 -2
  45. package/translations/bn.json +5 -2
  46. package/translations/cs.json +5 -2
  47. package/translations/da.json +5 -2
  48. package/translations/de.json +5 -2
  49. package/translations/el.json +5 -2
  50. package/translations/en.json +5 -2
  51. package/translations/es.json +5 -2
  52. package/translations/fa.json +5 -2
  53. package/translations/fi.json +5 -2
  54. package/translations/fr.json +5 -2
  55. package/translations/he.json +5 -2
  56. package/translations/hi.json +5 -2
  57. package/translations/id.json +5 -2
  58. package/translations/it.json +5 -2
  59. package/translations/ja.json +5 -2
  60. package/translations/ko.json +5 -2
  61. package/translations/ms.json +5 -2
  62. package/translations/nl.json +5 -2
  63. package/translations/no.json +5 -2
  64. package/translations/pl.json +5 -2
  65. package/translations/pt.json +5 -2
  66. package/translations/ro.json +5 -2
  67. package/translations/sv.json +5 -2
  68. package/translations/th.json +5 -2
  69. package/translations/tr.json +5 -2
  70. package/translations/uk.json +5 -2
  71. package/translations/vi.json +5 -2
  72. package/translations/zh.json +5 -2
@@ -0,0 +1,99 @@
1
+ /**
2
+ * DETECTION-RESULT-STREAMING P3: out-of-order arrival renders correctly.
3
+ *
4
+ * P1 made detection commit per chunk, and units run concurrently — so the
5
+ * annotations array now grows in bursts whose document positions interleave:
6
+ * chunk 2's finds can arrive before chunk 1's. The panel's contract is that
7
+ * LIST ORDER IS DOCUMENT ORDER (sort by TextPositionSelector.start), so
8
+ * arrival order must be invisible in the rendered list — both for a scrambled
9
+ * initial load and for a late-arriving EARLIER-position insert.
10
+ */
11
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
12
+ import React from 'react';
13
+ import { renderWithProviders, createTestSemiontWrapper } from '../../../../test-utils';
14
+ import { HighlightPanel } from '../HighlightPanel';
15
+ import type { SemiontSession } from '@semiont/sdk';
16
+ import type { Annotation, AnnotationId } from '@semiont/core';
17
+
18
+ const mockT = vi.fn((key: string) => key);
19
+ vi.mock('../../../../contexts/TranslationContext', () => ({
20
+ useTranslations: () => mockT,
21
+ TranslationProvider: ({ children }: { children: React.ReactNode }) => children,
22
+ }));
23
+ vi.mock('../../../../contexts/useEventSubscription', () => ({
24
+ useEventSubscriptions: vi.fn(),
25
+ }));
26
+
27
+ function highlightAt(id: string, start: number, exact: string): Annotation {
28
+ return {
29
+ '@context': 'http://www.w3.org/ns/anno.jsonld',
30
+ type: 'Annotation',
31
+ id: id as AnnotationId,
32
+ motivation: 'highlighting',
33
+ target: {
34
+ source: 'resource-1',
35
+ selector: [
36
+ { type: 'TextPositionSelector', start, end: start + exact.length },
37
+ { type: 'TextQuoteSelector', exact },
38
+ ],
39
+ },
40
+ created: '2024-01-01T00:00:00Z',
41
+ };
42
+ }
43
+
44
+ function renderedQuotes(): string[] {
45
+ return Array.from(document.querySelectorAll('.semiont-annotation-entry__quote'))
46
+ .map((el) => el.textContent?.replace(/^"|"$/g, '').trim() ?? '');
47
+ }
48
+
49
+ describe('HighlightPanel — arrival order is invisible; list order is document order', () => {
50
+ let session: SemiontSession;
51
+ beforeEach(() => {
52
+ vi.clearAllMocks();
53
+ ({ session } = createTestSemiontWrapper());
54
+ });
55
+
56
+ it('a scrambled initial load (concurrent units) renders in document order', () => {
57
+ renderWithProviders(
58
+ <HighlightPanel session={session} resourceId="res-1"
59
+ annotations={[
60
+ highlightAt('h-chunk3', 900, 'gamma'),
61
+ highlightAt('h-chunk1', 100, 'alpha'),
62
+ highlightAt('h-chunk2', 500, 'beta'),
63
+ ]}
64
+ pendingAnnotation={null}
65
+ isAssisting={false}
66
+ progress={null}
67
+ annotateMode={true}
68
+ />,
69
+ );
70
+
71
+ expect(renderedQuotes()).toEqual(['alpha', 'beta', 'gamma']);
72
+ });
73
+
74
+ it('an earlier-position annotation arriving LATE slots into place, not onto the end', () => {
75
+ const { rerender } = renderWithProviders(
76
+ <HighlightPanel session={session} resourceId="res-1"
77
+ annotations={[highlightAt('h-late-chunk', 700, 'omega')]}
78
+ pendingAnnotation={null}
79
+ isAssisting={false}
80
+ progress={null}
81
+ annotateMode={true}
82
+ />,
83
+ );
84
+ expect(renderedQuotes()).toEqual(['omega']);
85
+
86
+ // Chunk 1's find lands after chunk 2's — the out-of-order insert.
87
+ rerender(
88
+ <HighlightPanel session={session} resourceId="res-1"
89
+ annotations={[highlightAt('h-late-chunk', 700, 'omega'), highlightAt('h-early-chunk', 50, 'alpha')]}
90
+ pendingAnnotation={null}
91
+ isAssisting={false}
92
+ progress={null}
93
+ annotateMode={true}
94
+ />,
95
+ );
96
+
97
+ expect(renderedQuotes()).toEqual(['alpha', 'omega']);
98
+ });
99
+ });
@@ -274,7 +274,8 @@
274
274
  "noText": "لا يوجد نص",
275
275
  "incomingReferencesFailed": "تعذّر تحميل المراجع الواردة.",
276
276
  "retry": "إعادة المحاولة",
277
- "entityTypesFailed": "تعذّر تحميل أنواع الكيانات."
277
+ "entityTypesFailed": "تعذّر تحميل أنواع الكيانات.",
278
+ "tally": "{{found}} من ~{{expected}} كيانًا"
278
279
  },
279
280
  "KeyboardShortcuts": {
280
281
  "title": "اختصارات لوحة المفاتيح",
@@ -488,6 +489,8 @@
488
489
  "decline_encrypted": "هذا الملف محمي بكلمة مرور، ولا يمكن قراءة نصه.",
489
490
  "decline_corrupt": "تعذّرت قراءة هذا الملف — قد يكون تالفًا.",
490
491
  "decline_too-large": "هذا المستند أكبر من أن يُستخرج نصه.",
491
- "decline_empty": "لا يحتوي هذا المستند على نص لتوسيمه."
492
+ "decline_empty": "لا يحتوي هذا المستند على نص لتوسيمه.",
493
+ "annotationCompletePartial": "اكتمل الكشف جزئيًا — {{pieces}} جزء ناقص الإبلاغ",
494
+ "annotationFailedPartial": "فشل الكشف — تم الاحتفاظ بنتائج {{kept}} نوع مكتمل"
492
495
  }
493
496
  }
@@ -274,7 +274,8 @@
274
274
  "noText": "কোনো পাঠ্য নেই",
275
275
  "incomingReferencesFailed": "ইনকামিং রেফারেন্স লোড করা যায়নি।",
276
276
  "retry": "আবার চেষ্টা করুন",
277
- "entityTypesFailed": "সত্তার ধরন লোড করা যায়নি।"
277
+ "entityTypesFailed": "সত্তার ধরন লোড করা যায়নি।",
278
+ "tally": "~{{expected}} সত্তার মধ্যে {{found}}"
278
279
  },
279
280
  "KeyboardShortcuts": {
280
281
  "title": "কীবোর্ড শর্টকাট",
@@ -488,6 +489,8 @@
488
489
  "decline_encrypted": "এই PDF পাসওয়ার্ড-সুরক্ষিত, লেখা পড়া যাচ্ছে না।",
489
490
  "decline_corrupt": "এই PDF পড়া যায়নি — ফাইলটি ক্ষতিগ্রস্ত হতে পারে।",
490
491
  "decline_too-large": "এই নথিটি এত বড় যে লেখা বের করা যাচ্ছে না।",
491
- "decline_empty": "এই নথিতে টীকা দেওয়ার মতো কোনো লেখা নেই।"
492
+ "decline_empty": "এই নথিতে টীকা দেওয়ার মতো কোনো লেখা নেই।",
493
+ "annotationCompletePartial": "শনাক্তকরণ অসম্পূর্ণভাবে শেষ হয়েছে — {{pieces}}টি অংশ কম রিপোর্ট হয়েছে",
494
+ "annotationFailedPartial": "শনাক্তকরণ ব্যর্থ — {{kept}}টি সম্পূর্ণ প্রকারের ফলাফল রাখা হয়েছে"
492
495
  }
493
496
  }
@@ -274,7 +274,8 @@
274
274
  "noText": "Žádný text",
275
275
  "incomingReferencesFailed": "Příchozí reference se nepodařilo načíst.",
276
276
  "retry": "Zkusit znovu",
277
- "entityTypesFailed": "Typy entit se nepodařilo načíst."
277
+ "entityTypesFailed": "Typy entit se nepodařilo načíst.",
278
+ "tally": "{{found}} z ~{{expected}} entit"
278
279
  },
279
280
  "KeyboardShortcuts": {
280
281
  "title": "Klávesové zkratky",
@@ -488,6 +489,8 @@
488
489
  "decline_encrypted": "Toto PDF je chráněno heslem, jeho text nelze přečíst.",
489
490
  "decline_corrupt": "Toto PDF nebylo možné přečíst — soubor může být poškozen.",
490
491
  "decline_too-large": "Tento dokument je příliš velký na extrakci textu.",
491
- "decline_empty": "Tento dokument neobsahuje text k anotaci."
492
+ "decline_empty": "Tento dokument neobsahuje text k anotaci.",
493
+ "annotationCompletePartial": "Detekce skončila neúplně — {{pieces}} část(í) podhodnoceno",
494
+ "annotationFailedPartial": "Detekce selhala — nálezy z {{kept}} dokončených typů zůstaly"
492
495
  }
493
496
  }
@@ -274,7 +274,8 @@
274
274
  "noText": "Ingen tekst",
275
275
  "incomingReferencesFailed": "Indgående referencer kunne ikke indlæses.",
276
276
  "retry": "Prøv igen",
277
- "entityTypesFailed": "Enhedstyper kunne ikke indlæses."
277
+ "entityTypesFailed": "Enhedstyper kunne ikke indlæses.",
278
+ "tally": "{{found}} af ~{{expected}} entiteter"
278
279
  },
279
280
  "KeyboardShortcuts": {
280
281
  "title": "Tastaturgenveje",
@@ -488,6 +489,8 @@
488
489
  "decline_encrypted": "Denne PDF er adgangskodebeskyttet, så teksten kan ikke læses.",
489
490
  "decline_corrupt": "Denne PDF kunne ikke læses — filen er måske beskadiget.",
490
491
  "decline_too-large": "Dette dokument er for stort til at udtrække tekst fra.",
491
- "decline_empty": "Dette dokument har ingen tekst at annotere."
492
+ "decline_empty": "Dette dokument har ingen tekst at annotere.",
493
+ "annotationCompletePartial": "Detektion afsluttet ufuldstændigt — {{pieces}} del(e) underrapporteret",
494
+ "annotationFailedPartial": "Detektion mislykkedes — fund fra {{kept}} fuldførte typer blev bevaret"
492
495
  }
493
496
  }
@@ -274,7 +274,8 @@
274
274
  "noText": "Kein Text",
275
275
  "incomingReferencesFailed": "Eingehende Referenzen konnten nicht geladen werden.",
276
276
  "retry": "Erneut versuchen",
277
- "entityTypesFailed": "Entitätstypen konnten nicht geladen werden."
277
+ "entityTypesFailed": "Entitätstypen konnten nicht geladen werden.",
278
+ "tally": "{{found}} von ~{{expected}} Entitäten"
278
279
  },
279
280
  "KeyboardShortcuts": {
280
281
  "title": "Tastenkombinationen",
@@ -488,6 +489,8 @@
488
489
  "decline_encrypted": "Dieses PDF ist passwortgeschützt, der Text ist nicht lesbar.",
489
490
  "decline_corrupt": "Dieses PDF konnte nicht gelesen werden — die Datei ist womöglich beschädigt.",
490
491
  "decline_too-large": "Dieses Dokument ist zu groß für die Textextraktion.",
491
- "decline_empty": "Dieses Dokument enthält keinen Text zum Annotieren."
492
+ "decline_empty": "Dieses Dokument enthält keinen Text zum Annotieren.",
493
+ "annotationCompletePartial": "Erkennung unvollständig beendet — {{pieces}} Abschnitt(e) untererfasst",
494
+ "annotationFailedPartial": "Erkennung fehlgeschlagen — Funde aus {{kept}} abgeschlossenen Typen wurden behalten"
492
495
  }
493
496
  }
@@ -274,7 +274,8 @@
274
274
  "noText": "Χωρίς κείμενο",
275
275
  "incomingReferencesFailed": "Δεν ήταν δυνατή η φόρτωση των εισερχόμενων αναφορών.",
276
276
  "retry": "Δοκιμάστε ξανά",
277
- "entityTypesFailed": "Δεν ήταν δυνατή η φόρτωση των τύπων οντοτήτων."
277
+ "entityTypesFailed": "Δεν ήταν δυνατή η φόρτωση των τύπων οντοτήτων.",
278
+ "tally": "{{found}} από ~{{expected}} οντότητες"
278
279
  },
279
280
  "KeyboardShortcuts": {
280
281
  "title": "Συντομεύσεις Πληκτρολογίου",
@@ -488,6 +489,8 @@
488
489
  "decline_encrypted": "Αυτό το PDF προστατεύεται με κωδικό και το κείμενο δεν διαβάζεται.",
489
490
  "decline_corrupt": "Δεν ήταν δυνατή η ανάγνωση αυτού του PDF — το αρχείο ίσως είναι κατεστραμμένο.",
490
491
  "decline_too-large": "Αυτό το έγγραφο είναι πολύ μεγάλο για εξαγωγή κειμένου.",
491
- "decline_empty": "Αυτό το έγγραφο δεν έχει κείμενο για σχολιασμό."
492
+ "decline_empty": "Αυτό το έγγραφο δεν έχει κείμενο για σχολιασμό.",
493
+ "annotationCompletePartial": "Η ανίχνευση ολοκληρώθηκε ελλιπώς — {{pieces}} τμήμα(τα) αναφέρθηκαν ελλιπώς",
494
+ "annotationFailedPartial": "Η ανίχνευση απέτυχε — τα ευρήματα από {{kept}} ολοκληρωμένους τύπους διατηρήθηκαν"
492
495
  }
493
496
  }
@@ -274,7 +274,8 @@
274
274
  "noText": "No text",
275
275
  "incomingReferencesFailed": "Could not load incoming references.",
276
276
  "retry": "Try again",
277
- "entityTypesFailed": "Could not load entity types."
277
+ "entityTypesFailed": "Could not load entity types.",
278
+ "tally": "{{found}} of ~{{expected}} entities"
278
279
  },
279
280
  "KeyboardShortcuts": {
280
281
  "title": "Keyboard Shortcuts",
@@ -488,6 +489,8 @@
488
489
  "decline_encrypted": "This PDF is password-protected, so its text can’t be read.",
489
490
  "decline_corrupt": "This PDF couldn’t be read — the file may be damaged.",
490
491
  "decline_too-large": "This document is too large to extract text from.",
491
- "decline_empty": "This document has no text to annotate."
492
+ "decline_empty": "This document has no text to annotate.",
493
+ "annotationCompletePartial": "Detection finished incompletely — {{pieces}} piece(s) under-reported",
494
+ "annotationFailedPartial": "Detection failed — finds from {{kept}} completed type(s) were kept"
492
495
  }
493
496
  }
@@ -274,7 +274,8 @@
274
274
  "noText": "Sin texto",
275
275
  "incomingReferencesFailed": "No se pudieron cargar las referencias entrantes.",
276
276
  "retry": "Intentar de nuevo",
277
- "entityTypesFailed": "No se pudieron cargar los tipos de entidad."
277
+ "entityTypesFailed": "No se pudieron cargar los tipos de entidad.",
278
+ "tally": "{{found}} de ~{{expected}} entidades"
278
279
  },
279
280
  "KeyboardShortcuts": {
280
281
  "title": "Atajos de Teclado",
@@ -488,6 +489,8 @@
488
489
  "decline_encrypted": "Este PDF está protegido con contraseña y su texto no se puede leer.",
489
490
  "decline_corrupt": "No se pudo leer este PDF; el archivo puede estar dañado.",
490
491
  "decline_too-large": "Este documento es demasiado grande para extraer su texto.",
491
- "decline_empty": "Este documento no tiene texto que anotar."
492
+ "decline_empty": "Este documento no tiene texto que anotar.",
493
+ "annotationCompletePartial": "La detección terminó incompleta — {{pieces}} parte(s) subregistradas",
494
+ "annotationFailedPartial": "La detección falló — se conservaron los hallazgos de {{kept}} tipo(s) completados"
492
495
  }
493
496
  }
@@ -274,7 +274,8 @@
274
274
  "noText": "بدون متن",
275
275
  "incomingReferencesFailed": "بارگذاری ارجاعات ورودی ممکن نشد.",
276
276
  "retry": "تلاش مجدد",
277
- "entityTypesFailed": "بارگذاری انواع موجودیت ممکن نشد."
277
+ "entityTypesFailed": "بارگذاری انواع موجودیت ممکن نشد.",
278
+ "tally": "{{found}} از ~{{expected}} موجودیت"
278
279
  },
279
280
  "KeyboardShortcuts": {
280
281
  "title": "میانبرهای صفحه‌کلید",
@@ -488,6 +489,8 @@
488
489
  "decline_encrypted": "این PDF با رمز محافظت شده و متن آن خوانده نمی‌شود.",
489
490
  "decline_corrupt": "این PDF خوانده نشد — ممکن است فایل آسیب دیده باشد.",
490
491
  "decline_too-large": "این سند برای استخراج متن بسیار بزرگ است.",
491
- "decline_empty": "این سند متنی برای حاشیه‌نویسی ندارد."
492
+ "decline_empty": "این سند متنی برای حاشیه‌نویسی ندارد.",
493
+ "annotationCompletePartial": "تشخیص ناقص پایان یافت — {{pieces}} بخش کمتر گزارش شد",
494
+ "annotationFailedPartial": "تشخیص ناموفق بود — یافته‌های {{kept}} نوع تکمیل‌شده حفظ شدند"
492
495
  }
493
496
  }
@@ -274,7 +274,8 @@
274
274
  "noText": "Ei tekstiä",
275
275
  "incomingReferencesFailed": "Saapuvia viitteitä ei voitu ladata.",
276
276
  "retry": "Yritä uudelleen",
277
- "entityTypesFailed": "Entiteettityyppejä ei voitu ladata."
277
+ "entityTypesFailed": "Entiteettityyppejä ei voitu ladata.",
278
+ "tally": "{{found}} / ~{{expected}} entiteettiä"
278
279
  },
279
280
  "KeyboardShortcuts": {
280
281
  "title": "Pikanäppäimet",
@@ -488,6 +489,8 @@
488
489
  "decline_encrypted": "Tämä PDF on salasanasuojattu, joten tekstiä ei voi lukea.",
489
490
  "decline_corrupt": "Tätä PDF:ää ei voitu lukea — tiedosto voi olla vaurioitunut.",
490
491
  "decline_too-large": "Tämä asiakirja on liian suuri tekstin poimintaan.",
491
- "decline_empty": "Tässä asiakirjassa ei ole merkittävää tekstiä."
492
+ "decline_empty": "Tässä asiakirjassa ei ole merkittävää tekstiä.",
493
+ "annotationCompletePartial": "Tunnistus päättyi epätäydellisenä — {{pieces}} osaa aliraportoitu",
494
+ "annotationFailedPartial": "Tunnistus epäonnistui — {{kept}} valmiin tyypin löydökset säilytettiin"
492
495
  }
493
496
  }
@@ -274,7 +274,8 @@
274
274
  "noText": "Aucun texte",
275
275
  "incomingReferencesFailed": "Impossible de charger les références entrantes.",
276
276
  "retry": "Réessayer",
277
- "entityTypesFailed": "Impossible de charger les types d'entité."
277
+ "entityTypesFailed": "Impossible de charger les types d'entité.",
278
+ "tally": "{{found}} sur ~{{expected}} entités"
278
279
  },
279
280
  "KeyboardShortcuts": {
280
281
  "title": "Raccourcis clavier",
@@ -488,6 +489,8 @@
488
489
  "decline_encrypted": "Ce PDF est protégé par mot de passe, son texte est illisible.",
489
490
  "decline_corrupt": "Ce PDF n’a pas pu être lu — le fichier est peut-être endommagé.",
490
491
  "decline_too-large": "Ce document est trop volumineux pour en extraire le texte.",
491
- "decline_empty": "Ce document ne contient aucun texte à annoter."
492
+ "decline_empty": "Ce document ne contient aucun texte à annoter.",
493
+ "annotationCompletePartial": "Détection terminée incomplète — {{pieces}} partie(s) sous-déclarée(s)",
494
+ "annotationFailedPartial": "Échec de la détection — les résultats de {{kept}} type(s) terminés ont été conservés"
492
495
  }
493
496
  }
@@ -274,7 +274,8 @@
274
274
  "noText": "אין טקסט",
275
275
  "incomingReferencesFailed": "לא ניתן לטעון את ההפניות הנכנסות.",
276
276
  "retry": "נסה שוב",
277
- "entityTypesFailed": "לא ניתן לטעון את סוגי הישויות."
277
+ "entityTypesFailed": "לא ניתן לטעון את סוגי הישויות.",
278
+ "tally": "{{found}} מתוך ~{{expected}} ישויות"
278
279
  },
279
280
  "KeyboardShortcuts": {
280
281
  "title": "קיצורי מקלדת",
@@ -488,6 +489,8 @@
488
489
  "decline_encrypted": "קובץ PDF זה מוגן בסיסמה ולא ניתן לקרוא את הטקסט.",
489
490
  "decline_corrupt": "לא ניתן היה לקרוא קובץ PDF זה — ייתכן שהקובץ פגום.",
490
491
  "decline_too-large": "מסמך זה גדול מדי לחילוץ טקסט.",
491
- "decline_empty": "במסמך זה אין טקסט להערה."
492
+ "decline_empty": "במסמך זה אין טקסט להערה.",
493
+ "annotationCompletePartial": "הזיהוי הסתיים באופן חלקי — {{pieces}} חלקים דווחו בחסר",
494
+ "annotationFailedPartial": "הזיהוי נכשל — הממצאים מ-{{kept}} סוגים שהושלמו נשמרו"
492
495
  }
493
496
  }
@@ -274,7 +274,8 @@
274
274
  "noText": "कोई टेक्स्ट नहीं",
275
275
  "incomingReferencesFailed": "इनकमिंग संदर्भ लोड नहीं हो सके।",
276
276
  "retry": "पुनः प्रयास करें",
277
- "entityTypesFailed": "इकाई प्रकार लोड नहीं हो सके।"
277
+ "entityTypesFailed": "इकाई प्रकार लोड नहीं हो सके।",
278
+ "tally": "~{{expected}} इकाइयों में से {{found}}"
278
279
  },
279
280
  "KeyboardShortcuts": {
280
281
  "title": "कीबोर्ड शॉर्टकट",
@@ -488,6 +489,8 @@
488
489
  "decline_encrypted": "यह PDF पासवर्ड-सुरक्षित है, इसका पाठ नहीं पढ़ा जा सकता।",
489
490
  "decline_corrupt": "यह PDF पढ़ा नहीं जा सका — फ़ाइल क्षतिग्रस्त हो सकती है।",
490
491
  "decline_too-large": "यह दस्तावेज़ पाठ निकालने के लिए बहुत बड़ा है।",
491
- "decline_empty": "इस दस्तावेज़ में एनोटेट करने योग्य कोई पाठ नहीं है।"
492
+ "decline_empty": "इस दस्तावेज़ में एनोटेट करने योग्य कोई पाठ नहीं है।",
493
+ "annotationCompletePartial": "पहचान अधूरी रही — {{pieces}} हिस्से कम रिपोर्ट हुए",
494
+ "annotationFailedPartial": "पहचान विफल — {{kept}} पूर्ण प्रकारों के परिणाम रखे गए"
492
495
  }
493
496
  }
@@ -274,7 +274,8 @@
274
274
  "noText": "Tidak ada teks",
275
275
  "incomingReferencesFailed": "Tidak dapat memuat referensi masuk.",
276
276
  "retry": "Coba lagi",
277
- "entityTypesFailed": "Tidak dapat memuat tipe entitas."
277
+ "entityTypesFailed": "Tidak dapat memuat tipe entitas.",
278
+ "tally": "{{found}} dari ~{{expected}} entitas"
278
279
  },
279
280
  "KeyboardShortcuts": {
280
281
  "title": "Pintasan Keyboard",
@@ -488,6 +489,8 @@
488
489
  "decline_encrypted": "PDF ini dilindungi kata sandi, teksnya tidak dapat dibaca.",
489
490
  "decline_corrupt": "PDF ini tidak dapat dibaca — berkas mungkin rusak.",
490
491
  "decline_too-large": "Dokumen ini terlalu besar untuk diekstrak teksnya.",
491
- "decline_empty": "Dokumen ini tidak memiliki teks untuk dianotasi."
492
+ "decline_empty": "Dokumen ini tidak memiliki teks untuk dianotasi.",
493
+ "annotationCompletePartial": "Deteksi selesai tidak lengkap — {{pieces}} bagian kurang terlaporkan",
494
+ "annotationFailedPartial": "Deteksi gagal — temuan dari {{kept}} tipe yang selesai dipertahankan"
492
495
  }
493
496
  }
@@ -274,7 +274,8 @@
274
274
  "noText": "Nessun testo",
275
275
  "incomingReferencesFailed": "Impossibile caricare i riferimenti in entrata.",
276
276
  "retry": "Riprova",
277
- "entityTypesFailed": "Impossibile caricare i tipi di entità."
277
+ "entityTypesFailed": "Impossibile caricare i tipi di entità.",
278
+ "tally": "{{found}} di ~{{expected}} entità"
278
279
  },
279
280
  "KeyboardShortcuts": {
280
281
  "title": "Scorciatoie da Tastiera",
@@ -488,6 +489,8 @@
488
489
  "decline_encrypted": "Questo PDF è protetto da password e il testo non è leggibile.",
489
490
  "decline_corrupt": "Impossibile leggere questo PDF — il file potrebbe essere danneggiato.",
490
491
  "decline_too-large": "Questo documento è troppo grande per estrarne il testo.",
491
- "decline_empty": "Questo documento non contiene testo da annotare."
492
+ "decline_empty": "Questo documento non contiene testo da annotare.",
493
+ "annotationCompletePartial": "Rilevamento terminato in modo incompleto — {{pieces}} parte/i sottostimate",
494
+ "annotationFailedPartial": "Rilevamento non riuscito — i risultati di {{kept}} tipi completati sono stati conservati"
492
495
  }
493
496
  }
@@ -274,7 +274,8 @@
274
274
  "noText": "テキストなし",
275
275
  "incomingReferencesFailed": "受信リファレンスを読み込めませんでした。",
276
276
  "retry": "再試行",
277
- "entityTypesFailed": "エンティティタイプを読み込めませんでした。"
277
+ "entityTypesFailed": "エンティティタイプを読み込めませんでした。",
278
+ "tally": "{{found}} / 約{{expected}} 件のエンティティ"
278
279
  },
279
280
  "KeyboardShortcuts": {
280
281
  "title": "キーボードショートカット",
@@ -488,6 +489,8 @@
488
489
  "decline_encrypted": "この PDF はパスワード保護されているため、テキストを読み取れません。",
489
490
  "decline_corrupt": "この PDF を読み取れませんでした。ファイルが破損している可能性があります。",
490
491
  "decline_too-large": "この文書は大きすぎてテキストを抽出できません。",
491
- "decline_empty": "この文書には注釈を付けるテキストがありません。"
492
+ "decline_empty": "この文書には注釈を付けるテキストがありません。",
493
+ "annotationCompletePartial": "検出は不完全に終了しました — {{pieces}} 件が過少報告",
494
+ "annotationFailedPartial": "検出に失敗しました — 完了した {{kept}} 種類の結果は保持されます"
492
495
  }
493
496
  }
@@ -274,7 +274,8 @@
274
274
  "noText": "텍스트 없음",
275
275
  "incomingReferencesFailed": "수신 참조를 불러올 수 없습니다.",
276
276
  "retry": "다시 시도",
277
- "entityTypesFailed": "개체 유형을 불러올 수 없습니다."
277
+ "entityTypesFailed": "개체 유형을 불러올 수 없습니다.",
278
+ "tally": "약 {{expected}}개 중 {{found}}개 엔티티"
278
279
  },
279
280
  "KeyboardShortcuts": {
280
281
  "title": "키보드 단축키",
@@ -488,6 +489,8 @@
488
489
  "decline_encrypted": "이 PDF는 암호로 보호되어 텍스트를 읽을 수 없습니다.",
489
490
  "decline_corrupt": "이 PDF를 읽지 못했습니다 — 파일이 손상되었을 수 있습니다.",
490
491
  "decline_too-large": "이 문서는 너무 커서 텍스트를 추출할 수 없습니다.",
491
- "decline_empty": "이 문서에는 주석을 달 텍스트가 없습니다."
492
+ "decline_empty": "이 문서에는 주석을 달 텍스트가 없습니다.",
493
+ "annotationCompletePartial": "감지가 불완전하게 끝났습니다 — {{pieces}}개 과소 보고됨",
494
+ "annotationFailedPartial": "감지 실패 — 완료된 {{kept}}개 유형의 결과는 유지됩니다"
492
495
  }
493
496
  }
@@ -274,7 +274,8 @@
274
274
  "noText": "Tiada teks",
275
275
  "incomingReferencesFailed": "Tidak dapat memuatkan rujukan masuk.",
276
276
  "retry": "Cuba lagi",
277
- "entityTypesFailed": "Tidak dapat memuatkan jenis entiti."
277
+ "entityTypesFailed": "Tidak dapat memuatkan jenis entiti.",
278
+ "tally": "{{found}} daripada ~{{expected}} entiti"
278
279
  },
279
280
  "KeyboardShortcuts": {
280
281
  "title": "Pintasan Papan Kekunci",
@@ -488,6 +489,8 @@
488
489
  "decline_encrypted": "PDF ini dilindungi kata laluan, teksnya tidak boleh dibaca.",
489
490
  "decline_corrupt": "PDF ini tidak dapat dibaca — fail mungkin rosak.",
490
491
  "decline_too-large": "Dokumen ini terlalu besar untuk mengekstrak teks.",
491
- "decline_empty": "Dokumen ini tiada teks untuk dianotasi."
492
+ "decline_empty": "Dokumen ini tiada teks untuk dianotasi.",
493
+ "annotationCompletePartial": "Pengesanan tamat tidak lengkap — {{pieces}} bahagian kurang dilaporkan",
494
+ "annotationFailedPartial": "Pengesanan gagal — penemuan daripada {{kept}} jenis yang selesai dikekalkan"
492
495
  }
493
496
  }
@@ -274,7 +274,8 @@
274
274
  "noText": "Geen tekst",
275
275
  "incomingReferencesFailed": "Kan de inkomende referenties niet laden.",
276
276
  "retry": "Opnieuw proberen",
277
- "entityTypesFailed": "Kan de entiteitstypen niet laden."
277
+ "entityTypesFailed": "Kan de entiteitstypen niet laden.",
278
+ "tally": "{{found}} van ~{{expected}} entiteiten"
278
279
  },
279
280
  "KeyboardShortcuts": {
280
281
  "title": "Sneltoetsen",
@@ -488,6 +489,8 @@
488
489
  "decline_encrypted": "Deze PDF is met een wachtwoord beveiligd; de tekst is onleesbaar.",
489
490
  "decline_corrupt": "Deze PDF kon niet gelezen worden — het bestand is mogelijk beschadigd.",
490
491
  "decline_too-large": "Dit document is te groot om tekst uit te halen.",
491
- "decline_empty": "Dit document bevat geen tekst om te annoteren."
492
+ "decline_empty": "Dit document bevat geen tekst om te annoteren.",
493
+ "annotationCompletePartial": "Detectie onvolledig beëindigd — {{pieces}} deel/delen ondergerapporteerd",
494
+ "annotationFailedPartial": "Detectie mislukt — resultaten van {{kept}} voltooide typen zijn bewaard"
492
495
  }
493
496
  }
@@ -274,7 +274,8 @@
274
274
  "noText": "Ingen tekst",
275
275
  "incomingReferencesFailed": "Kunne ikke laste innkommende referanser.",
276
276
  "retry": "Prøv igjen",
277
- "entityTypesFailed": "Kunne ikke laste entitetstyper."
277
+ "entityTypesFailed": "Kunne ikke laste entitetstyper.",
278
+ "tally": "{{found}} av ~{{expected}} entiteter"
278
279
  },
279
280
  "KeyboardShortcuts": {
280
281
  "title": "Tastatursnarveier",
@@ -488,6 +489,8 @@
488
489
  "decline_encrypted": "Denne PDF-en er passordbeskyttet, så teksten kan ikke leses.",
489
490
  "decline_corrupt": "Denne PDF-en kunne ikke leses — filen kan være skadet.",
490
491
  "decline_too-large": "Dette dokumentet er for stort til å hente ut tekst fra.",
491
- "decline_empty": "Dette dokumentet har ingen tekst å merke."
492
+ "decline_empty": "Dette dokumentet har ingen tekst å merke.",
493
+ "annotationCompletePartial": "Deteksjon fullført ufullstendig — {{pieces}} del(er) underrapportert",
494
+ "annotationFailedPartial": "Deteksjon mislyktes — funn fra {{kept}} fullførte typer ble beholdt"
492
495
  }
493
496
  }
@@ -274,7 +274,8 @@
274
274
  "noText": "Brak tekstu",
275
275
  "incomingReferencesFailed": "Nie można załadować przychodzących referencji.",
276
276
  "retry": "Spróbuj ponownie",
277
- "entityTypesFailed": "Nie można załadować typów encji."
277
+ "entityTypesFailed": "Nie można załadować typów encji.",
278
+ "tally": "{{found}} z ~{{expected}} encji"
278
279
  },
279
280
  "KeyboardShortcuts": {
280
281
  "title": "Skróty klawiszowe",
@@ -488,6 +489,8 @@
488
489
  "decline_encrypted": "Ten PDF jest chroniony hasłem, tekstu nie można odczytać.",
489
490
  "decline_corrupt": "Nie udało się odczytać tego PDF-a — plik może być uszkodzony.",
490
491
  "decline_too-large": "Ten dokument jest zbyt duży, aby wyodrębnić tekst.",
491
- "decline_empty": "Ten dokument nie zawiera tekstu do adnotacji."
492
+ "decline_empty": "Ten dokument nie zawiera tekstu do adnotacji.",
493
+ "annotationCompletePartial": "Wykrywanie zakończone niekompletnie — {{pieces}} fragment(ów) niedoraportowanych",
494
+ "annotationFailedPartial": "Wykrywanie nie powiodło się — wyniki z {{kept}} ukończonych typów zachowano"
492
495
  }
493
496
  }
@@ -274,7 +274,8 @@
274
274
  "noText": "Sem texto",
275
275
  "incomingReferencesFailed": "Não foi possível carregar as referências recebidas.",
276
276
  "retry": "Tentar novamente",
277
- "entityTypesFailed": "Não foi possível carregar os tipos de entidade."
277
+ "entityTypesFailed": "Não foi possível carregar os tipos de entidade.",
278
+ "tally": "{{found}} de ~{{expected}} entidades"
278
279
  },
279
280
  "KeyboardShortcuts": {
280
281
  "title": "Atalhos de Teclado",
@@ -488,6 +489,8 @@
488
489
  "decline_encrypted": "Este PDF está protegido por palavra-passe e o texto não pode ser lido.",
489
490
  "decline_corrupt": "Não foi possível ler este PDF — o ficheiro pode estar danificado.",
490
491
  "decline_too-large": "Este documento é demasiado grande para extrair texto.",
491
- "decline_empty": "Este documento não tem texto para anotar."
492
+ "decline_empty": "Este documento não tem texto para anotar.",
493
+ "annotationCompletePartial": "Detecção terminou incompleta — {{pieces}} parte(s) subnotificadas",
494
+ "annotationFailedPartial": "Detecção falhou — os resultados de {{kept}} tipo(s) concluídos foram mantidos"
492
495
  }
493
496
  }
@@ -274,7 +274,8 @@
274
274
  "noText": "Fără text",
275
275
  "incomingReferencesFailed": "Nu s-au putut încărca referințele primite.",
276
276
  "retry": "Încearcă din nou",
277
- "entityTypesFailed": "Nu s-au putut încărca tipurile de entitate."
277
+ "entityTypesFailed": "Nu s-au putut încărca tipurile de entitate.",
278
+ "tally": "{{found}} din ~{{expected}} entități"
278
279
  },
279
280
  "KeyboardShortcuts": {
280
281
  "title": "Comenzi rapide de la tastatură",
@@ -488,6 +489,8 @@
488
489
  "decline_encrypted": "Acest PDF este protejat prin parolă, textul nu poate fi citit.",
489
490
  "decline_corrupt": "Acest PDF nu a putut fi citit — fișierul poate fi deteriorat.",
490
491
  "decline_too-large": "Acest document este prea mare pentru extragerea textului.",
491
- "decline_empty": "Acest document nu are text de adnotat."
492
+ "decline_empty": "Acest document nu are text de adnotat.",
493
+ "annotationCompletePartial": "Detectarea s-a încheiat incomplet — {{pieces}} părți subraportate",
494
+ "annotationFailedPartial": "Detectarea a eșuat — rezultatele din {{kept}} tipuri finalizate au fost păstrate"
492
495
  }
493
496
  }
@@ -274,7 +274,8 @@
274
274
  "noText": "Ingen text",
275
275
  "incomingReferencesFailed": "Det gick inte att läsa in inkommande referenser.",
276
276
  "retry": "Försök igen",
277
- "entityTypesFailed": "Det gick inte att läsa in entitetstyper."
277
+ "entityTypesFailed": "Det gick inte att läsa in entitetstyper.",
278
+ "tally": "{{found}} av ~{{expected}} entiteter"
278
279
  },
279
280
  "KeyboardShortcuts": {
280
281
  "title": "Tangentbordsgenvägar",
@@ -488,6 +489,8 @@
488
489
  "decline_encrypted": "Denna PDF är lösenordsskyddad och texten går inte att läsa.",
489
490
  "decline_corrupt": "Denna PDF kunde inte läsas — filen kan vara skadad.",
490
491
  "decline_too-large": "Detta dokument är för stort för att extrahera text ur.",
491
- "decline_empty": "Detta dokument har ingen text att annotera."
492
+ "decline_empty": "Detta dokument har ingen text att annotera.",
493
+ "annotationCompletePartial": "Detektering avslutad ofullständigt — {{pieces}} del(ar) underrapporterade",
494
+ "annotationFailedPartial": "Detektering misslyckades — fynd från {{kept}} slutförda typer behölls"
492
495
  }
493
496
  }
@@ -274,7 +274,8 @@
274
274
  "noText": "ไม่มีข้อความ",
275
275
  "incomingReferencesFailed": "ไม่สามารถโหลดการอ้างอิงขาเข้าได้",
276
276
  "retry": "ลองอีกครั้ง",
277
- "entityTypesFailed": "ไม่สามารถโหลดประเภทเอนทิตีได้"
277
+ "entityTypesFailed": "ไม่สามารถโหลดประเภทเอนทิตีได้",
278
+ "tally": "{{found}} จากประมาณ {{expected}} เอนทิตี"
278
279
  },
279
280
  "KeyboardShortcuts": {
280
281
  "title": "ปุ่มลัดแป้นพิมพ์",
@@ -488,6 +489,8 @@
488
489
  "decline_encrypted": "PDF นี้ป้องกันด้วยรหัสผ่าน จึงอ่านข้อความไม่ได้",
489
490
  "decline_corrupt": "อ่าน PDF นี้ไม่ได้ — ไฟล์อาจเสียหาย",
490
491
  "decline_too-large": "เอกสารนี้ใหญ่เกินกว่าจะดึงข้อความได้",
491
- "decline_empty": "เอกสารนี้ไม่มีข้อความให้ทำคำอธิบายประกอบ"
492
+ "decline_empty": "เอกสารนี้ไม่มีข้อความให้ทำคำอธิบายประกอบ",
493
+ "annotationCompletePartial": "การตรวจจับเสร็จแบบไม่สมบูรณ์ — {{pieces}} ส่วนรายงานไม่ครบ",
494
+ "annotationFailedPartial": "การตรวจจับล้มเหลว — เก็บผลจาก {{kept}} ประเภทที่เสร็จแล้วไว้"
492
495
  }
493
496
  }