@object-ui/i18n 16.1.0 → 17.2.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.
@@ -1,6 +1,15 @@
1
1
  const ar = {
2
2
  // objectui#2600 B5 — capability picker scope group headers (labels come from the sys_capability registry).
3
3
  capability: {
4
+ label: {
5
+ manage_users: "إدارة المستخدمين",
6
+ manage_org_users: "إدارة مستخدمي المؤسسة",
7
+ manage_metadata: "إدارة البيانات الوصفية",
8
+ manage_platform_settings: "إدارة إعدادات المنصة",
9
+ setup_access: "الوصول إلى الإعداد",
10
+ setup_write: "كتابة الإعدادات",
11
+ studio_access: "الوصول إلى Studio",
12
+ },
4
13
  group: {
5
14
  platform: 'منصة',
6
15
  org: 'منظمة',
@@ -74,6 +83,10 @@ const ar = {
74
83
  package: "الحزمة",
75
84
  },
76
85
  actions: {
86
+ decisionOutput: {
87
+ help: 'يُمرَّر إلى التدفق كمخرج للقرار.',
88
+ helpMultiValue: 'يُمرَّر إلى التدفق كمخرج للقرار. افصل بين القيم المتعددة بفواصل.',
89
+ },
77
90
  resultDialog: {
78
91
  defaultTitle: 'احفظ هذه القيمة الآن',
79
92
  acknowledge: 'لقد حفظتها',
@@ -94,6 +107,16 @@ const ar = {
94
107
  type: "{{field}} يجب أن يكون {{type}} صالحاً",
95
108
  },
96
109
  form: {
110
+ noPermissionToSave: "ليس لديك إذن لحفظ هذا السجل.",
111
+ submitFailed: "تعذّر الحفظ. يرجى المحاولة مرة أخرى.",
112
+ discardTitle: "تجاهل التغييرات؟",
113
+ discardMessage: "لديك تغييرات غير محفوظة. إذا أغلقت هذا النموذج الآن، ستفقد تعديلاتك.",
114
+ keepEditing: "متابعة التحرير",
115
+ discard: "تجاهل",
116
+ conflictTitle: "تعارض في الحفظ",
117
+ conflictMessage: "قام شخص آخر بتغيير هذا السجل أثناء تحريرك. الكتابة فوقه ستستبدل تغييراته بتغييراتك.",
118
+ conflictLatestVersion: "وقت حفظه: {{time}}",
119
+ conflictOverwrite: "الكتابة فوقه",
97
120
  addItem: "إضافة عنصر",
98
121
  removeItem: "إزالة عنصر",
99
122
  fieldRequired: "هذا الحقل مطلوب",
@@ -104,8 +127,6 @@ const ar = {
104
127
  stepOf: "الخطوة {{current}} من {{total}}",
105
128
  createTitle: "إنشاء {{object}}",
106
129
  editTitle: "تعديل {{object}}",
107
- createDescription: "إضافة {{object}} جديد إلى قاعدة البيانات.",
108
- editDescription: "تحديث تفاصيل {{object}}",
109
130
  saveRecord: "حفظ السجل",
110
131
  create: "إنشاء",
111
132
  update: "تحديث",
@@ -114,14 +135,70 @@ const ar = {
114
135
  deleteSuccess: "تم حذف {{object}}",
115
136
  },
116
137
  fields: {
138
+ image: {
139
+ upload: "رفع صورة",
140
+ addMore: "إضافة المزيد من الصور",
141
+ uploading: "جارٍ الرفع…",
142
+ imageAlt: "صورة {{index}}",
143
+ crop: "قص الصورة {{index}}",
144
+ remove: "إزالة الصورة {{index}}",
145
+ enlarge: "تكبير {{name}}",
146
+ preview: "معاينة الصورة",
147
+ previous: "الصورة السابقة",
148
+ next: "الصورة التالية",
149
+ counter: "{{current}} / {{total}}",
150
+ },
117
151
  relativeDate: {
118
152
  overdue: "متأخر {{count}} يوم",
119
153
  },
154
+ file: {
155
+ dragDropHere: 'اسحب الملفات وأفلتها هنا',
156
+ dropFilesHere: 'أفلت الملفات هنا',
157
+ browseHint: 'أو انقر للتصفح',
158
+ browseHintCamera: 'أو انقر للتصفح • استخدم زر الكاميرا أدناه',
159
+ takePhoto: 'التقاط صورة',
160
+ takeSelfie: 'التقاط صورة ذاتية',
161
+ cameraCapture: 'التقاط بالكاميرا',
162
+ uploading: 'جارٍ الرفع…',
163
+ uploadingPct: 'جارٍ الرفع… ({{pct}}%)',
164
+ fileFallback: 'ملف',
165
+ upload: 'رفع',
166
+ remove: 'إزالة {{name}}',
167
+ exceedsMaxSize: '"{{name}}" يتجاوز الحجم الأقصى ({{max}} ميغابايت)',
168
+ uploadFailed: 'فشل رفع "{{name}}": {{error}}',
169
+ },
120
170
  richText: {
121
171
  format: "التنسيق: {{format}}",
122
172
  basicEditorHint: "محرر النص الغني (أساسي)",
123
173
  placeholder: "اكتب شيئاً...",
124
174
  },
175
+ objectRef: {
176
+ loading: "جارٍ تحميل الكائنات…",
177
+ placeholder: "اختر كائناً",
178
+ search: "بحث في الكائنات…",
179
+ empty: "لم يتم العثور على كائنات",
180
+ },
181
+ recipient: {
182
+ selectTypeFirst: "اختر نوع المستلم أولاً.",
183
+ loading: "جارٍ التحميل…",
184
+ search: "بحث…",
185
+ empty: "لا توجد نتائج مطابقة",
186
+ select: "اختر مستلماً",
187
+ selectUser: "اختر مستخدماً",
188
+ selectTeam: "اختر فريقاً",
189
+ selectBusinessUnit: "اختر وحدة عمل",
190
+ selectPosition: "اختر منصباً",
191
+ selectUnitAndSubordinates: "اختر وحدة عمل",
192
+ },
193
+ filterCondition: {
194
+ selectObjectFirst: "اختر كائناً أولاً.",
195
+ noCriteria: "لا توجد معايير — لا تشارك هذه القاعدة أي شيء",
196
+ criteriaRequired: "أضف شرطًا واحدًا على الأقل. القاعدة بدون معايير ستشارك كل السجلات، لذا لا يمكن حفظها.",
197
+ invalidJson: "JSON غير صالح — لن تطابق القاعدة أي سجل حتى يتم إصلاحه.",
198
+ jsonOnly: "لا يمكن تحرير هذا المعيار إلا بصيغة JSON",
199
+ editAsJson: "التحرير بصيغة JSON",
200
+ useVisualBuilder: "استخدام المُنشئ المرئي",
201
+ },
125
202
  },
126
203
  table: {
127
204
  rowsPerPage: "صفوف في الصفحة",
@@ -156,6 +233,37 @@ const ar = {
156
233
  delete: "حذف",
157
234
  },
158
235
  grid: {
236
+ bulkSelected: "تم تحديد {{count}}",
237
+ bulkSelectedAllMatches: "تم تحديد {{count}} (كل النتائج المطابقة)",
238
+ bulkClear: "إلغاء التحديد",
239
+ bulkAllOnPage: "تم تحديد جميع العناصر ({{count}}) في هذه الصفحة.",
240
+ bulkSelectAllMatching: "تحديد كل النتائج المطابقة ({{count}})",
241
+ bulkAllMatchingSelected: "تم تحديد جميع السجلات المطابقة ({{count}}).",
242
+ bulk: {
243
+ confirmDefault: "سيُطبَّق هذا على {{count}} من السجلات.",
244
+ overLimit: "التحديد ({{count}}) يتجاوز حد الإجراء ({{limit}}). قلّل التحديد للمتابعة.",
245
+ affectedRecords: "السجلات المتأثرة ({{count}}):",
246
+ skippedIneligible: '{{count}} من السجلات المحددة غير مؤهلة لهذا الإجراء وسيتم تخطيها.',
247
+ rowFallback: "الصف {{index}}",
248
+ andMore: "… و{{count}} أخرى",
249
+ processed: "تمت معالجة {{count}} / {{total}}",
250
+ processedFailed: " · فشل {{count}}",
251
+ undonePrefix: "تم التراجع — ",
252
+ succeeded: "نجح {{count}} / {{total}}",
253
+ resultFailed: " · فشل {{count}}",
254
+ retry: "إعادة المحاولة",
255
+ downloadErrorCsv: "تنزيل ملف CSV للأخطاء",
256
+ cancel: "إلغاء",
257
+ back: "رجوع",
258
+ next: "التالي",
259
+ run: "تشغيل",
260
+ running: "قيد التشغيل…",
261
+ undo: "تراجع",
262
+ undoing: "جارٍ التراجع…",
263
+ done: "تم",
264
+ selectPlaceholder: "اختر…",
265
+ loading: "جارٍ التحميل…",
266
+ },
159
267
  actions: "إجراءات",
160
268
  edit: "تعديل",
161
269
  delete: "حذف",
@@ -181,7 +289,88 @@ const ar = {
181
289
  densityCycleShortHint: "انقر للتغيير",
182
290
  },
183
291
  import: {
292
+ downloadTemplate: "تنزيل القالب",
293
+ downloadTemplateHint: "احصل على ملف CSV بالأعمدة الصحيحة (الحقول المطلوبة معلَّمة بـ *).",
294
+ templateFileName: "{{object}}-import-template",
295
+ autoMatched: "تمت المطابقة تلقائيًا",
296
+ autoMatchedSummary: "تمت مطابقة {{count}} عمودًا تلقائيًا — راجعها وعدّلها أدناه.",
297
+ confidence: {
298
+ high: "ثقة عالية",
299
+ medium: "ثقة متوسطة",
300
+ low: "ثقة منخفضة",
301
+ },
302
+ asyncQueued: "في الانتظار — يجري تجهيز الاستيراد…",
303
+ asyncProcessing: "جارٍ استيراد {{processed}} من {{total}} صفًا… {{progress}}%",
304
+ asyncLargeHint: "هذا الملف كبير، لذلك سيتم استيراده في الخلفية.",
305
+ largeSampleNotice: "معاينة أول {{shown}} صفًا من أصل {{total}}.",
306
+ cancelImport: "إلغاء الاستيراد",
307
+ importCancelled: "تم إلغاء الاستيراد",
308
+ resultsTruncated: "عرض نتائج أول {{count}} صفًا (من أصل {{total}}).",
309
+ createdCount: "تم إنشاء {{count}}",
310
+ updatedCount: "تم تحديث {{count}}",
311
+ downloadFailed: "تنزيل الصفوف الفاشلة",
312
+ options: "خيارات الاستيراد",
313
+ writeMode: "عند تطابق صف مع سجل موجود",
314
+ writeModeOpt: {
315
+ insert: "إنشاء سجل جديد دائمًا",
316
+ update: "تحديث الموجود (تخطٍّ عند عدم التطابق)",
317
+ upsert: "التحديث عند التطابق، وإلا الإنشاء",
318
+ },
319
+ matchFields: "المطابقة حسب",
320
+ matchFieldsPlaceholder: "اختر حقول المطابقة…",
321
+ matchFieldsHint: "تتم مطابقة الصفوف بالسجلات الموجودة عبر هذه الحقول.",
322
+ needMatchFields: "اختر حقلًا واحدًا على الأقل للمطابقة.",
323
+ matchOnlyField: "(للمطابقة فقط)",
324
+ optCreateOptions: "الاحتفاظ بقيم الخيارات غير المعروفة",
325
+ optRunAutomations: "تشغيل الأتمتة والمشغّلات",
326
+ optTreatHistorical: "الاستيراد كبيانات تاريخية",
327
+ optTreatHistoricalHint: "(استيراد السجلات المكتملة كما هي — تخطي فحوصات آلة الحالات والاحتفاظ بالطوابع الزمنية والمؤلف الأصليين بدل ختمها الآن)",
328
+ optSkipBlankKey: "تخطي الصفوف التي تكون قيمة المطابقة فيها فارغة",
329
+ optBackground: "الاستيراد في الخلفية",
330
+ optBackgroundHint: "(يعمل كمهمة قابلة للتراجع)",
331
+ validate: "التحقق من البيانات",
332
+ validating: "جارٍ التحقق…",
333
+ validateHint: "التحقق من كل صف على الخادم قبل الاستيراد.",
334
+ validatePassed: "جميع الصفوف ({{ok}}) صالحة.",
335
+ validateFailed: "{{ok}} صالحة، و{{errors}} بها أخطاء.",
336
+ errorRowPrefix: "الصف {{row}}: ",
337
+ referenceNotFound: "لا يوجد سجل مطابق لـ «{{value}}»",
338
+ referenceAmbiguous: "«{{value}}» يطابق أكثر من سجل — استخدم قيمة فريدة أو معرّف السجل",
339
+ invalidBoolean: "«{{value}}» ليست قيمة صواب/خطأ صالحة",
340
+ invalidNumber: "«{{value}}» ليست رقمًا صالحًا",
341
+ invalidDate: "«{{value}}» ليست تاريخًا صالحًا",
342
+ invalidOption: "«{{value}}» ليست ضمن الخيارات المسموح بها",
343
+ requiredValue: "هذا الحقل مطلوب",
344
+ matchAmbiguous: "يطابق أكثر من سجل موجود — استخدم قيمة فريدة أو معرّف السجل",
345
+ history: "السجل",
346
+ historyBack: "العودة إلى الاستيراد",
347
+ historyDescription: "عمليات الاستيراد الأخيرة لهذا الكائن.",
348
+ historyHint: "مهام الاستيراد في الخلفية، الأحدث أولًا.",
349
+ historyRefresh: "تحديث",
350
+ historyLoading: "جارٍ التحميل…",
351
+ historyEmpty: "لا توجد عمليات استيراد بعد.",
352
+ historyUnsupported: "سجل الاستيراد غير متاح لمصدر البيانات هذا.",
353
+ historyColStatus: "الحالة",
354
+ historyColRows: "الصفوف",
355
+ historyColResult: "النتيجة",
356
+ historyColTime: "الوقت",
357
+ errorCount: "{{count}} من الأخطاء",
358
+ undoImport: "التراجع عن الاستيراد",
359
+ undoing: "جارٍ التراجع…",
360
+ undoConfirm: "هل تريد التراجع عن هذا الاستيراد؟ ستُحذف السجلات التي أنشأها وتُستعاد السجلات التي حدّثها إلى قيمها السابقة.",
361
+ reverted: "تم التراجع",
362
+ jobStatus: {
363
+ pending: "قيد الانتظار",
364
+ running: "قيد التنفيذ",
365
+ succeeded: "نجح",
366
+ failed: "فشل",
367
+ cancelled: "أُلغي",
368
+ },
369
+ legacyReferenceBlocked: "تم حظر الاستيراد: {{fields}} حقول علاقات تحتاج إلى مسار الاستيراد على الخادم لتحويل الأسماء إلى معرّفات سجلات، وهذا الاتصال لا يدعم ذلك. استيرادها كنص عادي سيُفسد البيانات. حدّث الخادم/العميل، أو ألغِ ربط هذه الأعمدة واستوردها على حدة.",
370
+ missingRequiredHint: "لا يمكن المتابعة — حقول مطلوبة غير مرتبطة: {{fields}}. أضف عمودًا مطابقًا إلى ملفك، أو ارجع وارفع ملفًا يتضمنه.",
371
+ legacyFallbackNotice: "تم الاستيراد عبر وضع توافقي: هذا الاتصال لا يدعم مسار الاستيراد على الخادم، لذلك حُفظت القيم كنص دون تحويل للأنواع على الخادم. حدّث الخادم/العميل للحصول على دعم الاستيراد الكامل (تحويل الأنواع والبحث عن العلاقات).",
184
372
  title: "استيراد {{object}}",
373
+ notAllowed: "هذا الكائن غير متاح للاستيراد.",
185
374
  stepUpload: "رفع",
186
375
  stepMapping: "تعيين",
187
376
  stepPreview: "معاينة",
@@ -257,6 +446,42 @@ const ar = {
257
446
  moreEvents: "+{{count}} المزيد",
258
447
  },
259
448
  list: {
449
+ firstRunTitle: "لا يوجد شيء هنا بعد",
450
+ firstRunMessage: "أنشئ سجلك الأول للبدء.",
451
+ noMatches: "لا توجد سجلات مطابقة",
452
+ noMatchesMessage: "لا توجد سجلات تطابق عوامل التصفية أو البحث الحالية. حاول تعديلها أو مسحها.",
453
+ loadErrorTitle: "تعذّر تحميل السجلات",
454
+ loadErrorMessage: "حدث خطأ أثناء تحميل هذه البيانات. تحقق من اتصالك وحاول مرة أخرى.",
455
+ loadErrorForbiddenTitle: "ليس لديك صلاحية الوصول",
456
+ loadErrorForbiddenMessage: "ليس لديك إذن لعرض هذه السجلات. تواصل مع المسؤول إذا كنت تعتقد أنه يجب أن يكون لديك وصول.",
457
+ loadErrorUnauthorizedTitle: "يلزم تسجيل الدخول",
458
+ loadErrorUnauthorizedMessage: "انتهت صلاحية جلستك أو تم تسجيل خروجك. سجّل الدخول مرة أخرى لعرض هذه السجلات.",
459
+ loadErrorRejectedTitle: "تم رفض استعلام طريقة العرض هذه",
460
+ loadErrorRejectedMessage: "تعذّر على الخادم معالجة عامل التصفية أو خيارات الاستعلام لطريقة العرض هذه. مسح عوامل التصفية يحل المشكلة عادةً؛ وإذا كانت طريقة العرض محفوظة بهذا الشكل، فيجب على المسؤول تصحيحها.",
461
+ retry: "إعادة المحاولة",
462
+ managedBy: {
463
+ system: {
464
+ title: "لا يوجد شيء هنا بعد",
465
+ message: "تظهر الإدخالات تلقائيًا عند تنفيذ الإجراء المصدر (مثل إرسال للموافقة، أو المشاركة، أو الدعوة). نفّذ أحدها على سجل مصدر لإنشاء صف.",
466
+ },
467
+ appendOnly: {
468
+ title: "لم تُسجَّل أي أحداث",
469
+ message: "هذا سجل تدقيق غير قابل للتعديل. تكتب المنصة الصفوف عند وقوع الأحداث — يمكنك تصدير السجل لكن لا يمكنك إنشاء إدخالات من هنا.",
470
+ },
471
+ betterAuth: {
472
+ title: "لا توجد سجلات هوية",
473
+ message: "ينشئ مزوّد المصادقة هذه السجلات — من خلال تسجيل الدخول والتزويد وإجراءات الأمان — ولا تُضاف يدويًا من هنا.",
474
+ },
475
+ betterAuthUser: {
476
+ title: "لا يوجد مستخدمون بعد",
477
+ message: "يزوّد مزوّد المصادقة حسابات المستخدمين، ولا تُنشأ من هنا. ادعُ زملاءك إلى مؤسستك وسيظهرون تلقائيًا عند أول تسجيل دخول (التزويد الفوري عبر SSO). أما مستخدمو التطبيق النهائيون فيُضافون عند تسجيلهم عبر تطبيقك.",
478
+ },
479
+ betterAuthTeam: {
480
+ title: "لا توجد فرق بعد",
481
+ message: "تجمع الفرق الأعضاء داخل المؤسسة. أنشئ فريقًا عبر «إنشاء فريق»، أو تأتي الفرق من خلال إجراءات تزويد المؤسسات و SSO لدى مزوّد المصادقة.",
482
+ },
483
+ },
484
+ refresh: "تحديث",
260
485
  loading: 'Loading records...',
261
486
  recordCount: "{{count}} سجلات",
262
487
  recordCountOne: "{{count}} سجل",
@@ -268,6 +493,8 @@ const ar = {
268
493
  filterRecords: "تصفية السجلات",
269
494
  sort: "ترتيب",
270
495
  sortRecords: "ترتيب السجلات",
496
+ sortByIdSuffix: "(حسب المعرّف)",
497
+ sortRelationalHint: "الأعمدة التي تشير إلى سجل آخر غير مدرجة هنا: يمكن ترتيبها حسب المعرّف المخزَّن فقط، وليس حسب الاسم الظاهر في الخلية. للترتيب حسب ذلك الاسم، أضف حقل صيغة يحتوي عليه.",
271
498
  group: "تجميع",
272
499
  groupBy: "تجميع حسب",
273
500
  export: "تصدير",
@@ -297,6 +524,11 @@ const ar = {
297
524
  recordEditingTitle: "تحرير السجلات",
298
525
  },
299
526
  managedByBadge: {
527
+ systemWritable: {
528
+ short: "مخطط المنصة",
529
+ title: "تحدده المنصة وقابل للكتابة من المسؤول",
530
+ body: "تحدد المنصة مخطط هذا الكائن، لكن صفوفه لك تنشئها وتحررها هنا. ومن يحق له الكتابة تحدده الإدارة المفوَّضة والأمان على مستوى السجل، لا هذه الشارة.",
531
+ },
300
532
  config: {
301
533
  short: "إعدادات المسؤول",
302
534
  title: "تكوين المسؤول",
@@ -319,6 +551,7 @@ const ar = {
319
551
  },
320
552
  },
321
553
  kanban: {
554
+ uncategorized: "غير مصنّف",
322
555
  addCard: "إضافة بطاقة",
323
556
  addColumn: "إضافة عمود",
324
557
  moveCard: "نقل بطاقة",
@@ -340,12 +573,92 @@ const ar = {
340
573
  },
341
574
  },
342
575
  gantt: {
576
+ viewMode: {
577
+ day: "يوم",
578
+ week: "أسبوع",
579
+ month: "شهر",
580
+ quarter: "ربع سنة",
581
+ year: "سنة",
582
+ },
583
+ row: {
584
+ expand: "توسيع",
585
+ collapse: "طي",
586
+ open: "فتح التفاصيل",
587
+ },
588
+ aria: {
589
+ taskList: "قائمة المهام",
590
+ },
591
+ tooltip: {
592
+ days: "ي",
593
+ },
594
+ menu: {
595
+ view: "عرض التفاصيل",
596
+ edit: "تحرير مباشر",
597
+ delete: "حذف",
598
+ addPredecessor: "إضافة مهمة سابقة…",
599
+ addSuccessor: "إضافة مهمة لاحقة…",
600
+ removeDependency: "إزالة التبعية",
601
+ noCandidates: "لا توجد مهام متاحة",
602
+ searchTasks: "البحث في المهام…",
603
+ },
604
+ delete: {
605
+ title: "حذف هذه المهمة؟",
606
+ body: "ستُحذف «{{title}}» نهائيًا. لا يمكن التراجع عن هذا الإجراء.",
607
+ cancel: "إلغاء",
608
+ confirm: "حذف",
609
+ deleting: "جارٍ الحذف…",
610
+ },
611
+ drawer: {
612
+ fallbackTitle: "تفاصيل المهمة",
613
+ },
614
+ linkType: {
615
+ fs: "نهاية → بداية",
616
+ ss: "بداية → بداية",
617
+ ff: "نهاية → نهاية",
618
+ sf: "بداية → نهاية",
619
+ },
620
+ conflict: {
621
+ title: "تعارض في الجدولة",
622
+ body: "يتعارض هذا النقل مع قيود التبعية. هل تريد إعادة جدولة {{count}} من المهام المتأثرة تلقائيًا؟",
623
+ confirm: "إعادة الجدولة تلقائيًا",
624
+ cancel: "الإبقاء كما هو",
625
+ },
626
+ autoScheduleDlg: {
627
+ title: "الجدولة التلقائية",
628
+ body: "هل تريد تأخير {count} من المهام لتلبية روابط التبعية؟",
629
+ skipped: "{count} من المهام المقفلة تخالف الروابط أيضًا وقد تم تخطيها.",
630
+ confirm: "تطبيق",
631
+ cancel: "إلغاء",
632
+ none: "جميع التبعيات مستوفاة — لا شيء لإعادة جدولته.",
633
+ },
634
+ resource: {
635
+ header: "المورد",
636
+ peak: "الذروة",
637
+ over: "محمّل بإفراط",
638
+ empty: "لا توجد مهام لتخصيصها.",
639
+ },
640
+ readOnly: "للقراءة فقط",
641
+ readOnlyHint: "التحرير معطّل في هذا العرض.",
642
+ lockedHint: "لا توجد صلاحية تحرير",
643
+ writeFailed: "فشل الحفظ — تم التراجع عن التغيير",
343
644
  column: {
344
645
  taskName: "اسم المهمة",
345
646
  start: "البداية",
346
647
  end: "النهاية",
347
648
  },
348
649
  toolbar: {
650
+ thisWeek: "هذا الأسبوع",
651
+ thisMonth: "هذا الشهر",
652
+ viewMode: "دقة الخط الزمني",
653
+ enterFullscreen: "ملء الشاشة",
654
+ exitFullscreen: "إنهاء ملء الشاشة",
655
+ criticalPath: "إبراز المسار الحرج",
656
+ autoSchedule: "جدولة التبعيات تلقائيًا",
657
+ exportPng: "تصدير بصيغة PNG",
658
+ exportPdf: "تصدير PDF",
659
+ saveLayout: "حفظ التخطيط",
660
+ undo: "تراجع",
661
+ redo: "إعادة",
349
662
  prevPeriod: "الفترة السابقة",
350
663
  nextPeriod: "الفترة التالية",
351
664
  zoomIn: "تكبير",
@@ -391,6 +704,11 @@ const ar = {
391
704
  redo: 'Redo',
392
705
  },
393
706
  detail: {
707
+ editInlineHint: "انقر نقرًا مزدوجًا للتحرير",
708
+ systemActor: "النظام",
709
+ unknownUser: "غير معروف",
710
+ created: "أُنشئ",
711
+ updated: "حُدِّث",
394
712
  back: "رجوع",
395
713
  edit: "تحرير",
396
714
  editInline: "تحرير",
@@ -440,6 +758,18 @@ const ar = {
440
758
  attachmentCount: "{{count}} مرفق",
441
759
  attachmentCountPlural: "{{count}} مرفقات",
442
760
  removeAttachment: "إزالة المرفق",
761
+ // Record Attachments panel (enable.files, objectstack#4358)
762
+ attachments: "المرفقات",
763
+ uploadAttachment: "رفع",
764
+ loadingAttachments: "جارٍ تحميل المرفقات…",
765
+ noAttachments: "لا توجد مرفقات بعد. ارفع ملفًا للبدء.",
766
+ downloadAttachment: "تنزيل",
767
+ deleteAttachment: "حذف المرفق",
768
+ attachmentDeleteDenied: "لا يمكن حذف هذا المرفق إلا لمن رفعه أو لمن يمكنه تعديل هذا السجل.",
769
+ attachmentParentAccessDenied: "ليس لديك صلاحية إرفاق ملفات بهذا السجل.",
770
+ attachmentDownloadDenied: "ليس لديك صلاحية تنزيل هذا المرفق.",
771
+ attachmentAuthRequired: "يرجى تسجيل الدخول لتنزيل هذا المرفق.",
772
+ attachmentPermissionDenied: "ليس لديك إذن للقيام بذلك.",
443
773
  unifiedDiff: "عرض موحد",
444
774
  sideBySideDiff: "عرض جنباً إلى جنب",
445
775
  noChanges: "لا توجد تغييرات",
@@ -487,9 +817,18 @@ const ar = {
487
817
  saving: "جارٍ الحفظ…",
488
818
  lockedByApproval: "مقفل للموافقة",
489
819
  lockedTooltip: "يحتوي هذا السجل على طلب موافقة معلق؛ التعديل مقفل",
820
+ writeStrippedTitle: "لم يتم حفظ بعض الحقول",
821
+ writeStrippedReadonly: "للقراءة فقط، لذلك لم يتم حفظها: {{fields}}",
822
+ writeStrippedByState: "غير قابلة للتعديل في الحالة الحالية لهذا السجل، لذلك لم يتم حفظها: {{fields}}",
823
+ approvalPendingEditable: "قيد الموافقة · قابل للتعديل",
824
+ approvalPendingTooltip: "يحتوي هذا السجل على طلب موافقة معلق، لكن هذه الخطوة لا تزال تسمح بالتعديل",
825
+ approvalProgress: "الموافقات — {{got}} من {{need}}",
826
+ approvalProgressGroups: "التوقيعات — {{got}} من {{need}} مجموعات",
827
+ approvalProgressLabel: "تقدّم الموافقة",
490
828
  cancelApproval: "إلغاء الموافقة",
491
829
  cancelApprovalInFlight: "جارٍ الإلغاء…",
492
830
  cancelApprovalTooltip: "إلغاء طلب الموافقة المعلق لفتح قفل السجل",
831
+ cancelApprovalTooltipUnlocked: "إلغاء طلب الموافقة المعلق",
493
832
  cancelApprovalFailed: "فشل إلغاء الموافقة",
494
833
  cancelApprovalUnavailable: "إلغاء الموافقات غير مدعوم من مصدر البيانات هذا",
495
834
  linkCopied: "تم نسخ الرابط إلى الحافظة",
@@ -603,6 +942,35 @@ const ar = {
603
942
  resetZoom: "إعادة تعيين التكبير",
604
943
  },
605
944
  dashboard: {
945
+ noRows: "لا توجد صفوف",
946
+ pickMeasures: "اختر المقاييس (القيم) لأداة مجموعة البيانات هذه.",
947
+ datasetUnsupported: "مصدر البيانات هذا لا يدعم استعلامات مجموعات البيانات.",
948
+ details: "التفاصيل",
949
+ exportCsv: "تصدير CSV",
950
+ openInList: "فتح في القائمة",
951
+ filters: {
952
+ label: "عوامل تصفية لوحة المعلومات",
953
+ dateRange: "النطاق الزمني",
954
+ allTime: "كل الأوقات",
955
+ custom: "مخصص…",
956
+ all: "الكل",
957
+ reset: "إعادة تعيين",
958
+ range: {
959
+ today: "اليوم",
960
+ yesterday: "أمس",
961
+ this_week: "هذا الأسبوع",
962
+ last_week: "الأسبوع الماضي",
963
+ this_month: "هذا الشهر",
964
+ last_month: "الشهر الماضي",
965
+ this_quarter: "هذا الربع",
966
+ last_quarter: "الربع الماضي",
967
+ this_year: "هذه السنة",
968
+ last_year: "السنة الماضية",
969
+ last_7_days: "آخر 7 أيام",
970
+ last_30_days: "آخر 30 يومًا",
971
+ last_90_days: "آخر 90 يومًا",
972
+ },
973
+ },
606
974
  addWidget: "إضافة أداة",
607
975
  removeWidget: "إزالة أداة",
608
976
  editLayout: "تعديل التخطيط",
@@ -730,6 +1098,7 @@ const ar = {
730
1098
  navTypeGroup: "مجموعة",
731
1099
  navTypeSeparator: "فاصل",
732
1100
  navTypeAction: "إجراء",
1101
+ navTypeComponent: "مكوّن",
733
1102
  navEditIcon: "تعديل الأيقونة",
734
1103
  navToggleVisible: "تبديل الرؤية",
735
1104
  navHidden: "مخفي",
@@ -831,8 +1200,199 @@ const ar = {
831
1200
  },
832
1201
  },
833
1202
  console: {
1203
+ settingsHub: {
1204
+ title: "الإعدادات",
1205
+ subtitle: "اضبط مساحة العمل والتكاملات وأعلام الميزات.",
1206
+ loadError: "تعذّر تحميل الإعدادات",
1207
+ empty: "لا توجد إعدادات مسجّلة. يمكن للإضافات تسجيل بيانات الإعدادات عبر SettingsService.",
1208
+ settingsCount: "{{n}} من الإعدادات",
1209
+ beta: "إصدار تجريبي",
1210
+ categories: {
1211
+ Workspace: "مساحة العمل",
1212
+ Communication: "الاتصالات",
1213
+ Security: "الأمان",
1214
+ Infrastructure: "البنية التحتية",
1215
+ Beta: "إصدار تجريبي",
1216
+ Other: "أخرى",
1217
+ },
1218
+ },
1219
+ objectData: {
1220
+ badge: "البيانات",
1221
+ description: "شريحة بيانات محددة عبر الرابط — غير مرتبطة بأي عرض محفوظ.",
1222
+ filteredBy: "مُرشَّح حسب",
1223
+ removeFilter: "إزالة عامل التصفية {{field}}",
1224
+ saveAsView: "الحفظ كعرض",
1225
+ noAccessTitle: "تم رفض الوصول",
1226
+ noAccess: "ليس لديك إذن لعرض هذه البيانات.",
1227
+ },
1228
+ identityImport: {
1229
+ policyTitle: "إعداد تسجيل الدخول للمستخدمين المستوردين",
1230
+ policy: {
1231
+ auto: "تلقائي (موصى به)",
1232
+ invite: "إرسال دعوات",
1233
+ temporary: "كلمات مرور مؤقتة",
1234
+ none: "بدون كلمة مرور (هوية فقط)",
1235
+ },
1236
+ policyHint: {
1237
+ auto: "يتلقى المستخدمون الذين يمكن الوصول إليهم دعوة (بريد إلكتروني أو رسالة نصية)؛ ومن يتعذّر الوصول إليه يحصل على كلمة مرور لمرة واحدة تُعرض مرة واحدة فقط في شاشة النتائج. تعمل مع خدمة البريد/الرسائل أو بدونها.",
1238
+ invite: "يتلقى كل مستخدم يتم إنشاؤه بريدًا لتعيين كلمة المرور (أو رسالة دعوة نصية للصفوف التي تحتوي على هاتف فقط). يتطلب خدمة بريد/رسائل مُهيّأة — وتفشل الصفوف التي يتعذّر الوصول إليها.",
1239
+ temporary: "للتنصيبات التي لا تتوفر فيها خدمة بريد/رسائل: يحصل كل مستخدم يتم إنشاؤه على كلمة مرور لمرة واحدة تُعرض مرة واحدة فقط في شاشة النتائج. ويفرض تسجيل الدخول الأول تغييرها.",
1240
+ none: "يسجّل المستخدمون الدخول أولًا برمز لمرة واحدة عبر الهاتف أو برابط سحري أو برابط إعادة تعيين كلمة المرور، ثم يعيّنون كلمة المرور الخاصة بهم.",
1241
+ },
1242
+ passwordsNote: "كلمات مرور مؤقتة — تُعرض مرة واحدة ولا تُخزَّن أبدًا. احفظها الآن؛ وعلى كل مستخدم تغيير كلمته عند أول تسجيل دخول.",
1243
+ passwordsMore: "تم حذف إدخالات إضافية — استخدم التنزيل.",
1244
+ passwordsDownload: "تنزيل ملف CSV",
1245
+ },
1246
+ ai: {
1247
+ usage: {
1248
+ title: "استخدام الذكاء الاصطناعي",
1249
+ meterBuild: "الإنشاء",
1250
+ meterAsk: "السؤال",
1251
+ statusOk: "المتبقّي وفير",
1252
+ statusLow: "على وشك النفاد",
1253
+ statusFull: "تم بلوغ الحد",
1254
+ resetsDaily: "تُعاد التهيئة الليلة",
1255
+ resetsMonthly: "تُعاد التهيئة في الدورة القادمة",
1256
+ ctaUpgrade: "قم بالترقية للمتابعة",
1257
+ ctaTopUp: "أضف أرصدة للمتابعة",
1258
+ ariaLabel: "استخدام الذكاء الاصطناعي: {{status}}",
1259
+ },
1260
+ workspaceTitle: "مساحة عمل الذكاء الاصطناعي",
1261
+ workspaceSubtitle: "اسأل وافحص واستأنف المحادثات",
1262
+ openChats: "فتح المحادثات",
1263
+ chats: "المحادثات",
1264
+ chatsDescription: "تصفّح محادثات الذكاء الاصطناعي وأدرها.",
1265
+ share: "مشاركة",
1266
+ shareTitle: "مشاركة هذه المحادثة",
1267
+ shareDisabledTitle: "ابدأ المحادثة لتفعيل المشاركة",
1268
+ newChat: "جديدة",
1269
+ searchChats: "البحث في المحادثات...",
1270
+ noChatsYet: "لا توجد محادثات بعد",
1271
+ noChatsDescription: "ابدأ محادثة جديدة لتظهر هنا.",
1272
+ noMatchingChats: "لا توجد محادثات مطابقة.",
1273
+ newConversation: "محادثة جديدة",
1274
+ renameConversation: "إعادة تسمية المحادثة",
1275
+ deleteConversation: "حذف المحادثة",
1276
+ saveRename: "حفظ الاسم",
1277
+ cancelRename: "إلغاء إعادة التسمية",
1278
+ loadingHistory: "جارٍ تحميل سجل المحادثة...",
1279
+ conversationReady: "المحادثة جاهزة",
1280
+ preparingConversation: "جارٍ تجهيز محادثة جديدة",
1281
+ offlineDemoMode: "وضع العرض دون اتصال — قائمة الوكلاء غير متاحة",
1282
+ sendFailedRateLimited: "أنت ترسل الرسائل بسرعة كبيرة. رسالتك محفوظة بالأسفل — انتظر لحظة ثم أعد المحاولة.",
1283
+ sendFailedGeneric: "تعذّر إرسال رسالتك. وهي محفوظة بالأسفل — يرجى إعادة المحاولة.",
1284
+ askAgent: "اسأل {{agent}}...",
1285
+ assistant: "المساعد",
1286
+ liveCanvas: "معاينة حية — {{app}} (مسودة)",
1287
+ liveCanvasUnlisted: "تطبيق حي — {{app}} (غير مُدرج حتى النشر)",
1288
+ loadingAgents: "جارٍ تحميل الوكلاء...",
1289
+ askAnything: "اسأل عن أي شيء...",
1290
+ emptyTitle: "ابدأ محادثة",
1291
+ emptyDescription: "اسأل عن أي شيء — يمكن للمساعد الاطلاع على سياق تطبيقك الحالي.",
1292
+ switchAssistant: "تبديل المساعد",
1293
+ chooseAgent: "اختر مساعدًا…",
1294
+ empty: {
1295
+ build: {
1296
+ title: "الإنشاء بالذكاء الاصطناعي",
1297
+ description: "صف تطبيقًا أو سير عمل بلغة بسيطة — سأعدّ مسودة الكائنات والشاشات والأتمتة، ثم تراجعها وتنشرها.",
1298
+ },
1299
+ ask: {
1300
+ title: "اسأل بياناتك",
1301
+ description: "اطرح أسئلة عن سجلاتك — أعداد وقوائم وملخصات للبيانات التي يمكنك الوصول إليها.",
1302
+ },
1303
+ editApp: {
1304
+ title: "تحرير «{{app}}»",
1305
+ titleGeneric: "تحرير هذا التطبيق",
1306
+ description: "ما الذي تريد تغييره؟ سأعدّل هذا التطبيق في مكانه — إضافة حقل أو كائن أو عرض أو أتمتة، أو تعديل ما هو موجود.",
1307
+ },
1308
+ },
1309
+ clearConversation: "مسح",
1310
+ sendHint: "للإرسال",
1311
+ agentActivity: "نشاط الوكيل",
1312
+ toolCompleted: "مكتمل",
1313
+ toolRunning: "قيد التنفيذ",
1314
+ toolAwaitingApproval: "بانتظار الموافقة",
1315
+ toolFailed: "فشل",
1316
+ toolDetailsHidden: "مدخلات الأدوات والنتائج الخام مخفية في هذا العرض.",
1317
+ copy: "نسخ",
1318
+ copied: "تم النسخ",
1319
+ regenerate: "إعادة التوليد",
1320
+ model: "النموذج",
1321
+ submit: "إرسال",
1322
+ uploadFiles: "رفع الملفات",
1323
+ stopResponse: "إيقاف الرد",
1324
+ trace: "التتبّع",
1325
+ viewTrace: "عرض التتبّع",
1326
+ nextSteps: "الخطوة التالية",
1327
+ publishDrafts: "نشر",
1328
+ publishOk: "تم النشر — الكائنات فعّالة الآن.",
1329
+ seedWarn: "تم النشر، لكن تعذّر تحميل بعض البيانات التجريبية.",
1330
+ openBuiltApp: "فتح التطبيق",
1331
+ designBuiltApp: "التصميم في Studio",
1332
+ previewDraft: "معاينة",
1333
+ previewApp: "معاينة التطبيق",
1334
+ resizeSplit: "تغيير حجم المحادثة والمعاينة",
1335
+ hideChats: "إخفاء المحادثات",
1336
+ showChats: "إظهار المحادثات",
1337
+ planTitle: "الخطة المقترحة",
1338
+ planQuestions: "التأكيد قبل الإنشاء",
1339
+ planAssumptions: "الافتراضات",
1340
+ planApproveHint: "أجب للموافقة على هذه الخطة أو تعديلها.",
1341
+ planApprove: "ابدأ الإنشاء",
1342
+ planAdjust: "تعديل",
1343
+ justNow: "الآن",
1344
+ minutesAgo: "قبل {{count}} د",
1345
+ hoursAgo: "قبل {{count}} س",
1346
+ daysAgo: "قبل {{count}} ي",
1347
+ agentLabels: {
1348
+ ask: "السؤال",
1349
+ build: "الإنشاء",
1350
+ dataChat: "المساعد",
1351
+ metadataAssistant: "مساعد البيانات الوصفية",
1352
+ },
1353
+ suggestions: {
1354
+ dataChat: {
1355
+ userCount: "كم عدد المستخدمين في النظام؟ اذكر عناوين بريدهم الإلكتروني.",
1356
+ recentRecords: "اذكر أحدث 5 سجلات تم إنشاؤها.",
1357
+ recordCounts: "احسب عدد السجلات لكل كائن.",
1358
+ },
1359
+ metadataAssistant: {
1360
+ buildCrm: "أنشئ نظام إدارة علاقات عملاء للمبيعات — عملاء وجهات اتصال ومسار صفقات يمكنني تجميعه حسب المرحلة.",
1361
+ buildApp: "أنشئ متتبّع مشاريع — مشاريع ومهام بمسؤولين وتواريخ استحقاق ولوحة حسب الحالة.",
1362
+ buildFlow: "صمّم مكتب دعم — تذاكر بأولوية وسير عمل للحالات وروابط بالعملاء.",
1363
+ buildInventory: "أنشئ تطبيق مخزون — منتجات ومستويات مخزون وموردين وتنبيه لانخفاض المخزون.",
1364
+ buildRecruiting: "أنشئ متتبّع متقدمين — مرشحون ووظائف شاغرة ومراحل مقابلات وملاحظات.",
1365
+ },
1366
+ generic: {
1367
+ help: "بماذا يمكنك مساعدتي؟",
1368
+ availableObjects: "اذكر كائنات البيانات المتاحة.",
1369
+ recentActivity: "لخّص نشاطي الأخير.",
1370
+ },
1371
+ editApp: {
1372
+ addField: "أضف حقلًا إلى أحد الكائنات.",
1373
+ addObject: "أضف كائنًا جديدًا واربطه بكائن موجود.",
1374
+ addDashboard: "أضف لوحة معلومات للمؤشرات الرئيسية.",
1375
+ addAutomation: "أضف أتمتة — موافقة أو سير حالات أو إشعارًا.",
1376
+ },
1377
+ },
1378
+ changesTitle: "تأكيد التغييرات",
1379
+ changesConfirmed: "تم التأكيد",
1380
+ changesConfirm: "تأكيد",
1381
+ changesConfirmHint: "أجب لتأكيد هذا التغيير أو تعديله.",
1382
+ changeVerb: {
1383
+ createObject: "إنشاء كائن",
1384
+ addField: "إضافة حقل",
1385
+ modifyField: "تعديل حقل",
1386
+ deleteField: "حذف حقل",
1387
+ createMetadata: "إنشاء",
1388
+ updateMetadata: "تعديل",
1389
+ createSeed: "إنشاء بيانات تجريبية",
1390
+ createPackage: "إنشاء حزمة تطبيق",
1391
+ },
1392
+ },
834
1393
  title: "وحدة تحكم ObjectStack",
835
1394
  initializing: "جاري تهيئة التطبيق...",
1395
+ loadingHint: "قد يستغرق إعداد بيئة جديدة بعض الوقت.",
836
1396
  breadcrumb: {
837
1397
  dashboards: "لوحات المعلومات",
838
1398
  pages: "الصفحات",
@@ -874,6 +1434,7 @@ const ar = {
874
1434
  toggleDarkMode: "تبديل الوضع الداكن",
875
1435
  },
876
1436
  commandPalette: {
1437
+ title: "لوحة الأوامر",
877
1438
  placeholder: "اكتب أمراً أو ابحث...",
878
1439
  noResults: "لم يتم العثور على نتائج.",
879
1440
  objects: "الكائنات",
@@ -907,6 +1468,14 @@ const ar = {
907
1468
  system: "النظام",
908
1469
  },
909
1470
  objectView: {
1471
+ viewTypeTree: "شجرة",
1472
+ viewTypeTreeDesc: "يرتّب السجلات ذاتية المرجعية في تسلسل هرمي عبر حقل أب.",
1473
+ parentField: "الحقل الأب",
1474
+ parentFieldHelp: "الحقل الذي يشير إلى السجل الأب (الكائن نفسه) ويحدد التسلسل الهرمي. الحقول ذاتية المرجعية فقط هي المؤهلة.",
1475
+ viewName: "الاسم",
1476
+ viewNameHelp: "مفتاح برمجي (snake_case). يُملأ تلقائيًا من العنوان — عدّله إن أردت.",
1477
+ viewNameRequired: "أدخل مفتاحًا (أحرف إنجليزية صغيرة وأرقام وشرطة سفلية). لا يُملأ تلقائيًا للعناوين غير اللاتينية.",
1478
+ viewNameInvalid: "استخدم أحرفًا إنجليزية صغيرة وأرقامًا وشرطات سفلية؛ وابدأ بحرف أو شرطة سفلية.",
910
1479
  systemViewReadonly: 'System view defined in code - duplicate to customize.',
911
1480
  expandToPage: 'Open as full page',
912
1481
  objectNotFound: "الكائن غير موجود",
@@ -1120,7 +1689,28 @@ const ar = {
1120
1689
  },
1121
1690
  },
1122
1691
  auth: {
1692
+ setPassword: {
1693
+ title: "تعيين كلمة مرور للاسترداد",
1694
+ description: "لقد سجّلت الدخول عبر الدخول الموحّد. عيّن كلمة مرور محلية لتتمكن من الدخول إلى هذه البيئة مباشرةً إذا أصبح الدخول الموحّد غير متاح.",
1695
+ email: "البريد الإلكتروني",
1696
+ newPassword: "كلمة المرور الجديدة",
1697
+ confirmPassword: "تأكيد كلمة المرور",
1698
+ submit: "تعيين كلمة المرور",
1699
+ submitting: "جارٍ الحفظ…",
1700
+ success: "تم تعيين كلمة المرور المحلية",
1701
+ failed: "تعذّر تعيين كلمة المرور",
1702
+ passwordsMismatch: "كلمتا المرور غير متطابقتين",
1703
+ noSession: "انتهت صلاحية جلستك.",
1704
+ backToSignIn: "تسجيل الدخول مرة أخرى",
1705
+ },
1123
1706
  login: {
1707
+ signingIn: "جارٍ تسجيل دخولك…",
1708
+ ssoHandoff: "المتابعة إلى {{target}}",
1709
+ devAdminHint: {
1710
+ title: "بيئة تطوير",
1711
+ body: "سجّل الدخول بحساب مسؤول التطوير المهيأ مسبقًا:",
1712
+ dismiss: "تجاهل",
1713
+ },
1124
1714
  title: "تسجيل الدخول إلى حسابك",
1125
1715
  description: "أدخل بريدك الإلكتروني وكلمة المرور للمتابعة",
1126
1716
  emailLabel: "البريد الإلكتروني",
@@ -1133,6 +1723,7 @@ const ar = {
1133
1723
  noAccountText: "ليس لديك حساب؟",
1134
1724
  signUpText: "إنشاء حساب",
1135
1725
  errors: {
1726
+ oauthCallbackFailed: "تعذّر إكمال الدخول الموحّد — انتهت صلاحية رابط تسجيل الدخول أو سبق استخدامه. يرجى المحاولة مرة أخرى.",
1136
1727
  invalidCredentials: "بريد إلكتروني أو كلمة مرور غير صحيحة. يرجى المحاولة مرة أخرى.",
1137
1728
  emailNotVerified: "يرجى التحقق من بريدك الإلكتروني قبل تسجيل الدخول.",
1138
1729
  },
@@ -1258,6 +1849,40 @@ const ar = {
1258
1849
  shell: {
1259
1850
  tenantHostHint: "تسجل الدخول إلى مساحة العمل هذه",
1260
1851
  },
1852
+ layout: {
1853
+ headline: "أنشئ تطبيقات أعمال قوية بسرعة أكبر.",
1854
+ subhead: "المنصة الموحدة لإدارة بيانات المؤسسات وسير العمل والتحليلات.",
1855
+ },
1856
+ remediation: {
1857
+ signOut: "تسجيل الخروج بدلاً من ذلك",
1858
+ password: {
1859
+ title: "انتهت صلاحية كلمة المرور",
1860
+ fallbackMessage: "يرجى تعيين كلمة مرور جديدة للمتابعة.",
1861
+ current: "كلمة المرور الحالية",
1862
+ next: "كلمة المرور الجديدة",
1863
+ confirm: "تأكيد كلمة المرور الجديدة",
1864
+ submit: "تغيير كلمة المرور والمتابعة",
1865
+ submitting: "جارٍ التحديث…",
1866
+ mismatch: "كلمتا المرور الجديدتان غير متطابقتين.",
1867
+ failed: "تعذّر تغيير كلمة المرور.",
1868
+ },
1869
+ mfa: {
1870
+ title: "إعداد المصادقة الثنائية",
1871
+ fallbackMessage: "تتطلب مؤسستك تطبيق مصادقة للمتابعة.",
1872
+ confirmPassword: "أكّد كلمة المرور",
1873
+ continue: "متابعة",
1874
+ preparing: "جارٍ التحضير…",
1875
+ enrollFailed: "تعذّر بدء التسجيل.",
1876
+ scanTitle: "امسح الرمز بتطبيق المصادقة",
1877
+ scanBody: "امسح رمز QR هذا باستخدام Google Authenticator أو 1Password أو Authy وغيرها، ثم أدخل الرمز المكوّن من 6 أرقام.",
1878
+ backupTitle: "احفظ رموز النسخ الاحتياطي",
1879
+ backupBody: "احتفظ بها في مكان آمن — يمكن استخدام كل رمز مرة واحدة إذا فقدت جهازك.",
1880
+ codeLabel: "رمز مكوّن من 6 أرقام",
1881
+ verify: "تحقّق وتابع",
1882
+ verifying: "جارٍ التحقق…",
1883
+ invalidCode: "رمز غير صالح. حاول مرة أخرى.",
1884
+ },
1885
+ },
1261
1886
  },
1262
1887
  profile: {
1263
1888
  title: "الملف الشخصي",
@@ -1322,11 +1947,15 @@ const ar = {
1322
1947
  settings: "إعدادات مساحة العمل",
1323
1948
  },
1324
1949
  help: {
1950
+ onThisPage: "في هذه الصفحة",
1951
+ keyboardShortcuts: "اختصارات لوحة المفاتيح",
1325
1952
  appDocs: 'وثائق هذا التطبيق',
1326
1953
  allDocs: 'كل الوثائق',
1327
1954
  onlineDocs: 'الوثائق عبر الإنترنت',
1328
1955
  },
1329
1956
  sidebar: {
1957
+ packageManagement: "إدارة الحزم",
1958
+ searchNavigation: "البحث في التنقل...",
1330
1959
  settings: "الإعدادات",
1331
1960
  help: "المساعدة",
1332
1961
  helpTooltip: "المساعدة والوثائق",
@@ -1343,14 +1972,66 @@ const ar = {
1343
1972
  removeFromFavorites: "إزالة {{name}} من المفضلة",
1344
1973
  },
1345
1974
  topbar: {
1975
+ openAssistant: "فتح مساعد {{name}}",
1976
+ offline: "غير متصل",
1977
+ usersOnline: "المستخدمون المتصلون الآن",
1978
+ switchView: "تبديل العرض",
1979
+ switchObject: "تبديل الكائن",
1980
+ connection: {
1981
+ connected: "متصل",
1982
+ connecting: "جارٍ الاتصال...",
1983
+ reconnecting: "جارٍ إعادة الاتصال...",
1984
+ disconnected: "منقطع",
1985
+ error: "خطأ في الاتصال",
1986
+ },
1987
+ stage: {
1988
+ preview: "معاينة",
1989
+ beta: "إصدار تجريبي",
1990
+ tooltip: "هذه المنصة في مرحلة المعاينة — وقد تتغير الميزات.",
1991
+ },
1346
1992
  aiAssistant: "مساعد الذكاء الاصطناعي",
1347
1993
  designInStudio: "التصميم في Studio",
1348
1994
  },
1349
1995
  home: {
1996
+ build: {
1997
+ title: "إنشاء تطبيق",
1998
+ subtitle: "ابدأ من الصفر — صمّم الكائنات والنماذج والأتمتة والواجهات.",
1999
+ },
2000
+ template: {
2001
+ title: "ابدأ من قالب",
2002
+ subtitle: "ثبّت تطبيق قالب من السوق وخصّصه.",
2003
+ },
2004
+ welcomeAdminDescription: "صف نشاطك التجاري في جملة واحدة — وسيولّد الذكاء الاصطناعي الكائنات والشاشات وواجهات البرمجة وأدوات الوكيل. أو أعدّها بنفسك من القائمة على اليسار.",
2005
+ welcomeAdminDescriptionNoBuild: "أعدّ تطبيقك الأول من قائمة الإدارة على اليسار. وبمجرد توفر البيانات، يمكن لمساعد الذكاء الاصطناعي مساعدتك في استكشافها.",
2006
+ welcomeAdminDescriptionNoAi: "أعدّ تطبيقك الأول من قائمة الإدارة على اليسار.",
2007
+ noAppsTitle: "لا توجد تطبيقات بعد",
2008
+ noAppsDescription: "يجري إعداد مساحة عملك — وستظهر هنا التطبيقات التي يشاركها معك المسؤول.",
2009
+ buildWithAI: "الإنشاء بالذكاء الاصطناعي",
2010
+ askAI: "اسأل الذكاء الاصطناعي",
2011
+ recoveryReminder: {
2012
+ message: "عيّن كلمة مرور للاسترداد كي تتمكن من تسجيل الدخول إذا تعذّر الدخول الموحّد في أي وقت.",
2013
+ cta: "تعيين كلمة المرور",
2014
+ dismiss: "تجاهل",
2015
+ },
2016
+ pendingDrafts: {
2017
+ message: "لديك {{count}} من التغييرات غير المنشورة — انشرها لتصبح فعّالة.",
2018
+ cta: "نشر",
2019
+ publishing: "جارٍ النشر…",
2020
+ published: "تم النشر! تغييراتك فعّالة الآن.",
2021
+ publishFailed: "فشل النشر",
2022
+ },
1350
2023
  title: "الرئيسية",
1351
2024
  subtitle: "لوحة تحكم مساحة العمل",
1352
2025
  nav: "الرئيسية",
1353
2026
  allApps: "جميع التطبيقات",
2027
+ yourApps: "تطبيقاتك",
2028
+ showMoreApps: "المزيد",
2029
+ showLess: "عرض أقل",
2030
+ continueEmpty: "ستظهر هنا العناصر التي تفتحها.",
2031
+ actionCenter: {
2032
+ title: "يتطلب انتباهك",
2033
+ empty: "لقد أنجزت كل شيء",
2034
+ },
1354
2035
  loading: "جارٍ تحميل مساحة العمل...",
1355
2036
  recent: "الأخيرة",
1356
2037
  starred: "المميزة بنجمة",
@@ -1402,7 +2083,21 @@ const ar = {
1402
2083
  },
1403
2084
  },
1404
2085
  layout: {
2086
+ systemNav: {
2087
+ systemSettings: "إعدادات النظام",
2088
+ applications: "التطبيقات",
2089
+ appMarketplace: "سوق التطبيقات",
2090
+ objectManager: "مدير الكائنات",
2091
+ users: "المستخدمون",
2092
+ organizations: "المؤسسات",
2093
+ roles: "الأدوار",
2094
+ configuration: "التهيئة",
2095
+ createApp: "إنشاء تطبيق",
2096
+ },
1405
2097
  appSwitcher: {
2098
+ switchApplication: "تبديل التطبيق",
2099
+ appsAvailable: "{{count}} من التطبيقات المتاحة",
2100
+ editNavigation: "تحرير التنقل",
1406
2101
  home: "الرئيسية",
1407
2102
  addApp: "إضافة تطبيق",
1408
2103
  editApp: "تعديل التطبيق",
@@ -1495,8 +2190,8 @@ const ar = {
1495
2190
  uploading: "جارٍ الرفع…",
1496
2191
  defaultActionTitle: "إجراء",
1497
2192
  ok: "موافق",
1498
- lookupPlaceholder: "لصق معرف السجل (UUID) لـ {{label}}",
1499
- lookupHelpText: "أدخل معرف سجل الكائن المرجع. سيتم إضافة أداة اختيار قريباً.",
2193
+ lookupPlaceholder: "معرف السجل لـ {{label}}",
2194
+ lookupHelpText: "لم يتم تكوين كائن مرجعي لهذه المعلمة، لذا فإن أداة اختيار السجلات غير متاحة. أدخل معرف السجل، أو اطلب من المسؤول تصحيح معلمة الإجراء.",
1500
2195
  },
1501
2196
  actionConfirm: {
1502
2197
  title: "تأكيد الإجراء",
@@ -1521,6 +2216,8 @@ const ar = {
1521
2216
  updateFailed: "تعذر تحديث التنقل",
1522
2217
  },
1523
2218
  objectActions: {
2219
+ resetPackageSetConfirm: "مجموعة الأذونات هذه تأتي ضمن حزمة مثبَّتة ولا يمكن إزالتها. الحذف يعيدها إلى الحالة الأصلية المرفقة بالحزمة ويتجاهل تخصيصاتك في هذه البيئة. هل تريد المتابعة؟",
2220
+ resetPackageSetSuccess: "تمت إعادة مجموعة الأذونات إلى حالتها الأصلية المرفقة بالحزمة",
1524
2221
  deleteSuccess: "تم حذف {{label}} بنجاح",
1525
2222
  deleteFailed: "تعذر حذف {{label}}",
1526
2223
  noRecordId: "لم يتم توفير معرف سجل",
@@ -1685,6 +2382,7 @@ const ar = {
1685
2382
  },
1686
2383
  },
1687
2384
  organizations: {
2385
+ create: "إنشاء مساحة عمل",
1688
2386
  mine: "مؤسساتي",
1689
2387
  title: "المؤسسات",
1690
2388
  heading: "مؤسساتك",
@@ -1698,6 +2396,11 @@ const ar = {
1698
2396
  noMatches: "لا توجد مؤسسات تطابق بحثك.",
1699
2397
  },
1700
2398
  notifications: {
2399
+ regionLabel: "الإشعارات",
2400
+ groupCount: "{{count}} من الإشعارات",
2401
+ groupUnread: "{{count}} غير مقروء",
2402
+ groupMarkRead: "تعليم كمقروء",
2403
+ groupMarkReadTitle: "تعليم كل هذا النوع كمقروء",
1701
2404
  empty: "لا توجد إشعارات",
1702
2405
  markAllRead: "تعليم الكل كمقروء",
1703
2406
  viewAll: "عرض جميع الإشعارات",
@@ -1816,7 +2519,117 @@ const ar = {
1816
2519
  done: 'تم — إخفاء',
1817
2520
  },
1818
2521
  },
2522
+ excelImport: {
2523
+ noImportableFields: "لا تحتوي هذه الكائن على حقول قابلة للاستيراد.",
2524
+ schemaReadFailed: "تعذّرت قراءة مخطط الكائن.",
2525
+ imported: "تم استيراد {{count}} صف إلى {{object}}.",
2526
+ importFrom: "استيراد الصفوف الفعلية من",
2527
+ into: "إلى",
2528
+ opening: "جارٍ الفتح…",
2529
+ importAction: "استيراد",
2530
+ dismiss: "تجاهل",
2531
+ },
2532
+ cloudOnboarding: {
2533
+ hintCreate: "أنشئ بيئتك الأولى — مساحة عمل خاصة لها رابطها وقاعدة بياناتها وخطتها. يجري بناء التطبيقات داخلها.",
2534
+ hintReady: "بيئة الإنتاج جاهزة. افتحها لبناء تطبيقاتك وتشغيلها — كل ذلك يحدث داخل البيئة.",
2535
+ createEnvironment: "أنشئ بيئتك",
2536
+ openProduction: "فتح بيئة الإنتاج",
2537
+ manageEnvironments: "إدارة البيئات",
2538
+ },
2539
+ aiModelStatus: {
2540
+ summary: "يستخدم الإنشاء / السؤال {{conversational}} ({{conversationalSource}})؛ ويستخدم الإخراج المهيكل {{structured}} ({{structuredSource}}).",
2541
+ summaryRouting: "سياسة التوجيه: الخطط المجانية ← {{free}}، الخطط المدفوعة ← {{paid}}.",
2542
+ modelUnknown: "غير معروف",
2543
+ sourceUnknown: "لم يبلّغ عنه المحوّل",
2544
+ rowConversational: "نموذج Build / Ask",
2545
+ rowStructured: "مُهيكل (blueprint / seed)",
2546
+ rowReasoning: "مستوى الاستدلال",
2547
+ readFailed: "تعذّرت قراءة نموذج الذكاء الاصطناعي الفعّال. قد لا تُشغّل هذه البيئة خدمة ذكاء اصطناعي، أو قد لا تملك صلاحية ai:read.",
2548
+ readFailedWithStatus: "تعذّرت قراءة نموذج الذكاء الاصطناعي الفعّال (HTTP {{status}}). قد لا تُشغّل هذه البيئة خدمة ذكاء اصطناعي، أو قد لا تملك صلاحية ai:read.",
2549
+ overridesInEffect: "التجاوزات السارية: ",
2550
+ noOverrides: "لا شيء — يجري تشغيل القيم الافتراضية للكود المنشور.",
2551
+ adapter: "المحوّل: ",
2552
+ sourceCodeDefault: "القيمة الافتراضية في الكود (بدون تجاوز env)",
2553
+ sourceInherits: "مثل build/ask",
2554
+ sourcePinned: "مثبّت بواسطة {{source}}",
2555
+ },
2556
+ chatbotError: {
2557
+ title: "فشل الرد",
2558
+ fallbackDetail: "حدث خطأ ما. يرجى المحاولة مرة أخرى.",
2559
+ details: "التفاصيل",
2560
+ hide: "إخفاء",
2561
+ retry: "إعادة المحاولة",
2562
+ },
2563
+ chatbotQuota: {
2564
+ title: "الترقية مطلوبة",
2565
+ fallbackMessage: "لقد بلغت حصتك من الذكاء الاصطناعي.",
2566
+ buyCredits: "شراء باقة أرصدة",
2567
+ upgradePlan: "ترقية الخطة",
2568
+ },
2569
+ environment: {
2570
+ addEnvironment: "إضافة بيئة",
2571
+ setUpProduction: "إعداد بيئة الإنتاج",
2572
+ addDevelopment: "إضافة بيئة تطوير",
2573
+ // Plan/capacity dialog (EnvironmentEntitlementDialog) — cloud#959.
2574
+ entitlement: {
2575
+ productionLimitTitle: "لديك بالفعل بيئة الإنتاج الخاصة بك",
2576
+ productionLimitBody: "تتضمّن كل مؤسسة بيئة إنتاج واحدة فقط. أنشئ مؤسسة منفصلة للحصول على بيئة أخرى، أو تواصل معنا بشأن ترتيبات الخطة المؤسسية.",
2577
+ planLockedTitle: "بيئات التطوير ميزة مدفوعة",
2578
+ planLockedBody: "تتضمّن {{plan}} بيئة إنتاج واحدة. قم بالترقية لإضافة بيئات تطوير — أنشئ في بيئة التطوير ثم انشر إلى الإنتاج.",
2579
+ limitTitle: "تم بلوغ الحد الأقصى لبيئات التطوير",
2580
+ limitBody: "تزداد السعة مع مقاعد الذكاء الاصطناعي. أضف مقعدًا، أو أرشف بيئة تطوير غير مستخدمة لتحرير مكان.",
2581
+ limitBodyWithCount: "تستخدم {{used}} من أصل {{limit}} بيئة تطوير. تزداد السعة مع مقاعد الذكاء الاصطناعي — أضف مقعدًا، أو أرشف بيئة تطوير غير مستخدمة.",
2582
+ freePlan: "الخطة المجانية",
2583
+ namedPlan: "خطة {{plan}}",
2584
+ upgradeCta: "ترقية الخطة",
2585
+ contactSalesCta: "تواصل مع المبيعات",
2586
+ },
2587
+ },
2588
+ cloudConnection: {
2589
+ checking: "جارٍ التحقق من الاتصال…",
2590
+ retry: "إعادة المحاولة",
2591
+ errors: {
2592
+ expired: "انتهت صلاحية الطلب قبل الموافقة عليه. ابدأ من جديد.",
2593
+ bindFailed: "فشل الربط.",
2594
+ deviceCodeFailed: "فشل طلب رمز الجهاز.",
2595
+ },
2596
+ waiting: {
2597
+ popupOpened: "وافق على الاتصال في النافذة التي فُتحت للتو — سيتم تحديث هذه الصفحة تلقائيًا.",
2598
+ polling: "في انتظار الموافقة في وحدة التحكم السحابية…",
2599
+ openApproval: "فتح صفحة الموافقة",
2600
+ copy: "نسخ",
2601
+ copied: "تم النسخ",
2602
+ codePrefilled: "الرمز مُعبَّأ مسبقًا في صفحة الموافقة.",
2603
+ openItHere: "لم تظهر النافذة؟ افتحها من هنا",
2604
+ cancel: "إلغاء",
2605
+ },
2606
+ bound: {
2607
+ title: "متصل بـ ObjectStack Cloud",
2608
+ runtime: "بيئة التشغيل",
2609
+ organization: "المؤسسة",
2610
+ approvedBy: "تمت الموافقة بواسطة",
2611
+ runtimeId: "معرّف بيئة التشغيل",
2612
+ environment: "البيئة",
2613
+ since: "متصل منذ",
2614
+ privatePackages: "تظهر الآن الحزم الخاصة بمؤسستك في السوق ضمن «مؤسستك».",
2615
+ disconnect: "قطع الاتصال",
2616
+ },
2617
+ unbound: {
2618
+ title: "غير متصل",
2619
+ body: "اربط بيئة التشغيل هذه بمستوى تحكم ObjectStack لتصفّح الحزم الخاصة بمؤسستك وتثبيتها هنا. الموافقة بنقرة واحدة في حسابك السحابي — دون إدخال أي معرّفات أو بيانات اعتماد في هذه الصفحة.",
2620
+ connect: "اتصال",
2621
+ },
2622
+ },
1819
2623
  marketplace: {
2624
+ suggestedBindings: {
2625
+ promptEveryone: "يقترح هذا التطبيق منح «{{set}}» لجميع المستخدمين المسجّلين (موضع Everyone).",
2626
+ promptGuest: "يقترح هذا التطبيق منح «{{set}}» للزوار غير المصادَق عليهم (موضع Guest).",
2627
+ confirm: "منح",
2628
+ confirming: "جارٍ المنح…",
2629
+ dismiss: "تجاهل",
2630
+ confirmedToast: "تم الآن منح «{{set}}» إلى {{anchor}}.",
2631
+ dismissedToast: "تم تجاهل اقتراح «{{set}}».",
2632
+ },
1820
2633
  title: "سوق التطبيقات",
1821
2634
  subtitle: "استعرض التطبيقات المعتمدة المنشورة في كتالوج ObjectStack. انقر على تطبيق لرؤية التفاصيل وتثبيته في أحد بيئاتك.",
1822
2635
  searchPlaceholder: "ابحث عن التطبيقات بالاسم أو معرف المانيفست…",
@@ -1868,6 +2681,7 @@ const ar = {
1868
2681
  updateAvailable: 'يتوفر تحديث',
1869
2682
  },
1870
2683
  action: {
2684
+ installed: "مثبَّت",
1871
2685
  install: "تثبيت",
1872
2686
  reinstall: "إعادة التثبيت",
1873
2687
  working: "جارٍ المعالجة…",
@@ -1938,6 +2752,14 @@ const ar = {
1938
2752
  yearsAgo: "منذ {{count}} سنة(سنوات)",
1939
2753
  },
1940
2754
  },
2755
+ approvals: {
2756
+ approve: 'الموافقة',
2757
+ reject: 'رفض',
2758
+ comment: 'تعليق (اختياري)',
2759
+ approveSuccess: 'تمت الموافقة',
2760
+ rejectSuccess: 'تم الرفض',
2761
+ rejectConfirm: 'هل تريد رفض طلب الموافقة هذا؟',
2762
+ },
1941
2763
  approvalsInbox: {
1942
2764
  loadMore: 'تحميل المزيد',
1943
2765
  loadingMore: 'جارٍ التحميل…',
@@ -1962,13 +2784,28 @@ const ar = {
1962
2784
  slaRemaining: 'SLA المتبقي {{dur}}',
1963
2785
  slaOverdue: 'SLA متأخر {{dur}}',
1964
2786
  actReassign: 'إعادة إسناد',
2787
+ reassignFromTo: 'من {{from}} إلى {{to}}',
1965
2788
  actRemind: 'تذكير',
1966
2789
  actRequestInfo: 'طلب معلومات',
1967
2790
  actComment: 'تعليق',
1968
2791
  stepProgress: 'خطوات الموافقة',
1969
2792
  prevRequest: 'السابق',
1970
2793
  nextRequest: 'التالي',
1971
- positionOf: '{{index}} من {{total}}',
2794
+ positionOf: 'الطلب {{index}} من {{total}}',
2795
+ progressApprovals: 'الموافقات — {{got}} من {{need}}',
2796
+ progressGroups: 'تقدم التوقيعات — {{got}} من {{need}} مجموعات',
2797
+ progressEligible: '{{count}} معتمِد مؤهل',
2798
+ progressBar: 'تقدم القرار',
2799
+ declaredActions: 'الإجراءات',
2800
+ attachmentChip: 'مرفق',
2801
+ attachmentOpenFailed: 'تعذّر فتح المرفق — يرجى المحاولة مرة أخرى',
2802
+ approveOneTitle: 'الموافقة على "{{title}}"؟',
2803
+ approveOneBody: 'ستتم الموافقة على الطلب بهويتك. لإضافة تعليق أو مرفق، افتح الطلب.',
2804
+ flowOrigin: 'بدأها التدفق',
2805
+ sortBy: 'ترتيب',
2806
+ sortRecent: 'الأحدث أولاً',
2807
+ sortOldest: 'الأقدم أولاً',
2808
+ sortAmount: 'المبلغ (تنازلي)',
1972
2809
  quickPhrase1: 'موافق — مستوفٍ للمتطلبات.',
1973
2810
  quickPhrase2: 'موافقة مشروطة — يرجى متابعة التنفيذ.',
1974
2811
  quickPhrase3: 'يرجى إضافة مستندات داعمة وإعادة التقديم.',
@@ -2097,6 +2934,10 @@ const ar = {
2097
2934
  retry: 'إعادة المحاولة',
2098
2935
  },
2099
2936
  draftBar: {
2937
+ messageClean: "معاينة المسودة — لا توجد تغييرات غير منشورة؛ كل ما هنا منشور بالفعل.",
2938
+ sampleDataTitle: "تظهر البيانات التجريبية بعد النشر",
2939
+ sampleDataBody: "أنت تعاين بنية تطبيقك. انشره لتحميل سجلات تجريبية وتفعيله.",
2940
+ publishCta: "انشر لتراه مباشرةً",
2100
2941
  message: 'معاينة المسودة — أنت ترى تغييرات غير منشورة. لن يصبح أي شيء فعليًا حتى تنشر.',
2101
2942
  publish: 'نشر',
2102
2943
  publishing: 'جارٍ النشر…',