@object-ui/i18n 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/.turbo/turbo-build.log +4 -0
  2. package/LICENSE +21 -0
  3. package/dist/i18n.d.ts +36 -0
  4. package/dist/i18n.js +62 -0
  5. package/dist/index.d.ts +46 -0
  6. package/dist/index.js +50 -0
  7. package/dist/locales/ar.d.ts +112 -0
  8. package/dist/locales/ar.js +112 -0
  9. package/dist/locales/de.d.ts +111 -0
  10. package/dist/locales/de.js +111 -0
  11. package/dist/locales/en.d.ts +112 -0
  12. package/dist/locales/en.js +111 -0
  13. package/dist/locales/es.d.ts +111 -0
  14. package/dist/locales/es.js +111 -0
  15. package/dist/locales/fr.d.ts +111 -0
  16. package/dist/locales/fr.js +111 -0
  17. package/dist/locales/index.d.ts +1094 -0
  18. package/dist/locales/index.js +38 -0
  19. package/dist/locales/ja.d.ts +111 -0
  20. package/dist/locales/ja.js +111 -0
  21. package/dist/locales/ko.d.ts +111 -0
  22. package/dist/locales/ko.js +111 -0
  23. package/dist/locales/pt.d.ts +111 -0
  24. package/dist/locales/pt.js +111 -0
  25. package/dist/locales/ru.d.ts +111 -0
  26. package/dist/locales/ru.js +111 -0
  27. package/dist/locales/zh.d.ts +111 -0
  28. package/dist/locales/zh.js +111 -0
  29. package/dist/provider.d.ts +65 -0
  30. package/dist/provider.js +84 -0
  31. package/dist/utils/formatting.d.ts +45 -0
  32. package/dist/utils/formatting.js +86 -0
  33. package/dist/utils/index.d.ts +1 -0
  34. package/dist/utils/index.js +1 -0
  35. package/package.json +48 -0
  36. package/src/__tests__/i18n.test.ts +228 -0
  37. package/src/i18n.ts +98 -0
  38. package/src/index.ts +63 -0
  39. package/src/locales/ar.ts +113 -0
  40. package/src/locales/de.ts +112 -0
  41. package/src/locales/en.ts +113 -0
  42. package/src/locales/es.ts +112 -0
  43. package/src/locales/fr.ts +112 -0
  44. package/src/locales/index.ts +42 -0
  45. package/src/locales/ja.ts +112 -0
  46. package/src/locales/ko.ts +112 -0
  47. package/src/locales/pt.ts +112 -0
  48. package/src/locales/ru.ts +112 -0
  49. package/src/locales/zh.ts +112 -0
  50. package/src/provider.tsx +125 -0
  51. package/src/utils/formatting.ts +136 -0
  52. package/src/utils/index.ts +10 -0
  53. package/tsconfig.json +12 -0
  54. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,4 @@
1
+
2
+ > @object-ui/i18n@0.5.0 build /home/runner/work/objectui/objectui/packages/i18n
3
+ > tsc
4
+
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 ObjectQL
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/dist/i18n.d.ts ADDED
@@ -0,0 +1,36 @@
1
+ /**
2
+ * @object-ui/i18n - Core i18n configuration and initialization
3
+ *
4
+ * Wraps i18next with Object UI defaults and built-in locale support.
5
+ */
6
+ import { type i18n as I18nInstance } from 'i18next';
7
+ import type { TranslationKeys } from './locales/en';
8
+ export interface I18nConfig {
9
+ /** Default language (default: 'en') */
10
+ defaultLanguage?: string;
11
+ /** Fallback language (default: 'en') */
12
+ fallbackLanguage?: string;
13
+ /** Additional translation resources to merge with built-in locales */
14
+ resources?: Record<string, Record<string, unknown>>;
15
+ /** Whether to detect browser language automatically (default: true) */
16
+ detectBrowserLanguage?: boolean;
17
+ /** i18next interpolation options */
18
+ interpolation?: {
19
+ escapeValue?: boolean;
20
+ prefix?: string;
21
+ suffix?: string;
22
+ };
23
+ }
24
+ /**
25
+ * Create and initialize an i18next instance with Object UI defaults
26
+ */
27
+ export declare function createI18n(config?: I18nConfig): I18nInstance;
28
+ /**
29
+ * Get the text direction for the current language
30
+ */
31
+ export declare function getDirection(lang: string): 'ltr' | 'rtl';
32
+ /**
33
+ * Get available languages from an i18n instance
34
+ */
35
+ export declare function getAvailableLanguages(instance: I18nInstance): string[];
36
+ export type { TranslationKeys };
package/dist/i18n.js ADDED
@@ -0,0 +1,62 @@
1
+ /**
2
+ * @object-ui/i18n - Core i18n configuration and initialization
3
+ *
4
+ * Wraps i18next with Object UI defaults and built-in locale support.
5
+ */
6
+ import i18next from 'i18next';
7
+ import { builtInLocales, isRTL } from './locales/index';
8
+ /**
9
+ * Create and initialize an i18next instance with Object UI defaults
10
+ */
11
+ export function createI18n(config = {}) {
12
+ const { defaultLanguage = 'en', fallbackLanguage = 'en', resources = {}, detectBrowserLanguage = true, interpolation, } = config;
13
+ // Merge built-in locales with user-provided resources
14
+ const mergedResources = {};
15
+ for (const [lang, translations] of Object.entries(builtInLocales)) {
16
+ mergedResources[lang] = {
17
+ translation: {
18
+ ...translations,
19
+ ...(resources[lang] || {}),
20
+ },
21
+ };
22
+ }
23
+ // Add any additional languages from resources not in built-in locales
24
+ for (const [lang, translations] of Object.entries(resources)) {
25
+ if (!mergedResources[lang]) {
26
+ mergedResources[lang] = { translation: translations };
27
+ }
28
+ }
29
+ // Detect browser language if enabled
30
+ let lng = defaultLanguage;
31
+ if (detectBrowserLanguage && typeof navigator !== 'undefined') {
32
+ const browserLang = navigator.language?.split('-')[0];
33
+ if (browserLang && mergedResources[browserLang]) {
34
+ lng = browserLang;
35
+ }
36
+ }
37
+ const instance = i18next.createInstance();
38
+ instance.init({
39
+ lng,
40
+ fallbackLng: fallbackLanguage,
41
+ resources: mergedResources,
42
+ interpolation: {
43
+ escapeValue: false, // React already escapes
44
+ ...interpolation,
45
+ },
46
+ returnNull: false,
47
+ });
48
+ return instance;
49
+ }
50
+ /**
51
+ * Get the text direction for the current language
52
+ */
53
+ export function getDirection(lang) {
54
+ return isRTL(lang) ? 'rtl' : 'ltr';
55
+ }
56
+ /**
57
+ * Get available languages from an i18n instance
58
+ */
59
+ export function getAvailableLanguages(instance) {
60
+ const resources = instance.options.resources;
61
+ return resources ? Object.keys(resources) : [];
62
+ }
@@ -0,0 +1,46 @@
1
+ /**
2
+ * @object-ui/i18n
3
+ *
4
+ * Internationalization (i18n) support for Object UI.
5
+ * Provides 10+ built-in language packs, RTL support, and date/currency formatting.
6
+ *
7
+ * @example
8
+ * ```tsx
9
+ * import { I18nProvider, useObjectTranslation } from '@object-ui/i18n';
10
+ *
11
+ * function App() {
12
+ * return (
13
+ * <I18nProvider config={{ defaultLanguage: 'zh' }}>
14
+ * <MyComponent />
15
+ * </I18nProvider>
16
+ * );
17
+ * }
18
+ *
19
+ * function MyComponent() {
20
+ * const { t, language, changeLanguage, direction } = useObjectTranslation();
21
+ * return (
22
+ * <div dir={direction}>
23
+ * <h1>{t('common.save')}</h1>
24
+ * <button onClick={() => changeLanguage('en')}>English</button>
25
+ * <button onClick={() => changeLanguage('zh')}>中文</button>
26
+ * </div>
27
+ * );
28
+ * }
29
+ * ```
30
+ *
31
+ * @packageDocumentation
32
+ */
33
+ export { createI18n, getDirection, getAvailableLanguages, type I18nConfig, type TranslationKeys } from './i18n';
34
+ export { I18nProvider, useObjectTranslation, useI18nContext, type I18nProviderProps } from './provider';
35
+ export { builtInLocales, isRTL, RTL_LANGUAGES } from './locales/index';
36
+ export { default as en } from './locales/en';
37
+ export { default as zh } from './locales/zh';
38
+ export { default as ja } from './locales/ja';
39
+ export { default as ko } from './locales/ko';
40
+ export { default as de } from './locales/de';
41
+ export { default as fr } from './locales/fr';
42
+ export { default as es } from './locales/es';
43
+ export { default as pt } from './locales/pt';
44
+ export { default as ru } from './locales/ru';
45
+ export { default as ar } from './locales/ar';
46
+ export { formatDate, formatDateTime, formatRelativeTime, formatCurrency, formatNumber, type DateFormatOptions, type CurrencyFormatOptions, type NumberFormatOptions, } from './utils/index';
package/dist/index.js ADDED
@@ -0,0 +1,50 @@
1
+ /**
2
+ * @object-ui/i18n
3
+ *
4
+ * Internationalization (i18n) support for Object UI.
5
+ * Provides 10+ built-in language packs, RTL support, and date/currency formatting.
6
+ *
7
+ * @example
8
+ * ```tsx
9
+ * import { I18nProvider, useObjectTranslation } from '@object-ui/i18n';
10
+ *
11
+ * function App() {
12
+ * return (
13
+ * <I18nProvider config={{ defaultLanguage: 'zh' }}>
14
+ * <MyComponent />
15
+ * </I18nProvider>
16
+ * );
17
+ * }
18
+ *
19
+ * function MyComponent() {
20
+ * const { t, language, changeLanguage, direction } = useObjectTranslation();
21
+ * return (
22
+ * <div dir={direction}>
23
+ * <h1>{t('common.save')}</h1>
24
+ * <button onClick={() => changeLanguage('en')}>English</button>
25
+ * <button onClick={() => changeLanguage('zh')}>中文</button>
26
+ * </div>
27
+ * );
28
+ * }
29
+ * ```
30
+ *
31
+ * @packageDocumentation
32
+ */
33
+ // Core i18n setup
34
+ export { createI18n, getDirection, getAvailableLanguages } from './i18n';
35
+ // React integration
36
+ export { I18nProvider, useObjectTranslation, useI18nContext } from './provider';
37
+ // Locale packs
38
+ export { builtInLocales, isRTL, RTL_LANGUAGES } from './locales/index';
39
+ export { default as en } from './locales/en';
40
+ export { default as zh } from './locales/zh';
41
+ export { default as ja } from './locales/ja';
42
+ export { default as ko } from './locales/ko';
43
+ export { default as de } from './locales/de';
44
+ export { default as fr } from './locales/fr';
45
+ export { default as es } from './locales/es';
46
+ export { default as pt } from './locales/pt';
47
+ export { default as ru } from './locales/ru';
48
+ export { default as ar } from './locales/ar';
49
+ // Formatting utilities
50
+ export { formatDate, formatDateTime, formatRelativeTime, formatCurrency, formatNumber, } from './utils/index';
@@ -0,0 +1,112 @@
1
+ /**
2
+ * العربية (ar) - Arabic language pack for Object UI
3
+ * Note: Arabic is an RTL (Right-to-Left) language
4
+ */
5
+ declare const ar: {
6
+ readonly common: {
7
+ readonly loading: "جاري التحميل...";
8
+ readonly save: "حفظ";
9
+ readonly cancel: "إلغاء";
10
+ readonly delete: "حذف";
11
+ readonly edit: "تعديل";
12
+ readonly create: "إنشاء";
13
+ readonly search: "بحث";
14
+ readonly filter: "تصفية";
15
+ readonly reset: "إعادة تعيين";
16
+ readonly confirm: "تأكيد";
17
+ readonly close: "إغلاق";
18
+ readonly back: "رجوع";
19
+ readonly next: "التالي";
20
+ readonly previous: "السابق";
21
+ readonly submit: "إرسال";
22
+ readonly refresh: "تحديث";
23
+ readonly export: "تصدير";
24
+ readonly import: "استيراد";
25
+ readonly yes: "نعم";
26
+ readonly no: "لا";
27
+ readonly ok: "موافق";
28
+ readonly actions: "إجراءات";
29
+ readonly more: "المزيد";
30
+ readonly selectAll: "تحديد الكل";
31
+ readonly clearAll: "مسح الكل";
32
+ readonly noData: "لا توجد بيانات";
33
+ readonly noResults: "لم يتم العثور على نتائج";
34
+ readonly required: "مطلوب";
35
+ readonly optional: "اختياري";
36
+ };
37
+ readonly validation: {
38
+ readonly required: "{{field}} مطلوب";
39
+ readonly minLength: "{{field}} يجب أن يكون {{min}} حرفاً على الأقل";
40
+ readonly maxLength: "{{field}} يجب ألا يتجاوز {{max}} حرفاً";
41
+ readonly min: "{{field}} يجب أن يكون {{min}} على الأقل";
42
+ readonly max: "{{field}} يجب ألا يتجاوز {{max}}";
43
+ readonly email: "يرجى إدخال بريد إلكتروني صالح";
44
+ readonly url: "يرجى إدخال رابط صالح";
45
+ readonly pattern: "صيغة {{field}} غير صالحة";
46
+ readonly unique: "{{field}} يجب أن يكون فريداً";
47
+ readonly type: "{{field}} يجب أن يكون {{type}} صالحاً";
48
+ };
49
+ readonly form: {
50
+ readonly addItem: "إضافة عنصر";
51
+ readonly removeItem: "إزالة عنصر";
52
+ readonly fieldRequired: "هذا الحقل مطلوب";
53
+ readonly invalidFormat: "صيغة غير صالحة";
54
+ readonly saveSuccess: "تم الحفظ بنجاح";
55
+ readonly saveError: "فشل في الحفظ";
56
+ readonly unsavedChanges: "لديك تغييرات غير محفوظة. هل أنت متأكد أنك تريد المغادرة؟";
57
+ readonly stepOf: "الخطوة {{current}} من {{total}}";
58
+ };
59
+ readonly table: {
60
+ readonly rowsPerPage: "صفوف في الصفحة";
61
+ readonly showing: "عرض {{from}} إلى {{to}} من {{total}}";
62
+ readonly noRows: "لا توجد صفوف للعرض";
63
+ readonly sortAsc: "ترتيب تصاعدي";
64
+ readonly sortDesc: "ترتيب تنازلي";
65
+ readonly filterColumn: "تصفية {{column}}";
66
+ readonly columns: "الأعمدة";
67
+ readonly exportCSV: "تصدير CSV";
68
+ readonly exportExcel: "تصدير Excel";
69
+ readonly selectRow: "تحديد صف";
70
+ readonly selectAllRows: "تحديد جميع الصفوف";
71
+ readonly expandRow: "توسيع الصف";
72
+ readonly collapseRow: "طي الصف";
73
+ };
74
+ readonly calendar: {
75
+ readonly today: "اليوم";
76
+ readonly month: "شهر";
77
+ readonly week: "أسبوع";
78
+ readonly day: "يوم";
79
+ readonly agenda: "جدول أعمال";
80
+ readonly allDay: "طوال اليوم";
81
+ readonly noEvents: "لا توجد أحداث";
82
+ readonly newEvent: "حدث جديد";
83
+ };
84
+ readonly kanban: {
85
+ readonly addCard: "إضافة بطاقة";
86
+ readonly addColumn: "إضافة عمود";
87
+ readonly moveCard: "نقل بطاقة";
88
+ readonly deleteCard: "حذف بطاقة";
89
+ readonly deleteColumn: "حذف عمود";
90
+ };
91
+ readonly chart: {
92
+ readonly noData: "لا تتوفر بيانات للرسم البياني";
93
+ readonly loading: "جاري تحميل الرسم البياني...";
94
+ };
95
+ readonly dashboard: {
96
+ readonly addWidget: "إضافة أداة";
97
+ readonly removeWidget: "إزالة أداة";
98
+ readonly editLayout: "تعديل التخطيط";
99
+ readonly saveLayout: "حفظ التخطيط";
100
+ readonly resetLayout: "إعادة تعيين التخطيط";
101
+ };
102
+ readonly errors: {
103
+ readonly networkError: "خطأ في الشبكة. يرجى التحقق من اتصالك.";
104
+ readonly serverError: "خطأ في الخادم. يرجى المحاولة مرة أخرى لاحقاً.";
105
+ readonly notFound: "المورد غير موجود.";
106
+ readonly unauthorized: "ليس لديك صلاحية لتنفيذ هذا الإجراء.";
107
+ readonly forbidden: "تم رفض الوصول.";
108
+ readonly timeout: "انتهت مهلة الطلب. يرجى المحاولة مرة أخرى.";
109
+ readonly unknown: "حدث خطأ غير متوقع.";
110
+ };
111
+ };
112
+ export default ar;
@@ -0,0 +1,112 @@
1
+ /**
2
+ * العربية (ar) - Arabic language pack for Object UI
3
+ * Note: Arabic is an RTL (Right-to-Left) language
4
+ */
5
+ const ar = {
6
+ common: {
7
+ loading: 'جاري التحميل...',
8
+ save: 'حفظ',
9
+ cancel: 'إلغاء',
10
+ delete: 'حذف',
11
+ edit: 'تعديل',
12
+ create: 'إنشاء',
13
+ search: 'بحث',
14
+ filter: 'تصفية',
15
+ reset: 'إعادة تعيين',
16
+ confirm: 'تأكيد',
17
+ close: 'إغلاق',
18
+ back: 'رجوع',
19
+ next: 'التالي',
20
+ previous: 'السابق',
21
+ submit: 'إرسال',
22
+ refresh: 'تحديث',
23
+ export: 'تصدير',
24
+ import: 'استيراد',
25
+ yes: 'نعم',
26
+ no: 'لا',
27
+ ok: 'موافق',
28
+ actions: 'إجراءات',
29
+ more: 'المزيد',
30
+ selectAll: 'تحديد الكل',
31
+ clearAll: 'مسح الكل',
32
+ noData: 'لا توجد بيانات',
33
+ noResults: 'لم يتم العثور على نتائج',
34
+ required: 'مطلوب',
35
+ optional: 'اختياري',
36
+ },
37
+ validation: {
38
+ required: '{{field}} مطلوب',
39
+ minLength: '{{field}} يجب أن يكون {{min}} حرفاً على الأقل',
40
+ maxLength: '{{field}} يجب ألا يتجاوز {{max}} حرفاً',
41
+ min: '{{field}} يجب أن يكون {{min}} على الأقل',
42
+ max: '{{field}} يجب ألا يتجاوز {{max}}',
43
+ email: 'يرجى إدخال بريد إلكتروني صالح',
44
+ url: 'يرجى إدخال رابط صالح',
45
+ pattern: 'صيغة {{field}} غير صالحة',
46
+ unique: '{{field}} يجب أن يكون فريداً',
47
+ type: '{{field}} يجب أن يكون {{type}} صالحاً',
48
+ },
49
+ form: {
50
+ addItem: 'إضافة عنصر',
51
+ removeItem: 'إزالة عنصر',
52
+ fieldRequired: 'هذا الحقل مطلوب',
53
+ invalidFormat: 'صيغة غير صالحة',
54
+ saveSuccess: 'تم الحفظ بنجاح',
55
+ saveError: 'فشل في الحفظ',
56
+ unsavedChanges: 'لديك تغييرات غير محفوظة. هل أنت متأكد أنك تريد المغادرة؟',
57
+ stepOf: 'الخطوة {{current}} من {{total}}',
58
+ },
59
+ table: {
60
+ rowsPerPage: 'صفوف في الصفحة',
61
+ showing: 'عرض {{from}} إلى {{to}} من {{total}}',
62
+ noRows: 'لا توجد صفوف للعرض',
63
+ sortAsc: 'ترتيب تصاعدي',
64
+ sortDesc: 'ترتيب تنازلي',
65
+ filterColumn: 'تصفية {{column}}',
66
+ columns: 'الأعمدة',
67
+ exportCSV: 'تصدير CSV',
68
+ exportExcel: 'تصدير Excel',
69
+ selectRow: 'تحديد صف',
70
+ selectAllRows: 'تحديد جميع الصفوف',
71
+ expandRow: 'توسيع الصف',
72
+ collapseRow: 'طي الصف',
73
+ },
74
+ calendar: {
75
+ today: 'اليوم',
76
+ month: 'شهر',
77
+ week: 'أسبوع',
78
+ day: 'يوم',
79
+ agenda: 'جدول أعمال',
80
+ allDay: 'طوال اليوم',
81
+ noEvents: 'لا توجد أحداث',
82
+ newEvent: 'حدث جديد',
83
+ },
84
+ kanban: {
85
+ addCard: 'إضافة بطاقة',
86
+ addColumn: 'إضافة عمود',
87
+ moveCard: 'نقل بطاقة',
88
+ deleteCard: 'حذف بطاقة',
89
+ deleteColumn: 'حذف عمود',
90
+ },
91
+ chart: {
92
+ noData: 'لا تتوفر بيانات للرسم البياني',
93
+ loading: 'جاري تحميل الرسم البياني...',
94
+ },
95
+ dashboard: {
96
+ addWidget: 'إضافة أداة',
97
+ removeWidget: 'إزالة أداة',
98
+ editLayout: 'تعديل التخطيط',
99
+ saveLayout: 'حفظ التخطيط',
100
+ resetLayout: 'إعادة تعيين التخطيط',
101
+ },
102
+ errors: {
103
+ networkError: 'خطأ في الشبكة. يرجى التحقق من اتصالك.',
104
+ serverError: 'خطأ في الخادم. يرجى المحاولة مرة أخرى لاحقاً.',
105
+ notFound: 'المورد غير موجود.',
106
+ unauthorized: 'ليس لديك صلاحية لتنفيذ هذا الإجراء.',
107
+ forbidden: 'تم رفض الوصول.',
108
+ timeout: 'انتهت مهلة الطلب. يرجى المحاولة مرة أخرى.',
109
+ unknown: 'حدث خطأ غير متوقع.',
110
+ },
111
+ };
112
+ export default ar;
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Deutsch (de) - German language pack for Object UI
3
+ */
4
+ declare const de: {
5
+ readonly common: {
6
+ readonly loading: "Wird geladen...";
7
+ readonly save: "Speichern";
8
+ readonly cancel: "Abbrechen";
9
+ readonly delete: "Löschen";
10
+ readonly edit: "Bearbeiten";
11
+ readonly create: "Erstellen";
12
+ readonly search: "Suchen";
13
+ readonly filter: "Filtern";
14
+ readonly reset: "Zurücksetzen";
15
+ readonly confirm: "Bestätigen";
16
+ readonly close: "Schließen";
17
+ readonly back: "Zurück";
18
+ readonly next: "Weiter";
19
+ readonly previous: "Zurück";
20
+ readonly submit: "Absenden";
21
+ readonly refresh: "Aktualisieren";
22
+ readonly export: "Exportieren";
23
+ readonly import: "Importieren";
24
+ readonly yes: "Ja";
25
+ readonly no: "Nein";
26
+ readonly ok: "OK";
27
+ readonly actions: "Aktionen";
28
+ readonly more: "Mehr";
29
+ readonly selectAll: "Alle auswählen";
30
+ readonly clearAll: "Alle löschen";
31
+ readonly noData: "Keine Daten";
32
+ readonly noResults: "Keine Ergebnisse gefunden";
33
+ readonly required: "Erforderlich";
34
+ readonly optional: "Optional";
35
+ };
36
+ readonly validation: {
37
+ readonly required: "{{field}} ist erforderlich";
38
+ readonly minLength: "{{field}} muss mindestens {{min}} Zeichen lang sein";
39
+ readonly maxLength: "{{field}} darf höchstens {{max}} Zeichen lang sein";
40
+ readonly min: "{{field}} muss mindestens {{min}} sein";
41
+ readonly max: "{{field}} darf höchstens {{max}} sein";
42
+ readonly email: "Bitte geben Sie eine gültige E-Mail-Adresse ein";
43
+ readonly url: "Bitte geben Sie eine gültige URL ein";
44
+ readonly pattern: "{{field}} hat ein ungültiges Format";
45
+ readonly unique: "{{field}} muss eindeutig sein";
46
+ readonly type: "{{field}} muss ein gültiger {{type}} sein";
47
+ };
48
+ readonly form: {
49
+ readonly addItem: "Element hinzufügen";
50
+ readonly removeItem: "Element entfernen";
51
+ readonly fieldRequired: "Dieses Feld ist erforderlich";
52
+ readonly invalidFormat: "Ungültiges Format";
53
+ readonly saveSuccess: "Erfolgreich gespeichert";
54
+ readonly saveError: "Speichern fehlgeschlagen";
55
+ readonly unsavedChanges: "Sie haben nicht gespeicherte Änderungen. Möchten Sie die Seite wirklich verlassen?";
56
+ readonly stepOf: "Schritt {{current}} von {{total}}";
57
+ };
58
+ readonly table: {
59
+ readonly rowsPerPage: "Zeilen pro Seite";
60
+ readonly showing: "{{from}} bis {{to}} von {{total}} angezeigt";
61
+ readonly noRows: "Keine Zeilen vorhanden";
62
+ readonly sortAsc: "Aufsteigend sortieren";
63
+ readonly sortDesc: "Absteigend sortieren";
64
+ readonly filterColumn: "{{column}} filtern";
65
+ readonly columns: "Spalten";
66
+ readonly exportCSV: "CSV exportieren";
67
+ readonly exportExcel: "Excel exportieren";
68
+ readonly selectRow: "Zeile auswählen";
69
+ readonly selectAllRows: "Alle Zeilen auswählen";
70
+ readonly expandRow: "Zeile erweitern";
71
+ readonly collapseRow: "Zeile reduzieren";
72
+ };
73
+ readonly calendar: {
74
+ readonly today: "Heute";
75
+ readonly month: "Monat";
76
+ readonly week: "Woche";
77
+ readonly day: "Tag";
78
+ readonly agenda: "Agenda";
79
+ readonly allDay: "Ganztägig";
80
+ readonly noEvents: "Keine Termine";
81
+ readonly newEvent: "Neuer Termin";
82
+ };
83
+ readonly kanban: {
84
+ readonly addCard: "Karte hinzufügen";
85
+ readonly addColumn: "Spalte hinzufügen";
86
+ readonly moveCard: "Karte verschieben";
87
+ readonly deleteCard: "Karte löschen";
88
+ readonly deleteColumn: "Spalte löschen";
89
+ };
90
+ readonly chart: {
91
+ readonly noData: "Keine Diagrammdaten verfügbar";
92
+ readonly loading: "Diagramm wird geladen...";
93
+ };
94
+ readonly dashboard: {
95
+ readonly addWidget: "Widget hinzufügen";
96
+ readonly removeWidget: "Widget entfernen";
97
+ readonly editLayout: "Layout bearbeiten";
98
+ readonly saveLayout: "Layout speichern";
99
+ readonly resetLayout: "Layout zurücksetzen";
100
+ };
101
+ readonly errors: {
102
+ readonly networkError: "Netzwerkfehler. Bitte überprüfen Sie Ihre Verbindung.";
103
+ readonly serverError: "Serverfehler. Bitte versuchen Sie es später erneut.";
104
+ readonly notFound: "Ressource nicht gefunden.";
105
+ readonly unauthorized: "Sie sind nicht berechtigt, diese Aktion auszuführen.";
106
+ readonly forbidden: "Zugriff verweigert.";
107
+ readonly timeout: "Zeitüberschreitung. Bitte versuchen Sie es erneut.";
108
+ readonly unknown: "Ein unerwarteter Fehler ist aufgetreten.";
109
+ };
110
+ };
111
+ export default de;
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Deutsch (de) - German language pack for Object UI
3
+ */
4
+ const de = {
5
+ common: {
6
+ loading: 'Wird geladen...',
7
+ save: 'Speichern',
8
+ cancel: 'Abbrechen',
9
+ delete: 'Löschen',
10
+ edit: 'Bearbeiten',
11
+ create: 'Erstellen',
12
+ search: 'Suchen',
13
+ filter: 'Filtern',
14
+ reset: 'Zurücksetzen',
15
+ confirm: 'Bestätigen',
16
+ close: 'Schließen',
17
+ back: 'Zurück',
18
+ next: 'Weiter',
19
+ previous: 'Zurück',
20
+ submit: 'Absenden',
21
+ refresh: 'Aktualisieren',
22
+ export: 'Exportieren',
23
+ import: 'Importieren',
24
+ yes: 'Ja',
25
+ no: 'Nein',
26
+ ok: 'OK',
27
+ actions: 'Aktionen',
28
+ more: 'Mehr',
29
+ selectAll: 'Alle auswählen',
30
+ clearAll: 'Alle löschen',
31
+ noData: 'Keine Daten',
32
+ noResults: 'Keine Ergebnisse gefunden',
33
+ required: 'Erforderlich',
34
+ optional: 'Optional',
35
+ },
36
+ validation: {
37
+ required: '{{field}} ist erforderlich',
38
+ minLength: '{{field}} muss mindestens {{min}} Zeichen lang sein',
39
+ maxLength: '{{field}} darf höchstens {{max}} Zeichen lang sein',
40
+ min: '{{field}} muss mindestens {{min}} sein',
41
+ max: '{{field}} darf höchstens {{max}} sein',
42
+ email: 'Bitte geben Sie eine gültige E-Mail-Adresse ein',
43
+ url: 'Bitte geben Sie eine gültige URL ein',
44
+ pattern: '{{field}} hat ein ungültiges Format',
45
+ unique: '{{field}} muss eindeutig sein',
46
+ type: '{{field}} muss ein gültiger {{type}} sein',
47
+ },
48
+ form: {
49
+ addItem: 'Element hinzufügen',
50
+ removeItem: 'Element entfernen',
51
+ fieldRequired: 'Dieses Feld ist erforderlich',
52
+ invalidFormat: 'Ungültiges Format',
53
+ saveSuccess: 'Erfolgreich gespeichert',
54
+ saveError: 'Speichern fehlgeschlagen',
55
+ unsavedChanges: 'Sie haben nicht gespeicherte Änderungen. Möchten Sie die Seite wirklich verlassen?',
56
+ stepOf: 'Schritt {{current}} von {{total}}',
57
+ },
58
+ table: {
59
+ rowsPerPage: 'Zeilen pro Seite',
60
+ showing: '{{from}} bis {{to}} von {{total}} angezeigt',
61
+ noRows: 'Keine Zeilen vorhanden',
62
+ sortAsc: 'Aufsteigend sortieren',
63
+ sortDesc: 'Absteigend sortieren',
64
+ filterColumn: '{{column}} filtern',
65
+ columns: 'Spalten',
66
+ exportCSV: 'CSV exportieren',
67
+ exportExcel: 'Excel exportieren',
68
+ selectRow: 'Zeile auswählen',
69
+ selectAllRows: 'Alle Zeilen auswählen',
70
+ expandRow: 'Zeile erweitern',
71
+ collapseRow: 'Zeile reduzieren',
72
+ },
73
+ calendar: {
74
+ today: 'Heute',
75
+ month: 'Monat',
76
+ week: 'Woche',
77
+ day: 'Tag',
78
+ agenda: 'Agenda',
79
+ allDay: 'Ganztägig',
80
+ noEvents: 'Keine Termine',
81
+ newEvent: 'Neuer Termin',
82
+ },
83
+ kanban: {
84
+ addCard: 'Karte hinzufügen',
85
+ addColumn: 'Spalte hinzufügen',
86
+ moveCard: 'Karte verschieben',
87
+ deleteCard: 'Karte löschen',
88
+ deleteColumn: 'Spalte löschen',
89
+ },
90
+ chart: {
91
+ noData: 'Keine Diagrammdaten verfügbar',
92
+ loading: 'Diagramm wird geladen...',
93
+ },
94
+ dashboard: {
95
+ addWidget: 'Widget hinzufügen',
96
+ removeWidget: 'Widget entfernen',
97
+ editLayout: 'Layout bearbeiten',
98
+ saveLayout: 'Layout speichern',
99
+ resetLayout: 'Layout zurücksetzen',
100
+ },
101
+ errors: {
102
+ networkError: 'Netzwerkfehler. Bitte überprüfen Sie Ihre Verbindung.',
103
+ serverError: 'Serverfehler. Bitte versuchen Sie es später erneut.',
104
+ notFound: 'Ressource nicht gefunden.',
105
+ unauthorized: 'Sie sind nicht berechtigt, diese Aktion auszuführen.',
106
+ forbidden: 'Zugriff verweigert.',
107
+ timeout: 'Zeitüberschreitung. Bitte versuchen Sie es erneut.',
108
+ unknown: 'Ein unerwarteter Fehler ist aufgetreten.',
109
+ },
110
+ };
111
+ export default de;