@accurix/centrinfo-widget 5.3.1 → 5.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/README.md +229 -37
  2. package/dist/bundle-ar-D_Sk4igF.mjs +1 -0
  3. package/dist/bundle-ar-fKjs-fvS.cjs +1 -0
  4. package/dist/bundle-de-BST4qEm1.cjs +1 -0
  5. package/dist/bundle-de-BWnVOyv0.mjs +1 -0
  6. package/dist/bundle-es-Bes8ddxv.mjs +1 -0
  7. package/dist/bundle-es-Bfphsx9c.cjs +1 -0
  8. package/dist/bundle-fr-D1QlfFID.mjs +1 -0
  9. package/dist/bundle-fr-X5Ian15d.cjs +1 -0
  10. package/dist/bundle-it-9j6g91Cu.mjs +1 -0
  11. package/dist/bundle-it-C2HPnGql.cjs +1 -0
  12. package/dist/bundle-pt-BK9LBxix.mjs +1 -0
  13. package/dist/bundle-pt-BMcCSSgB.cjs +1 -0
  14. package/dist/bundle-sw-BKWnwk-0.cjs +1 -0
  15. package/dist/bundle-sw-DA2XuFS_.mjs +1 -0
  16. package/dist/cdn/centrinfo-widget-dev.js +35 -23
  17. package/dist/cdn/centrinfo-widget-locale-ar.js +4 -0
  18. package/dist/cdn/centrinfo-widget-locale-de.js +4 -0
  19. package/dist/cdn/centrinfo-widget-locale-es.js +4 -0
  20. package/dist/cdn/centrinfo-widget-locale-fr.js +4 -0
  21. package/dist/cdn/centrinfo-widget-locale-it.js +4 -0
  22. package/dist/cdn/centrinfo-widget-locale-pt.js +4 -0
  23. package/dist/cdn/centrinfo-widget-locale-sw.js +4 -0
  24. package/dist/cdn/centrinfo-widget-voice.js +272 -0
  25. package/dist/cdn/centrinfo-widget.js +171 -145
  26. package/dist/cdn/manifest.json +57 -9
  27. package/dist/dev-transports-DP4ilDW1.mjs +13 -0
  28. package/dist/dev-transports-uGHAao9W.cjs +13 -0
  29. package/dist/index.cjs +2 -1
  30. package/dist/index.d.cts +2 -2
  31. package/dist/index.d.mts +2 -2
  32. package/dist/index.d.ts +2 -2
  33. package/dist/index.mjs +2 -1
  34. package/dist/runtime.cjs +2 -2
  35. package/dist/runtime.d.cts +126 -11
  36. package/dist/runtime.d.mts +120 -8
  37. package/dist/runtime.d.ts +479 -0
  38. package/dist/runtime.mjs +2 -2
  39. package/dist/speech-detector-runtime-D5GpV8VJ.cjs +68 -0
  40. package/dist/speech-detector-runtime-D7gguFpP.mjs +68 -0
  41. package/dist/styles-BWPJrttg.cjs +3563 -0
  42. package/dist/styles-C8MXPiR-.mjs +3563 -0
  43. package/dist/{types-CSrYnsOp.d.mts → types-M-juCXr7.d.mts} +551 -98
  44. package/dist/{types-eBuee08Q.d.cts → types-sRV3p0Gu.d.cts} +542 -92
  45. package/package.json +4 -3
  46. package/dist/dev-transports-DqSPyIEz.mjs +0 -1
  47. package/dist/dev-transports-KlSdSZpj.cjs +0 -1
  48. package/dist/styles-BUK2S5l_.mjs +0 -3543
  49. package/dist/styles-BVQRcZkH.cjs +0 -3543
package/README.md CHANGED
@@ -49,6 +49,24 @@ These display options do not change data access or conversation retention.
49
49
  In the floating widget, a separately configured voice assistant/call experience
50
50
  is independent of the composer's microphone button.
51
51
 
52
+ ## Automatic issue creation
53
+
54
+ In **SDK/API → Applications → Chat**, an organization can enable **Automatically
55
+ raise an issue when the assistant cannot answer**. This application setting is
56
+ off by default. When off, an unanswered turn does not automatically raise an
57
+ issue, ask for an email, or announce that the team was alerted. Visitors may
58
+ still send a request through **Contact options**. When on, an eligible
59
+ unanswered turn can begin an automatic follow-up; the widget shows an alert
60
+ receipt only when the backend returns `issueRaised: true`. The setting is
61
+ controlled by the application owner, not a browser `createWidget()` option.
62
+ Firewall blocks, message caps, paused applications, and missing credits do
63
+ not raise automatic issues even when it is on.
64
+
65
+ An AI-selected support action does not automatically open a contact form.
66
+ Visitors choose **Contact options** or a support button to open it. An explicit
67
+ **Reconnect to support** click can open the form directly. Analytics errors and
68
+ clarification questions do not start the additional support-selection AI call.
69
+
52
70
  For more control, use existing `themeTokens`, `labels`, `locale`, `dir`,
53
71
  `theme`, placement and launcher options. Explicit advanced options take priority:
54
72
  `agentName`, `agentAvatarUrl`, `launcherIcon`, `accentColor`, `attachments`,
@@ -62,28 +80,51 @@ message renderers, button ordering and custom CSS injection are not provided.
62
80
 
63
81
  ### Script tag (any site — WordPress / Webflow / plain HTML)
64
82
 
83
+ Create an application under **SDK/API → Applications**, enable Chat, add your
84
+ website to its allowed domains, and copy the publishable key from **Keys & quick
85
+ start**. Paste this once before `</body>` and replace the key placeholder. No npm
86
+ installation or SDK hosting is needed.
87
+
65
88
  Zero-JS, via `data-*` on the script:
66
89
 
67
90
  ```html
68
91
  <script
69
- src="https://cdn.accurixtech.com/centrinfo/js/sdk-centrinfo-widget-v5.0.0/centrinfo-widget.js"
70
- data-token="pub_8f3k…"
92
+ src="https://cdn.accurixtech.com/centrinfo/js/sdk-centrinfo-widget-v5.3.1/centrinfo-widget.js"
93
+ data-token="pub_YOUR_WIDGET_TOKEN"
94
+ data-theme="auto"
71
95
  defer
72
96
  ></script>
73
97
  ```
74
98
 
75
- Or call `init` yourself:
99
+ Or omit `data-token` and call `init` yourself after the script loads:
76
100
 
77
101
  ```html
78
102
  <script
79
- src="https://cdn.accurixtech.com/centrinfo/js/sdk-centrinfo-widget-v5.0.0/centrinfo-widget.js"
103
+ src="https://cdn.accurixtech.com/centrinfo/js/sdk-centrinfo-widget-v5.3.1/centrinfo-widget.js"
80
104
  defer
81
105
  ></script>
82
106
  <script>
83
- window.addEventListener('load', () => Centrinfo.init({ token: 'pub_8f3k…' }));
107
+ window.addEventListener('load', () =>
108
+ window.Centrinfo.init({ token: 'pub_YOUR_WIDGET_TOKEN', theme: 'auto' }),
109
+ );
84
110
  </script>
85
111
  ```
86
112
 
113
+ Choose one initialization method and install the script once. Never put server
114
+ secrets or private signing keys in HTML. Use a test publishable key while
115
+ integrating, then a live key for production.
116
+
117
+ The example pins **5.3.1**; change the URL explicitly when upgrading to a tested
118
+ release. The script loads its chart and developer chunks from the same CDN
119
+ directory automatically. Do not add those chunks as separate script tags.
120
+ See the version's [`manifest.json`](https://cdn.accurixtech.com/centrinfo/js/sdk-centrinfo-widget-v5.3.1/manifest.json)
121
+ for the file list and integrity hashes.
122
+
123
+ The full customer-facing guide is **Developers → SDKs → Floating chat → Install
124
+ with a script tag**. Its shared source is
125
+ [floating-chat.md](../../../../backend/docs/developer/floating-chat.md), served
126
+ by the backend to both developer documentation websites.
127
+
87
128
  ### npm (React / Next / any bundler)
88
129
 
89
130
  ```bash
@@ -121,7 +162,8 @@ These options work in both the floating widget and full-page chat SDK.
121
162
  | `themeTokens` | object | — | Enterprise theme tokens for chat surfaces: accent, background, surface, text, muted text, border, shadow, radius, and font family. |
122
163
  | `launcherIcon` | string | chat glyph | Image URL (e.g. the org's logo) shown in the launcher bubble. |
123
164
  | `theme` | `'light' \| 'dark' \| 'auto'` | `'auto'` | `auto` follows the host's `prefers-color-scheme`; `light`/`dark` force it. |
124
- | `locale` / `dir` | string / `'ltr' \| 'rtl' \| 'auto'` | browser / `'auto'` | `dir` follows the locale (Arabic, Hebrew, Persian, Urdu... render right-to-left) unless forced. |
165
+ | `locale` / `dir` | string / `'ltr' \| 'rtl' \| 'auto'` | browser / `'auto'` | BCP-47 language for UI text, dates and numbers (see [Languages](#languages-and-text)); `dir` follows the locale unless forced. |
166
+ | `strings` | object | — | Override any UI text by key (wins over `labels`, `translations` and the bundled catalog). |
125
167
  | `openByDefault` | boolean | `false` | Open the panel on load. |
126
168
  | `zIndex` | number | very high | Stacking against the host page. |
127
169
  | `demo` | boolean | `false` | Use the built-in mock transport — **no backend/token needed**. |
@@ -208,6 +250,80 @@ actions appear all come from the token via `GET /public-chat/bootstrap` — not
208
250
  from the snippet. Open widgets refresh that bootstrap data every 30 seconds, so
209
251
  saved dashboard settings reach visitors without a page reload.
210
252
 
253
+ ## Languages and text
254
+
255
+ Every piece of widget chrome (buttons, aria labels, placeholders, status
256
+ lines, errors, booking and form copy, analytics labels) comes from a string
257
+ catalog. Organizations control it with these options:
258
+
259
+ - `locale` — BCP-47 tag (`fr`, `pt-BR`, `ar-EG`, …). Defaults to the browser
260
+ language. Picks the bundled catalog and formats dates, times, numbers and
261
+ lists with `Intl`.
262
+ - `strings` — any subset of the keys below; wins over everything else. `labels`
263
+ (older name) still works; when both set a key, `strings` wins.
264
+ - `autoTranslate` — defaults to `true`. The authenticated backend fills missing
265
+ static UI translations for any valid locale. Set `false` to use bundled text
266
+ and your own overrides only (`data-auto-translate="false"` for script tags).
267
+ - `dir` — `auto` (default) renders Arabic, Hebrew, Persian, Urdu and similar
268
+ locales right-to-left; `ltr`/`rtl` force it.
269
+
270
+ Bundled catalogs: English (`en`), French (`fr`), Spanish (`es`), Portuguese
271
+ (`pt`), German (`de`), Italian (`it`), Arabic (`ar`), Swahili (`sw`). Yoruba
272
+ (`yo`), Hausa (`ha`) and Igbo (`ig`) have empty bundled slots. Automatic
273
+ translation can fill those and other languages. English and bundled text render
274
+ immediately while translations load; unavailable translations keep those
275
+ fallbacks. Dates and numbers use the locale supported by the browser's `Intl`.
276
+
277
+ Order, lowest first: English → bundled catalog for `locale` → automatic UI catalog →
278
+ `translations[locale].labels` → `labels` → `strings`. Analytics wording
279
+ (`strings.analytics`) layers the same way over the results catalog.
280
+
281
+ ```ts
282
+ const widget = Centrinfo.init({
283
+ token: 'pub_8f3k...',
284
+ locale: 'fr-CA',
285
+ strings: {
286
+ composerPlaceholder: 'Posez votre question à l’équipe Acme…',
287
+ speakWithAgent: 'Parler avec {name}',
288
+ analytics: { download: 'Exporter' },
289
+ },
290
+ });
291
+
292
+ // Later, e.g. from the host's language switcher:
293
+ await widget.setLocale({ locale: 'ar' }); // Arabic text, right-to-left
294
+ await widget.setLocale({ strings: { openChat: 'تحدث إلينا' } }); // merges over earlier overrides
295
+ ```
296
+
297
+ `setLocale({ locale?, strings?, dir? })` updates the open widget in place (the
298
+ conversation, draft and session are kept) and resolves once the new text is
299
+ shown from the bundle and host overrides. Automatic text updates afterwards
300
+ without blocking the conversation. Script-tag installs can use `data-locale`
301
+ and `data-dir`.
302
+
303
+ Automatic translation uses only the server's versioned UI catalog; chat content,
304
+ database values, provider credentials and host `strings` are never submitted by this
305
+ loader. The organization pays actual model tokens once per language/UI version;
306
+ the completed pack is reused across visitors and SDKs. Cache hits and rendering
307
+ do not add a translation charge. A failed/unavailable translation preserves
308
+ the current UI. Demo and preview modes do not request automatic translations.
309
+ SDK test credentials use bundled/English and custom text only; they do not
310
+ generate or bill automatic translations. Use a live credential for generation.
311
+
312
+ The bundled catalog is loaded lazily, one small file per language (about
313
+ 9 KB gzip each); English needs no extra request. The widget first renders with
314
+ English plus your `strings`, then swaps in the catalog when it arrives. This
315
+ setting controls interface text; assistant replies follow the conversation's
316
+ language settings separately. Names and values supplied by your app stay intact.
317
+
318
+ `{name}`-style placeholders must be kept in overrides. String keys:
319
+
320
+ `analyticsModelLabel`, `analyticsModelAutomatic`, `analyticsModelUnavailable`, `testMode`, `fullPageNewConversation`, `fullPageHistory`, `fullPageShare`, `fullPageExport`, `fullPageSupportQueued`, `fullPageSources`, `fullPageActions`, `fullPageDownloadTranscript`, `fullPageLiveAgent`, `fullPageAttachmentTooLarge`, `fullPageAttachmentUnsupported`, `fullPageAttachmentFailed`, `openChat`, `closeChat`, `closeHistory`, `unreadMessage`, `unreadMessages`, `muteSounds`, `unmuteSounds`, `statusOnline`, `statusOffline`, `liveSupport`, `reconnectSupport`, `reconnectPrompt`, `waitingForTeam`, `assistantName`, `chatName`, `welcomeLabel`, `welcomeEyebrow`, `welcomePrompt`, `agentTyping`, `expandedAnalyticsResult`, `privacyAndData`, `muteMicrophone`, `unmuteMicrophone`, `chooseMicrophone`, `defaultMicrophone`, `microphone`, `talkNow`, `expandView`, `exitExpandedView`, `minimizeVoiceChat`, `endVoiceChat`, `speakWithAgent`, `restoreVoiceChat`, `reopenVoiceChat`, `voiceConnecting`, `voiceListening`, `voiceHearing`, `voiceUnavailable`, `voiceProcessing`, `voiceSpeaking`, `voiceNoise`, `voiceMisunderstood`, `voiceDenied`, `voiceMuted`, `voiceTimeout`, `callConnecting`, `callListening`, `callHearing`, `callUnavailable`, `callSpeaking`, `callProcessing`, `callNoise`, `callMisunderstood`, `callDenied`, `callWaiting`, `callStillWorking`, `resumeVoiceChat`, `voiceAnswerStillComing`, `composerPlaceholder`, `send`, `emoji`, `gifs`, `attachFile`, `recordVoice`, `stopRecording`, `actionTestMode`, `stop`, `copy`, `copied`, `doubleCheckResponse`, `retryResponse`, `retry`, `clearChat`, `clearChatConfirm`, `clearChatConfirmBody`, `clearConfirmCta`, `endChat`, `endChatConfirm`, `endChatConfirmBody`, `endConfirmCta`, `conversationEnded`, `startNewChat`, `pastConversations`, `viewingPast`, `backToChat`, `historyEnded`, `feedbackHelpful`, `feedbackNotHelpful`, `feedbackAnswerPrompt`, `feedbackThanks`, `csatPrompt`, `feedbackCommentPlaceholder`, `feedbackSend`, `cancel`, `newMessages`, `poweredBy`, `searchGifs`, `searchingGifs`, `noGifs`, `assistantTyping`, `emptyReply`, `errorGeneric`, `errorRateLimit`, `errorTimeout`, `errorUnavailable`, `errorAccess`, `errorAnalysis`, `errorAnalyticsSetup`, `errorCredits`, `errorSubscription`, `resultExpired`, `attaching`, `attachTooLarge`, `attachFailed`, `attachPreviewTitle`, `attachOpen`, `attachDownload`, `attachPreviewClose`, `attachPreviewLoading`, `attachPreviewFailed`, `attachPreviewUnsupported`, `attachAnalysisFailed`, `removeAttachment`, `attachLimit`, `attachedFiles`, `removeAttachmentNamed`, `dropFileHere`, `clearDeviceData`, `clearDeviceDataBody`, `clearDeviceDataCta`, `handoffTitle`, `handoffName`, `handoffEmail`, `handoffNotify`, `sending`, `handoffShared`, `formThanks`, `formError`, `voiceFormAsk`, `voiceFormReview`, `voiceFormCancelled`, `voiceFormUnavailable`, `voiceFormNoSlots`, `voiceFormLoading`, `voiceFormAt`, `voiceFormDot`, `voiceFormAppointmentTime`, `voiceFormTimeUnavailable`, `voiceFormExternal`, `caseReference`, `actionContactOptions`, `actionGetInTouch`, `actionMore`, `actionNeedHelp`, `actionChoose`, `actionFooter`, `actionCategorySupport`, `actionCategorySales`, `actionCategoryMarketing`, `actionClose`, `actionAs`, `bookingPickTime`, `bookingPickDay`, `bookingPickTimeLabel`, `bookingDuration`, `bookingCallbackDuration`, `bookingTimezone`, `bookingSchedulerFallback`, `bookingCheckingAvailability`, `bookingNoSlots`, `bookingAvailabilityUnavailable`, `bookingEarlierToday`, `bookingCalendarBusy`, `bookingAlreadyBooked`, `bookingNotOffered`, `bookingRequested`, `bookingVerificationPending`, `bookingCallbackRequested`, `bookingCallbackConfirmed`, `bookingConfirmed`, `bookingSlotTaken`, `bookingViaProvider`, `bookingOpenScheduler`, `bookingLinkOpened`, `bookingScheduled`, `bookingBackToChat`, `bookingOpenNewTab`, `bookingCloseScheduler`, `bookingLoadingScheduler`, `bookingMeetingLink`, `bookingManageLink`, `bookingUnverifiedLink`, `bookingCheckingDetails`, `bookingDetailsUnavailable`, `bookingRetryDetails`, `callConnectingWithAi`, `disclaimerDefault`, `actionContactSupportDescription`, `actionLeaveMessageDescription`, `actionBookDemoDescription`, `actionRequestCallbackDescription`, `actionScheduleCallbackDescription`, `actionSubscribeDescription`, `formContactSupportTitle`, `formRequestSupport`, `formLeaveMessageTitle`, `formSendMessage`, `formShareDetailsTitle`, `formSave`, `formBookDemoTitle`, `formRequestDemo`, `formRequestCallbackTitle`, `formRequestCallback`, `formScheduleCallbackTitle`, `formScheduleCallback`, `formSubscribe`, `fieldFullName`, `fieldEmail`, `fieldSubject`, `fieldMessage`, `fieldPhone`, `fieldPhoneNumber`, `fieldPreferredTime`, `fieldNotes`, `fieldTopic`, `placeholderSupportMessage`, `placeholderInquiryMessage`, `placeholderPreferredTime`, `placeholderNotes`, `placeholderTopic`, `phoneChooseCountry`, `phoneSearchPlaceholder`, `phoneSearchLabel`, `phoneCountries`, `phoneNoCountries`, `handoffDefaultMessage`, `handoffAlerted`, `gifAlt`, `toolResultAlt`, `openResult`, `microphoneNumbered`, `voiceDraftListening`, `emojiSmileys`, `emojiGestures`, `emojiHearts`, `emojiAnimals`, `emojiFood`, `emojiObjects`, `actionCompleted`, `copyResultData`, `copyRowsReturned`, `copyRowsReturnedOf`, `copyTruncated`, `copyTotals`, `previewReply`, `previewActionNote`, `previewBanner`.
321
+
322
+ Analytics keys live under `strings.analytics` (see [Analytics labels](#analytics-labels)).
323
+ Not translated by the catalog: the org's own content from the dashboard
324
+ (persona, greeting, starters, action labels — localize those per locale with
325
+ `translations[locale].actions`), demo-mode sample answers, and AI answers.
326
+
211
327
  ## Authenticated history
212
328
 
213
329
  For a logged-in customer, mint a short-lived identity token on the host
@@ -222,11 +338,25 @@ const widget = init({
222
338
  credentials: 'include',
223
339
  });
224
340
  if (!response.ok) throw new Error('Sign in is required.');
225
- return response.json();
341
+ const { token } = await response.json();
342
+ if (typeof token !== 'string' || !token.trim()) {
343
+ throw new Error('The identity endpoint did not return a token.');
344
+ }
345
+ return token;
226
346
  },
227
347
  });
228
348
  ```
229
349
 
350
+ Your application's authenticated endpoint returns `{ "token": "SIGNED_CUSTOMER_JWT" }`.
351
+ The callback returns only the JWT string. Derive the identity from the verified
352
+ server session and send `Cache-Control: no-store` on the token response. Keep
353
+ the private signing key on your backend.
354
+
355
+ For a complete CDN example and the backend signing helper, see
356
+ [Floating chat → Logged-in customers using the CDN](../../../../backend/docs/developer/floating-chat.md#logged-in-customers-using-the-cdn)
357
+ and [SDK setup → Logged-in users](../../../../backend/docs/developer/sdk-architecture.md#logged-in-users).
358
+ The same guides are available in the developer documentation websites.
359
+
230
360
  Authenticated conversations are restored from Centrinfo's backend in a new
231
361
  browser or device after the identity token is verified. Anonymous history is
232
362
  stored only according to the widget's `persistence` option and cannot be
@@ -298,7 +428,7 @@ browser code.
298
428
  ### Other options
299
429
 
300
430
  `persistence` (`local` | `session` | `none`), `attachments`, `sound`, `starters`,
301
- `labels`, `translations`, `agentName`, `agentAvatarUrl`, `gifApiKey`,
431
+ `labels`, `strings`, `translations`, `agentName`, `agentAvatarUrl`, `gifApiKey`,
302
432
  `styleNonce`, `preview`, `user`, `alignment`, `horizontalPadding`,
303
433
  `verticalPadding`, `hideDefaultLauncher`, `customLauncherSelector`,
304
434
  `sessionDurationMinutes`, `proactiveMessage`, `proactiveDelaySeconds`,
@@ -323,7 +453,8 @@ browser code.
323
453
  `data-vertical-padding`, `data-hide-launcher`, `data-custom-launcher-selector`,
324
454
  `data-style-nonce`, `data-session-duration`, `data-config-refresh`,
325
455
  `data-proactive-message`, `data-proactive-delay`, `data-csat` (`false`
326
- disables), `data-user` (JSON). Source: `src/cdn/data-attributes.ts`.
456
+ disables), `data-user` (JSON), `data-locale`, `data-dir` (`ltr`, `rtl`, `auto`).
457
+ Source: `src/cdn/data-attributes.ts`.
327
458
 
328
459
  ### Identity tokens, rate limits, explanations
329
460
 
@@ -369,13 +500,12 @@ With the default `persistence: 'local'` the widget keeps, per token and visitor
369
500
 
370
501
  - the session id, the visitor's name/email/phone once given, and a history index;
371
502
  - a transcript with message text, analytics answers, chart data, sources, and
372
- feedback. Anonymous transcripts follow the token's message cap and retention
373
- (30 days by default). Signed-in transcripts have no automatic local expiry;
374
- the local cache remains bounded by the message cap and browser storage quota.
503
+ feedback. Anonymous and signed-in transcripts follow the token's message cap
504
+ and retention (30 days by default), as well as browser storage quota.
375
505
 
376
506
  Conversations bound to a verified signed customer identity do not auto-end
377
- after inactivity. Their server messages are retained without the anonymous
378
- TTL or message-cap deletion. A display-only `user` value does not establish
507
+ after inactivity. Their messages still follow the configured retention and
508
+ message cap. A display-only `user` value does not establish
379
509
  verified identity: supply `identityToken` or `getIdentityToken`. Explicitly
380
510
  ending a conversation, removing it from history, and host logout still work.
381
511
  Authentication tokens still expire and must be refreshed normally. The AI
@@ -387,26 +517,32 @@ Authenticated history also restores the retained answer from the backend on a
387
517
  new device. Ask the question again when you want current data. Older SDK
388
518
  versions may have stored only a result marker; those entries cannot be restored.
389
519
  Writes happen at most once per second (plus on tab hide), and a full or blocked
390
- storage only costs the local copy of the chat. Use `persistence: 'none'` to
391
- keep no transcript on the device. Server retention follows the anonymous
392
- conversation settings for anonymous sessions; verified customer messages do
393
- not expire automatically. Previously deleted messages cannot be recovered.
520
+ storage only costs the local copy of the chat. Original server expiry deadlines
521
+ are preserved when history is cached or reopened. Expired messages and history
522
+ entries clear while the widget is mounted, including cached inactive conversations
523
+ when offline. This clears messages without ending a signed-in session.
524
+ Use `persistence: 'none'` to keep no transcript on the device. Server retention
525
+ and message caps apply to anonymous and verified customer messages. Previously
526
+ deleted messages cannot be recovered.
394
527
 
395
528
  ## Lazy files and CSP
396
529
 
397
- The CDN script is ~100 KB gzip. Two sibling files are fetched on demand,
530
+ The CDN script is ~160 KB gzip. Sibling files are fetched on demand,
398
531
  relative to the script's own URL, and are published next to it by `publish:cdn`:
399
532
 
400
- | File | Loaded when | ~gzip |
401
- | ---------------------------- | ------------------------------------- | ------ |
402
- | `centrinfo-widget-charts.js` | the first chart is drawn (ECharts) | 190 KB |
403
- | `centrinfo-widget-dev.js` | only with `demo` or `preview` enabled | 5 KB |
533
+ | File | Loaded when | ~gzip |
534
+ | ----------------------------------- | ---------------------------------------- | ------- |
535
+ | `centrinfo-widget-charts.js` | the first chart is drawn (ECharts) | 190 KB |
536
+ | `centrinfo-widget-dev.js` | only with `demo` or `preview` enabled | 5 KB |
537
+ | `centrinfo-widget-voice.js` | a voice call starts (speech detector) | 3.1 MB |
538
+ | `centrinfo-widget-locale-<lang>.js` | `locale` is fr, es, pt, de, it, ar or sw | 9–10 KB |
404
539
 
405
540
  The existing embed snippet is unchanged. Requirements: the files must be served
406
541
  from the same origin as the script with `Access-Control-Allow-Origin` (they load
407
542
  as ES modules), and a strict CSP needs that origin in `script-src` (already
408
543
  there for the script itself). `connect-src` is unchanged (your API base only).
409
- If the chart file is blocked, charts degrade to their text summary. The npm
544
+ If the chart file is blocked, charts degrade to their text summary; if a
545
+ language file is blocked, the widget stays in English. The npm
410
546
  package splits the same code into dynamic-import chunks that your bundler
411
547
  handles automatically.
412
548
 
@@ -433,19 +569,75 @@ https://cdn.accurixtech.com/centrinfo/js/sdk-centrinfo-widget-v<version>/centrin
433
569
  ### Publishing CDN assets
434
570
 
435
571
  `publish:cdn` uploads `dist/cdn/*` to R2 under a version-scoped path and then
436
- verifies the object read back from R2 and the canonical URL customers load.
437
- Overwrites also check the origin response with a cache-busting query string
438
- and purge the canonical URL before verifying it. Objects go
572
+ verifies each object's exact bytes read back from R2. The public CDN delivery
573
+ check is commented out because Cloudflare Bot Fight Mode can challenge GitHub
574
+ runners. Public URL failures therefore do not fail publishing. Automatic CDN
575
+ cache purging is also disabled with that check. Objects go
439
576
  out as `public, max-age=31536000, immutable`, so **prefer publishing a new
440
577
  version over overwriting a released one** — `--force` replaces bytes that
441
578
  browsers and the edge may hold for a year.
442
579
 
443
- If R2 read-back succeeds but a canonical URL returns HTTP 403, inspect that
444
- URL's response headers and the matching Cloudflare Security Event. A
580
+ Check public delivery separately when needed. If R2 read-back succeeds but a
581
+ canonical URL returns HTTP 403, inspect that URL's response headers and the
582
+ matching Cloudflare Security Event. A
445
583
  `cf-mitigated` header indicates a security rule blocked the request. Check
446
584
  that the CDN custom domain serves the publishing bucket and that its rules
447
- allow the affected path (including `manifest.json`). Fix CDN access before
448
- rerunning the workflow; the upload is already in R2 and a rerun will verify it.
585
+ allow the affected path (including `manifest.json`). The upload is already in R2;
586
+ rerunning the upload does not fix a public access rule.
587
+
588
+ The retained `verifyPublicDelivery` helper is not called by `publish:cdn`.
589
+ When called separately and `cf-mitigated: challenge` is present, it stops on the
590
+ first response with the request URL and Cloudflare diagnostics. A browser challenge
591
+ requires a CDN security configuration change, rather than upload retries or a
592
+ cache purge. Other delivery failures retain the normal retry budget, and the
593
+ helper checks that the canonical URL returns the exact expected bytes.
594
+
595
+ In Cloudflare **Security → Events**, locate the failed request by its `cf-ray`
596
+ and identify the rule or product issuing the challenge. Scope any exception to
597
+ public reads of the versioned widget files, for example:
598
+
599
+ ```text
600
+ (http.host eq "cdn.accurixtech.com"
601
+ and http.request.method in {"GET" "HEAD"}
602
+ and starts_with(http.request.uri.path, "/centrinfo/js/sdk-centrinfo-widget-v")
603
+ and (
604
+ ends_with(http.request.uri.path, "/manifest.json")
605
+ or ends_with(http.request.uri.path, "/centrinfo-widget.js")
606
+ or ends_with(http.request.uri.path, "/centrinfo-widget-charts.js")
607
+ or ends_with(http.request.uri.path, "/centrinfo-widget-dev.js")
608
+ ))
609
+ ```
610
+
611
+ If a custom challenge rule is responsible, exclude this expression from that
612
+ rule. For another security product, use its supported scoped exception; select
613
+ only the product identified by the event and retain unrelated protections.
614
+
615
+ **Free Bot Fight Mode is different:** it cannot be skipped with a WAF custom
616
+ rule, including an existing hostname-based CDN Skip rule. A matching **IP Access
617
+ Allow** rule can bypass it, but this also bypasses custom rules, rate limits and
618
+ WAF managed rules for that IP across the selected zone. Use only a trusted
619
+ deployment runner with a fixed public IP; standard GitHub-hosted runner IPs
620
+ change, and allowing the shared GitHub/Azure ranges is not a suitable substitute.
621
+ The IP Access rules menu may be absent until the first rule is created through
622
+ Cloudflare's API. This fixes runner access, rather than providing a path-scoped
623
+ exception for every customer's SDK requests.
624
+
625
+ Other choices are to disable Bot Fight Mode for the zone or use a paid plan with
626
+ Super Bot Fight Mode and a scoped CDN exception. Turning off free Bot Fight Mode
627
+ affects the entire zone and requires the zone owner's approval; it does not
628
+ require disabling WAF rules, rate limits or DDoS protection.
629
+
630
+ Confirm the canonical manifest and all three JavaScript URLs work without
631
+ cookies or authentication when checking public delivery. This must work
632
+ for the release runner and for customers loading the SDK, rather than only for
633
+ a browser session that has already completed a challenge.
634
+
635
+ References: [Cloudflare challenge detection](https://developers.cloudflare.com/cloudflare-challenges/challenge-types/challenge-pages/detect-response/),
636
+ [R2 custom-domain troubleshooting](https://developers.cloudflare.com/r2/platform/troubleshooting/),
637
+ and [available scoped skip options](https://developers.cloudflare.com/waf/custom-rules/skip/options/).
638
+ See also [Bot Fight Mode limitations](https://developers.cloudflare.com/bots/get-started/bot-fight-mode/#rules),
639
+ [IP Access rules](https://developers.cloudflare.com/waf/tools/ip-access-rules/),
640
+ and [GitHub runner IP addresses](https://docs.github.com/en/actions/reference/runners/github-hosted-runners#ip-addresses).
449
641
 
450
642
  If publishing reports that an object already exists with different content,
451
643
  add a patch Changeset with `pnpm changeset` and merge the generated version PR.
@@ -459,12 +651,12 @@ unless this is exactly `false`).
459
651
 
460
652
  Optional environment:
461
653
 
462
- | Variable | Effect |
463
- | ----------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
464
- | `CLOUDFLARE_ZONE_ID` | Purges the canonical URL after a forced overwrite. Without it, an overwrite fails verification once the edge holds the old bytes. |
465
- | `CLOUDFLARE_CACHE_PURGE_TOKEN` | Token used for the purge when `CLOUDFLARE_API_TOKEN` lacks the Cache Purge permission. |
466
- | `CENTRINFO_WIDGET_CDN_BASE_URL` | Overrides `https://cdn.accurixtech.com`. |
467
- | `CENTRINFO_CDN_VERIFY_ATTEMPTS` / `CENTRINFO_CDN_VERIFY_DELAY_MS` | Verification retry budget (defaults: 18 attempts, 5s apart). |
654
+ | Variable | Effect |
655
+ | ----------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
656
+ | `CLOUDFLARE_ZONE_ID` | Used only by the optional public verification helper to purge an overwritten canonical URL. Not used during publishing. |
657
+ | `CLOUDFLARE_CACHE_PURGE_TOKEN` | Purge token for the optional public verification helper when `CLOUDFLARE_API_TOKEN` lacks Cache Purge permission. |
658
+ | `CENTRINFO_WIDGET_CDN_BASE_URL` | Overrides `https://cdn.accurixtech.com`. |
659
+ | `CENTRINFO_CDN_VERIFY_ATTEMPTS` / `CENTRINFO_CDN_VERIFY_DELAY_MS` | R2 read-back retry budget, also used by the optional public verification helper (defaults: 18 attempts, 5s apart). |
468
660
 
469
661
  ## Status
470
662
 
@@ -0,0 +1 @@
1
+ var e={widget:{analyticsModelLabel:`البيانات`,analyticsModelAutomatic:`تلقائي`,analyticsModelUnavailable:`البيانات المحددة غير متاحة`,testMode:`وضع الاختبار · البيانات المتصلة نفسها`,openChat:`فتح المحادثة`,closeChat:`إغلاق المحادثة`,closeHistory:`إغلاق سجل المحادثات`,unreadMessage:`رسالة واحدة غير مقروءة`,unreadMessages:`{count} رسائل غير مقروءة`,muteSounds:`كتم الأصوات`,unmuteSounds:`تشغيل الأصوات`,statusOnline:`متصل · يرد فورًا`,statusOffline:`غير متاح · اترك رسالة`,liveSupport:`دعم مباشر`,reconnectSupport:`إعادة الاتصال بالدعم`,reconnectPrompt:`يمكنني إعادة أحد أعضاء الفريق إلى هذه المحادثة.`,waitingForTeam:`الذكاء الاصطناعي يساعدك · تم إبلاغ الفريق`,assistantName:`المساعد`,chatName:`المحادثة`,welcomeLabel:`ترحيب من {name}`,welcomeEyebrow:`جاهز متى كنت جاهزًا`,welcomePrompt:`اطرح سؤالًا أو اترك رسالة أو احجز عرضًا توضيحيًا.`,agentTyping:`{name} يكتب…`,expandedAnalyticsResult:`نتيجة التحليل الموسعة`,privacyAndData:`الخصوصية والبيانات المحلية`,muteMicrophone:`كتم الميكروفون`,unmuteMicrophone:`إلغاء كتم الميكروفون`,chooseMicrophone:`اختيار الميكروفون`,defaultMicrophone:`الميكروفون الافتراضي`,microphone:`الميكروفون`,talkNow:`تحدث الآن`,expandView:`توسيع العرض`,exitExpandedView:`الخروج من العرض الموسع`,minimizeVoiceChat:`تصغير المحادثة الصوتية`,endVoiceChat:`إنهاء المحادثة الصوتية`,speakWithAgent:`تحدث مع {name}`,restoreVoiceChat:`استعادة المحادثة الصوتية`,reopenVoiceChat:`إعادة فتح المحادثة الصوتية مع {name}`,voiceConnecting:`جارٍ الاتصال…`,voiceListening:`جارٍ الاستماع…`,voiceHearing:`أسمعك…`,voiceUnavailable:`لا أستطيع سماعك — تحقق من الميكروفون.`,voiceProcessing:`جارٍ النسخ…`,voiceSpeaking:`جارٍ التحدث…`,voiceNoise:`لم يُسمع كلام واضح. اقترب من الميكروفون وحاول مرة أخرى.`,voiceMisunderstood:`تعذر نسخ ذلك. حاول مرة أخرى أو اكتب رسالتك.`,voiceDenied:`الميكروفون غير متاح. اسمح بالوصول أو اكتب رسالتك.`,voiceMuted:`مكتوم — اضغط على الميكروفون لإلغاء الكتم.`,voiceTimeout:`لم يُسمع شيء منذ مدة — جارٍ إنهاء المكالمة.`,callConnecting:`جارٍ الاتصال بالذكاء الاصطناعي…`,callListening:`أستمع الآن — تفضل.`,callHearing:`أسمعك…`,callUnavailable:`لا أستطيع سماعك — تحقق من الميكروفون.`,callSpeaking:`الذكاء الاصطناعي يتحدث — تحدث لمقاطعته.`,callProcessing:`أعمل على ذلك — يمكنك مقاطعتي.`,callNoise:`لم أسمع كلمات واضحة. حاول مرة أخرى بالقرب من الميكروفون.`,callMisunderstood:`لم أفهم ذلك. يرجى المحاولة مرة أخرى.`,callDenied:`الوصول إلى الميكروفون محظور. اسمح بالميكروفون أو اكتب سؤالك.`,callWaiting:`في الانتظار — تحدث عندما تكون جاهزًا.`,callStillWorking:`ما زلت أعمل على إجابتك…`,resumeVoiceChat:`استئناف`,voiceAnswerStillComing:`إجابتك السابقة ما زالت في الطريق.`,voiceDetailsInChat:`النتائج التفصيلية متاحة في المحادثة.`,composerPlaceholder:`اكتب رسالتك…`,send:`إرسال الرسالة`,emoji:`رموز تعبيرية`,gifs:`صور GIF`,attachFile:`إرفاق ملف`,recordVoice:`تسجيل رسالة صوتية`,stopRecording:`إيقاف التسجيل`,actionTestMode:`وضع الاختبار`,stop:`إيقاف`,copy:`نسخ`,copied:`تم النسخ`,doubleCheckResponse:`التحقق من الإجابة`,retryResponse:`إعادة إنشاء الإجابة`,retry:`إعادة المحاولة`,clearChat:`مسح المحادثة`,clearChatConfirm:`هل تريد مسح هذه المحادثة؟`,clearChatConfirmBody:`سيؤدي هذا إلى مسح الرسائل على هذا الجهاز وبدء محادثة جديدة.`,clearConfirmCta:`مسح المحادثة`,endChat:`إنهاء المحادثة`,endChatConfirm:`هل تريد إنهاء هذه المحادثة؟`,endChatConfirmBody:`لن تتمكن من إرسال المزيد من الرسائل في هذه المحادثة، لكن يمكنك بدء محادثة جديدة في أي وقت.`,endConfirmCta:`إنهاء المحادثة`,conversationEnded:`انتهت هذه المحادثة.`,startNewChat:`بدء محادثة جديدة`,pastConversations:`المحادثات السابقة`,viewingPast:`عرض محادثة سابقة (للقراءة فقط)`,backToChat:`العودة إلى المحادثة الحالية`,historyEnded:`منتهية`,feedbackHelpful:`مفيد`,feedbackNotHelpful:`غير مفيد`,feedbackAnswerPrompt:`هل كانت هذه الإجابة مفيدة؟`,feedbackThanks:`شكرًا على ملاحظاتك`,csatPrompt:`كيف كانت هذه المحادثة؟`,feedbackCommentPlaceholder:`ما الذي حدث بشكل خاطئ؟ (اختياري)`,feedbackSend:`إرسال`,cancel:`إلغاء`,newMessages:`رسائل جديدة`,poweredBy:`مدعوم من`,searchGifs:`البحث عن صور GIF…`,searchingGifs:`جارٍ البحث…`,noGifs:`لم يتم العثور على صور GIF`,assistantTyping:`جارٍ تحضير إجابتك…`,emptyReply:`عذرًا، لم أتمكن من إنشاء رد.`,errorGeneric:`لم أتمكن من إتمام هذا الطلب. يرجى المحاولة مرة أخرى.`,errorRateLimit:`أتعامل مع طلبات كثيرة الآن. يرجى المحاولة مرة أخرى بعد قليل.`,errorTimeout:`لم أتمكن من الإنهاء في الوقت المحدد. يرجى المحاولة مرة أخرى.`,errorUnavailable:`لا أستطيع إتمام ذلك الآن. يرجى المحاولة مرة أخرى بعد قليل.`,errorAccess:`لا أستطيع الوصول إلى ذلك بتسجيل دخولك الحالي. يرجى تسجيل الدخول مرة أخرى أو التواصل مع مسؤول التطبيق.`,errorAnalysis:`لم أتمكن من إتمام هذا التحليل. يرجى المحاولة مرة أخرى.`,errorAnalyticsSetup:`لا أستطيع إتمام هذا التحليل بالإعداد الحالي. يرجى التواصل مع مسؤول التطبيق.`,errorCredits:`لا أستطيع المتابعة لأن أرصدة مساحة العمل هذه تحتاج إلى مراجعة. يرجى التواصل مع مالكها.`,errorSubscription:`لا أستطيع المتابعة حتى يصبح اشتراك مساحة العمل هذه نشطًا. يرجى التواصل مع مالكها.`,resultExpired:`هذه النتيجة غير متاحة في هذا السجل القديم. اطرح السؤال مرة أخرى لرؤيتها.`,attaching:`جارٍ قراءة الملف…`,attachTooLarge:`هذا الملف كبير جدًا (الحد الأقصى 5 ميغابايت).`,attachFailed:`تعذر إرفاق هذا الملف. تحقق من نوعه وحاول مرة أخرى.`,attachPreviewTitle:`معاينة {name}`,attachOpen:`معاينة {name}`,attachDownload:`تنزيل`,attachPreviewClose:`إغلاق المعاينة`,attachPreviewLoading:`جارٍ تحميل الملف…`,attachPreviewFailed:`لا يمكن عرض هذا الملف الآن. ربما انتهت صلاحيته.`,attachPreviewUnsupported:`لا يمكن معاينة هذا الملف هنا. نزّله لفتحه.`,attachAnalysisFailed:`تم حفظه للفريق؛ لم يتمكن الذكاء الاصطناعي من قراءته.`,removeAttachment:`إزالة المرفق`,attachLimit:`يمكنك إرفاق ما يصل إلى {count} ملفات في الرسالة الواحدة.`,attachedFiles:`الملفات المرفقة`,removeAttachmentNamed:`إزالة {name}`,dropFileHere:`أفلت الملف هنا`,clearDeviceData:`مسح المحادثات من هذا الجهاز`,clearDeviceDataBody:`يؤدي هذا إلى إزالة المحادثات وبيانات الزائر المخزنة محليًا من هذا المتصفح. لا يمكن التراجع عن ذلك.`,clearDeviceDataCta:`مسح هذا الجهاز`,handoffTitle:`هل تريد أن يتواصل معك فريقنا؟`,handoffName:`الاسم (اختياري)`,handoffEmail:`بريدك الإلكتروني`,handoffNotify:`إبلاغ الفريق`,sending:`جارٍ الإرسال…`,handoffShared:`شاركت هذا مع فريقنا — سيردون عليك على {email}.`,formThanks:`شكرًا! سنتواصل معك.`,caseReference:`المرجع: {reference}`,formError:`حدث خطأ ما — يرجى المحاولة مرة أخرى.`,voiceFormAsk:`من فضلك أخبرني بـ {field}.`,voiceFormReview:`قبل {action}، يرجى التأكيد: {details}. قل نعم للإرسال، أو أخبرني بما يجب تغييره.`,voiceFormCancelled:`حسنًا، ألغيت هذا النموذج.`,voiceFormUnavailable:`لم أتمكن من تحديث هذه التفاصيل. يرجى قول ذلك مرة أخرى.`,voiceFormNoSlots:`لا توجد مواعيد متاحة الآن. يرجى المحاولة لاحقًا.`,voiceFormLoading:`أتحقق من المواعيد المتاحة.`,voiceFormAt:`آت`,voiceFormDot:`نقطة`,voiceFormAppointmentTime:`تاريخ الموعد ووقته`,voiceFormTimeUnavailable:`هذا الوقت غير متاح. يرجى إخباري بتاريخ ووقت آخرين.`,voiceFormExternal:`يمكنني جمع بياناتك صوتيًا وفتح صفحة الحجز بعد تأكيدك. يتطلب هذا المزود اختيار الموعد على صفحته الخاصة.`,actionContactOptions:`خيارات التواصل`,actionGetInTouch:`تواصل معنا`,actionMore:`+{count} أخرى`,actionNeedHelp:`هل تحتاج إلى مساعدة؟`,actionChoose:`اختر ما تريد القيام به`,actionFooter:`سنطلب اسمك الكامل وأفضل بريد إلكتروني أو رقم هاتف ليتمكن الفريق من التواصل معك.`,actionCategorySupport:`الدعم`,actionCategorySales:`التحدث مع المبيعات`,actionCategoryMarketing:`ابقَ على اطلاع`,actionClose:`إغلاق`,actionAs:`باسم {identity}`,bookingPickTime:`ما الوقت الأنسب لك؟`,bookingPickDay:`اختر يومًا`,bookingPickTimeLabel:`اختر وقتًا`,bookingDuration:`عرض توضيحي مدته {count} دقيقة`,bookingCallbackDuration:`معاودة اتصال مدتها {count} دقيقة`,bookingTimezone:`الأوقات معروضة بتوقيت {timezone}`,bookingSchedulerFallback:`أداة الحجز`,bookingCheckingAvailability:`جارٍ التحقق من توفر التقويم…`,bookingNoSlots:`لم يتم العثور على أوقات متاحة في فترة الحجز هذه.`,bookingAvailabilityUnavailable:`توفر التقويم غير متاح مؤقتًا. يرجى المحاولة مرة أخرى بعد قليل.`,bookingEarlierToday:`في وقت سابق اليوم`,bookingCalendarBusy:`مشغول في التقويم`,bookingAlreadyBooked:`محجوز بالفعل`,bookingNotOffered:`غير متاح في التقويم`,bookingRequested:`تم طلب عرض توضيحي في {when}. سيتواصل معك الفريق.`,bookingVerificationPending:`تلقينا طلبك لموعد {when}، لكن تعذر التحقق من الحجز في التقويم. سيراجعه الفريق. يرجى عدم حجز هذا الوقت مرة أخرى.`,bookingCallbackRequested:`تم طلب معاودة الاتصال في {when}.`,bookingCallbackConfirmed:`تمت جدولة معاودة الاتصال في {when}.`,bookingConfirmed:`تم حجز العرض التوضيحي في {when}.`,bookingSlotTaken:`تم حجز هذا الوقت للتو — يرجى اختيار وقت آخر.`,bookingViaProvider:`اختر وقتًا يناسبك على {provider}.`,bookingOpenScheduler:`فتح أداة الحجز`,bookingLinkOpened:`جارٍ فتح أداة الحجز — اختر الوقت الذي يناسبك. 📅`,bookingScheduled:`تم حجز العرض التوضيحي. تفاصيل الحجز محفوظة في هذه المحادثة.`,bookingBackToChat:`العودة إلى المحادثة`,bookingOpenNewTab:`فتح في علامة تبويب جديدة`,bookingCloseScheduler:`إغلاق أداة الحجز`,bookingLoadingScheduler:`جارٍ تحميل أداة الحجز…`,bookingMeetingLink:`رابط الاجتماع`,bookingManageLink:`إدارة الحجز`,bookingCheckingDetails:`جارٍ الحصول على رابط اجتماعك…`,bookingDetailsUnavailable:`لم نتمكن من التحقق من تفاصيل الحجز بعد. حاول التحقق مرة أخرى هنا؛ يرجى عدم حجز الوقت نفسه مرتين.`,bookingUnverifiedLink:`عرض سجل التقويم غير المؤكد`,bookingRetryDetails:`إعادة المحاولة`,callConnectingWithAi:`جارٍ الاتصال بالذكاء الاصطناعي…`,disclaimerDefault:`قد يتم تسجيل هذه المحادثة لأغراض الجودة والدعم.`,actionContactSupportDescription:`أرسل طلبك إلى فريق الدعم.`,actionLeaveMessageDescription:`أرسل سؤالك وبيانات التواصل.`,actionBookDemoDescription:`اطلب عرضًا توضيحيًا من الفريق.`,actionRequestCallbackDescription:`اطلب أن يتصل بك أول موظف مبيعات متاح.`,actionScheduleCallbackDescription:`اختر تاريخًا ووقتًا متاحين لمكالمة.`,actionSubscribeDescription:`احصل على آخر أخبار المنتج.`,formContactSupportTitle:`التواصل مع الدعم`,formRequestSupport:`طلب الدعم`,formLeaveMessageTitle:`ترك رسالة`,formSendMessage:`إرسال الرسالة`,formShareDetailsTitle:`شارك بياناتك`,formSave:`حفظ`,formBookDemoTitle:`حجز عرض توضيحي`,formRequestDemo:`طلب عرض توضيحي`,formRequestCallbackTitle:`طلب معاودة الاتصال`,formRequestCallback:`طلب معاودة الاتصال`,formScheduleCallbackTitle:`جدولة معاودة الاتصال`,formScheduleCallback:`جدولة معاودة الاتصال`,formSubscribe:`اشتراك`,fieldFullName:`الاسم الكامل`,fieldEmail:`البريد الإلكتروني`,fieldSubject:`الموضوع`,fieldMessage:`الرسالة`,fieldPhone:`الهاتف`,fieldPhoneNumber:`رقم الهاتف`,fieldPreferredTime:`الوقت المفضل`,fieldNotes:`ملاحظات`,fieldTopic:`الموضوع`,placeholderSupportMessage:`صف ما تحتاج إلى مساعدة فيه.`,placeholderInquiryMessage:`كيف يمكننا مساعدتك؟`,placeholderPreferredTime:`مثلًا: الخميس 3 مساءً`,placeholderNotes:`هل هناك ما يجب أن نعرفه؟`,placeholderTopic:`بخصوص ماذا نتصل بك؟`,phoneChooseCountry:`{country}، +{dial}. اختر الدولة ورمز الاتصال`,phoneSearchPlaceholder:`ابحث عن دولة أو رمز`,phoneSearchLabel:`البحث في الدول`,phoneCountries:`الدول`,phoneNoCountries:`لم يتم العثور على دول`,handoffDefaultMessage:`كان لدي سؤال لم يتمكن المساعد من الإجابة عنه.`,handoffAlerted:`تم حفظ طلبك ليتابعه الفريق.`,gifAlt:`صورة GIF`,toolResultAlt:`نتيجة الأداة`,openResult:`فتح النتيجة`,microphoneNumbered:`الميكروفون {number}`,voiceDraftListening:`جارٍ الاستماع...`,emojiSmileys:`الوجوه`,emojiGestures:`الإيماءات`,emojiHearts:`القلوب والرموز`,emojiAnimals:`الحيوانات والطبيعة`,emojiFood:`الطعام والشراب`,emojiObjects:`الأشياء والسفر`,actionCompleted:`تم تنفيذ الإجراء.`,copyResultData:`بيانات النتيجة`,copyRowsReturned:`تم إرجاع {count}`,copyRowsReturnedOf:`تم إرجاع {count} من {total}`,copyTruncated:`مقتطع`,copyTotals:`الإجماليات`,previewReply:`👋 هذه معاينة — الردود هنا أمثلة. انشر الأداة على موقعك للدردشة مع الذكاء الاصطناعي المباشر.`,previewActionNote:`معاينة — لم يتم إرسال أي شيء. سيعمل هذا فعليًا بعد النشر.`,previewBanner:`معاينة — ردود نموذجية، بدون ذكاء اصطناعي`},results:{other:`أخرى`,unknown:`غير معروف`,rowLabel:`الصف {count}`,chartCategory:`الفئة`,chartActivity:`النشاط`,chartTarget:`الهدف: {value}`,mapApproximateLocation:`موقع إقليمي تقريبي`,mapApproximateDescription:`تعرض العلامات مواقع إقليمية تقريبية`,previousChart:`الرسم البياني السابق`,aggregationQuestion:`باستخدام البيانات المصرح بها والفلاتر والفترة نفسها في «{title}»، احسب {aggregation} لـ {measure} لكل {dimension}. اعرض رسمًا بيانيًا وجدولًا إذا كان هذا التطبيق يسمح بذلك.`,partialChart:`يعتمد هذا المخطط على نتيجة جزئية. ضيّق نطاق السؤال للحصول على بيانات كاملة.`,resultDetails:`تفاصيل النتيجة`,liveMetric:`مقياس مباشر`,currentValue:`القيمة الحالية`,noMatchTitle:`لا توجد بيانات مطابقة`,noMatchBody:`لا توجد سجلات معتمدة تطابق هذا السؤال.`,chartType:`نوع المخطط`,chooseChartType:`اختر نوع المخطط`,aggregate:`تجميع`,aggregateTitle:`اطلب عملية حساب محكومة جديدة`,aggregateCharge:`إجابة محكومة جديدة. قد تُطبَّق رسوم على الاستعلام.`,chartFallback:`مخطط`,chartLine:`خطي`,chartArea:`مساحي`,chartCombo:`مركّب`,chartAreaHint:`اتجاهات مظللة عبر الزمن.`,chartComboHint:`يحافظ على الطبقات المطلوبة ومقاييسها المنفصلة.`,chartBar:`أعمدة`,chartStackedBar:`أعمدة مكدّسة`,chartLineHint:`الأفضل لعرض التغيّر عبر الزمن.`,chartBarHint:`قارن الفئات أو القيم المرتبة.`,chartStackedBarHint:`قارن الإجماليات وأجزاءها.`,aggregationSum:`الإجمالي`,aggregationAvg:`المتوسط`,aggregationMin:`الحد الأدنى`,aggregationMax:`الحد الأقصى`,aggregationCount:`العدد الإجمالي`,aggregationCountDistinct:`العدد الفريد`,download:`تنزيل`,downloadData:`تنزيل هذه البيانات`,expandTable:`توسيع الجدول`,rankColumn:`الترتيب`,expandChart:`توسيع المخطط`,restoreView:`العودة إلى عرض المساعد`,aboutResult:`حول هذه النتيجة`,aboutPeriod:`الفترة`,aboutResults:`النتائج`,aboutChecked:`وقت التحقق`,aboutTimezone:`المنطقة الزمنية`,aboutSourceData:`بيانات المصدر`,aboutFilters:`عوامل التصفية`,rowOne:`{count} صف`,rowMany:`{count} صفوف`,filtersOne:`{count} عامل تصفية مطبّق`,filtersMany:`{count} عوامل تصفية مطبّقة`,filtersApplied:`المطبّق: {count}`,notSet:`غير محدد`,noValue:`لا توجد قيمة`,analysisUnavailable:`تعذّر إكمال هذا التحليل.`,yes:`نعم`,no:`لا`,chartValues:`القيم`,chartTitle:`{measure} حسب {dimension}`,viewerTitle:`نتيجة التحليل`,viewerUnavailable:`تعذّر تحميل عرض التحليل.`,retryViewer:`حاول مرة أخرى`,viewerUpdateAvailable:`يتوفر إصدار جديد. أنهِ تغييراتك قبل التحديث.`,updateViewer:`تحديث العرض`,seriesLimited:`يتم عرض {shown} من أصل {total} سلسلة.`,summaryLatest:`الأحدث ({category}): {values}.`,summaryNoTrend:`لا تتوفر قيم رقمية للاتجاه.`,summaryHighest:`الأعلى: {category}، {series} {value}.`,summaryNoComparison:`لا تتوفر قيم رقمية للمقارنة.`,zoomControls:`عناصر التحكم في تكبير المخطط`,zoomIn:`تكبير المخطط`,zoomOut:`تصغير المخطط`,zoomReset:`إعادة ضبط تكبير المخطط`,zoomResetShort:`إعادة ضبط`,zoomNone:`لا توجد نقاط في المخطط`,zoomAllOne:`الكل: {count} نقطة`,zoomAllMany:`الكل: {count} نقاط`,zoomRange:`{start} – {end} · {visible} من {count} نقاط`,inProgress:`قيد التقدم`,newContent:`محتوى جديد`,updatedAt:`آخر تحديث {time}`,liveData:`بيانات مباشرة`,viewData:`عرض البيانات`,hideData:`إخفاء البيانات`,inProgressLegend:`قيد التقدم`,governedResult:`نتيجة محكومة`,quarterLabel:`الربع {quarter} {year}`,sourceCurrent:`محدّثة`,sourceDelayed:`متأخرة`,sourceNoData:`لا توجد بيانات`,comboDescription:`مخطط مركّب. {series}`,comboSeriesLeft:`{name}، {type}، المحور الأيسر`,comboSeriesRight:`{name}، {type}، المحور الأيمن`,comboOmitted:`لا يتم عرض {count} سلاسل إضافية.`,tableEmpty:`لم تُرجَع أي صفوف.`,tableCaptionOne:`جدول النتائج يحتوي على {count} صف`,tableCaptionMany:`جدول النتائج يحتوي على {count} صفوف`,tableShowing:`يتم عرض {shown} من أصل {total} صفوف. وسّع العرض لرؤية جميع الصفوف.`,tableFields:`الحقول`,tableSearch:`البحث في هذه النتيجة`,tableSearchPlaceholder:`ابحث في هذه النتيجة…`,tableDisplayMode:`وضع عرض الجدول`,tableModeTable:`جدول`,tableModeMatrix:`مصفوفة`,tableColumns:`الأعمدة`,tableMoveLeft:`نقل {column} إلى اليسار`,tableMoveRight:`نقل {column} إلى اليمين`,tableComfortableRows:`صفوف مريحة`,tableCompactRows:`صفوف مضغوطة`,tableResetView:`إعادة ضبط العرض`,tableClearFilter:`مسح عامل تصفية {column}`,tableScrollable:`جدول نتائج قابل للتمرير`,tableSelectAll:`تحديد كل الصفوف الظاهرة`,tableSortBy:`الفرز حسب {column}`,tableColumnActions:`إجراءات {column}`,tableSortAscending:`فرز تصاعدي`,tableSortDescending:`فرز تنازلي`,tableFilterValues:`تصفية القيم`,tableFilterOperator:`عامل المقارنة لتصفية {column}`,tableOpContains:`يحتوي على`,tableOpEquals:`يساوي`,tableOpNotEquals:`لا يساوي`,tableOpGt:`أكبر من`,tableOpGte:`على الأقل`,tableOpLt:`أصغر من`,tableOpLte:`على الأكثر`,tableFilterValue:`قيمة التصفية لـ {column}`,tableFilterPlaceholder:`أدخل قيمة`,tableApplyFilter:`تطبيق عامل التصفية`,tablePinColumn:`تثبيت العمود`,tableUnpinColumn:`إلغاء تثبيت العمود`,tableWrapText:`التفاف النص`,tableNoWrapText:`عدم التفاف النص`,tableDisplayName:`الاسم المعروض لـ {column}`,tableApplyDisplayName:`تطبيق الاسم المعروض`,tableSelectRow:`تحديد الصف {row}`,tablePageRange:`{start}–{end} من {total}`,tablePageEmpty:`0 من {total}`,tablePagination:`ترقيم صفحات الجدول`,tableRows:`الصفوف`,tableRowsPerPage:`صفوف في كل صفحة`,tablePreviousPage:`الصفحة السابقة`,tableNextPage:`الصفحة التالية`,tableFirstRows:`أول {count} صفوف متاحة`,tableAllRows:`تم تحميل كل الصفوف المُرجَعة`,explanation:{eyebrow:`إجابة من بياناتك`,provenanceAI:`بمساعدة الذكاء الاصطناعي · تم التحقق من الأدلة`,provenanceCalculated:`نتائج محسوبة`,provenanceGoverned:`استنادًا إلى القيم الحالية`,comparison:`المقارنة`,conclusions:`ما يمكننا استنتاجه`,whyItMatters:`لماذا يهم ذلك`,limits:`قيود مهمة`,investigate:`تحقق أكثر`,evidenceList:`الأدلة الداعمة`,causes:`الأسباب المحتملة`,causesHint:`أسباب غير مثبتة`,howToCheck:`كيفية التحقق:`,recommendations:`الخطوات التالية الموصى بها`,watch:`راقب:`,outlook:`التوقعات`,followUps:`اطرح سؤال متابعة`,sourceNoteAI:`صياغة بمساعدة الذكاء الاصطناعي، تم التحقق منها مقابل القيم المباشرة المعروضة هنا.`,sourceNoteCalculated:`صياغة بمساعدة الذكاء الاصطناعي استنادًا إلى نتائج محسوبة.`,sourceNoteGoverned:`استنادًا فقط إلى القيم المباشرة المعروضة هنا.`,evidence:`دليل`,evidenceMetric:`المقياس`,evidencePeriod:`الفترة`,evidenceTimezone:`المنطقة الزمنية`,evidenceFilters:`عوامل التصفية`,evidenceValue:`القيمة`,evidenceStatus:`الحالة`,evidenceSource:`المصدر`,evidenceChecked:`وقت التحقق`,openSource:`فتح المصدر`,closeEvidence:`إغلاق تفاصيل الدليل`,citationLabel:`عرض الدليل`,sourceCard:`هذه البطاقة`,sourceSupportingQuery:`الاستعلام الداعم`,feedbackPrompt:`هل كان هذا الشرح مفيدًا؟`,feedbackHelpful:`شرح مفيد`,feedbackNotHelpful:`شرح غير مفيد`,feedbackReasonsPrompt:`ما الخطأ؟ (اختياري)`,feedbackCommentPlaceholder:`هل من شيء آخر؟ (اختياري)`,feedbackSubmit:`إرسال الملاحظات`,feedbackThanks:`شكرًا على ملاحظاتك.`,feedbackUndo:`تراجع`,feedbackError:`تعذّر حفظ الملاحظات. حاول مرة أخرى.`,notComparable:`غير قابل للمقارنة بعد`,basicExplanation:`شرح أساسي`,preparingDetailed:`جارٍ إعداد شرح مفصّل…`,stillWorkingDetailed:`ما زال العمل جاريًا على الشرح المفصّل…`,waitingToRetry:`انتظار قصير قبل إعادة محاولة الشرح المفصّل…`,detailedReady:`الشرح المفصّل جاهز.`,detailedUnavailable:`الشرح المفصّل غير متاح حاليًا.`,detailedRetry:`حاول مرة أخرى`,region:`الشرح`,details:`ماذا يعني ذلك`,drivers:`ما الذي يؤثر فيه`,driversHint:`ارتباط مُقاس، وليس دليلًا على السببية`,anomalies:`قيم غير معتادة`,supplementaryFindings:`أيضًا في البيانات`,ties:`نتائج متعادلة`,tiedHighest:`متعادلة في المرتبة الأعلى`,tiedLowest:`متعادلة في المرتبة الأدنى`,frameworks:`إرشادات عامة، ليست من بياناتك`,dataGaps:`بيانات مفقودة`,segment:`الشريحة:`,tasks:`المهام`,inProgress:`قيد التقدم`,expand:`توسيع الشرح`,collapse:`طي الشرح`,reasonWrongNumbers:`أرقام خاطئة`,reasonMissingComparison:`مقارنة مفقودة`,reasonUnclear:`غير واضح`,reasonTooLong:`طويل جدًا`,tasksProgress:`{label} ({done} من {total})`,taskPlanned:`مخطط لها`,taskRunning:`قيد التنفيذ`,taskDone:`مكتملة`,taskFailed:`فشلت`,taskSkipped:`تم تخطيها`,statusConfirmedZero:`0 مؤكد`,statusNoRecords:`لا توجد سجلات بعد`,statusMissing:`مفقود`,statusObserved:`مرصود`,forecastLow:`توقع منخفض الثقة`,forecastDirectional:`توقع استرشادي`,forecastValidated:`توقع موثّق`,forecastEstimate:`تقدير متوقع`,checkedTimesIn:`الأوقات بتوقيت {timezone}`,checkedAt:`تم التحقق {time}`,periodRange:`{start} – {end} (دون احتساب النهاية)`,periodFrom:`من {start}`,periodBefore:`قبل {end}`,liveData:`بيانات مباشرة`,updatedAt:`آخر تحديث {time}`,freshnessUpdated:`محدّث`,freshnessUnknown:`حداثة المصدر غير متاحة.`,freshnessFresh:`حديثة`,freshnessCurrent:`بيانات المصدر محدّثة.`,freshnessNoData:`لا توجد بيانات مصدر`,freshnessNoDataBody:`لا تتوفر بيانات مصدر لهذه الفترة أو لفترة سابقة.`,freshnessChecked:`تم التحقق في {date}`,freshnessLatestRecord:`أحدث سجل`,freshnessLatestRecordOn:`أحدث سجل: {date}`,freshnessLatestBody:`أحدث سجل مطابق: {date}. وجود سجل أقدم وحده لا يثبت تأخر المصدر.`,freshnessLatestUnknownBody:`تاريخ أحدث سجل مطابق غير متاح. وجود سجل أقدم وحده لا يثبت تأخر المصدر.`,currentPeriod:`الفترة الحالية`,previousPeriod:`الفترة السابقة`,periodNoRecords:`{period}: لا توجد سجلات بعد`,noChangeFromZero:`لا تغيير (0)`,upFromZero:`ارتفاع من 0`,downFromZero:`انخفاض من 0`,notComparableShort:`غير قابل للمقارنة`,comparePointDay:`مقارنة بالأمس في الوقت نفسه`,comparePointWeek:`مقارنة بالنقطة نفسها في الأسبوع الماضي`,comparePointMonth:`مقارنة بالنقطة نفسها في الشهر الماضي`,comparePointQuarter:`مقارنة بالنقطة نفسها في الربع الماضي`,comparePointYear:`مقارنة بالنقطة نفسها في العام الماضي`,comparePointPeriod:`مقارنة بالنقطة نفسها في الفترة السابقة`,previousPointDay:`الأمس في الوقت نفسه`,previousPointWeek:`النقطة نفسها في الأسبوع الماضي`,previousPointMonth:`النقطة نفسها في الشهر الماضي`,previousPointQuarter:`النقطة نفسها في الربع الماضي`,previousPointYear:`النقطة نفسها في العام الماضي`,previousPointPeriod:`النقطة نفسها في الفترة السابقة`,fullDay:`اليوم كاملًا`,fullWeek:`الأسبوع كاملًا`,fullMonth:`الشهر كاملًا`,fullQuarter:`الربع كاملًا`,fullYear:`العام كاملًا`,fullPeriod:`الفترة كاملة`,fullDayTitle:`اليوم كاملًا`,fullWeekTitle:`الأسبوع كاملًا`,fullMonthTitle:`الشهر كاملًا`,fullQuarterTitle:`الربع كاملًا`,fullYearTitle:`العام كاملًا`,fullPeriodTitle:`الفترة كاملة`,cutoffDay:`المقارنة حتى {time} في كلا اليومين`,cutoffWeek:`المقارنة حتى {time} في كلا الأسبوعين`,cutoffMonth:`المقارنة حتى {time} في كلا الشهرين`,cutoffQuarter:`المقارنة حتى {time} في كلا الربعين`,cutoffYear:`المقارنة حتى {time} في كلا العامين`,cutoffPeriod:`المقارنة حتى {time} في كلتا الفترتين`,cutoffLatestRecord:`{cutoff}، وهو وقت أحدث سجل`,previousFullLine:`{period} ({full}): {value}`,compactFullLine:`{full}: {value}`,periodSoFar:`{period} حتى الآن: {value}`,periodInProgress:`{period}: قيد التقدم`,previousFullValue:`{period}: {value} ({full})`,groupNoteLikeForLike:`{period} حتى الآن، مقارنة بـ {previous}`,groupNoteFull:`{period} حتى الآن؛ تُعرض الفترة السابقة كاملة، لذا لا تُقارن الأعمدة على أساس متكافئ`,previousToDate:`السابق حتى التاريخ`,limitInProgress:`{period} ما زال قيد التقدم، لذا قد يتغير إجماليه.`,limitNoRecords:`لا توجد سجلات بعد لـ {period}. هذا ليس 0 مؤكدًا.`,limitNoRecordsReason:`لا توجد سجلات بعد لـ {period}. هذا ليس 0 مؤكدًا: {reason}.`,limitMissing:`{period} مفقود.`,limitMissingReason:`{period} مفقود: {reason}.`,limitCurrentInProgress:`الفترة الحالية ما زالت قيد التقدم، لذا قد يتغير إجماليها.`,missingStatement:`تعذّر تحديد {label}: {reason}`,today:`اليوم`,yesterday:`الأمس`}}};export{e as default};
@@ -0,0 +1 @@
1
+ var e={other:`أخرى`,unknown:`غير معروف`,rowLabel:`الصف {count}`,chartCategory:`الفئة`,chartActivity:`النشاط`,chartTarget:`الهدف: {value}`,mapApproximateLocation:`موقع إقليمي تقريبي`,mapApproximateDescription:`تعرض العلامات مواقع إقليمية تقريبية`,previousChart:`الرسم البياني السابق`,aggregationQuestion:`باستخدام البيانات المصرح بها والفلاتر والفترة نفسها في «{title}»، احسب {aggregation} لـ {measure} لكل {dimension}. اعرض رسمًا بيانيًا وجدولًا إذا كان هذا التطبيق يسمح بذلك.`,partialChart:`يعتمد هذا المخطط على نتيجة جزئية. ضيّق نطاق السؤال للحصول على بيانات كاملة.`,resultDetails:`تفاصيل النتيجة`,liveMetric:`مقياس مباشر`,currentValue:`القيمة الحالية`,noMatchTitle:`لا توجد بيانات مطابقة`,noMatchBody:`لا توجد سجلات معتمدة تطابق هذا السؤال.`,chartType:`نوع المخطط`,chooseChartType:`اختر نوع المخطط`,aggregate:`تجميع`,aggregateTitle:`اطلب عملية حساب محكومة جديدة`,aggregateCharge:`إجابة محكومة جديدة. قد تُطبَّق رسوم على الاستعلام.`,chartFallback:`مخطط`,chartLine:`خطي`,chartArea:`مساحي`,chartCombo:`مركّب`,chartAreaHint:`اتجاهات مظللة عبر الزمن.`,chartComboHint:`يحافظ على الطبقات المطلوبة ومقاييسها المنفصلة.`,chartBar:`أعمدة`,chartStackedBar:`أعمدة مكدّسة`,chartLineHint:`الأفضل لعرض التغيّر عبر الزمن.`,chartBarHint:`قارن الفئات أو القيم المرتبة.`,chartStackedBarHint:`قارن الإجماليات وأجزاءها.`,aggregationSum:`الإجمالي`,aggregationAvg:`المتوسط`,aggregationMin:`الحد الأدنى`,aggregationMax:`الحد الأقصى`,aggregationCount:`العدد الإجمالي`,aggregationCountDistinct:`العدد الفريد`,download:`تنزيل`,downloadData:`تنزيل هذه البيانات`,expandTable:`توسيع الجدول`,rankColumn:`الترتيب`,expandChart:`توسيع المخطط`,restoreView:`العودة إلى عرض المساعد`,aboutResult:`حول هذه النتيجة`,aboutPeriod:`الفترة`,aboutResults:`النتائج`,aboutChecked:`وقت التحقق`,aboutTimezone:`المنطقة الزمنية`,aboutSourceData:`بيانات المصدر`,aboutFilters:`عوامل التصفية`,rowOne:`{count} صف`,rowMany:`{count} صفوف`,filtersOne:`{count} عامل تصفية مطبّق`,filtersMany:`{count} عوامل تصفية مطبّقة`,filtersApplied:`المطبّق: {count}`,notSet:`غير محدد`,noValue:`لا توجد قيمة`,analysisUnavailable:`تعذّر إكمال هذا التحليل.`,yes:`نعم`,no:`لا`,chartValues:`القيم`,chartTitle:`{measure} حسب {dimension}`,viewerTitle:`نتيجة التحليل`,viewerUnavailable:`تعذّر تحميل عرض التحليل.`,retryViewer:`حاول مرة أخرى`,viewerUpdateAvailable:`يتوفر إصدار جديد. أنهِ تغييراتك قبل التحديث.`,updateViewer:`تحديث العرض`,seriesLimited:`يتم عرض {shown} من أصل {total} سلسلة.`,summaryLatest:`الأحدث ({category}): {values}.`,summaryNoTrend:`لا تتوفر قيم رقمية للاتجاه.`,summaryHighest:`الأعلى: {category}، {series} {value}.`,summaryNoComparison:`لا تتوفر قيم رقمية للمقارنة.`,zoomControls:`عناصر التحكم في تكبير المخطط`,zoomIn:`تكبير المخطط`,zoomOut:`تصغير المخطط`,zoomReset:`إعادة ضبط تكبير المخطط`,zoomResetShort:`إعادة ضبط`,zoomNone:`لا توجد نقاط في المخطط`,zoomAllOne:`الكل: {count} نقطة`,zoomAllMany:`الكل: {count} نقاط`,zoomRange:`{start} – {end} · {visible} من {count} نقاط`,inProgress:`قيد التقدم`,newContent:`محتوى جديد`,updatedAt:`آخر تحديث {time}`,liveData:`بيانات مباشرة`,viewData:`عرض البيانات`,hideData:`إخفاء البيانات`,inProgressLegend:`قيد التقدم`,governedResult:`نتيجة محكومة`,quarterLabel:`الربع {quarter} {year}`,sourceCurrent:`محدّثة`,sourceDelayed:`متأخرة`,sourceNoData:`لا توجد بيانات`,comboDescription:`مخطط مركّب. {series}`,comboSeriesLeft:`{name}، {type}، المحور الأيسر`,comboSeriesRight:`{name}، {type}، المحور الأيمن`,comboOmitted:`لا يتم عرض {count} سلاسل إضافية.`,tableEmpty:`لم تُرجَع أي صفوف.`,tableCaptionOne:`جدول النتائج يحتوي على {count} صف`,tableCaptionMany:`جدول النتائج يحتوي على {count} صفوف`,tableShowing:`يتم عرض {shown} من أصل {total} صفوف. وسّع العرض لرؤية جميع الصفوف.`,tableFields:`الحقول`,tableSearch:`البحث في هذه النتيجة`,tableSearchPlaceholder:`ابحث في هذه النتيجة…`,tableDisplayMode:`وضع عرض الجدول`,tableModeTable:`جدول`,tableModeMatrix:`مصفوفة`,tableColumns:`الأعمدة`,tableMoveLeft:`نقل {column} إلى اليسار`,tableMoveRight:`نقل {column} إلى اليمين`,tableComfortableRows:`صفوف مريحة`,tableCompactRows:`صفوف مضغوطة`,tableResetView:`إعادة ضبط العرض`,tableClearFilter:`مسح عامل تصفية {column}`,tableScrollable:`جدول نتائج قابل للتمرير`,tableSelectAll:`تحديد كل الصفوف الظاهرة`,tableSortBy:`الفرز حسب {column}`,tableColumnActions:`إجراءات {column}`,tableSortAscending:`فرز تصاعدي`,tableSortDescending:`فرز تنازلي`,tableFilterValues:`تصفية القيم`,tableFilterOperator:`عامل المقارنة لتصفية {column}`,tableOpContains:`يحتوي على`,tableOpEquals:`يساوي`,tableOpNotEquals:`لا يساوي`,tableOpGt:`أكبر من`,tableOpGte:`على الأقل`,tableOpLt:`أصغر من`,tableOpLte:`على الأكثر`,tableFilterValue:`قيمة التصفية لـ {column}`,tableFilterPlaceholder:`أدخل قيمة`,tableApplyFilter:`تطبيق عامل التصفية`,tablePinColumn:`تثبيت العمود`,tableUnpinColumn:`إلغاء تثبيت العمود`,tableWrapText:`التفاف النص`,tableNoWrapText:`عدم التفاف النص`,tableDisplayName:`الاسم المعروض لـ {column}`,tableApplyDisplayName:`تطبيق الاسم المعروض`,tableSelectRow:`تحديد الصف {row}`,tablePageRange:`{start}–{end} من {total}`,tablePageEmpty:`0 من {total}`,tablePagination:`ترقيم صفحات الجدول`,tableRows:`الصفوف`,tableRowsPerPage:`صفوف في كل صفحة`,tablePreviousPage:`الصفحة السابقة`,tableNextPage:`الصفحة التالية`,tableFirstRows:`أول {count} صفوف متاحة`,tableAllRows:`تم تحميل كل الصفوف المُرجَعة`,explanation:{eyebrow:`إجابة من بياناتك`,provenanceAI:`بمساعدة الذكاء الاصطناعي · تم التحقق من الأدلة`,provenanceCalculated:`نتائج محسوبة`,provenanceGoverned:`استنادًا إلى القيم الحالية`,comparison:`المقارنة`,conclusions:`ما يمكننا استنتاجه`,whyItMatters:`لماذا يهم ذلك`,limits:`قيود مهمة`,investigate:`تحقق أكثر`,evidenceList:`الأدلة الداعمة`,causes:`الأسباب المحتملة`,causesHint:`أسباب غير مثبتة`,howToCheck:`كيفية التحقق:`,recommendations:`الخطوات التالية الموصى بها`,watch:`راقب:`,outlook:`التوقعات`,followUps:`اطرح سؤال متابعة`,sourceNoteAI:`صياغة بمساعدة الذكاء الاصطناعي، تم التحقق منها مقابل القيم المباشرة المعروضة هنا.`,sourceNoteCalculated:`صياغة بمساعدة الذكاء الاصطناعي استنادًا إلى نتائج محسوبة.`,sourceNoteGoverned:`استنادًا فقط إلى القيم المباشرة المعروضة هنا.`,evidence:`دليل`,evidenceMetric:`المقياس`,evidencePeriod:`الفترة`,evidenceTimezone:`المنطقة الزمنية`,evidenceFilters:`عوامل التصفية`,evidenceValue:`القيمة`,evidenceStatus:`الحالة`,evidenceSource:`المصدر`,evidenceChecked:`وقت التحقق`,openSource:`فتح المصدر`,closeEvidence:`إغلاق تفاصيل الدليل`,citationLabel:`عرض الدليل`,sourceCard:`هذه البطاقة`,sourceSupportingQuery:`الاستعلام الداعم`,feedbackPrompt:`هل كان هذا الشرح مفيدًا؟`,feedbackHelpful:`شرح مفيد`,feedbackNotHelpful:`شرح غير مفيد`,feedbackReasonsPrompt:`ما الخطأ؟ (اختياري)`,feedbackCommentPlaceholder:`هل من شيء آخر؟ (اختياري)`,feedbackSubmit:`إرسال الملاحظات`,feedbackThanks:`شكرًا على ملاحظاتك.`,feedbackUndo:`تراجع`,feedbackError:`تعذّر حفظ الملاحظات. حاول مرة أخرى.`,notComparable:`غير قابل للمقارنة بعد`,basicExplanation:`شرح أساسي`,preparingDetailed:`جارٍ إعداد شرح مفصّل…`,stillWorkingDetailed:`ما زال العمل جاريًا على الشرح المفصّل…`,waitingToRetry:`انتظار قصير قبل إعادة محاولة الشرح المفصّل…`,detailedReady:`الشرح المفصّل جاهز.`,detailedUnavailable:`الشرح المفصّل غير متاح حاليًا.`,detailedRetry:`حاول مرة أخرى`,region:`الشرح`,details:`ماذا يعني ذلك`,drivers:`ما الذي يؤثر فيه`,driversHint:`ارتباط مُقاس، وليس دليلًا على السببية`,anomalies:`قيم غير معتادة`,supplementaryFindings:`أيضًا في البيانات`,ties:`نتائج متعادلة`,tiedHighest:`متعادلة في المرتبة الأعلى`,tiedLowest:`متعادلة في المرتبة الأدنى`,frameworks:`إرشادات عامة، ليست من بياناتك`,dataGaps:`بيانات مفقودة`,segment:`الشريحة:`,tasks:`المهام`,inProgress:`قيد التقدم`,expand:`توسيع الشرح`,collapse:`طي الشرح`,reasonWrongNumbers:`أرقام خاطئة`,reasonMissingComparison:`مقارنة مفقودة`,reasonUnclear:`غير واضح`,reasonTooLong:`طويل جدًا`,tasksProgress:`{label} ({done} من {total})`,taskPlanned:`مخطط لها`,taskRunning:`قيد التنفيذ`,taskDone:`مكتملة`,taskFailed:`فشلت`,taskSkipped:`تم تخطيها`,statusConfirmedZero:`0 مؤكد`,statusNoRecords:`لا توجد سجلات بعد`,statusMissing:`مفقود`,statusObserved:`مرصود`,forecastLow:`توقع منخفض الثقة`,forecastDirectional:`توقع استرشادي`,forecastValidated:`توقع موثّق`,forecastEstimate:`تقدير متوقع`,checkedTimesIn:`الأوقات بتوقيت {timezone}`,checkedAt:`تم التحقق {time}`,periodRange:`{start} – {end} (دون احتساب النهاية)`,periodFrom:`من {start}`,periodBefore:`قبل {end}`,liveData:`بيانات مباشرة`,updatedAt:`آخر تحديث {time}`,freshnessUpdated:`محدّث`,freshnessUnknown:`حداثة المصدر غير متاحة.`,freshnessFresh:`حديثة`,freshnessCurrent:`بيانات المصدر محدّثة.`,freshnessNoData:`لا توجد بيانات مصدر`,freshnessNoDataBody:`لا تتوفر بيانات مصدر لهذه الفترة أو لفترة سابقة.`,freshnessChecked:`تم التحقق في {date}`,freshnessLatestRecord:`أحدث سجل`,freshnessLatestRecordOn:`أحدث سجل: {date}`,freshnessLatestBody:`أحدث سجل مطابق: {date}. وجود سجل أقدم وحده لا يثبت تأخر المصدر.`,freshnessLatestUnknownBody:`تاريخ أحدث سجل مطابق غير متاح. وجود سجل أقدم وحده لا يثبت تأخر المصدر.`,currentPeriod:`الفترة الحالية`,previousPeriod:`الفترة السابقة`,periodNoRecords:`{period}: لا توجد سجلات بعد`,noChangeFromZero:`لا تغيير (0)`,upFromZero:`ارتفاع من 0`,downFromZero:`انخفاض من 0`,notComparableShort:`غير قابل للمقارنة`,comparePointDay:`مقارنة بالأمس في الوقت نفسه`,comparePointWeek:`مقارنة بالنقطة نفسها في الأسبوع الماضي`,comparePointMonth:`مقارنة بالنقطة نفسها في الشهر الماضي`,comparePointQuarter:`مقارنة بالنقطة نفسها في الربع الماضي`,comparePointYear:`مقارنة بالنقطة نفسها في العام الماضي`,comparePointPeriod:`مقارنة بالنقطة نفسها في الفترة السابقة`,previousPointDay:`الأمس في الوقت نفسه`,previousPointWeek:`النقطة نفسها في الأسبوع الماضي`,previousPointMonth:`النقطة نفسها في الشهر الماضي`,previousPointQuarter:`النقطة نفسها في الربع الماضي`,previousPointYear:`النقطة نفسها في العام الماضي`,previousPointPeriod:`النقطة نفسها في الفترة السابقة`,fullDay:`اليوم كاملًا`,fullWeek:`الأسبوع كاملًا`,fullMonth:`الشهر كاملًا`,fullQuarter:`الربع كاملًا`,fullYear:`العام كاملًا`,fullPeriod:`الفترة كاملة`,fullDayTitle:`اليوم كاملًا`,fullWeekTitle:`الأسبوع كاملًا`,fullMonthTitle:`الشهر كاملًا`,fullQuarterTitle:`الربع كاملًا`,fullYearTitle:`العام كاملًا`,fullPeriodTitle:`الفترة كاملة`,cutoffDay:`المقارنة حتى {time} في كلا اليومين`,cutoffWeek:`المقارنة حتى {time} في كلا الأسبوعين`,cutoffMonth:`المقارنة حتى {time} في كلا الشهرين`,cutoffQuarter:`المقارنة حتى {time} في كلا الربعين`,cutoffYear:`المقارنة حتى {time} في كلا العامين`,cutoffPeriod:`المقارنة حتى {time} في كلتا الفترتين`,cutoffLatestRecord:`{cutoff}، وهو وقت أحدث سجل`,previousFullLine:`{period} ({full}): {value}`,compactFullLine:`{full}: {value}`,periodSoFar:`{period} حتى الآن: {value}`,periodInProgress:`{period}: قيد التقدم`,previousFullValue:`{period}: {value} ({full})`,groupNoteLikeForLike:`{period} حتى الآن، مقارنة بـ {previous}`,groupNoteFull:`{period} حتى الآن؛ تُعرض الفترة السابقة كاملة، لذا لا تُقارن الأعمدة على أساس متكافئ`,previousToDate:`السابق حتى التاريخ`,limitInProgress:`{period} ما زال قيد التقدم، لذا قد يتغير إجماليه.`,limitNoRecords:`لا توجد سجلات بعد لـ {period}. هذا ليس 0 مؤكدًا.`,limitNoRecordsReason:`لا توجد سجلات بعد لـ {period}. هذا ليس 0 مؤكدًا: {reason}.`,limitMissing:`{period} مفقود.`,limitMissingReason:`{period} مفقود: {reason}.`,limitCurrentInProgress:`الفترة الحالية ما زالت قيد التقدم، لذا قد يتغير إجماليها.`,missingStatement:`تعذّر تحديد {label}: {reason}`,today:`اليوم`,yesterday:`الأمس`}};const t={analyticsModelLabel:`البيانات`,analyticsModelAutomatic:`تلقائي`,analyticsModelUnavailable:`البيانات المحددة غير متاحة`,testMode:`وضع الاختبار · البيانات المتصلة نفسها`,openChat:`فتح المحادثة`,closeChat:`إغلاق المحادثة`,closeHistory:`إغلاق سجل المحادثات`,unreadMessage:`رسالة واحدة غير مقروءة`,unreadMessages:`{count} رسائل غير مقروءة`,muteSounds:`كتم الأصوات`,unmuteSounds:`تشغيل الأصوات`,statusOnline:`متصل · يرد فورًا`,statusOffline:`غير متاح · اترك رسالة`,liveSupport:`دعم مباشر`,reconnectSupport:`إعادة الاتصال بالدعم`,reconnectPrompt:`يمكنني إعادة أحد أعضاء الفريق إلى هذه المحادثة.`,waitingForTeam:`الذكاء الاصطناعي يساعدك · تم إبلاغ الفريق`,assistantName:`المساعد`,chatName:`المحادثة`,welcomeLabel:`ترحيب من {name}`,welcomeEyebrow:`جاهز متى كنت جاهزًا`,welcomePrompt:`اطرح سؤالًا أو اترك رسالة أو احجز عرضًا توضيحيًا.`,agentTyping:`{name} يكتب…`,expandedAnalyticsResult:`نتيجة التحليل الموسعة`,privacyAndData:`الخصوصية والبيانات المحلية`,muteMicrophone:`كتم الميكروفون`,unmuteMicrophone:`إلغاء كتم الميكروفون`,chooseMicrophone:`اختيار الميكروفون`,defaultMicrophone:`الميكروفون الافتراضي`,microphone:`الميكروفون`,talkNow:`تحدث الآن`,expandView:`توسيع العرض`,exitExpandedView:`الخروج من العرض الموسع`,minimizeVoiceChat:`تصغير المحادثة الصوتية`,endVoiceChat:`إنهاء المحادثة الصوتية`,speakWithAgent:`تحدث مع {name}`,restoreVoiceChat:`استعادة المحادثة الصوتية`,reopenVoiceChat:`إعادة فتح المحادثة الصوتية مع {name}`,voiceConnecting:`جارٍ الاتصال…`,voiceListening:`جارٍ الاستماع…`,voiceHearing:`أسمعك…`,voiceUnavailable:`لا أستطيع سماعك — تحقق من الميكروفون.`,voiceProcessing:`جارٍ النسخ…`,voiceSpeaking:`جارٍ التحدث…`,voiceNoise:`لم يُسمع كلام واضح. اقترب من الميكروفون وحاول مرة أخرى.`,voiceMisunderstood:`تعذر نسخ ذلك. حاول مرة أخرى أو اكتب رسالتك.`,voiceDenied:`الميكروفون غير متاح. اسمح بالوصول أو اكتب رسالتك.`,voiceMuted:`مكتوم — اضغط على الميكروفون لإلغاء الكتم.`,voiceTimeout:`لم يُسمع شيء منذ مدة — جارٍ إنهاء المكالمة.`,callConnecting:`جارٍ الاتصال بالذكاء الاصطناعي…`,callListening:`أستمع الآن — تفضل.`,callHearing:`أسمعك…`,callUnavailable:`لا أستطيع سماعك — تحقق من الميكروفون.`,callSpeaking:`الذكاء الاصطناعي يتحدث — تحدث لمقاطعته.`,callProcessing:`أعمل على ذلك — يمكنك مقاطعتي.`,callNoise:`لم أسمع كلمات واضحة. حاول مرة أخرى بالقرب من الميكروفون.`,callMisunderstood:`لم أفهم ذلك. يرجى المحاولة مرة أخرى.`,callDenied:`الوصول إلى الميكروفون محظور. اسمح بالميكروفون أو اكتب سؤالك.`,callWaiting:`في الانتظار — تحدث عندما تكون جاهزًا.`,callStillWorking:`ما زلت أعمل على إجابتك…`,resumeVoiceChat:`استئناف`,voiceAnswerStillComing:`إجابتك السابقة ما زالت في الطريق.`,voiceDetailsInChat:`النتائج التفصيلية متاحة في المحادثة.`,composerPlaceholder:`اكتب رسالتك…`,send:`إرسال الرسالة`,emoji:`رموز تعبيرية`,gifs:`صور GIF`,attachFile:`إرفاق ملف`,recordVoice:`تسجيل رسالة صوتية`,stopRecording:`إيقاف التسجيل`,actionTestMode:`وضع الاختبار`,stop:`إيقاف`,copy:`نسخ`,copied:`تم النسخ`,doubleCheckResponse:`التحقق من الإجابة`,retryResponse:`إعادة إنشاء الإجابة`,retry:`إعادة المحاولة`,clearChat:`مسح المحادثة`,clearChatConfirm:`هل تريد مسح هذه المحادثة؟`,clearChatConfirmBody:`سيؤدي هذا إلى مسح الرسائل على هذا الجهاز وبدء محادثة جديدة.`,clearConfirmCta:`مسح المحادثة`,endChat:`إنهاء المحادثة`,endChatConfirm:`هل تريد إنهاء هذه المحادثة؟`,endChatConfirmBody:`لن تتمكن من إرسال المزيد من الرسائل في هذه المحادثة، لكن يمكنك بدء محادثة جديدة في أي وقت.`,endConfirmCta:`إنهاء المحادثة`,conversationEnded:`انتهت هذه المحادثة.`,startNewChat:`بدء محادثة جديدة`,pastConversations:`المحادثات السابقة`,viewingPast:`عرض محادثة سابقة (للقراءة فقط)`,backToChat:`العودة إلى المحادثة الحالية`,historyEnded:`منتهية`,feedbackHelpful:`مفيد`,feedbackNotHelpful:`غير مفيد`,feedbackAnswerPrompt:`هل كانت هذه الإجابة مفيدة؟`,feedbackThanks:`شكرًا على ملاحظاتك`,csatPrompt:`كيف كانت هذه المحادثة؟`,feedbackCommentPlaceholder:`ما الذي حدث بشكل خاطئ؟ (اختياري)`,feedbackSend:`إرسال`,cancel:`إلغاء`,newMessages:`رسائل جديدة`,poweredBy:`مدعوم من`,searchGifs:`البحث عن صور GIF…`,searchingGifs:`جارٍ البحث…`,noGifs:`لم يتم العثور على صور GIF`,assistantTyping:`جارٍ تحضير إجابتك…`,emptyReply:`عذرًا، لم أتمكن من إنشاء رد.`,errorGeneric:`لم أتمكن من إتمام هذا الطلب. يرجى المحاولة مرة أخرى.`,errorRateLimit:`أتعامل مع طلبات كثيرة الآن. يرجى المحاولة مرة أخرى بعد قليل.`,errorTimeout:`لم أتمكن من الإنهاء في الوقت المحدد. يرجى المحاولة مرة أخرى.`,errorUnavailable:`لا أستطيع إتمام ذلك الآن. يرجى المحاولة مرة أخرى بعد قليل.`,errorAccess:`لا أستطيع الوصول إلى ذلك بتسجيل دخولك الحالي. يرجى تسجيل الدخول مرة أخرى أو التواصل مع مسؤول التطبيق.`,errorAnalysis:`لم أتمكن من إتمام هذا التحليل. يرجى المحاولة مرة أخرى.`,errorAnalyticsSetup:`لا أستطيع إتمام هذا التحليل بالإعداد الحالي. يرجى التواصل مع مسؤول التطبيق.`,errorCredits:`لا أستطيع المتابعة لأن أرصدة مساحة العمل هذه تحتاج إلى مراجعة. يرجى التواصل مع مالكها.`,errorSubscription:`لا أستطيع المتابعة حتى يصبح اشتراك مساحة العمل هذه نشطًا. يرجى التواصل مع مالكها.`,resultExpired:`هذه النتيجة غير متاحة في هذا السجل القديم. اطرح السؤال مرة أخرى لرؤيتها.`,attaching:`جارٍ قراءة الملف…`,attachTooLarge:`هذا الملف كبير جدًا (الحد الأقصى 5 ميغابايت).`,attachFailed:`تعذر إرفاق هذا الملف. تحقق من نوعه وحاول مرة أخرى.`,attachPreviewTitle:`معاينة {name}`,attachOpen:`معاينة {name}`,attachDownload:`تنزيل`,attachPreviewClose:`إغلاق المعاينة`,attachPreviewLoading:`جارٍ تحميل الملف…`,attachPreviewFailed:`لا يمكن عرض هذا الملف الآن. ربما انتهت صلاحيته.`,attachPreviewUnsupported:`لا يمكن معاينة هذا الملف هنا. نزّله لفتحه.`,attachAnalysisFailed:`تم حفظه للفريق؛ لم يتمكن الذكاء الاصطناعي من قراءته.`,removeAttachment:`إزالة المرفق`,attachLimit:`يمكنك إرفاق ما يصل إلى {count} ملفات في الرسالة الواحدة.`,attachedFiles:`الملفات المرفقة`,removeAttachmentNamed:`إزالة {name}`,dropFileHere:`أفلت الملف هنا`,clearDeviceData:`مسح المحادثات من هذا الجهاز`,clearDeviceDataBody:`يؤدي هذا إلى إزالة المحادثات وبيانات الزائر المخزنة محليًا من هذا المتصفح. لا يمكن التراجع عن ذلك.`,clearDeviceDataCta:`مسح هذا الجهاز`,handoffTitle:`هل تريد أن يتواصل معك فريقنا؟`,handoffName:`الاسم (اختياري)`,handoffEmail:`بريدك الإلكتروني`,handoffNotify:`إبلاغ الفريق`,sending:`جارٍ الإرسال…`,handoffShared:`شاركت هذا مع فريقنا — سيردون عليك على {email}.`,formThanks:`شكرًا! سنتواصل معك.`,caseReference:`المرجع: {reference}`,formError:`حدث خطأ ما — يرجى المحاولة مرة أخرى.`,voiceFormAsk:`من فضلك أخبرني بـ {field}.`,voiceFormReview:`قبل {action}، يرجى التأكيد: {details}. قل نعم للإرسال، أو أخبرني بما يجب تغييره.`,voiceFormCancelled:`حسنًا، ألغيت هذا النموذج.`,voiceFormUnavailable:`لم أتمكن من تحديث هذه التفاصيل. يرجى قول ذلك مرة أخرى.`,voiceFormNoSlots:`لا توجد مواعيد متاحة الآن. يرجى المحاولة لاحقًا.`,voiceFormLoading:`أتحقق من المواعيد المتاحة.`,voiceFormAt:`آت`,voiceFormDot:`نقطة`,voiceFormAppointmentTime:`تاريخ الموعد ووقته`,voiceFormTimeUnavailable:`هذا الوقت غير متاح. يرجى إخباري بتاريخ ووقت آخرين.`,voiceFormExternal:`يمكنني جمع بياناتك صوتيًا وفتح صفحة الحجز بعد تأكيدك. يتطلب هذا المزود اختيار الموعد على صفحته الخاصة.`,actionContactOptions:`خيارات التواصل`,actionGetInTouch:`تواصل معنا`,actionMore:`+{count} أخرى`,actionNeedHelp:`هل تحتاج إلى مساعدة؟`,actionChoose:`اختر ما تريد القيام به`,actionFooter:`سنطلب اسمك الكامل وأفضل بريد إلكتروني أو رقم هاتف ليتمكن الفريق من التواصل معك.`,actionCategorySupport:`الدعم`,actionCategorySales:`التحدث مع المبيعات`,actionCategoryMarketing:`ابقَ على اطلاع`,actionClose:`إغلاق`,actionAs:`باسم {identity}`,bookingPickTime:`ما الوقت الأنسب لك؟`,bookingPickDay:`اختر يومًا`,bookingPickTimeLabel:`اختر وقتًا`,bookingDuration:`عرض توضيحي مدته {count} دقيقة`,bookingCallbackDuration:`معاودة اتصال مدتها {count} دقيقة`,bookingTimezone:`الأوقات معروضة بتوقيت {timezone}`,bookingSchedulerFallback:`أداة الحجز`,bookingCheckingAvailability:`جارٍ التحقق من توفر التقويم…`,bookingNoSlots:`لم يتم العثور على أوقات متاحة في فترة الحجز هذه.`,bookingAvailabilityUnavailable:`توفر التقويم غير متاح مؤقتًا. يرجى المحاولة مرة أخرى بعد قليل.`,bookingEarlierToday:`في وقت سابق اليوم`,bookingCalendarBusy:`مشغول في التقويم`,bookingAlreadyBooked:`محجوز بالفعل`,bookingNotOffered:`غير متاح في التقويم`,bookingRequested:`تم طلب عرض توضيحي في {when}. سيتواصل معك الفريق.`,bookingVerificationPending:`تلقينا طلبك لموعد {when}، لكن تعذر التحقق من الحجز في التقويم. سيراجعه الفريق. يرجى عدم حجز هذا الوقت مرة أخرى.`,bookingCallbackRequested:`تم طلب معاودة الاتصال في {when}.`,bookingCallbackConfirmed:`تمت جدولة معاودة الاتصال في {when}.`,bookingConfirmed:`تم حجز العرض التوضيحي في {when}.`,bookingSlotTaken:`تم حجز هذا الوقت للتو — يرجى اختيار وقت آخر.`,bookingViaProvider:`اختر وقتًا يناسبك على {provider}.`,bookingOpenScheduler:`فتح أداة الحجز`,bookingLinkOpened:`جارٍ فتح أداة الحجز — اختر الوقت الذي يناسبك. 📅`,bookingScheduled:`تم حجز العرض التوضيحي. تفاصيل الحجز محفوظة في هذه المحادثة.`,bookingBackToChat:`العودة إلى المحادثة`,bookingOpenNewTab:`فتح في علامة تبويب جديدة`,bookingCloseScheduler:`إغلاق أداة الحجز`,bookingLoadingScheduler:`جارٍ تحميل أداة الحجز…`,bookingMeetingLink:`رابط الاجتماع`,bookingManageLink:`إدارة الحجز`,bookingCheckingDetails:`جارٍ الحصول على رابط اجتماعك…`,bookingDetailsUnavailable:`لم نتمكن من التحقق من تفاصيل الحجز بعد. حاول التحقق مرة أخرى هنا؛ يرجى عدم حجز الوقت نفسه مرتين.`,bookingUnverifiedLink:`عرض سجل التقويم غير المؤكد`,bookingRetryDetails:`إعادة المحاولة`,callConnectingWithAi:`جارٍ الاتصال بالذكاء الاصطناعي…`,disclaimerDefault:`قد يتم تسجيل هذه المحادثة لأغراض الجودة والدعم.`,actionContactSupportDescription:`أرسل طلبك إلى فريق الدعم.`,actionLeaveMessageDescription:`أرسل سؤالك وبيانات التواصل.`,actionBookDemoDescription:`اطلب عرضًا توضيحيًا من الفريق.`,actionRequestCallbackDescription:`اطلب أن يتصل بك أول موظف مبيعات متاح.`,actionScheduleCallbackDescription:`اختر تاريخًا ووقتًا متاحين لمكالمة.`,actionSubscribeDescription:`احصل على آخر أخبار المنتج.`,formContactSupportTitle:`التواصل مع الدعم`,formRequestSupport:`طلب الدعم`,formLeaveMessageTitle:`ترك رسالة`,formSendMessage:`إرسال الرسالة`,formShareDetailsTitle:`شارك بياناتك`,formSave:`حفظ`,formBookDemoTitle:`حجز عرض توضيحي`,formRequestDemo:`طلب عرض توضيحي`,formRequestCallbackTitle:`طلب معاودة الاتصال`,formRequestCallback:`طلب معاودة الاتصال`,formScheduleCallbackTitle:`جدولة معاودة الاتصال`,formScheduleCallback:`جدولة معاودة الاتصال`,formSubscribe:`اشتراك`,fieldFullName:`الاسم الكامل`,fieldEmail:`البريد الإلكتروني`,fieldSubject:`الموضوع`,fieldMessage:`الرسالة`,fieldPhone:`الهاتف`,fieldPhoneNumber:`رقم الهاتف`,fieldPreferredTime:`الوقت المفضل`,fieldNotes:`ملاحظات`,fieldTopic:`الموضوع`,placeholderSupportMessage:`صف ما تحتاج إلى مساعدة فيه.`,placeholderInquiryMessage:`كيف يمكننا مساعدتك؟`,placeholderPreferredTime:`مثلًا: الخميس 3 مساءً`,placeholderNotes:`هل هناك ما يجب أن نعرفه؟`,placeholderTopic:`بخصوص ماذا نتصل بك؟`,phoneChooseCountry:`{country}، +{dial}. اختر الدولة ورمز الاتصال`,phoneSearchPlaceholder:`ابحث عن دولة أو رمز`,phoneSearchLabel:`البحث في الدول`,phoneCountries:`الدول`,phoneNoCountries:`لم يتم العثور على دول`,handoffDefaultMessage:`كان لدي سؤال لم يتمكن المساعد من الإجابة عنه.`,handoffAlerted:`تم حفظ طلبك ليتابعه الفريق.`,gifAlt:`صورة GIF`,toolResultAlt:`نتيجة الأداة`,openResult:`فتح النتيجة`,microphoneNumbered:`الميكروفون {number}`,voiceDraftListening:`جارٍ الاستماع...`,emojiSmileys:`الوجوه`,emojiGestures:`الإيماءات`,emojiHearts:`القلوب والرموز`,emojiAnimals:`الحيوانات والطبيعة`,emojiFood:`الطعام والشراب`,emojiObjects:`الأشياء والسفر`,actionCompleted:`تم تنفيذ الإجراء.`,copyResultData:`بيانات النتيجة`,copyRowsReturned:`تم إرجاع {count}`,copyRowsReturnedOf:`تم إرجاع {count} من {total}`,copyTruncated:`مقتطع`,copyTotals:`الإجماليات`,previewReply:`👋 هذه معاينة — الردود هنا أمثلة. انشر الأداة على موقعك للدردشة مع الذكاء الاصطناعي المباشر.`,previewActionNote:`معاينة — لم يتم إرسال أي شيء. سيعمل هذا فعليًا بعد النشر.`,previewBanner:`معاينة — ردود نموذجية، بدون ذكاء اصطناعي`};var n=t,r={widget:n,results:e};exports.default=r;
@@ -0,0 +1 @@
1
+ var e={other:`Andere`,unknown:`Unbekannt`,rowLabel:`Zeile {count}`,chartCategory:`Kategorie`,chartActivity:`Aktivität`,chartTarget:`Ziel: {value}`,mapApproximateLocation:`Ungefähre regionale Lage`,mapApproximateDescription:`Markierungen zeigen ungefähre regionale Standorte`,previousChart:`das vorherige Diagramm`,aggregationQuestion:`Berechne mit denselben freigegebenen Daten, Filtern und demselben Zeitraum wie in „{title}“ {aggregation} für {measure} pro {dimension}. Gib ein Diagramm und, sofern diese App es erlaubt, eine Tabelle zurück.`,partialChart:`Dieses Diagramm basiert auf einem Teilergebnis. Grenzen Sie die Frage ein, um vollständige Daten zu erhalten.`,resultDetails:`Ergebnisdetails`,liveMetric:`Live-Kennzahl`,currentValue:`Aktueller Wert`,noMatchTitle:`Keine passenden Daten`,noMatchBody:`Keine freigegebenen Datensätze passen zu dieser Frage.`,chartType:`Diagrammtyp`,chooseChartType:`Diagrammtyp auswählen`,aggregate:`Aggregieren`,aggregateTitle:`Neue geprüfte Berechnung anfordern`,aggregateCharge:`Neue geprüfte Antwort. Es können Abfragekosten anfallen.`,chartFallback:`Diagramm`,chartLine:`Linie`,chartArea:`Fläche`,chartCombo:`Kombination`,chartAreaHint:`Gefüllte Verläufe über die Zeit.`,chartComboHint:`Behält die angeforderten Ebenen und ihre eigenen Skalen bei.`,chartBar:`Balken`,chartStackedBar:`Gestapelte Balken`,chartLineHint:`Ideal für Veränderungen über die Zeit.`,chartBarHint:`Kategorien oder Rangfolgen vergleichen.`,chartStackedBarHint:`Summen und ihre Anteile vergleichen.`,aggregationSum:`Summe`,aggregationAvg:`Durchschnitt`,aggregationMin:`Minimum`,aggregationMax:`Maximum`,aggregationCount:`Gesamtanzahl`,aggregationCountDistinct:`Eindeutige Anzahl`,download:`Herunterladen`,downloadData:`Diese Daten herunterladen`,expandTable:`Tabelle vergrößern`,rankColumn:`Rang`,expandChart:`Diagramm vergrößern`,restoreView:`Zur Assistentenansicht zurückkehren`,aboutResult:`Über dieses Ergebnis`,aboutPeriod:`Zeitraum`,aboutResults:`Ergebnisse`,aboutChecked:`Geprüft`,aboutTimezone:`Zeitzone`,aboutSourceData:`Quelldaten`,aboutFilters:`Filter`,rowOne:`{count} Zeile`,rowMany:`{count} Zeilen`,filtersOne:`{count} angewendeter Filter`,filtersMany:`{count} angewendete Filter`,filtersApplied:`{count} angewendet`,notSet:`Nicht festgelegt`,noValue:`Kein Wert`,analysisUnavailable:`Diese Analyse konnte nicht abgeschlossen werden.`,yes:`Ja`,no:`Nein`,chartValues:`Werte`,chartTitle:`{measure} nach {dimension}`,viewerTitle:`Analyseergebnis`,viewerUnavailable:`Die Analyseansicht konnte nicht geladen werden.`,retryViewer:`Erneut versuchen`,viewerUpdateAvailable:`Eine neue Version ist verfügbar. Schließen Sie Ihre Änderungen vor dem Aktualisieren ab.`,updateViewer:`Ansicht aktualisieren`,seriesLimited:`{shown} von {total} Reihen werden angezeigt.`,summaryLatest:`Neuester Wert ({category}): {values}.`,summaryNoTrend:`Keine numerischen Verlaufswerte verfügbar.`,summaryHighest:`Höchster Wert: {category}, {series} {value}.`,summaryNoComparison:`Keine numerischen Vergleichswerte verfügbar.`,zoomControls:`Zoom-Steuerung des Diagramms`,zoomIn:`Diagramm vergrößern`,zoomOut:`Diagramm verkleinern`,zoomReset:`Diagrammzoom zurücksetzen`,zoomResetShort:`Zurücksetzen`,zoomNone:`Keine Diagrammpunkte`,zoomAllOne:`Insgesamt {count} Punkt`,zoomAllMany:`Alle {count} Punkte`,zoomRange:`{start} – {end} · {visible} von {count} Punkten`,inProgress:`läuft`,newContent:`Neue Inhalte`,updatedAt:`Aktualisiert um {time}`,liveData:`Live-Daten`,viewData:`Daten anzeigen`,hideData:`Daten ausblenden`,inProgressLegend:`Läuft`,governedResult:`Geprüftes Ergebnis`,quarterLabel:`Q{quarter} {year}`,sourceCurrent:`aktuell`,sourceDelayed:`verzögert`,sourceNoData:`keine Daten`,comboDescription:`Kombinationsdiagramm. {series}`,comboSeriesLeft:`{name}, {type}, linke Achse`,comboSeriesRight:`{name}, {type}, rechte Achse`,comboOmitted:`{count} weitere Reihen werden nicht angezeigt.`,tableEmpty:`Keine Zeilen zurückgegeben.`,tableCaptionOne:`Ergebnistabelle mit {count} Zeile`,tableCaptionMany:`Ergebnistabelle mit {count} Zeilen`,tableShowing:`{shown} von {total} Zeilen werden angezeigt. Vergrößern, um alle zu sehen.`,tableFields:`Felder`,tableSearch:`Dieses Ergebnis durchsuchen`,tableSearchPlaceholder:`Dieses Ergebnis durchsuchen …`,tableDisplayMode:`Tabellenansicht`,tableModeTable:`Tabelle`,tableModeMatrix:`Matrix`,tableColumns:`Spalten`,tableMoveLeft:`{column} nach links verschieben`,tableMoveRight:`{column} nach rechts verschieben`,tableComfortableRows:`Großzügige Zeilen`,tableCompactRows:`Kompakte Zeilen`,tableResetView:`Ansicht zurücksetzen`,tableClearFilter:`Filter für {column} entfernen`,tableScrollable:`Scrollbare Ergebnistabelle`,tableSelectAll:`Alle sichtbaren Zeilen auswählen`,tableSortBy:`Nach {column} sortieren`,tableColumnActions:`Aktionen für {column}`,tableSortAscending:`Aufsteigend sortieren`,tableSortDescending:`Absteigend sortieren`,tableFilterValues:`Werte filtern`,tableFilterOperator:`Filteroperator für {column}`,tableOpContains:`Enthält`,tableOpEquals:`Ist gleich`,tableOpNotEquals:`Ist ungleich`,tableOpGt:`Größer als`,tableOpGte:`Mindestens`,tableOpLt:`Kleiner als`,tableOpLte:`Höchstens`,tableFilterValue:`Filterwert für {column}`,tableFilterPlaceholder:`Wert eingeben`,tableApplyFilter:`Filter anwenden`,tablePinColumn:`Spalte fixieren`,tableUnpinColumn:`Fixierung aufheben`,tableWrapText:`Text umbrechen`,tableNoWrapText:`Text nicht umbrechen`,tableDisplayName:`Anzeigename für {column}`,tableApplyDisplayName:`Anzeigenamen übernehmen`,tableSelectRow:`Zeile {row} auswählen`,tablePageRange:`{start}–{end} von {total}`,tablePageEmpty:`0 von {total}`,tablePagination:`Tabellenseiten`,tableRows:`Zeilen`,tableRowsPerPage:`Zeilen pro Seite`,tablePreviousPage:`Vorherige Seite`,tableNextPage:`Nächste Seite`,tableFirstRows:`Die ersten {count} Zeilen sind verfügbar`,tableAllRows:`Alle zurückgegebenen Zeilen geladen`,explanation:{eyebrow:`Antwort aus Ihren Daten`,provenanceAI:`KI-gestützt · Belege geprüft`,provenanceCalculated:`Berechnete Ergebnisse`,provenanceGoverned:`Basierend auf aktuellen Werten`,comparison:`Vergleich`,conclusions:`Was wir folgern können`,whyItMatters:`Warum das wichtig ist`,limits:`Wichtige Einschränkungen`,investigate:`Weiter untersuchen`,evidenceList:`Belege`,causes:`Mögliche Ursachen`,causesHint:`Nicht nachgewiesene Ursachen`,howToCheck:`So prüfen Sie es:`,recommendations:`Empfohlene nächste Schritte`,watch:`Beobachten:`,outlook:`Ausblick`,followUps:`Folgefrage stellen`,sourceNoteAI:`KI-gestützte Formulierung, geprüft anhand der hier gezeigten Live-Werte.`,sourceNoteCalculated:`KI-gestützte Formulierung auf Basis berechneter Ergebnisse.`,sourceNoteGoverned:`Nur auf Basis der hier gezeigten Live-Werte.`,evidence:`Beleg`,evidenceMetric:`Kennzahl`,evidencePeriod:`Zeitraum`,evidenceTimezone:`Zeitzone`,evidenceFilters:`Filter`,evidenceValue:`Wert`,evidenceStatus:`Status`,evidenceSource:`Quelle`,evidenceChecked:`Geprüft`,openSource:`Quelle öffnen`,closeEvidence:`Belegdetails schließen`,citationLabel:`Beleg anzeigen`,sourceCard:`Diese Karte`,sourceSupportingQuery:`Zugrunde liegende Abfrage`,feedbackPrompt:`War diese Erklärung hilfreich?`,feedbackHelpful:`Hilfreiche Erklärung`,feedbackNotHelpful:`Nicht hilfreiche Erklärung`,feedbackReasonsPrompt:`Was war falsch? (optional)`,feedbackCommentPlaceholder:`Sonst noch etwas? (optional)`,feedbackSubmit:`Feedback senden`,feedbackThanks:`Danke für Ihr Feedback.`,feedbackUndo:`Rückgängig`,feedbackError:`Feedback konnte nicht gespeichert werden. Versuchen Sie es erneut.`,notComparable:`Noch nicht vergleichbar`,basicExplanation:`Einfache Erklärung`,preparingDetailed:`Ausführliche Erklärung wird vorbereitet …`,stillWorkingDetailed:`Die ausführliche Erklärung wird noch erstellt …`,waitingToRetry:`Kurze Pause vor dem erneuten Versuch der ausführlichen Erklärung …`,detailedReady:`Ausführliche Erklärung bereit.`,detailedUnavailable:`Eine ausführliche Erklärung ist gerade nicht verfügbar.`,detailedRetry:`Erneut versuchen`,region:`Erklärung`,details:`Was das bedeutet`,drivers:`Was dahintersteckt`,driversHint:`Gemessener Zusammenhang, kein Ursachennachweis`,anomalies:`Ungewöhnliche Werte`,supplementaryFindings:`Ebenfalls in den Daten`,ties:`Gleichstände`,tiedHighest:`Gleichauf an der Spitze`,tiedLowest:`Gleichauf am Ende`,frameworks:`Allgemeine Hinweise, nicht aus Ihren Daten`,dataGaps:`Fehlende Daten`,segment:`Segment:`,tasks:`Aufgaben`,inProgress:`läuft`,expand:`Erklärung aufklappen`,collapse:`Erklärung zuklappen`,reasonWrongNumbers:`Falsche Zahlen`,reasonMissingComparison:`Fehlender Vergleich`,reasonUnclear:`Unklar`,reasonTooLong:`Zu lang`,tasksProgress:`{label} ({done} von {total})`,taskPlanned:`Geplant`,taskRunning:`Läuft`,taskDone:`Erledigt`,taskFailed:`Fehlgeschlagen`,taskSkipped:`Übersprungen`,statusConfirmedZero:`bestätigte 0`,statusNoRecords:`noch keine Datensätze`,statusMissing:`fehlt`,statusObserved:`beobachtet`,forecastLow:`Prognose mit geringer Zuverlässigkeit`,forecastDirectional:`Richtungsprognose`,forecastValidated:`Validierte Prognose`,forecastEstimate:`Prognoseschätzung`,checkedTimesIn:`Zeiten in {timezone}`,checkedAt:`Geprüft um {time}`,periodRange:`{start} – {end} (Ende nicht enthalten)`,periodFrom:`Ab {start}`,periodBefore:`Vor {end}`,liveData:`Live-Daten`,updatedAt:`Aktualisiert um {time}`,freshnessUpdated:`Aktualisiert`,freshnessUnknown:`Die Aktualität der Quelle ist nicht verfügbar.`,freshnessFresh:`Aktuell`,freshnessCurrent:`Die Quelldaten sind aktuell.`,freshnessNoData:`Keine Quelldaten`,freshnessNoDataBody:`Für diesen oder einen früheren Zeitraum sind keine Quelldaten verfügbar.`,freshnessChecked:`Geprüft am {date}`,freshnessLatestRecord:`Neuester Datensatz`,freshnessLatestRecordOn:`Neuester Datensatz: {date}`,freshnessLatestBody:`Neuester passender Datensatz: {date}. Ein älterer Datensatz allein beweist keine Verzögerung der Quelle.`,freshnessLatestUnknownBody:`Das Datum des neuesten passenden Datensatzes ist nicht verfügbar. Ein älterer Datensatz allein beweist keine Verzögerung der Quelle.`,currentPeriod:`Aktueller Zeitraum`,previousPeriod:`Vorheriger Zeitraum`,periodNoRecords:`{period}: noch keine Datensätze`,noChangeFromZero:`Keine Änderung (0)`,upFromZero:`Gestiegen von 0`,downFromZero:`Gesunken von 0`,notComparableShort:`Nicht vergleichbar`,comparePointDay:`ggü. gestern zur selben Zeit`,comparePointWeek:`ggü. demselben Zeitpunkt letzte Woche`,comparePointMonth:`ggü. demselben Zeitpunkt letzten Monat`,comparePointQuarter:`ggü. demselben Zeitpunkt im letzten Quartal`,comparePointYear:`ggü. demselben Zeitpunkt letztes Jahr`,comparePointPeriod:`ggü. demselben Zeitpunkt im letzten Zeitraum`,previousPointDay:`Gestern zur selben Zeit`,previousPointWeek:`Derselbe Zeitpunkt letzte Woche`,previousPointMonth:`Derselbe Zeitpunkt letzten Monat`,previousPointQuarter:`Derselbe Zeitpunkt im letzten Quartal`,previousPointYear:`Derselbe Zeitpunkt letztes Jahr`,previousPointPeriod:`Derselbe Zeitpunkt im letzten Zeitraum`,fullDay:`ganzer Tag`,fullWeek:`ganze Woche`,fullMonth:`ganzer Monat`,fullQuarter:`ganzes Quartal`,fullYear:`ganzes Jahr`,fullPeriod:`ganzer Zeitraum`,fullDayTitle:`Ganzer Tag`,fullWeekTitle:`Ganze Woche`,fullMonthTitle:`Ganzer Monat`,fullQuarterTitle:`Ganzes Quartal`,fullYearTitle:`Ganzes Jahr`,fullPeriodTitle:`Ganzer Zeitraum`,cutoffDay:`Verglichen bis {time} an beiden Tagen`,cutoffWeek:`Verglichen bis {time} in beiden Wochen`,cutoffMonth:`Verglichen bis {time} in beiden Monaten`,cutoffQuarter:`Verglichen bis {time} in beiden Quartalen`,cutoffYear:`Verglichen bis {time} in beiden Jahren`,cutoffPeriod:`Verglichen bis {time} in beiden Zeiträumen`,cutoffLatestRecord:`{cutoff}, Zeitpunkt des neuesten Datensatzes`,previousFullLine:`{period} ({full}): {value}`,compactFullLine:`{full}: {value}`,periodSoFar:`{period} bisher: {value}`,periodInProgress:`{period}: läuft`,previousFullValue:`{period}: {value} ({full})`,groupNoteLikeForLike:`{period} bisher, verglichen mit {previous}`,groupNoteFull:`{period} bisher; der vorherige Zeitraum wird vollständig gezeigt, daher sind die Balken nicht direkt vergleichbar`,previousToDate:`Vorperiode bis heute`,limitInProgress:`{period} läuft noch, daher kann sich die Summe noch ändern.`,limitNoRecords:`{period} hat noch keine Datensätze. Das ist keine bestätigte 0.`,limitNoRecordsReason:`{period} hat noch keine Datensätze. Das ist keine bestätigte 0: {reason}.`,limitMissing:`{period} fehlt.`,limitMissingReason:`{period} fehlt: {reason}.`,limitCurrentInProgress:`Der aktuelle Zeitraum läuft noch, daher kann sich die Summe noch ändern.`,missingStatement:`{label} konnte nicht ermittelt werden: {reason}`,today:`Heute`,yesterday:`Gestern`}};const t={analyticsModelLabel:`Daten`,analyticsModelAutomatic:`Automatisch`,analyticsModelUnavailable:`Die ausgewählten Daten sind nicht verfügbar`,testMode:`Testmodus · Dieselben verbundenen Daten`,openChat:`Chat öffnen`,closeChat:`Chat schließen`,closeHistory:`Gesprächsverlauf schließen`,unreadMessage:`1 ungelesene Nachricht`,unreadMessages:`{count} ungelesene Nachrichten`,muteSounds:`Töne stummschalten`,unmuteSounds:`Töne einschalten`,statusOnline:`Online · antwortet sofort`,statusOffline:`Abwesend · hinterlassen Sie eine Nachricht`,liveSupport:`Live-Support`,reconnectSupport:`Erneut mit dem Support verbinden`,reconnectPrompt:`Ich kann ein Teammitglied zurück in diesen Chat holen.`,waitingForTeam:`KI hilft · Team benachrichtigt`,assistantName:`Assistent`,chatName:`Chat`,welcomeLabel:`Willkommen von {name}`,welcomeEyebrow:`Bereit, wenn Sie es sind`,welcomePrompt:`Stellen Sie eine Frage, hinterlassen Sie eine Nachricht oder buchen Sie eine Demo.`,agentTyping:`{name} schreibt…`,expandedAnalyticsResult:`Erweitertes Analyseergebnis`,privacyAndData:`Datenschutz und lokale Daten`,muteMicrophone:`Mikrofon stummschalten`,unmuteMicrophone:`Mikrofon einschalten`,chooseMicrophone:`Mikrofon wählen`,defaultMicrophone:`Standardmikrofon`,microphone:`Mikrofon`,talkNow:`Jetzt sprechen`,expandView:`Ansicht vergrößern`,exitExpandedView:`Vergrößerte Ansicht verlassen`,minimizeVoiceChat:`Sprachchat minimieren`,endVoiceChat:`Sprachchat beenden`,speakWithAgent:`Mit {name} sprechen`,restoreVoiceChat:`Sprachchat wiederherstellen`,reopenVoiceChat:`Sprachchat mit {name} wieder öffnen`,voiceConnecting:`Verbinden…`,voiceListening:`Hört zu…`,voiceHearing:`Ich höre Sie…`,voiceUnavailable:`Ich kann Sie nicht hören — prüfen Sie Ihr Mikrofon.`,voiceProcessing:`Wird transkribiert…`,voiceSpeaking:`Spricht…`,voiceNoise:`Keine klare Sprache erkannt. Gehen Sie näher ans Mikrofon und versuchen Sie es erneut.`,voiceMisunderstood:`Das konnte nicht transkribiert werden. Versuchen Sie es erneut oder tippen Sie Ihre Nachricht.`,voiceDenied:`Mikrofon nicht verfügbar. Erlauben Sie den Zugriff oder tippen Sie Ihre Nachricht.`,voiceMuted:`Stummgeschaltet — tippen Sie auf das Mikrofon, um es einzuschalten.`,voiceTimeout:`Eine Weile nichts gehört — der Anruf wird beendet.`,callConnecting:`Verbindung mit der KI…`,callListening:`Ich höre zu — legen Sie los.`,callHearing:`Ich höre Sie…`,callUnavailable:`Ich kann Sie nicht hören — prüfen Sie Ihr Mikrofon.`,callSpeaking:`Die KI spricht — sprechen Sie, um zu unterbrechen.`,callProcessing:`Ich arbeite daran — Sie können mich unterbrechen.`,callNoise:`Ich habe keine klaren Worte gehört. Versuchen Sie es näher am Mikrofon.`,callMisunderstood:`Das habe ich nicht verstanden. Bitte versuchen Sie es erneut.`,callDenied:`Der Mikrofonzugriff ist blockiert. Erlauben Sie das Mikrofon oder tippen Sie Ihre Frage.`,callWaiting:`Wartet — sprechen Sie, wenn Sie bereit sind.`,callStillWorking:`Ich arbeite noch an Ihrer Antwort…`,resumeVoiceChat:`Fortsetzen`,voiceAnswerStillComing:`Ihre vorherige Antwort kommt noch.`,voiceDetailsInChat:`Die detaillierten Ergebnisse findest du im Chat.`,composerPlaceholder:`Nachricht eingeben…`,send:`Nachricht senden`,emoji:`Emoji`,gifs:`GIFs`,attachFile:`Datei anhängen`,recordVoice:`Sprachnachricht aufnehmen`,stopRecording:`Aufnahme beenden`,actionTestMode:`Testmodus`,stop:`Stopp`,copy:`Kopieren`,copied:`Kopiert`,doubleCheckResponse:`Antwort überprüfen`,retryResponse:`Antwort erneut erzeugen`,retry:`Erneut versuchen`,clearChat:`Gespräch löschen`,clearChatConfirm:`Dieses Gespräch löschen?`,clearChatConfirmBody:`Dadurch werden die Nachrichten auf diesem Gerät gelöscht und ein neuer Chat gestartet.`,clearConfirmCta:`Chat löschen`,endChat:`Gespräch beenden`,endChatConfirm:`Dieses Gespräch beenden?`,endChatConfirmBody:`Sie können in diesem Chat keine Nachrichten mehr senden, aber jederzeit einen neuen beginnen.`,endConfirmCta:`Gespräch beenden`,conversationEnded:`Dieses Gespräch wurde beendet.`,startNewChat:`Neues Gespräch beginnen`,pastConversations:`Frühere Gespräche`,viewingPast:`Früheres Gespräch wird angezeigt (schreibgeschützt)`,backToChat:`Zurück zum aktuellen Chat`,historyEnded:`beendet`,feedbackHelpful:`Hilfreich`,feedbackNotHelpful:`Nicht hilfreich`,feedbackAnswerPrompt:`War diese Antwort hilfreich?`,feedbackThanks:`Danke für Ihr Feedback`,csatPrompt:`Wie war dieser Chat?`,feedbackCommentPlaceholder:`Was ist schiefgelaufen? (optional)`,feedbackSend:`Senden`,cancel:`Abbrechen`,newMessages:`Neue Nachrichten`,poweredBy:`Bereitgestellt von`,searchGifs:`GIFs suchen…`,searchingGifs:`Suche…`,noGifs:`Keine GIFs gefunden`,assistantTyping:`Ihre Antwort wird vorbereitet…`,emptyReply:`Entschuldigung, ich konnte keine Antwort erzeugen.`,errorGeneric:`Ich konnte diese Anfrage nicht abschließen. Bitte versuchen Sie es erneut.`,errorRateLimit:`Ich bearbeite gerade sehr viele Anfragen. Bitte versuchen Sie es gleich noch einmal.`,errorTimeout:`Ich konnte das nicht rechtzeitig abschließen. Bitte versuchen Sie es erneut.`,errorUnavailable:`Das kann ich gerade nicht abschließen. Bitte versuchen Sie es gleich noch einmal.`,errorAccess:`Mit Ihrer aktuellen Anmeldung habe ich darauf keinen Zugriff. Melden Sie sich erneut an oder wenden Sie sich an den Administrator Ihrer App.`,errorAnalysis:`Ich konnte diese Analyse nicht abschließen. Bitte versuchen Sie es erneut.`,errorAnalyticsSetup:`Mit der aktuellen Einrichtung kann ich diese Analyse nicht abschließen. Wenden Sie sich an den Administrator Ihrer App.`,errorCredits:`Ich kann nicht fortfahren, weil die Guthaben dieses Arbeitsbereichs Aufmerksamkeit benötigen. Wenden Sie sich an den Inhaber.`,errorSubscription:`Ich kann erst fortfahren, wenn das Abonnement dieses Arbeitsbereichs aktiv ist. Wenden Sie sich an den Inhaber.`,resultExpired:`Dieses Ergebnis ist in diesem älteren Verlauf nicht verfügbar. Fragen Sie erneut, um es zu sehen.`,attaching:`Datei wird gelesen…`,attachTooLarge:`Diese Datei ist zu groß (max. 5 MB).`,attachFailed:`Die Datei konnte nicht angehängt werden. Prüfen Sie den Dateityp und versuchen Sie es erneut.`,attachPreviewTitle:`Vorschau von {name}`,attachOpen:`Vorschau von {name} anzeigen`,attachDownload:`Herunterladen`,attachPreviewClose:`Vorschau schließen`,attachPreviewLoading:`Datei wird geladen…`,attachPreviewFailed:`Diese Datei kann gerade nicht angezeigt werden. Sie ist möglicherweise abgelaufen.`,attachPreviewUnsupported:`Für diese Datei ist hier keine Vorschau möglich. Laden Sie sie herunter, um sie zu öffnen.`,attachAnalysisFailed:`Für das Team gespeichert; die KI konnte sie nicht lesen.`,removeAttachment:`Anhang entfernen`,attachLimit:`Sie können bis zu {count} Dateien an eine Nachricht anhängen.`,attachedFiles:`Angehängte Dateien`,removeAttachmentNamed:`{name} entfernen`,dropFileHere:`Datei hier ablegen`,clearDeviceData:`Gespräche von diesem Gerät löschen`,clearDeviceDataBody:`Dadurch werden lokal gespeicherte Gespräche und Besucherdaten aus diesem Browser entfernt. Dies kann nicht rückgängig gemacht werden.`,clearDeviceDataCta:`Dieses Gerät löschen`,handoffTitle:`Soll sich unser Team bei Ihnen melden?`,handoffName:`Name (optional)`,handoffEmail:`Ihre E-Mail`,handoffNotify:`Team benachrichtigen`,sending:`Wird gesendet…`,handoffShared:`Ich habe das an unser Team weitergegeben — es meldet sich unter {email}.`,formThanks:`Danke! Wir melden uns.`,caseReference:`Referenz: {reference}`,formError:`Etwas ist schiefgelaufen — bitte versuchen Sie es erneut.`,voiceFormAsk:`Bitte nennen Sie mir {field}.`,voiceFormReview:`Bevor ich {action}, bestätigen Sie bitte: {details}. Sagen Sie Ja zum Absenden oder sagen Sie mir, was ich ändern soll.`,voiceFormCancelled:`In Ordnung, ich habe das Formular abgebrochen.`,voiceFormUnavailable:`Ich konnte diese Angaben nicht aktualisieren. Bitte sagen Sie das noch einmal.`,voiceFormNoSlots:`Zurzeit sind keine Termine verfügbar. Bitte versuchen Sie es später erneut.`,voiceFormLoading:`Ich prüfe die verfügbaren Termine.`,voiceFormAt:`at`,voiceFormDot:`Punkt`,voiceFormAppointmentTime:`Datum und Uhrzeit des Termins`,voiceFormTimeUnavailable:`Diese Uhrzeit ist nicht verfügbar. Bitte nennen Sie mir ein anderes Datum und eine andere Uhrzeit.`,voiceFormExternal:`Ich kann Ihre Angaben per Sprache erfassen und nach Ihrer Bestätigung die Buchungsseite öffnen. Bei diesem Anbieter wird der Termin auf seiner eigenen Seite gewählt.`,actionContactOptions:`Kontaktmöglichkeiten`,actionGetInTouch:`Kontakt aufnehmen`,actionMore:`+{count} weitere`,actionNeedHelp:`Brauchen Sie Hilfe?`,actionChoose:`Wählen Sie, was Sie tun möchten`,actionFooter:`Wir fragen nach Ihrem vollständigen Namen und der besten E-Mail-Adresse oder Telefonnummer, damit das Team Sie erreichen kann.`,actionCategorySupport:`Support`,actionCategorySales:`Mit dem Vertrieb sprechen`,actionCategoryMarketing:`In Kontakt bleiben`,actionClose:`Schließen`,actionAs:`als {identity}`,bookingPickTime:`Welche Uhrzeit passt Ihnen am besten?`,bookingPickDay:`Tag wählen`,bookingPickTimeLabel:`Uhrzeit wählen`,bookingDuration:`{count}-minütige Demo`,bookingCallbackDuration:`{count}-minütiger Rückruf`,bookingTimezone:`Zeiten in {timezone}`,bookingSchedulerFallback:`die Terminplanung`,bookingCheckingAvailability:`Kalenderverfügbarkeit wird geprüft…`,bookingNoSlots:`In diesem Buchungszeitraum wurden keine freien Zeiten gefunden.`,bookingAvailabilityUnavailable:`Die Kalenderverfügbarkeit ist vorübergehend nicht abrufbar. Bitte versuchen Sie es gleich noch einmal.`,bookingEarlierToday:`Früher heute`,bookingCalendarBusy:`Im Kalender belegt`,bookingAlreadyBooked:`Bereits gebucht`,bookingNotOffered:`Vom Kalender nicht angeboten`,bookingRequested:`Demo für {when} angefragt. Das Team meldet sich.`,bookingVerificationPending:`Wir haben Ihre Anfrage für {when} erhalten, konnten die Kalenderbuchung aber nicht bestätigen. Das Team prüft das. Bitte buchen Sie diese Zeit nicht erneut.`,bookingCallbackRequested:`Rückruf für {when} angefragt.`,bookingCallbackConfirmed:`Ihr Rückruf ist für {when} geplant.`,bookingConfirmed:`Ihre Demo ist für {when} gebucht.`,bookingSlotTaken:`Diese Zeit wurde gerade vergeben — bitte wählen Sie eine andere.`,bookingViaProvider:`Wählen Sie auf {provider} eine passende Zeit.`,bookingOpenScheduler:`Terminplanung öffnen`,bookingLinkOpened:`Terminplanung wird geöffnet — wählen Sie eine passende Zeit. 📅`,bookingScheduled:`Ihre Demo ist gebucht. Ihre Buchungsdetails sind in diesem Chat gespeichert.`,bookingBackToChat:`Zurück zum Chat`,bookingOpenNewTab:`In neuem Tab öffnen`,bookingCloseScheduler:`Terminplanung schließen`,bookingLoadingScheduler:`Terminplanung wird geladen…`,bookingMeetingLink:`Meeting-Link`,bookingManageLink:`Buchung verwalten`,bookingCheckingDetails:`Ihr Meeting-Link wird abgerufen…`,bookingDetailsUnavailable:`Wir konnten die Buchungsdetails noch nicht bestätigen. Prüfen Sie es hier erneut; bitte buchen Sie dieselbe Zeit nicht doppelt.`,bookingUnverifiedLink:`Unbestätigten Kalendereintrag anzeigen`,bookingRetryDetails:`Erneut versuchen`,callConnectingWithAi:`Verbindung mit der KI…`,disclaimerDefault:`Dieser Chat kann zu Qualitäts- und Supportzwecken aufgezeichnet werden.`,actionContactSupportDescription:`Senden Sie Ihre Anfrage an das Support-Team.`,actionLeaveMessageDescription:`Senden Sie Ihre Frage und Ihre Kontaktdaten.`,actionBookDemoDescription:`Fordern Sie eine Demo beim Team an.`,actionRequestCallbackDescription:`Lassen Sie sich vom nächsten verfügbaren Vertriebsmitarbeiter anrufen.`,actionScheduleCallbackDescription:`Wählen Sie ein freies Datum und eine Uhrzeit für einen Anruf.`,actionSubscribeDescription:`Erhalten Sie Produktneuigkeiten.`,formContactSupportTitle:`Support kontaktieren`,formRequestSupport:`Support anfordern`,formLeaveMessageTitle:`Nachricht hinterlassen`,formSendMessage:`Nachricht senden`,formShareDetailsTitle:`Ihre Kontaktdaten`,formSave:`Speichern`,formBookDemoTitle:`Demo buchen`,formRequestDemo:`Demo anfragen`,formRequestCallbackTitle:`Rückruf anfordern`,formRequestCallback:`Rückruf anfordern`,formScheduleCallbackTitle:`Rückruf planen`,formScheduleCallback:`Rückruf planen`,formSubscribe:`Abonnieren`,fieldFullName:`Vollständiger Name`,fieldEmail:`E-Mail`,fieldSubject:`Betreff`,fieldMessage:`Nachricht`,fieldPhone:`Telefon`,fieldPhoneNumber:`Telefonnummer`,fieldPreferredTime:`Bevorzugte Zeit`,fieldNotes:`Notizen`,fieldTopic:`Thema`,placeholderSupportMessage:`Beschreiben Sie, wobei Sie Hilfe brauchen.`,placeholderInquiryMessage:`Wie können wir helfen?`,placeholderPreferredTime:`z. B. Donnerstag 15 Uhr`,placeholderNotes:`Sollten wir noch etwas wissen?`,placeholderTopic:`Worum soll es im Anruf gehen?`,phoneChooseCountry:`{country}, +{dial}. Land und Vorwahl wählen`,phoneSearchPlaceholder:`Land oder Vorwahl suchen`,phoneSearchLabel:`Länder suchen`,phoneCountries:`Länder`,phoneNoCountries:`Keine Länder gefunden`,handoffDefaultMessage:`Ich hatte eine Frage, die der Assistent nicht beantworten konnte.`,handoffAlerted:`Ihre Anfrage wurde für das Team gespeichert.`,gifAlt:`GIF`,toolResultAlt:`Werkzeugergebnis`,openResult:`Ergebnis öffnen`,microphoneNumbered:`Mikrofon {number}`,voiceDraftListening:`Hört zu...`,emojiSmileys:`Smileys`,emojiGestures:`Gesten`,emojiHearts:`Herzen & Symbole`,emojiAnimals:`Tiere & Natur`,emojiFood:`Essen & Trinken`,emojiObjects:`Objekte & Reisen`,actionCompleted:`Aktion abgeschlossen.`,copyResultData:`Ergebnisdaten`,copyRowsReturned:`{count} zurückgegeben`,copyRowsReturnedOf:`{count} von {total} zurückgegeben`,copyTruncated:`gekürzt`,copyTotals:`Summen`,previewReply:`👋 Dies ist eine Vorschau — die Antworten sind Beispiele. Veröffentlichen Sie das Widget auf Ihrer Website, um mit der Live-KI zu chatten.`,previewActionNote:`Vorschau — es wurde nichts gesendet. Nach der Veröffentlichung funktioniert es wirklich.`,previewBanner:`Vorschau — Beispielantworten, keine KI`};var n=t,r={widget:n,results:e};exports.default=r;