@object-ui/i18n 17.3.0 → 17.6.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 (44) hide show
  1. package/CHANGELOG.md +1929 -1
  2. package/README.md +41 -12
  3. package/dist/i18n.d.ts +1 -1
  4. package/dist/i18n.js +1 -2
  5. package/dist/index.d.ts +23 -21
  6. package/dist/index.js +31 -21
  7. package/dist/locales/ar.d.ts +638 -369
  8. package/dist/locales/ar.js +744 -424
  9. package/dist/locales/de.d.ts +638 -369
  10. package/dist/locales/de.js +759 -446
  11. package/dist/locales/en.d.ts +673 -404
  12. package/dist/locales/en.js +899 -406
  13. package/dist/locales/es.d.ts +638 -369
  14. package/dist/locales/es.js +739 -427
  15. package/dist/locales/fr.d.ts +638 -369
  16. package/dist/locales/fr.js +738 -423
  17. package/dist/locales/index.d.ts +6476 -3786
  18. package/dist/locales/index.js +20 -20
  19. package/dist/locales/ja.d.ts +638 -369
  20. package/dist/locales/ja.js +732 -417
  21. package/dist/locales/ko.d.ts +638 -369
  22. package/dist/locales/ko.js +736 -424
  23. package/dist/locales/pt.d.ts +638 -369
  24. package/dist/locales/pt.js +737 -425
  25. package/dist/locales/ru.d.ts +638 -369
  26. package/dist/locales/ru.js +750 -424
  27. package/dist/locales/zh.d.ts +672 -403
  28. package/dist/locales/zh.js +720 -403
  29. package/dist/pickLocalized.d.ts +58 -0
  30. package/dist/pickLocalized.js +115 -7
  31. package/dist/provider.d.ts +84 -2
  32. package/dist/provider.js +305 -31
  33. package/dist/useDisplayLocale.d.ts +49 -0
  34. package/dist/useDisplayLocale.js +55 -0
  35. package/dist/useObjectLabel.d.ts +94 -14
  36. package/dist/useObjectLabel.js +134 -21
  37. package/dist/useSafeTranslation.js +51 -3
  38. package/dist/utils/index.d.ts +4 -3
  39. package/dist/utils/index.js +4 -3
  40. package/dist/utils/number-display.d.ts +32 -0
  41. package/dist/utils/number-display.js +32 -0
  42. package/dist/utils/spec-formatters.d.ts +39 -13
  43. package/dist/utils/spec-formatters.js +3 -3
  44. package/package.json +4 -3
@@ -1,4 +1,18 @@
1
1
  const ar = {
2
+ // objectui#4467 — the impersonation banner (app-shell ImpersonationBanner).
3
+ // Raised by `session.impersonatedBy`, so it survives SPA reboots; it names
4
+ // BOTH parties because the audit trail attributes the work to the impersonated
5
+ // user, and the exit states its own failure rather than appearing to succeed.
6
+ impersonation: {
7
+ banner: {
8
+ message: 'أنت تنتحل هوية {{user}} — يُسجَّل كل إجراء باسمه.',
9
+ startedBy: 'بدأها المسؤول {{admin}}.',
10
+ stop: 'إنهاء انتحال الهوية',
11
+ stopping: 'جارٍ الإنهاء…',
12
+ stopFailed: 'تعذّر إنهاء انتحال الهوية: {{reason}}',
13
+ notRestored: 'قبل الخادم الطلب لكنه لم يستعد جلسة المسؤول — ما زلت تنتحل هوية {{user}}. سجّل الخروج ثم الدخول مرة أخرى لإنهائها.',
14
+ },
15
+ },
2
16
  // objectui#2600 B5 — capability picker scope group headers (labels come from the sys_capability registry).
3
17
  capability: {
4
18
  label: {
@@ -16,6 +30,30 @@ const ar = {
16
30
  other: 'أخرى',
17
31
  },
18
32
  },
33
+ // objectui#3546 slice six — ملخص للقراءة فقط لأوجه التخويل الستة في
34
+ // PermissionFacetLink، مع رابط التصميم في Studio.
35
+ //
36
+ // صيغة العدد تتبع نمط الحزمة نفسه: «{{count}} مفرد(جمع)» كما في
37
+ // appDesigner.objectManager.fieldCount و table.modified. المفتاح الأساسي هو
38
+ // ما تلجأ إليه فئات two/few/many/zero غير المعرّفة، فيظل النص عربيًا.
39
+ // لا نعكس سهم روابط الإجراء: يبقى كما في en، مثل marketplace.browseLink.
40
+ perm: {
41
+ facet: {
42
+ none: "لا شيء",
43
+ more: "+{{count}} المزيد",
44
+ objects: "{{count}} كائن(كائنات)",
45
+ objects_one: "{{count}} كائن",
46
+ fields: "{{count}} قاعدة(قواعد) حقول",
47
+ fields_one: "{{count}} قاعدة حقول",
48
+ rls: "{{count}} سياسة(سياسات) RLS",
49
+ rls_one: "{{count}} سياسة RLS",
50
+ tabs: "{{count}} قاعدة(قواعد) تبويب",
51
+ tabs_one: "{{count}} قاعدة تبويب",
52
+ adminScope: "تم تكوين الإدارة المفوَّضة",
53
+ designInStudio: "التصميم في Studio →",
54
+ designInStudioHint: "التصميم في Studio",
55
+ },
56
+ },
19
57
  lookup: {
20
58
  recentlyUsed: 'المستخدمة مؤخرًا',
21
59
  allResults: 'كل النتائج',
@@ -46,13 +84,13 @@ const ar = {
46
84
  common: {
47
85
  addToFavorites: "إضافة إلى المفضلة",
48
86
  removeFromFavorites: "إزالة من المفضلة",
49
- loading: "جاري التحميل...",
87
+ loading: "جاري التحميل…",
50
88
  save: "حفظ",
89
+ discard: "تجاهل",
51
90
  cancel: "إلغاء",
52
91
  delete: "حذف",
53
92
  edit: "تعديل",
54
93
  create: "إنشاء",
55
- search: "بحث",
56
94
  filter: "تصفية",
57
95
  reset: "إعادة تعيين",
58
96
  confirm: "تأكيد",
@@ -76,7 +114,7 @@ const ar = {
76
114
  required: "مطلوب",
77
115
  optional: "اختياري",
78
116
  selectOption: "اختر خياراً",
79
- select: "اختر...",
117
+ select: "اختر…",
80
118
  openChat: "فتح المحادثة",
81
119
  closeChat: "إغلاق المحادثة",
82
120
  closePanel: "إغلاق اللوحة",
@@ -85,6 +123,11 @@ const ar = {
85
123
  itemCountOne: "{{count}} عنصر",
86
124
  toggleSidebar: "تبديل الشريط الجانبي",
87
125
  package: "الحزمة",
126
+ done: "تم",
127
+ editInStudio: "التعديل في Studio",
128
+ record: "سجل",
129
+ retry: "إعادة المحاولة",
130
+ printDialogHint: "يفتح مربع حوار الطباعة في المتصفح (ليس تصديرًا إلى PDF)",
88
131
  },
89
132
  actions: {
90
133
  decisionOutput: {
@@ -116,6 +159,9 @@ const ar = {
116
159
  submitFailed: "تعذّر الحفظ. يرجى المحاولة مرة أخرى.",
117
160
  discardTitle: "تجاهل التغييرات؟",
118
161
  discardMessage: "لديك تغييرات غير محفوظة. إذا أغلقت هذا النموذج الآن، ستفقد تعديلاتك.",
162
+ // objectui#4024 — the create/edit dialog's `sr-only` accessible
163
+ // description, used when the form declares no `description` of its own.
164
+ dialogDescriptionFallback: "املأ حقول النموذج ثم أرسل أو ألغِ.",
119
165
  keepEditing: "متابعة التحرير",
120
166
  discard: "تجاهل",
121
167
  conflictTitle: "تعارض في الحفظ",
@@ -184,7 +230,7 @@ const ar = {
184
230
  richText: {
185
231
  format: "التنسيق: {{format}}",
186
232
  basicEditorHint: "محرر النص الغني (أساسي)",
187
- placeholder: "اكتب شيئاً...",
233
+ placeholder: "اكتب شيئاً…",
188
234
  },
189
235
  options: {
190
236
  empty: "لا توجد خيارات متاحة",
@@ -220,6 +266,14 @@ const ar = {
220
266
  tags: {
221
267
  placeholder: "اكتب واضغط Enter للإضافة…",
222
268
  },
269
+ // objectui#4028 — `AddressField`'s five sub-labels.
270
+ address: {
271
+ street: "عنوان الشارع",
272
+ city: "المدينة",
273
+ state: "الولاية / المحافظة",
274
+ postalCode: "الرمز البريدي",
275
+ country: "الدولة",
276
+ },
223
277
  textarea: {
224
278
  characterCount: "عدد الأحرف: {{count}} من {{max}}",
225
279
  charactersRemaining: "الأحرف المتبقية: {{count}}",
@@ -250,7 +304,7 @@ const ar = {
250
304
  saveAll: "حفظ الكل ({{count}})",
251
305
  addRecord: "إضافة سجل",
252
306
  open: "فتح",
253
- search: "بحث...",
307
+ search: "بحث…",
254
308
  modified: "{{count}} صف(صفوف) معدّل(ة)",
255
309
  saveFailed: 'فشل الحفظ',
256
310
  selected: "{{count}} محدد(ة)",
@@ -294,7 +348,7 @@ const ar = {
294
348
  delete: "حذف",
295
349
  export: "تصدير",
296
350
  exportAs: "تصدير كـ {{format}}",
297
- loading: "جاري تحميل الشبكة...",
351
+ loading: "جاري تحميل الشبكة…",
298
352
  errorLoading: "خطأ في تحميل الشبكة",
299
353
  pullToRefresh: "اسحب للتحديث",
300
354
  refreshing: "جاري التحديث…",
@@ -305,6 +359,22 @@ const ar = {
305
359
  yes: "نعم",
306
360
  no: "لا",
307
361
  systemFields: "النظام",
362
+ // objectui#4024 — column-footer aggregate prefixes, keyed by the spec's
363
+ // `ColumnSummary` vocabulary. `pattern` owns the label/value join so this
364
+ // pack controls its own separator and word order.
365
+ summary: {
366
+ pattern: "{{label}}: {{value}}",
367
+ count: "العدد",
368
+ countEmpty: "فارغة",
369
+ countFilled: "ممتلئة",
370
+ countUnique: "فريدة",
371
+ percentEmpty: "فارغة",
372
+ percentFilled: "ممتلئة",
373
+ sum: "المجموع",
374
+ avg: "المتوسط",
375
+ min: "الأدنى",
376
+ max: "الأعلى",
377
+ },
308
378
  toolbar: {
309
379
  densityMode: "الكثافة",
310
380
  densityCompact: "مضغوط",
@@ -418,12 +488,12 @@ const ar = {
418
488
  templateName: "اسم القالب",
419
489
  save: "حفظ",
420
490
  deleteTemplate: "حذف القالب",
421
- savedMapping: 'Saved mapping:',
422
- chooseSavedMapping: 'Choose a saved mapping…',
423
- manualMapping: '— Map columns manually —',
424
- transform: 'Transform',
425
- savedMappingHint: 'Mapping “{{name}}” applies rename + transforms + type coercion on the server. Column mapping is read-only.',
426
- savedMappingPreviewNote: 'The preview shows your source columns; on import, mapping “{{name}}” applies rename, transforms and type coercion on the server.',
491
+ savedMapping: 'التعيين المحفوظ:',
492
+ chooseSavedMapping: 'اختر تعييناً محفوظاً…',
493
+ manualMapping: '— تعيين الأعمدة يدويًا —',
494
+ transform: 'التحويل',
495
+ savedMappingHint: 'يطبّق التعيين "{{name}}" إعادة التسمية + التحويلات + تحويل الأنواع على الخادم. تعيين الأعمدة للقراءة فقط.',
496
+ savedMappingPreviewNote: 'تعرض المعاينة الأعمدة المصدر لديك؛ وعند الاستيراد يطبّق التعيين "{{name}}" إعادة التسمية والتحويلات وتحويل الأنواع على الخادم.',
427
497
  csvColumn: "العمود",
428
498
  mapsTo: "يُعيَّن إلى",
429
499
  typeMismatch: "يبدو أنه {{type}}",
@@ -483,6 +553,8 @@ const ar = {
483
553
  loadErrorUnauthorizedMessage: "انتهت صلاحية جلستك أو تم تسجيل خروجك. سجّل الدخول مرة أخرى لعرض هذه السجلات.",
484
554
  loadErrorRejectedTitle: "تم رفض استعلام طريقة العرض هذه",
485
555
  loadErrorRejectedMessage: "تعذّر على الخادم معالجة عامل التصفية أو خيارات الاستعلام لطريقة العرض هذه. مسح عوامل التصفية يحل المشكلة عادةً؛ وإذا كانت طريقة العرض محفوظة بهذا الشكل، فيجب على المسؤول تصحيحها.",
556
+ loadErrorApiDisabledTitle: "هذا الكائن غير متاح عبر واجهة API",
557
+ loadErrorApiDisabledMessage: "لا يمكن لهذه الصفحة تحميل سجلاتها لأن الكائن غير معروض عبر واجهة API. هذا إعداد خاص بالكائن نفسه وليس صلاحية — يجب على المسؤول تفعيل الوصول عبر API حتى تعمل هذه الصفحة.",
486
558
  retry: "إعادة المحاولة",
487
559
  managedBy: {
488
560
  system: {
@@ -507,7 +579,7 @@ const ar = {
507
579
  },
508
580
  },
509
581
  refresh: "تحديث",
510
- loading: 'Loading records...',
582
+ loading: "جارٍ تحميل السجلات…",
511
583
  recordCount: "{{count}} سجلات",
512
584
  recordCountOne: "{{count}} سجل",
513
585
  addRecord: "إضافة سجل",
@@ -519,7 +591,8 @@ const ar = {
519
591
  sort: "ترتيب",
520
592
  sortRecords: "ترتيب السجلات",
521
593
  sortByIdSuffix: "(حسب المعرّف)",
522
- sortRelationalHint: "الأعمدة التي تشير إلى سجل آخر غير مدرجة هنا: يمكن ترتيبها حسب المعرّف المخزَّن فقط، وليس حسب الاسم الظاهر في الخلية. للترتيب حسب ذلك الاسم، أضف حقل صيغة يحتوي عليه.",
594
+ sortRelationalHint: "الأعمدة التي تشير إلى سجل آخر غير مدرجة هنا: يمكن ترتيبها حسب المعرّف المخزَّن فقط، وليس حسب الاسم الظاهر في الخلية. للترتيب حسب ذلك الاسم، أضِف الاسم إلى هذا الكائن نفسه (إلغاء التطبيع) كحقل مخزَّن يُكتب عند تغيّر المصدر، ثم رتّب حسبه. وليس حقل صيغة: فهو افتراضي، ولا يُخزَّن له أي عمود، ويرفض الخادم الترتيب حسبه.",
595
+ resetSortToDefault: "إعادة التعيين إلى الترتيب الافتراضي للعرض",
523
596
  group: "تجميع",
524
597
  groupBy: "تجميع حسب",
525
598
  export: "تصدير",
@@ -577,13 +650,16 @@ const ar = {
577
650
  },
578
651
  kanban: {
579
652
  uncategorized: "غير مصنّف",
653
+ columns: "أعمدة",
580
654
  addCard: "إضافة بطاقة",
581
655
  addColumn: "إضافة عمود",
582
656
  moveCard: "نقل بطاقة",
583
657
  deleteCard: "حذف بطاقة",
584
658
  deleteColumn: "حذف عمود",
585
659
  noCards: "لا بطاقات",
586
- cardTitlePlaceholder: "أدخل عنوان البطاقة...",
660
+ cardTitlePlaceholder: "أدخل عنوان البطاقة…",
661
+ requiredFieldsTitle: "أكمل الحقول المطلوبة",
662
+ requiredFieldsDescription: "يجعل هذا النقل الحقول أدناه مطلوبة. أكملها للمتابعة.",
587
663
  },
588
664
  timeline: {
589
665
  bucket: {
@@ -596,6 +672,13 @@ const ar = {
596
672
  noDate: "بدون تاريخ",
597
673
  unassigned: "غير معين",
598
674
  },
675
+ scale: {
676
+ week: "الأسبوع {{n}}",
677
+ quarter: "الربع {{quarter}} {{year}}",
678
+ },
679
+ gantt: {
680
+ rowLabel: "العناصر",
681
+ },
599
682
  },
600
683
  gantt: {
601
684
  viewMode: {
@@ -642,6 +725,18 @@ const ar = {
642
725
  ff: "نهاية → نهاية",
643
726
  sf: "بداية → نهاية",
644
727
  },
728
+ linkEnd: {
729
+ start: "بداية",
730
+ end: "نهاية",
731
+ },
732
+ link: {
733
+ rejected: {
734
+ self: "لا يمكن أن تعتمد المهمة على نفسها.",
735
+ locked: "هذا الصف مقفل ولا يمكنه استقبال تبعية جديدة.",
736
+ group: "لا يمكن لصف التلخيص استقبال تبعية — اربط إحدى مهامه بدلاً من ذلك.",
737
+ cycle: "هذا الرابط سينشئ تبعية دائرية.",
738
+ },
739
+ },
645
740
  conflict: {
646
741
  title: "تعارض في الجدولة",
647
742
  body: "يتعارض هذا النقل مع قيود التبعية. هل تريد إعادة جدولة {{count}} من المهام المتأثرة تلقائيًا؟",
@@ -650,8 +745,8 @@ const ar = {
650
745
  },
651
746
  autoScheduleDlg: {
652
747
  title: "الجدولة التلقائية",
653
- body: "هل تريد تأخير {count} من المهام لتلبية روابط التبعية؟",
654
- skipped: "{count} من المهام المقفلة تخالف الروابط أيضًا وقد تم تخطيها.",
748
+ body: "هل تريد تأخير {{count}} من المهام لتلبية روابط التبعية؟",
749
+ skipped: "{{count}} من المهام المقفلة تخالف الروابط أيضًا وقد تم تخطيها.",
655
750
  confirm: "تطبيق",
656
751
  cancel: "إلغاء",
657
752
  none: "جميع التبعيات مستوفاة — لا شيء لإعادة جدولته.",
@@ -688,6 +783,7 @@ const ar = {
688
783
  exportPng: "تصدير بصيغة PNG",
689
784
  exportPdf: "تصدير PDF",
690
785
  saveLayout: "حفظ التخطيط",
786
+ refresh: "تحديث",
691
787
  undo: "تراجع",
692
788
  redo: "إعادة",
693
789
  prevPeriod: "الفترة السابقة",
@@ -728,11 +824,11 @@ const ar = {
728
824
  defaultBadge: "افتراضي",
729
825
  tabActionsFor: "إجراءات العرض لـ {{name}}",
730
826
  readonlyAriaLabel: "عرض للقراءة فقط",
731
- readonlyTooltip: "عرض النظام — انسخ للتخصيص.",
827
+ readonlyTooltip: "عرض النظام — معرَّف في الكود، للقراءة فقط.",
732
828
  },
733
829
  designer: {
734
- undo: 'Undo',
735
- redo: 'Redo',
830
+ undo: "تراجع",
831
+ redo: "إعادة",
736
832
  },
737
833
  detail: {
738
834
  editInlineHint: "انقر نقرًا مزدوجًا للتحرير",
@@ -774,13 +870,15 @@ const ar = {
774
870
  relatedRecords: "{{count}} سجلات",
775
871
  relatedRecordOne: "{{count}} سجل",
776
872
  noRelatedRecords: "لا توجد سجلات ذات صلة",
777
- loading: "جاري التحميل...",
873
+ loading: "جاري التحميل…",
778
874
  copyToClipboard: "نسخ إلى الحافظة",
779
875
  copied: "تم النسخ!",
780
876
  deleteConfirmation: "هل أنت متأكد أنك تريد حذف هذا السجل؟",
877
+ deleted: "تم حذف السجل",
781
878
  editRecord: "تحرير السجل",
782
879
  viewAll: "عرض الكل",
783
880
  new: "جديد",
881
+ add: "إضافة",
784
882
  emptyValue: "—",
785
883
  comments: "التعليقات",
786
884
  searchComments: "البحث في التعليقات…",
@@ -810,6 +908,10 @@ const ar = {
810
908
  attachmentDownloadDenied: "ليس لديك صلاحية تنزيل هذا المرفق.",
811
909
  attachmentAuthRequired: "يرجى تسجيل الدخول لتنزيل هذا المرفق.",
812
910
  attachmentPermissionDenied: "ليس لديك إذن للقيام بذلك.",
911
+ attachmentsAccessDenied: "ليس لديك حق الوصول إلى هذه المرفقات.",
912
+ attachmentsLoadFailed: "تعذر تحميل مرفقات هذا السجل.",
913
+ attachmentsApiUnavailable: "قائمة المرفقات غير متاحة على هذا الكائن.",
914
+ retryLoadAttachments: "إعادة المحاولة",
813
915
  unifiedDiff: "عرض موحد",
814
916
  sideBySideDiff: "عرض جنباً إلى جنب",
815
917
  noChanges: "لا توجد تغييرات",
@@ -845,6 +947,7 @@ const ar = {
845
947
  loadMore: "تحميل المزيد",
846
948
  edited: "(معدل)",
847
949
  via: "عبر {{source}}",
950
+ viewSource: "عرض المصدر",
848
951
  replyCount: "{{count}} رد",
849
952
  replyCountPlural: "{{count}} ردود",
850
953
  replyPlaceholder: "رد…",
@@ -860,6 +963,8 @@ const ar = {
860
963
  writeStrippedTitle: "تم الحفظ، لكن بعض الحقول لم تُطبَّق",
861
964
  writeStrippedReadonly: "للقراءة فقط، لذلك لم تُطبَّق: {{fields}}",
862
965
  writeStrippedByState: "غير قابلة للتعديل في الحالة الحالية لهذا السجل، لذلك لم تُطبَّق: {{fields}}",
966
+ writeStrippedPrimaryKey: "معرّف السجل لا يمكن تغييره عند الحفظ، لذلك لم تُطبَّق: {{fields}}",
967
+ writeStrippedUnknownReason: "لم تُطبَّق من قِبل الخادم: {{fields}}",
863
968
  approvalPendingEditable: "قيد الموافقة · قابل للتعديل",
864
969
  approvalPendingTooltip: "يحتوي هذا السجل على طلب موافقة معلق، لكن هذه الخطوة لا تزال تسمح بالتعديل",
865
970
  approvalProgress: "الموافقات — {{got}} من {{need}}",
@@ -872,6 +977,13 @@ const ar = {
872
977
  cancelApprovalTooltipUnlocked: "إلغاء طلب الموافقة المعلق",
873
978
  cancelApprovalFailed: "فشل إلغاء الموافقة",
874
979
  cancelApprovalUnavailable: "إلغاء الموافقات غير مدعوم من مصدر البيانات هذا",
980
+ pathLabel: 'مسار السجل',
981
+ pathStageCompleted: '{{stage}}، مكتملة',
982
+ pathStageCurrent: '{{stage}}، المرحلة الحالية',
983
+ pathStageUpcoming: '{{stage}}، قادمة',
984
+ pathStageLostCurrent: '{{stage}}، خاسرة، المرحلة الحالية',
985
+ pathStageLostUpcoming: '{{stage}}، خاسرة، لم يتم الوصول إليها',
986
+ pathStageWonUpcoming: '{{stage}}، المرحلة الهدف، لم يتم الوصول إليها',
875
987
  linkCopied: "تم نسخ الرابط إلى الحافظة",
876
988
  linkCopyFailed: "فشل نسخ الرابط",
877
989
  cancel: "إلغاء",
@@ -886,9 +998,11 @@ const ar = {
886
998
  concurrentUpdateReload: "تحميل النسخة الحالية",
887
999
  concurrentUpdateOverwrite: "الكتابة فوقه على أي حال",
888
1000
  concurrentUpdateCancel: "إلغاء",
1001
+ concurrentUpdateRecordLabel: "هذا السجل",
889
1002
  openInNewTab: "فتح في علامة تبويب جديدة",
890
1003
  activity: "النشاط",
891
1004
  history: "السجل",
1005
+ historyEmpty: "لا يوجد سجل بعد",
892
1006
  editRow: "تعديل",
893
1007
  deleteRow: "حذف",
894
1008
  deleteRowConfirmation: "حذف هذا السجل؟",
@@ -898,10 +1012,16 @@ const ar = {
898
1012
  nextPage: "التالي",
899
1013
  pageOf: "صفحة {{current}} من {{total}}",
900
1014
  sortBy: "ترتيب حسب",
901
- filterPlaceholder: "تصفية...",
1015
+ filterPlaceholder: "تصفية…",
902
1016
  highlightFields: "الحقول الرئيسية",
903
1017
  createdBy: "أنشأه",
904
1018
  updatedBy: "حدّثه",
1019
+ // objectui#3863 — base key, and in ar this is the slot users actually hit: `zero`,
1020
+ // `two` (2), `few` (3-10) and `many` (11-99) are unenumerated, so before this key
1021
+ // those counts rendered ENGLISH. It uses the «{{count}} مفرد(جمع)» marker this
1022
+ // pack writes throughout (perm.facet.objects, and the sibling toggle
1023
+ // showEmptyFields below), which reads correctly for every count.
1024
+ showEmptyRelated: "+ {{count}} فارغ(فارغة)",
905
1025
  showEmptyRelated_one: "+ {{count}} فارغ",
906
1026
  showEmptyRelated_other: "+ {{count}} فارغة",
907
1027
  copyEmail: "نسخ البريد الإلكتروني",
@@ -913,7 +1033,8 @@ const ar = {
913
1033
  },
914
1034
  chart: {
915
1035
  noData: "لا تتوفر بيانات للرسم البياني",
916
- loading: "جاري تحميل الرسم البياني...",
1036
+ loading: "جاري تحميل الرسم البياني…",
1037
+ nullCategory: "(غير محدد)",
917
1038
  },
918
1039
  map: {
919
1040
  searchLocations: "البحث عن المواقع…",
@@ -922,68 +1043,9 @@ const ar = {
922
1043
  invalidCoordinates: "{{count}} سجل بإحداثيات مفقودة أو غير صالحة مستبعد من الخريطة.",
923
1044
  invalidCoordinatesPlural: "{{count}} سجلات بإحداثيات مفقودة أو غير صالحة مستبعدة من الخريطة.",
924
1045
  },
925
- workflow: {
926
- draft: "مسودة",
927
- active: "نشط",
928
- paused: "متوقف مؤقتاً",
929
- completed: "مكتمل",
930
- cancelled: "ملغي",
931
- save: "حفظ",
932
- publish: "نشر",
933
- addNode: "إضافة عقدة",
934
- workflowFlow: "سير العمل",
935
- properties: "الخصائص",
936
- connections: "الاتصالات",
937
- quickConnect: "اتصال سريع",
938
- fromPlaceholder: "من...",
939
- toPlaceholder: "إلى...",
940
- connect: "ربط",
941
- label: "التسمية",
942
- type: "النوع",
943
- description: "الوصف",
944
- assignee: "المسؤول",
945
- assigneeType: "نوع المسؤول",
946
- user: "مستخدم",
947
- role: "دور",
948
- group: "مجموعة",
949
- expression: "تعبير",
950
- timeoutMinutes: "المهلة (دقائق)",
951
- selectNodeToEdit: "حدد عقدة لتعديل خصائصها",
952
- workflowTitle: "عنوان سير العمل",
953
- newWorkflow: "سير عمل جديد",
954
- outConnections: "{{count}} مخرج",
955
- start: "بداية",
956
- end: "نهاية",
957
- task: "مهمة",
958
- userTask: "مهمة مستخدم",
959
- serviceTask: "مهمة خدمة",
960
- scriptTask: "مهمة نصية",
961
- approval: "موافقة",
962
- condition: "شرط",
963
- parallelGateway: "بوابة متوازية",
964
- joinGateway: "بوابة دمج",
965
- boundaryEvent: "حدث حدودي",
966
- delay: "تأخير",
967
- notification: "إشعار",
968
- webhook: "Webhook",
969
- allowConcurrency: "السماح (تنفيذ متزامن)",
970
- forbidConcurrency: "منع (تخطي الجديد)",
971
- replaceConcurrency: "استبدال (إلغاء الحالي)",
972
- queueConcurrency: "طابور (تنفيذ بعد الحالي)",
973
- conditionEvent: "شرط",
974
- manualEvent: "يدوي",
975
- webhookEvent: "Webhook",
976
- timerEvent: "مؤقت",
977
- signalEvent: "إشارة",
978
- versionHistory: "تاريخ الإصدارات",
979
- importBpmn: "استيراد BPMN",
980
- exportBpmn: "تصدير BPMN",
981
- undo: "تراجع",
982
- redo: "إعادة",
983
- resetZoom: "إعادة تعيين التكبير",
984
- },
985
1046
  dashboard: {
986
1047
  noRows: "لا توجد صفوف",
1048
+ loading: "جارٍ التحميل…",
987
1049
  pickMeasures: "اختر المقاييس (القيم) لأداة مجموعة البيانات هذه.",
988
1050
  datasetUnsupported: "مصدر البيانات هذا لا يدعم استعلامات مجموعات البيانات.",
989
1051
  details: "التفاصيل",
@@ -1020,6 +1082,105 @@ const ar = {
1020
1082
  total: "الإجمالي",
1021
1083
  noDataAvailable: "لا بيانات متاحة",
1022
1084
  noDataSourceFor: "لا مصدر بيانات لـ",
1085
+ config: {
1086
+ breadcrumb: {
1087
+ dashboard: "لوحة القيادة",
1088
+ configuration: "الإعداد",
1089
+ widget: "عنصر",
1090
+ chart: "مخطط",
1091
+ table: "جدول",
1092
+ pivotTable: "جدول محوري",
1093
+ },
1094
+ section: {
1095
+ general: "عام",
1096
+ layout: "التخطيط",
1097
+ data: "البيانات",
1098
+ dataBinding: "ربط البيانات",
1099
+ appearance: "المظهر",
1100
+ },
1101
+ field: {
1102
+ title: "العنوان",
1103
+ description: "الوصف",
1104
+ columns: "الأعمدة",
1105
+ gap: "المسافة",
1106
+ rowHeight: "ارتفاع الصف (بكسل)",
1107
+ autoRefresh: "تحديث تلقائي",
1108
+ showDescription: "إظهار الوصف",
1109
+ theme: "السمة",
1110
+ widgetType: "نوع العنصر",
1111
+ colorVariant: "متغير اللون",
1112
+ dataset: "مجموعة البيانات",
1113
+ dimensions: "الأبعاد",
1114
+ values: "القيم",
1115
+ width: "العرض (أعمدة)",
1116
+ height: "الارتفاع (صفوف)",
1117
+ },
1118
+ placeholder: {
1119
+ dashboardTitle: "عنوان لوحة القيادة",
1120
+ dashboardDescription: "ملخص قصير يظهر أسفل العنوان",
1121
+ widgetTitle: "عنوان العنصر",
1122
+ widgetDescription: "وصف العنصر",
1123
+ datasetName: "اسم مجموعة البيانات",
1124
+ selectDataset: "اختر مجموعة بيانات…",
1125
+ searchDatasets: "البحث في مجموعات البيانات…",
1126
+ addDimension: "إضافة بُعد…",
1127
+ addMeasure: "إضافة مقياس…",
1128
+ searchMembers: "بحث…",
1129
+ },
1130
+ empty: {
1131
+ datasets: "لم يتم العثور على مجموعات بيانات.",
1132
+ dimensions: "لم يتم اختيار أبعاد.",
1133
+ measures: "لم يتم اختيار مقاييس.",
1134
+ nothingToAdd: "لا يوجد المزيد للإضافة.",
1135
+ },
1136
+ help: {
1137
+ dataset: "مجموعة بيانات الطبقة الدلالية التي يرتبط بها هذا العنصر (ADR-0021).",
1138
+ dimensions: "تجميع/تقسيم القيم حسب أبعاد مجموعة البيانات هذه.",
1139
+ dimensionsPivot: "حقول التجميع/التقسيم. يمتد البُعد الأخير أفقيًا كأعمدة.",
1140
+ values: "المقاييس المراد عرضها من مجموعة البيانات (واحد على الأقل).",
1141
+ },
1142
+ action: {
1143
+ add: "إضافة",
1144
+ remove: "إزالة {{name}}",
1145
+ },
1146
+ refresh: {
1147
+ off: "إيقاف",
1148
+ every30s: "كل 30 ثانية",
1149
+ every1m: "كل دقيقة",
1150
+ every5m: "كل 5 دقائق",
1151
+ every15m: "كل 15 دقيقة",
1152
+ every30m: "كل 30 دقيقة",
1153
+ every1h: "كل ساعة",
1154
+ },
1155
+ themeOption: {
1156
+ light: "فاتح",
1157
+ dark: "داكن",
1158
+ auto: "تلقائي",
1159
+ },
1160
+ widgetType: {
1161
+ metric: "مقياس",
1162
+ bar: "مخطط شريطي",
1163
+ horizontalBar: "شريطي أفقي",
1164
+ line: "مخطط خطي",
1165
+ pie: "مخطط دائري",
1166
+ donut: "مخطط حلقي",
1167
+ area: "مخطط مساحة",
1168
+ scatter: "مخطط نقطي",
1169
+ funnel: "قمع",
1170
+ table: "جدول",
1171
+ pivot: "جدول محوري",
1172
+ },
1173
+ color: {
1174
+ default: "افتراضي",
1175
+ blue: "أزرق",
1176
+ teal: "أزرق مخضر",
1177
+ orange: "برتقالي",
1178
+ purple: "بنفسجي",
1179
+ success: "نجاح",
1180
+ warning: "تحذير",
1181
+ danger: "خطر",
1182
+ },
1183
+ },
1023
1184
  trend: {
1024
1185
  vsLastQuarter: "مقابل الربع الماضي",
1025
1186
  vsLastMonth: "مقابل الشهر الماضي",
@@ -1029,24 +1190,6 @@ const ar = {
1029
1190
  vsPreviousPeriod: "مقابل الفترة السابقة",
1030
1191
  },
1031
1192
  },
1032
- configPanel: {
1033
- save: "حفظ",
1034
- discard: "تجاهل",
1035
- close: "إغلاق",
1036
- layout: "التخطيط",
1037
- columns: "الأعمدة",
1038
- gap: "المسافة",
1039
- rowHeight: "ارتفاع الصف",
1040
- data: "البيانات",
1041
- refreshInterval: "فترة التحديث",
1042
- appearance: "المظهر",
1043
- title: "العنوان",
1044
- showDescription: "إظهار الوصف",
1045
- theme: "السمة",
1046
- configuration: "الإعداد",
1047
- general: "عام",
1048
- advanced: "متقدم",
1049
- },
1050
1193
  appDesigner: {
1051
1194
  createApp: "إنشاء تطبيق",
1052
1195
  editApp: "تعديل التطبيق",
@@ -1077,7 +1220,7 @@ const ar = {
1077
1220
  faviconUrl: "Favicon URL",
1078
1221
  preview: "معاينة",
1079
1222
  complete: "إكمال",
1080
- snakeCaseHint: "Must be snake_case (e.g. my_app)",
1223
+ snakeCaseHint: "يجب أن يكون بصيغة snake_case (مثل my_app)",
1081
1224
  modeEdit: "تعديل",
1082
1225
  modePreview: "معاينة",
1083
1226
  modeCode: "كود",
@@ -1097,8 +1240,6 @@ const ar = {
1097
1240
  showSort: "إظهار الترتيب",
1098
1241
  appearance: "المظهر",
1099
1242
  rowHeight: "ارتفاع الصف",
1100
- stripedRows: "صفوف متناوبة",
1101
- bordered: "محاط بإطار",
1102
1243
  livePreview: "معاينة مباشرة",
1103
1244
  stepBasicDesc: "الاسم والعنوان والتخطيط",
1104
1245
  stepObjectsDesc: "اختيار كائنات الأعمال",
@@ -1212,7 +1353,6 @@ const ar = {
1212
1353
  unique: "فريد",
1213
1354
  readOnly: "للقراءة فقط",
1214
1355
  hidden: "مخفي",
1215
- indexed: "مفهرس",
1216
1356
  externalId: "معرف خارجي",
1217
1357
  trackHistory: "تتبع السجل",
1218
1358
  defaultValue: "القيمة الافتراضية",
@@ -1241,6 +1381,7 @@ const ar = {
1241
1381
  },
1242
1382
  },
1243
1383
  console: {
1384
+ saveAdvisoryTitle: "تم الحفظ — أنتج فحص التأليف {{count}} ملاحظة إرشادية",
1244
1385
  settingsHub: {
1245
1386
  title: "الإعدادات",
1246
1387
  subtitle: "اضبط مساحة العمل والتكاملات وأعلام الميزات.",
@@ -1285,6 +1426,13 @@ const ar = {
1285
1426
  passwordsDownload: "تنزيل ملف CSV",
1286
1427
  },
1287
1428
  ai: {
1429
+ pendingDrafts: {
1430
+ count: "هناك {{count}} من التغييرات لم تُنشر بعد — لا يمكن للمستخدمين رؤيتها.",
1431
+ publish: "نشر",
1432
+ published: "جميع التغييرات المعلّقة فعّالة الآن.",
1433
+ failed: "فشل النشر.",
1434
+ publishedWithFindings: "تم النشر، لكن مجسّات وقت التشغيل أبلغت عن مشكلات: {{detail}}",
1435
+ },
1288
1436
  usage: {
1289
1437
  title: "استخدام الذكاء الاصطناعي",
1290
1438
  meterBuild: "الإنشاء",
@@ -1307,7 +1455,7 @@ const ar = {
1307
1455
  shareTitle: "مشاركة هذه المحادثة",
1308
1456
  shareDisabledTitle: "ابدأ المحادثة لتفعيل المشاركة",
1309
1457
  newChat: "جديدة",
1310
- searchChats: "البحث في المحادثات...",
1458
+ searchChats: "البحث في المحادثات…",
1311
1459
  noChatsYet: "لا توجد محادثات بعد",
1312
1460
  noChatsDescription: "ابدأ محادثة جديدة لتظهر هنا.",
1313
1461
  noMatchingChats: "لا توجد محادثات مطابقة.",
@@ -1316,18 +1464,18 @@ const ar = {
1316
1464
  deleteConversation: "حذف المحادثة",
1317
1465
  saveRename: "حفظ الاسم",
1318
1466
  cancelRename: "إلغاء إعادة التسمية",
1319
- loadingHistory: "جارٍ تحميل سجل المحادثة...",
1467
+ loadingHistory: "جارٍ تحميل سجل المحادثة…",
1320
1468
  conversationReady: "المحادثة جاهزة",
1321
1469
  preparingConversation: "جارٍ تجهيز محادثة جديدة",
1322
1470
  offlineDemoMode: "وضع العرض دون اتصال — قائمة الوكلاء غير متاحة",
1323
1471
  sendFailedRateLimited: "أنت ترسل الرسائل بسرعة كبيرة. رسالتك محفوظة بالأسفل — انتظر لحظة ثم أعد المحاولة.",
1324
1472
  sendFailedGeneric: "تعذّر إرسال رسالتك. وهي محفوظة بالأسفل — يرجى إعادة المحاولة.",
1325
- askAgent: "اسأل {{agent}}...",
1473
+ askAgent: "اسأل {{agent}}…",
1326
1474
  assistant: "المساعد",
1327
1475
  liveCanvas: "معاينة حية — {{app}} (مسودة)",
1328
1476
  liveCanvasUnlisted: "تطبيق حي — {{app}} (غير مُدرج حتى النشر)",
1329
- loadingAgents: "جارٍ تحميل الوكلاء...",
1330
- askAnything: "اسأل عن أي شيء...",
1477
+ loadingAgents: "جارٍ تحميل الوكلاء…",
1478
+ askAnything: "اسأل عن أي شيء…",
1331
1479
  emptyTitle: "ابدأ محادثة",
1332
1480
  emptyDescription: "اسأل عن أي شيء — يمكن للمساعد الاطلاع على سياق تطبيقك الحالي.",
1333
1481
  switchAssistant: "تبديل المساعد",
@@ -1420,6 +1568,11 @@ const ar = {
1420
1568
  changesConfirmed: "تم التأكيد",
1421
1569
  changesConfirm: "تأكيد",
1422
1570
  changesConfirmHint: "أجب لتأكيد هذا التغيير أو تعديله.",
1571
+ changesApplying: "جارٍ التطبيق…",
1572
+ changesApplied: "تم التطبيق",
1573
+ changesDrafted: "حُفظ كمسودة",
1574
+ changesFailed: "لم يُطبَّق",
1575
+ discussing: "قيد المناقشة: {{target}}",
1423
1576
  changeVerb: {
1424
1577
  createObject: "إنشاء كائن",
1425
1578
  addField: "إضافة حقل",
@@ -1430,9 +1583,60 @@ const ar = {
1430
1583
  createSeed: "إنشاء بيانات تجريبية",
1431
1584
  createPackage: "إنشاء حزمة تطبيق",
1432
1585
  },
1586
+ // objectui#3546 slice four — the AI console surfaces: the /ai chat page's app switcher,
1587
+ // connection banner and plan/publish cards, the ChatDock chrome, and the
1588
+ // conversation-list date buckets. `group.*` is the template-key family
1589
+ // `console.ai.group.${key}` (ConversationsSidebar), enumerated from the
1590
+ // ConversationGroupKey union — all five members, no wildcard.
1591
+ collapseToDock: "طيّ إلى اللوحة الجانبية",
1592
+ switchApp: "تبديل التطبيق",
1593
+ switchAppLabel: "محادثات الإنشاء حسب التطبيق",
1594
+ newApp: "تطبيق جديد",
1595
+ connectionWaiting: "في انتظار الخادم…",
1596
+ connectionStalled: "لا يزال العمل جاريًا…",
1597
+ connectionOffline: "انقطع الاتصال — جارٍ إعادة الاتصال…",
1598
+ designingPlan: "جارٍ تصميم تطبيقك…",
1599
+ designingPlanHint: {
1600
+ data: "جارٍ تحديد البيانات التي ستتابعها…",
1601
+ objects: "جارٍ تشكيل الكائنات وحقولها…",
1602
+ relations: "جارٍ ربط السجلات ذات الصلة…",
1603
+ lookups: "جارٍ إعداد العلاقات وحقول البحث…",
1604
+ views: "جارٍ التخطيط للشاشات والعروض…",
1605
+ forms: "جارٍ تنسيق النماذج والقوائم…",
1606
+ defaults: "جارٍ إضافة قيم افتراضية ومعايير تحقّق منطقية…",
1607
+ dashboard: "جارٍ رسم لوحة معلومات للمتابعة…",
1608
+ review: "جارٍ التحقّق من تماسك البنية…",
1609
+ finalize: "جارٍ تجميع الخطة…",
1610
+ },
1611
+ planBuilding: "جارٍ الإنشاء…",
1612
+ planBuilt: "تم الإنشاء",
1613
+ planDeferred: "لم يُنشأ بعد",
1614
+ planReady: "الخطة جاهزة. ابدأ الإنشاء الآن، أو أخبرني بما تريد تعديله.",
1615
+ published: "تم النشر",
1616
+ publishFailed: "فشل النشر",
1617
+ unavailableTitle: "مساعد الذكاء الاصطناعي غير متاح",
1618
+ unavailableDescription: "لم يتم تمكين مساعد الذكاء الاصطناعي في هذا النشر. وكل شيء آخر يعمل كالمعتاد.",
1619
+ unavailableError: "تعذّر الوصول إلى خدمة الذكاء الاصطناعي. قد تكون غير متصلة مؤقتًا — أعد المحاولة أو عد إلى الرئيسية.",
1620
+ unavailableRetry: "إعادة المحاولة",
1621
+ unavailableHome: "العودة إلى الرئيسية",
1622
+ dock: {
1623
+ title: "المساعد",
1624
+ description: "محادثة مساعد الذكاء الاصطناعي",
1625
+ resize: "تغيير حجم المحادثة",
1626
+ collapse: "طي المحادثة",
1627
+ maximize: "فتح كصفحة كاملة",
1628
+ open: "فتح المساعد",
1629
+ },
1630
+ group: {
1631
+ today: "اليوم",
1632
+ yesterday: "أمس",
1633
+ previous7Days: "آخر 7 أيام",
1634
+ previous30Days: "آخر 30 يومًا",
1635
+ older: "أقدم",
1636
+ },
1433
1637
  },
1434
1638
  title: "وحدة تحكم ObjectStack",
1435
- initializing: "جاري تهيئة التطبيق...",
1639
+ initializing: "جاري تهيئة التطبيق…",
1436
1640
  loadingHint: "قد يستغرق إعداد بيئة جديدة بعض الوقت.",
1437
1641
  breadcrumb: {
1438
1642
  dashboards: "لوحات المعلومات",
@@ -1440,6 +1644,31 @@ const ar = {
1440
1644
  reports: "التقارير",
1441
1645
  system: "النظام",
1442
1646
  },
1647
+ // objectui#4024 — the single-namespace settings screen. Its sibling
1648
+ // `settingsHub` above already resolved through this pack; the view was the
1649
+ // one file still carrying English literals.
1650
+ settingsView: {
1651
+ backToHub: "جميع الإعدادات",
1652
+ back: "رجوع",
1653
+ noNamespace: "لم يتم تحديد أي مساحة اسم.",
1654
+ loadError: "تعذّر تحميل الإعدادات",
1655
+ saved: "تم حفظ الإعدادات",
1656
+ saveFailed: "فشل في الحفظ",
1657
+ lockedByEnv: "مقفل بواسطة البيئة: {{key}}",
1658
+ lockedByEnvNoKey: "مقفل بواسطة البيئة",
1659
+ actionSucceeded: "نجح الإجراء",
1660
+ actionFailed: "فشل الإجراء",
1661
+ discard: "تجاهل",
1662
+ saveChanges: "حفظ التغييرات",
1663
+ unsavedCount: "{{count}} تغيير(تغييرات) غير محفوظ",
1664
+ unsavedCount_one: "{{count}} تغيير غير محفوظ",
1665
+ unsavedCount_other: "{{count}} تغييرات غير محفوظة",
1666
+ cryptoRefusalTitle: "لا يمكن لهذا النشر تشفير الأسرار",
1667
+ cryptoRefusalSubjectSuffix: "معلن كمشفَّر، لذلك لم تتم كتابة أي شيء.",
1668
+ cryptoRefusalNoSubject: "تم رفض القيمة المعلنة كمشفَّرة، لذلك لم تتم كتابة أي شيء.",
1669
+ cryptoRefusalToast: "تعذّر تشفير الأسرار: {{subject}}",
1670
+ cryptoRefusalToastNoSubject: "تعذّر تشفير الأسرار",
1671
+ },
1443
1672
  loadingSteps: {
1444
1673
  connecting: "جاري الاتصال بمصدر البيانات",
1445
1674
  loadingConfig: "جاري تحميل الإعدادات",
@@ -1469,6 +1698,7 @@ const ar = {
1469
1698
  general: "عام",
1470
1699
  navigation: "التنقل",
1471
1700
  dataViews: "عروض البيانات",
1701
+ aiChat: "مساعد الذكاء الاصطناعي",
1472
1702
  preferences: "التفضيلات",
1473
1703
  },
1474
1704
  openCommandPalette: "فتح لوحة الأوامر",
@@ -1479,11 +1709,13 @@ const ar = {
1479
1709
  createRecord: "إنشاء سجل جديد",
1480
1710
  refreshData: "تحديث البيانات",
1481
1711
  editRecord: "تعديل السجل المحدد",
1712
+ newChat: "محادثة جديدة",
1713
+ toggleChatsList: "تبديل قائمة المحادثات",
1482
1714
  toggleDarkMode: "تبديل الوضع الداكن",
1483
1715
  },
1484
1716
  commandPalette: {
1485
1717
  title: "لوحة الأوامر",
1486
- placeholder: "اكتب أمراً أو ابحث...",
1718
+ placeholder: "اكتب أمراً أو ابحث…",
1487
1719
  noResults: "لم يتم العثور على نتائج.",
1488
1720
  objects: "الكائنات",
1489
1721
  dashboards: "لوحات المعلومات",
@@ -1509,6 +1741,12 @@ const ar = {
1509
1741
  goHome: "العودة للرئيسية",
1510
1742
  errorDetails: "تفاصيل الخطأ (وضع التطوير فقط)",
1511
1743
  },
1744
+ // objectui#3546 slice four — the console's catch-all route (AppContent `RouteNotFound`).
1745
+ notFound: {
1746
+ title: "الصفحة غير موجودة",
1747
+ description: "الرابط الذي فتحته لا يطابق أي عرض في هذا التطبيق.",
1748
+ back: "رجوع",
1749
+ },
1512
1750
  theme: {
1513
1751
  toggle: "تبديل المظهر",
1514
1752
  light: "فاتح",
@@ -1524,109 +1762,41 @@ const ar = {
1524
1762
  viewNameHelp: "مفتاح برمجي (snake_case). يُملأ تلقائيًا من العنوان — عدّله إن أردت.",
1525
1763
  viewNameRequired: "أدخل مفتاحًا (أحرف إنجليزية صغيرة وأرقام وشرطة سفلية). لا يُملأ تلقائيًا للعناوين غير اللاتينية.",
1526
1764
  viewNameInvalid: "استخدم أحرفًا إنجليزية صغيرة وأرقامًا وشرطات سفلية؛ وابدأ بحرف أو شرطة سفلية.",
1527
- systemViewReadonly: 'System view defined in code - duplicate to customize.',
1528
- expandToPage: 'Open as full page',
1765
+ systemViewReadonly: "عرض النظام معرَّف في الكود — للقراءة فقط.",
1766
+ cannotEditMetaView: "هذا عرض مدمج معرَّف في الكود — لا يمكن تعديله.",
1767
+ cannotDeleteMetaView: "هذا عرض مدمج معرَّف في الكود — لا يمكن حذفه.",
1768
+ expandToPage: "فتح كصفحة كاملة",
1529
1769
  objectNotFound: "الكائن غير موجود",
1530
1770
  objectNotFoundDescription: "الكائن \"{{objectName}}\" غير موجود في الإعدادات الحالية.",
1531
1771
  objectNotFoundHint: "تحقق من إعدادات التنقل في تطبيقك أو اختر كائنًا آخر من الشريط الجانبي.",
1532
1772
  filterOrNotSavable: "يستخدم هذا الفلتر «أو» بين الشروط، وهو ما لا يمكن للعرض المحفوظ تخزينه بعد. لا يزال مطبقًا على هذه القائمة — أزل تجميع «أو» لحفظه في العرض.",
1533
1773
  filterNestedNotSavable: "يستخدم هذا الفلتر مجموعات شروط متداخلة لا يمكن للعرض المحفوظ تخزينها. حوّله إلى قائمة شروط واحدة لحفظه في العرض.",
1534
1774
  allRecords: "جميع السجلات",
1535
- exitDesignMode: "الخروج من وضع التصميم",
1536
- enterDesignMode: "الدخول إلى وضع التصميم",
1537
- metadataInspector: "مفتش البيانات الوصفية",
1538
- editView: "تعديل العرض",
1539
- addView: "إضافة عرض",
1540
- designTools: "أدوات التصميم",
1541
1775
  new: "جديد",
1542
1776
  configureView: "تكوين العرض",
1543
- closePanel: "إغلاق اللوحة",
1544
- page: "الصفحة",
1545
- pageConfigHint: "شريط الأدوات والتنقل وإعدادات غلاف العرض",
1546
- listConfigHint: "عرض البيانات والأعمدة والمظهر لهذا النوع من القائمة",
1547
- general: "عام",
1548
- generalHint: "عنوان العرض والوصف والنوع",
1549
1777
  toolbar: "شريط الأدوات",
1550
- toolbarHint: "البحث والتصفية والفرز والتجميع ومفاتيح الكثافة",
1551
1778
  toolbarEnabledCount: "{{count}} من {{total}} مفعّل",
1552
- navigationSection: "التنقل",
1553
- navigationHint: "سلوك النقر على الصف وإعدادات العرض التفصيلي",
1554
- records: "السجلات",
1555
- recordsHint: "وضع التحديد وإضافة سجل والتحرير المباشر",
1556
- exportPrint: "التصدير والطباعة",
1557
- exportPrintHint: "صيغ التصدير والطباعة وعرض عدد السجلات",
1558
- showAllFields: "إظهار الكل",
1559
- hideAllFields: "إخفاء الكل",
1560
- searchFields: "البحث في الحقول...",
1779
+ searchFields: "البحث في الحقول…",
1561
1780
  title: "العنوان",
1562
- description: "الوصف",
1563
- data: "البيانات",
1564
- source: "المصدر",
1565
- columns: "الأعمدة",
1566
- filterBy: "تصفية حسب",
1567
- sortBy: "ترتيب حسب",
1568
- appearance: "المظهر",
1569
- showDescription: "عرض الوصف",
1570
1781
  viewType: "نوع العرض",
1571
- userFilters: "مرشحات المستخدم",
1572
- enableSearch: "تفعيل البحث",
1573
- enableFilter: "تفعيل التصفية",
1574
- enableSort: "تفعيل الترتيب",
1575
- enableHideFields: "تفعيل إخفاء الحقول",
1576
- enableGroup: "تفعيل التجميع",
1577
- enableColor: "تفعيل اللون",
1578
- enableDensity: "تفعيل الكثافة",
1579
- userActions: "إجراءات المستخدم",
1580
- addRecordViaForm: "إضافة سجلات عبر النموذج",
1581
- advanced: "متقدم",
1582
- allowExport: "السماح بالتصدير",
1583
1782
  recordCount: "{{count}} سجل",
1584
- noDescription: "لا يوجد وصف",
1585
- none: "لا شيء",
1586
- columnsConfigured: "{{count}} أعمدة",
1587
1783
  save: "حفظ",
1588
1784
  discard: "تجاهل",
1589
1785
  createView: "إنشاء عرض",
1590
1786
  newView: "عرض جديد",
1591
- typeOptions: "خيارات النوع",
1592
1787
  groupByField: "حقل التجميع",
1593
1788
  startDateField: "حقل تاريخ البدء",
1594
1789
  titleField: "حقل العنوان",
1595
1790
  latitudeField: "حقل خط العرض",
1596
1791
  longitudeField: "حقل خط الطول",
1597
1792
  imageField: "حقل الصورة",
1598
- dateField: "حقل التاريخ",
1599
- selectField: "اختر حقلاً...",
1600
- gridOptionsHint: "يستخدم عرض الشبكة الأعمدة المكونة أعلاه.",
1793
+ selectField: "اختر حقلاً…",
1601
1794
  groupBy: "تجميع حسب",
1602
- prefixField: "حقل البادئة",
1603
- fields: "الحقول",
1604
- fieldsVisible: "{{count}} مرئي",
1605
- sortsCount: "{{count}} ترتيبات",
1606
- filtersCount: "{{count}} مرشحات",
1607
1795
  endDateField: "حقل تاريخ الانتهاء",
1608
- color: "اللون",
1609
- fieldTextColor: "لون نص الحقل",
1610
- rowHeight: "ارتفاع الصف",
1611
- wrapHeaders: "التفاف العناوين",
1612
- showFieldDescriptions: "إظهار أوصاف الحقول",
1613
- collapseAllByDefault: "طي الكل افتراضياً",
1614
- striped: "صفوف مخططة",
1615
- bordered: "خلايا محاطة بحدود",
1616
- inlineEdit: "تحرير السجلات مباشرة",
1617
- addDeleteRecordsInline: "إضافة/حذف السجلات مباشرة",
1618
- clickIntoRecordDetails: "انقر لعرض تفاصيل السجل",
1619
- navigationMode: "وضع التنقل",
1620
- navigationWidth: "عرض التنقل",
1621
- navigationWidthHint: "متاح لأوضاع التنقل: الدرج والنافذة المنبثقة والعرض المقسم",
1622
- openNewTab: "فتح في علامة تبويب جديدة",
1623
- openNewTabHint: "متاح لأوضاع التنقل: الصفحة والنافذة الجديدة",
1624
1796
  import: "استيراد",
1625
1797
  importTitle: "استيراد من CSV",
1626
1798
  importedToast: "تم استيراد {{count}} صف(صفوف).",
1627
1799
  importedWithSkipped: "تم استيراد {{ok}} صف(صفوف)؛ تم تخطي {{skipped}}.",
1628
- showAdvancedSettings: "إظهار الإعدادات المتقدمة",
1629
- showFewerSettings: "إظهار إعدادات أقل",
1630
1800
  createViewDesc: "اختر نوع العرض وأعطه اسماً. يمكن تغيير جميع الإعدادات لاحقاً.",
1631
1801
  cancel: "إلغاء",
1632
1802
  create: "إنشاء",
@@ -1659,7 +1829,7 @@ const ar = {
1659
1829
  latitudeFieldHelp: "حقل يحتوي على خط العرض (حقول جغرافية فقط).",
1660
1830
  longitudeFieldHelp: "حقل يحتوي على خط الطول (حقول جغرافية فقط).",
1661
1831
  imageFieldHelp: "تأتي غلاف المعرض من هذا الحقل للصورة أو المرفق.",
1662
- selectOption: "تحديد...",
1832
+ selectOption: "تحديد…",
1663
1833
  noEligibleFieldForType: "لا يوجد حقل مؤهل من هذا النوع. أضف حقلاً إلى الكائن أولاً.",
1664
1834
  viewTypeUnavailable: "لا يحتوي هذا الكائن على حقل يمكن أن يعمل كـ \"{{field}}\".",
1665
1835
  viewTypeUnavailableShort: "غير مدعوم من هذا الكائن.",
@@ -1674,58 +1844,9 @@ const ar = {
1674
1844
  xAxisFieldHelp: "البُعد الفئوي أو الزمني.",
1675
1845
  yAxisField: "حقل المحور Y",
1676
1846
  yAxisFieldHelp: "الحقل الرقمي للتجميع.",
1677
- selectionMode: "وضع التحديد",
1678
- selectionNone: "لا شيء",
1679
- selectionSingle: "فردي",
1680
- selectionMultiple: "متعدد",
1681
- pageSize: "حجم الصفحة",
1682
- pageSizeOptions: "خيارات حجم الصفحة",
1683
- exportFormats: "تنسيقات التصدير",
1684
- exportMaxRecords: "الحد الأقصى للسجلات",
1685
- exportIncludeHeaders: "تضمين الرؤوس",
1686
- exportFileNamePrefix: "بادئة اسم الملف",
1687
- searchableFields: "الحقول القابلة للبحث",
1688
- filterableFields: "الحقول القابلة للتصفية",
1689
- resizableColumns: "أعمدة قابلة لتغيير الحجم",
1690
- densityCompact: "مضغوط",
1691
- densityComfortable: "عادي",
1692
- densitySpacious: "فسيح",
1693
- densityMode: "وضع الكثافة",
1694
- hiddenFields: "الحقول المخفية",
1695
- rowActions: "إجراءات الصف",
1696
- bulkActions: "إجراءات جماعية",
1697
- sharing: "مشاركة",
1698
- sharingEnabled: "المشاركة مفعلة",
1699
- sharingVisibility: "الرؤية",
1700
- addRecordEnabled: "إضافة سجل مفعلة",
1701
- addRecordPosition: "الموضع",
1702
- addRecordMode: "الوضع",
1703
- addRecordFormView: "عرض النموذج",
1704
- conditionalFormatting: "التنسيق الشرطي",
1705
- addRule: "إضافة قاعدة",
1706
- quickFilters: "فلاتر سريعة",
1707
- addQuickFilter: "إضافة فلتر سريع",
1708
- ufElements: "العناصر",
1709
- ufDropdown: "قائمة منسدلة",
1710
1847
  ufTabs: "علامات تبويب",
1711
- ufToggle: "تبديل",
1712
- ufAddField: "+ إضافة حقل فلتر...",
1713
- ufNoFields: "لا حقول متاحة",
1714
- ufAddTab: "+ إضافة علامة تبويب",
1715
- ufTabLabel: "التسمية",
1848
+ ufAddField: "+ إضافة حقل فلتر…",
1716
1849
  ufShowAllRecords: "إظهار علامة \"جميع السجلات\"",
1717
- ufAllowAddTab: "السماح بإضافة علامات تبويب",
1718
- showRecordCount: "إظهار عدد السجلات",
1719
- allowPrinting: "السماح بالطباعة",
1720
- virtualScroll: "التمرير الافتراضي",
1721
- emptyStateTitle: "عنوان الحالة الفارغة",
1722
- emptyStateMessage: "رسالة الحالة الفارغة",
1723
- emptyStateIcon: "رمز الحالة الفارغة",
1724
- ariaLabel: "تسمية ARIA",
1725
- ariaDescribedBy: "موصوف بـ ARIA",
1726
- ariaLive: "ARIA Live",
1727
- accessibility: "إمكانية الوصول",
1728
- viewTabs: "علامات تبويب العرض",
1729
1850
  },
1730
1851
  localeSwitcher: {
1731
1852
  label: "اللغة",
@@ -1769,7 +1890,7 @@ const ar = {
1769
1890
  passwordPlaceholder: "أدخل كلمة المرور",
1770
1891
  forgotPasswordText: "نسيت كلمة المرور؟",
1771
1892
  submitButton: "تسجيل الدخول",
1772
- submittingButton: "جارٍ تسجيل الدخول...",
1893
+ submittingButton: "جارٍ تسجيل الدخول…",
1773
1894
  noAccountText: "ليس لديك حساب؟",
1774
1895
  signUpText: "إنشاء حساب",
1775
1896
  errors: {
@@ -1777,6 +1898,18 @@ const ar = {
1777
1898
  invalidCredentials: "بريد إلكتروني أو كلمة مرور غير صحيحة. يرجى المحاولة مرة أخرى.",
1778
1899
  emailNotVerified: "يرجى التحقق من بريدك الإلكتروني قبل تسجيل الدخول.",
1779
1900
  },
1901
+ // objectui#3546 slice three — phone/OTP sign-in. `{seconds}` is LoginForm's own
1902
+ // literal `.replace()` hole, not i18next interpolation: keep the single braces.
1903
+ emailOrPhoneLabel: "البريد الإلكتروني أو رقم الهاتف",
1904
+ emailOrPhonePlaceholder: "name@example.com أو +1 555 000 0000",
1905
+ phoneLabel: "رقم الهاتف",
1906
+ phonePlaceholder: "+1 555 000 0000",
1907
+ otpCodeLabel: "رمز التحقق",
1908
+ otpCodePlaceholder: "رمز مكوّن من 6 أرقام",
1909
+ sendOtpButton: "الحصول على رمز",
1910
+ resendOtpCountdownText: "إعادة الإرسال بعد {seconds} ثانية",
1911
+ usePhoneOtpText: "تسجيل الدخول برمز التحقق",
1912
+ usePasswordSignInText: "تسجيل الدخول بكلمة المرور بدلاً من ذلك",
1780
1913
  },
1781
1914
  register: {
1782
1915
  title: "إنشاء حساب",
@@ -1792,7 +1925,7 @@ const ar = {
1792
1925
  passwordMismatchError: "كلمتا المرور غير متطابقتين",
1793
1926
  passwordTooShortError: "يجب أن تتكون كلمة المرور من 8 أحرف على الأقل",
1794
1927
  submitButton: "إنشاء حساب",
1795
- submittingButton: "جارٍ إنشاء الحساب...",
1928
+ submittingButton: "جارٍ إنشاء الحساب…",
1796
1929
  hasAccountText: "لديك حساب بالفعل؟",
1797
1930
  signInText: "تسجيل الدخول",
1798
1931
  errors: {
@@ -1813,12 +1946,26 @@ const ar = {
1813
1946
  emailLabel: "البريد الإلكتروني",
1814
1947
  emailPlaceholder: "name@example.com",
1815
1948
  submitButton: "إرسال رابط إعادة التعيين",
1816
- submittingButton: "جارٍ الإرسال...",
1949
+ submittingButton: "جارٍ الإرسال…",
1817
1950
  successTitle: "تحقق من بريدك الإلكتروني",
1818
- successDescription: "لقد أرسلنا رابط إعادة تعيين كلمة المرور إلى {{email}}. يرجى التحقق من بريدك الوارد.",
1951
+ successDescription: "لقد أرسلنا رابط إعادة تعيين كلمة المرور إلى {email}. يرجى التحقق من بريدك الوارد.",
1819
1952
  backToSignInText: "العودة إلى تسجيل الدخول",
1820
1953
  rememberPasswordText: "تتذكر كلمة المرور؟",
1821
1954
  signInText: "تسجيل الدخول",
1955
+ // objectui#3546 slice three — the SMS reset branch of the same form.
1956
+ phoneLabel: "رقم الهاتف",
1957
+ phonePlaceholder: "+1 555 000 0000",
1958
+ otpCodeLabel: "رمز التحقق",
1959
+ otpCodePlaceholder: "رمز مكوّن من 6 أرقام",
1960
+ sendOtpButton: "الحصول على رمز",
1961
+ resendOtpCountdownText: "إعادة الإرسال بعد {seconds} ثانية",
1962
+ newPasswordLabel: "كلمة المرور الجديدة",
1963
+ newPasswordPlaceholder: "أدخل كلمة مرور جديدة",
1964
+ resetButton: "إعادة تعيين كلمة المرور",
1965
+ usePhoneResetText: "إعادة التعيين برمز SMS",
1966
+ useEmailResetText: "إعادة التعيين بالبريد الإلكتروني بدلاً من ذلك",
1967
+ phoneSuccessTitle: "تمت إعادة تعيين كلمة المرور",
1968
+ phoneSuccessDescription: "تمت إعادة تعيين كلمة المرور. يمكنك الآن تسجيل الدخول بكلمة المرور الجديدة.",
1822
1969
  },
1823
1970
  resetPassword: {
1824
1971
  title: "تعيين كلمة مرور جديدة",
@@ -1857,6 +2004,8 @@ const ar = {
1857
2004
  backToLogin: "العودة إلى تسجيل الدخول",
1858
2005
  checkSpam: "لم تستلم البريد؟ تحقق من مجلد البريد غير المرغوب أو تواصل مع الدعم.",
1859
2006
  or: "أو",
2007
+ // objectui#3546 slice three.
2008
+ resendUnavailable: "قد يكون إرسال البريد الإلكتروني غير مُهيأ في هذه البيئة. تواصل مع الدعم إذا استمرت المشكلة.",
1860
2009
  },
1861
2010
  setup: {
1862
2011
  welcomeTitle: "مرحباً بك في ObjectStack",
@@ -1895,6 +2044,9 @@ const ar = {
1895
2044
  invalidDescription: "لم يتم تقديم رمز جهاز في URL.",
1896
2045
  loading: "جارٍ التحميل…",
1897
2046
  cancel: "إلغاء",
2047
+ // objectui#3546 slice three — device-authorization plugin switched off.
2048
+ disabledTitle: "تفويض الأجهزة غير مُمكَّن",
2049
+ disabledDescription: "لم يتم تمكين تفويض الأجهزة في هذا النشر، لذا لا يمكن الموافقة على هذا الجهاز هنا.",
1898
2050
  },
1899
2051
  shell: {
1900
2052
  tenantHostHint: "تسجل الدخول إلى مساحة العمل هذه",
@@ -1934,6 +2086,29 @@ const ar = {
1934
2086
  },
1935
2087
  },
1936
2088
  },
2089
+ // objectui#3546 slice three — the /oauth/consent screen.
2090
+ oauth: {
2091
+ consent: {
2092
+ title: "يطلب {{appName}} الوصول إلى حسابك",
2093
+ request: "يطلب {{appName}} الإذن{{suffix}}.",
2094
+ unknownApp: "تطبيق ما",
2095
+ willAllow: "سيتمكن هذا التطبيق من:",
2096
+ scope: {
2097
+ openid: "تأكيد هويتك",
2098
+ profile: "قراءة ملفك الشخصي الأساسي (الاسم، الصورة)",
2099
+ email: "قراءة عنوان بريدك الإلكتروني",
2100
+ offlineAccess: "البقاء مسجّلاً للدخول (تحديث الوصول)",
2101
+ },
2102
+ deny: "رفض",
2103
+ authorize: "تفويض",
2104
+ submitting: "جارٍ التفويض…",
2105
+ granted: "تم منح الوصول",
2106
+ denied: "تم رفض الوصول",
2107
+ noRedirect: "لم يُرجع الخادم أي عنوان URL لإعادة التوجيه.",
2108
+ failed: "فشلت الموافقة",
2109
+ footer: "يمكنك إلغاء الوصول في أي وقت من إعدادات حسابك.",
2110
+ },
2111
+ },
1937
2112
  profile: {
1938
2113
  title: "الملف الشخصي",
1939
2114
  subtitle: "إدارة إعدادات حسابك",
@@ -1995,6 +2170,8 @@ const ar = {
1995
2170
  invite: "دعوة عضو",
1996
2171
  members: "الأعضاء",
1997
2172
  settings: "إعدادات مساحة العمل",
2173
+ multiOrgDisabled: "إنشاء مؤسسات جديدة معطّل في هذا النشر.",
2174
+ createFailed: 'تعذّر إنشاء مساحة العمل',
1998
2175
  },
1999
2176
  help: {
2000
2177
  onThisPage: "في هذه الصفحة",
@@ -2005,7 +2182,7 @@ const ar = {
2005
2182
  },
2006
2183
  sidebar: {
2007
2184
  packageManagement: "إدارة الحزم",
2008
- searchNavigation: "البحث في التنقل...",
2185
+ searchNavigation: "البحث في التنقل…",
2009
2186
  settings: "الإعدادات",
2010
2187
  help: "المساعدة",
2011
2188
  helpTooltip: "المساعدة والوثائق",
@@ -2029,8 +2206,8 @@ const ar = {
2029
2206
  switchObject: "تبديل الكائن",
2030
2207
  connection: {
2031
2208
  connected: "متصل",
2032
- connecting: "جارٍ الاتصال...",
2033
- reconnecting: "جارٍ إعادة الاتصال...",
2209
+ connecting: "جارٍ الاتصال…",
2210
+ reconnecting: "جارٍ إعادة الاتصال…",
2034
2211
  disconnected: "منقطع",
2035
2212
  error: "خطأ في الاتصال",
2036
2213
  },
@@ -2046,10 +2223,12 @@ const ar = {
2046
2223
  build: {
2047
2224
  title: "إنشاء تطبيق",
2048
2225
  subtitle: "ابدأ من الصفر — صمّم الكائنات والنماذج والأتمتة والواجهات.",
2226
+ noCapability: "إنشاء التطبيقات غير متاح في مساحة العمل هذه — فهو يتطلب إذن «إدارة البيانات الوصفية» الذي لا يملكه حسابك.",
2049
2227
  },
2050
2228
  template: {
2051
2229
  title: "ابدأ من قالب",
2052
2230
  subtitle: "ثبّت تطبيق قالب من السوق وخصّصه.",
2231
+ marketplaceDisabled: "لا يوجد سوق تطبيقات مُهيّأ لوقت التشغيل هذا، لذا لا توجد قوالب لتثبيتها هنا.",
2053
2232
  },
2054
2233
  welcomeAdminDescription: "صف نشاطك التجاري في جملة واحدة — وسيولّد الذكاء الاصطناعي الكائنات والشاشات وواجهات البرمجة وأدوات الوكيل. أو أعدّها بنفسك من القائمة على اليسار.",
2055
2234
  welcomeAdminDescriptionNoBuild: "أعدّ تطبيقك الأول من قائمة الإدارة على اليسار. وبمجرد توفر البيانات، يمكن لمساعد الذكاء الاصطناعي مساعدتك في استكشافها.",
@@ -2069,6 +2248,14 @@ const ar = {
2069
2248
  publishing: "جارٍ النشر…",
2070
2249
  published: "تم النشر! تغييراتك فعّالة الآن.",
2071
2250
  publishFailed: "فشل النشر",
2251
+ // objectui#3546 slice six — seedWarn له النص الإنجليزي نفسه الذي في
2252
+ // console.ai.seedWarn، فنعيد استخدام الترجمة ذاتها. علامة «(جمع)» تتبع
2253
+ // grid.import.rowsWithErrors في هذه الحزمة.
2254
+ nothing: "لا شيء للنشر.",
2255
+ probeWarn: "تم النشر، لكن التحقق وجد مشكلات.",
2256
+ seedWarn: "تم النشر، لكن تعذّر تحميل بعض البيانات التجريبية.",
2257
+ publishedVerified: "تم النشر والتحقق — {{count}} صف(صفوف) من البيانات التجريبية فعّالة الآن.",
2258
+ capabilityWarn: "فحص التأليف: {{count}} مرجع(مراجع) قدرات لا تشير إلى شيء.",
2072
2259
  },
2073
2260
  title: "الرئيسية",
2074
2261
  subtitle: "لوحة تحكم مساحة العمل",
@@ -2082,7 +2269,7 @@ const ar = {
2082
2269
  title: "يتطلب انتباهك",
2083
2270
  empty: "لقد أنجزت كل شيء",
2084
2271
  },
2085
- loading: "جارٍ تحميل مساحة العمل...",
2272
+ loading: "جارٍ تحميل مساحة العمل…",
2086
2273
  recent: "الأخيرة",
2087
2274
  starred: "المميزة بنجمة",
2088
2275
  welcome: "مرحباً بك في ObjectUI",
@@ -2143,6 +2330,9 @@ const ar = {
2143
2330
  roles: "الأدوار",
2144
2331
  configuration: "التهيئة",
2145
2332
  createApp: "إنشاء تطبيق",
2333
+ administration: "الإدارة",
2334
+ datasources: "مصادر البيانات",
2335
+ documentation: "الوثائق",
2146
2336
  },
2147
2337
  appSwitcher: {
2148
2338
  switchApplication: "تبديل التطبيق",
@@ -2182,7 +2372,7 @@ const ar = {
2182
2372
  search: {
2183
2373
  title: "بحث",
2184
2374
  back: "رجوع",
2185
- placeholder: "ابحث في الكائنات، لوحات التحكم، الصفحات، التقارير...",
2375
+ placeholder: "ابحث في الكائنات، لوحات التحكم، الصفحات، التقارير…",
2186
2376
  inputAriaLabel: "ابحث في الكائنات، لوحات التحكم، الصفحات، التقارير",
2187
2377
  resultsCount: "{{count}} نتيجة لـ \"{{query}}\"",
2188
2378
  resultsCountPlural: "{{count}} نتيجة لـ \"{{query}}\"",
@@ -2201,6 +2391,7 @@ const ar = {
2201
2391
  empty: {
2202
2392
  objectNotFound: "الكائن غير موجود",
2203
2393
  objectNotFoundDescription: "تعريف الكائن \"{{name}}\" مفقود. تحقق من الإعداد أو ارجع للخلف.",
2394
+ interfacePageSourceMissing: "تشير صفحة الواجهة هذه إلى \"{{name}}\"، وهو غير متاح.",
2204
2395
  pageNotFound: "الصفحة غير موجودة",
2205
2396
  pageNotFoundDescription: "الصفحة \"{{name}}\" غير موجودة. ربما تم إزالتها أو إعادة تسميتها.",
2206
2397
  dashboardNotFound: "لوحة التحكم غير موجودة",
@@ -2209,27 +2400,17 @@ const ar = {
2209
2400
  reportNotFoundDescription: "التقرير \"{{name}}\" غير موجود. ربما تم إزالته أو إعادة تسميته.",
2210
2401
  noAppsConfigured: "لا تطبيقات مُهيأة",
2211
2402
  noAppsConfiguredDescription: "لا تطبيقات مسجلة. أنشئ تطبيقك الأول أو زر إعدادات النظام.",
2403
+ appNotAvailable: "التطبيق غير متاح",
2404
+ appNotAvailableDescription: "هذا التطبيق غير متاح بعد — قد يكون النشر ما زال جارياً. أعد المحاولة بعد لحظات.",
2405
+ appAccessDenied: "ليس لديك حق الوصول إلى هذا التطبيق",
2406
+ appAccessDeniedDescription: "هذا التطبيق موجود، لكن حسابك غير مخوَّل بفتحه. اطلب من المسؤول منحك حق الوصول.",
2407
+ appAccessDeniedHome: "العودة إلى الرئيسية",
2212
2408
  createFirstApp: "إنشاء أول تطبيق",
2213
2409
  systemSettings: "إعدادات النظام",
2214
2410
  back: "رجوع",
2215
2411
  recordNotFound: "السجل غير موجود",
2216
2412
  recordNotFoundDescription: "السجل الذي تبحث عنه غير موجود أو ربما تم حذفه.",
2217
2413
  },
2218
- renderer: {
2219
- noPageSchema: "لم يتم توفير مخطط الصفحة",
2220
- noFormSchema: "لم يتم توفير مخطط النموذج",
2221
- noDashboardSchema: "لم يتم توفير مخطط لوحة التحكم",
2222
- pageRendering: "تصيير الصفحة: {{name}}",
2223
- dashboardRendering: "تصيير لوحة التحكم: {{name}}",
2224
- formRenderingMode: "تصيير النموذج في وضع {{mode}}",
2225
- formRenderingFor: "للسجل {{id}}",
2226
- createRecord: "إنشاء سجل",
2227
- editRecord: "تعديل السجل",
2228
- page: "صفحة",
2229
- dashboard: "لوحة تحكم",
2230
- save: "حفظ",
2231
- cancel: "إلغاء",
2232
- },
2233
2414
  actionDialog: {
2234
2415
  title: "معامِلات الإجراء",
2235
2416
  description: "يرجى إدخال المعلومات المطلوبة للمتابعة.",
@@ -2280,7 +2461,7 @@ const ar = {
2280
2461
  deleteFailed: "تعذر حذف العرض",
2281
2462
  },
2282
2463
  dashboardActions: {
2283
- pdfPreparing: "جارٍ تحضير تصدير PDF…",
2464
+ printDialogOpening: "جارٍ فتح مربع حوار الطباعة في المتصفح (ليس تصديرًا إلى PDF)",
2284
2465
  exportFailed: "فشل التصدير: {{message}}",
2285
2466
  forecastSoon: "عرض التوقعات قادم قريباً",
2286
2467
  },
@@ -2324,126 +2505,159 @@ const ar = {
2324
2505
  first: "الأول",
2325
2506
  },
2326
2507
  editor: {
2327
- breadcrumb: "الإعدادات",
2328
- basic: "أساسي",
2329
- title: "العنوان",
2330
- titlePlaceholder: "مثال: المسار حسب الربع",
2331
- description: "الوصف",
2332
- descriptionPlaceholder: "ماذا يعرض هذا التقرير؟",
2333
- type: "نوع التقرير",
2334
- typeTabular: "جدولي — قائمة مسطّحة",
2335
- typeSummary: "ملخص — مجمّع مع المجاميع",
2336
- typeMatrix: "مصفوفة — محور صفوف × أعمدة",
2337
- typeJoined: "مدمج — كتل متعددة",
2338
- typeHelp: "اختر التخطيط الذي يطابق ما تريد رؤيته.",
2339
- data: "البيانات",
2340
- objectName: "مصدر البيانات",
2341
- objectNamePlaceholder: "مثال: opportunity",
2342
- objectNameHelp: "أي كائن يجب أن يستعلم عنه هذا التقرير؟",
2343
- limit: "حد عدد الصفوف",
2344
- limitPlaceholder: "مثال: 100",
2345
- columns: "الأعمدة",
2346
- columnsHint: "اختر الحقول التي ستظهر كأعمدة. أضف تجميعًا (مجموع، عدد…) في تقارير الملخص أو المصفوفة.",
2347
- filters: "عوامل التصفية",
2348
- filtersHint: "قيّد الصفوف التي تدخل في هذا التقرير.",
2349
- filtersComplex: "يستخدم هذا التقرير عامل تصفية متقدّمًا لا يمكن تحريره هنا. سيُحتفظ به كما هو عند الحفظ.",
2350
- groupBy: "التجميع حسب",
2351
- groupByHint: "جمّع البيانات واحسب المجاميع الفرعية.",
2352
- rows: "الصفوف",
2353
- rowsHint: "جمّع الصفوف حسب هذه الحقول.",
2354
- columnsAxis: "الأعمدة",
2355
- columnsAxisHint: "اعرض هذه الحقول كمحور في الأعلى.",
2356
- values: "القيم",
2357
- valuesHint: "الأرقام التي تظهر في كل خلية. اختر حقلاً واحدًا أو أكثر وأضف تجميعًا (مجموع، عدد…).",
2358
- grouping: "تجميع",
2359
- addGrouping: "إضافة تجميع",
2360
- dateGranularity: "دقة التاريخ",
2361
- dateGranularityNone: "(استخدام القيمة الأصلية)",
2362
- day: "يوم",
2363
- week: "أسبوع",
2364
- month: "شهر",
2365
- quarter: "ربع",
2366
- year: "سنة",
2367
- sortAsc: "تصاعدي",
2368
- sortDesc: "تنازلي",
2369
- chart: "الرسم البياني",
2370
- chartHint: "عرض مرئي اختياري بجانب الجدول.",
2371
- chartType: "نوع الرسم",
2372
- chartTitle: "عنوان الرسم",
2373
- chartTitlePlaceholder: "افتراضيًا يستخدم عنوان التقرير",
2374
- chartXAxis: "المحور السيني (الفئة)",
2375
- chartYAxis: "المحور الصادي (القيمة)",
2376
- chartShowLegend: "إظهار وسيلة الإيضاح",
2377
- chartShowDataLabels: "إظهار تسميات البيانات",
2378
- chartNone: "(بدون رسم)",
2379
- chartBar: "أعمدة",
2380
- chartLine: "خطي",
2381
- chartArea: "منطقة",
2382
- chartPie: "دائري",
2383
- chartDonut: "حلقي",
2384
- chartFunnel: "قمعي",
2385
- validationNeedsObject: "اختر مصدر بيانات قبل إضافة الأعمدة.",
2386
- validationMatrixNeedsRowsCols: "تتطلب تقارير المصفوفة صفًا وعمودًا واحدًا على الأقل.",
2387
- validationSummaryNeedsRows: "تتطلب تقارير الملخص حقل تجميع واحدًا على الأقل.",
2388
- blocks: "الكتل",
2389
- blocksHint: "كل كتلة هي جدولها أو رسمها البياني الخاص. عوامل تصفية الكتلة تُدمج مع عامل تصفية التقرير بمنطق AND.",
2390
- addBlock: "إضافة كتلة",
2391
- removeBlock: "إزالة الكتلة",
2392
- blockName: "اسم الكتلة",
2393
- blockNamePlaceholder: "اسم_فريد_للكتلة",
2394
- blockLabel: "التسمية المعروضة",
2395
- blockLabelPlaceholder: "تُعرض فوق الكتلة",
2396
- blockDescription: "الوصف",
2397
- blockDescriptionPlaceholder: "سياق اختياري لهذه الكتلة",
2398
- validationJoinedNeedsBlocks: "تتطلب التقارير المدمجة كتلة واحدة على الأقل.",
2399
- validationBlockNameRequired: "يجب أن يكون لكل كتلة اسم غير فارغ.",
2400
- validationBlockNameDuplicate: "يجب أن تكون أسماء الكتل فريدة داخل التقرير.",
2401
- validationBlockNeedsColumns: "تحتاج كل كتلة إلى عمود واحد على الأقل.",
2402
- noneOption: "(بلا)",
2403
- addCondition: "إضافة شرط",
2404
- combineLogic: "الدمج مع",
2405
- opContains: "يحتوي على",
2406
- opIsEmpty: "فارغ",
2407
- opIsNotEmpty: "ليس فارغًا",
2408
- formatAuto: "تلقائي",
2409
- formatCurrency: "عملة",
2410
- formatPercent: "نسبة مئوية",
2411
- formatInteger: "عدد صحيح",
2412
- formatDate: "تاريخ",
2413
- formatDatetime: "تاريخ ووقت",
2414
- columnLabelPlaceholder: "تجاوز التسمية",
2415
- aggregateColumn: "تجميع",
2416
- formatColumn: "تنسيق",
2417
- addColumns: "إضافة أعمدة",
2418
- searchFields: "البحث في الحقول…",
2419
- noMatchingFields: "لا توجد حقول تطابق بحثك.",
2420
- noFieldsAvailable: "لا توجد حقول متاحة.",
2421
- columnsCount: "{n} عمود(أعمدة) محدد(ة)",
2422
- columnsEmpty: "لم يتم تحديد أعمدة بعد.",
2423
- fieldPickerTitle: "تحديد الحقول",
2424
- fieldPickerDescription: "اختر حقلاً أو أكثر للإضافة. استخدم مربع البحث لتصفية القائمة.",
2425
- fieldPickerChangeTitle: "تغيير الحقل",
2426
- fieldPickerAddGroupingTitle: "إضافة تجميع",
2427
- fieldPickerEmpty: "(تحديد حقل)",
2428
- fieldPickerSelected: "{n} محدد(ة)",
2429
- fieldPickerClear: "مسح التحديد",
2430
- fieldPickerAdd: "إضافة",
2431
- fieldPickerAddN: "إضافة {n}",
2508
+ panelTitle: "تعديل التقرير",
2432
2509
  },
2433
2510
  },
2434
2511
  organizations: {
2435
2512
  create: "إنشاء مساحة عمل",
2436
- mine: "مؤسساتي",
2437
- title: "المؤسسات",
2438
- heading: "مؤسساتك",
2439
- subtitle: "اختر مؤسسة للمتابعة، أو أنشئ مؤسسة جديدة.",
2440
- searchPlaceholder: "ابحث عن مؤسسة",
2441
- new: "مؤسسة جديدة",
2442
- current: "المؤسسة الحالية",
2513
+ mine: "مساحات عملي",
2514
+ title: "مساحات العمل",
2515
+ heading: "مساحات عملك",
2516
+ subtitle: "اختر مساحة عمل للمتابعة، أو أنشئ مساحة عمل جديدة.",
2517
+ searchPlaceholder: "ابحث عن مساحة عمل",
2518
+ new: "مساحة عمل جديدة",
2519
+ current: "مساحة العمل الحالية",
2443
2520
  manage: "إدارة",
2444
- emptyTitle: "لا توجد مؤسسات بعد",
2445
- emptyDescription: "أنشئ مؤسستك الأولى للبدء.",
2446
- noMatches: "لا توجد مؤسسات تطابق بحثك.",
2521
+ emptyTitle: "لا توجد مساحات عمل بعد",
2522
+ emptyDescription: "أنشئ مساحة عملك الأولى للبدء.",
2523
+ noMatches: "لا توجد مساحات عمل تطابق بحثك.",
2524
+ },
2525
+ organization: {
2526
+ roles: {
2527
+ owner: 'المالك',
2528
+ admin: 'المسؤول',
2529
+ delegatedAdmin: 'مسؤول مفوَّض',
2530
+ member: 'عضو',
2531
+ },
2532
+ errors: {
2533
+ notAllowedToInvite: 'لا يُسمح لك بدعوة مستخدمين إلى هذه المؤسسة.',
2534
+ notAllowedToInviteWithRole: 'لا يُسمح لك بدعوة مستخدم بهذا الدور.',
2535
+ alreadyInvited: 'تمت دعوة هذا المستخدم إلى هذه المؤسسة بالفعل.',
2536
+ organizationExists: 'هذه المؤسسة موجودة بالفعل.',
2537
+ slugTaken: 'هذا المُعرِّف مستخدَم بالفعل.',
2538
+ notAllowedToCreate: 'لا يُسمح لك بإنشاء مؤسسة جديدة.',
2539
+ notTheRecipient: 'لست المستلم المقصود بهذه الدعوة.',
2540
+ invitationNotFound: 'لم تعد هذه الدعوة موجودة أو أنها منتهية الصلاحية.',
2541
+ unknown: 'حدث خطأ ما. يرجى المحاولة مرة أخرى.',
2542
+ },
2543
+ backToList: "العودة إلى المؤسسات",
2544
+ notFound: "المؤسسة غير موجودة",
2545
+ notFoundDescription: "هذه المؤسسة غير موجودة أو ليس لديك صلاحية الوصول إليها.",
2546
+ tabs: {
2547
+ members: "الأعضاء",
2548
+ invitations: "الدعوات",
2549
+ settings: "الإعدادات",
2550
+ },
2551
+ members: {
2552
+ title: "الأعضاء",
2553
+ inviteMember: "دعوة عضو",
2554
+ inviteRestrictedNote: "لا يمكن دعوة الأعضاء إلا لمسؤولي المؤسسة.",
2555
+ removeMember: "إزالة العضو",
2556
+ removeConfirmTitle: "إزالة العضو؟",
2557
+ removeConfirmDescription: "سيؤدي ذلك إلى إزالة {{name}} من المؤسسة، وسيفقد صلاحية الوصول فورًا.",
2558
+ removeConfirmAction: "إزالة",
2559
+ memberRemoved: "تمت إزالة العضو",
2560
+ removeFailed: "فشل إزالة العضو",
2561
+ roleUpdated: "تم تحديث الدور",
2562
+ roleUpdateFailed: "فشل تحديث الدور",
2563
+ memberActions: 'إجراءات العضو',
2564
+ loadFailed: 'تعذّر تحميل الأعضاء',
2565
+ },
2566
+ invitations: {
2567
+ title: "الدعوات",
2568
+ empty: "لا توجد دعوات.",
2569
+ expiresAt: "تنتهي في",
2570
+ linkCopied: "تم نسخ رابط الدعوة",
2571
+ copyFailed: "فشل نسخ الرابط",
2572
+ canceled: "تم إلغاء الدعوة",
2573
+ cancelFailed: "فشل إلغاء الدعوة",
2574
+ cancelTitle: "إلغاء الدعوة؟",
2575
+ cancelDescription: "سيتم إبطال الدعوة المرسلة إلى {{email}}.",
2576
+ cancelAction: "إلغاء الدعوة",
2577
+ inviteTitle: "دعوة عضو",
2578
+ inviteDescription: "سيتلقى دعوة للانضمام إلى هذه المؤسسة.",
2579
+ emailLabel: "البريد الإلكتروني",
2580
+ roleLabel: "الدور",
2581
+ placementLabel: "التعيين (اختياري)",
2582
+ placementDescription: "يُطبَّق عند قبول الدعوة. تُعرض فقط الوحدات والمناصب التي يمكنك تفويضها.",
2583
+ businessUnitLabel: "وحدة العمل",
2584
+ businessUnitPlaceholder: "بدون تعيين",
2585
+ positionsLabel: "المناصب",
2586
+ sendInvite: "إرسال الدعوة",
2587
+ sentTitle: "تم إنشاء الدعوة",
2588
+ sentDescription: "شارك الرابط أدناه مع المدعوّ. سيحتاج إلى تسجيل الدخول للقبول.",
2589
+ linkLabel: "رابط القبول",
2590
+ invitedAs: "تمت دعوة {{email}} بصفة {{role}}",
2591
+ copyLinkLabel: 'نسخ رابط الدعوة',
2592
+ loadFailed: 'تعذّر تحميل الدعوات',
2593
+ inviteFailed: 'تعذّرت دعوة العضو',
2594
+ status: {
2595
+ all: "الكل",
2596
+ pending: "قيد الانتظار",
2597
+ accepted: "مقبولة",
2598
+ rejected: "مرفوضة",
2599
+ canceled: "ملغاة",
2600
+ },
2601
+ },
2602
+ settings: {
2603
+ generalTitle: "عام",
2604
+ generalDescription: "حدّث معلومات مؤسستك.",
2605
+ readOnlyNote: "يمكن للمالكين فقط تغيير الإعدادات.",
2606
+ nameLabel: "اسم المؤسسة",
2607
+ slugLabel: "المعرف",
2608
+ logoLabel: "الشعار",
2609
+ logoUpload: "رفع",
2610
+ logoReplace: "استبدال",
2611
+ logoClear: "إزالة",
2612
+ logoUploaded: "تم رفع الشعار — احفظ لتطبيقه",
2613
+ logoUploadFailed: "فشل رفع الشعار",
2614
+ save: "حفظ التغييرات",
2615
+ saved: "تم حفظ الإعدادات",
2616
+ saveFailed: "فشل حفظ الإعدادات",
2617
+ leaveTitle: "مغادرة المؤسسة",
2618
+ leaveDescription: "ستفقد صلاحية الوصول إلى هذه المؤسسة.",
2619
+ leaveAction: "مغادرة",
2620
+ leaveConfirmTitle: "مغادرة المؤسسة؟",
2621
+ leaveConfirmDescription: "هل أنت متأكد أنك تريد مغادرة {{name}}؟ ستفقد صلاحية الوصول فورًا.",
2622
+ leaveConfirmAction: "مغادرة",
2623
+ leftOrg: "لقد غادرت المؤسسة",
2624
+ leaveFailed: "فشلت مغادرة المؤسسة",
2625
+ dangerZone: "منطقة الخطر",
2626
+ deleteTitle: "حذف المؤسسة",
2627
+ deleteDescription: "احذف هذه المؤسسة وجميع بياناتها نهائيًا.",
2628
+ deleteAction: "حذف",
2629
+ deleteConfirmTitle: "حذف المؤسسة؟",
2630
+ deleteConfirmDescription: "هذا الإجراء لا يمكن التراجع عنه. ستُحذف جميع البيانات نهائيًا. اكتب معرف المؤسسة للتأكيد.",
2631
+ deleteConfirmSlugLabel: "اكتب \"{{slug}}\" للتأكيد",
2632
+ deleteConfirmAction: "حذف المؤسسة",
2633
+ deleted: "تم حذف المؤسسة",
2634
+ deleteFailed: "فشل حذف المؤسسة",
2635
+ },
2636
+ accept: {
2637
+ title: "لقد تلقيت دعوة",
2638
+ description: "تمت دعوتك للانضمام إلى {{orgName}} بصفة {{role}}.",
2639
+ errorTitle: "الدعوة غير متاحة",
2640
+ goToOrgs: "الانتقال إلى المؤسسات",
2641
+ loading: "جارٍ تحميل الدعوة…",
2642
+ organization: "المؤسسة",
2643
+ role: "الدور",
2644
+ expiresAt: "تنتهي في",
2645
+ accept: "قبول الدعوة",
2646
+ accepted: "تم قبول الدعوة",
2647
+ acceptFailed: "فشل قبول الدعوة",
2648
+ decline: "رفض",
2649
+ declined: "تم رفض الدعوة",
2650
+ declineFailed: "فشل رفض الدعوة",
2651
+ },
2652
+ current: {
2653
+ label: "المؤسسة الحالية",
2654
+ },
2655
+ switcher: {
2656
+ label: "تبديل المؤسسة",
2657
+ groupLabel: "مؤسسة العمل",
2658
+ groupHint: "تُنشأ السجلات الجديدة هنا. تعرض العروض بيانات من جميع مؤسساتك.",
2659
+ manageMembers: "إدارة الأعضاء",
2660
+ },
2447
2661
  },
2448
2662
  notifications: {
2449
2663
  regionLabel: "الإشعارات",
@@ -2458,6 +2672,9 @@ const ar = {
2458
2672
  viewApprovals: "عرض الموافقات",
2459
2673
  noPendingApprovals: "لا توجد موافقات معلقة",
2460
2674
  openApprovalsInbox: "فتح صندوق الموافقات",
2675
+ badgeTotal: "{{total}} إجمالاً",
2676
+ badgeNotifications: "{{unread}} إشعارات",
2677
+ badgeApprovals: "{{approvals}} موافقات معلقة",
2461
2678
  emptyUnread: "كل شيء مقروء",
2462
2679
  filterUnread: "غير مقروء",
2463
2680
  filterAll: "الكل",
@@ -2482,52 +2699,6 @@ const ar = {
2482
2699
  consentRequired: "يرجى قبول سياسة الخصوصية للمتابعة.",
2483
2700
  rateLimited: "خذ لحظة لمراجعة إجاباتك قبل الإرسال.",
2484
2701
  redirectBlocked: "تم قبول الإرسال، لكن رابط إعادة التوجيه تم حظره لأسباب أمنية.",
2485
- demo: {
2486
- contactTitle: "تواصل معنا",
2487
- contactDescription: "أخبرنا عن مشروعك وسيتواصل معك أحد ممثلي المبيعات خلال يوم عمل.",
2488
- supportTitle: "إرسال طلب دعم",
2489
- supportDescription: "صف لنا المشكلة وسيرد فريقنا خلال يوم عمل.",
2490
- thankYouSalesTitle: "شكراً — لقد استلمنا رسالتك!",
2491
- thankYouSalesMessage: "سيتواصل معك أحد ممثلي المبيعات خلال يوم عمل.",
2492
- thankYouSupportTitle: "تم — طلبك في قائمة الانتظار.",
2493
- thankYouSupportMessage: "سيتابع معك مهندس الدعم قريباً. احفظ هذه الصفحة إذا كان لديك لقطات شاشة إضافية.",
2494
- field: {
2495
- firstName: "الاسم الأول",
2496
- lastName: "اسم العائلة",
2497
- email: "البريد الإلكتروني للعمل",
2498
- phone: "الهاتف",
2499
- jobTitle: "المسمى الوظيفي",
2500
- company: "الشركة",
2501
- website: "الموقع الإلكتروني",
2502
- industry: "القطاع",
2503
- companySize: "حجم الشركة",
2504
- howCanWeHelp: "كيف يمكننا مساعدتك؟",
2505
- subject: "الموضوع",
2506
- description: "الوصف",
2507
- issueType: "نوع المشكلة",
2508
- priority: "الأولوية",
2509
- },
2510
- industry: {
2511
- technology: "التكنولوجيا",
2512
- software: "البرمجيات / SaaS",
2513
- finance: "المالية",
2514
- healthcare: "الرعاية الصحية",
2515
- retail: "التجزئة",
2516
- other: "أخرى",
2517
- },
2518
- issueType: {
2519
- question: "سؤال",
2520
- problem: "مشكلة",
2521
- bug: "خطأ برمجي",
2522
- feature_request: "طلب ميزة",
2523
- },
2524
- priority: {
2525
- low: "منخفضة",
2526
- medium: "متوسطة",
2527
- high: "عالية",
2528
- critical: "حرجة",
2529
- },
2530
- },
2531
2702
  },
2532
2703
  connectAgent: {
2533
2704
  disabled: {
@@ -2640,6 +2811,7 @@ const ar = {
2640
2811
  retry: "إعادة المحاولة",
2641
2812
  errors: {
2642
2813
  expired: "انتهت صلاحية الطلب قبل الموافقة عليه. ابدأ من جديد.",
2814
+ accessDenied: "تم رفض طلب الاتصال. ابدأ من جديد.",
2643
2815
  bindFailed: "فشل الربط.",
2644
2816
  deviceCodeFailed: "فشل طلب رمز الجهاز.",
2645
2817
  },
@@ -2705,10 +2877,16 @@ const ar = {
2705
2877
  installedBadge: "مثبت v{{version}}",
2706
2878
  load: {
2707
2879
  failed: "تعذر تحميل السوق",
2708
- failedHint: "بشكل افتراضي، يشير هذا الوقت التشغيل إلى سحابة ObjectStack العامة. تأكد من أن الوقت التشغيل متصل بالإنترنت.",
2880
+ failedHintConfigured: "يصل وقت التشغيل هذا إلى السوق عبر مستوى التحكم على {{url}}. تحقق من أنه متصل بالإنترنت ويمكن الوصول إليه من هنا.",
2881
+ failedHintSameOrigin: "يقدّم وقت التشغيل هذا كتالوج السوق بنفسه. تأكد من أن وقت التشغيل متصل بالإنترنت.",
2709
2882
  packageFailed: "تعذر تحميل الحزمة",
2710
2883
  notFound: "غير موجود.",
2711
2884
  },
2885
+ disabled: {
2886
+ title: "سوق التطبيقات معطّل",
2887
+ description: "لا يوجد سوق مُهيّأ لوقت التشغيل هذا، لذا لا يوجد ما يمكن تصفحه أو تثبيته من هنا.",
2888
+ hint: "هذه هي الحالة المتوقعة عند تشغيل وقت التشغيل باستخدام <code>OS_CLOUD_URL=off</code> (أو <code>none</code> أو <code>local</code> أو <code>disabled</code>). لتفعيل السوق، وجّه <code>OS_CLOUD_URL</code> إلى مستوى تحكم وأعد تشغيل وقت التشغيل.",
2889
+ },
2712
2890
  detail: {
2713
2891
  homepage: "الصفحة الرئيسية",
2714
2892
  installedV: "مثبت · v{{version}}",
@@ -2744,6 +2922,7 @@ const ar = {
2744
2922
  dismiss: "رفض",
2745
2923
  openOnCloud: "فتح في السحابة",
2746
2924
  backHome: "العودة إلى الرئيسية",
2925
+ updateTo: "تحديث",
2747
2926
  },
2748
2927
  install: {
2749
2928
  dialogTitle: "تثبيت {{name}}",
@@ -2760,6 +2939,37 @@ const ar = {
2760
2939
  localManifestConflict: "{{message}}\nملاحظة: تطبيق محلي يمتلك بالفعل هذا المعرف. أزله أولاً من objectstack.config.ts.",
2761
2940
  localUnauthorized: "سجل الدخول إلى هذا الوقت التشغيل أولاً.",
2762
2941
  localMarketplaceUnavailable: "هذا الوقت التشغيل لا يحتوي على OS_CLOUD_URL مُهيأ.",
2942
+ updateTo: "تحديث → v{{version}}",
2943
+ installedVersion: "مثبت v{{version}}",
2944
+ },
2945
+ // objectui#3546 — the MarketplacePage "Your organization" strip.
2946
+ org: {
2947
+ heading: "مؤسستك",
2948
+ install: "تثبيت",
2949
+ installed: "تم تثبيت {{name}}",
2950
+ installedBadge: "مثبت",
2951
+ installing: "جارٍ التثبيت…",
2952
+ },
2953
+ // ADR-0025 PD4 §3.5/§3.11 — the pre-install consent panel
2954
+ // (PluginDisclosure.tsx). `runtime` is a CLOSED enum: spec
2955
+ // PluginRuntimeSchema = z.enum(['node', 'sandbox', 'worker']).
2956
+ disclosure: {
2957
+ containsCode: "تحتوي هذه الحزمة على تعليمات برمجية",
2958
+ reviewed: "تمت المراجعة والموافقة",
2959
+ unreviewed: "لم تتم المراجعة بعد",
2960
+ signed: "موقَّع",
2961
+ grantsIntro: "عند التثبيت، ستُمنح هذه الحزمة:",
2962
+ services: "خدمات المنصة",
2963
+ hooks: "خطافات دورة الحياة",
2964
+ network: "الوصول إلى الشبكة",
2965
+ fs: "الوصول إلى نظام الملفات",
2966
+ noPermissions: "لا تطلب أي أذونات خاصة.",
2967
+ acknowledge: "أفهم أن هذه الحزمة تنفّذ تعليمات برمجية وتحصل على الأذونات المذكورة أعلاه.",
2968
+ runtime: {
2969
+ node: "داخل العملية · ثقة كاملة",
2970
+ sandbox: "في بيئة معزولة",
2971
+ worker: "خارج العملية",
2972
+ },
2763
2973
  },
2764
2974
  uninstall: {
2765
2975
  confirm: "إلغاء تثبيت {{manifestId}} v{{version}} من هذا الوقت التشغيل؟\n\nسيتم إزالة المانيفست المخزن مؤقتاً.",
@@ -2916,12 +3126,19 @@ const ar = {
2916
3126
  submittedAgo: 'قُدِّم {{when}}',
2917
3127
  completedAt: 'اكتمل {{when}}',
2918
3128
  waitingOn: 'بانتظار',
3129
+ approverNameSeparator: '، ',
3130
+ approverUnstaffed: '{{seat}} (لا يشغلها أحد حاليًا)',
2919
3131
  history: 'النشاط',
2920
3132
  noActions: 'لا إجراءات بعد.',
2921
3133
  actSubmit: 'تقديم',
2922
3134
  actApprove: 'موافقة',
2923
3135
  actReject: 'رفض',
2924
3136
  actRecall: 'سحب',
3137
+ overrideActionLabel: '{{action}} (تجاوز إداري)',
3138
+ overrideNotice: 'لا تشغل أي موقع موافِق في هذه الخطوة. المتابعة تستخدم تجاوزك الإداري: تُنهى الخطوة فورًا ويُتخطّى كل موافِق لم يتصرف بعد. يُسجَّل القرار بوصفه تجاوزًا إداريًا.',
3139
+ overrideNoticeWho: 'لا تشغل أي موقع موافِق في هذه الخطوة. المتابعة تستخدم تجاوزك الإداري: تُنهى الخطوة فورًا ويُتخطّى الموافقون الذين لم يتصرفوا بعد — {{who}}. يُسجَّل القرار بوصفه تجاوزًا إداريًا.',
3140
+ viaOverrideChip: 'تجاوز إداري',
3141
+ viaOverrideHint: 'لم يكن للمنفِّذ موقع موافِق في هذه الخطوة — سُمح له عبر مسار التجاوز الإداري.',
2925
3142
  rawData: 'البيانات الخام (JSON)',
2926
3143
  copy: 'نسخ',
2927
3144
  copied: 'تم النسخ',
@@ -3008,6 +3225,39 @@ const ar = {
3008
3225
  detailChangedKeys: 'تغييرات أخرى:',
3009
3226
  confirmNote: 'النشر يُصدر كل المسودات المعلقة ({{count}}) لهذه الحزمة دفعة واحدة.',
3010
3227
  publishConfirm: 'نشر الكل',
3228
+ // [objectui#5418] Pre-publish security-posture findings, shown next to
3229
+ // the confirm button so a refusal the door would issue is read BEFORE
3230
+ // the click rather than as a toast after the batch rolled back.
3231
+ securityBlockTitle: 'سيتم رفض النشر — {{count}} عنصر (عناصر) بحاجة إلى قرار أولاً',
3232
+ securityBlockWhere: 'أصلحه في الكائن ضمن الإعدادات ← مشاركة السجلات، ثم انشر مرة أخرى.',
3233
+ },
3234
+ // ADR-0045 — the materialized-but-unlisted app banner
3235
+ // (UnpublishedAppBar.tsx), sibling of draftBar above.
3236
+ unpublishedBar: {
3237
+ message: 'تطبيق غير منشور — يعمل بالكامل، لكن لا يراه سوى المنشئين. انشره ليصبح مرئياً لمستخدميك.',
3238
+ publish: 'نشر',
3239
+ publishing: 'جارٍ النشر…',
3240
+ published: 'تم النشر! التطبيق مرئي الآن لمستخدميك.',
3241
+ publishFailed: 'فشل النشر',
3242
+ },
3243
+ // ADR-0067 — the append-only build/revert timeline (CommitTimeline.tsx);
3244
+ // `button` is the banner's entry point into it.
3245
+ history: {
3246
+ button: 'السجل',
3247
+ title: 'سجل البناء',
3248
+ description: 'كل تغيير في هذا التطبيق، الأحدث أولاً. تراجع عن أي خطوة لإلغائها — لا حاجة لتأكيد النشر.',
3249
+ loadFailed: 'تعذر تحميل السجل:',
3250
+ loadFailedUnavailable: 'يتعذّر الوصول مؤقتًا إلى مخزن الإيداعات — لم تتم هذه القراءة، لذلك لا يُعرض أي سجل. أعد المحاولة بعد قليل.',
3251
+ loading: 'جارٍ تحميل السجل…',
3252
+ empty: 'لا يوجد سجل لهذا التطبيق بعد.',
3253
+ revertLabel: 'تم التراجع عن تغيير',
3254
+ applyLabel: 'تغيير من البناء',
3255
+ revert: 'تراجع',
3256
+ items: 'عناصر',
3257
+ revertAction: 'تراجع',
3258
+ reverted: 'تم التراجع — أُلغي التغيير.',
3259
+ revertFailed: 'فشل التراجع',
3260
+ revertUnavailable: 'يتعذّر الوصول مؤقتًا إلى مخزن الإيداعات — قد لا يكون التراجع قد طُبِّق. أعد فتح هذا السجل للتحقق قبل إعادة المحاولة.',
3011
3261
  },
3012
3262
  },
3013
3263
  filterBuilder: {
@@ -3026,10 +3276,15 @@ const ar = {
3026
3276
  noResults: "لا توجد نتائج",
3027
3277
  searchField: "بحث {{label}}…",
3028
3278
  enterId: "أدخل معرّف {{label}}",
3279
+ addValue: "أدخل قيمة ثم اضغط Enter",
3280
+ removeValue: "إزالة {{value}}",
3281
+ rangeStart: "من",
3282
+ rangeEnd: "إلى",
3029
3283
  operators: {
3030
3284
  equals: "يساوي",
3031
3285
  notEquals: "لا يساوي",
3032
3286
  contains: "يحتوي",
3287
+ containsCaseInsensitive: "يحتوي (مع تجاهل حالة الأحرف)",
3033
3288
  notContains: "لا يحتوي",
3034
3289
  isEmpty: "فارغ",
3035
3290
  isNotEmpty: "غير فارغ",
@@ -3042,6 +3297,12 @@ const ar = {
3042
3297
  between: "بين",
3043
3298
  in: "ضمن",
3044
3299
  notIn: "ليس ضمن",
3300
+ startsWith: "يبدأ بـ",
3301
+ endsWith: "ينتهي بـ",
3302
+ isNull: "يساوي null",
3303
+ isNotNull: "لا يساوي null",
3304
+ exists: "محدد",
3305
+ notExists: "غير محدد",
3045
3306
  },
3046
3307
  },
3047
3308
  sortBuilder: {
@@ -3087,5 +3348,64 @@ const ar = {
3087
3348
  statusIdle: "خامل",
3088
3349
  statusAway: "غائب",
3089
3350
  },
3351
+ wizard: {
3352
+ missingRequired: "يرجى إكمال الحقول المطلوبة: {{fields}}",
3353
+ },
3354
+ flowRunner: {
3355
+ title: 'إدخال',
3356
+ submitting: 'جارٍ الإرسال…',
3357
+ saveAndContinue: 'حفظ ومتابعة',
3358
+ nextStep: 'تم الحفظ — الخطوة التالية',
3359
+ completed: 'اكتمل التدفق «{{flow}}»',
3360
+ },
3361
+ appManagement: {
3362
+ title: "التطبيقات",
3363
+ subtitle: "إدارة جميع التطبيقات المُعدّة",
3364
+ newApp: "تطبيق جديد",
3365
+ searchLabel: "البحث في التطبيقات",
3366
+ searchPlaceholder: "البحث في التطبيقات…",
3367
+ selectedCount: "{{n}} محدد",
3368
+ bulkEnable: "تفعيل",
3369
+ bulkDisable: "تعطيل",
3370
+ selectAll: "تحديد الكل ({{n}})",
3371
+ empty: "لم يتم العثور على تطبيقات.",
3372
+ defaultBadge: "افتراضي",
3373
+ active: "نشط",
3374
+ inactive: "غير نشط",
3375
+ selectApp: "تحديد {{name}}",
3376
+ openApp: "فتح التطبيق",
3377
+ openAppNamed: "فتح {{name}}",
3378
+ editApp: "تعديل التطبيق",
3379
+ editAppNamed: "تعديل {{name}}",
3380
+ editWithAi: "التعديل بالذكاء الاصطناعي",
3381
+ editWithAiNamed: "تعديل {{name}} بالذكاء الاصطناعي",
3382
+ enableApp: "تفعيل التطبيق",
3383
+ disableApp: "تعطيل التطبيق",
3384
+ enableAppNamed: "تفعيل {{name}}",
3385
+ disableAppNamed: "تعطيل {{name}}",
3386
+ setDefault: "تعيين كافتراضي",
3387
+ setDefaultNamed: "تعيين {{name}} كافتراضي",
3388
+ deleteApp: "حذف التطبيق",
3389
+ deleteAppNamed: "حذف {{name}}",
3390
+ confirmDelete: "انقر مرة أخرى لتأكيد الحذف",
3391
+ confirmDeleteNamed: "تأكيد حذف {{name}}",
3392
+ toast: {
3393
+ noClient: "تعذّر الوصول إلى خدمة البيانات الوصفية",
3394
+ unknownError: "خطأ غير معروف",
3395
+ appEnabled: "تم تفعيل {{name}}",
3396
+ appDisabled: "تم تعطيل {{name}}",
3397
+ toggleFailed: "فشل تغيير حالة التطبيق: {{reason}}",
3398
+ setDefaultDone: "تم تعيين {{name}} كافتراضي",
3399
+ setDefaultFailed: "فشل تعيين التطبيق الافتراضي: {{reason}}",
3400
+ appDeleted: "تم حذف {{name}}",
3401
+ deleteFailed: "فشل حذف التطبيق: {{reason}}",
3402
+ bulkEnabled: "تم تفعيل {{n}} تطبيقات",
3403
+ bulkDisabled: "تم تعطيل {{n}} تطبيقات",
3404
+ bulkFailed: "فشل لـ {{n}}: {{details}}",
3405
+ bulkFailureEntry: "{{name}} ({{reason}})",
3406
+ bulkFailureJoiner: "؛ ",
3407
+ bulkOperationFailed: "فشلت العملية الجماعية: {{reason}}",
3408
+ },
3409
+ },
3090
3410
  };
3091
3411
  export default ar;