@object-ui/i18n 16.0.0 → 17.1.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,9 +83,14 @@ const ar = {
74
83
  package: "الحزمة",
75
84
  },
76
85
  actions: {
86
+ decisionOutput: {
87
+ help: 'يُمرَّر إلى التدفق كمخرج للقرار.',
88
+ helpMultiValue: 'يُمرَّر إلى التدفق كمخرج للقرار. افصل بين القيم المتعددة بفواصل.',
89
+ },
77
90
  resultDialog: {
78
- defaultTitle: 'Save this value now',
79
- acknowledge: 'I have saved this',
91
+ defaultTitle: 'احفظ هذه القيمة الآن',
92
+ acknowledge: 'لقد حفظتها',
93
+ copyAll: 'نسخ الكل',
80
94
  },
81
95
  },
82
96
  validation: {
@@ -93,6 +107,16 @@ const ar = {
93
107
  type: "{{field}} يجب أن يكون {{type}} صالحاً",
94
108
  },
95
109
  form: {
110
+ noPermissionToSave: "ليس لديك إذن لحفظ هذا السجل.",
111
+ submitFailed: "تعذّر الحفظ. يرجى المحاولة مرة أخرى.",
112
+ discardTitle: "تجاهل التغييرات؟",
113
+ discardMessage: "لديك تغييرات غير محفوظة. إذا أغلقت هذا النموذج الآن، ستفقد تعديلاتك.",
114
+ keepEditing: "متابعة التحرير",
115
+ discard: "تجاهل",
116
+ conflictTitle: "تعارض في الحفظ",
117
+ conflictMessage: "قام شخص آخر بتغيير هذا السجل أثناء تحريرك. الكتابة فوقه ستستبدل تغييراته بتغييراتك.",
118
+ conflictLatestVersion: "وقت حفظه: {{time}}",
119
+ conflictOverwrite: "الكتابة فوقه",
96
120
  addItem: "إضافة عنصر",
97
121
  removeItem: "إزالة عنصر",
98
122
  fieldRequired: "هذا الحقل مطلوب",
@@ -103,8 +127,6 @@ const ar = {
103
127
  stepOf: "الخطوة {{current}} من {{total}}",
104
128
  createTitle: "إنشاء {{object}}",
105
129
  editTitle: "تعديل {{object}}",
106
- createDescription: "إضافة {{object}} جديد إلى قاعدة البيانات.",
107
- editDescription: "تحديث تفاصيل {{object}}",
108
130
  saveRecord: "حفظ السجل",
109
131
  create: "إنشاء",
110
132
  update: "تحديث",
@@ -113,14 +135,70 @@ const ar = {
113
135
  deleteSuccess: "تم حذف {{object}}",
114
136
  },
115
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
+ },
116
151
  relativeDate: {
117
152
  overdue: "متأخر {{count}} يوم",
118
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
+ },
119
170
  richText: {
120
171
  format: "التنسيق: {{format}}",
121
172
  basicEditorHint: "محرر النص الغني (أساسي)",
122
173
  placeholder: "اكتب شيئاً...",
123
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
+ },
124
202
  },
125
203
  table: {
126
204
  rowsPerPage: "صفوف في الصفحة",
@@ -155,6 +233,37 @@ const ar = {
155
233
  delete: "حذف",
156
234
  },
157
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
+ },
158
267
  actions: "إجراءات",
159
268
  edit: "تعديل",
160
269
  delete: "حذف",
@@ -180,7 +289,88 @@ const ar = {
180
289
  densityCycleShortHint: "انقر للتغيير",
181
290
  },
182
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: "تم الاستيراد عبر وضع توافقي: هذا الاتصال لا يدعم مسار الاستيراد على الخادم، لذلك حُفظت القيم كنص دون تحويل للأنواع على الخادم. حدّث الخادم/العميل للحصول على دعم الاستيراد الكامل (تحويل الأنواع والبحث عن العلاقات).",
183
372
  title: "استيراد {{object}}",
373
+ notAllowed: "هذا الكائن غير متاح للاستيراد.",
184
374
  stepUpload: "رفع",
185
375
  stepMapping: "تعيين",
186
376
  stepPreview: "معاينة",
@@ -256,6 +446,42 @@ const ar = {
256
446
  moreEvents: "+{{count}} المزيد",
257
447
  },
258
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: "تحديث",
259
485
  loading: 'Loading records...',
260
486
  recordCount: "{{count}} سجلات",
261
487
  recordCountOne: "{{count}} سجل",
@@ -267,6 +493,8 @@ const ar = {
267
493
  filterRecords: "تصفية السجلات",
268
494
  sort: "ترتيب",
269
495
  sortRecords: "ترتيب السجلات",
496
+ sortByIdSuffix: "(حسب المعرّف)",
497
+ sortRelationalHint: "الأعمدة التي تشير إلى سجل آخر غير مدرجة هنا: يمكن ترتيبها حسب المعرّف المخزَّن فقط، وليس حسب الاسم الظاهر في الخلية. للترتيب حسب ذلك الاسم، أضف حقل صيغة يحتوي عليه.",
270
498
  group: "تجميع",
271
499
  groupBy: "تجميع حسب",
272
500
  export: "تصدير",
@@ -296,6 +524,11 @@ const ar = {
296
524
  recordEditingTitle: "تحرير السجلات",
297
525
  },
298
526
  managedByBadge: {
527
+ systemWritable: {
528
+ short: "مخطط المنصة",
529
+ title: "تحدده المنصة وقابل للكتابة من المسؤول",
530
+ body: "تحدد المنصة مخطط هذا الكائن، لكن صفوفه لك تنشئها وتحررها هنا. ومن يحق له الكتابة تحدده الإدارة المفوَّضة والأمان على مستوى السجل، لا هذه الشارة.",
531
+ },
299
532
  config: {
300
533
  short: "إعدادات المسؤول",
301
534
  title: "تكوين المسؤول",
@@ -318,6 +551,7 @@ const ar = {
318
551
  },
319
552
  },
320
553
  kanban: {
554
+ uncategorized: "غير مصنّف",
321
555
  addCard: "إضافة بطاقة",
322
556
  addColumn: "إضافة عمود",
323
557
  moveCard: "نقل بطاقة",
@@ -339,12 +573,92 @@ const ar = {
339
573
  },
340
574
  },
341
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: "فشل الحفظ — تم التراجع عن التغيير",
342
644
  column: {
343
645
  taskName: "اسم المهمة",
344
646
  start: "البداية",
345
647
  end: "النهاية",
346
648
  },
347
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: "إعادة",
348
662
  prevPeriod: "الفترة السابقة",
349
663
  nextPeriod: "الفترة التالية",
350
664
  zoomIn: "تكبير",
@@ -390,6 +704,11 @@ const ar = {
390
704
  redo: 'Redo',
391
705
  },
392
706
  detail: {
707
+ editInlineHint: "انقر نقرًا مزدوجًا للتحرير",
708
+ systemActor: "النظام",
709
+ unknownUser: "غير معروف",
710
+ created: "أُنشئ",
711
+ updated: "حُدِّث",
393
712
  back: "رجوع",
394
713
  edit: "تحرير",
395
714
  editInline: "تحرير",
@@ -439,6 +758,18 @@ const ar = {
439
758
  attachmentCount: "{{count}} مرفق",
440
759
  attachmentCountPlural: "{{count}} مرفقات",
441
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: "ليس لديك إذن للقيام بذلك.",
442
773
  unifiedDiff: "عرض موحد",
443
774
  sideBySideDiff: "عرض جنباً إلى جنب",
444
775
  noChanges: "لا توجد تغييرات",
@@ -486,9 +817,15 @@ const ar = {
486
817
  saving: "جارٍ الحفظ…",
487
818
  lockedByApproval: "مقفل للموافقة",
488
819
  lockedTooltip: "يحتوي هذا السجل على طلب موافقة معلق؛ التعديل مقفل",
820
+ writeStrippedTitle: "لم يتم حفظ بعض الحقول",
821
+ writeStrippedReadonly: "للقراءة فقط، لذلك لم يتم حفظها: {{fields}}",
822
+ writeStrippedByState: "غير قابلة للتعديل في الحالة الحالية لهذا السجل، لذلك لم يتم حفظها: {{fields}}",
823
+ approvalPendingEditable: "قيد الموافقة · قابل للتعديل",
824
+ approvalPendingTooltip: "يحتوي هذا السجل على طلب موافقة معلق، لكن هذه الخطوة لا تزال تسمح بالتعديل",
489
825
  cancelApproval: "إلغاء الموافقة",
490
826
  cancelApprovalInFlight: "جارٍ الإلغاء…",
491
827
  cancelApprovalTooltip: "إلغاء طلب الموافقة المعلق لفتح قفل السجل",
828
+ cancelApprovalTooltipUnlocked: "إلغاء طلب الموافقة المعلق",
492
829
  cancelApprovalFailed: "فشل إلغاء الموافقة",
493
830
  cancelApprovalUnavailable: "إلغاء الموافقات غير مدعوم من مصدر البيانات هذا",
494
831
  linkCopied: "تم نسخ الرابط إلى الحافظة",
@@ -602,6 +939,35 @@ const ar = {
602
939
  resetZoom: "إعادة تعيين التكبير",
603
940
  },
604
941
  dashboard: {
942
+ noRows: "لا توجد صفوف",
943
+ pickMeasures: "اختر المقاييس (القيم) لأداة مجموعة البيانات هذه.",
944
+ datasetUnsupported: "مصدر البيانات هذا لا يدعم استعلامات مجموعات البيانات.",
945
+ details: "التفاصيل",
946
+ exportCsv: "تصدير CSV",
947
+ openInList: "فتح في القائمة",
948
+ filters: {
949
+ label: "عوامل تصفية لوحة المعلومات",
950
+ dateRange: "النطاق الزمني",
951
+ allTime: "كل الأوقات",
952
+ custom: "مخصص…",
953
+ all: "الكل",
954
+ reset: "إعادة تعيين",
955
+ range: {
956
+ today: "اليوم",
957
+ yesterday: "أمس",
958
+ this_week: "هذا الأسبوع",
959
+ last_week: "الأسبوع الماضي",
960
+ this_month: "هذا الشهر",
961
+ last_month: "الشهر الماضي",
962
+ this_quarter: "هذا الربع",
963
+ last_quarter: "الربع الماضي",
964
+ this_year: "هذه السنة",
965
+ last_year: "السنة الماضية",
966
+ last_7_days: "آخر 7 أيام",
967
+ last_30_days: "آخر 30 يومًا",
968
+ last_90_days: "آخر 90 يومًا",
969
+ },
970
+ },
605
971
  addWidget: "إضافة أداة",
606
972
  removeWidget: "إزالة أداة",
607
973
  editLayout: "تعديل التخطيط",
@@ -729,6 +1095,7 @@ const ar = {
729
1095
  navTypeGroup: "مجموعة",
730
1096
  navTypeSeparator: "فاصل",
731
1097
  navTypeAction: "إجراء",
1098
+ navTypeComponent: "مكوّن",
732
1099
  navEditIcon: "تعديل الأيقونة",
733
1100
  navToggleVisible: "تبديل الرؤية",
734
1101
  navHidden: "مخفي",
@@ -830,8 +1197,199 @@ const ar = {
830
1197
  },
831
1198
  },
832
1199
  console: {
1200
+ settingsHub: {
1201
+ title: "الإعدادات",
1202
+ subtitle: "اضبط مساحة العمل والتكاملات وأعلام الميزات.",
1203
+ loadError: "تعذّر تحميل الإعدادات",
1204
+ empty: "لا توجد إعدادات مسجّلة. يمكن للإضافات تسجيل بيانات الإعدادات عبر SettingsService.",
1205
+ settingsCount: "{{n}} من الإعدادات",
1206
+ beta: "إصدار تجريبي",
1207
+ categories: {
1208
+ Workspace: "مساحة العمل",
1209
+ Communication: "الاتصالات",
1210
+ Security: "الأمان",
1211
+ Infrastructure: "البنية التحتية",
1212
+ Beta: "إصدار تجريبي",
1213
+ Other: "أخرى",
1214
+ },
1215
+ },
1216
+ objectData: {
1217
+ badge: "البيانات",
1218
+ description: "شريحة بيانات محددة عبر الرابط — غير مرتبطة بأي عرض محفوظ.",
1219
+ filteredBy: "مُرشَّح حسب",
1220
+ removeFilter: "إزالة عامل التصفية {{field}}",
1221
+ saveAsView: "الحفظ كعرض",
1222
+ noAccessTitle: "تم رفض الوصول",
1223
+ noAccess: "ليس لديك إذن لعرض هذه البيانات.",
1224
+ },
1225
+ identityImport: {
1226
+ policyTitle: "إعداد تسجيل الدخول للمستخدمين المستوردين",
1227
+ policy: {
1228
+ auto: "تلقائي (موصى به)",
1229
+ invite: "إرسال دعوات",
1230
+ temporary: "كلمات مرور مؤقتة",
1231
+ none: "بدون كلمة مرور (هوية فقط)",
1232
+ },
1233
+ policyHint: {
1234
+ auto: "يتلقى المستخدمون الذين يمكن الوصول إليهم دعوة (بريد إلكتروني أو رسالة نصية)؛ ومن يتعذّر الوصول إليه يحصل على كلمة مرور لمرة واحدة تُعرض مرة واحدة فقط في شاشة النتائج. تعمل مع خدمة البريد/الرسائل أو بدونها.",
1235
+ invite: "يتلقى كل مستخدم يتم إنشاؤه بريدًا لتعيين كلمة المرور (أو رسالة دعوة نصية للصفوف التي تحتوي على هاتف فقط). يتطلب خدمة بريد/رسائل مُهيّأة — وتفشل الصفوف التي يتعذّر الوصول إليها.",
1236
+ temporary: "للتنصيبات التي لا تتوفر فيها خدمة بريد/رسائل: يحصل كل مستخدم يتم إنشاؤه على كلمة مرور لمرة واحدة تُعرض مرة واحدة فقط في شاشة النتائج. ويفرض تسجيل الدخول الأول تغييرها.",
1237
+ none: "يسجّل المستخدمون الدخول أولًا برمز لمرة واحدة عبر الهاتف أو برابط سحري أو برابط إعادة تعيين كلمة المرور، ثم يعيّنون كلمة المرور الخاصة بهم.",
1238
+ },
1239
+ passwordsNote: "كلمات مرور مؤقتة — تُعرض مرة واحدة ولا تُخزَّن أبدًا. احفظها الآن؛ وعلى كل مستخدم تغيير كلمته عند أول تسجيل دخول.",
1240
+ passwordsMore: "تم حذف إدخالات إضافية — استخدم التنزيل.",
1241
+ passwordsDownload: "تنزيل ملف CSV",
1242
+ },
1243
+ ai: {
1244
+ usage: {
1245
+ title: "استخدام الذكاء الاصطناعي",
1246
+ meterBuild: "الإنشاء",
1247
+ meterAsk: "السؤال",
1248
+ statusOk: "المتبقّي وفير",
1249
+ statusLow: "على وشك النفاد",
1250
+ statusFull: "تم بلوغ الحد",
1251
+ resetsDaily: "تُعاد التهيئة الليلة",
1252
+ resetsMonthly: "تُعاد التهيئة في الدورة القادمة",
1253
+ ctaUpgrade: "قم بالترقية للمتابعة",
1254
+ ctaTopUp: "أضف أرصدة للمتابعة",
1255
+ ariaLabel: "استخدام الذكاء الاصطناعي: {{status}}",
1256
+ },
1257
+ workspaceTitle: "مساحة عمل الذكاء الاصطناعي",
1258
+ workspaceSubtitle: "اسأل وافحص واستأنف المحادثات",
1259
+ openChats: "فتح المحادثات",
1260
+ chats: "المحادثات",
1261
+ chatsDescription: "تصفّح محادثات الذكاء الاصطناعي وأدرها.",
1262
+ share: "مشاركة",
1263
+ shareTitle: "مشاركة هذه المحادثة",
1264
+ shareDisabledTitle: "ابدأ المحادثة لتفعيل المشاركة",
1265
+ newChat: "جديدة",
1266
+ searchChats: "البحث في المحادثات...",
1267
+ noChatsYet: "لا توجد محادثات بعد",
1268
+ noChatsDescription: "ابدأ محادثة جديدة لتظهر هنا.",
1269
+ noMatchingChats: "لا توجد محادثات مطابقة.",
1270
+ newConversation: "محادثة جديدة",
1271
+ renameConversation: "إعادة تسمية المحادثة",
1272
+ deleteConversation: "حذف المحادثة",
1273
+ saveRename: "حفظ الاسم",
1274
+ cancelRename: "إلغاء إعادة التسمية",
1275
+ loadingHistory: "جارٍ تحميل سجل المحادثة...",
1276
+ conversationReady: "المحادثة جاهزة",
1277
+ preparingConversation: "جارٍ تجهيز محادثة جديدة",
1278
+ offlineDemoMode: "وضع العرض دون اتصال — قائمة الوكلاء غير متاحة",
1279
+ sendFailedRateLimited: "أنت ترسل الرسائل بسرعة كبيرة. رسالتك محفوظة بالأسفل — انتظر لحظة ثم أعد المحاولة.",
1280
+ sendFailedGeneric: "تعذّر إرسال رسالتك. وهي محفوظة بالأسفل — يرجى إعادة المحاولة.",
1281
+ askAgent: "اسأل {{agent}}...",
1282
+ assistant: "المساعد",
1283
+ liveCanvas: "معاينة حية — {{app}} (مسودة)",
1284
+ liveCanvasUnlisted: "تطبيق حي — {{app}} (غير مُدرج حتى النشر)",
1285
+ loadingAgents: "جارٍ تحميل الوكلاء...",
1286
+ askAnything: "اسأل عن أي شيء...",
1287
+ emptyTitle: "ابدأ محادثة",
1288
+ emptyDescription: "اسأل عن أي شيء — يمكن للمساعد الاطلاع على سياق تطبيقك الحالي.",
1289
+ switchAssistant: "تبديل المساعد",
1290
+ chooseAgent: "اختر مساعدًا…",
1291
+ empty: {
1292
+ build: {
1293
+ title: "الإنشاء بالذكاء الاصطناعي",
1294
+ description: "صف تطبيقًا أو سير عمل بلغة بسيطة — سأعدّ مسودة الكائنات والشاشات والأتمتة، ثم تراجعها وتنشرها.",
1295
+ },
1296
+ ask: {
1297
+ title: "اسأل بياناتك",
1298
+ description: "اطرح أسئلة عن سجلاتك — أعداد وقوائم وملخصات للبيانات التي يمكنك الوصول إليها.",
1299
+ },
1300
+ editApp: {
1301
+ title: "تحرير «{{app}}»",
1302
+ titleGeneric: "تحرير هذا التطبيق",
1303
+ description: "ما الذي تريد تغييره؟ سأعدّل هذا التطبيق في مكانه — إضافة حقل أو كائن أو عرض أو أتمتة، أو تعديل ما هو موجود.",
1304
+ },
1305
+ },
1306
+ clearConversation: "مسح",
1307
+ sendHint: "للإرسال",
1308
+ agentActivity: "نشاط الوكيل",
1309
+ toolCompleted: "مكتمل",
1310
+ toolRunning: "قيد التنفيذ",
1311
+ toolAwaitingApproval: "بانتظار الموافقة",
1312
+ toolFailed: "فشل",
1313
+ toolDetailsHidden: "مدخلات الأدوات والنتائج الخام مخفية في هذا العرض.",
1314
+ copy: "نسخ",
1315
+ copied: "تم النسخ",
1316
+ regenerate: "إعادة التوليد",
1317
+ model: "النموذج",
1318
+ submit: "إرسال",
1319
+ uploadFiles: "رفع الملفات",
1320
+ stopResponse: "إيقاف الرد",
1321
+ trace: "التتبّع",
1322
+ viewTrace: "عرض التتبّع",
1323
+ nextSteps: "الخطوة التالية",
1324
+ publishDrafts: "نشر",
1325
+ publishOk: "تم النشر — الكائنات فعّالة الآن.",
1326
+ seedWarn: "تم النشر، لكن تعذّر تحميل بعض البيانات التجريبية.",
1327
+ openBuiltApp: "فتح التطبيق",
1328
+ designBuiltApp: "التصميم في Studio",
1329
+ previewDraft: "معاينة",
1330
+ previewApp: "معاينة التطبيق",
1331
+ resizeSplit: "تغيير حجم المحادثة والمعاينة",
1332
+ hideChats: "إخفاء المحادثات",
1333
+ showChats: "إظهار المحادثات",
1334
+ planTitle: "الخطة المقترحة",
1335
+ planQuestions: "التأكيد قبل الإنشاء",
1336
+ planAssumptions: "الافتراضات",
1337
+ planApproveHint: "أجب للموافقة على هذه الخطة أو تعديلها.",
1338
+ planApprove: "ابدأ الإنشاء",
1339
+ planAdjust: "تعديل",
1340
+ justNow: "الآن",
1341
+ minutesAgo: "قبل {{count}} د",
1342
+ hoursAgo: "قبل {{count}} س",
1343
+ daysAgo: "قبل {{count}} ي",
1344
+ agentLabels: {
1345
+ ask: "السؤال",
1346
+ build: "الإنشاء",
1347
+ dataChat: "المساعد",
1348
+ metadataAssistant: "مساعد البيانات الوصفية",
1349
+ },
1350
+ suggestions: {
1351
+ dataChat: {
1352
+ userCount: "كم عدد المستخدمين في النظام؟ اذكر عناوين بريدهم الإلكتروني.",
1353
+ recentRecords: "اذكر أحدث 5 سجلات تم إنشاؤها.",
1354
+ recordCounts: "احسب عدد السجلات لكل كائن.",
1355
+ },
1356
+ metadataAssistant: {
1357
+ buildCrm: "أنشئ نظام إدارة علاقات عملاء للمبيعات — عملاء وجهات اتصال ومسار صفقات يمكنني تجميعه حسب المرحلة.",
1358
+ buildApp: "أنشئ متتبّع مشاريع — مشاريع ومهام بمسؤولين وتواريخ استحقاق ولوحة حسب الحالة.",
1359
+ buildFlow: "صمّم مكتب دعم — تذاكر بأولوية وسير عمل للحالات وروابط بالعملاء.",
1360
+ buildInventory: "أنشئ تطبيق مخزون — منتجات ومستويات مخزون وموردين وتنبيه لانخفاض المخزون.",
1361
+ buildRecruiting: "أنشئ متتبّع متقدمين — مرشحون ووظائف شاغرة ومراحل مقابلات وملاحظات.",
1362
+ },
1363
+ generic: {
1364
+ help: "بماذا يمكنك مساعدتي؟",
1365
+ availableObjects: "اذكر كائنات البيانات المتاحة.",
1366
+ recentActivity: "لخّص نشاطي الأخير.",
1367
+ },
1368
+ editApp: {
1369
+ addField: "أضف حقلًا إلى أحد الكائنات.",
1370
+ addObject: "أضف كائنًا جديدًا واربطه بكائن موجود.",
1371
+ addDashboard: "أضف لوحة معلومات للمؤشرات الرئيسية.",
1372
+ addAutomation: "أضف أتمتة — موافقة أو سير حالات أو إشعارًا.",
1373
+ },
1374
+ },
1375
+ changesTitle: "تأكيد التغييرات",
1376
+ changesConfirmed: "تم التأكيد",
1377
+ changesConfirm: "تأكيد",
1378
+ changesConfirmHint: "أجب لتأكيد هذا التغيير أو تعديله.",
1379
+ changeVerb: {
1380
+ createObject: "إنشاء كائن",
1381
+ addField: "إضافة حقل",
1382
+ modifyField: "تعديل حقل",
1383
+ deleteField: "حذف حقل",
1384
+ createMetadata: "إنشاء",
1385
+ updateMetadata: "تعديل",
1386
+ createSeed: "إنشاء بيانات تجريبية",
1387
+ createPackage: "إنشاء حزمة تطبيق",
1388
+ },
1389
+ },
833
1390
  title: "وحدة تحكم ObjectStack",
834
1391
  initializing: "جاري تهيئة التطبيق...",
1392
+ loadingHint: "قد يستغرق إعداد بيئة جديدة بعض الوقت.",
835
1393
  breadcrumb: {
836
1394
  dashboards: "لوحات المعلومات",
837
1395
  pages: "الصفحات",
@@ -873,6 +1431,7 @@ const ar = {
873
1431
  toggleDarkMode: "تبديل الوضع الداكن",
874
1432
  },
875
1433
  commandPalette: {
1434
+ title: "لوحة الأوامر",
876
1435
  placeholder: "اكتب أمراً أو ابحث...",
877
1436
  noResults: "لم يتم العثور على نتائج.",
878
1437
  objects: "الكائنات",
@@ -906,6 +1465,14 @@ const ar = {
906
1465
  system: "النظام",
907
1466
  },
908
1467
  objectView: {
1468
+ viewTypeTree: "شجرة",
1469
+ viewTypeTreeDesc: "يرتّب السجلات ذاتية المرجعية في تسلسل هرمي عبر حقل أب.",
1470
+ parentField: "الحقل الأب",
1471
+ parentFieldHelp: "الحقل الذي يشير إلى السجل الأب (الكائن نفسه) ويحدد التسلسل الهرمي. الحقول ذاتية المرجعية فقط هي المؤهلة.",
1472
+ viewName: "الاسم",
1473
+ viewNameHelp: "مفتاح برمجي (snake_case). يُملأ تلقائيًا من العنوان — عدّله إن أردت.",
1474
+ viewNameRequired: "أدخل مفتاحًا (أحرف إنجليزية صغيرة وأرقام وشرطة سفلية). لا يُملأ تلقائيًا للعناوين غير اللاتينية.",
1475
+ viewNameInvalid: "استخدم أحرفًا إنجليزية صغيرة وأرقامًا وشرطات سفلية؛ وابدأ بحرف أو شرطة سفلية.",
909
1476
  systemViewReadonly: 'System view defined in code - duplicate to customize.',
910
1477
  expandToPage: 'Open as full page',
911
1478
  objectNotFound: "الكائن غير موجود",
@@ -1119,7 +1686,28 @@ const ar = {
1119
1686
  },
1120
1687
  },
1121
1688
  auth: {
1689
+ setPassword: {
1690
+ title: "تعيين كلمة مرور للاسترداد",
1691
+ description: "لقد سجّلت الدخول عبر الدخول الموحّد. عيّن كلمة مرور محلية لتتمكن من الدخول إلى هذه البيئة مباشرةً إذا أصبح الدخول الموحّد غير متاح.",
1692
+ email: "البريد الإلكتروني",
1693
+ newPassword: "كلمة المرور الجديدة",
1694
+ confirmPassword: "تأكيد كلمة المرور",
1695
+ submit: "تعيين كلمة المرور",
1696
+ submitting: "جارٍ الحفظ…",
1697
+ success: "تم تعيين كلمة المرور المحلية",
1698
+ failed: "تعذّر تعيين كلمة المرور",
1699
+ passwordsMismatch: "كلمتا المرور غير متطابقتين",
1700
+ noSession: "انتهت صلاحية جلستك.",
1701
+ backToSignIn: "تسجيل الدخول مرة أخرى",
1702
+ },
1122
1703
  login: {
1704
+ signingIn: "جارٍ تسجيل دخولك…",
1705
+ ssoHandoff: "المتابعة إلى {{target}}",
1706
+ devAdminHint: {
1707
+ title: "بيئة تطوير",
1708
+ body: "سجّل الدخول بحساب مسؤول التطوير المهيأ مسبقًا:",
1709
+ dismiss: "تجاهل",
1710
+ },
1123
1711
  title: "تسجيل الدخول إلى حسابك",
1124
1712
  description: "أدخل بريدك الإلكتروني وكلمة المرور للمتابعة",
1125
1713
  emailLabel: "البريد الإلكتروني",
@@ -1132,6 +1720,7 @@ const ar = {
1132
1720
  noAccountText: "ليس لديك حساب؟",
1133
1721
  signUpText: "إنشاء حساب",
1134
1722
  errors: {
1723
+ oauthCallbackFailed: "تعذّر إكمال الدخول الموحّد — انتهت صلاحية رابط تسجيل الدخول أو سبق استخدامه. يرجى المحاولة مرة أخرى.",
1135
1724
  invalidCredentials: "بريد إلكتروني أو كلمة مرور غير صحيحة. يرجى المحاولة مرة أخرى.",
1136
1725
  emailNotVerified: "يرجى التحقق من بريدك الإلكتروني قبل تسجيل الدخول.",
1137
1726
  },
@@ -1257,6 +1846,40 @@ const ar = {
1257
1846
  shell: {
1258
1847
  tenantHostHint: "تسجل الدخول إلى مساحة العمل هذه",
1259
1848
  },
1849
+ layout: {
1850
+ headline: "أنشئ تطبيقات أعمال قوية بسرعة أكبر.",
1851
+ subhead: "المنصة الموحدة لإدارة بيانات المؤسسات وسير العمل والتحليلات.",
1852
+ },
1853
+ remediation: {
1854
+ signOut: "تسجيل الخروج بدلاً من ذلك",
1855
+ password: {
1856
+ title: "انتهت صلاحية كلمة المرور",
1857
+ fallbackMessage: "يرجى تعيين كلمة مرور جديدة للمتابعة.",
1858
+ current: "كلمة المرور الحالية",
1859
+ next: "كلمة المرور الجديدة",
1860
+ confirm: "تأكيد كلمة المرور الجديدة",
1861
+ submit: "تغيير كلمة المرور والمتابعة",
1862
+ submitting: "جارٍ التحديث…",
1863
+ mismatch: "كلمتا المرور الجديدتان غير متطابقتين.",
1864
+ failed: "تعذّر تغيير كلمة المرور.",
1865
+ },
1866
+ mfa: {
1867
+ title: "إعداد المصادقة الثنائية",
1868
+ fallbackMessage: "تتطلب مؤسستك تطبيق مصادقة للمتابعة.",
1869
+ confirmPassword: "أكّد كلمة المرور",
1870
+ continue: "متابعة",
1871
+ preparing: "جارٍ التحضير…",
1872
+ enrollFailed: "تعذّر بدء التسجيل.",
1873
+ scanTitle: "امسح الرمز بتطبيق المصادقة",
1874
+ scanBody: "امسح رمز QR هذا باستخدام Google Authenticator أو 1Password أو Authy وغيرها، ثم أدخل الرمز المكوّن من 6 أرقام.",
1875
+ backupTitle: "احفظ رموز النسخ الاحتياطي",
1876
+ backupBody: "احتفظ بها في مكان آمن — يمكن استخدام كل رمز مرة واحدة إذا فقدت جهازك.",
1877
+ codeLabel: "رمز مكوّن من 6 أرقام",
1878
+ verify: "تحقّق وتابع",
1879
+ verifying: "جارٍ التحقق…",
1880
+ invalidCode: "رمز غير صالح. حاول مرة أخرى.",
1881
+ },
1882
+ },
1260
1883
  },
1261
1884
  profile: {
1262
1885
  title: "الملف الشخصي",
@@ -1321,11 +1944,15 @@ const ar = {
1321
1944
  settings: "إعدادات مساحة العمل",
1322
1945
  },
1323
1946
  help: {
1947
+ onThisPage: "في هذه الصفحة",
1948
+ keyboardShortcuts: "اختصارات لوحة المفاتيح",
1324
1949
  appDocs: 'وثائق هذا التطبيق',
1325
1950
  allDocs: 'كل الوثائق',
1326
1951
  onlineDocs: 'الوثائق عبر الإنترنت',
1327
1952
  },
1328
1953
  sidebar: {
1954
+ packageManagement: "إدارة الحزم",
1955
+ searchNavigation: "البحث في التنقل...",
1329
1956
  settings: "الإعدادات",
1330
1957
  help: "المساعدة",
1331
1958
  helpTooltip: "المساعدة والوثائق",
@@ -1342,14 +1969,66 @@ const ar = {
1342
1969
  removeFromFavorites: "إزالة {{name}} من المفضلة",
1343
1970
  },
1344
1971
  topbar: {
1972
+ openAssistant: "فتح مساعد {{name}}",
1973
+ offline: "غير متصل",
1974
+ usersOnline: "المستخدمون المتصلون الآن",
1975
+ switchView: "تبديل العرض",
1976
+ switchObject: "تبديل الكائن",
1977
+ connection: {
1978
+ connected: "متصل",
1979
+ connecting: "جارٍ الاتصال...",
1980
+ reconnecting: "جارٍ إعادة الاتصال...",
1981
+ disconnected: "منقطع",
1982
+ error: "خطأ في الاتصال",
1983
+ },
1984
+ stage: {
1985
+ preview: "معاينة",
1986
+ beta: "إصدار تجريبي",
1987
+ tooltip: "هذه المنصة في مرحلة المعاينة — وقد تتغير الميزات.",
1988
+ },
1345
1989
  aiAssistant: "مساعد الذكاء الاصطناعي",
1346
1990
  designInStudio: "التصميم في Studio",
1347
1991
  },
1348
1992
  home: {
1993
+ build: {
1994
+ title: "إنشاء تطبيق",
1995
+ subtitle: "ابدأ من الصفر — صمّم الكائنات والنماذج والأتمتة والواجهات.",
1996
+ },
1997
+ template: {
1998
+ title: "ابدأ من قالب",
1999
+ subtitle: "ثبّت تطبيق قالب من السوق وخصّصه.",
2000
+ },
2001
+ welcomeAdminDescription: "صف نشاطك التجاري في جملة واحدة — وسيولّد الذكاء الاصطناعي الكائنات والشاشات وواجهات البرمجة وأدوات الوكيل. أو أعدّها بنفسك من القائمة على اليسار.",
2002
+ welcomeAdminDescriptionNoBuild: "أعدّ تطبيقك الأول من قائمة الإدارة على اليسار. وبمجرد توفر البيانات، يمكن لمساعد الذكاء الاصطناعي مساعدتك في استكشافها.",
2003
+ welcomeAdminDescriptionNoAi: "أعدّ تطبيقك الأول من قائمة الإدارة على اليسار.",
2004
+ noAppsTitle: "لا توجد تطبيقات بعد",
2005
+ noAppsDescription: "يجري إعداد مساحة عملك — وستظهر هنا التطبيقات التي يشاركها معك المسؤول.",
2006
+ buildWithAI: "الإنشاء بالذكاء الاصطناعي",
2007
+ askAI: "اسأل الذكاء الاصطناعي",
2008
+ recoveryReminder: {
2009
+ message: "عيّن كلمة مرور للاسترداد كي تتمكن من تسجيل الدخول إذا تعذّر الدخول الموحّد في أي وقت.",
2010
+ cta: "تعيين كلمة المرور",
2011
+ dismiss: "تجاهل",
2012
+ },
2013
+ pendingDrafts: {
2014
+ message: "لديك {{count}} من التغييرات غير المنشورة — انشرها لتصبح فعّالة.",
2015
+ cta: "نشر",
2016
+ publishing: "جارٍ النشر…",
2017
+ published: "تم النشر! تغييراتك فعّالة الآن.",
2018
+ publishFailed: "فشل النشر",
2019
+ },
1349
2020
  title: "الرئيسية",
1350
2021
  subtitle: "لوحة تحكم مساحة العمل",
1351
2022
  nav: "الرئيسية",
1352
2023
  allApps: "جميع التطبيقات",
2024
+ yourApps: "تطبيقاتك",
2025
+ showMoreApps: "المزيد",
2026
+ showLess: "عرض أقل",
2027
+ continueEmpty: "ستظهر هنا العناصر التي تفتحها.",
2028
+ actionCenter: {
2029
+ title: "يتطلب انتباهك",
2030
+ empty: "لقد أنجزت كل شيء",
2031
+ },
1353
2032
  loading: "جارٍ تحميل مساحة العمل...",
1354
2033
  recent: "الأخيرة",
1355
2034
  starred: "المميزة بنجمة",
@@ -1401,7 +2080,21 @@ const ar = {
1401
2080
  },
1402
2081
  },
1403
2082
  layout: {
2083
+ systemNav: {
2084
+ systemSettings: "إعدادات النظام",
2085
+ applications: "التطبيقات",
2086
+ appMarketplace: "سوق التطبيقات",
2087
+ objectManager: "مدير الكائنات",
2088
+ users: "المستخدمون",
2089
+ organizations: "المؤسسات",
2090
+ roles: "الأدوار",
2091
+ configuration: "التهيئة",
2092
+ createApp: "إنشاء تطبيق",
2093
+ },
1404
2094
  appSwitcher: {
2095
+ switchApplication: "تبديل التطبيق",
2096
+ appsAvailable: "{{count}} من التطبيقات المتاحة",
2097
+ editNavigation: "تحرير التنقل",
1405
2098
  home: "الرئيسية",
1406
2099
  addApp: "إضافة تطبيق",
1407
2100
  editApp: "تعديل التطبيق",
@@ -1491,10 +2184,11 @@ const ar = {
1491
2184
  requiredError: "{{label}} مطلوب",
1492
2185
  cancel: "إلغاء",
1493
2186
  confirm: "تأكيد",
2187
+ uploading: "جارٍ الرفع…",
1494
2188
  defaultActionTitle: "إجراء",
1495
2189
  ok: "موافق",
1496
- lookupPlaceholder: "لصق معرف السجل (UUID) لـ {{label}}",
1497
- lookupHelpText: "أدخل معرف سجل الكائن المرجع. سيتم إضافة أداة اختيار قريباً.",
2190
+ lookupPlaceholder: "معرف السجل لـ {{label}}",
2191
+ lookupHelpText: "لم يتم تكوين كائن مرجعي لهذه المعلمة، لذا فإن أداة اختيار السجلات غير متاحة. أدخل معرف السجل، أو اطلب من المسؤول تصحيح معلمة الإجراء.",
1498
2192
  },
1499
2193
  actionConfirm: {
1500
2194
  title: "تأكيد الإجراء",
@@ -1519,6 +2213,8 @@ const ar = {
1519
2213
  updateFailed: "تعذر تحديث التنقل",
1520
2214
  },
1521
2215
  objectActions: {
2216
+ resetPackageSetConfirm: "مجموعة الأذونات هذه تأتي ضمن حزمة مثبَّتة ولا يمكن إزالتها. الحذف يعيدها إلى الحالة الأصلية المرفقة بالحزمة ويتجاهل تخصيصاتك في هذه البيئة. هل تريد المتابعة؟",
2217
+ resetPackageSetSuccess: "تمت إعادة مجموعة الأذونات إلى حالتها الأصلية المرفقة بالحزمة",
1522
2218
  deleteSuccess: "تم حذف {{label}} بنجاح",
1523
2219
  deleteFailed: "تعذر حذف {{label}}",
1524
2220
  noRecordId: "لم يتم توفير معرف سجل",
@@ -1683,6 +2379,7 @@ const ar = {
1683
2379
  },
1684
2380
  },
1685
2381
  organizations: {
2382
+ create: "إنشاء مساحة عمل",
1686
2383
  mine: "مؤسساتي",
1687
2384
  title: "المؤسسات",
1688
2385
  heading: "مؤسساتك",
@@ -1696,6 +2393,11 @@ const ar = {
1696
2393
  noMatches: "لا توجد مؤسسات تطابق بحثك.",
1697
2394
  },
1698
2395
  notifications: {
2396
+ regionLabel: "الإشعارات",
2397
+ groupCount: "{{count}} من الإشعارات",
2398
+ groupUnread: "{{count}} غير مقروء",
2399
+ groupMarkRead: "تعليم كمقروء",
2400
+ groupMarkReadTitle: "تعليم كل هذا النوع كمقروء",
1699
2401
  empty: "لا توجد إشعارات",
1700
2402
  markAllRead: "تعليم الكل كمقروء",
1701
2403
  viewAll: "عرض جميع الإشعارات",
@@ -1814,7 +2516,103 @@ const ar = {
1814
2516
  done: 'تم — إخفاء',
1815
2517
  },
1816
2518
  },
2519
+ excelImport: {
2520
+ noImportableFields: "لا تحتوي هذه الكائن على حقول قابلة للاستيراد.",
2521
+ schemaReadFailed: "تعذّرت قراءة مخطط الكائن.",
2522
+ imported: "تم استيراد {{count}} صف إلى {{object}}.",
2523
+ importFrom: "استيراد الصفوف الفعلية من",
2524
+ into: "إلى",
2525
+ opening: "جارٍ الفتح…",
2526
+ importAction: "استيراد",
2527
+ dismiss: "تجاهل",
2528
+ },
2529
+ cloudOnboarding: {
2530
+ hintCreate: "أنشئ بيئتك الأولى — مساحة عمل خاصة لها رابطها وقاعدة بياناتها وخطتها. يجري بناء التطبيقات داخلها.",
2531
+ hintReady: "بيئة الإنتاج جاهزة. افتحها لبناء تطبيقاتك وتشغيلها — كل ذلك يحدث داخل البيئة.",
2532
+ createEnvironment: "أنشئ بيئتك",
2533
+ openProduction: "فتح بيئة الإنتاج",
2534
+ manageEnvironments: "إدارة البيئات",
2535
+ },
2536
+ aiModelStatus: {
2537
+ summary: "يستخدم الإنشاء / السؤال {{conversational}} ({{conversationalSource}})؛ ويستخدم الإخراج المهيكل {{structured}} ({{structuredSource}}).",
2538
+ summaryRouting: "سياسة التوجيه: الخطط المجانية ← {{free}}، الخطط المدفوعة ← {{paid}}.",
2539
+ modelUnknown: "غير معروف",
2540
+ sourceUnknown: "لم يبلّغ عنه المحوّل",
2541
+ rowConversational: "نموذج Build / Ask",
2542
+ rowStructured: "مُهيكل (blueprint / seed)",
2543
+ rowReasoning: "مستوى الاستدلال",
2544
+ readFailed: "تعذّرت قراءة نموذج الذكاء الاصطناعي الفعّال. قد لا تُشغّل هذه البيئة خدمة ذكاء اصطناعي، أو قد لا تملك صلاحية ai:read.",
2545
+ readFailedWithStatus: "تعذّرت قراءة نموذج الذكاء الاصطناعي الفعّال (HTTP {{status}}). قد لا تُشغّل هذه البيئة خدمة ذكاء اصطناعي، أو قد لا تملك صلاحية ai:read.",
2546
+ overridesInEffect: "التجاوزات السارية: ",
2547
+ noOverrides: "لا شيء — يجري تشغيل القيم الافتراضية للكود المنشور.",
2548
+ adapter: "المحوّل: ",
2549
+ sourceCodeDefault: "القيمة الافتراضية في الكود (بدون تجاوز env)",
2550
+ sourceInherits: "مثل build/ask",
2551
+ sourcePinned: "مثبّت بواسطة {{source}}",
2552
+ },
2553
+ chatbotError: {
2554
+ title: "فشل الرد",
2555
+ fallbackDetail: "حدث خطأ ما. يرجى المحاولة مرة أخرى.",
2556
+ details: "التفاصيل",
2557
+ hide: "إخفاء",
2558
+ retry: "إعادة المحاولة",
2559
+ },
2560
+ chatbotQuota: {
2561
+ title: "الترقية مطلوبة",
2562
+ fallbackMessage: "لقد بلغت حصتك من الذكاء الاصطناعي.",
2563
+ buyCredits: "شراء باقة أرصدة",
2564
+ upgradePlan: "ترقية الخطة",
2565
+ },
2566
+ environment: {
2567
+ addEnvironment: "إضافة بيئة",
2568
+ setUpProduction: "إعداد بيئة الإنتاج",
2569
+ addDevelopment: "إضافة بيئة تطوير",
2570
+ },
2571
+ cloudConnection: {
2572
+ checking: "جارٍ التحقق من الاتصال…",
2573
+ retry: "إعادة المحاولة",
2574
+ errors: {
2575
+ expired: "انتهت صلاحية الطلب قبل الموافقة عليه. ابدأ من جديد.",
2576
+ bindFailed: "فشل الربط.",
2577
+ deviceCodeFailed: "فشل طلب رمز الجهاز.",
2578
+ },
2579
+ waiting: {
2580
+ popupOpened: "وافق على الاتصال في النافذة التي فُتحت للتو — سيتم تحديث هذه الصفحة تلقائيًا.",
2581
+ polling: "في انتظار الموافقة في وحدة التحكم السحابية…",
2582
+ openApproval: "فتح صفحة الموافقة",
2583
+ copy: "نسخ",
2584
+ copied: "تم النسخ",
2585
+ codePrefilled: "الرمز مُعبَّأ مسبقًا في صفحة الموافقة.",
2586
+ openItHere: "لم تظهر النافذة؟ افتحها من هنا",
2587
+ cancel: "إلغاء",
2588
+ },
2589
+ bound: {
2590
+ title: "متصل بـ ObjectStack Cloud",
2591
+ runtime: "بيئة التشغيل",
2592
+ organization: "المؤسسة",
2593
+ approvedBy: "تمت الموافقة بواسطة",
2594
+ runtimeId: "معرّف بيئة التشغيل",
2595
+ environment: "البيئة",
2596
+ since: "متصل منذ",
2597
+ privatePackages: "تظهر الآن الحزم الخاصة بمؤسستك في السوق ضمن «مؤسستك».",
2598
+ disconnect: "قطع الاتصال",
2599
+ },
2600
+ unbound: {
2601
+ title: "غير متصل",
2602
+ body: "اربط بيئة التشغيل هذه بمستوى تحكم ObjectStack لتصفّح الحزم الخاصة بمؤسستك وتثبيتها هنا. الموافقة بنقرة واحدة في حسابك السحابي — دون إدخال أي معرّفات أو بيانات اعتماد في هذه الصفحة.",
2603
+ connect: "اتصال",
2604
+ },
2605
+ },
1817
2606
  marketplace: {
2607
+ suggestedBindings: {
2608
+ promptEveryone: "يقترح هذا التطبيق منح «{{set}}» لجميع المستخدمين المسجّلين (موضع Everyone).",
2609
+ promptGuest: "يقترح هذا التطبيق منح «{{set}}» للزوار غير المصادَق عليهم (موضع Guest).",
2610
+ confirm: "منح",
2611
+ confirming: "جارٍ المنح…",
2612
+ dismiss: "تجاهل",
2613
+ confirmedToast: "تم الآن منح «{{set}}» إلى {{anchor}}.",
2614
+ dismissedToast: "تم تجاهل اقتراح «{{set}}».",
2615
+ },
1818
2616
  title: "سوق التطبيقات",
1819
2617
  subtitle: "استعرض التطبيقات المعتمدة المنشورة في كتالوج ObjectStack. انقر على تطبيق لرؤية التفاصيل وتثبيته في أحد بيئاتك.",
1820
2618
  searchPlaceholder: "ابحث عن التطبيقات بالاسم أو معرف المانيفست…",
@@ -1866,6 +2664,7 @@ const ar = {
1866
2664
  updateAvailable: 'يتوفر تحديث',
1867
2665
  },
1868
2666
  action: {
2667
+ installed: "مثبَّت",
1869
2668
  install: "تثبيت",
1870
2669
  reinstall: "إعادة التثبيت",
1871
2670
  working: "جارٍ المعالجة…",
@@ -1936,6 +2735,14 @@ const ar = {
1936
2735
  yearsAgo: "منذ {{count}} سنة(سنوات)",
1937
2736
  },
1938
2737
  },
2738
+ approvals: {
2739
+ approve: 'الموافقة',
2740
+ reject: 'رفض',
2741
+ comment: 'تعليق (اختياري)',
2742
+ approveSuccess: 'تمت الموافقة',
2743
+ rejectSuccess: 'تم الرفض',
2744
+ rejectConfirm: 'هل تريد رفض طلب الموافقة هذا؟',
2745
+ },
1939
2746
  approvalsInbox: {
1940
2747
  loadMore: 'تحميل المزيد',
1941
2748
  loadingMore: 'جارٍ التحميل…',
@@ -1960,13 +2767,28 @@ const ar = {
1960
2767
  slaRemaining: 'SLA المتبقي {{dur}}',
1961
2768
  slaOverdue: 'SLA متأخر {{dur}}',
1962
2769
  actReassign: 'إعادة إسناد',
2770
+ reassignFromTo: 'من {{from}} إلى {{to}}',
1963
2771
  actRemind: 'تذكير',
1964
2772
  actRequestInfo: 'طلب معلومات',
1965
2773
  actComment: 'تعليق',
1966
2774
  stepProgress: 'خطوات الموافقة',
1967
2775
  prevRequest: 'السابق',
1968
2776
  nextRequest: 'التالي',
1969
- positionOf: '{{index}} من {{total}}',
2777
+ positionOf: 'الطلب {{index}} من {{total}}',
2778
+ progressApprovals: 'الموافقات — {{got}} من {{need}}',
2779
+ progressGroups: 'تقدم التوقيعات — {{got}} من {{need}} مجموعات',
2780
+ progressEligible: '{{count}} معتمِد مؤهل',
2781
+ progressBar: 'تقدم القرار',
2782
+ declaredActions: 'الإجراءات',
2783
+ attachmentChip: 'مرفق',
2784
+ attachmentOpenFailed: 'تعذّر فتح المرفق — يرجى المحاولة مرة أخرى',
2785
+ approveOneTitle: 'الموافقة على "{{title}}"؟',
2786
+ approveOneBody: 'ستتم الموافقة على الطلب بهويتك. لإضافة تعليق أو مرفق، افتح الطلب.',
2787
+ flowOrigin: 'بدأها التدفق',
2788
+ sortBy: 'ترتيب',
2789
+ sortRecent: 'الأحدث أولاً',
2790
+ sortOldest: 'الأقدم أولاً',
2791
+ sortAmount: 'المبلغ (تنازلي)',
1970
2792
  quickPhrase1: 'موافق — مستوفٍ للمتطلبات.',
1971
2793
  quickPhrase2: 'موافقة مشروطة — يرجى متابعة التنفيذ.',
1972
2794
  quickPhrase3: 'يرجى إضافة مستندات داعمة وإعادة التقديم.',
@@ -2095,6 +2917,10 @@ const ar = {
2095
2917
  retry: 'إعادة المحاولة',
2096
2918
  },
2097
2919
  draftBar: {
2920
+ messageClean: "معاينة المسودة — لا توجد تغييرات غير منشورة؛ كل ما هنا منشور بالفعل.",
2921
+ sampleDataTitle: "تظهر البيانات التجريبية بعد النشر",
2922
+ sampleDataBody: "أنت تعاين بنية تطبيقك. انشره لتحميل سجلات تجريبية وتفعيله.",
2923
+ publishCta: "انشر لتراه مباشرةً",
2098
2924
  message: 'معاينة المسودة — أنت ترى تغييرات غير منشورة. لن يصبح أي شيء فعليًا حتى تنشر.',
2099
2925
  publish: 'نشر',
2100
2926
  publishing: 'جارٍ النشر…',