@chelone/core 0.9.0 → 0.11.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 (42) hide show
  1. package/dist/block-editor/block-document.d.ts +1 -1
  2. package/dist/controller/calendar-events.d.ts +6 -4
  3. package/dist/controller/calendar-events.js +2 -3
  4. package/dist/controller/client-list-controller.d.ts +3 -3
  5. package/dist/controller/client-list-controller.js +4 -20
  6. package/dist/controller/filter-toggle.d.ts +4 -4
  7. package/dist/controller/filter-toggle.js +0 -7
  8. package/dist/controller/in-place-editor.d.ts +1 -1
  9. package/dist/controller/infinite-list-controller.d.ts +1 -1
  10. package/dist/controller/kanban-board.d.ts +5 -3
  11. package/dist/controller/list-controller.d.ts +105 -28
  12. package/dist/controller/list-controller.js +85 -43
  13. package/dist/controller/list-params.d.ts +16 -13
  14. package/dist/controller/record-diff.d.ts +4 -3
  15. package/dist/controller/record-diff.js +2 -1
  16. package/dist/controller/reference-many-controller.d.ts +9 -7
  17. package/dist/controller/reference-one-controller.d.ts +8 -6
  18. package/dist/controller/saved-queries.d.ts +15 -14
  19. package/dist/controller/saved-queries.js +5 -0
  20. package/dist/csv/import-controller.d.ts +2 -1
  21. package/dist/csv/types.d.ts +12 -5
  22. package/dist/data/cache-ops.d.ts +8 -5
  23. package/dist/data/remove-empty.d.ts +2 -1
  24. package/dist/data/remove-empty.js +3 -5
  25. package/dist/data/types.d.ts +109 -6
  26. package/dist/data/undoable.d.ts +3 -2
  27. package/dist/form/choices-controller.d.ts +19 -12
  28. package/dist/form/choices-controller.js +19 -7
  29. package/dist/form/filter-form-values.d.ts +4 -3
  30. package/dist/form/filter-form-values.js +7 -5
  31. package/dist/i18n/direction.d.ts +18 -0
  32. package/dist/i18n/direction.js +72 -0
  33. package/dist/i18n/english-messages.d.ts +145 -150
  34. package/dist/i18n/english-messages.js +145 -150
  35. package/dist/index.d.ts +6 -4
  36. package/dist/index.js +3 -2
  37. package/dist/realtime/live.d.ts +5 -5
  38. package/dist/realtime/types.d.ts +6 -6
  39. package/dist/resource/describe-resource.d.ts +9 -3
  40. package/dist/resource/registry-store.d.ts +5 -2
  41. package/dist/resource/source-path.d.ts +23 -0
  42. package/package.json +1 -1
@@ -0,0 +1,18 @@
1
+ /**
2
+ * The writing direction a locale renders in — the rule behind the `dir` the
3
+ * adapters put on the app root. Framework-free because both adapters need the
4
+ * same answer: each reads the active locale and calls `getLocaleDirection`.
5
+ */
6
+ /** The two values HTML's `dir` attribute takes. */
7
+ export type TextDirection = "ltr" | "rtl";
8
+ /**
9
+ * The direction `locale` renders in: `"rtl"` for Arabic, Hebrew, Persian…,
10
+ * `"ltr"` for everything else, including an empty or malformed tag.
11
+ *
12
+ * A tag is read as BCP 47 — `language[-script][-region][-variant…]`, with the
13
+ * `-u-`/`-x-` extensions cut off, so `en-US-u-nu-arab` (Arabic *digits*) is not
14
+ * mistaken for the Arabic script. The script subtag is the four-letter one right
15
+ * after the language, and it decides over the language: `pa-Arab` is rtl,
16
+ * `pa-Guru` is ltr. Underscore separators (POSIX/ICU tags) are accepted.
17
+ */
18
+ export declare function getLocaleDirection(locale: string): TextDirection;
@@ -0,0 +1,72 @@
1
+ // src/i18n/direction.ts
2
+ /**
3
+ * Languages whose DEFAULT script runs right to left, the script CLDR's likely
4
+ * subtags give them (ar → Arabic, he → Hebrew, dv → Thaana, ckb → Arabic).
5
+ *
6
+ * A language whose default script is Latin is not here even when some of its
7
+ * speakers write it another way: Turkmen (`tk`) and Kurmanji Kurdish (`ku`) are
8
+ * ltr, and their Arabic-script forms arrive as `tk-Arab` / `ku-Arab`, which the
9
+ * script list below decides. Sorani Kurdish is `ckb`, listed above.
10
+ *
11
+ * A script subtag in the tag always wins over this list, so `ar-Latn` (Arabic
12
+ * in Latin letters) is ltr. A region alone changes nothing, as in CLDR: `fa-TJ`
13
+ * is Persian in Arabic script, and Tajik in Cyrillic is `tg` or `fa-Cyrl-TJ`.
14
+ */
15
+ var RTL_LANGUAGES = /* @__PURE__ */ new Set([
16
+ "ar",
17
+ "ckb",
18
+ "dv",
19
+ "fa",
20
+ "he",
21
+ "nqo",
22
+ "ps",
23
+ "sd",
24
+ "ug",
25
+ "ur",
26
+ "yi"
27
+ ]);
28
+ /**
29
+ * ISO 15924 script codes that run right to left. A tag's script subtag says how
30
+ * a language is written, so this decides the languages the list above leaves
31
+ * out: `pa-Arab` is Punjabi in Arabic script, `ku-Arab` Kurdish, `tk-Arab`
32
+ * Turkmen. Historic scripts are left out: no app localizes to them.
33
+ */
34
+ var RTL_SCRIPTS = /* @__PURE__ */ new Set([
35
+ "adlm",
36
+ "arab",
37
+ "hebr",
38
+ "mand",
39
+ "mend",
40
+ "nkoo",
41
+ "phnx",
42
+ "rohg",
43
+ "samr",
44
+ "syrc",
45
+ "thaa",
46
+ "yezi"
47
+ ]);
48
+ /** Where the `-u-` (unicode) or `-x-` (private use) extension starts, or the tag's end. */
49
+ function extensionIndex(subtags) {
50
+ const index = subtags.findIndex((subtag) => subtag.toLowerCase() === "u" || subtag.toLowerCase() === "x");
51
+ return index === -1 ? subtags.length : index;
52
+ }
53
+ /**
54
+ * The direction `locale` renders in: `"rtl"` for Arabic, Hebrew, Persian…,
55
+ * `"ltr"` for everything else, including an empty or malformed tag.
56
+ *
57
+ * A tag is read as BCP 47 — `language[-script][-region][-variant…]`, with the
58
+ * `-u-`/`-x-` extensions cut off, so `en-US-u-nu-arab` (Arabic *digits*) is not
59
+ * mistaken for the Arabic script. The script subtag is the four-letter one right
60
+ * after the language, and it decides over the language: `pa-Arab` is rtl,
61
+ * `pa-Guru` is ltr. Underscore separators (POSIX/ICU tags) are accepted.
62
+ */
63
+ function getLocaleDirection(locale) {
64
+ const subtags = locale.split(/[-_]/);
65
+ const structural = subtags.slice(0, extensionIndex(subtags));
66
+ const language = (structural[0] ?? "").toLowerCase();
67
+ const second = structural[1];
68
+ const script = second !== void 0 && second.length === 4 ? second.toLowerCase() : void 0;
69
+ if (script !== void 0) return RTL_SCRIPTS.has(script) ? "rtl" : "ltr";
70
+ return RTL_LANGUAGES.has(language) ? "rtl" : "ltr";
71
+ }
72
+ export { getLocaleDirection };
@@ -2,185 +2,180 @@
2
2
  * The English catalog an `<Admin>` with no `i18n` prop reads from, and the base
3
3
  * an app extends: spread it, then add or override entries.
4
4
  *
5
- * The ported shadcn components translate `ra.*` keys (the react-admin namespace
6
- * they were ported from): page titles, list pagination, the bulk-action bar,
7
- * menu a11y labels, boolean fields. Chelone's i18n never throws on a missing key
8
- * (it returns the key or a `_` fallback), so a partial catalog shows raw
9
- * `ra.page.list`-style keys.
5
+ * Every key is `chelone.<group>.<leaf>`: the ported shadcn components used to
6
+ * translate the react-admin `ra.*` keys they were ported from, and those keys
7
+ * were moved under `chelone.*` with their group names kept (`page`, `action`,
8
+ * `navigation`). Chelone's i18n never throws on a missing key (it returns the
9
+ * key or a `_` fallback), so a partial catalog shows raw
10
+ * `chelone.page.list`-style keys.
10
11
  *
11
12
  * Interpolation is single-brace `{name}` (not react-admin's `%{name}`). Plural
12
13
  * strings are `{ one, other }` objects keyed by Intl.PluralRules categories
13
14
  * (react-admin's `a |||| b` form).
14
15
  *
15
16
  * `defaultMessages` (the `chelone.*` keys the core controllers emit) and
16
- * `mapMessages` (the maps add-on's labels) sit underneath.
17
+ * `mapMessages` (the maps add-on's labels) sit underneath, and no entry here
18
+ * repeats one of them. Where a moved key landed on a controller key that says
19
+ * something different, the component's own key keeps the group and names the
20
+ * role: `access_denied_detail`, `authentication_error_detail`,
21
+ * `loading_detail` and `http_error_label` sit beside the controller's
22
+ * `access_denied`, `authentication_error`, `loading` and `http_error`.
17
23
  */
18
24
  export declare const englishMessages: {
19
- readonly "ra.page.list": "{name}";
20
- readonly "ra.page.create": "Create {name}";
21
- readonly "ra.page.edit": "{name} {recordRepresentation}";
22
- readonly "ra.page.show": "{name} {recordRepresentation}";
23
- readonly "ra.page.dashboard": "Dashboard";
24
- readonly "ra.page.error": "Something went wrong";
25
- readonly "ra.page.not_found": "Not Found";
26
- readonly "ra.page.loading": "Loading";
27
- readonly "ra.page.empty": "No {name} yet.";
28
- readonly "ra.page.access_denied": "Access denied";
29
- readonly "ra.page.authentication_error": "Authentication error";
30
- readonly "ra.action.add": "Add";
31
- readonly "ra.action.add_filter": "Add filter";
32
- readonly "ra.action.bulk_actions": {
25
+ readonly "chelone.page.list": "{name}";
26
+ readonly "chelone.page.create": "Create {name}";
27
+ readonly "chelone.page.edit": "{name} {recordRepresentation}";
28
+ readonly "chelone.page.show": "{name} {recordRepresentation}";
29
+ readonly "chelone.page.dashboard": "Dashboard";
30
+ readonly "chelone.page.error": "Something went wrong";
31
+ readonly "chelone.page.not_found": "Not Found";
32
+ readonly "chelone.page.loading": "Loading";
33
+ readonly "chelone.page.empty": "No {name} yet.";
34
+ readonly "chelone.page.access_denied": "Access denied";
35
+ readonly "chelone.page.authentication_error": "Authentication error";
36
+ readonly "chelone.action.add": "Add";
37
+ readonly "chelone.action.add_filter": "Add filter";
38
+ readonly "chelone.action.bulk_actions": {
33
39
  readonly one: "1 item selected";
34
40
  readonly other: "{count} items selected";
35
41
  };
36
- readonly "ra.action.cancel": "Cancel";
37
- readonly "ra.action.clear_input_value": "Clear value";
38
- readonly "ra.action.clear_search": "Clear search";
39
- readonly "ra.action.close": "Close";
40
- readonly "ra.action.close_menu": "Close menu";
41
- readonly "ra.action.confirm": "Confirm";
42
- readonly "ra.action.create": "Create";
43
- readonly "ra.action.delete": "Delete";
44
- readonly "ra.action.edit": "Edit";
45
- readonly "ra.action.export": "Export";
46
- readonly "ra.action.list": "List";
47
- readonly "ra.action.open_menu": "Open menu";
48
- readonly "ra.action.refresh": "Refresh";
49
- readonly "ra.action.remove": "Remove";
50
- readonly "ra.action.remove_filter": "Remove this filter";
51
- readonly "ra.action.save": "Save";
52
- readonly "ra.action.search": "Search";
53
- readonly "ra.action.select_all": "Select all";
54
- readonly "ra.action.select_row": "Select this row";
55
- readonly "ra.action.show": "Show";
56
- readonly "ra.action.sort": "Sort";
57
- readonly "ra.action.toggle_theme": "Toggle light/dark mode";
58
- readonly "ra.action.undo": "Undo";
59
- readonly "ra.action.unselect": "Unselect";
60
- readonly "ra.action.update": "Update";
61
- readonly "ra.boolean.true": "Yes";
62
- readonly "ra.boolean.false": "No";
63
- readonly "ra.boolean.null": " ";
64
- readonly "ra.auth.logout": "Logout";
65
- readonly "ra.auth.sign_in": "Sign in";
66
- readonly "ra.auth.sign_in_error": "Authentication failed, please retry";
67
- readonly "ra.auth.user_menu": "Profile";
68
- readonly "ra.auth.username": "Username";
69
- readonly "ra.auth.password": "Password";
70
- readonly "ra.auth.auth_check_error": "Please login to continue";
71
- readonly "ra.message.access_denied": "You don't have the right permissions to access this page";
72
- readonly "ra.message.auth_error": "An error occurred while validating the authentication token.";
73
- readonly "ra.message.authentication_error": "The authentication server returned an error and your credentials could not be checked.";
74
- readonly "ra.message.error": "A client error occurred and your request couldn't be completed.";
75
- readonly "ra.message.invalid_form": "The form is not valid. Please check for errors";
76
- readonly "ra.message.loading": "Please wait";
77
- readonly "ra.message.not_found": "Either you typed a wrong URL, or you followed a bad link.";
78
- readonly "ra.navigation.next": "Go to next page";
79
- readonly "ra.navigation.previous": "Go to previous page";
80
- readonly "ra.navigation.first": "Go to first page";
81
- readonly "ra.navigation.last": "Go to last page";
82
- readonly "ra.navigation.no_results": "No results found";
83
- readonly "ra.navigation.no_filtered_results": "No results found with the current filters.";
84
- readonly "ra.navigation.page_range_info": "{offsetBegin}-{offsetEnd} of {total}";
85
- readonly "ra.navigation.partial_page_range_info": "{offsetBegin}-{offsetEnd} of more than {offsetEnd}";
86
- readonly "ra.navigation.page_rows_per_page": "Rows per page:";
87
- readonly "ra.navigation.current_page": "Page {page}";
88
- readonly "ra.navigation.skip_nav": "Skip to content";
89
- readonly "ra.input.file.upload_several": "Drop some files to upload, or click to select one.";
90
- readonly "ra.input.file.upload_single": "Drop a file to upload, or click to select it.";
91
- readonly "ra.input.image.upload_several": "Drop some pictures to upload, or click to select one.";
92
- readonly "ra.input.image.upload_single": "Drop a picture to upload, or click to select it.";
93
- readonly "ra.input.password.toggle_visible": "Hide password";
94
- readonly "ra.input.password.toggle_hidden": "Show password";
95
- readonly "ra.theme.light": "Light";
96
- readonly "ra.theme.dark": "Dark";
97
- readonly "ra.theme.system": "System";
98
- readonly "ra.validation.required": "Required";
99
- readonly "ra.validation.minLength": "Must be {min} characters at least";
100
- readonly "ra.validation.maxLength": "Must be {max} characters or less";
101
- readonly "ra.validation.minValue": "Must be at least {min}";
102
- readonly "ra.validation.maxValue": "Must be {max} or less";
103
- readonly "ra.validation.number": "Must be a number";
104
- readonly "ra.validation.email": "Must be a valid email";
105
- readonly "ra.action.back": "Back";
106
- readonly "ra.action.bulk_edit_apply": {
42
+ readonly "chelone.action.cancel": "Cancel";
43
+ readonly "chelone.action.clear_input_value": "Clear value";
44
+ readonly "chelone.action.clear_search": "Clear search";
45
+ readonly "chelone.action.close": "Close";
46
+ readonly "chelone.action.close_menu": "Close menu";
47
+ readonly "chelone.action.confirm": "Confirm";
48
+ readonly "chelone.action.create": "Create";
49
+ readonly "chelone.action.delete": "Delete";
50
+ readonly "chelone.action.edit": "Edit";
51
+ readonly "chelone.action.export": "Export";
52
+ readonly "chelone.action.list": "List";
53
+ readonly "chelone.action.open_menu": "Open menu";
54
+ readonly "chelone.action.refresh": "Refresh";
55
+ readonly "chelone.action.remove": "Remove";
56
+ readonly "chelone.action.remove_filter": "Remove this filter";
57
+ readonly "chelone.action.save": "Save";
58
+ readonly "chelone.action.search": "Search";
59
+ readonly "chelone.action.select_all": "Select all";
60
+ readonly "chelone.action.select_row": "Select this row";
61
+ readonly "chelone.action.show": "Show";
62
+ readonly "chelone.action.sort": "Sort";
63
+ readonly "chelone.action.toggle_theme": "Toggle light/dark mode";
64
+ readonly "chelone.action.undo": "Undo";
65
+ readonly "chelone.action.unselect": "Unselect";
66
+ readonly "chelone.action.update": "Update";
67
+ readonly "chelone.boolean.true": "Yes";
68
+ readonly "chelone.boolean.false": "No";
69
+ readonly "chelone.boolean.null": " ";
70
+ readonly "chelone.auth.sign_in": "Sign in";
71
+ readonly "chelone.auth.sign_in_error": "Authentication failed, please retry";
72
+ readonly "chelone.auth.user_menu": "Profile";
73
+ readonly "chelone.auth.username": "Username";
74
+ readonly "chelone.auth.password": "Password";
75
+ readonly "chelone.message.access_denied_detail": "You don't have the right permissions to access this page";
76
+ readonly "chelone.message.auth_error": "An error occurred while validating the authentication token.";
77
+ readonly "chelone.message.authentication_error_detail": "The authentication server returned an error and your credentials could not be checked.";
78
+ readonly "chelone.message.error": "A client error occurred and your request couldn't be completed.";
79
+ readonly "chelone.message.loading_detail": "Please wait";
80
+ readonly "chelone.navigation.next": "Go to next page";
81
+ readonly "chelone.navigation.previous": "Go to previous page";
82
+ readonly "chelone.navigation.first": "Go to first page";
83
+ readonly "chelone.navigation.last": "Go to last page";
84
+ readonly "chelone.navigation.no_results": "No results found";
85
+ readonly "chelone.navigation.no_filtered_results": "No results found with the current filters.";
86
+ readonly "chelone.navigation.page_range_info": "{offsetBegin}-{offsetEnd} of {total}";
87
+ readonly "chelone.navigation.partial_page_range_info": "{offsetBegin}-{offsetEnd} of more than {offsetEnd}";
88
+ readonly "chelone.navigation.page_rows_per_page": "Rows per page:";
89
+ readonly "chelone.navigation.current_page": "Page {page}";
90
+ readonly "chelone.navigation.skip_nav": "Skip to content";
91
+ readonly "chelone.input.file.upload_several": "Drop some files to upload, or click to select one.";
92
+ readonly "chelone.input.file.upload_single": "Drop a file to upload, or click to select it.";
93
+ readonly "chelone.input.image.upload_several": "Drop some pictures to upload, or click to select one.";
94
+ readonly "chelone.input.image.upload_single": "Drop a picture to upload, or click to select it.";
95
+ readonly "chelone.input.password.toggle_visible": "Hide password";
96
+ readonly "chelone.input.password.toggle_hidden": "Show password";
97
+ readonly "chelone.theme.light": "Light";
98
+ readonly "chelone.theme.dark": "Dark";
99
+ readonly "chelone.theme.system": "System";
100
+ readonly "chelone.action.back": "Back";
101
+ readonly "chelone.action.bulk_edit_apply": {
107
102
  readonly one: "Apply to 1 record";
108
103
  readonly other: "Apply to {count} records";
109
104
  };
110
- readonly "ra.action.change_locale": "Change locale";
111
- readonly "ra.action.clear_array_input": "Clear the array";
112
- readonly "ra.action.clone": "Clone";
113
- readonly "ra.action.collapse": "Collapse";
114
- readonly "ra.action.expand": "Expand";
115
- readonly "ra.action.move_column_down": "Move down";
116
- readonly "ra.action.move_column_up": "Move up";
117
- readonly "ra.action.move_down": "Move down";
118
- readonly "ra.action.move_up": "Move up";
119
- readonly "ra.action.reload": "Reload";
120
- readonly "ra.action.remove_all_filters": "Remove all filters";
121
- readonly "ra.action.reset": "Reset";
122
- readonly "ra.action.reset_columns": "Reset";
123
- readonly "ra.action.search_columns": "Search columns";
124
- readonly "ra.action.select_columns": "Columns";
125
- readonly "ra.auth.or": "or";
126
- readonly "ra.calendar.agenda": "Agenda";
127
- readonly "ra.calendar.month": "Month";
128
- readonly "ra.calendar.week": "Week";
129
- readonly "ra.calendar.next": "Next";
130
- readonly "ra.calendar.previous": "Previous";
131
- readonly "ra.calendar.today": "Today";
132
- readonly "ra.calendar.view": "View";
133
- readonly "ra.calendar.no_events": "No events";
134
- readonly "ra.csv_import.back": "Back";
135
- readonly "ra.csv_import.close": "Close";
136
- readonly "ra.csv_import.complete": "Import complete";
137
- readonly "ra.csv_import.counts": "{created} created · {failed} failed · {total} total";
138
- readonly "ra.csv_import.download_errors": "Download error report";
139
- readonly "ra.csv_import.drop": "Drop a CSV file here, or click to choose one";
140
- readonly "ra.csv_import.import": "Import";
141
- readonly "ra.csv_import.issues": "Issues";
142
- readonly "ra.csv_import.next": "Next";
143
- readonly "ra.csv_import.not_utf8": "This file is not UTF-8, so some letters may be wrong. Save it as CSV UTF-8 and try again.";
144
- readonly "ra.csv_import.preview_summary": "{valid} valid · {errors} errors · {total} total";
145
- readonly "ra.csv_import.required_unmapped": "Required fields are not mapped";
146
- readonly "ra.csv_import.rows_parsed": "{count} rows parsed";
147
- readonly "ra.csv_import.step.commit": "Importing";
148
- readonly "ra.csv_import.step.map": "Map columns";
149
- readonly "ra.csv_import.step.preview": "Preview";
150
- readonly "ra.csv_import.step.upload": "Upload";
151
- readonly "ra.csv_import.unmapped": "Not mapped";
152
- readonly "ra.csv_import.wrong_file": "Choose a .csv file";
153
- readonly "ra.message.bulk_delete_content": {
105
+ readonly "chelone.action.change_locale": "Change locale";
106
+ readonly "chelone.action.clear_array_input": "Clear the array";
107
+ readonly "chelone.action.clone": "Clone";
108
+ readonly "chelone.action.collapse": "Collapse";
109
+ readonly "chelone.action.expand": "Expand";
110
+ readonly "chelone.action.move_column_down": "Move down";
111
+ readonly "chelone.action.move_column_up": "Move up";
112
+ readonly "chelone.action.move_down": "Move down";
113
+ readonly "chelone.action.move_up": "Move up";
114
+ readonly "chelone.action.reload": "Reload";
115
+ readonly "chelone.action.remove_all_filters": "Remove all filters";
116
+ readonly "chelone.action.reset": "Reset";
117
+ readonly "chelone.action.reset_columns": "Reset";
118
+ readonly "chelone.action.search_columns": "Search columns";
119
+ readonly "chelone.action.select_columns": "Columns";
120
+ readonly "chelone.auth.or": "or";
121
+ readonly "chelone.calendar.agenda": "Agenda";
122
+ readonly "chelone.calendar.month": "Month";
123
+ readonly "chelone.calendar.week": "Week";
124
+ readonly "chelone.calendar.next": "Next";
125
+ readonly "chelone.calendar.previous": "Previous";
126
+ readonly "chelone.calendar.today": "Today";
127
+ readonly "chelone.calendar.view": "View";
128
+ readonly "chelone.calendar.no_events": "No events";
129
+ readonly "chelone.csv_import.back": "Back";
130
+ readonly "chelone.csv_import.close": "Close";
131
+ readonly "chelone.csv_import.complete": "Import complete";
132
+ readonly "chelone.csv_import.counts": "{created} created · {failed} failed · {total} total";
133
+ readonly "chelone.csv_import.download_errors": "Download error report";
134
+ readonly "chelone.csv_import.drop": "Drop a CSV file here, or click to choose one";
135
+ readonly "chelone.csv_import.import": "Import";
136
+ readonly "chelone.csv_import.issues": "Issues";
137
+ readonly "chelone.csv_import.next": "Next";
138
+ readonly "chelone.csv_import.not_utf8": "This file is not UTF-8, so some letters may be wrong. Save it as CSV UTF-8 and try again.";
139
+ readonly "chelone.csv_import.preview_summary": "{valid} valid · {errors} errors · {total} total";
140
+ readonly "chelone.csv_import.required_unmapped": "Required fields are not mapped";
141
+ readonly "chelone.csv_import.rows_parsed": "{count} rows parsed";
142
+ readonly "chelone.csv_import.step.commit": "Importing";
143
+ readonly "chelone.csv_import.step.map": "Map columns";
144
+ readonly "chelone.csv_import.step.preview": "Preview";
145
+ readonly "chelone.csv_import.step.upload": "Upload";
146
+ readonly "chelone.csv_import.unmapped": "Not mapped";
147
+ readonly "chelone.csv_import.wrong_file": "Choose a .csv file";
148
+ readonly "chelone.message.bulk_delete_content": {
154
149
  readonly one: "Are you sure you want to delete this item?";
155
150
  readonly other: "Are you sure you want to delete these {count} items?";
156
151
  };
157
- readonly "ra.message.bulk_delete_title": {
152
+ readonly "chelone.message.bulk_delete_title": {
158
153
  readonly one: "Delete 1 item";
159
154
  readonly other: "Delete {count} items";
160
155
  };
161
- readonly "ra.message.bulk_edit_description": {
156
+ readonly "chelone.message.bulk_edit_description": {
162
157
  readonly one: "Only the fields you change are applied to the selected record.";
163
158
  readonly other: "Only the fields you change are applied to the {count} selected records.";
164
159
  };
165
- readonly "ra.message.bulk_edit_nested_source": "Bulk edit takes flat sources only, but {source} is nested.";
166
- readonly "ra.message.bulk_update_content": {
160
+ readonly "chelone.message.bulk_edit_nested_source": "Bulk edit takes flat sources only, but {source} is nested.";
161
+ readonly "chelone.message.bulk_update_content": {
167
162
  readonly one: "Are you sure you want to update this item?";
168
163
  readonly other: "Are you sure you want to update these {count} items?";
169
164
  };
170
- readonly "ra.message.bulk_update_title": {
165
+ readonly "chelone.message.bulk_update_title": {
171
166
  readonly one: "Update 1 item";
172
167
  readonly other: "Update {count} items";
173
168
  };
174
- readonly "ra.message.clear_array_input": "Are you sure you want to clear the whole array?";
175
- readonly "ra.message.delete_content": "Are you sure you want to delete this item?";
176
- readonly "ra.message.delete_title": "Delete {name} {recordRepresentation}";
177
- readonly "ra.navigation.clear_filters": "Clear filters";
178
- readonly "ra.notification.application_update_available": "A new version of the application is available";
179
- readonly "ra.notification.http_error": "Error";
180
- readonly "ra.notification.offline": "You are offline";
181
- readonly "ra.saved_queries.new_label": "Save current query";
182
- readonly "ra.saved_queries.query_name": "Query name";
183
- readonly "ra.saved_queries.remove_label_with_name": "Remove saved query \"{name}\"";
169
+ readonly "chelone.message.clear_array_input": "Are you sure you want to clear the whole array?";
170
+ readonly "chelone.message.delete_content": "Are you sure you want to delete this item?";
171
+ readonly "chelone.message.delete_title": "Delete {name} {recordRepresentation}";
172
+ readonly "chelone.navigation.clear_filters": "Clear filters";
173
+ readonly "chelone.notification.application_update_available": "A new version of the application is available";
174
+ readonly "chelone.notification.http_error_label": "Error";
175
+ readonly "chelone.notification.offline": "You are offline";
176
+ readonly "chelone.saved_queries.new_label": "Save current query";
177
+ readonly "chelone.saved_queries.query_name": "Query name";
178
+ readonly "chelone.saved_queries.remove_label_with_name": "Remove saved query \"{name}\"";
184
179
  readonly "chelone.assistant.close": "Close";
185
180
  readonly "chelone.assistant.confirm": "Run {name}?";
186
181
  readonly "chelone.assistant.error": "Something went wrong.";