@object-ui/i18n 4.0.6 → 4.0.8

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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,67 @@
1
1
  # @object-ui/i18n
2
2
 
3
+ ## 4.0.8
4
+
5
+ ### Patch Changes
6
+
7
+ - 3d58eaa: fix(auth,app-shell): hide Log out menu item when auth is disabled (guest/preview mode)
8
+
9
+ When the console runs against a server with `discovery.services.auth.enabled === false`
10
+ (or in preview mode), `AuthProvider` hardcodes `isAuthenticated: true` and the mock
11
+ `signOut()` has no real backend. Previously, clicking "Log out" in the user menu had
12
+ no visible effect — the user/session were nulled but the UI stayed authenticated.
13
+
14
+ Changes:
15
+ - **`@object-ui/auth`** — added `isAuthEnabled: boolean` to `AuthContextValue`
16
+ (`true` only when real auth is in use, `false` for guest/preview modes).
17
+ - **`@object-ui/app-shell`** — `AppHeader` and `AppSidebar` now hide the "Log out"
18
+ menu item entirely when `!isAuthEnabled`, so users aren't presented with an action
19
+ that can't actually do anything. Also fixed two missed i18n strings in
20
+ `AppSidebar` ("Settings", "Log out").
21
+ - **`@object-ui/i18n`** — added `user.{profile,settings,logout}` namespace to all
22
+ 10 built-in locales (en/zh translated; ja/ko/de/fr/es/pt/ru/ar fall back to
23
+ English pending native translation).
24
+
25
+ ## 4.0.7
26
+
27
+ ### Patch Changes
28
+
29
+ - fd15918: Comprehensive i18n refactor + CI test fix.
30
+
31
+ **i18n (`@object-ui/i18n`)**
32
+ - Added ~130 new keys under 12 new top-level namespaces: `layout`, `search`,
33
+ `empty`, `renderer`, `actionDialog`, `rowAction`, `navigationSync`,
34
+ `objectActions`, `objectViewActions`, `dashboardActions`, `recordDetail`,
35
+ `cellRender`, plus `grid.{empty,yes,no,systemFields,openMenu}`.
36
+ - Mirrored all new top-level namespaces to all 10 built-in locales
37
+ (en, zh, ja, ko, de, fr, es, pt, ru, ar) to maintain key parity required
38
+ by the locale-structure test. Non-en/zh locales seed with English values
39
+ and rely on `fallbackLng: 'en'` until human translation lands.
40
+
41
+ **App shell (`@object-ui/app-shell`)** — replaced hardcoded English in 14
42
+ files with `useObjectTranslation`:
43
+ - Layout: `AppSidebar`, `ActivityFeed` (locale-aware relative time),
44
+ `MetadataInspector`.
45
+ - Views: `SearchResultsPage`, `ActionParamDialog`, `RecordFormPage`,
46
+ `RecordDetailView`, `PageView`, `DashboardView` (PDF / forecast toasts),
47
+ `ReportView`, `ObjectView` (rename / delete view toasts).
48
+ - Console: `AppContent` (no-apps empty state).
49
+ - Components: `PageRenderer`, `FormRenderer`, `DashboardRenderer`.
50
+ - Hooks: `useNavigationSync` (16 toasts incl. Undo label),
51
+ `useObjectActions` (delete confirm + success / failure toasts).
52
+
53
+ **Plugin grid (`@object-ui/plugin-grid`)**
54
+ - `ObjectGrid` record-detail panel now translates Empty / Yes / No / System
55
+ via the existing `useGridTranslation` safe-fallback wrapper.
56
+ - `RowActionMenu` adopts a local safe-fallback i18n wrapper for
57
+ `Open menu` / `Edit` / `Delete`, preserving standalone-usage guarantees.
58
+
59
+ **CLI test fix (`@object-ui/cli`)**
60
+ - `cli-bin.test.ts` auto-builds the package on first run when `dist/cli.js`
61
+ is missing, instead of throwing. This unbreaks `pnpm test:coverage` in CI
62
+ (root vitest run does not honor turbo's `^build` deps) and removes the
63
+ manual `pnpm --filter @object-ui/cli build` requirement for local dev.
64
+
3
65
  ## 4.0.6
4
66
 
5
67
  ## 4.0.5
@@ -35,6 +35,9 @@ declare const ar: {
35
35
  readonly optional: "اختياري";
36
36
  readonly selectOption: "اختر خياراً";
37
37
  readonly select: "اختر...";
38
+ readonly openChat: "فتح المحادثة";
39
+ readonly closeChat: "إغلاق المحادثة";
40
+ readonly toggleSidebar: "تبديل الشريط الجانبي";
38
41
  };
39
42
  readonly validation: {
40
43
  readonly required: "{{field}} مطلوب";
@@ -138,6 +141,18 @@ declare const ar: {
138
141
  readonly deleteCard: "حذف بطاقة";
139
142
  readonly deleteColumn: "حذف عمود";
140
143
  };
144
+ readonly timeline: {
145
+ readonly bucket: {
146
+ readonly overdue: "متأخر";
147
+ readonly today: "اليوم";
148
+ readonly tomorrow: "غداً";
149
+ readonly thisWeek: "هذا الأسبوع";
150
+ readonly nextWeek: "الأسبوع القادم";
151
+ readonly later: "لاحقاً";
152
+ readonly noDate: "بدون تاريخ";
153
+ readonly unassigned: "غير معين";
154
+ };
155
+ };
141
156
  readonly view: {
142
157
  readonly rename: "إعادة تسمية";
143
158
  readonly duplicateView: "تكرار العرض";
@@ -157,10 +172,10 @@ declare const ar: {
157
172
  readonly detail: {
158
173
  readonly back: "رجوع";
159
174
  readonly edit: "تحرير";
160
- readonly editInline: "تحرير مباشر";
175
+ readonly editInline: "تحرير";
161
176
  readonly save: "حفظ";
162
177
  readonly saveChanges: "حفظ التغييرات";
163
- readonly editFieldsInline: "تحرير الحقول مباشرة";
178
+ readonly editFieldsInline: "تحرير الحقول";
164
179
  readonly share: "مشاركة";
165
180
  readonly duplicate: "نسخ";
166
181
  readonly export: "تصدير";
@@ -800,5 +815,142 @@ declare const ar: {
800
815
  readonly default: "افتراضي";
801
816
  };
802
817
  };
818
+ readonly layout: {
819
+ readonly appSwitcher: {
820
+ readonly home: "Home";
821
+ readonly addApp: "Add App";
822
+ readonly editApp: "Edit App";
823
+ readonly manageAllApps: "Manage All Apps";
824
+ readonly systemConsole: "System Console";
825
+ readonly noAppsConfigured: "No apps configured";
826
+ };
827
+ readonly activityFeed: {
828
+ readonly title: "Recent Activity";
829
+ readonly filter: "Filter";
830
+ readonly empty: "No recent activity";
831
+ readonly ariaLabel: "Activity feed";
832
+ readonly typeCreate: "Create";
833
+ readonly typeUpdate: "Update";
834
+ readonly typeDelete: "Delete";
835
+ readonly typeComment: "Comment";
836
+ readonly relativeJustNow: "just now";
837
+ readonly relativeSecondsAgo: "{{count}}s ago";
838
+ readonly relativeMinutesAgo: "{{count}}m ago";
839
+ readonly relativeHoursAgo: "{{count}}h ago";
840
+ readonly relativeDaysAgo: "{{count}}d ago";
841
+ };
842
+ readonly metadata: {
843
+ readonly label: "Metadata";
844
+ readonly toggleTitle: "Toggle Metadata Inspector";
845
+ readonly panelTitle: "Metadata Inspector";
846
+ readonly jsonBadge: "JSON";
847
+ readonly copyJson: "Copy JSON";
848
+ };
849
+ };
850
+ readonly search: {
851
+ readonly title: "Search";
852
+ readonly back: "Back";
853
+ readonly placeholder: "Search objects, dashboards, pages, reports...";
854
+ readonly inputAriaLabel: "Search objects, dashboards, pages, reports";
855
+ readonly resultsCount: "{{count}} result for \"{{query}}\"";
856
+ readonly resultsCountPlural: "{{count}} results for \"{{query}}\"";
857
+ readonly itemsAvailable: "{{count}} items available";
858
+ readonly noResults: "No results found";
859
+ readonly noResultsHint: "Try adjusting your search terms";
860
+ readonly typeObjects: "Objects";
861
+ readonly typeDashboards: "Dashboards";
862
+ readonly typePages: "Pages";
863
+ readonly typeReports: "Reports";
864
+ readonly badgeObject: "object";
865
+ readonly badgeDashboard: "dashboard";
866
+ readonly badgePage: "page";
867
+ readonly badgeReport: "report";
868
+ };
869
+ readonly empty: {
870
+ readonly objectNotFound: "Object Not Found";
871
+ readonly objectNotFoundDescription: "Object \"{{name}}\" definition missing. Check your configuration or navigate back to select a valid object.";
872
+ readonly pageNotFound: "Page Not Found";
873
+ readonly pageNotFoundDescription: "The page \"{{name}}\" could not be found. It may have been removed or renamed.";
874
+ readonly dashboardNotFound: "Dashboard Not Found";
875
+ readonly dashboardNotFoundDescription: "The dashboard \"{{name}}\" could not be found. It may have been removed or renamed.";
876
+ readonly reportNotFound: "Report Not Found";
877
+ readonly reportNotFoundDescription: "The report \"{{name}}\" could not be found. It may have been removed or renamed.";
878
+ readonly noAppsConfigured: "No Apps Configured";
879
+ readonly noAppsConfiguredDescription: "No applications have been registered. Create your first app or visit System Settings to configure your environment.";
880
+ readonly createFirstApp: "Create Your First App";
881
+ readonly systemSettings: "System Settings";
882
+ readonly back: "Back";
883
+ };
884
+ readonly renderer: {
885
+ readonly noPageSchema: "No page schema provided";
886
+ readonly noFormSchema: "No form schema provided";
887
+ readonly noDashboardSchema: "No dashboard schema provided";
888
+ readonly pageRendering: "Page rendering: {{name}}";
889
+ readonly dashboardRendering: "Dashboard rendering: {{name}}";
890
+ readonly formRenderingMode: "Form rendering in {{mode}} mode";
891
+ readonly formRenderingFor: "for record {{id}}";
892
+ readonly createRecord: "Create Record";
893
+ readonly editRecord: "Edit Record";
894
+ readonly page: "Page";
895
+ readonly dashboard: "Dashboard";
896
+ readonly save: "Save";
897
+ readonly cancel: "Cancel";
898
+ };
899
+ readonly actionDialog: {
900
+ readonly title: "Action Parameters";
901
+ readonly description: "Please provide the required information to continue.";
902
+ readonly selectPlaceholder: "Select {{label}}";
903
+ readonly requiredError: "{{label}} is required";
904
+ readonly cancel: "Cancel";
905
+ readonly confirm: "Confirm";
906
+ readonly defaultActionTitle: "Action";
907
+ readonly ok: "OK";
908
+ };
909
+ readonly rowAction: {
910
+ readonly openMenu: "Open menu";
911
+ readonly edit: "Edit";
912
+ readonly delete: "Delete";
913
+ };
914
+ readonly navigationSync: {
915
+ readonly addedPage: "Navigation updated: added page \"{{name}}\"";
916
+ readonly addedDashboard: "Navigation updated: added dashboard \"{{name}}\"";
917
+ readonly removedPage: "Navigation updated: removed page \"{{name}}\"";
918
+ readonly removedDashboard: "Navigation updated: removed dashboard \"{{name}}\"";
919
+ readonly renamedPage: "Navigation updated: renamed page \"{{oldName}}\" → \"{{newName}}\"";
920
+ readonly renamedDashboard: "Navigation updated: renamed dashboard \"{{oldName}}\" → \"{{newName}}\"";
921
+ readonly undoLabel: "Undo";
922
+ readonly undone: "Navigation change undone";
923
+ readonly undoFailed: "Failed to undo navigation change";
924
+ readonly updateFailed: "Failed to update navigation";
925
+ };
926
+ readonly objectActions: {
927
+ readonly deleteSuccess: "{{label}} deleted successfully";
928
+ readonly deleteFailed: "Failed to delete {{label}}";
929
+ readonly noRecordId: "No record ID provided";
930
+ readonly deleteConfirm: "Are you sure you want to delete this record?";
931
+ };
932
+ readonly objectViewActions: {
933
+ readonly renameFailed: "Failed to rename view";
934
+ readonly deleteFailed: "Failed to delete view";
935
+ };
936
+ readonly dashboardActions: {
937
+ readonly pdfPreparing: "Preparing PDF export…";
938
+ readonly exportFailed: "Export failed: {{message}}";
939
+ readonly forecastSoon: "Forecast view coming soon";
940
+ };
941
+ readonly recordDetail: {
942
+ readonly viewersTooltip: "Users viewing this record";
943
+ };
944
+ readonly cellRender: {
945
+ readonly empty: "Empty";
946
+ readonly yes: "Yes";
947
+ readonly no: "No";
948
+ readonly systemFields: "System";
949
+ };
950
+ readonly user: {
951
+ readonly profile: "Profile";
952
+ readonly settings: "Settings";
953
+ readonly logout: "Log out";
954
+ };
803
955
  };
804
956
  export default ar;
@@ -35,6 +35,9 @@ const ar = {
35
35
  optional: 'اختياري',
36
36
  selectOption: 'اختر خياراً',
37
37
  select: 'اختر...',
38
+ openChat: 'فتح المحادثة',
39
+ closeChat: 'إغلاق المحادثة',
40
+ toggleSidebar: 'تبديل الشريط الجانبي',
38
41
  },
39
42
  validation: {
40
43
  required: '{{field}} مطلوب',
@@ -138,6 +141,18 @@ const ar = {
138
141
  deleteCard: 'حذف بطاقة',
139
142
  deleteColumn: 'حذف عمود',
140
143
  },
144
+ timeline: {
145
+ bucket: {
146
+ overdue: 'متأخر',
147
+ today: 'اليوم',
148
+ tomorrow: 'غداً',
149
+ thisWeek: 'هذا الأسبوع',
150
+ nextWeek: 'الأسبوع القادم',
151
+ later: 'لاحقاً',
152
+ noDate: 'بدون تاريخ',
153
+ unassigned: 'غير معين',
154
+ },
155
+ },
141
156
  view: {
142
157
  rename: 'إعادة تسمية',
143
158
  duplicateView: 'تكرار العرض',
@@ -157,10 +172,10 @@ const ar = {
157
172
  detail: {
158
173
  back: 'رجوع',
159
174
  edit: 'تحرير',
160
- editInline: 'تحرير مباشر',
175
+ editInline: 'تحرير',
161
176
  save: 'حفظ',
162
177
  saveChanges: 'حفظ التغييرات',
163
- editFieldsInline: 'تحرير الحقول مباشرة',
178
+ editFieldsInline: 'تحرير الحقول',
164
179
  share: 'مشاركة',
165
180
  duplicate: 'نسخ',
166
181
  export: 'تصدير',
@@ -795,5 +810,142 @@ const ar = {
795
810
  default: 'افتراضي',
796
811
  },
797
812
  },
813
+ layout: {
814
+ appSwitcher: {
815
+ home: 'Home',
816
+ addApp: 'Add App',
817
+ editApp: 'Edit App',
818
+ manageAllApps: 'Manage All Apps',
819
+ systemConsole: 'System Console',
820
+ noAppsConfigured: 'No apps configured',
821
+ },
822
+ activityFeed: {
823
+ title: 'Recent Activity',
824
+ filter: 'Filter',
825
+ empty: 'No recent activity',
826
+ ariaLabel: 'Activity feed',
827
+ typeCreate: 'Create',
828
+ typeUpdate: 'Update',
829
+ typeDelete: 'Delete',
830
+ typeComment: 'Comment',
831
+ relativeJustNow: 'just now',
832
+ relativeSecondsAgo: '{{count}}s ago',
833
+ relativeMinutesAgo: '{{count}}m ago',
834
+ relativeHoursAgo: '{{count}}h ago',
835
+ relativeDaysAgo: '{{count}}d ago',
836
+ },
837
+ metadata: {
838
+ label: 'Metadata',
839
+ toggleTitle: 'Toggle Metadata Inspector',
840
+ panelTitle: 'Metadata Inspector',
841
+ jsonBadge: 'JSON',
842
+ copyJson: 'Copy JSON',
843
+ },
844
+ },
845
+ search: {
846
+ title: 'Search',
847
+ back: 'Back',
848
+ placeholder: 'Search objects, dashboards, pages, reports...',
849
+ inputAriaLabel: 'Search objects, dashboards, pages, reports',
850
+ resultsCount: '{{count}} result for "{{query}}"',
851
+ resultsCountPlural: '{{count}} results for "{{query}}"',
852
+ itemsAvailable: '{{count}} items available',
853
+ noResults: 'No results found',
854
+ noResultsHint: 'Try adjusting your search terms',
855
+ typeObjects: 'Objects',
856
+ typeDashboards: 'Dashboards',
857
+ typePages: 'Pages',
858
+ typeReports: 'Reports',
859
+ badgeObject: 'object',
860
+ badgeDashboard: 'dashboard',
861
+ badgePage: 'page',
862
+ badgeReport: 'report',
863
+ },
864
+ empty: {
865
+ objectNotFound: 'Object Not Found',
866
+ objectNotFoundDescription: 'Object "{{name}}" definition missing. Check your configuration or navigate back to select a valid object.',
867
+ pageNotFound: 'Page Not Found',
868
+ pageNotFoundDescription: 'The page "{{name}}" could not be found. It may have been removed or renamed.',
869
+ dashboardNotFound: 'Dashboard Not Found',
870
+ dashboardNotFoundDescription: 'The dashboard "{{name}}" could not be found. It may have been removed or renamed.',
871
+ reportNotFound: 'Report Not Found',
872
+ reportNotFoundDescription: 'The report "{{name}}" could not be found. It may have been removed or renamed.',
873
+ noAppsConfigured: 'No Apps Configured',
874
+ noAppsConfiguredDescription: 'No applications have been registered. Create your first app or visit System Settings to configure your environment.',
875
+ createFirstApp: 'Create Your First App',
876
+ systemSettings: 'System Settings',
877
+ back: 'Back',
878
+ },
879
+ renderer: {
880
+ noPageSchema: 'No page schema provided',
881
+ noFormSchema: 'No form schema provided',
882
+ noDashboardSchema: 'No dashboard schema provided',
883
+ pageRendering: 'Page rendering: {{name}}',
884
+ dashboardRendering: 'Dashboard rendering: {{name}}',
885
+ formRenderingMode: 'Form rendering in {{mode}} mode',
886
+ formRenderingFor: 'for record {{id}}',
887
+ createRecord: 'Create Record',
888
+ editRecord: 'Edit Record',
889
+ page: 'Page',
890
+ dashboard: 'Dashboard',
891
+ save: 'Save',
892
+ cancel: 'Cancel',
893
+ },
894
+ actionDialog: {
895
+ title: 'Action Parameters',
896
+ description: 'Please provide the required information to continue.',
897
+ selectPlaceholder: 'Select {{label}}',
898
+ requiredError: '{{label}} is required',
899
+ cancel: 'Cancel',
900
+ confirm: 'Confirm',
901
+ defaultActionTitle: 'Action',
902
+ ok: 'OK',
903
+ },
904
+ rowAction: {
905
+ openMenu: 'Open menu',
906
+ edit: 'Edit',
907
+ delete: 'Delete',
908
+ },
909
+ navigationSync: {
910
+ addedPage: 'Navigation updated: added page "{{name}}"',
911
+ addedDashboard: 'Navigation updated: added dashboard "{{name}}"',
912
+ removedPage: 'Navigation updated: removed page "{{name}}"',
913
+ removedDashboard: 'Navigation updated: removed dashboard "{{name}}"',
914
+ renamedPage: 'Navigation updated: renamed page "{{oldName}}" → "{{newName}}"',
915
+ renamedDashboard: 'Navigation updated: renamed dashboard "{{oldName}}" → "{{newName}}"',
916
+ undoLabel: 'Undo',
917
+ undone: 'Navigation change undone',
918
+ undoFailed: 'Failed to undo navigation change',
919
+ updateFailed: 'Failed to update navigation',
920
+ },
921
+ objectActions: {
922
+ deleteSuccess: '{{label}} deleted successfully',
923
+ deleteFailed: 'Failed to delete {{label}}',
924
+ noRecordId: 'No record ID provided',
925
+ deleteConfirm: 'Are you sure you want to delete this record?',
926
+ },
927
+ objectViewActions: {
928
+ renameFailed: 'Failed to rename view',
929
+ deleteFailed: 'Failed to delete view',
930
+ },
931
+ dashboardActions: {
932
+ pdfPreparing: 'Preparing PDF export…',
933
+ exportFailed: 'Export failed: {{message}}',
934
+ forecastSoon: 'Forecast view coming soon',
935
+ },
936
+ recordDetail: {
937
+ viewersTooltip: 'Users viewing this record',
938
+ },
939
+ cellRender: {
940
+ empty: 'Empty',
941
+ yes: 'Yes',
942
+ no: 'No',
943
+ systemFields: 'System',
944
+ },
945
+ user: {
946
+ profile: 'Profile',
947
+ settings: 'Settings',
948
+ logout: 'Log out',
949
+ },
798
950
  };
799
951
  export default ar;
@@ -34,6 +34,9 @@ declare const de: {
34
34
  readonly optional: "Optional";
35
35
  readonly selectOption: "Option auswählen";
36
36
  readonly select: "Auswählen...";
37
+ readonly openChat: "Chat öffnen";
38
+ readonly closeChat: "Chat schließen";
39
+ readonly toggleSidebar: "Seitenleiste umschalten";
37
40
  };
38
41
  readonly validation: {
39
42
  readonly required: "{{field}} ist erforderlich";
@@ -137,6 +140,18 @@ declare const de: {
137
140
  readonly deleteCard: "Karte löschen";
138
141
  readonly deleteColumn: "Spalte löschen";
139
142
  };
143
+ readonly timeline: {
144
+ readonly bucket: {
145
+ readonly overdue: "Überfällig";
146
+ readonly today: "Heute";
147
+ readonly tomorrow: "Morgen";
148
+ readonly thisWeek: "Diese Woche";
149
+ readonly nextWeek: "Nächste Woche";
150
+ readonly later: "Später";
151
+ readonly noDate: "Kein Datum";
152
+ readonly unassigned: "Nicht zugewiesen";
153
+ };
154
+ };
140
155
  readonly view: {
141
156
  readonly rename: "Umbenennen";
142
157
  readonly duplicateView: "Ansicht duplizieren";
@@ -156,10 +171,10 @@ declare const de: {
156
171
  readonly detail: {
157
172
  readonly back: "Zurück";
158
173
  readonly edit: "Bearbeiten";
159
- readonly editInline: "Inline bearbeiten";
174
+ readonly editInline: "Bearbeiten";
160
175
  readonly save: "Speichern";
161
176
  readonly saveChanges: "Änderungen speichern";
162
- readonly editFieldsInline: "Felder inline bearbeiten";
177
+ readonly editFieldsInline: "Felder bearbeiten";
163
178
  readonly share: "Teilen";
164
179
  readonly duplicate: "Duplizieren";
165
180
  readonly export: "Exportieren";
@@ -799,5 +814,142 @@ declare const de: {
799
814
  readonly default: "Standard";
800
815
  };
801
816
  };
817
+ readonly layout: {
818
+ readonly appSwitcher: {
819
+ readonly home: "Home";
820
+ readonly addApp: "Add App";
821
+ readonly editApp: "Edit App";
822
+ readonly manageAllApps: "Manage All Apps";
823
+ readonly systemConsole: "System Console";
824
+ readonly noAppsConfigured: "No apps configured";
825
+ };
826
+ readonly activityFeed: {
827
+ readonly title: "Recent Activity";
828
+ readonly filter: "Filter";
829
+ readonly empty: "No recent activity";
830
+ readonly ariaLabel: "Activity feed";
831
+ readonly typeCreate: "Create";
832
+ readonly typeUpdate: "Update";
833
+ readonly typeDelete: "Delete";
834
+ readonly typeComment: "Comment";
835
+ readonly relativeJustNow: "just now";
836
+ readonly relativeSecondsAgo: "{{count}}s ago";
837
+ readonly relativeMinutesAgo: "{{count}}m ago";
838
+ readonly relativeHoursAgo: "{{count}}h ago";
839
+ readonly relativeDaysAgo: "{{count}}d ago";
840
+ };
841
+ readonly metadata: {
842
+ readonly label: "Metadata";
843
+ readonly toggleTitle: "Toggle Metadata Inspector";
844
+ readonly panelTitle: "Metadata Inspector";
845
+ readonly jsonBadge: "JSON";
846
+ readonly copyJson: "Copy JSON";
847
+ };
848
+ };
849
+ readonly search: {
850
+ readonly title: "Search";
851
+ readonly back: "Back";
852
+ readonly placeholder: "Search objects, dashboards, pages, reports...";
853
+ readonly inputAriaLabel: "Search objects, dashboards, pages, reports";
854
+ readonly resultsCount: "{{count}} result for \"{{query}}\"";
855
+ readonly resultsCountPlural: "{{count}} results for \"{{query}}\"";
856
+ readonly itemsAvailable: "{{count}} items available";
857
+ readonly noResults: "No results found";
858
+ readonly noResultsHint: "Try adjusting your search terms";
859
+ readonly typeObjects: "Objects";
860
+ readonly typeDashboards: "Dashboards";
861
+ readonly typePages: "Pages";
862
+ readonly typeReports: "Reports";
863
+ readonly badgeObject: "object";
864
+ readonly badgeDashboard: "dashboard";
865
+ readonly badgePage: "page";
866
+ readonly badgeReport: "report";
867
+ };
868
+ readonly empty: {
869
+ readonly objectNotFound: "Object Not Found";
870
+ readonly objectNotFoundDescription: "Object \"{{name}}\" definition missing. Check your configuration or navigate back to select a valid object.";
871
+ readonly pageNotFound: "Page Not Found";
872
+ readonly pageNotFoundDescription: "The page \"{{name}}\" could not be found. It may have been removed or renamed.";
873
+ readonly dashboardNotFound: "Dashboard Not Found";
874
+ readonly dashboardNotFoundDescription: "The dashboard \"{{name}}\" could not be found. It may have been removed or renamed.";
875
+ readonly reportNotFound: "Report Not Found";
876
+ readonly reportNotFoundDescription: "The report \"{{name}}\" could not be found. It may have been removed or renamed.";
877
+ readonly noAppsConfigured: "No Apps Configured";
878
+ readonly noAppsConfiguredDescription: "No applications have been registered. Create your first app or visit System Settings to configure your environment.";
879
+ readonly createFirstApp: "Create Your First App";
880
+ readonly systemSettings: "System Settings";
881
+ readonly back: "Back";
882
+ };
883
+ readonly renderer: {
884
+ readonly noPageSchema: "No page schema provided";
885
+ readonly noFormSchema: "No form schema provided";
886
+ readonly noDashboardSchema: "No dashboard schema provided";
887
+ readonly pageRendering: "Page rendering: {{name}}";
888
+ readonly dashboardRendering: "Dashboard rendering: {{name}}";
889
+ readonly formRenderingMode: "Form rendering in {{mode}} mode";
890
+ readonly formRenderingFor: "for record {{id}}";
891
+ readonly createRecord: "Create Record";
892
+ readonly editRecord: "Edit Record";
893
+ readonly page: "Page";
894
+ readonly dashboard: "Dashboard";
895
+ readonly save: "Save";
896
+ readonly cancel: "Cancel";
897
+ };
898
+ readonly actionDialog: {
899
+ readonly title: "Action Parameters";
900
+ readonly description: "Please provide the required information to continue.";
901
+ readonly selectPlaceholder: "Select {{label}}";
902
+ readonly requiredError: "{{label}} is required";
903
+ readonly cancel: "Cancel";
904
+ readonly confirm: "Confirm";
905
+ readonly defaultActionTitle: "Action";
906
+ readonly ok: "OK";
907
+ };
908
+ readonly rowAction: {
909
+ readonly openMenu: "Open menu";
910
+ readonly edit: "Edit";
911
+ readonly delete: "Delete";
912
+ };
913
+ readonly navigationSync: {
914
+ readonly addedPage: "Navigation updated: added page \"{{name}}\"";
915
+ readonly addedDashboard: "Navigation updated: added dashboard \"{{name}}\"";
916
+ readonly removedPage: "Navigation updated: removed page \"{{name}}\"";
917
+ readonly removedDashboard: "Navigation updated: removed dashboard \"{{name}}\"";
918
+ readonly renamedPage: "Navigation updated: renamed page \"{{oldName}}\" → \"{{newName}}\"";
919
+ readonly renamedDashboard: "Navigation updated: renamed dashboard \"{{oldName}}\" → \"{{newName}}\"";
920
+ readonly undoLabel: "Undo";
921
+ readonly undone: "Navigation change undone";
922
+ readonly undoFailed: "Failed to undo navigation change";
923
+ readonly updateFailed: "Failed to update navigation";
924
+ };
925
+ readonly objectActions: {
926
+ readonly deleteSuccess: "{{label}} deleted successfully";
927
+ readonly deleteFailed: "Failed to delete {{label}}";
928
+ readonly noRecordId: "No record ID provided";
929
+ readonly deleteConfirm: "Are you sure you want to delete this record?";
930
+ };
931
+ readonly objectViewActions: {
932
+ readonly renameFailed: "Failed to rename view";
933
+ readonly deleteFailed: "Failed to delete view";
934
+ };
935
+ readonly dashboardActions: {
936
+ readonly pdfPreparing: "Preparing PDF export…";
937
+ readonly exportFailed: "Export failed: {{message}}";
938
+ readonly forecastSoon: "Forecast view coming soon";
939
+ };
940
+ readonly recordDetail: {
941
+ readonly viewersTooltip: "Users viewing this record";
942
+ };
943
+ readonly cellRender: {
944
+ readonly empty: "Empty";
945
+ readonly yes: "Yes";
946
+ readonly no: "No";
947
+ readonly systemFields: "System";
948
+ };
949
+ readonly user: {
950
+ readonly profile: "Profile";
951
+ readonly settings: "Settings";
952
+ readonly logout: "Log out";
953
+ };
802
954
  };
803
955
  export default de;