@object-ui/i18n 17.6.0 → 17.7.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 (56) hide show
  1. package/CHANGELOG.md +4320 -0
  2. package/README.md +192 -13
  3. package/dist/builtinAggregateLabels.d.ts +40 -0
  4. package/dist/builtinAggregateLabels.js +23 -0
  5. package/dist/currency.d.ts +27 -3
  6. package/dist/currency.js +28 -4
  7. package/dist/fallbackInterpolation.d.ts +79 -0
  8. package/dist/fallbackInterpolation.js +124 -0
  9. package/dist/i18n.d.ts +27 -1
  10. package/dist/i18n.js +99 -16
  11. package/dist/index.d.ts +7 -13
  12. package/dist/index.js +41 -17
  13. package/dist/locales/ar.d.ts +946 -113
  14. package/dist/locales/ar.js +1095 -161
  15. package/dist/locales/de.d.ts +618 -113
  16. package/dist/locales/de.js +715 -134
  17. package/dist/locales/en.d.ts +632 -127
  18. package/dist/locales/en.js +1044 -162
  19. package/dist/locales/es.d.ts +700 -113
  20. package/dist/locales/es.js +794 -130
  21. package/dist/locales/fr.d.ts +700 -113
  22. package/dist/locales/fr.js +795 -132
  23. package/dist/locales/index.d.ts +6990 -1169
  24. package/dist/locales/index.js +48 -9
  25. package/dist/locales/ja.d.ts +618 -113
  26. package/dist/locales/ja.js +708 -128
  27. package/dist/locales/ko.d.ts +618 -113
  28. package/dist/locales/ko.js +712 -132
  29. package/dist/locales/pt.d.ts +700 -113
  30. package/dist/locales/pt.js +794 -130
  31. package/dist/locales/registry.d.ts +102 -0
  32. package/dist/locales/registry.js +220 -0
  33. package/dist/locales/rtl.d.ts +24 -0
  34. package/dist/locales/rtl.js +26 -0
  35. package/dist/locales/ru.d.ts +782 -113
  36. package/dist/locales/ru.js +910 -152
  37. package/dist/locales/zh.d.ts +635 -130
  38. package/dist/locales/zh.js +725 -131
  39. package/dist/pickLocalized.d.ts +30 -0
  40. package/dist/pickLocalized.js +39 -0
  41. package/dist/provider.d.ts +101 -12
  42. package/dist/provider.js +335 -50
  43. package/dist/translateFn.d.ts +29 -0
  44. package/dist/translateFn.js +8 -0
  45. package/dist/useDisplayLocale.d.ts +11 -0
  46. package/dist/useDisplayLocale.js +11 -0
  47. package/dist/useObjectLabel.d.ts +40 -18
  48. package/dist/useObjectLabel.js +46 -14
  49. package/dist/useSafeTranslation.js +40 -42
  50. package/dist/utils/formatting.d.ts +16 -0
  51. package/dist/utils/formatting.js +23 -3
  52. package/dist/utils/spec-formatters.d.ts +13 -23
  53. package/dist/utils/spec-formatters.js +41 -2
  54. package/dist/utils/spec-translations.d.ts +16 -3
  55. package/dist/utils/spec-translations.js +52 -13
  56. package/package.json +12 -6
@@ -19,10 +19,12 @@ const ar = {
19
19
  manage_users: "إدارة المستخدمين",
20
20
  manage_org_users: "إدارة مستخدمي المؤسسة",
21
21
  manage_metadata: "إدارة البيانات الوصفية",
22
+ manage_org_presentation: "إدارة عرض المؤسسة",
22
23
  manage_platform_settings: "إدارة إعدادات المنصة",
23
24
  setup_access: "الوصول إلى الإعداد",
24
25
  setup_write: "كتابة الإعدادات",
25
26
  studio_access: "الوصول إلى Studio",
27
+ manage_sharing: "إدارة المشاركة",
26
28
  },
27
29
  group: {
28
30
  platform: 'منصة',
@@ -30,25 +32,47 @@ const ar = {
30
32
  other: 'أخرى',
31
33
  },
32
34
  },
33
- // objectui#3546 slice six — ملخص للقراءة فقط لأوجه التخويل الستة في
34
- // PermissionFacetLink، مع رابط التصميم في Studio.
35
+ // objectui#3546 slice six — the read-only summary of PermissionFacetLink's six
36
+ // authorization facets, plus the Studio link.
35
37
  //
36
- // صيغة العدد تتبع نمط الحزمة نفسه: «{{count}} مفرد(جمع)» كما في
37
- // appDesigner.objectManager.fieldCount و table.modified. المفتاح الأساسي هو
38
- // ما تلجأ إليه فئات two/few/many/zero غير المعرّفة، فيظل النص عربيًا.
39
- // لا نعكس سهم روابط الإجراء: يبقى كما في en، مثل marketplace.browseLink.
38
+ // The four count labels carry one slot per ar CLDR category (objectui#11432):
39
+ // `_zero` and `_other` (100-102…) singular, `_one`, `_two` the dual with the
40
+ // numeral in parentheses, `_few` (3-10) plural, `_many` (11-99) accusative
41
+ // singular. The base key keeps the «{{count}} مفرد(جمع)» marker for a call made
42
+ // without a count. The action-link arrow is not mirrored: it stays as in en,
43
+ // like marketplace.browseLink.
40
44
  perm: {
41
45
  facet: {
42
46
  none: "لا شيء",
43
47
  more: "+{{count}} المزيد",
44
48
  objects: "{{count}} كائن(كائنات)",
49
+ objects_zero: "{{count}} كائن",
45
50
  objects_one: "{{count}} كائن",
51
+ objects_two: "كائنان ({{count}})",
52
+ objects_few: "{{count}} كائنات",
53
+ objects_many: "{{count}} كائنًا",
54
+ objects_other: "{{count}} كائن",
46
55
  fields: "{{count}} قاعدة(قواعد) حقول",
56
+ fields_zero: "{{count}} قاعدة حقول",
47
57
  fields_one: "{{count}} قاعدة حقول",
58
+ fields_two: "قاعدتا حقول ({{count}})",
59
+ fields_few: "{{count}} قواعد حقول",
60
+ fields_many: "{{count}} قاعدة حقول",
61
+ fields_other: "{{count}} قاعدة حقول",
48
62
  rls: "{{count}} سياسة(سياسات) RLS",
63
+ rls_zero: "{{count}} سياسة RLS",
49
64
  rls_one: "{{count}} سياسة RLS",
65
+ rls_two: "سياستا RLS ({{count}})",
66
+ rls_few: "{{count}} سياسات RLS",
67
+ rls_many: "{{count}} سياسة RLS",
68
+ rls_other: "{{count}} سياسة RLS",
50
69
  tabs: "{{count}} قاعدة(قواعد) تبويب",
70
+ tabs_zero: "{{count}} قاعدة تبويب",
51
71
  tabs_one: "{{count}} قاعدة تبويب",
72
+ tabs_two: "قاعدتا تبويب ({{count}})",
73
+ tabs_few: "{{count}} قواعد تبويب",
74
+ tabs_many: "{{count}} قاعدة تبويب",
75
+ tabs_other: "{{count}} قاعدة تبويب",
52
76
  adminScope: "تم تكوين الإدارة المفوَّضة",
53
77
  designInStudio: "التصميم في Studio →",
54
78
  designInStudioHint: "التصميم في Studio",
@@ -66,8 +90,16 @@ const ar = {
66
90
  remove: 'إزالة {{label}}',
67
91
  selectFirst: 'اختر {{fields}} أولاً',
68
92
  selectRecord: 'اختيار سجل',
69
- recordCount: '{{count}} سجل',
70
- recordCountOne: 'سجل واحد',
93
+ // objectui#11445 — a count family: each of the six CLDR slots carries its
94
+ // own noun form. The base key, a count-invariant form, answers a call made
95
+ // without a count.
96
+ recordCount: 'عدد السجلات: {{count}}',
97
+ recordCount_zero: '{{count}} سجل',
98
+ recordCount_one: '{{count}} سجل',
99
+ recordCount_two: 'سجلان ({{count}})',
100
+ recordCount_few: '{{count}} سجلات',
101
+ recordCount_many: '{{count}} سجلًا',
102
+ recordCount_other: '{{count}} سجل',
71
103
  pageOf: 'صفحة {{current}} من {{total}}',
72
104
  filters: 'عوامل التصفية',
73
105
  clear: 'مسح',
@@ -84,7 +116,7 @@ const ar = {
84
116
  common: {
85
117
  addToFavorites: "إضافة إلى المفضلة",
86
118
  removeFromFavorites: "إزالة من المفضلة",
87
- loading: "جاري التحميل…",
119
+ loading: "جارٍ التحميل…",
88
120
  save: "حفظ",
89
121
  discard: "تجاهل",
90
122
  cancel: "إلغاء",
@@ -119,8 +151,16 @@ const ar = {
119
151
  closeChat: "إغلاق المحادثة",
120
152
  closePanel: "إغلاق اللوحة",
121
153
  resizeDrawer: "تغيير عرض اللوحة",
122
- itemCount: "{{count}} عناصر",
123
- itemCountOne: "{{count}} عنصر",
154
+ // objectui#11445 — a count family: each of the six CLDR slots carries its
155
+ // own noun form. The base key, a count-invariant form, answers a call made
156
+ // without a count.
157
+ itemCount: "عدد العناصر: {{count}}",
158
+ itemCount_zero: "{{count}} عنصر",
159
+ itemCount_one: "{{count}} عنصر",
160
+ itemCount_two: "عنصران ({{count}})",
161
+ itemCount_few: "{{count}} عناصر",
162
+ itemCount_many: "{{count}} عنصرًا",
163
+ itemCount_other: "{{count}} عنصر",
124
164
  toggleSidebar: "تبديل الشريط الجانبي",
125
165
  package: "الحزمة",
126
166
  done: "تم",
@@ -128,6 +168,16 @@ const ar = {
128
168
  record: "سجل",
129
169
  retry: "إعادة المحاولة",
130
170
  printDialogHint: "يفتح مربع حوار الطباعة في المتصفح (ليس تصديرًا إلى PDF)",
171
+ // The non-grid row ceiling's footnote (objectui#7210). Two keys because
172
+ // there are two conditions: a reported `total` states the fact with BOTH
173
+ // numbers, a missing one cannot name how many. Kept terse deliberately —
174
+ // this copy is eagerly loaded, and since objectui#7399 these bytes are
175
+ // budgeted by the `i18n-locales` chunk, not `framework`. ⛔ That ceiling's
176
+ // headroom is deliberately NOT restated here — it moves on every
177
+ // re-baseline, and the figure that was here went stale.
178
+ // `pnpm check:eager-closure` prints it.
179
+ rowCeilingNote: "يتم عرض أول {{shown}} من أصل {{total}} سجل. ضيّق عامل التصفية.",
180
+ rowCeilingNoteUnknownTotal: "يتم عرض أول {{shown}} سجل. ضيّق عامل التصفية.",
131
181
  },
132
182
  actions: {
133
183
  decisionOutput: {
@@ -139,6 +189,14 @@ const ar = {
139
189
  acknowledge: 'لقد حفظتها',
140
190
  copyAll: 'نسخ الكل',
141
191
  },
192
+ notAvailableHere: '"{{action}}" غير متاح في الصفحة الحالية.',
193
+ completedSuccessfully: 'اكتمل الإجراء بنجاح',
194
+ failed: 'فشل الإجراء',
195
+ parallelFailed: 'فشل إجراء متوازٍ واحد أو أكثر',
196
+ undo: 'تراجع',
197
+ undone: 'تم التراجع عن التغيير',
198
+ undoneOperation: 'تراجع: {{description}}',
199
+ redoneOperation: 'إعادة: {{description}}',
142
200
  },
143
201
  validation: {
144
202
  required: "{{field}} مطلوب",
@@ -156,19 +214,45 @@ const ar = {
156
214
  },
157
215
  form: {
158
216
  noPermissionToSave: "ليس لديك إذن لحفظ هذا السجل.",
217
+ noPermissionToCreate: "ليس لديك إذن لإنشاء سجلات {{object}}. الحقول للقراءة فقط.",
218
+ noPermissionToEdit: "ليس لديك إذن لتعديل سجلات {{object}}. الحقول للقراءة فقط.",
159
219
  submitFailed: "تعذّر الحفظ. يرجى المحاولة مرة أخرى.",
220
+ uploadInFlight: "انتظر حتى ينتهي الرفع قبل الحفظ.",
221
+ clearedOnHide: "تم مسح ما لم يعد ينطبق على القيم الحالية: {{fields}}",
222
+ visibleWhenFaulted: "تعذّر الإرسال: تعذّر تقييم قاعدة visibleWhen لـ {{fields}}. يجب إصلاح القاعدة قبل أن يصبح إرسال هذا النموذج ممكنًا.",
160
223
  discardTitle: "تجاهل التغييرات؟",
161
224
  discardMessage: "لديك تغييرات غير محفوظة. إذا أغلقت هذا النموذج الآن، ستفقد تعديلاتك.",
162
225
  // objectui#4024 — the create/edit dialog's `sr-only` accessible
163
226
  // description, used when the form declares no `description` of its own.
164
227
  dialogDescriptionFallback: "املأ حقول النموذج ثم أرسل أو ألغِ.",
228
+ deniedDescription: "ليس لديك إذن لتعديل هذا الحقل.",
229
+ masterDetail: {
230
+ loadingColumns: "جارٍ تحميل الأعمدة…",
231
+ subtotal: "المجموع الفرعي",
232
+ tax: "الضريبة ({{rate}}%)",
233
+ total: "الإجمالي",
234
+ lineItem: "بند",
235
+ rowTitle: "{{title}} — الصف {{row}}",
236
+ applyRow: "تطبيق",
237
+ editorDescription: "أدخل السجل وبنوده ثم احفظ.",
238
+ noChildObject: "لم يُكوَّن كائن فرعي لهذه المجموعة: عيّن {{property}} إلى الكائن الذي تسرد صفوفه.",
239
+ schemaUnavailable: "تعذّر تحميل مخطط {{object}}، لذا لا توجد أعمدة لعرضها في هذه المجموعة. تحقّق من أن الكائن موجود وقابل للقراءة، ثم أعد التحميل.",
240
+ noRelationshipField: "تعذّر تحديد كيفية ارتباط {{object}} بـ {{parent}}: لا يوجد فيه حقل lookup أو master_detail يشير إلى الكائن الأصل. عيّن {{property}} في هذه المجموعة إلى الحقل الذي يحمل السجل الأصل.",
241
+ },
242
+ lineItems: {
243
+ title: "البنود",
244
+ saveRecordFirst: "احفظ السجل أولًا لإضافة البنود.",
245
+ notLoaded: "لم يتم تحميل بنود هذا السجل.",
246
+ loadFailed: "تعذّر تحميل البنود",
247
+ saveFailed: "تعذّر حفظ البنود",
248
+ noChildObject: "لم يُكوَّن كائن فرعي لهذه اللوحة: عيّن {{property}} إلى الكائن الذي تسرد صفوفه.",
249
+ },
165
250
  keepEditing: "متابعة التحرير",
166
251
  discard: "تجاهل",
167
252
  conflictTitle: "تعارض في الحفظ",
168
253
  conflictMessage: "قام شخص آخر بتغيير هذا السجل أثناء تحريرك. الكتابة فوقه ستستبدل تغييراته بتغييراتك.",
169
254
  conflictLatestVersion: "وقت حفظه: {{time}}",
170
255
  conflictOverwrite: "الكتابة فوقه",
171
- addItem: "إضافة عنصر",
172
256
  removeItem: "إزالة عنصر",
173
257
  fieldRequired: "هذا الحقل مطلوب",
174
258
  invalidFormat: "صيغة غير صالحة",
@@ -186,6 +270,12 @@ const ar = {
186
270
  createSuccess: "تم إنشاء {{object}}",
187
271
  updateSuccess: "تم تحديث {{object}}",
188
272
  deleteSuccess: "تم حذف {{object}}",
273
+ created: "تم الإنشاء",
274
+ saved: "تم الحفظ",
275
+ savedNamed: "تم حفظ {{title}}",
276
+ submitted: "تم الإرسال",
277
+ errorLoading: "خطأ في تحميل النموذج",
278
+ navigateRefused: "تم رفض وجهة `navigateOnSuccess` المعلنة لهذا النموذج، لذلك لم يتم الانتقال.",
189
279
  fullscreen: {
190
280
  title: "تحرير النص",
191
281
  description: "حرّر قيمة النص الكاملة، ثم احفظ التغييرات أو ألغِها.",
@@ -210,6 +300,12 @@ const ar = {
210
300
  },
211
301
  relativeDate: {
212
302
  overdue: "متأخر {{count}} يوم",
303
+ overdue_zero: "متأخر {{count}} يوم",
304
+ overdue_one: "متأخر {{count}} يوم",
305
+ overdue_two: "متأخر يومين ({{count}})",
306
+ overdue_few: "متأخر {{count}} أيام",
307
+ overdue_many: "متأخر {{count}} يومًا",
308
+ overdue_other: "متأخر {{count}} يوم",
213
309
  },
214
310
  file: {
215
311
  dragDropHere: 'اسحب الملفات وأفلتها هنا',
@@ -226,6 +322,7 @@ const ar = {
226
322
  remove: 'إزالة {{name}}',
227
323
  exceedsMaxSize: '"{{name}}" يتجاوز الحجم الأقصى ({{max}} ميغابايت)',
228
324
  uploadFailed: 'فشل رفع "{{name}}": {{error}}',
325
+ uploadIncomplete: 'لم يكتمل رفع "{{name}}": لم يتم إرجاع معرّف الملف، ولم يُحفظ شيء',
229
326
  },
230
327
  richText: {
231
328
  format: "التنسيق: {{format}}",
@@ -253,6 +350,9 @@ const ar = {
253
350
  selectBusinessUnit: "اختر وحدة عمل",
254
351
  selectPosition: "اختر منصباً",
255
352
  selectUnitAndSubordinates: "اختر وحدة عمل",
353
+ selectField: "اختر حقل مستخدم",
354
+ noUserFields: "لا توجد حقول مستخدم في هذا الكائن",
355
+ fieldNotUserTyped: "{{name}} — ليس حقل مستخدم",
256
356
  },
257
357
  filterCondition: {
258
358
  selectObjectFirst: "اختر كائناً أولاً.",
@@ -263,6 +363,26 @@ const ar = {
263
363
  editAsJson: "التحرير بصيغة JSON",
264
364
  useVisualBuilder: "استخدام المُنشئ المرئي",
265
365
  },
366
+ object: {
367
+ invalidJson: "JSON غير صالح",
368
+ },
369
+ location: {
370
+ refusedFormat: "لم يتم الحفظ: أدخل زوجًا من خط العرض وخط الطول (مثال: 30.2741, 120.1551).",
371
+ refusedRange: "لم يتم الحفظ: {{detail}}",
372
+ latitude: "خط العرض",
373
+ longitude: "خط الطول",
374
+ refusedResidueOne: "لم يتم الحفظ: {{name}} «{{text}}» ليس رقمًا. أدخل أرقامًا عشرية عادية (مثال: 30.2741, 120.1551).",
375
+ refusedResidue: "لم يتم الحفظ: {{name}} «{{text}}» و{{otherName}} «{{otherText}}» ليسا رقمين. أدخل أرقامًا عشرية عادية (مثال: 30.2741, 120.1551).",
376
+ },
377
+ date: {
378
+ impossibleDay: "القيمة المحفوظة «{{value}}» ليست تاريخًا حقيقيًا. اختر تاريخًا لاستبدالها.",
379
+ },
380
+ dateTime: {
381
+ impossibleDay: "القيمة المحفوظة «{{value}}» ليست تاريخًا حقيقيًا. اختر تاريخًا ووقتًا لاستبدالها.",
382
+ },
383
+ number: {
384
+ badInput: "لم يتم الحفظ: النص في هذا المربع ليس رقمًا. أدخل رقمًا عشريًا عاديًا (مثال: {{example}}).",
385
+ },
266
386
  tags: {
267
387
  placeholder: "اكتب واضغط Enter للإضافة…",
268
388
  },
@@ -278,6 +398,16 @@ const ar = {
278
398
  characterCount: "عدد الأحرف: {{count}} من {{max}}",
279
399
  charactersRemaining: "الأحرف المتبقية: {{count}}",
280
400
  },
401
+ grid: {
402
+ addLine: "إضافة سطر",
403
+ noItems: "لا توجد عناصر",
404
+ noItemsAddHint: "لا توجد عناصر بعد — انقر على «{{label}}» للبدء.",
405
+ optionalColumns: "أعمدة اختيارية",
406
+ computed: "محسوب",
407
+ openRow: "فتح الصف",
408
+ duplicateRow: "تكرار الصف",
409
+ removeRow: "إزالة الصف",
410
+ },
281
411
  },
282
412
  table: {
283
413
  rowsPerPage: "صفوف في الصفحة",
@@ -306,23 +436,59 @@ const ar = {
306
436
  open: "فتح",
307
437
  search: "بحث…",
308
438
  modified: "{{count}} صف(صفوف) معدّل(ة)",
439
+ modified_zero: "{{count}} صف معدّل",
440
+ modified_one: "{{count}} صف معدّل",
441
+ modified_two: "صفان معدّلان ({{count}})",
442
+ modified_few: "{{count}} صفوف معدّلة",
443
+ modified_many: "{{count}} صفًا معدّلًا",
444
+ modified_other: "{{count}} صف معدّل",
309
445
  saveFailed: 'فشل الحفظ',
310
446
  selected: "{{count}} محدد(ة)",
447
+ selected_zero: "تم تحديد {{count}}",
448
+ selected_one: "تم تحديد {{count}}",
449
+ selected_two: "تم تحديد {{count}}",
450
+ selected_few: "تم تحديد {{count}}",
451
+ selected_many: "تم تحديد {{count}}",
452
+ selected_other: "تم تحديد {{count}}",
311
453
  edit: "تعديل",
312
454
  delete: "حذف",
313
455
  },
314
456
  grid: {
315
457
  bulkSelected: "تم تحديد {{count}}",
458
+ bulkSelected_zero: "تم تحديد {{count}}",
459
+ bulkSelected_one: "تم تحديد {{count}}",
460
+ bulkSelected_two: "تم تحديد {{count}}",
461
+ bulkSelected_few: "تم تحديد {{count}}",
462
+ bulkSelected_many: "تم تحديد {{count}}",
463
+ bulkSelected_other: "تم تحديد {{count}}",
316
464
  bulkSelectedAllMatches: "تم تحديد {{count}} (كل النتائج المطابقة)",
317
465
  bulkClear: "إلغاء التحديد",
318
466
  bulkAllOnPage: "تم تحديد جميع العناصر ({{count}}) في هذه الصفحة.",
467
+ bulkAllOnPage_zero: "تم تحديد جميع العناصر ({{count}}) في هذه الصفحة.",
468
+ bulkAllOnPage_one: "تم تحديد جميع العناصر ({{count}}) في هذه الصفحة.",
469
+ bulkAllOnPage_two: "تم تحديد جميع العناصر ({{count}}) في هذه الصفحة.",
470
+ bulkAllOnPage_few: "تم تحديد جميع العناصر ({{count}}) في هذه الصفحة.",
471
+ bulkAllOnPage_many: "تم تحديد جميع العناصر ({{count}}) في هذه الصفحة.",
472
+ bulkAllOnPage_other: "تم تحديد جميع العناصر ({{count}}) في هذه الصفحة.",
319
473
  bulkSelectAllMatching: "تحديد كل النتائج المطابقة ({{count}})",
320
474
  bulkAllMatchingSelected: "تم تحديد جميع السجلات المطابقة ({{count}}).",
321
475
  bulk: {
322
476
  confirmDefault: "سيُطبَّق هذا على {{count}} من السجلات.",
477
+ confirmDefault_zero: "سيُطبَّق هذا على {{count}} من السجلات.",
478
+ confirmDefault_one: "سيُطبَّق هذا على {{count}} من السجلات.",
479
+ confirmDefault_two: "سيُطبَّق هذا على {{count}} من السجلات.",
480
+ confirmDefault_few: "سيُطبَّق هذا على {{count}} من السجلات.",
481
+ confirmDefault_many: "سيُطبَّق هذا على {{count}} من السجلات.",
482
+ confirmDefault_other: "سيُطبَّق هذا على {{count}} من السجلات.",
323
483
  overLimit: "التحديد ({{count}}) يتجاوز حد الإجراء ({{limit}}). قلّل التحديد للمتابعة.",
324
484
  affectedRecords: "السجلات المتأثرة ({{count}}):",
325
485
  skippedIneligible: '{{count}} من السجلات المحددة غير مؤهلة لهذا الإجراء وسيتم تخطيها.',
486
+ skippedIneligible_zero: '{{count}} من السجلات المحددة غير مؤهلة لهذا الإجراء وسيتم تخطيها.',
487
+ skippedIneligible_one: '{{count}} من السجلات المحددة غير مؤهلة لهذا الإجراء وسيتم تخطيها.',
488
+ skippedIneligible_two: '{{count}} من السجلات المحددة غير مؤهلة لهذا الإجراء وسيتم تخطيها.',
489
+ skippedIneligible_few: '{{count}} من السجلات المحددة غير مؤهلة لهذا الإجراء وسيتم تخطيها.',
490
+ skippedIneligible_many: '{{count}} من السجلات المحددة غير مؤهلة لهذا الإجراء وسيتم تخطيها.',
491
+ skippedIneligible_other: '{{count}} من السجلات المحددة غير مؤهلة لهذا الإجراء وسيتم تخطيها.',
326
492
  rowFallback: "الصف {{index}}",
327
493
  andMore: "… و{{count}} أخرى",
328
494
  processed: "تمت معالجة {{count}} / {{total}}",
@@ -340,7 +506,6 @@ const ar = {
340
506
  undo: "تراجع",
341
507
  undoing: "جارٍ التراجع…",
342
508
  done: "تم",
343
- selectPlaceholder: "اختر…",
344
509
  loading: "جارٍ التحميل…",
345
510
  },
346
511
  actions: "إجراءات",
@@ -348,10 +513,10 @@ const ar = {
348
513
  delete: "حذف",
349
514
  export: "تصدير",
350
515
  exportAs: "تصدير كـ {{format}}",
351
- loading: "جاري تحميل الشبكة…",
516
+ loading: "جارٍ تحميل الشبكة…",
352
517
  errorLoading: "خطأ في تحميل الشبكة",
353
518
  pullToRefresh: "اسحب للتحديث",
354
- refreshing: "جاري التحديث…",
519
+ refreshing: "جارٍ التحديث…",
355
520
  openRecord: "فتح السجل",
356
521
  rowHeight: "ارتفاع الصف: {{mode}}",
357
522
  openMenu: "فتح القائمة",
@@ -359,6 +524,14 @@ const ar = {
359
524
  yes: "نعم",
360
525
  no: "لا",
361
526
  systemFields: "النظام",
527
+ // objectui#10881 — the grouped grid's two refusals: over a data source
528
+ // that cannot answer the group header query, and over rows a host
529
+ // handed in while declaring them one page of more. `queryGroupHeaders`
530
+ // is the member's name and stays untranslated.
531
+ grouping: {
532
+ needsHeaderQuery: "هذا العرض مُجمَّع، لكن مصدر بياناته لا يطبّق queryGroupHeaders، لذا لا يمكن عدّ المجموعات. أزِل التجميع لعرض السجلات.",
533
+ needsWholeRows: "يتطلب التجميع جميع السجلات، لكن هذه الشبكة تلقّت صفحة واحدة منها فقط، لذا لا يمكن عدّ المجموعات. مرّر جميع السجلات، أو دع الشبكة تجلبها من مصدر بيانات يطبّق queryGroupHeaders.",
534
+ },
362
535
  // objectui#4024 — column-footer aggregate prefixes, keyed by the spec's
363
536
  // `ColumnSummary` vocabulary. `pattern` owns the label/value join so this
364
537
  // pack controls its own separator and word order.
@@ -385,10 +558,18 @@ const ar = {
385
558
  },
386
559
  import: {
387
560
  downloadTemplate: "تنزيل القالب",
388
- downloadTemplateHint: "احصل على ملف CSV بالأعمدة الصحيحة (الحقول المطلوبة معلَّمة بـ *).",
561
+ downloadTemplateHint: "احصل على ملف Excel بالأعمدة التي يمكنك استيرادها (الحقول المطلوبة معلَّمة بـ *) مع تعليمات التعبئة.",
389
562
  templateFileName: "{{object}}-import-template",
563
+ templateDownloadFailed: "تعذّر تنزيل القالب. يرجى المحاولة مرة أخرى.",
564
+ templateNotPermitted: "ليست لديك صلاحية إنشاء سجلات لهذا الكائن، لذا فإن قالب الاستيراد غير متاح.",
390
565
  autoMatched: "تمت المطابقة تلقائيًا",
391
566
  autoMatchedSummary: "تمت مطابقة {{count}} عمودًا تلقائيًا — راجعها وعدّلها أدناه.",
567
+ autoMatchedSummary_zero: "تمت مطابقة {{count}} عمود تلقائيًا — راجِع وعدِّل أدناه.",
568
+ autoMatchedSummary_one: "تمت مطابقة {{count}} عمود تلقائيًا — راجِع وعدِّل أدناه.",
569
+ autoMatchedSummary_two: "تمت مطابقة عمودين ({{count}}) تلقائيًا — راجِع وعدِّل أدناه.",
570
+ autoMatchedSummary_few: "تمت مطابقة {{count}} أعمدة تلقائيًا — راجِع وعدِّل أدناه.",
571
+ autoMatchedSummary_many: "تمت مطابقة {{count}} عمودًا تلقائيًا — راجِع وعدِّل أدناه.",
572
+ autoMatchedSummary_other: "تمت مطابقة {{count}} عمود تلقائيًا — راجِع وعدِّل أدناه.",
392
573
  confidence: {
393
574
  high: "ثقة عالية",
394
575
  medium: "ثقة متوسطة",
@@ -401,8 +582,26 @@ const ar = {
401
582
  cancelImport: "إلغاء الاستيراد",
402
583
  importCancelled: "تم إلغاء الاستيراد",
403
584
  resultsTruncated: "عرض نتائج أول {{count}} صفًا (من أصل {{total}}).",
585
+ resultsTruncated_zero: "عرض نتائج الصفوف الأولى: {{count}} (من أصل {{total}}).",
586
+ resultsTruncated_one: "عرض نتائج الصفوف الأولى: {{count}} (من أصل {{total}}).",
587
+ resultsTruncated_two: "عرض نتائج الصفوف الأولى: {{count}} (من أصل {{total}}).",
588
+ resultsTruncated_few: "عرض نتائج الصفوف الأولى: {{count}} (من أصل {{total}}).",
589
+ resultsTruncated_many: "عرض نتائج الصفوف الأولى: {{count}} (من أصل {{total}}).",
590
+ resultsTruncated_other: "عرض نتائج الصفوف الأولى: {{count}} (من أصل {{total}}).",
404
591
  createdCount: "تم إنشاء {{count}}",
592
+ createdCount_zero: "تم إنشاء {{count}}",
593
+ createdCount_one: "تم إنشاء {{count}}",
594
+ createdCount_two: "تم إنشاء {{count}}",
595
+ createdCount_few: "تم إنشاء {{count}}",
596
+ createdCount_many: "تم إنشاء {{count}}",
597
+ createdCount_other: "تم إنشاء {{count}}",
405
598
  updatedCount: "تم تحديث {{count}}",
599
+ updatedCount_zero: "تم تحديث {{count}}",
600
+ updatedCount_one: "تم تحديث {{count}}",
601
+ updatedCount_two: "تم تحديث {{count}}",
602
+ updatedCount_few: "تم تحديث {{count}}",
603
+ updatedCount_many: "تم تحديث {{count}}",
604
+ updatedCount_other: "تم تحديث {{count}}",
406
605
  downloadFailed: "تنزيل الصفوف الفاشلة",
407
606
  options: "خيارات الاستيراد",
408
607
  writeMode: "عند تطابق صف مع سجل موجود",
@@ -450,6 +649,12 @@ const ar = {
450
649
  historyColResult: "النتيجة",
451
650
  historyColTime: "الوقت",
452
651
  errorCount: "{{count}} من الأخطاء",
652
+ errorCount_zero: "{{count}} من الأخطاء",
653
+ errorCount_one: "{{count}} من الأخطاء",
654
+ errorCount_two: "{{count}} من الأخطاء",
655
+ errorCount_few: "{{count}} من الأخطاء",
656
+ errorCount_many: "{{count}} من الأخطاء",
657
+ errorCount_other: "{{count}} من الأخطاء",
453
658
  undoImport: "التراجع عن الاستيراد",
454
659
  undoing: "جارٍ التراجع…",
455
660
  undoConfirm: "هل تريد التراجع عن هذا الاستيراد؟ ستُحذف السجلات التي أنشأها وتُستعاد السجلات التي حدّثها إلى قيمها السابقة.",
@@ -510,7 +715,19 @@ const ar = {
510
715
  mapped: "مُعيَّن",
511
716
  skipped: "مُتخطَّى",
512
717
  rowsWithErrors: "{{count}} صف(صفوف) بها أخطاء",
718
+ rowsWithErrors_zero: "{{count}} صف بها أخطاء",
719
+ rowsWithErrors_one: "{{count}} صف به أخطاء",
720
+ rowsWithErrors_two: "صفان بهما أخطاء ({{count}})",
721
+ rowsWithErrors_few: "{{count}} صفوف بها أخطاء",
722
+ rowsWithErrors_many: "{{count}} صفًا بها أخطاء",
723
+ rowsWithErrors_other: "{{count}} صف بها أخطاء",
513
724
  rowsCorrected: "{{count}} صف(صفوف) تم تصحيحها",
725
+ rowsCorrected_zero: "تم تصحيح {{count}} صف",
726
+ rowsCorrected_one: "تم تصحيح {{count}} صف",
727
+ rowsCorrected_two: "تم تصحيح صفين ({{count}})",
728
+ rowsCorrected_few: "تم تصحيح {{count}} صفوف",
729
+ rowsCorrected_many: "تم تصحيح {{count}} صفًا",
730
+ rowsCorrected_other: "تم تصحيح {{count}} صف",
514
731
  clickToFix: "— انقر على خلية مميزة للتعديل.",
515
732
  showingRows: "عرض {{shown}} من {{total}} صف",
516
733
  importing: "جارٍ الاستيراد… {{progress}}%",
@@ -518,11 +735,23 @@ const ar = {
518
735
  imported: "{{count}} مُستورَد(ة)",
519
736
  skippedCount: "{{count}} مُتخطَّى(ة)",
520
737
  moreErrors: "…و{{count}} خطأ(أخطاء) أخرى",
738
+ moreErrors_zero: "…و{{count}} خطأ آخر",
739
+ moreErrors_one: "…و{{count}} خطأ آخر",
740
+ moreErrors_two: "…وخطآن آخران ({{count}})",
741
+ moreErrors_few: "…و{{count}} أخطاء أخرى",
742
+ moreErrors_many: "…و{{count}} خطأً آخر",
743
+ moreErrors_other: "…و{{count}} خطأ آخر",
521
744
  cancel: "إلغاء",
522
745
  back: "رجوع",
523
746
  next: "التالي",
524
747
  close: "إغلاق",
525
748
  importNRows: "استيراد {{count}} صف",
749
+ importNRows_zero: "استيراد {{count}} صف",
750
+ importNRows_one: "استيراد {{count}} صف",
751
+ importNRows_two: "استيراد صفين ({{count}})",
752
+ importNRows_few: "استيراد {{count}} صفوف",
753
+ importNRows_many: "استيراد {{count}} صفًا",
754
+ importNRows_other: "استيراد {{count}} صف",
526
755
  importingProgress: "جارٍ الاستيراد…",
527
756
  requiredMark: "*",
528
757
  required: "مطلوب",
@@ -534,11 +763,41 @@ const ar = {
534
763
  month: "شهر",
535
764
  week: "أسبوع",
536
765
  day: "يوم",
537
- agenda: "جدول أعمال",
538
766
  allDay: "طوال اليوم",
539
- noEvents: "لا توجد أحداث",
540
767
  newEvent: "حدث جديد",
541
768
  moreEvents: "+{{count}} المزيد",
769
+ unscheduled: "غير مجدولة ({{count}})",
770
+ loading: "جارٍ تحميل التقويم…",
771
+ loadError: "خطأ: {{message}}",
772
+ configRequired: "إعداد التقويم مطلوب. يُرجى تحديد startDateField، وهو المفتاح المطلوب الوحيد للتقويم؛ ويُحلّ عنوان الحدث دون titleField.",
773
+ configRequiredHint: "هو ينتمي إلى كتلة calendar في العرض. صفحة الواجهة ليس لها فتحة تقويم خاصة بها: وجّه sourceView الخاص بها إلى عرض يعلن واحدة.",
774
+ eventDetails: "تفاصيل الحدث",
775
+ pullToRefresh: "اسحب للتحديث",
776
+ refreshing: "جارٍ التحديث…",
777
+ onDate: "في {{date}}",
778
+ eventTitle: "العنوان",
779
+ eventTitlePlaceholder: "ما موضوع هذا الحدث؟",
780
+ creating: "جارٍ الإنشاء…",
781
+ titleRequired: "العنوان مطلوب",
782
+ a11y: {
783
+ region: "التقويم",
784
+ grid: "شبكة التقويم",
785
+ goToToday: "الانتقال إلى اليوم",
786
+ previousPeriod: "الفترة السابقة",
787
+ nextPeriod: "الفترة التالية",
788
+ currentDate: "التاريخ الحالي: {{date}}",
789
+ dayCell: "{{date}}، عدد الأحداث: {{count}}",
790
+ dayCell_zero: "{{date}}، {{count}} حدث",
791
+ dayCell_one: "{{date}}، {{count}} حدث",
792
+ dayCell_two: "{{date}}، حدثان ({{count}})",
793
+ dayCell_few: "{{date}}، {{count}} أحداث",
794
+ dayCell_many: "{{date}}، {{count}} حدثًا",
795
+ dayCell_other: "{{date}}، عدد الأحداث: {{count}}",
796
+ resizeEventEnd: "تغيير نهاية الحدث",
797
+ resizeEventEndHint: "اسحب لتغيير تاريخ الانتهاء",
798
+ resizeStart: "تغيير وقت البدء",
799
+ resizeEnd: "تغيير وقت الانتهاء",
800
+ },
542
801
  },
543
802
  list: {
544
803
  firstRunTitle: "لا يوجد شيء هنا بعد",
@@ -580,8 +839,16 @@ const ar = {
580
839
  },
581
840
  refresh: "تحديث",
582
841
  loading: "جارٍ تحميل السجلات…",
583
- recordCount: "{{count}} سجلات",
584
- recordCountOne: "{{count}} سجل",
842
+ // objectui#11445 — a count family: each of the six CLDR slots carries its
843
+ // own noun form. The base key, a count-invariant form, answers a call made
844
+ // without a count.
845
+ recordCount: "عدد السجلات: {{count}}",
846
+ recordCount_zero: "{{count}} سجل",
847
+ recordCount_one: "{{count}} سجل",
848
+ recordCount_two: "سجلان ({{count}})",
849
+ recordCount_few: "{{count}} سجلات",
850
+ recordCount_many: "{{count}} سجلًا",
851
+ recordCount_other: "{{count}} سجل",
585
852
  addRecord: "إضافة سجل",
586
853
  tabs: "علامات التبويب",
587
854
  allRecords: "جميع السجلات",
@@ -613,7 +880,7 @@ const ar = {
613
880
  hideFieldsTitle: "إخفاء الحقول",
614
881
  dataLimitReached: "يتم عرض أول {{limit}} سجل. قد تتوفر بيانات إضافية.",
615
882
  viewSettings: "إعدادات العرض",
616
- viewSettingsHint: "التجميع واللون والكثافة والحقول المرئية.",
883
+ viewSettingsHint: "التجميع واللون والكثافة والحقول المرئية. ينطبق على جميع المستخدمين الذين يستخدمون هذا العرض.",
617
884
  addGroup: "إضافة حقل مجموعة",
618
885
  collapsedByDefault: "مطوي افتراضياً",
619
886
  removeGroup: "إزالة",
@@ -678,6 +945,17 @@ const ar = {
678
945
  },
679
946
  gantt: {
680
947
  rowLabel: "العناصر",
948
+ unusableRange: {
949
+ malformedDate: "نطاق تواريخ جانت غير صالح للاستخدام — {{path}} يساوي {{value}}، وهو ليس تاريخًا صالحًا. يجب أن تكون كل تواريخ جانت قابلة للتحليل: startDate و endDate لكل عنصر صف، بالإضافة إلى أي minDate / maxDate مثبّت في المخطط.",
950
+ malformedRow: "صفوف جانت غير صالحة للاستخدام — {{path}} يساوي {{value}}، وهو ليس على شكل صف. يقرأ جانت items كقائمة من الصفوف، وكل صف ككائن يحمل label و items خاصة به، و items كل صف كقائمة من الأشرطة؛ لا يمكن رسم null أو رقم أو سلسلة نصية أو كائن عادي في أي من هذه المواضع.",
951
+ inverted: "نطاق تواريخ جانت غير صالح للاستخدام — minDate {{minDate}} يقع بعد maxDate {{maxDate}}. يتجاوز minDate / maxDate المثبّت النطاق المحسوب من الصفوف، لذلك لا يحتوي هذا المحور على أي أعمدة ولا يمكن وضع أي شريط عليه؛ بدّل القيمتين.",
952
+ },
953
+ },
954
+ unsupported: {
955
+ objectBoundGantt: "النوع \"gantt\" غير مدعوم — المخطط الزمني المرتبط بكائن يعرض أنواع التغذية ({{variants}}). يحتاج مخطط جانت إلى صفوف صريحة، لكل منها عناصر items متداخلة خاصة به، لذلك لا يؤثر محور جانت (scale) هنا.",
956
+ },
957
+ unconfigured: {
958
+ noDateAxis: "محور تواريخ المخطط الزمني مطلوب — هذا العرض لا يعلن أي حقل تاريخ، والمخطط الزمني المرتبط بكائن لا يخترع حقلاً. أعلن أحد الحقول التالية: {{fields}}. الأول هو صيغة المواصفة، والبقية أسماء مستعارة قديمة.",
681
959
  },
682
960
  },
683
961
  gantt: {
@@ -695,6 +973,7 @@ const ar = {
695
973
  },
696
974
  aria: {
697
975
  taskList: "قائمة المهام",
976
+ refreshing: "جارٍ التحديث…",
698
977
  },
699
978
  tooltip: {
700
979
  days: "ي",
@@ -740,13 +1019,31 @@ const ar = {
740
1019
  conflict: {
741
1020
  title: "تعارض في الجدولة",
742
1021
  body: "يتعارض هذا النقل مع قيود التبعية. هل تريد إعادة جدولة {{count}} من المهام المتأثرة تلقائيًا؟",
1022
+ body_zero: "يتعارض هذا النقل مع قيود التبعية. هل تريد إعادة جدولة {{count}} من المهام المتأثرة تلقائيًا؟",
1023
+ body_one: "يتعارض هذا النقل مع قيود التبعية. هل تريد إعادة جدولة {{count}} من المهام المتأثرة تلقائيًا؟",
1024
+ body_two: "يتعارض هذا النقل مع قيود التبعية. هل تريد إعادة جدولة {{count}} من المهام المتأثرة تلقائيًا؟",
1025
+ body_few: "يتعارض هذا النقل مع قيود التبعية. هل تريد إعادة جدولة {{count}} من المهام المتأثرة تلقائيًا؟",
1026
+ body_many: "يتعارض هذا النقل مع قيود التبعية. هل تريد إعادة جدولة {{count}} من المهام المتأثرة تلقائيًا؟",
1027
+ body_other: "يتعارض هذا النقل مع قيود التبعية. هل تريد إعادة جدولة {{count}} من المهام المتأثرة تلقائيًا؟",
743
1028
  confirm: "إعادة الجدولة تلقائيًا",
744
1029
  cancel: "الإبقاء كما هو",
745
1030
  },
746
1031
  autoScheduleDlg: {
747
1032
  title: "الجدولة التلقائية",
748
1033
  body: "هل تريد تأخير {{count}} من المهام لتلبية روابط التبعية؟",
1034
+ body_zero: "هل تريد تأخير {{count}} من المهام لتلبية روابط التبعية؟",
1035
+ body_one: "هل تريد تأخير {{count}} من المهام لتلبية روابط التبعية؟",
1036
+ body_two: "هل تريد تأخير {{count}} من المهام لتلبية روابط التبعية؟",
1037
+ body_few: "هل تريد تأخير {{count}} من المهام لتلبية روابط التبعية؟",
1038
+ body_many: "هل تريد تأخير {{count}} من المهام لتلبية روابط التبعية؟",
1039
+ body_other: "هل تريد تأخير {{count}} من المهام لتلبية روابط التبعية؟",
749
1040
  skipped: "{{count}} من المهام المقفلة تخالف الروابط أيضًا وقد تم تخطيها.",
1041
+ skipped_zero: "{{count}} من المهام المقفلة تخالف الروابط أيضًا وقد تم تخطيها.",
1042
+ skipped_one: "{{count}} من المهام المقفلة تخالف الروابط أيضًا وقد تم تخطيها.",
1043
+ skipped_two: "{{count}} من المهام المقفلة تخالف الروابط أيضًا وقد تم تخطيها.",
1044
+ skipped_few: "{{count}} من المهام المقفلة تخالف الروابط أيضًا وقد تم تخطيها.",
1045
+ skipped_many: "{{count}} من المهام المقفلة تخالف الروابط أيضًا وقد تم تخطيها.",
1046
+ skipped_other: "{{count}} من المهام المقفلة تخالف الروابط أيضًا وقد تم تخطيها.",
750
1047
  confirm: "تطبيق",
751
1048
  cancel: "إلغاء",
752
1049
  none: "جميع التبعيات مستوفاة — لا شيء لإعادة جدولته.",
@@ -825,6 +1122,7 @@ const ar = {
825
1122
  tabActionsFor: "إجراءات العرض لـ {{name}}",
826
1123
  readonlyAriaLabel: "عرض للقراءة فقط",
827
1124
  readonlyTooltip: "عرض النظام — معرَّف في الكود، للقراءة فقط.",
1125
+ malformedFilter: "عامل تصفية طريقة العرض هذه غير صالح، لذا لا تُعرض أي سجلات: يتعذّر تطبيق الشرط {{subject}}.",
828
1126
  },
829
1127
  designer: {
830
1128
  undo: "تراجع",
@@ -851,8 +1149,16 @@ const ar = {
851
1149
  addReaction: "إضافة تفاعل",
852
1150
  pageHeaderActions: "إجراءات رأس الصفحة",
853
1151
  emojiPicker: "منتقي الرموز التعبيرية",
854
- reactionCount: "{{emoji}} {{count}} تفاعلات",
855
- reactionCountOne: "{{emoji}} {{count}} تفاعل",
1152
+ // objectui#11445 — a count family: each of the six CLDR slots carries its
1153
+ // own noun form. The base key, a count-invariant form, answers a call made
1154
+ // without a count.
1155
+ reactionCount: "{{emoji}} عدد التفاعلات: {{count}}",
1156
+ reactionCount_zero: "{{emoji}} {{count}} تفاعل",
1157
+ reactionCount_one: "{{emoji}} {{count}} تفاعل",
1158
+ reactionCount_two: "{{emoji}} تفاعلان ({{count}})",
1159
+ reactionCount_few: "{{emoji}} {{count}} تفاعلات",
1160
+ reactionCount_many: "{{emoji}} {{count}} تفاعلًا",
1161
+ reactionCount_other: "{{emoji}} {{count}} تفاعل",
856
1162
  recordDetail: "تفاصيل السجل",
857
1163
  recordDetailWithLabel: "تفاصيل {{label}}",
858
1164
  openAsFullPage: "فتح كصفحة كاملة",
@@ -870,7 +1176,7 @@ const ar = {
870
1176
  relatedRecords: "{{count}} سجلات",
871
1177
  relatedRecordOne: "{{count}} سجل",
872
1178
  noRelatedRecords: "لا توجد سجلات ذات صلة",
873
- loading: "جاري التحميل…",
1179
+ loading: "جارٍ التحميل…",
874
1180
  copyToClipboard: "نسخ إلى الحافظة",
875
1181
  copied: "تم النسخ!",
876
1182
  deleteConfirmation: "هل أنت متأكد أنك تريد حذف هذا السجل؟",
@@ -879,7 +1185,6 @@ const ar = {
879
1185
  viewAll: "عرض الكل",
880
1186
  new: "جديد",
881
1187
  add: "إضافة",
882
- emptyValue: "—",
883
1188
  comments: "التعليقات",
884
1189
  searchComments: "البحث في التعليقات…",
885
1190
  addCommentPlaceholder: "أضف تعليقاً… (Ctrl+Enter للإرسال)",
@@ -890,11 +1195,34 @@ const ar = {
890
1195
  unpin: "إلغاء التثبيت",
891
1196
  justNow: "الآن",
892
1197
  minutesAgo: "منذ {{count}} دقيقة",
1198
+ minutesAgo_zero: "منذ {{count}} دقيقة",
1199
+ minutesAgo_one: "منذ {{count}} دقيقة",
1200
+ minutesAgo_two: "منذ دقيقتين ({{count}})",
1201
+ minutesAgo_few: "منذ {{count}} دقائق",
1202
+ minutesAgo_many: "منذ {{count}} دقيقة",
1203
+ minutesAgo_other: "منذ {{count}} دقيقة",
893
1204
  hoursAgo: "منذ {{count}} ساعة",
1205
+ hoursAgo_zero: "منذ {{count}} ساعة",
1206
+ hoursAgo_one: "منذ {{count}} ساعة",
1207
+ hoursAgo_two: "منذ ساعتين ({{count}})",
1208
+ hoursAgo_few: "منذ {{count}} ساعات",
1209
+ hoursAgo_many: "منذ {{count}} ساعة",
1210
+ hoursAgo_other: "منذ {{count}} ساعة",
894
1211
  daysAgo: "منذ {{count}} يوم",
1212
+ daysAgo_zero: "منذ {{count}} يوم",
1213
+ daysAgo_one: "منذ {{count}} يوم",
1214
+ daysAgo_two: "منذ يومين ({{count}})",
1215
+ daysAgo_few: "منذ {{count}} أيام",
1216
+ daysAgo_many: "منذ {{count}} يومًا",
1217
+ daysAgo_other: "منذ {{count}} يوم",
895
1218
  dropFilesToUpload: "اسحب الملفات هنا أو انقر للرفع",
896
1219
  attachmentCount: "{{count}} مرفق",
897
- attachmentCountPlural: "{{count}} مرفقات",
1220
+ attachmentCount_zero: "{{count}} مرفق",
1221
+ attachmentCount_one: "{{count}} مرفق",
1222
+ attachmentCount_two: "مرفقان ({{count}})",
1223
+ attachmentCount_few: "{{count}} مرفقات",
1224
+ attachmentCount_many: "{{count}} مرفقًا",
1225
+ attachmentCount_other: "{{count}} مرفق",
898
1226
  removeAttachment: "إزالة المرفق",
899
1227
  // Record Attachments panel (enable.files, objectstack#4358)
900
1228
  attachments: "المرفقات",
@@ -912,11 +1240,6 @@ const ar = {
912
1240
  attachmentsLoadFailed: "تعذر تحميل مرفقات هذا السجل.",
913
1241
  attachmentsApiUnavailable: "قائمة المرفقات غير متاحة على هذا الكائن.",
914
1242
  retryLoadAttachments: "إعادة المحاولة",
915
- unifiedDiff: "عرض موحد",
916
- sideBySideDiff: "عرض جنباً إلى جنب",
917
- noChanges: "لا توجد تغييرات",
918
- previousVersion: "السابق",
919
- currentVersion: "الحالي",
920
1243
  discussion: "المناقشة",
921
1244
  showDiscussion: "إظهار المناقشة ({{count}})",
922
1245
  hideDiscussion: "إخفاء المناقشة",
@@ -931,25 +1254,39 @@ const ar = {
931
1254
  writeComment: "اكتب تعليقاً…",
932
1255
  subscribedTooltip: "مشترك — انقر لإلغاء الاشتراك",
933
1256
  unsubscribedTooltip: "الاشتراك في الإشعارات",
934
- firstRecord: "السجل الأول (Home)",
935
- previousRecordKey: "السجل السابق (←)",
936
- nextRecordKey: "السجل التالي (→)",
937
- lastRecord: "السجل الأخير (End)",
938
1257
  noRecords: "لا توجد سجلات",
939
- searchWhileNavigating: "البحث أثناء التصفح",
940
- searchRecords: "البحث في السجلات…",
941
1258
  allActivity: "كل النشاط",
942
1259
  commentsOnly: "التعليقات فقط",
943
1260
  fieldChangesFilter: "تغييرات الحقول",
944
1261
  tasksOnly: "المهام فقط",
945
1262
  leaveCommentPlaceholder: "اترك تعليقاً… (Ctrl+Enter للإرسال)",
946
1263
  noActivity: "لا يوجد نشاط مسجل",
1264
+ activityAccessDenied: "ليس لديك صلاحية عرض نشاط هذا السجل.",
1265
+ commentsAccessDenied: "ليس لديك صلاحية عرض التعليقات على هذا السجل.",
1266
+ // objectui#7149 — the rest of `ActivityTimeline`. The four chip labels the
1267
+ // `detail.*` pack did not already name, and the `formatFieldChange`
1268
+ // sentences, which are assembled in code and so need interpolation holes.
1269
+ allFilter: 'الكل',
1270
+ createsFilter: 'عمليات الإنشاء',
1271
+ deletesFilter: 'عمليات الحذف',
1272
+ statusChangesFilter: 'تغييرات الحالة',
1273
+ activityEmptyValue: '(فارغ)',
1274
+ activityFieldChanged: 'غيّر {{field}} من "{{old}}" إلى "{{new}}"',
1275
+ activityCreated: 'أنشأ هذا السجل',
1276
+ activityDeleted: 'حذف هذا السجل',
1277
+ activityStatusChanged: 'غيّر الحالة إلى "{{value}}"',
1278
+ activityUpdated: 'حدّث السجل',
947
1279
  loadMore: "تحميل المزيد",
948
1280
  edited: "(معدل)",
949
1281
  via: "عبر {{source}}",
950
1282
  viewSource: "عرض المصدر",
951
1283
  replyCount: "{{count}} رد",
952
- replyCountPlural: "{{count}} ردود",
1284
+ replyCount_zero: "{{count}} رد",
1285
+ replyCount_one: "{{count}} رد",
1286
+ replyCount_two: "ردّان ({{count}})",
1287
+ replyCount_few: "{{count}} ردود",
1288
+ replyCount_many: "{{count}} ردًّا",
1289
+ replyCount_other: "{{count}} رد",
953
1290
  replyPlaceholder: "رد…",
954
1291
  filterActivity: "تصفية النشاط",
955
1292
  openDiscussion: "فتح لوحة المناقشة",
@@ -964,6 +1301,7 @@ const ar = {
964
1301
  writeStrippedReadonly: "للقراءة فقط، لذلك لم تُطبَّق: {{fields}}",
965
1302
  writeStrippedByState: "غير قابلة للتعديل في الحالة الحالية لهذا السجل، لذلك لم تُطبَّق: {{fields}}",
966
1303
  writeStrippedPrimaryKey: "معرّف السجل لا يمكن تغييره عند الحفظ، لذلك لم تُطبَّق: {{fields}}",
1304
+ writeStrippedComputed: "يحسبها الخادم بواسطة صيغة، لذلك لم تُطبَّق القيمة المُرسَلة: {{fields}}",
967
1305
  writeStrippedUnknownReason: "لم تُطبَّق من قِبل الخادم: {{fields}}",
968
1306
  approvalPendingEditable: "قيد الموافقة · قابل للتعديل",
969
1307
  approvalPendingTooltip: "يحتوي هذا السجل على طلب موافقة معلق، لكن هذه الخطوة لا تزال تسمح بالتعديل",
@@ -985,6 +1323,8 @@ const ar = {
985
1323
  pathStageLostUpcoming: '{{stage}}، خاسرة، لم يتم الوصول إليها',
986
1324
  pathStageWonUpcoming: '{{stage}}، المرحلة الهدف، لم يتم الوصول إليها',
987
1325
  linkCopied: "تم نسخ الرابط إلى الحافظة",
1326
+ commentFailed: "لم يُنشر تعليقك. لم يُحفظ أي شيء — يُرجى المحاولة مرة أخرى.",
1327
+ reactionFailed: "لم يُحفظ تفاعلك. يُرجى المحاولة مرة أخرى.",
988
1328
  linkCopyFailed: "فشل نسخ الرابط",
989
1329
  cancel: "إلغاء",
990
1330
  cancelEdit: "تجاهل التغييرات",
@@ -1014,40 +1354,81 @@ const ar = {
1014
1354
  sortBy: "ترتيب حسب",
1015
1355
  filterPlaceholder: "تصفية…",
1016
1356
  highlightFields: "الحقول الرئيسية",
1357
+ highlightsLabel: "الحقول الرئيسية للسجل",
1017
1358
  createdBy: "أنشأه",
1018
1359
  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.
1360
+ // objectui#3863 — base key, answering only a call made without a count: since
1361
+ // objectui#11432 every ar category has its own slot — `_zero` and `_other`
1362
+ // (100+) singular, `_two` dual with the numeral in parentheses, `_few` (3-10)
1363
+ // the plural agreement, `_many` (11-99) accusative singular. The adjective
1364
+ // agrees with the masculine noun it stands for, as `_one` does.
1024
1365
  showEmptyRelated: "+ {{count}} فارغ(فارغة)",
1366
+ showEmptyRelated_zero: "+ {{count}} فارغ",
1025
1367
  showEmptyRelated_one: "+ {{count}} فارغ",
1026
- showEmptyRelated_other: "+ {{count}} فارغة",
1368
+ showEmptyRelated_two: "+ فارغان ({{count}})",
1369
+ showEmptyRelated_few: "+ {{count}} فارغة",
1370
+ showEmptyRelated_many: "+ {{count}} فارغًا",
1371
+ showEmptyRelated_other: "+ {{count}} فارغ",
1027
1372
  copyEmail: "نسخ البريد الإلكتروني",
1028
1373
  copyPhone: "نسخ الهاتف",
1029
1374
  copyRecordId: "نسخ معرف السجل",
1030
1375
  showEmptyFields: "إظهار {{count}} حقل(حقول) فارغة",
1376
+ showEmptyFields_zero: "إظهار {{count}} حقل فارغ",
1377
+ showEmptyFields_one: "إظهار {{count}} حقل فارغ",
1378
+ showEmptyFields_two: "إظهار حقلين فارغين ({{count}})",
1379
+ showEmptyFields_few: "إظهار {{count}} حقول فارغة",
1380
+ showEmptyFields_many: "إظهار {{count}} حقلًا فارغًا",
1381
+ showEmptyFields_other: "إظهار {{count}} حقل فارغ",
1031
1382
  hideEmptyFields: "إخفاء الحقول الفارغة",
1032
1383
  noValue: "لا قيمة",
1384
+ unresolvedReference: "مرجع غير مُحلّل: لم يتم تحويل {{value}} إلى مستخدم",
1385
+ unresolvedLookupReference: "مرجع غير مُحلّل: لم يتم تحويل {{value}} إلى سجل في هذه الشاشة",
1386
+ repeaterItemCount: "{{count}} عنصر (عناصر)",
1387
+ repeaterItemCount_zero: "{{count}} عنصر",
1388
+ repeaterItemCount_one: "{{count}} عنصر",
1389
+ repeaterItemCount_two: "عنصران ({{count}})",
1390
+ repeaterItemCount_few: "{{count}} عناصر",
1391
+ repeaterItemCount_many: "{{count}} عنصرًا",
1392
+ repeaterItemCount_other: "{{count}} عنصر",
1393
+ fileCount: "{{count}} ملف (ملفات)",
1394
+ fileCount_zero: "{{count}} ملف",
1395
+ fileCount_one: "{{count}} ملف",
1396
+ fileCount_two: "ملفان ({{count}})",
1397
+ fileCount_few: "{{count}} ملفات",
1398
+ fileCount_many: "{{count}} ملفًا",
1399
+ fileCount_other: "{{count}} ملف",
1033
1400
  },
1034
1401
  chart: {
1035
- noData: "لا تتوفر بيانات للرسم البياني",
1036
- loading: "جاري تحميل الرسم البياني…",
1402
+ loading: "جارٍ تحميل الرسم البياني…",
1403
+ refreshing: "جارٍ التحديث…",
1037
1404
  nullCategory: "(غير محدد)",
1038
- },
1039
- map: {
1040
- searchLocations: "البحث عن المواقع…",
1041
- locationDetails: "تفاصيل الموقع",
1042
- markersCount: "{{count}} علامة",
1043
- invalidCoordinates: "{{count}} سجل بإحداثيات مفقودة أو غير صالحة مستبعد من الخريطة.",
1044
- invalidCoordinatesPlural: "{{count}} سجلات بإحداثيات مفقودة أو غير صالحة مستبعدة من الخريطة.",
1405
+ scatterOneMeasure: "المخطط المبعثر يرسم مقياسًا واحدًا فقط. أبقِ سلسلة واحدة:",
1406
+ unconfigured: {
1407
+ noCategoryAxis: "محور فئات الرسم البياني مطلوب — الرسم البياني المرتبط بكائن لا يخترع محورًا. أعلن أحد التالي:",
1408
+ },
1045
1409
  },
1046
1410
  dashboard: {
1047
- noRows: "لا توجد صفوف",
1411
+ // objectui#7063 — the DEFAULT empty state every dashboard widget renders
1412
+ // when its query SUCCEEDED and returned nothing. It replaced the terse
1413
+ // per-widget `noRows` / `noDataAvailable` fragments at the render site;
1414
+ // objectui#7125 deleted those two keys from all ten packs once nothing
1415
+ // read them. The copy here has to read as a state rather than a failure,
1416
+ // which is why it says the widget loaded. `sourceLabel` carries its own
1417
+ // punctuation so the call site concatenates no separator (see
1418
+ // `WidgetEmptyState`).
1419
+ empty: {
1420
+ title: "لا توجد بيانات بعد",
1421
+ message: "تم تحميل هذه الأداة بنجاح، لكن الاستعلام لم يُرجع أي سجلات بعد.",
1422
+ sourceLabel: "مصدر البيانات:",
1423
+ },
1048
1424
  loading: "جارٍ التحميل…",
1425
+ refreshing: "جارٍ التحديث…",
1426
+ refreshAll: "تحديث الكل",
1427
+ refreshDashboard: "تحديث لوحة القيادة",
1049
1428
  pickMeasures: "اختر المقاييس (القيم) لأداة مجموعة البيانات هذه.",
1050
1429
  datasetUnsupported: "مصدر البيانات هذا لا يدعم استعلامات مجموعات البيانات.",
1430
+ widgetForbiddenTitle: "لا تملك صلاحية الوصول",
1431
+ widgetForbiddenMessage: "ليست لديك صلاحية لعرض البيانات الخاصة بهذه الأداة.",
1051
1432
  details: "التفاصيل",
1052
1433
  exportCsv: "تصدير CSV",
1053
1434
  openInList: "فتح في القائمة",
@@ -1075,12 +1456,10 @@ const ar = {
1075
1456
  },
1076
1457
  },
1077
1458
  addWidget: "إضافة أداة",
1078
- removeWidget: "إزالة أداة",
1079
1459
  editLayout: "تعديل التخطيط",
1080
1460
  saveLayout: "حفظ التخطيط",
1081
1461
  resetLayout: "إعادة تعيين التخطيط",
1082
1462
  total: "الإجمالي",
1083
- noDataAvailable: "لا بيانات متاحة",
1084
1463
  noDataSourceFor: "لا مصدر بيانات لـ",
1085
1464
  config: {
1086
1465
  breadcrumb: {
@@ -1202,10 +1581,6 @@ const ar = {
1202
1581
  appDescription: "الوصف",
1203
1582
  appIcon: "الأيقونة",
1204
1583
  template: "القالب",
1205
- layout: "التخطيط",
1206
- layoutSidebar: "الشريط الجانبي",
1207
- layoutHeader: "الرأس",
1208
- layoutEmpty: "فارغ",
1209
1584
  selectObjects: "تحديد الكائنات",
1210
1585
  searchObjects: "البحث في الكائنات…",
1211
1586
  selectAll: "تحديد الكل",
@@ -1214,7 +1589,6 @@ const ar = {
1214
1589
  addGroup: "إضافة مجموعة",
1215
1590
  addUrl: "إضافة URL",
1216
1591
  addSeparator: "إضافة فاصل",
1217
- noNavItems: "لا توجد عناصر تنقل بعد.",
1218
1592
  logoUrl: "Logo URL",
1219
1593
  primaryColor: "اللون الأساسي",
1220
1594
  faviconUrl: "Favicon URL",
@@ -1241,13 +1615,12 @@ const ar = {
1241
1615
  appearance: "المظهر",
1242
1616
  rowHeight: "ارتفاع الصف",
1243
1617
  livePreview: "معاينة مباشرة",
1244
- stepBasicDesc: "الاسم والعنوان والتخطيط",
1618
+ stepBasicDesc: "الاسم والعنوان والأيقونة",
1245
1619
  stepObjectsDesc: "اختيار كائنات الأعمال",
1246
1620
  stepNavigationDesc: "بناء شجرة التنقل",
1247
1621
  stepBrandingDesc: "الشعار والألوان والأيقونة",
1248
1622
  noObjectsFound: "لم يتم العثور على كائنات.",
1249
1623
  noNavItemsHint: "لا توجد عناصر تنقل بعد. حدد كائنات في الخطوة السابقة أو أضف عناصر يدويًا.",
1250
- separator: "فاصل",
1251
1624
  separatorLabel: "— فاصل —",
1252
1625
  newGroup: "مجموعة جديدة",
1253
1626
  newLink: "رابط جديد",
@@ -1281,6 +1654,7 @@ const ar = {
1281
1654
  navTypeSeparator: "فاصل",
1282
1655
  navTypeAction: "إجراء",
1283
1656
  navTypeComponent: "مكوّن",
1657
+ navTypeDoc: "مستند",
1284
1658
  navEditIcon: "تعديل الأيقونة",
1285
1659
  navToggleVisible: "تبديل الرؤية",
1286
1660
  navHidden: "مخفي",
@@ -1358,11 +1732,8 @@ const ar = {
1358
1732
  defaultValue: "القيمة الافتراضية",
1359
1733
  placeholder: "نص تلميحي",
1360
1734
  referenceTo: "مرجع إلى",
1361
- formula: "صيغة",
1362
1735
  options: "خيارات",
1363
1736
  addOption: "إضافة خيار",
1364
- validationRules: "قواعد التحقق",
1365
- addRule: "إضافة قاعدة",
1366
1737
  systemBadge: "النظام",
1367
1738
  ungrouped: "عام",
1368
1739
  deleteConfirmTitle: "حذف الحقل؟",
@@ -1381,7 +1752,29 @@ const ar = {
1381
1752
  },
1382
1753
  },
1383
1754
  console: {
1755
+ studio: {
1756
+ backToHome: "العودة إلى الرئيسية",
1757
+ },
1384
1758
  saveAdvisoryTitle: "تم الحفظ — أنتج فحص التأليف {{count}} ملاحظة إرشادية",
1759
+ saveAdvisoryTitle_zero: "تم الحفظ — أنتج فحص التأليف {{count}} ملاحظة إرشادية",
1760
+ saveAdvisoryTitle_one: "تم الحفظ — أنتج فحص التأليف {{count}} ملاحظة إرشادية",
1761
+ saveAdvisoryTitle_two: "تم الحفظ — أنتج فحص التأليف ملاحظتين إرشاديتين ({{count}})",
1762
+ saveAdvisoryTitle_few: "تم الحفظ — أنتج فحص التأليف {{count}} ملاحظات إرشادية",
1763
+ saveAdvisoryTitle_many: "تم الحفظ — أنتج فحص التأليف {{count}} ملاحظة إرشادية",
1764
+ saveAdvisoryTitle_other: "تم الحفظ — أنتج فحص التأليف {{count}} ملاحظة إرشادية",
1765
+ publishAdvisoryTitle: "تم النشر — أنتج فحص التأليف {{count}} ملاحظة إرشادية",
1766
+ publishAdvisoryTitle_zero: "تم النشر — أنتج فحص التأليف {{count}} ملاحظة إرشادية",
1767
+ publishAdvisoryTitle_one: "تم النشر — أنتج فحص التأليف {{count}} ملاحظة إرشادية",
1768
+ publishAdvisoryTitle_two: "تم النشر — أنتج فحص التأليف ملاحظتين إرشاديتين ({{count}})",
1769
+ publishAdvisoryTitle_few: "تم النشر — أنتج فحص التأليف {{count}} ملاحظات إرشادية",
1770
+ publishAdvisoryTitle_many: "تم النشر — أنتج فحص التأليف {{count}} ملاحظة إرشادية",
1771
+ publishAdvisoryTitle_other: "تم النشر — أنتج فحص التأليف {{count}} ملاحظة إرشادية",
1772
+ importMappingsUnavailable: "تعذّر تحميل تعيينات الاستيراد المحفوظة لـ {{object}}",
1773
+ importMappingsRefused: "رفض الخادم هذا الطلب، لذلك فإن هذه القائمة فارغة لأنه تعذّرت قراءتها، لا لأنه لا يوجد شيء مسجَّل. سجّل الدخول مرة أخرى أو اطلب صلاحية الوصول من المسؤول.",
1774
+ importMappingsUnreadable: "هذه القائمة فارغة لأنه تعذّرت قراءتها، لا لأنه لا يوجد شيء مسجَّل. أعد المحاولة، وأبلغ عن المشكلة إذا استمرت.",
1775
+ savedViewsUnavailable: "تعذّر تحميل العروض المحفوظة لـ {{object}}",
1776
+ savedViewsRefused: "رفض الخادم هذا الطلب، لذلك فإن هذه القائمة فارغة لأنه تعذّرت قراءتها، لا لأن هذا الكائن ليس لديه عروض محفوظة. سجّل الدخول مرة أخرى أو اطلب صلاحية الوصول من المسؤول.",
1777
+ savedViewsUnreadable: "هذه القائمة فارغة لأنه تعذّرت قراءتها، لا لأن هذا الكائن ليس لديه عروض محفوظة. أعد المحاولة، وأبلغ عن المشكلة إذا استمرت.",
1385
1778
  settingsHub: {
1386
1779
  title: "الإعدادات",
1387
1780
  subtitle: "اضبط مساحة العمل والتكاملات وأعلام الميزات.",
@@ -1442,9 +1835,24 @@ const ar = {
1442
1835
  statusFull: "تم بلوغ الحد",
1443
1836
  resetsDaily: "تُعاد التهيئة الليلة",
1444
1837
  resetsMonthly: "تُعاد التهيئة في الدورة القادمة",
1838
+ resetsWeeklyDays: "{{count}} يوم(أيام) حتى إعادة التعيين",
1839
+ resetsWeeklyDays_zero: "{{count}} يوم حتى إعادة التعيين",
1840
+ resetsWeeklyDays_one: "{{count}} يوم حتى إعادة التعيين",
1841
+ resetsWeeklyDays_two: "يومان ({{count}}) حتى إعادة التعيين",
1842
+ resetsWeeklyDays_few: "{{count}} أيام حتى إعادة التعيين",
1843
+ resetsWeeklyDays_many: "{{count}} يومًا حتى إعادة التعيين",
1844
+ resetsWeeklyDays_other: "{{count}} يوم حتى إعادة التعيين",
1845
+ resetsWeeklyHours: "{{count}} ساعة(ساعات) حتى إعادة التعيين",
1846
+ resetsWeeklyHours_zero: "{{count}} ساعة حتى إعادة التعيين",
1847
+ resetsWeeklyHours_one: "{{count}} ساعة حتى إعادة التعيين",
1848
+ resetsWeeklyHours_two: "ساعتان ({{count}}) حتى إعادة التعيين",
1849
+ resetsWeeklyHours_few: "{{count}} ساعات حتى إعادة التعيين",
1850
+ resetsWeeklyHours_many: "{{count}} ساعة حتى إعادة التعيين",
1851
+ resetsWeeklyHours_other: "{{count}} ساعة حتى إعادة التعيين",
1445
1852
  ctaUpgrade: "قم بالترقية للمتابعة",
1446
1853
  ctaTopUp: "أضف أرصدة للمتابعة",
1447
1854
  ariaLabel: "استخدام الذكاء الاصطناعي: {{status}}",
1855
+ breakdownTitle: "المستخدَم حتى الآن",
1448
1856
  },
1449
1857
  workspaceTitle: "مساحة عمل الذكاء الاصطناعي",
1450
1858
  workspaceSubtitle: "اسأل وافحص واستأنف المحادثات",
@@ -1454,6 +1862,31 @@ const ar = {
1454
1862
  share: "مشاركة",
1455
1863
  shareTitle: "مشاركة هذه المحادثة",
1456
1864
  shareDisabledTitle: "ابدأ المحادثة لتفعيل المشاركة",
1865
+ buildDoctor: "تشخيص البناء",
1866
+ buildDoctorTitle: "تشخيص البناء — ما الذي طُبِّق فعلًا؟",
1867
+ buildDoctorDisabledTitle: "أرسل رسالة أولًا",
1868
+ buildDoctorDrawer: {
1869
+ description: 'ما ادّعاه الوكيل مقابل ما هو فعّال فعلًا. تشخيص للقراءة فقط.',
1870
+ reconciling: 'جارٍ المطابقة…',
1871
+ notAvailable: 'غير متاح — لم يتم العثور على المحادثة أو ليست لديك صلاحية.',
1872
+ untitled: '(بدون عنوان)',
1873
+ summary: 'الجولات: {{turns}} · الرسائل: {{messages}} · الرموز: {{tokens}} · LLM: {{seconds}} ث',
1874
+ allLive: 'جميع التغييرات التي جرت محاولتها ({{count}}) فعّالة — لم يُفقد شيء.',
1875
+ discrepancies: 'عدد التناقضات: {{count}} — ما قالته المحادثة لا يطابق ما هو فعّال.',
1876
+ orphanedTitle: 'مقترح ولكن لم يُطبَّق أبدًا',
1877
+ orphanedHint: 'بطاقة تأكيد اقترحها الوكيل ولكن لم تطبّقها أي جولة لاحقة — فُقد التغيير بصمت.',
1878
+ missingTitle: 'مُدّعى ولكنه مفقود',
1879
+ missingHint: 'ذكرت نتيجة أداة أنه تم التطبيق، لكن العنصر غير فعّال في sys_metadata.',
1880
+ toolErrorsTitle: 'أخطاء الأدوات',
1881
+ toolErrorsHint: 'استدعاءات الأدوات التي أعادت خطأً أثناء البناء.',
1882
+ verifyTitle: 'فحص البناء (verify_build)',
1883
+ yourApp: 'تطبيقك:',
1884
+ noIssues: 'عدد المشكلات: 0',
1885
+ issueCount: 'عدد المشكلات: {{count}}',
1886
+ platformNoise: 'تم إخفاء {{count}} من نتائج المنصة sys_*',
1887
+ pendingActions: 'الإجراءات المعلّقة',
1888
+ timeline: 'المخطط الزمني ({{count}})',
1889
+ },
1457
1890
  newChat: "جديدة",
1458
1891
  searchChats: "البحث في المحادثات…",
1459
1892
  noChatsYet: "لا توجد محادثات بعد",
@@ -1483,7 +1916,7 @@ const ar = {
1483
1916
  empty: {
1484
1917
  build: {
1485
1918
  title: "الإنشاء بالذكاء الاصطناعي",
1486
- description: "صف تطبيقًا أو سير عمل بلغة بسيطة — سأعدّ مسودة الكائنات والشاشات والأتمتة، ثم تراجعها وتنشرها.",
1919
+ description: "صف تطبيقًا بلغة بسيطة — سأعدّ مسودة الكائنات والشاشات والبيانات النموذجية، ثم تراجعها وتنشرها.",
1487
1920
  },
1488
1921
  ask: {
1489
1922
  title: "اسأل بياناتك",
@@ -1492,7 +1925,7 @@ const ar = {
1492
1925
  editApp: {
1493
1926
  title: "تحرير «{{app}}»",
1494
1927
  titleGeneric: "تحرير هذا التطبيق",
1495
- description: "ما الذي تريد تغييره؟ سأعدّل هذا التطبيق في مكانه — إضافة حقل أو كائن أو عرض أو أتمتة، أو تعديل ما هو موجود.",
1928
+ description: "ما الذي تريد تغييره؟ سأعدّل هذا التطبيق في مكانه — إضافة حقل أو كائن أو عرض أو لوحة معلومات، أو تعديل ما هو موجود.",
1496
1929
  },
1497
1930
  },
1498
1931
  clearConversation: "مسح",
@@ -1545,23 +1978,41 @@ const ar = {
1545
1978
  recentRecords: "اذكر أحدث 5 سجلات تم إنشاؤها.",
1546
1979
  recordCounts: "احسب عدد السجلات لكل كائن.",
1547
1980
  },
1981
+ // cloud#1984 — these five chips are the maker's own recommendations, so
1982
+ // they may only ask for what ADR-0112 v1 BUILDS: objects, fields, views
1983
+ // (grid/kanban/calendar/gallery), pages, dashboards and sample data. No
1984
+ // wording that promises autonomous behaviour (alert / remind / notify /
1985
+ // automate / status workflow) — v1 has no flows, actions or schedules, and
1986
+ // the model silently degrades such a request into a board or a filtered
1987
+ // view, so the chip would promise an alert and deliver a page. REVERT to
1988
+ // the automation wording when ADR-0112 v2 re-adds flows and actions.
1548
1989
  metadataAssistant: {
1549
- buildCrm: "أنشئ نظام إدارة علاقات عملاء للمبيعات — عملاء وجهات اتصال ومسار صفقات يمكنني تجميعه حسب المرحلة.",
1550
- buildApp: "أنشئ متتبّع مشاريع — مشاريع ومهام بمسؤولين وتواريخ استحقاق ولوحة حسب الحالة.",
1551
- buildFlow: "صمّم مكتب دعم — تذاكر بأولوية وسير عمل للحالات وروابط بالعملاء.",
1552
- buildInventory: "أنشئ تطبيق مخزون — منتجات ومستويات مخزون وموردين وتنبيه لانخفاض المخزون.",
1553
- buildRecruiting: "أنشئ متتبّع متقدمين — مرشحون ووظائف شاغرة ومراحل مقابلات وملاحظات.",
1990
+ buildCrm: "أنشئ نظام إدارة علاقات عملاء للمبيعات — عملاء وجهات اتصال وصفقات بحقل للمرحلة، ولوحة معلومات تجمع قيمة الصفقات حسب المرحلة.",
1991
+ buildApp: "أنشئ متتبّع مشاريع — مشاريع ومهام بمسؤولين وتواريخ استحقاق، ولوحة حسب الحالة، وتقويم لتواريخ الاستحقاق.",
1992
+ buildFlow: "صمّم مكتب دعم — تذاكر بحقلي الأولوية والحالة، ولوحة حسب الحالة، وروابط بالعملاء.",
1993
+ buildInventory: "أنشئ تطبيق مخزون — منتجات ومستويات مخزون وموردين، وعرض يصفّي الأصناف دون حد إعادة الطلب.",
1994
+ buildRecruiting: "أنشئ متتبّع متقدمين — مرشحون ووظائف شاغرة وحقل لمرحلة المقابلة، ولوحة حسب المرحلة.",
1554
1995
  },
1555
1996
  generic: {
1556
1997
  help: "بماذا يمكنك مساعدتي؟",
1557
1998
  availableObjects: "اذكر كائنات البيانات المتاحة.",
1558
1999
  recentActivity: "لخّص نشاطي الأخير.",
1559
2000
  },
2001
+ // objectui#7709 — the edit-mode starters, shown when the maker is bound
2002
+ // to an EXISTING app (`?package=`). Same rule as the five above: they
2003
+ // may only ask for what ADR-0112 v1 BUILDS. The fourth chip used to be
2004
+ // `addAutomation` ("an approval, a status flow, or a notification") and
2005
+ // every capability it named is refused by v1 (cloud#1956 / PR #1970), so
2006
+ // it now asks for sample data — `seed` IS on v1's whitelist, and having
2007
+ // no data is what an existing app most often lacks. REVERT: when
2008
+ // ADR-0112 v2 re-adds flows and actions, THIS chip's automation wording
2009
+ // comes back as `addAutomation`; the retired string is pinned for every
2010
+ // pack in `packages/i18n/src/__tests__/makerEditChips-v1-scope-7709.test.ts`.
1560
2011
  editApp: {
1561
2012
  addField: "أضف حقلًا إلى أحد الكائنات.",
1562
2013
  addObject: "أضف كائنًا جديدًا واربطه بكائن موجود.",
1563
2014
  addDashboard: "أضف لوحة معلومات للمؤشرات الرئيسية.",
1564
- addAutomation: "أضف أتمتة — موافقة أو سير حالات أو إشعارًا.",
2015
+ addSampleData: "املأ الكائنات الحالية ببيانات نموذجية واقعية تصلح للعرض التوضيحي.",
1565
2016
  },
1566
2017
  },
1567
2018
  changesTitle: "تأكيد التغييرات",
@@ -1636,13 +2087,20 @@ const ar = {
1636
2087
  },
1637
2088
  },
1638
2089
  title: "وحدة تحكم ObjectStack",
1639
- initializing: "جاري تهيئة التطبيق…",
2090
+ initializing: "جارٍ تهيئة التطبيق…",
1640
2091
  loadingHint: "قد يستغرق إعداد بيئة جديدة بعض الوقت.",
1641
2092
  breadcrumb: {
1642
2093
  dashboards: "لوحات المعلومات",
1643
2094
  pages: "الصفحات",
1644
2095
  reports: "التقارير",
1645
2096
  system: "النظام",
2097
+ marketplace: "السوق",
2098
+ settings: 'الإعدادات',
2099
+ apps: 'التطبيقات',
2100
+ profile: 'الملف الشخصي',
2101
+ approvals: 'الموافقات',
2102
+ aiApprovals: 'موافقات الذكاء الاصطناعي',
2103
+ auditLog: 'سجل التدقيق',
1646
2104
  },
1647
2105
  // objectui#4024 — the single-namespace settings screen. Its sibling
1648
2106
  // `settingsHub` above already resolved through this pack; the view was the
@@ -1661,8 +2119,12 @@ const ar = {
1661
2119
  discard: "تجاهل",
1662
2120
  saveChanges: "حفظ التغييرات",
1663
2121
  unsavedCount: "{{count}} تغيير(تغييرات) غير محفوظ",
2122
+ unsavedCount_zero: "{{count}} تغيير غير محفوظ",
1664
2123
  unsavedCount_one: "{{count}} تغيير غير محفوظ",
1665
- unsavedCount_other: "{{count}} تغييرات غير محفوظة",
2124
+ unsavedCount_two: "تغييران غير محفوظين ({{count}})",
2125
+ unsavedCount_few: "{{count}} تغييرات غير محفوظة",
2126
+ unsavedCount_many: "{{count}} تغييرًا غير محفوظ",
2127
+ unsavedCount_other: "{{count}} تغيير غير محفوظ",
1666
2128
  cryptoRefusalTitle: "لا يمكن لهذا النشر تشفير الأسرار",
1667
2129
  cryptoRefusalSubjectSuffix: "معلن كمشفَّر، لذلك لم تتم كتابة أي شيء.",
1668
2130
  cryptoRefusalNoSubject: "تم رفض القيمة المعلنة كمشفَّرة، لذلك لم تتم كتابة أي شيء.",
@@ -1670,9 +2132,9 @@ const ar = {
1670
2132
  cryptoRefusalToastNoSubject: "تعذّر تشفير الأسرار",
1671
2133
  },
1672
2134
  loadingSteps: {
1673
- connecting: "جاري الاتصال بمصدر البيانات",
1674
- loadingConfig: "جاري تحميل الإعدادات",
1675
- preparingWorkspace: "جاري تجهيز مساحة العمل",
2135
+ connecting: "جارٍ الاتصال بمصدر البيانات",
2136
+ loadingConfig: "جارٍ تحميل الإعدادات",
2137
+ preparingWorkspace: "جارٍ تجهيز مساحة العمل",
1676
2138
  },
1677
2139
  error: {
1678
2140
  connectionFailed: "تعذّر الاتصال بالخادم",
@@ -1682,7 +2144,7 @@ const ar = {
1682
2144
  },
1683
2145
  actions: {
1684
2146
  retry: "إعادة المحاولة",
1685
- retrying: "جاري إعادة المحاولة…",
2147
+ retrying: "جارٍ إعادة المحاولة…",
1686
2148
  },
1687
2149
  serverAction: {
1688
2150
  openingTitle: "جارٍ الفتح…",
@@ -1734,6 +2196,21 @@ const ar = {
1734
2196
  records: "السجلات",
1735
2197
  recentRecords: "شوهد مؤخراً",
1736
2198
  },
2199
+ // objectui#9954 — see the `en` pack for what raises each case.
2200
+ readRate: {
2201
+ ratioTitle: 'حجم قراءة غير معتاد في هذه البيئة',
2202
+ ratio: 'تتم قراءة {{ratio}} صف مقابل كل صف مكتوب. تُعلِّم المنصة كل ما يتجاوز {{threshold}}. لا يتم تقييد أو حظر أي شيء؛ هذا تقرير لمراجعة نمط القراءة.',
2203
+ noWritesTitle: 'قراءات بدون أي كتابة في هذه البيئة',
2204
+ noWrites: 'تتم قراءة صفوف دون كتابة أي صف على الإطلاق، لذا لا يوجد حد أعلى لمعدل القراءة. هذه هي أخطر قراءة. تُعلِّم المنصة كل ما يتجاوز {{threshold}}. لا يتم تقييد أو حظر أي شيء؛ هذا تقرير لمراجعة نمط القراءة.',
2205
+ },
2206
+ // objectui#10439 — see the `en` pack for what raises each case.
2207
+ storageUsage: {
2208
+ warningTitle: 'مساحة التخزين توشك على الامتلاء',
2209
+ warning: 'تم استخدام {{used}} ميغابايت من {{limit}} ميغابايت. يتوقف الرفع والاستيراد مؤقتًا عند امتلاء مساحة التخزين.',
2210
+ blockedTitle: 'مساحة التخزين ممتلئة: الرفع والاستيراد متوقفان مؤقتًا',
2211
+ blocked: 'تم استخدام {{used}} ميغابايت من {{limit}} ميغابايت. البيانات الحالية لم تُمس، ولا تزال القراءة والتصدير وتعديل السجلات الفردية تعمل.',
2212
+ upgrade: 'قم بالترقية للمتابعة',
2213
+ },
1737
2214
  errors: {
1738
2215
  somethingWentWrong: "حدث خطأ ما",
1739
2216
  unexpectedError: "حدث خطأ غير متوقع أثناء عرض هذا المحتوى.",
@@ -1764,6 +2241,7 @@ const ar = {
1764
2241
  viewNameInvalid: "استخدم أحرفًا إنجليزية صغيرة وأرقامًا وشرطات سفلية؛ وابدأ بحرف أو شرطة سفلية.",
1765
2242
  systemViewReadonly: "عرض النظام معرَّف في الكود — للقراءة فقط.",
1766
2243
  cannotEditMetaView: "هذا عرض مدمج معرَّف في الكود — لا يمكن تعديله.",
2244
+ viewConfigPermissionDenied: "تنطبق إعدادات العرض على جميع المستخدمين الذين يستخدمون هذا العرض، لذا يتطلب تغييرها إذن «إدارة البيانات الوصفية». اطلب من المسؤول إجراء هذا التغيير.",
1767
2245
  cannotDeleteMetaView: "هذا عرض مدمج معرَّف في الكود — لا يمكن حذفه.",
1768
2246
  expandToPage: "فتح كصفحة كاملة",
1769
2247
  objectNotFound: "الكائن غير موجود",
@@ -1774,12 +2252,20 @@ const ar = {
1774
2252
  allRecords: "جميع السجلات",
1775
2253
  new: "جديد",
1776
2254
  configureView: "تكوين العرض",
1777
- toolbar: "شريط الأدوات",
1778
2255
  toolbarEnabledCount: "{{count}} من {{total}} مفعّل",
1779
2256
  searchFields: "البحث في الحقول…",
1780
2257
  title: "العنوان",
1781
2258
  viewType: "نوع العرض",
1782
- recordCount: "{{count}} سجل",
2259
+ // objectui#11445 — a count family: each of the six CLDR slots carries its
2260
+ // own noun form. The base key, a count-invariant form, answers a call made
2261
+ // without a count.
2262
+ recordCount: "عدد السجلات: {{count}}",
2263
+ recordCount_zero: "{{count}} سجل",
2264
+ recordCount_one: "{{count}} سجل",
2265
+ recordCount_two: "سجلان ({{count}})",
2266
+ recordCount_few: "{{count}} سجلات",
2267
+ recordCount_many: "{{count}} سجلًا",
2268
+ recordCount_other: "{{count}} سجل",
1783
2269
  save: "حفظ",
1784
2270
  discard: "تجاهل",
1785
2271
  createView: "إنشاء عرض",
@@ -1791,11 +2277,16 @@ const ar = {
1791
2277
  longitudeField: "حقل خط الطول",
1792
2278
  imageField: "حقل الصورة",
1793
2279
  selectField: "اختر حقلاً…",
1794
- groupBy: "تجميع حسب",
1795
2280
  endDateField: "حقل تاريخ الانتهاء",
1796
2281
  import: "استيراد",
1797
2282
  importTitle: "استيراد من CSV",
1798
2283
  importedToast: "تم استيراد {{count}} صف(صفوف).",
2284
+ importedToast_zero: "تم استيراد {{count}} صف.",
2285
+ importedToast_one: "تم استيراد {{count}} صف.",
2286
+ importedToast_two: "تم استيراد صفين ({{count}}).",
2287
+ importedToast_few: "تم استيراد {{count}} صفوف.",
2288
+ importedToast_many: "تم استيراد {{count}} صفًا.",
2289
+ importedToast_other: "تم استيراد {{count}} صف.",
1799
2290
  importedWithSkipped: "تم استيراد {{ok}} صف(صفوف)؛ تم تخطي {{skipped}}.",
1800
2291
  createViewDesc: "اختر نوع العرض وأعطه اسماً. يمكن تغيير جميع الإعدادات لاحقاً.",
1801
2292
  cancel: "إلغاء",
@@ -1804,6 +2295,12 @@ const ar = {
1804
2295
  deleteViewTitle: "حذف العرض",
1805
2296
  deleteViewConfirm: "حذف العرض \"{{name}}\"؟ لا يمكن التراجع عن ذلك.",
1806
2297
  bulkDeleteConfirm: "حذف {{count}} سجل(ات) محدد(ة)؟ لا يمكن التراجع عن ذلك.",
2298
+ bulkDeleteConfirm_zero: "حذف {{count}} سجل محدد؟ لا يمكن التراجع عن ذلك.",
2299
+ bulkDeleteConfirm_one: "حذف {{count}} سجل محدد؟ لا يمكن التراجع عن ذلك.",
2300
+ bulkDeleteConfirm_two: "حذف سجلين محددين ({{count}})؟ لا يمكن التراجع عن ذلك.",
2301
+ bulkDeleteConfirm_few: "حذف {{count}} سجلات محددة؟ لا يمكن التراجع عن ذلك.",
2302
+ bulkDeleteConfirm_many: "حذف {{count}} سجلًا محددًا؟ لا يمكن التراجع عن ذلك.",
2303
+ bulkDeleteConfirm_other: "حذف {{count}} سجل محدد؟ لا يمكن التراجع عن ذلك.",
1807
2304
  duplicateViewName: "يوجد عرض بهذا الاسم بالفعل.",
1808
2305
  viewTypeGrid: "شبكة",
1809
2306
  viewTypeGridDesc: "جدول سجلات بأسلوب جدول البيانات.",
@@ -1840,10 +2337,14 @@ const ar = {
1840
2337
  chartTypePie: "مخطط دائري",
1841
2338
  chartTypeArea: "مخطط مساحة",
1842
2339
  chartTypeScatter: "مخطط نقطي",
1843
- xAxisField: "حقل المحور X",
1844
- xAxisFieldHelp: "البُعد الفئوي أو الزمني.",
1845
- yAxisField: "حقل المحور Y",
1846
- yAxisFieldHelp: "الحقل الرقمي للتجميع.",
2340
+ dataset: "مجموعة البيانات",
2341
+ datasetHelp: "يقرأ المخطط أرقامه من مجموعة البيانات هذه الخاصة بالكائن.",
2342
+ chartMeasure: "المقياس",
2343
+ chartMeasureHelp: "مقياس مجموعة البيانات المعروض على محور القيم.",
2344
+ chartDimension: "البُعد",
2345
+ chartDimensionHelp: "بُعد مجموعة البيانات الذي تُجمَّع القيم حسبه (اختياري).",
2346
+ viewTypeUnavailableDataset: "لا يوفّر هذا الكائن أي مجموعة بيانات للمخطط.",
2347
+ noDatasetMeasure: "لا تعلن مجموعة البيانات هذه عن أي مقياس للمخطط.",
1847
2348
  ufTabs: "علامات تبويب",
1848
2349
  ufAddField: "+ إضافة حقل فلتر…",
1849
2350
  ufShowAllRecords: "إظهار علامة \"جميع السجلات\"",
@@ -1857,6 +2358,9 @@ const ar = {
1857
2358
  unpinItem: "إلغاء تثبيت {{name}}",
1858
2359
  dragToReorder: "اسحب لإعادة الترتيب",
1859
2360
  favorites: "المفضلة",
2361
+ launcherLabel: "مشغّل التطبيقات",
2362
+ menuLabel: "تنقّل التطبيق",
2363
+ menuEmpty: "لا توجد في هذا التطبيق عناصر تنقّل يمكنك فتحها.",
1860
2364
  },
1861
2365
  },
1862
2366
  auth: {
@@ -1910,6 +2414,8 @@ const ar = {
1910
2414
  resendOtpCountdownText: "إعادة الإرسال بعد {seconds} ثانية",
1911
2415
  usePhoneOtpText: "تسجيل الدخول برمز التحقق",
1912
2416
  usePasswordSignInText: "تسجيل الدخول بكلمة المرور بدلاً من ذلك",
2417
+ socialButton: "المتابعة باستخدام {provider}",
2418
+ orText: "أو تابع باستخدام البريد الإلكتروني",
1913
2419
  },
1914
2420
  register: {
1915
2421
  title: "إنشاء حساب",
@@ -1928,8 +2434,12 @@ const ar = {
1928
2434
  submittingButton: "جارٍ إنشاء الحساب…",
1929
2435
  hasAccountText: "لديك حساب بالفعل؟",
1930
2436
  signInText: "تسجيل الدخول",
2437
+ socialButton: "التسجيل باستخدام {provider}",
2438
+ orText: "أو تابع باستخدام البريد الإلكتروني",
1931
2439
  errors: {
1932
2440
  userExists: "يوجد حساب بهذا البريد الإلكتروني بالفعل. حاول تسجيل الدخول.",
2441
+ selfRegistrationClosed: "التسجيل الذاتي غير متاح في هذه البيئة. اطلب دعوة من المسؤول.",
2442
+ emailDomainNotAllowed: "نطاق هذا البريد الإلكتروني غير مسموح له بالتسجيل هنا. استخدم البريد الإلكتروني لمؤسستك أو اطلب دعوة من المسؤول.",
1933
2443
  },
1934
2444
  verifyInbox: {
1935
2445
  title: "تحقق من صندوق الوارد",
@@ -2128,6 +2638,15 @@ const ar = {
2128
2638
  role: "الدور",
2129
2639
  save: "حفظ التغييرات",
2130
2640
  },
2641
+ language: {
2642
+ title: "اللغة",
2643
+ description: "اللغة المستخدمة في الإشعارات والرسائل المرسلة إليك. أما لغة الواجهة فتُختار بشكل منفصل من قائمة الكرة الأرضية.",
2644
+ label: "اللغة المفضلة",
2645
+ systemDefault: "استخدام الإعداد الافتراضي للنشر",
2646
+ save: "حفظ",
2647
+ saved: "تم تحديث تفضيل اللغة.",
2648
+ readOnly: "يدير المسؤول لغة حسابك.",
2649
+ },
2131
2650
  password: {
2132
2651
  changeTitle: "تغيير كلمة المرور",
2133
2652
  setTitle: "تعيين كلمة مرور محلية",
@@ -2159,7 +2678,6 @@ const ar = {
2159
2678
  label: "مساحات العمل",
2160
2679
  default: "مساحة العمل الخاصة بي",
2161
2680
  switch: "تبديل مساحة العمل",
2162
- create: "إنشاء مساحة عمل",
2163
2681
  createTitle: "إنشاء مساحة عمل",
2164
2682
  createDescription: "مساحة العمل هي مساحة مشتركة لفريقك للتعاون.",
2165
2683
  createButton: "إنشاء مساحة عمل",
@@ -2184,7 +2702,6 @@ const ar = {
2184
2702
  packageManagement: "إدارة الحزم",
2185
2703
  searchNavigation: "البحث في التنقل…",
2186
2704
  settings: "الإعدادات",
2187
- help: "المساعدة",
2188
2705
  helpTooltip: "المساعدة والوثائق",
2189
2706
  activityFeed: "موجز النشاط",
2190
2707
  notifications: "الإشعارات",
@@ -2244,6 +2761,12 @@ const ar = {
2244
2761
  },
2245
2762
  pendingDrafts: {
2246
2763
  message: "لديك {{count}} من التغييرات غير المنشورة — انشرها لتصبح فعّالة.",
2764
+ message_zero: "لديك {{count}} من التغييرات غير المنشورة — انشرها لتصبح فعّالة.",
2765
+ message_one: "لديك {{count}} من التغييرات غير المنشورة — انشرها لتصبح فعّالة.",
2766
+ message_two: "لديك {{count}} من التغييرات غير المنشورة — انشرها لتصبح فعّالة.",
2767
+ message_few: "لديك {{count}} من التغييرات غير المنشورة — انشرها لتصبح فعّالة.",
2768
+ message_many: "لديك {{count}} من التغييرات غير المنشورة — انشرها لتصبح فعّالة.",
2769
+ message_other: "لديك {{count}} من التغييرات غير المنشورة — انشرها لتصبح فعّالة.",
2247
2770
  cta: "نشر",
2248
2771
  publishing: "جارٍ النشر…",
2249
2772
  published: "تم النشر! تغييراتك فعّالة الآن.",
@@ -2258,7 +2781,6 @@ const ar = {
2258
2781
  capabilityWarn: "فحص التأليف: {{count}} مرجع(مراجع) قدرات لا تشير إلى شيء.",
2259
2782
  },
2260
2783
  title: "الرئيسية",
2261
- subtitle: "لوحة تحكم مساحة العمل",
2262
2784
  nav: "الرئيسية",
2263
2785
  allApps: "جميع التطبيقات",
2264
2786
  yourApps: "تطبيقاتك",
@@ -2270,8 +2792,6 @@ const ar = {
2270
2792
  empty: "لقد أنجزت كل شيء",
2271
2793
  },
2272
2794
  loading: "جارٍ تحميل مساحة العمل…",
2273
- recent: "الأخيرة",
2274
- starred: "المميزة بنجمة",
2275
2795
  welcome: "مرحباً بك في ObjectUI",
2276
2796
  welcomeDescription: "ابدأ بإنشاء تطبيقك الأول أو تكوين إعدادات النظام.",
2277
2797
  createFirstApp: "أنشئ أول تطبيق لك",
@@ -2279,8 +2799,6 @@ const ar = {
2279
2799
  browseMarketplace: "تصفح متجر التطبيقات",
2280
2800
  quickActions: {
2281
2801
  title: "إجراءات سريعة",
2282
- createApp: "إنشاء تطبيق",
2283
- createAppDesc: "ابدأ بتطبيق جديد",
2284
2802
  manageObjects: "إدارة الكائنات",
2285
2803
  manageObjectsDesc: "تكوين نماذج البيانات",
2286
2804
  systemSettings: "إعدادات النظام",
@@ -2296,18 +2814,15 @@ const ar = {
2296
2814
  greetingNight: "وردية الليل",
2297
2815
  heroTagline: "استمر من حيث توقفت أو اكتشف شيئاً جديداً.",
2298
2816
  open: "فتح",
2299
- stats: {
2300
- apps: "التطبيقات",
2301
- starred: "المميزة",
2302
- recent: "الأخيرة",
2303
- },
2304
2817
  recentApps: {
2305
2818
  title: "فُتح مؤخراً",
2306
2819
  itemType: {
2307
2820
  object: "كائن",
2308
2821
  dashboard: "لوحة تحكم",
2309
2822
  page: "صفحة",
2823
+ report: "تقرير",
2310
2824
  record: "سجل",
2825
+ metadata: "البيانات الوصفية",
2311
2826
  },
2312
2827
  },
2313
2828
  starredApps: {
@@ -2329,7 +2844,6 @@ const ar = {
2329
2844
  organizations: "المؤسسات",
2330
2845
  roles: "الأدوار",
2331
2846
  configuration: "التهيئة",
2332
- createApp: "إنشاء تطبيق",
2333
2847
  administration: "الإدارة",
2334
2848
  datasources: "مصادر البيانات",
2335
2849
  documentation: "الوثائق",
@@ -2354,6 +2868,7 @@ const ar = {
2354
2868
  typeUpdate: "تحديث",
2355
2869
  typeDelete: "حذف",
2356
2870
  typeComment: "تعليق",
2871
+ typeSystem: "النظام",
2357
2872
  relativeJustNow: "الآن",
2358
2873
  relativeSecondsAgo: "منذ {{count}} ث",
2359
2874
  relativeMinutesAgo: "منذ {{count}} د",
@@ -2375,8 +2890,22 @@ const ar = {
2375
2890
  placeholder: "ابحث في الكائنات، لوحات التحكم، الصفحات، التقارير…",
2376
2891
  inputAriaLabel: "ابحث في الكائنات، لوحات التحكم، الصفحات، التقارير",
2377
2892
  resultsCount: "{{count}} نتيجة لـ \"{{query}}\"",
2378
- resultsCountPlural: "{{count}} نتيجة لـ \"{{query}}\"",
2379
- itemsAvailable: "{{count}} عنصر(عناصر) متاح(ة)",
2893
+ resultsCount_zero: "{{count}} نتيجة لـ \"{{query}}\"",
2894
+ resultsCount_one: "{{count}} نتيجة لـ \"{{query}}\"",
2895
+ resultsCount_two: "نتيجتان لـ \"{{query}}\" ({{count}})",
2896
+ resultsCount_few: "{{count}} نتائج لـ \"{{query}}\"",
2897
+ resultsCount_many: "{{count}} نتيجة لـ \"{{query}}\"",
2898
+ resultsCount_other: "{{count}} نتيجة لـ \"{{query}}\"",
2899
+ // objectui#11445 — a count family: each of the six CLDR slots carries its
2900
+ // own noun form. The base key, a count-invariant form, answers a call made
2901
+ // without a count.
2902
+ itemsAvailable: "عدد العناصر المتاحة: {{count}}",
2903
+ itemsAvailable_zero: "{{count}} عنصر متاح",
2904
+ itemsAvailable_one: "{{count}} عنصر متاح",
2905
+ itemsAvailable_two: "عنصران متاحان ({{count}})",
2906
+ itemsAvailable_few: "{{count}} عناصر متاحة",
2907
+ itemsAvailable_many: "{{count}} عنصرًا متاحًا",
2908
+ itemsAvailable_other: "{{count}} عنصر متاح",
2380
2909
  noResults: "لم يتم العثور على نتائج",
2381
2910
  noResultsHint: "جرب تعديل مصطلحات البحث",
2382
2911
  typeObjects: "الكائنات",
@@ -2401,7 +2930,11 @@ const ar = {
2401
2930
  noAppsConfigured: "لا تطبيقات مُهيأة",
2402
2931
  noAppsConfiguredDescription: "لا تطبيقات مسجلة. أنشئ تطبيقك الأول أو زر إعدادات النظام.",
2403
2932
  appNotAvailable: "التطبيق غير متاح",
2404
- appNotAvailableDescription: "هذا التطبيق غير متاح بعد — قد يكون النشر ما زال جارياً. أعد المحاولة بعد لحظات.",
2933
+ appNotAvailableDescription: "هذا التطبيق غير متاح — أعد المحاولة بعد لحظات.",
2934
+ appNotFound: "تعذّر فتح هذا التطبيق",
2935
+ appNotFoundDescription: "لم يُرجع الخادم هذا التطبيق لحسابك.",
2936
+ appUnreachable: "تعذّر الوصول إلى الخادم",
2937
+ appUnreachableDescription: "تعذّر التحقق من هذا التطبيق. أعد المحاولة بعد لحظات.",
2405
2938
  appAccessDenied: "ليس لديك حق الوصول إلى هذا التطبيق",
2406
2939
  appAccessDeniedDescription: "هذا التطبيق موجود، لكن حسابك غير مخوَّل بفتحه. اطلب من المسؤول منحك حق الوصول.",
2407
2940
  appAccessDeniedHome: "العودة إلى الرئيسية",
@@ -2416,11 +2949,11 @@ const ar = {
2416
2949
  description: "يرجى إدخال المعلومات المطلوبة للمتابعة.",
2417
2950
  selectPlaceholder: "تحديد {{label}}",
2418
2951
  requiredError: "{{label}} مطلوب",
2952
+ unresolvedParam: 'تعذّر عرض هذه المَعلمة: الحقل الذي تستند إليه غير موجود في بيانات تعريف الكائن، لذا يتعذّر إنشاء عنصر التحكم المطلوب. اطلب من المسؤول تصحيح تعريف الإجراء.',
2953
+ carryOverHint: 'يُنقل دون تغيير (للقراءة فقط)',
2419
2954
  cancel: "إلغاء",
2420
2955
  confirm: "تأكيد",
2421
2956
  uploading: "جارٍ الرفع…",
2422
- defaultActionTitle: "إجراء",
2423
- ok: "موافق",
2424
2957
  lookupPlaceholder: "معرف السجل لـ {{label}}",
2425
2958
  lookupHelpText: "لم يتم تكوين كائن مرجعي لهذه المعلمة، لذا فإن أداة اختيار السجلات غير متاحة. أدخل معرف السجل، أو اطلب من المسؤول تصحيح معلمة الإجراء.",
2426
2959
  },
@@ -2429,11 +2962,6 @@ const ar = {
2429
2962
  confirm: "متابعة",
2430
2963
  cancel: "إلغاء",
2431
2964
  },
2432
- rowAction: {
2433
- openMenu: "فتح القائمة",
2434
- edit: "تعديل",
2435
- delete: "حذف",
2436
- },
2437
2965
  navigationSync: {
2438
2966
  addedPage: "تم تحديث التنقل: تمت إضافة الصفحة \"{{name}}\"",
2439
2967
  addedDashboard: "تم تحديث التنقل: تمت إضافة لوحة التحكم \"{{name}}\"",
@@ -2454,6 +2982,12 @@ const ar = {
2454
2982
  noRecordId: "لم يتم توفير معرف سجل",
2455
2983
  deleteConfirm: "حذف هذا السجل؟",
2456
2984
  bulkDeleteSuccess: "تم حذف {{count}} سجل(ات) {{label}}",
2985
+ bulkDeleteSuccess_zero: "تم حذف {{count}} من سجلات {{label}}",
2986
+ bulkDeleteSuccess_one: "تم حذف {{count}} من سجلات {{label}}",
2987
+ bulkDeleteSuccess_two: "تم حذف {{count}} من سجلات {{label}}",
2988
+ bulkDeleteSuccess_few: "تم حذف {{count}} من سجلات {{label}}",
2989
+ bulkDeleteSuccess_many: "تم حذف {{count}} من سجلات {{label}}",
2990
+ bulkDeleteSuccess_other: "تم حذف {{count}} من سجلات {{label}}",
2457
2991
  bulkDeletePartial: "تم حذف {{succeeded}}، فشل {{failed}}",
2458
2992
  },
2459
2993
  objectViewActions: {
@@ -2465,15 +2999,6 @@ const ar = {
2465
2999
  exportFailed: "فشل التصدير: {{message}}",
2466
3000
  forecastSoon: "عرض التوقعات قادم قريباً",
2467
3001
  },
2468
- recordDetail: {
2469
- viewersTooltip: "المستخدمون يشاهدون هذا السجل الآن",
2470
- },
2471
- cellRender: {
2472
- empty: "فارغ",
2473
- yes: "نعم",
2474
- no: "لا",
2475
- systemFields: "النظام",
2476
- },
2477
3002
  user: {
2478
3003
  profile: "الملف الشخصي",
2479
3004
  settings: "الإعدادات",
@@ -2663,18 +3188,49 @@ const ar = {
2663
3188
  regionLabel: "الإشعارات",
2664
3189
  groupCount: "{{count}} من الإشعارات",
2665
3190
  groupUnread: "{{count}} غير مقروء",
3191
+ groupUnread_zero: "غير المقروءة: {{count}}",
3192
+ groupUnread_one: "غير المقروءة: {{count}}",
3193
+ groupUnread_two: "غير المقروءة: {{count}}",
3194
+ groupUnread_few: "غير المقروءة: {{count}}",
3195
+ groupUnread_many: "غير المقروءة: {{count}}",
3196
+ groupUnread_other: "غير المقروءة: {{count}}",
2666
3197
  groupMarkRead: "تعليم كمقروء",
2667
3198
  groupMarkReadTitle: "تعليم كل هذا النوع كمقروء",
2668
3199
  empty: "لا توجد إشعارات",
2669
3200
  markAllRead: "تعليم الكل كمقروء",
2670
3201
  viewAll: "عرض جميع الإشعارات",
2671
3202
  approvalsPending: "{{count}} موافقات معلقة",
3203
+ approvalsPending_zero: "{{count}} موافقة معلقة",
3204
+ approvalsPending_one: "{{count}} موافقة معلقة",
3205
+ approvalsPending_two: "موافقتان معلقتان ({{count}})",
3206
+ approvalsPending_few: "{{count}} موافقات معلقة",
3207
+ approvalsPending_many: "{{count}} موافقة معلقة",
3208
+ approvalsPending_other: "{{count}} موافقة معلقة",
2672
3209
  viewApprovals: "عرض الموافقات",
2673
3210
  noPendingApprovals: "لا توجد موافقات معلقة",
2674
3211
  openApprovalsInbox: "فتح صندوق الموافقات",
2675
3212
  badgeTotal: "{{total}} إجمالاً",
2676
3213
  badgeNotifications: "{{unread}} إشعارات",
2677
3214
  badgeApprovals: "{{approvals}} موافقات معلقة",
3215
+ arrivalMany: "{{count}} رسائل جديدة",
3216
+ arrivalMany_zero: "{{count}} رسالة جديدة",
3217
+ arrivalMany_one: "{{count}} رسالة جديدة",
3218
+ arrivalMany_two: "رسالتان جديدتان ({{count}})",
3219
+ arrivalMany_few: "{{count}} رسائل جديدة",
3220
+ arrivalMany_many: "{{count}} رسالة جديدة",
3221
+ arrivalMany_other: "{{count}} رسالة جديدة",
3222
+ arrivalRepeats: "{{count}} رسائل جديدة في هذا الموضوع",
3223
+ arrivalRepeats_zero: "{{count}} رسالة جديدة في هذا الموضوع",
3224
+ arrivalRepeats_one: "{{count}} رسالة جديدة في هذا الموضوع",
3225
+ arrivalRepeats_two: "رسالتان جديدتان ({{count}}) في هذا الموضوع",
3226
+ arrivalRepeats_few: "{{count}} رسائل جديدة في هذا الموضوع",
3227
+ arrivalRepeats_many: "{{count}} رسالة جديدة في هذا الموضوع",
3228
+ arrivalRepeats_other: "{{count}} رسالة جديدة في هذا الموضوع",
3229
+ arrivalOpen: "عرض",
3230
+ toastEnabled: "تنبيهات داخل التطبيق",
3231
+ desktopEnabled: "إشعارات سطح المكتب",
3232
+ desktopBlocked: "محظور. اسمح بالإشعارات لهذا الموقع من إعدادات المتصفح.",
3233
+ desktopUnsupported: "هذا المتصفح لا يدعم إشعارات سطح المكتب.",
2678
3234
  emptyUnread: "كل شيء مقروء",
2679
3235
  filterUnread: "غير مقروء",
2680
3236
  filterAll: "الكل",
@@ -2688,12 +3244,14 @@ const ar = {
2688
3244
  thankYouTitle: "شكراً!",
2689
3245
  thankYouMessage: "تم استلام إرسالك بنجاح.",
2690
3246
  redirecting: "إعادة توجيه خلال {{seconds}} ثانية(ثوانٍ)…",
3247
+ redirectPending: "جارٍ إعادة التوجيه…",
2691
3248
  unavailableTitle: "النموذج غير متاح",
2692
3249
  unavailableDescription: "لا يوجد نموذج عام متاح على هذا الرابط. تأكد من تمكين المشاركة المجهولة للعرض الأساسي.",
2693
3250
  tryDemo: "تجربة العرض التوضيحي",
2694
3251
  retry: "إعادة المحاولة",
2695
3252
  loading: "جارٍ تحميل النموذج…",
2696
3253
  requiredHint: "* حقل مطلوب",
3254
+ requiredFields: "الحقول المطلوبة: {{fields}}",
2697
3255
  consentLabelDefault: "أوافق على سياسة الخصوصية وأعطي موافقتي على معالجة بياناتي لهذا الطلب.",
2698
3256
  consentLink: "سياسة الخصوصية",
2699
3257
  consentRequired: "يرجى قبول سياسة الخصوصية للمتابعة.",
@@ -2744,6 +3302,12 @@ const ar = {
2744
3302
  noImportableFields: "لا تحتوي هذه الكائن على حقول قابلة للاستيراد.",
2745
3303
  schemaReadFailed: "تعذّرت قراءة مخطط الكائن.",
2746
3304
  imported: "تم استيراد {{count}} صف إلى {{object}}.",
3305
+ imported_zero: "تم استيراد {{count}} صف إلى {{object}}.",
3306
+ imported_one: "تم استيراد {{count}} صف إلى {{object}}.",
3307
+ imported_two: "تم استيراد صفين ({{count}}) إلى {{object}}.",
3308
+ imported_few: "تم استيراد {{count}} صفوف إلى {{object}}.",
3309
+ imported_many: "تم استيراد {{count}} صفًا إلى {{object}}.",
3310
+ imported_other: "تم استيراد {{count}} صف إلى {{object}}.",
2747
3311
  importFrom: "استيراد الصفوف الفعلية من",
2748
3312
  into: "إلى",
2749
3313
  opening: "جارٍ الفتح…",
@@ -2757,6 +3321,84 @@ const ar = {
2757
3321
  openProduction: "فتح بيئة الإنتاج",
2758
3322
  manageEnvironments: "إدارة البيئات",
2759
3323
  },
3324
+ cloudPlanStatus: {
3325
+ current: "الخطة الحالية",
3326
+ },
3327
+ ai: {
3328
+ nlQuery: {
3329
+ placeholder: "اطرح سؤالًا حول بياناتك…",
3330
+ ask: "اسأل",
3331
+ results: "النتائج",
3332
+ match: "نسبة التطابق: {{percent}}",
3333
+ simulatedSummary: "نتائج: {{query}}",
3334
+ noResults: "لم يتم العثور على سجلات مطابقة",
3335
+ recentQueries: "الاستعلامات الأخيرة",
3336
+ },
3337
+ formAssist: {
3338
+ title: "اقتراحات الذكاء الاصطناعي",
3339
+ suggestionCount: "عدد الاقتراحات: {{count}}",
3340
+ suggestionCount_zero: "{{count}} اقتراح",
3341
+ suggestionCount_one: "{{count}} اقتراح",
3342
+ suggestionCount_two: "اقتراحان ({{count}})",
3343
+ suggestionCount_few: "{{count}} اقتراحات",
3344
+ suggestionCount_many: "{{count}} اقتراحًا",
3345
+ suggestionCount_other: "{{count}} اقتراح",
3346
+ applyAll: "تطبيق الكل",
3347
+ confidence: "الثقة: {{percent}}",
3348
+ appliedCount: "عدد الاقتراحات المطبّقة: {{count}}",
3349
+ appliedCount_zero: "تم تطبيق {{count}} اقتراح",
3350
+ appliedCount_one: "تم تطبيق {{count}} اقتراح",
3351
+ appliedCount_two: "تم تطبيق اقتراحين ({{count}})",
3352
+ appliedCount_few: "تم تطبيق {{count}} اقتراحات",
3353
+ appliedCount_many: "تم تطبيق {{count}} اقتراحًا",
3354
+ appliedCount_other: "تم تطبيق {{count}} اقتراح",
3355
+ },
3356
+ recommendations: {
3357
+ title: "التوصيات",
3358
+ generating: "جارٍ إنشاء التوصيات…",
3359
+ empty: "لا توجد توصيات متاحة",
3360
+ },
3361
+ },
3362
+ aiApprovals: {
3363
+ title: "موافقات الذكاء الاصطناعي",
3364
+ description: "إجراءات اقترحها وكيل ذكاء اصطناعي وتحتاج إلى مراجعة بشرية قبل تنفيذها.",
3365
+ tabPending: "قيد الانتظار",
3366
+ tabDecided: "تم البت فيها",
3367
+ tabAll: "الكل",
3368
+ statusPending: "قيد الانتظار",
3369
+ statusApproved: "تمت الموافقة",
3370
+ statusExecuted: "تم التنفيذ",
3371
+ statusFailed: "فشل",
3372
+ statusRejected: "مرفوض",
3373
+ colTool: "الأداة",
3374
+ colAction: "الإجراء",
3375
+ colObject: "الكائن",
3376
+ colStatus: "الحالة",
3377
+ colProposed: "وقت الاقتراح",
3378
+ colDecision: "القرار",
3379
+ emptyTitle: "لا توجد إجراءات في الانتظار",
3380
+ emptyDescription: "عندما يقترح الذكاء الاصطناعي إجراءً حساسًا سيظهر هنا للمراجعة.",
3381
+ view: "عرض",
3382
+ approve: "موافقة",
3383
+ reject: "رفض",
3384
+ working: "جارٍ التنفيذ…",
3385
+ approveAndExecute: "الموافقة والتنفيذ",
3386
+ outcomeApprove: "موافقة على {{id}}: {{message}}",
3387
+ outcomeReject: "رفض {{id}}: {{message}}",
3388
+ outcomeExecuteFailed: "فشل الإجراء أثناء التنفيذ",
3389
+ drawerFallbackTitle: "إجراء قيد الانتظار",
3390
+ drawerSubtitle: "الأداة {{tool}} على {{object}}",
3391
+ fieldProposedBy: "اقترحه",
3392
+ fieldDecidedBy: "قرّره",
3393
+ fieldConversation: "المحادثة",
3394
+ fieldToolInput: "مدخلات الأداة",
3395
+ fieldResult: "النتيجة",
3396
+ fieldError: "خطأ",
3397
+ fieldRejectionReason: "سبب الرفض",
3398
+ rejectTitle: "هل تريد رفض هذا الإجراء؟",
3399
+ rejectBody: "يُعاد السبب إلى الذكاء الاصطناعي ليعدّل ردّه التالي.",
3400
+ rejectPlaceholder: "سبب اختياري (مثال: «معرّف السجل غير صحيح — يرجى التأكيد مع المستخدم أولاً.»)",
3401
+ },
2760
3402
  aiModelStatus: {
2761
3403
  summary: "يستخدم الإنشاء / السؤال {{conversational}} ({{conversationalSource}})؛ ويستخدم الإخراج المهيكل {{structured}} ({{structuredSource}}).",
2762
3404
  summaryRouting: "سياسة التوجيه: الخطط المجانية ← {{free}}، الخطط المدفوعة ← {{paid}}.",
@@ -2774,6 +3416,123 @@ const ar = {
2774
3416
  sourceInherits: "مثل build/ask",
2775
3417
  sourcePinned: "مثبّت بواسطة {{source}}",
2776
3418
  },
3419
+ // objectui#7254 — the AI copilot's tool cards. Three families, all of them
3420
+ // English-only until this landed while every other string on the same screen
3421
+ // was translated:
3422
+ //
3423
+ // `tool.*` — one entry per PLATFORM-PROVIDED tool name
3424
+ // (@objectstack/spec `PLATFORM_TOOLS_BY_PACKAGE`, the
3425
+ // closed registry those runtimes are conformance-tested
3426
+ // against). `humanizeToolName` looks each up as
3427
+ // `chatbot.tool.<tool_name>` and falls back to its English
3428
+ // title-caser for a custom / third-party tool, so a name
3429
+ // missing here is degraded, never broken. The `en` values
3430
+ // are deliberately EQUAL to what that title-caser produces:
3431
+ // adding the key must not silently reword the English UI.
3432
+ // `toolState.*` — the card-header badge + activity-chip vocabulary. ONE
3433
+ // set for both surfaces (they used to carry separate
3434
+ // tables and disagreed on casing).
3435
+ // `plan.*` — the "N objects · N views · N dashboards" strip. Plural
3436
+ // FAMILIES: one slot per CLDR category the pack's language
3437
+ // selects (objectui#11432), plus the base key for a call
3438
+ // made without a count. `all-locales-key-parity.test.ts`
3439
+ // derives the required slots from `Intl.PluralRules`.
3440
+ //
3441
+ // objectui#7481 — five `tool.*` entries are NEWER than the registry above:
3442
+ // `get_authoring_rules` (cloud#1837), `load_tools`, `open_record`, `test_flow`
3443
+ // and `toggle_flow` are registered by cloud `service-ai-studio` but the pinned
3444
+ // `@objectstack/spec` snapshot does not list them yet. They are kept here on
3445
+ // purpose: a step label the user reads must not wait on a pin bump. When the
3446
+ // pin advances, `chatbotToolLabels-locale-parity-7481` starts checking them
3447
+ // against the registry instead of against its own hand-held list.
3448
+ chatbot: {
3449
+ tool: {
3450
+ aggregate_data: "تجميع البيانات",
3451
+ get_record: "جلب السجل",
3452
+ query_data: "الاستعلام عن البيانات",
3453
+ query_records: "الاستعلام عن السجلات",
3454
+ search_knowledge: "البحث في قاعدة المعرفة",
3455
+ visualize_data: "إنشاء رسم بياني",
3456
+ add_field: "إضافة حقل",
3457
+ apply_blueprint: "بناء التطبيق",
3458
+ apply_edit: "تطبيق التغييرات",
3459
+ create_metadata: "إنشاء بيانات وصفية",
3460
+ create_object: "إنشاء كائن",
3461
+ create_package: "إنشاء حزمة",
3462
+ create_seed: "توليد بيانات تجريبية",
3463
+ delete_field: "حذف حقل",
3464
+ describe_metadata: "عرض البيانات الوصفية",
3465
+ describe_object: "عرض بنية الكائن",
3466
+ get_active_package: "جلب الحزمة النشطة",
3467
+ get_authoring_rules: "قراءة قواعد التأليف",
3468
+ get_metadata_schema: "جلب مخطط البيانات الوصفية",
3469
+ get_package: "جلب الحزمة",
3470
+ list_metadata: "سرد البيانات الوصفية",
3471
+ list_objects: "سرد الكائنات",
3472
+ list_packages: "سرد الحزم",
3473
+ load_tools: "تحميل الأدوات",
3474
+ modify_field: "تعديل حقل",
3475
+ open_record: "فتح السجل",
3476
+ propose_blueprint: "تصميم خطة التطبيق",
3477
+ set_active_package: "تبديل الحزمة النشطة",
3478
+ suggest_builder: "اقتراح طريقة البناء",
3479
+ test_flow: "اختبار التدفق",
3480
+ todo_write: "تدوين المهام",
3481
+ toggle_flow: "تفعيل أو تعطيل التدفق",
3482
+ update_metadata: "تحديث البيانات الوصفية",
3483
+ validate_expression: "التحقق من التعبير",
3484
+ verify_build: "التحقق من البناء",
3485
+ },
3486
+ toolState: {
3487
+ agentActivity: "نشاط الوكيل",
3488
+ pending: "قيد الانتظار",
3489
+ running: "قيد التنفيذ",
3490
+ awaitingApproval: "بانتظار الموافقة",
3491
+ responded: "تمت الاستجابة",
3492
+ completed: "مكتمل",
3493
+ error: "خطأ",
3494
+ denied: "مرفوض",
3495
+ failed: "فشل",
3496
+ },
3497
+ plan: {
3498
+ countObjects: "{{count}} كائنات",
3499
+ countObjects_zero: "{{count}} كائن",
3500
+ countObjects_one: "{{count}} كائن",
3501
+ countObjects_two: "كائنان ({{count}})",
3502
+ countObjects_few: "{{count}} كائنات",
3503
+ countObjects_many: "{{count}} كائنًا",
3504
+ countObjects_other: "{{count}} كائن",
3505
+ countViews: "{{count}} طرق عرض",
3506
+ countViews_zero: "{{count}} طريقة عرض",
3507
+ countViews_one: "{{count}} طريقة عرض",
3508
+ countViews_two: "طريقتا عرض ({{count}})",
3509
+ countViews_few: "{{count}} طرق عرض",
3510
+ countViews_many: "{{count}} طريقة عرض",
3511
+ countViews_other: "{{count}} طريقة عرض",
3512
+ countDashboards: "{{count}} لوحات معلومات",
3513
+ countDashboards_zero: "{{count}} لوحة معلومات",
3514
+ countDashboards_one: "{{count}} لوحة معلومات",
3515
+ countDashboards_two: "لوحتا معلومات ({{count}})",
3516
+ countDashboards_few: "{{count}} لوحات معلومات",
3517
+ countDashboards_many: "{{count}} لوحة معلومات",
3518
+ countDashboards_other: "{{count}} لوحة معلومات",
3519
+ countSeedData: "بيانات تجريبية",
3520
+ },
3521
+ build: {
3522
+ building: "جارٍ إنشاء {{app}}…",
3523
+ built: "تم إنشاء {{app}}",
3524
+ appFallback: "تطبيقك",
3525
+ addingSampleData: "جارٍ إضافة بيانات تجريبية",
3526
+ group: {
3527
+ object: "الكائنات",
3528
+ view: "طرق العرض",
3529
+ dashboard: "لوحات المعلومات",
3530
+ app: "التطبيق",
3531
+ seed: "بيانات تجريبية",
3532
+ },
3533
+ moreArtifacts: "+{{n}} أخرى",
3534
+ },
3535
+ },
2777
3536
  chatbotError: {
2778
3537
  title: "فشل الرد",
2779
3538
  fallbackDetail: "حدث خطأ ما. يرجى المحاولة مرة أخرى.",
@@ -2854,7 +3613,7 @@ const ar = {
2854
3613
  },
2855
3614
  title: "سوق التطبيقات",
2856
3615
  subtitle: "استعرض التطبيقات المعتمدة المنشورة في كتالوج ObjectStack. انقر على تطبيق لرؤية التفاصيل وتثبيته في أحد بيئاتك.",
2857
- searchPlaceholder: "ابحث عن التطبيقات بالاسم أو معرف المانيفست…",
3616
+ searchPlaceholder: 'ابحث عن التطبيقات بالاسم أو معرف التطبيق…',
2858
3617
  searchAria: "البحث في تطبيقات السوق",
2859
3618
  installed: "مثبت",
2860
3619
  installedCount: "مثبت ({{count}})",
@@ -2902,10 +3661,23 @@ const ar = {
2902
3661
  purgeSampleData: 'حذف البيانات التجريبية',
2903
3662
  purgeConfirm: 'حذف جميع السجلات التجريبية التي أنشأتها هذه الحزمة؟ لن تتأثر السجلات التي أضافها المستخدم.',
2904
3663
  purgeSuccess: 'تم حذف {{count}} سجل تجريبي.',
3664
+ purgeSuccess_zero: 'تم حذف {{count}} سجل تجريبي.',
3665
+ purgeSuccess_one: 'تم حذف {{count}} سجل تجريبي.',
3666
+ purgeSuccess_two: 'تم حذف سجلين تجريبيين ({{count}}).',
3667
+ purgeSuccess_few: 'تم حذف {{count}} سجلات تجريبية.',
3668
+ purgeSuccess_many: 'تم حذف {{count}} سجلًا تجريبيًا.',
3669
+ purgeSuccess_other: 'تم حذف {{count}} سجل تجريبي.',
2905
3670
  purgeNoData: 'لا توجد سجلات تجريبية للحذف.',
2906
3671
  reseedQueued: 'ستتم إعادة تحميل البيانات التجريبية عند الوصول التالي إلى البيئة.',
2907
3672
  reseedLocalSuccess: 'تمت إعادة تحميل البيانات التجريبية: {{inserted}} مضافة، {{updated}} محدثة.',
2908
3673
  reseedPartialErrors: '(فشل في كتابة {{count}} سجل)',
3674
+ reseedPartialErrors_zero: '(فشل في كتابة {{count}} سجل)',
3675
+ reseedPartialErrors_one: '(فشل في كتابة {{count}} سجل)',
3676
+ reseedPartialErrors_two: '(فشل في كتابة سجلين: {{count}})',
3677
+ reseedPartialErrors_few: '(فشل في كتابة {{count}} سجلات)',
3678
+ reseedPartialErrors_many: '(فشل في كتابة {{count}} سجلًا)',
3679
+ reseedPartialErrors_other: '(فشل في كتابة {{count}} سجل)',
3680
+ sampleDataKernelUnavailable: 'لا يحتوي مستوى التحكم هذا على نواة بيئة، لذا لا يمكن إعادة تحميل البيانات التجريبية أو حذفها من هنا. نفّذ ذلك من وقت التشغيل الخاص بالبيئة نفسها.',
2909
3681
  updateAvailable: 'يتوفر تحديث',
2910
3682
  },
2911
3683
  action: {
@@ -2958,7 +3730,8 @@ const ar = {
2958
3730
  reviewed: "تمت المراجعة والموافقة",
2959
3731
  unreviewed: "لم تتم المراجعة بعد",
2960
3732
  signed: "موقَّع",
2961
- grantsIntro: "عند التثبيت، ستُمنح هذه الحزمة:",
3733
+ grantsIntro: "تطلب هذه الحزمة:",
3734
+ notEnforced: "تُسجَّل هذه القائمة عند التثبيت ويُعاد تأكيدها إذا طلب إصدار لاحق المزيد، لكن بيئة التشغيل لا تقصر الحزمة على هذه القائمة بعد.",
2962
3735
  services: "خدمات المنصة",
2963
3736
  hooks: "خطافات دورة الحياة",
2964
3737
  network: "الوصول إلى الشبكة",
@@ -2997,30 +3770,27 @@ const ar = {
2997
3770
  storage: "التخزين",
2998
3771
  other: "أخرى",
2999
3772
  },
3000
- pricing: {
3001
- free: "مجاني",
3002
- freemium: "مجاني جزئياً",
3003
- paid: "مدفوع",
3004
- subscription: "اشتراك",
3005
- "usage-based": "حسب الاستخدام",
3006
- "contact-sales": "تواصل مع المبيعات",
3007
- },
3008
3773
  relativeTime: {
3009
3774
  today: "اليوم",
3010
3775
  daysAgo: "منذ {{count}} ي",
3011
3776
  monthsAgo: "منذ {{count}} شهر(أشهر)",
3777
+ monthsAgo_zero: "منذ {{count}} شهر",
3778
+ monthsAgo_one: "منذ {{count}} شهر",
3779
+ monthsAgo_two: "منذ شهرين ({{count}})",
3780
+ monthsAgo_few: "منذ {{count}} أشهر",
3781
+ monthsAgo_many: "منذ {{count}} شهرًا",
3782
+ monthsAgo_other: "منذ {{count}} شهر",
3012
3783
  yearsAgo: "منذ {{count}} سنة(سنوات)",
3784
+ yearsAgo_zero: "منذ {{count}} سنة",
3785
+ yearsAgo_one: "منذ {{count}} سنة",
3786
+ yearsAgo_two: "منذ سنتين ({{count}})",
3787
+ yearsAgo_few: "منذ {{count}} سنوات",
3788
+ yearsAgo_many: "منذ {{count}} سنة",
3789
+ yearsAgo_other: "منذ {{count}} سنة",
3013
3790
  },
3014
3791
  },
3015
- approvals: {
3016
- approve: 'الموافقة',
3017
- reject: 'رفض',
3018
- comment: 'تعليق (اختياري)',
3019
- approveSuccess: 'تمت الموافقة',
3020
- rejectSuccess: 'تم الرفض',
3021
- rejectConfirm: 'هل تريد رفض طلب الموافقة هذا؟',
3022
- },
3023
3792
  approvalsInbox: {
3793
+ recordUnresolvable: 'لا يمكن فتح هذا السجل',
3024
3794
  loadMore: 'تحميل المزيد',
3025
3795
  loadingMore: 'جارٍ التحميل…',
3026
3796
  loadedOf: 'تم تحميل {{loaded}} من {{total}}',
@@ -3039,6 +3809,12 @@ const ar = {
3039
3809
  requestInfoSent: 'أُعيد إلى مقدم الطلب لاستكمال المعلومات',
3040
3810
  remindBtn: 'تذكير',
3041
3811
  remindSuccess: 'أُرسل تذكير إلى {{count}} موافق',
3812
+ remindSuccess_zero: 'أُرسل تذكير إلى {{count}} موافق',
3813
+ remindSuccess_one: 'أُرسل تذكير إلى {{count}} موافق',
3814
+ remindSuccess_two: 'أُرسل تذكير إلى موافقَين ({{count}})',
3815
+ remindSuccess_few: 'أُرسل تذكير إلى {{count}} موافقين',
3816
+ remindSuccess_many: 'أُرسل تذكير إلى {{count}} موافقًا',
3817
+ remindSuccess_other: 'أُرسل تذكير إلى {{count}} موافق',
3042
3818
  remindThrottled: 'أُرسل تذكير مؤخرًا — حاول لاحقًا.',
3043
3819
  replyPlaceholder: 'الرد على هذا الطلب…',
3044
3820
  slaRemaining: 'SLA المتبقي {{dur}}',
@@ -3055,6 +3831,12 @@ const ar = {
3055
3831
  progressApprovals: 'الموافقات — {{got}} من {{need}}',
3056
3832
  progressGroups: 'تقدم التوقيعات — {{got}} من {{need}} مجموعات',
3057
3833
  progressEligible: '{{count}} معتمِد مؤهل',
3834
+ progressEligible_zero: '{{count}} معتمِد مؤهل',
3835
+ progressEligible_one: '{{count}} معتمِد مؤهل',
3836
+ progressEligible_two: 'معتمِدان مؤهلان ({{count}})',
3837
+ progressEligible_few: '{{count}} معتمِدين مؤهلين',
3838
+ progressEligible_many: '{{count}} معتمِدًا مؤهلًا',
3839
+ progressEligible_other: '{{count}} معتمِد مؤهل',
3058
3840
  progressBar: 'تقدم القرار',
3059
3841
  declaredActions: 'الإجراءات',
3060
3842
  attachmentChip: 'مرفق',
@@ -3086,6 +3868,12 @@ const ar = {
3086
3868
  filterCount: '{{shown}} من {{total}}',
3087
3869
  selected: 'محدد',
3088
3870
  actionableCount: '({{count}} قابلة للتنفيذ)',
3871
+ actionableCount_zero: '({{count}} قابلة للتنفيذ)',
3872
+ actionableCount_one: '({{count}} قابلة للتنفيذ)',
3873
+ actionableCount_two: '({{count}} قابلة للتنفيذ)',
3874
+ actionableCount_few: '({{count}} قابلة للتنفيذ)',
3875
+ actionableCount_many: '({{count}} قابلة للتنفيذ)',
3876
+ actionableCount_other: '({{count}} قابلة للتنفيذ)',
3089
3877
  selectAll: 'تحديد الكل',
3090
3878
  selectRow: 'تحديد الطلب',
3091
3879
  colRequest: 'الطلب',
@@ -3159,11 +3947,35 @@ const ar = {
3159
3947
  approveN: 'الموافقة على {{count}}',
3160
3948
  rejectN: 'رفض {{count}}',
3161
3949
  bulkApproveTitle: 'الموافقة على {{count}} طلبات؟',
3950
+ bulkApproveTitle_zero: 'الموافقة على {{count}} طلب؟',
3951
+ bulkApproveTitle_one: 'الموافقة على {{count}} طلب؟',
3952
+ bulkApproveTitle_two: 'الموافقة على طلبين ({{count}})؟',
3953
+ bulkApproveTitle_few: 'الموافقة على {{count}} طلبات؟',
3954
+ bulkApproveTitle_many: 'الموافقة على {{count}} طلبًا؟',
3955
+ bulkApproveTitle_other: 'الموافقة على {{count}} طلب؟',
3162
3956
  bulkApproveBody: 'ستتم الموافقة على كل طلب بهويتك ويتابع التدفق عبر فرع الموافقة.',
3163
3957
  bulkRejectTitle: 'رفض {{count}} طلبات؟',
3958
+ bulkRejectTitle_zero: 'رفض {{count}} طلب؟',
3959
+ bulkRejectTitle_one: 'رفض {{count}} طلب؟',
3960
+ bulkRejectTitle_two: 'رفض طلبين ({{count}})؟',
3961
+ bulkRejectTitle_few: 'رفض {{count}} طلبات؟',
3962
+ bulkRejectTitle_many: 'رفض {{count}} طلبًا؟',
3963
+ bulkRejectTitle_other: 'رفض {{count}} طلب؟',
3164
3964
  bulkRejectBody: 'سيتم رفض الطلبات المحددة وإخطار مقدميها.',
3165
3965
  bulkApproved: 'تمت الموافقة على {{count}} طلبات',
3966
+ bulkApproved_zero: 'تمت الموافقة على {{count}} طلب',
3967
+ bulkApproved_one: 'تمت الموافقة على {{count}} طلب',
3968
+ bulkApproved_two: 'تمت الموافقة على طلبين ({{count}})',
3969
+ bulkApproved_few: 'تمت الموافقة على {{count}} طلبات',
3970
+ bulkApproved_many: 'تمت الموافقة على {{count}} طلبًا',
3971
+ bulkApproved_other: 'تمت الموافقة على {{count}} طلب',
3166
3972
  bulkRejected: 'تم رفض {{count}} طلبات',
3973
+ bulkRejected_zero: 'تم رفض {{count}} طلب',
3974
+ bulkRejected_one: 'تم رفض {{count}} طلب',
3975
+ bulkRejected_two: 'تم رفض طلبين ({{count}})',
3976
+ bulkRejected_few: 'تم رفض {{count}} طلبات',
3977
+ bulkRejected_many: 'تم رفض {{count}} طلبًا',
3978
+ bulkRejected_other: 'تم رفض {{count}} طلب',
3167
3979
  bulkPartial: 'نجح {{ok}}، فشل {{fail}}: {{which}}',
3168
3980
  rejectOneTitle: 'رفض "{{title}}"؟',
3169
3981
  rejectOneBody: 'سيتم رفض الطلب وإخطار مقدمه.',
@@ -3188,8 +4000,26 @@ const ar = {
3188
4000
  alreadyDecided: 'تم البت في هذا الطلب بالفعل. حدّث القائمة.',
3189
4001
  justNow: 'الآن',
3190
4002
  minutesAgo: 'قبل {{count}} دقيقة',
4003
+ minutesAgo_zero: 'قبل {{count}} دقيقة',
4004
+ minutesAgo_one: 'قبل {{count}} دقيقة',
4005
+ minutesAgo_two: 'قبل دقيقتين ({{count}})',
4006
+ minutesAgo_few: 'قبل {{count}} دقائق',
4007
+ minutesAgo_many: 'قبل {{count}} دقيقة',
4008
+ minutesAgo_other: 'قبل {{count}} دقيقة',
3191
4009
  hoursAgo: 'قبل {{count}} ساعة',
4010
+ hoursAgo_zero: 'قبل {{count}} ساعة',
4011
+ hoursAgo_one: 'قبل {{count}} ساعة',
4012
+ hoursAgo_two: 'قبل ساعتين ({{count}})',
4013
+ hoursAgo_few: 'قبل {{count}} ساعات',
4014
+ hoursAgo_many: 'قبل {{count}} ساعة',
4015
+ hoursAgo_other: 'قبل {{count}} ساعة',
3192
4016
  daysAgo: 'قبل {{count}} يوم',
4017
+ daysAgo_zero: 'قبل {{count}} يوم',
4018
+ daysAgo_one: 'قبل {{count}} يوم',
4019
+ daysAgo_two: 'قبل يومين ({{count}})',
4020
+ daysAgo_few: 'قبل {{count}} أيام',
4021
+ daysAgo_many: 'قبل {{count}} يومًا',
4022
+ daysAgo_other: 'قبل {{count}} يوم',
3193
4023
  },
3194
4024
  preview: {
3195
4025
  empty: {
@@ -3224,11 +4054,23 @@ const ar = {
3224
4054
  detailNone: 'لم يتم اكتشاف اختلافات — المسودة مطابقة للنسخة المنشورة.',
3225
4055
  detailChangedKeys: 'تغييرات أخرى:',
3226
4056
  confirmNote: 'النشر يُصدر كل المسودات المعلقة ({{count}}) لهذه الحزمة دفعة واحدة.',
4057
+ confirmNote_zero: 'النشر يُصدر كل المسودات المعلقة ({{count}}) لهذه الحزمة دفعة واحدة.',
4058
+ confirmNote_one: 'النشر يُصدر كل المسودات المعلقة ({{count}}) لهذه الحزمة دفعة واحدة.',
4059
+ confirmNote_two: 'النشر يُصدر كل المسودات المعلقة ({{count}}) لهذه الحزمة دفعة واحدة.',
4060
+ confirmNote_few: 'النشر يُصدر كل المسودات المعلقة ({{count}}) لهذه الحزمة دفعة واحدة.',
4061
+ confirmNote_many: 'النشر يُصدر كل المسودات المعلقة ({{count}}) لهذه الحزمة دفعة واحدة.',
4062
+ confirmNote_other: 'النشر يُصدر كل المسودات المعلقة ({{count}}) لهذه الحزمة دفعة واحدة.',
3227
4063
  publishConfirm: 'نشر الكل',
3228
- // [objectui#5418] Pre-publish security-posture findings, shown next to
4064
+ // [`7a90afdf9`] Pre-publish security-posture findings, shown next to
3229
4065
  // the confirm button so a refusal the door would issue is read BEFORE
3230
4066
  // the click rather than as a toast after the batch rolled back.
3231
4067
  securityBlockTitle: 'سيتم رفض النشر — {{count}} عنصر (عناصر) بحاجة إلى قرار أولاً',
4068
+ securityBlockTitle_zero: 'سيتم رفض النشر — {{count}} عنصر بحاجة إلى قرار أولاً',
4069
+ securityBlockTitle_one: 'سيتم رفض النشر — {{count}} عنصر بحاجة إلى قرار أولاً',
4070
+ securityBlockTitle_two: 'سيتم رفض النشر — عنصران ({{count}}) بحاجة إلى قرار أولاً',
4071
+ securityBlockTitle_few: 'سيتم رفض النشر — {{count}} عناصر بحاجة إلى قرار أولاً',
4072
+ securityBlockTitle_many: 'سيتم رفض النشر — {{count}} عنصرًا بحاجة إلى قرار أولاً',
4073
+ securityBlockTitle_other: 'سيتم رفض النشر — {{count}} عنصر بحاجة إلى قرار أولاً',
3232
4074
  securityBlockWhere: 'أصلحه في الكائن ضمن الإعدادات ← مشاركة السجلات، ثم انشر مرة أخرى.',
3233
4075
  },
3234
4076
  // ADR-0045 — the materialized-but-unlisted app banner
@@ -3253,7 +4095,7 @@ const ar = {
3253
4095
  revertLabel: 'تم التراجع عن تغيير',
3254
4096
  applyLabel: 'تغيير من البناء',
3255
4097
  revert: 'تراجع',
3256
- items: 'عناصر',
4098
+ items: 'العناصر: {{count}}',
3257
4099
  revertAction: 'تراجع',
3258
4100
  reverted: 'تم التراجع — أُلغي التغيير.',
3259
4101
  revertFailed: 'فشل التراجع',
@@ -3282,25 +4124,25 @@ const ar = {
3282
4124
  rangeEnd: "إلى",
3283
4125
  operators: {
3284
4126
  equals: "يساوي",
3285
- notEquals: "لا يساوي",
4127
+ not_equals: "لا يساوي",
3286
4128
  contains: "يحتوي",
3287
- containsCaseInsensitive: "يحتوي (مع تجاهل حالة الأحرف)",
3288
- notContains: "لا يحتوي",
3289
- isEmpty: "فارغ",
3290
- isNotEmpty: "غير فارغ",
3291
- greaterThan: "أكبر من",
3292
- lessThan: "أصغر من",
3293
- greaterOrEqual: "أكبر من أو يساوي",
3294
- lessOrEqual: "أصغر من أو يساوي",
4129
+ icontains: "يحتوي (مع تجاهل حالة الأحرف)",
4130
+ not_contains: "لا يحتوي",
4131
+ is_empty: "فارغ",
4132
+ is_not_empty: "غير فارغ",
4133
+ greater_than: "أكبر من",
4134
+ less_than: "أصغر من",
4135
+ greater_than_or_equal: "أكبر من أو يساوي",
4136
+ less_than_or_equal: "أصغر من أو يساوي",
3295
4137
  before: "قبل",
3296
4138
  after: "بعد",
3297
4139
  between: "بين",
3298
4140
  in: "ضمن",
3299
- notIn: "ليس ضمن",
3300
- startsWith: "يبدأ بـ",
3301
- endsWith: "ينتهي بـ",
3302
- isNull: "يساوي null",
3303
- isNotNull: "لا يساوي null",
4141
+ not_in: "ليس ضمن",
4142
+ starts_with: "يبدأ بـ",
4143
+ ends_with: "ينتهي بـ",
4144
+ is_null: "يساوي null",
4145
+ is_not_null: "لا يساوي null",
3304
4146
  exists: "محدد",
3305
4147
  notExists: "غير محدد",
3306
4148
  },
@@ -3315,8 +4157,16 @@ const ar = {
3315
4157
  removeSort: "إزالة الترتيب",
3316
4158
  },
3317
4159
  collaboration: {
3318
- commentCount: "{{count}} تعليقات",
3319
- commentCountOne: "{{count}} تعليق",
4160
+ // objectui#11445 — `commentCount` and `reactionCount` below are count
4161
+ // families: each of the six CLDR slots carries its own noun form, and the
4162
+ // base key, a count label, answers a call made without a count.
4163
+ commentCount: "عدد التعليقات: {{count}}",
4164
+ commentCount_zero: "{{count}} تعليق",
4165
+ commentCount_one: "{{count}} تعليق",
4166
+ commentCount_two: "تعليقان ({{count}})",
4167
+ commentCount_few: "{{count}} تعليقات",
4168
+ commentCount_many: "{{count}} تعليقًا",
4169
+ commentCount_other: "{{count}} تعليق",
3320
4170
  resolvedSuffix: " · تم الحل",
3321
4171
  sortComments: "ترتيب التعليقات",
3322
4172
  sortOldest: "الأقدم أولاً",
@@ -3325,11 +4175,34 @@ const ar = {
3325
4175
  reopen: "إعادة الفتح",
3326
4176
  justNow: "الآن",
3327
4177
  minutesAgo: "قبل {{count}} دقيقة",
4178
+ minutesAgo_zero: "قبل {{count}} دقيقة",
4179
+ minutesAgo_one: "قبل {{count}} دقيقة",
4180
+ minutesAgo_two: "قبل دقيقتين ({{count}})",
4181
+ minutesAgo_few: "قبل {{count}} دقائق",
4182
+ minutesAgo_many: "قبل {{count}} دقيقة",
4183
+ minutesAgo_other: "قبل {{count}} دقيقة",
3328
4184
  hoursAgo: "قبل {{count}} ساعة",
4185
+ hoursAgo_zero: "قبل {{count}} ساعة",
4186
+ hoursAgo_one: "قبل {{count}} ساعة",
4187
+ hoursAgo_two: "قبل ساعتين ({{count}})",
4188
+ hoursAgo_few: "قبل {{count}} ساعات",
4189
+ hoursAgo_many: "قبل {{count}} ساعة",
4190
+ hoursAgo_other: "قبل {{count}} ساعة",
3329
4191
  daysAgo: "قبل {{count}} يوم",
4192
+ daysAgo_zero: "قبل {{count}} يوم",
4193
+ daysAgo_one: "قبل {{count}} يوم",
4194
+ daysAgo_two: "قبل يومين ({{count}})",
4195
+ daysAgo_few: "قبل {{count}} أيام",
4196
+ daysAgo_many: "قبل {{count}} يومًا",
4197
+ daysAgo_other: "قبل {{count}} يوم",
3330
4198
  edited: "(تم التعديل)",
3331
- reactionCount: "{{count}} تفاعلات",
3332
- reactionCountOne: "{{count}} تفاعل",
4199
+ reactionCount: "عدد التفاعلات: {{count}}",
4200
+ reactionCount_zero: "{{count}} تفاعل",
4201
+ reactionCount_one: "{{count}} تفاعل",
4202
+ reactionCount_two: "تفاعلان ({{count}})",
4203
+ reactionCount_few: "{{count}} تفاعلات",
4204
+ reactionCount_many: "{{count}} تفاعلًا",
4205
+ reactionCount_other: "{{count}} تفاعل",
3333
4206
  addThumbsUp: "إضافة إعجاب",
3334
4207
  reply: "رد",
3335
4208
  reactThumbsUp: "التفاعل بإعجاب",
@@ -3339,10 +4212,22 @@ const ar = {
3339
4212
  replyingToComment: "الرد على التعليق…",
3340
4213
  commentPlaceholder: "أضف تعليقًا… (استخدم @ للإشارة)",
3341
4214
  send: "إرسال",
3342
- presentUserCount: "{{count}} مستخدمين متواجدين",
3343
- presentUserCountOne: "{{count}} مستخدم متواجد",
3344
- moreUserCount: "{{count}} مستخدمين آخرين",
3345
- moreUserCountOne: "{{count}} مستخدم آخر",
4215
+ // objectui#11445 — the presence stack's name and its overflow badge are
4216
+ // count families too.
4217
+ presentUserCount: "عدد المستخدمين المتواجدين: {{count}}",
4218
+ presentUserCount_zero: "{{count}} مستخدم متواجد",
4219
+ presentUserCount_one: "{{count}} مستخدم متواجد",
4220
+ presentUserCount_two: "مستخدمان متواجدان ({{count}})",
4221
+ presentUserCount_few: "{{count}} مستخدمين متواجدين",
4222
+ presentUserCount_many: "{{count}} مستخدمًا متواجدًا",
4223
+ presentUserCount_other: "{{count}} مستخدم متواجد",
4224
+ moreUserCount: "عدد المستخدمين الآخرين: {{count}}",
4225
+ moreUserCount_zero: "{{count}} مستخدم آخر",
4226
+ moreUserCount_one: "{{count}} مستخدم آخر",
4227
+ moreUserCount_two: "مستخدمان آخران ({{count}})",
4228
+ moreUserCount_few: "{{count}} مستخدمين آخرين",
4229
+ moreUserCount_many: "{{count}} مستخدمًا آخر",
4230
+ moreUserCount_other: "{{count}} مستخدم آخر",
3346
4231
  userStatusTitle: "{{name}} ({{status}})",
3347
4232
  statusActive: "نشط",
3348
4233
  statusIdle: "خامل",
@@ -3350,6 +4235,11 @@ const ar = {
3350
4235
  },
3351
4236
  wizard: {
3352
4237
  missingRequired: "يرجى إكمال الحقول المطلوبة: {{fields}}",
4238
+ back: "رجوع",
4239
+ submitting: "جارٍ الإرسال…",
4240
+ stepFallback: "الخطوة {{n}}",
4241
+ progressLabel: "التقدم",
4242
+ emptyStep: "لا توجد حقول مهيأة لهذه الخطوة",
3353
4243
  },
3354
4244
  flowRunner: {
3355
4245
  title: 'إدخال',
@@ -3407,5 +4297,49 @@ const ar = {
3407
4297
  bulkOperationFailed: "فشلت العملية الجماعية: {{reason}}",
3408
4298
  },
3409
4299
  },
4300
+ // objectui#6301 — الإعداد › أتمتة الحزم (ADR-0126 §7.4). المصطلحات كما في
4301
+ // بقية الحزمة: ‏`common.package` = الحزمة، و`flowRunner.completed` = التدفق،
4302
+ // وعلامات الاقتباس «…». ⛔ لا توجد صياغة عن الأصل أو الانحراف في هذه
4303
+ // المجموعة (§9).
4304
+ packagedAutomation: {
4305
+ title: "أتمتة الحزم",
4306
+ subtitle: "تدفقات وإجراءات تأتي مع الحزم المثبّتة. يمكنك إيقاف أي منها في هذا النشر، أو استنساخ تدفق باسم جديد لتخصيصه. التحرير يتم في Studio.",
4307
+ refresh: "تحديث",
4308
+ flowsHeading: "تدفقات الحزم",
4309
+ actionsHeading: "إجراءات الحزم",
4310
+ colFlow: "التدفق",
4311
+ colActivation: "التفعيل",
4312
+ colActions: "إجراءات",
4313
+ toggleLabel: "تفعيل {{label}}",
4314
+ on: "مفعل",
4315
+ off: "إيقاف",
4316
+ clone: "استنساخ",
4317
+ cloneTitle: "استنساخ تدفق الحزمة",
4318
+ cloneBody: "تحتفظ النسخة بالتعريف كاملاً وتتطلب اسم آلة وتسمية جديدين. حرّر النسخة في Studio.",
4319
+ cloneName: "اسم آلة جديد",
4320
+ cloneLabel: "تسمية جديدة",
4321
+ cancel: "إلغاء",
4322
+ cloneConfirm: "إنشاء نسخة",
4323
+ cloneCreated: "تم إنشاء التدفق «{{name}}».",
4324
+ emptyTitle: "لا توجد تدفقات من الحزم",
4325
+ emptyBody: "لا توجد حزمة مثبّتة توفّر تدفق أتمتة في هذا النشر. التدفقات التي تنشئها بنفسك موجودة في Studio.",
4326
+ loadFailed: "تعذّر تحميل أتمتة الحزم.",
4327
+ toggleFailedHttp: "تعذّر تغيير التفعيل (HTTP {{status}}).",
4328
+ toggleFailed: "تعذّر تغيير التفعيل.",
4329
+ cloneFailedHttp: "تعذّر استنساخ هذا التدفق (HTTP {{status}}).",
4330
+ cloneFailed: "تعذّر استنساخ هذا التدفق.",
4331
+ actionsSubtitle: "إجراءات تأتي مع الحزم المثبّتة. أوقف أحدها في هذا النشر فيتوقف عن العمل في كل مكان يُعرض فيه. ويبقى بإمكانك إنشاء إجراء خاص بك إلى جانبه في Studio.",
4332
+ colAction: "الإجراء",
4333
+ colObject: "الكائن",
4334
+ actionToggleLabel: "تفعيل {{label}} على {{object}}",
4335
+ actionsEmptyTitle: "لا توجد إجراءات من الحزم",
4336
+ actionsEmptyBody: "لا توجد حزمة مثبّتة تعلن عن إجراء في هذا النشر. الإجراءات التي تنشئها بنفسك موجودة في Studio.",
4337
+ actionsLoadFailed: "تعذّر تحميل إجراءات الحزم.",
4338
+ },
4339
+ element: {
4340
+ number: {
4341
+ noObject: "لم يُحدَّد أي كائن: عيّن object أو dataSource.object.",
4342
+ },
4343
+ },
3410
4344
  };
3411
4345
  export default ar;