@object-ui/i18n 3.1.5 → 3.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +21 -1
  3. package/dist/i18n.js +10 -1
  4. package/dist/index.d.ts +1 -0
  5. package/dist/index.js +2 -0
  6. package/dist/locales/ar.d.ts +260 -1
  7. package/dist/locales/ar.js +260 -1
  8. package/dist/locales/de.d.ts +260 -1
  9. package/dist/locales/de.js +269 -1
  10. package/dist/locales/en.d.ts +279 -0
  11. package/dist/locales/en.js +289 -0
  12. package/dist/locales/es.d.ts +260 -1
  13. package/dist/locales/es.js +260 -1
  14. package/dist/locales/fr.d.ts +260 -1
  15. package/dist/locales/fr.js +269 -1
  16. package/dist/locales/index.d.ts +2661 -9
  17. package/dist/locales/ja.d.ts +271 -1
  18. package/dist/locales/ja.js +271 -1
  19. package/dist/locales/ko.d.ts +260 -1
  20. package/dist/locales/ko.js +260 -1
  21. package/dist/locales/pt.d.ts +260 -1
  22. package/dist/locales/pt.js +260 -1
  23. package/dist/locales/ru.d.ts +271 -1
  24. package/dist/locales/ru.js +280 -1
  25. package/dist/locales/zh.d.ts +280 -1
  26. package/dist/locales/zh.js +290 -1
  27. package/dist/useObjectLabel.d.ts +46 -0
  28. package/dist/useObjectLabel.js +79 -12
  29. package/dist/useSafeTranslation.d.ts +5 -0
  30. package/dist/useSafeTranslation.js +46 -0
  31. package/package.json +31 -8
  32. package/.turbo/turbo-build.log +0 -4
  33. package/src/__tests__/i18n.test.ts +0 -228
  34. package/src/__tests__/provider.test.tsx +0 -117
  35. package/src/__tests__/spec-formatters.test.ts +0 -208
  36. package/src/__tests__/useObjectLabel.test.tsx +0 -131
  37. package/src/i18n.ts +0 -98
  38. package/src/index.ts +0 -78
  39. package/src/locales/ar.ts +0 -541
  40. package/src/locales/de.ts +0 -545
  41. package/src/locales/en.ts +0 -625
  42. package/src/locales/es.ts +0 -540
  43. package/src/locales/fr.ts +0 -545
  44. package/src/locales/index.ts +0 -42
  45. package/src/locales/ja.ts +0 -540
  46. package/src/locales/ko.ts +0 -540
  47. package/src/locales/pt.ts +0 -540
  48. package/src/locales/ru.ts +0 -540
  49. package/src/locales/zh.ts +0 -624
  50. package/src/provider.tsx +0 -177
  51. package/src/useObjectLabel.ts +0 -122
  52. package/src/utils/formatting.ts +0 -136
  53. package/src/utils/index.ts +0 -21
  54. package/src/utils/spec-formatters.ts +0 -220
  55. package/tsconfig.json +0 -12
  56. package/tsconfig.tsbuildinfo +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @object-ui/i18n
2
2
 
3
+ ## 3.3.1
4
+
5
+ ## 3.3.0
6
+
7
+ ## 3.2.0
8
+
3
9
  ## 3.1.5
4
10
 
5
11
  ### Patch Changes
package/README.md CHANGED
@@ -110,6 +110,26 @@ isRTL('ar'); // true
110
110
  isRTL('en'); // false
111
111
  ```
112
112
 
113
+ <!-- release-metadata:v3.3.0 -->
114
+
115
+ ## Compatibility
116
+
117
+ - **React:** 18.x or 19.x
118
+ - **Node.js:** ≥ 18
119
+ - **TypeScript:** ≥ 5.0 (strict mode)
120
+ - **`@objectstack/spec`:** ^3.3.0
121
+ - **`@objectstack/client`:** ^3.3.0
122
+ - **Tailwind CSS:** ≥ 3.4 (for packages with UI)
123
+
124
+ ## Links
125
+
126
+ - 📚 [Documentation](https://www.objectui.org/docs/packages/i18n)
127
+ - 📦 [npm package](https://www.npmjs.com/package/@object-ui/i18n)
128
+ - 📝 [Changelog](./CHANGELOG.md)
129
+ - 🐛 [Report an issue](https://github.com/objectstack-ai/objectui/issues)
130
+ - 🤝 [Contributing Guide](https://github.com/objectstack-ai/objectui/blob/main/CONTRIBUTING.md)
131
+ - 🗺️ [Roadmap](https://github.com/objectstack-ai/objectui/blob/main/ROADMAP.md)
132
+
113
133
  ## License
114
134
 
115
- MIT
135
+ MIT — see [LICENSE](./LICENSE).
package/dist/i18n.js CHANGED
@@ -4,6 +4,7 @@
4
4
  * Wraps i18next with Object UI defaults and built-in locale support.
5
5
  */
6
6
  import i18next from 'i18next';
7
+ import { initReactI18next } from 'react-i18next';
7
8
  import { builtInLocales, isRTL } from './locales/index';
8
9
  /**
9
10
  * Create and initialize an i18next instance with Object UI defaults
@@ -35,7 +36,12 @@ export function createI18n(config = {}) {
35
36
  }
36
37
  }
37
38
  const instance = i18next.createInstance();
38
- instance.init({
39
+ // IMPORTANT: disable react-i18next Suspense. Otherwise `useTranslation()`
40
+ // calls during bootstrap throw a Suspense promise (the i18n instance is
41
+ // technically still "initializing" on the very first render in StrictMode),
42
+ // which unmounts the entire App subtree — including ConditionalAuthWrapper,
43
+ // so the discovery fetch never runs and the splash never appears.
44
+ instance.use(initReactI18next).init({
39
45
  lng,
40
46
  fallbackLng: fallbackLanguage,
41
47
  resources: mergedResources,
@@ -44,6 +50,9 @@ export function createI18n(config = {}) {
44
50
  ...interpolation,
45
51
  },
46
52
  returnNull: false,
53
+ react: {
54
+ useSuspense: false,
55
+ },
47
56
  });
48
57
  return instance;
49
58
  }
package/dist/index.d.ts CHANGED
@@ -32,6 +32,7 @@
32
32
  */
33
33
  export { createI18n, getDirection, getAvailableLanguages, type I18nConfig, type TranslationKeys } from './i18n';
34
34
  export { I18nProvider, useObjectTranslation, useI18nContext, type I18nProviderProps } from './provider';
35
+ export { createSafeTranslation } from './useSafeTranslation';
35
36
  export { useObjectLabel, useSafeFieldLabel } from './useObjectLabel';
36
37
  export { builtInLocales, isRTL, RTL_LANGUAGES } from './locales/index';
37
38
  export { default as en } from './locales/en';
package/dist/index.js CHANGED
@@ -34,6 +34,8 @@
34
34
  export { createI18n, getDirection, getAvailableLanguages } from './i18n';
35
35
  // React integration
36
36
  export { I18nProvider, useObjectTranslation, useI18nContext } from './provider';
37
+ // Safe translation hook factory
38
+ export { createSafeTranslation } from './useSafeTranslation';
37
39
  // Convention-based object/field label i18n
38
40
  export { useObjectLabel, useSafeFieldLabel } from './useObjectLabel';
39
41
  // Locale packs
@@ -33,6 +33,8 @@ declare const ar: {
33
33
  readonly noResults: "لم يتم العثور على نتائج";
34
34
  readonly required: "مطلوب";
35
35
  readonly optional: "اختياري";
36
+ readonly selectOption: "اختر خياراً";
37
+ readonly select: "اختر...";
36
38
  };
37
39
  readonly validation: {
38
40
  readonly required: "{{field}} مطلوب";
@@ -55,6 +57,11 @@ declare const ar: {
55
57
  readonly saveError: "فشل في الحفظ";
56
58
  readonly unsavedChanges: "لديك تغييرات غير محفوظة. هل أنت متأكد أنك تريد المغادرة؟";
57
59
  readonly stepOf: "الخطوة {{current}} من {{total}}";
60
+ readonly createTitle: "إنشاء {{object}}";
61
+ readonly editTitle: "تعديل {{object}}";
62
+ readonly createDescription: "إضافة {{object}} جديد إلى قاعدة البيانات.";
63
+ readonly editDescription: "تحديث تفاصيل {{object}}";
64
+ readonly saveRecord: "حفظ السجل";
58
65
  };
59
66
  readonly table: {
60
67
  readonly rowsPerPage: "صفوف في الصفحة";
@@ -131,6 +138,22 @@ declare const ar: {
131
138
  readonly deleteCard: "حذف بطاقة";
132
139
  readonly deleteColumn: "حذف عمود";
133
140
  };
141
+ readonly view: {
142
+ readonly rename: "إعادة تسمية";
143
+ readonly duplicateView: "تكرار العرض";
144
+ readonly shareView: "مشاركة العرض";
145
+ readonly setAsDefault: "تعيين كافتراضي";
146
+ readonly pinView: "تثبيت العرض";
147
+ readonly unpinView: "إلغاء تثبيت العرض";
148
+ readonly changeViewType: "تغيير نوع العرض";
149
+ readonly deleteView: "حذف العرض";
150
+ readonly addView: "إضافة عرض";
151
+ readonly unsavedChanges: "تغييرات غير محفوظة";
152
+ readonly saveAsView: "حفظ كعرض";
153
+ readonly moreViews: "{{count}} المزيد";
154
+ readonly activeFilters: "الفلاتر نشطة";
155
+ readonly activeSort: "الترتيب نشط";
156
+ };
134
157
  readonly detail: {
135
158
  readonly back: "رجوع";
136
159
  readonly edit: "تحرير";
@@ -165,11 +188,137 @@ declare const ar: {
165
188
  readonly viewAll: "عرض الكل";
166
189
  readonly new: "جديد";
167
190
  readonly emptyValue: "—";
191
+ readonly comments: "التعليقات";
192
+ readonly searchComments: "البحث في التعليقات…";
193
+ readonly addCommentPlaceholder: "أضف تعليقاً… (Ctrl+Enter للإرسال)";
194
+ readonly noMatchingComments: "لا توجد تعليقات مطابقة";
195
+ readonly noCommentsYet: "لا توجد تعليقات بعد";
196
+ readonly pinned: "مثبت";
197
+ readonly pin: "تثبيت";
198
+ readonly unpin: "إلغاء التثبيت";
199
+ readonly justNow: "الآن";
200
+ readonly minutesAgo: "منذ {{count}} دقيقة";
201
+ readonly hoursAgo: "منذ {{count}} ساعة";
202
+ readonly daysAgo: "منذ {{count}} يوم";
203
+ readonly dropFilesToUpload: "اسحب الملفات هنا أو انقر للرفع";
204
+ readonly attachmentCount: "{{count}} مرفق";
205
+ readonly attachmentCountPlural: "{{count}} مرفقات";
206
+ readonly removeAttachment: "إزالة المرفق";
207
+ readonly unifiedDiff: "عرض موحد";
208
+ readonly sideBySideDiff: "عرض جنباً إلى جنب";
209
+ readonly noChanges: "لا توجد تغييرات";
210
+ readonly previousVersion: "السابق";
211
+ readonly currentVersion: "الحالي";
212
+ readonly discussion: "المناقشة";
213
+ readonly showDiscussion: "إظهار المناقشة ({{count}})";
214
+ readonly hideDiscussion: "إخفاء المناقشة";
215
+ readonly bold: "غامق (Ctrl+B)";
216
+ readonly italic: "مائل (Ctrl+I)";
217
+ readonly listFormat: "قائمة";
218
+ readonly inlineCode: "كود مضمن";
219
+ readonly mentionSomeone: "إشارة إلى شخص";
220
+ readonly preview: "معاينة";
221
+ readonly submitComment: "إرسال (Ctrl+Enter)";
222
+ readonly writeComment: "اكتب تعليقاً…";
223
+ readonly subscribedTooltip: "مشترك — انقر لإلغاء الاشتراك";
224
+ readonly unsubscribedTooltip: "الاشتراك في الإشعارات";
225
+ readonly firstRecord: "السجل الأول (Home)";
226
+ readonly previousRecordKey: "السجل السابق (←)";
227
+ readonly nextRecordKey: "السجل التالي (→)";
228
+ readonly lastRecord: "السجل الأخير (End)";
229
+ readonly noRecords: "لا توجد سجلات";
230
+ readonly searchWhileNavigating: "البحث أثناء التصفح";
231
+ readonly searchRecords: "البحث في السجلات…";
232
+ readonly allActivity: "كل النشاط";
233
+ readonly commentsOnly: "التعليقات فقط";
234
+ readonly fieldChangesFilter: "تغييرات الحقول";
235
+ readonly tasksOnly: "المهام فقط";
236
+ readonly leaveCommentPlaceholder: "اترك تعليقاً… (Ctrl+Enter للإرسال)";
237
+ readonly noActivity: "لا يوجد نشاط مسجل";
238
+ readonly loadMore: "تحميل المزيد";
239
+ readonly edited: "(معدل)";
240
+ readonly via: "عبر {{source}}";
241
+ readonly replyCount: "{{count}} رد";
242
+ readonly replyCountPlural: "{{count}} ردود";
243
+ readonly replyPlaceholder: "رد…";
244
+ readonly filterActivity: "تصفية النشاط";
245
+ readonly openDiscussion: "فتح لوحة المناقشة";
246
+ readonly closeDiscussion: "إغلاق لوحة المناقشة";
247
+ readonly subscribeAriaLabel: "الاشتراك في الإشعارات";
248
+ readonly unsubscribeAriaLabel: "إلغاء الاشتراك من الإشعارات";
249
+ readonly clearSearch: "مسح البحث";
168
250
  };
169
251
  readonly chart: {
170
252
  readonly noData: "لا تتوفر بيانات للرسم البياني";
171
253
  readonly loading: "جاري تحميل الرسم البياني...";
172
254
  };
255
+ readonly map: {
256
+ readonly searchLocations: "البحث عن المواقع…";
257
+ readonly locationDetails: "تفاصيل الموقع";
258
+ readonly markersCount: "{{count}} علامة";
259
+ readonly invalidCoordinates: "{{count}} سجل بإحداثيات مفقودة أو غير صالحة مستبعد من الخريطة.";
260
+ readonly invalidCoordinatesPlural: "{{count}} سجلات بإحداثيات مفقودة أو غير صالحة مستبعدة من الخريطة.";
261
+ };
262
+ readonly workflow: {
263
+ readonly draft: "مسودة";
264
+ readonly active: "نشط";
265
+ readonly paused: "متوقف مؤقتاً";
266
+ readonly completed: "مكتمل";
267
+ readonly cancelled: "ملغي";
268
+ readonly save: "حفظ";
269
+ readonly publish: "نشر";
270
+ readonly addNode: "إضافة عقدة";
271
+ readonly workflowFlow: "سير العمل";
272
+ readonly properties: "الخصائص";
273
+ readonly connections: "الاتصالات";
274
+ readonly quickConnect: "اتصال سريع";
275
+ readonly fromPlaceholder: "من...";
276
+ readonly toPlaceholder: "إلى...";
277
+ readonly connect: "ربط";
278
+ readonly label: "التسمية";
279
+ readonly type: "النوع";
280
+ readonly description: "الوصف";
281
+ readonly assignee: "المسؤول";
282
+ readonly assigneeType: "نوع المسؤول";
283
+ readonly user: "مستخدم";
284
+ readonly role: "دور";
285
+ readonly group: "مجموعة";
286
+ readonly expression: "تعبير";
287
+ readonly timeoutMinutes: "المهلة (دقائق)";
288
+ readonly selectNodeToEdit: "حدد عقدة لتعديل خصائصها";
289
+ readonly workflowTitle: "عنوان سير العمل";
290
+ readonly newWorkflow: "سير عمل جديد";
291
+ readonly outConnections: "{{count}} مخرج";
292
+ readonly start: "بداية";
293
+ readonly end: "نهاية";
294
+ readonly task: "مهمة";
295
+ readonly userTask: "مهمة مستخدم";
296
+ readonly serviceTask: "مهمة خدمة";
297
+ readonly scriptTask: "مهمة نصية";
298
+ readonly approval: "موافقة";
299
+ readonly condition: "شرط";
300
+ readonly parallelGateway: "بوابة متوازية";
301
+ readonly joinGateway: "بوابة دمج";
302
+ readonly boundaryEvent: "حدث حدودي";
303
+ readonly delay: "تأخير";
304
+ readonly notification: "إشعار";
305
+ readonly webhook: "Webhook";
306
+ readonly allowConcurrency: "السماح (تنفيذ متزامن)";
307
+ readonly forbidConcurrency: "منع (تخطي الجديد)";
308
+ readonly replaceConcurrency: "استبدال (إلغاء الحالي)";
309
+ readonly queueConcurrency: "طابور (تنفيذ بعد الحالي)";
310
+ readonly conditionEvent: "شرط";
311
+ readonly manualEvent: "يدوي";
312
+ readonly webhookEvent: "Webhook";
313
+ readonly timerEvent: "مؤقت";
314
+ readonly signalEvent: "إشارة";
315
+ readonly versionHistory: "تاريخ الإصدارات";
316
+ readonly importBpmn: "استيراد BPMN";
317
+ readonly exportBpmn: "تصدير BPMN";
318
+ readonly undo: "تراجع";
319
+ readonly redo: "إعادة";
320
+ readonly resetZoom: "إعادة تعيين التكبير";
321
+ };
173
322
  readonly dashboard: {
174
323
  readonly addWidget: "إضافة أداة";
175
324
  readonly removeWidget: "إزالة أداة";
@@ -323,6 +472,58 @@ declare const ar: {
323
472
  readonly modeLight: "فاتح";
324
473
  readonly modeDark: "داكن";
325
474
  readonly mobilePreview: "معاينة الجوال";
475
+ readonly objectManager: {
476
+ readonly title: "مدير الكائنات";
477
+ readonly addObject: "كائن جديد";
478
+ readonly searchPlaceholder: "بحث عن كائنات…";
479
+ readonly noObjects: "لم يتم العثور على كائنات.";
480
+ readonly objectName: "اسم API";
481
+ readonly objectLabel: "التسمية";
482
+ readonly pluralLabel: "التسمية الجمعية";
483
+ readonly icon: "الأيقونة";
484
+ readonly selectIcon: "اختيار أيقونة…";
485
+ readonly group: "المجموعة";
486
+ readonly noGroup: "بدون مجموعة";
487
+ readonly sortOrder: "ترتيب الفرز";
488
+ readonly enabled: "مفعّل";
489
+ readonly relationships: "العلاقات";
490
+ readonly systemBadge: "نظام";
491
+ readonly fieldCount: "{{count}} حقول";
492
+ readonly ungrouped: "غير مصنف";
493
+ readonly deleteConfirmTitle: "حذف الكائن؟";
494
+ readonly deleteConfirmMessage: "سيتم حذف الكائن وجميع حقوله نهائيًا. لا يمكن التراجع عن هذا الإجراء.";
495
+ };
496
+ readonly fieldDesigner: {
497
+ readonly title: "مصمم الحقول";
498
+ readonly addField: "حقل جديد";
499
+ readonly searchPlaceholder: "بحث عن حقول…";
500
+ readonly allTypes: "كل الأنواع";
501
+ readonly noFields: "لم يتم العثور على حقول.";
502
+ readonly fieldName: "اسم API";
503
+ readonly fieldLabel: "التسمية";
504
+ readonly fieldType: "النوع";
505
+ readonly fieldGroup: "المجموعة";
506
+ readonly description: "الوصف";
507
+ readonly required: "مطلوب";
508
+ readonly unique: "فريد";
509
+ readonly readOnly: "للقراءة فقط";
510
+ readonly hidden: "مخفي";
511
+ readonly indexed: "مفهرس";
512
+ readonly externalId: "معرف خارجي";
513
+ readonly trackHistory: "تتبع السجل";
514
+ readonly defaultValue: "القيمة الافتراضية";
515
+ readonly placeholder: "نص توضيحي";
516
+ readonly referenceTo: "مرجع إلى";
517
+ readonly formula: "صيغة";
518
+ readonly options: "خيارات";
519
+ readonly addOption: "إضافة خيار";
520
+ readonly validationRules: "قواعد التحقق";
521
+ readonly addRule: "إضافة قاعدة";
522
+ readonly systemBadge: "نظام";
523
+ readonly ungrouped: "عام";
524
+ readonly deleteConfirmTitle: "حذف الحقل؟";
525
+ readonly deleteConfirmMessage: "سيتم حذف الحقل نهائيًا. ستفقد البيانات الموجودة في هذا الحقل.";
526
+ };
326
527
  };
327
528
  readonly console: {
328
529
  readonly title: "وحدة تحكم ObjectStack";
@@ -338,6 +539,16 @@ declare const ar: {
338
539
  readonly loadingConfig: "جاري تحميل الإعدادات";
339
540
  readonly preparingWorkspace: "جاري تجهيز مساحة العمل";
340
541
  };
542
+ readonly error: {
543
+ readonly connectionFailed: "تعذّر الاتصال بالخادم";
544
+ readonly serverUnreachable: "الخادم {{url}} غير قابل للوصول.";
545
+ readonly checkServer: "يرجى التحقق من اتصال الشبكة أو من تشغيل الواجهة الخلفية.";
546
+ readonly timeout: "انتهت مهلة الاتصال بعد 10 ثوانٍ.";
547
+ };
548
+ readonly actions: {
549
+ readonly retry: "إعادة المحاولة";
550
+ readonly retrying: "جاري إعادة المحاولة…";
551
+ };
341
552
  readonly shortcuts: {
342
553
  readonly title: "اختصارات لوحة المفاتيح";
343
554
  readonly description: "مرجع سريع لجميع اختصارات لوحة المفاتيح المتاحة.";
@@ -408,7 +619,7 @@ declare const ar: {
408
619
  readonly generalHint: "عنوان العرض والوصف والنوع";
409
620
  readonly toolbar: "شريط الأدوات";
410
621
  readonly toolbarHint: "البحث والتصفية والفرز والتجميع ومفاتيح الكثافة";
411
- readonly toolbarEnabledCount: "{{count}} of {{total}} enabled";
622
+ readonly toolbarEnabledCount: "{{count}} من {{total}} مفعّل";
412
623
  readonly navigationSection: "التنقل";
413
624
  readonly navigationHint: "سلوك النقر على الصف وإعدادات العرض التفصيلي";
414
625
  readonly records: "السجلات";
@@ -541,5 +752,53 @@ declare const ar: {
541
752
  readonly timeout: "انتهت مهلة الطلب. يرجى المحاولة مرة أخرى.";
542
753
  readonly unknown: "حدث خطأ غير متوقع.";
543
754
  };
755
+ readonly workspace: {
756
+ readonly label: "مساحات العمل";
757
+ readonly default: "مساحة العمل الخاصة بي";
758
+ readonly switch: "تبديل مساحة العمل";
759
+ readonly create: "إنشاء مساحة عمل";
760
+ readonly createTitle: "إنشاء مساحة عمل";
761
+ readonly createDescription: "مساحة العمل هي مساحة مشتركة لفريقك للتعاون.";
762
+ readonly createButton: "إنشاء مساحة عمل";
763
+ readonly nameLabel: "اسم مساحة العمل";
764
+ readonly namePlaceholder: "مثلاً، Acme Inc";
765
+ readonly slugLabel: "معرف URL";
766
+ readonly slugHint: "يستخدم في عناوين URL. أحرف صغيرة وأرقام وشرطات فقط.";
767
+ readonly invite: "دعوة عضو";
768
+ readonly members: "الأعضاء";
769
+ readonly settings: "إعدادات مساحة العمل";
770
+ };
771
+ readonly sidebar: {
772
+ readonly settings: "الإعدادات";
773
+ readonly help: "المساعدة";
774
+ readonly helpTooltip: "المساعدة والوثائق";
775
+ readonly activityFeed: "موجز النشاط";
776
+ };
777
+ readonly home: {
778
+ readonly title: "الرئيسية";
779
+ readonly subtitle: "لوحة تحكم مساحة العمل";
780
+ readonly nav: "الرئيسية";
781
+ readonly allApps: "جميع التطبيقات";
782
+ readonly loading: "جارٍ تحميل مساحة العمل...";
783
+ readonly recent: "الأخيرة";
784
+ readonly starred: "المميزة بنجمة";
785
+ readonly welcome: "مرحباً بك في ObjectUI";
786
+ readonly welcomeDescription: "ابدأ بإنشاء تطبيقك الأول أو تكوين إعدادات النظام.";
787
+ readonly createFirstApp: "أنشئ أول تطبيق لك";
788
+ readonly systemSettings: "إعدادات النظام";
789
+ readonly quickActions: {
790
+ readonly title: "إجراءات سريعة";
791
+ readonly createApp: "إنشاء تطبيق";
792
+ readonly createAppDesc: "ابدأ بتطبيق جديد";
793
+ readonly manageObjects: "إدارة الكائنات";
794
+ readonly manageObjectsDesc: "تكوين نماذج البيانات";
795
+ readonly systemSettings: "إعدادات النظام";
796
+ readonly systemSettingsDesc: "تكوين مساحة العمل الخاصة بك";
797
+ };
798
+ readonly appCard: {
799
+ readonly noDescription: "لا يوجد وصف";
800
+ readonly default: "افتراضي";
801
+ };
802
+ };
544
803
  };
545
804
  export default ar;