@comitor/ui 1.10.0 → 2.0.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.
- package/README.md +24 -5
- package/dist/data-grid/compose-refs.d.ts +19 -0
- package/dist/data-grid/compose-refs.js +41 -0
- package/dist/data-grid/compose-refs.js.map +1 -0
- package/dist/data-grid/data-grid-cell-variants.d.ts +15 -0
- package/dist/data-grid/data-grid-cell-variants.js +1738 -0
- package/dist/data-grid/data-grid-cell-variants.js.map +1 -0
- package/dist/data-grid/data-grid-cell-wrapper.d.ts +9 -0
- package/dist/data-grid/data-grid-cell-wrapper.js +179 -0
- package/dist/data-grid/data-grid-cell-wrapper.js.map +1 -0
- package/dist/data-grid/data-grid-cell.d.ts +8 -0
- package/dist/data-grid/data-grid-cell.js +101 -0
- package/dist/data-grid/data-grid-cell.js.map +1 -0
- package/dist/data-grid/data-grid-column-header.d.ts +12 -0
- package/dist/data-grid/data-grid-column-header.js +207 -0
- package/dist/data-grid/data-grid-column-header.js.map +1 -0
- package/dist/data-grid/data-grid-context-menu.d.ts +12 -0
- package/dist/data-grid/data-grid-context-menu.js +161 -0
- package/dist/data-grid/data-grid-context-menu.js.map +1 -0
- package/dist/data-grid/data-grid-filter-menu.d.ts +23 -0
- package/dist/data-grid/data-grid-filter-menu.js +725 -0
- package/dist/data-grid/data-grid-filter-menu.js.map +1 -0
- package/dist/data-grid/data-grid-keyboard-shortcuts.d.ts +31 -0
- package/dist/data-grid/data-grid-keyboard-shortcuts.js +229 -0
- package/dist/data-grid/data-grid-keyboard-shortcuts.js.map +1 -0
- package/dist/data-grid/data-grid-locale.d.ts +24 -0
- package/dist/data-grid/data-grid-locale.js +25 -0
- package/dist/data-grid/data-grid-locale.js.map +1 -0
- package/dist/data-grid/data-grid-paste-dialog.d.ts +11 -0
- package/dist/data-grid/data-grid-paste-dialog.js +104 -0
- package/dist/data-grid/data-grid-paste-dialog.js.map +1 -0
- package/dist/data-grid/data-grid-presence.d.ts +14 -0
- package/dist/data-grid/data-grid-presence.js +16 -0
- package/dist/data-grid/data-grid-presence.js.map +1 -0
- package/dist/data-grid/data-grid-row-height-menu.d.ts +25 -0
- package/dist/data-grid/data-grid-row-height-menu.js +53 -0
- package/dist/data-grid/data-grid-row-height-menu.js.map +1 -0
- package/dist/data-grid/data-grid-row.d.ts +28 -0
- package/dist/data-grid/data-grid-row.js +206 -0
- package/dist/data-grid/data-grid-row.js.map +1 -0
- package/dist/data-grid/data-grid-search.d.ts +10 -0
- package/dist/data-grid/data-grid-search.js +184 -0
- package/dist/data-grid/data-grid-search.js.map +1 -0
- package/dist/data-grid/data-grid-select-column.d.ts +12 -0
- package/dist/data-grid/data-grid-select-column.js +179 -0
- package/dist/data-grid/data-grid-select-column.js.map +1 -0
- package/dist/data-grid/data-grid-skeleton.d.ts +13 -0
- package/dist/data-grid/data-grid-skeleton.js +52 -0
- package/dist/data-grid/data-grid-skeleton.js.map +1 -0
- package/dist/data-grid/data-grid-sort-menu.d.ts +23 -0
- package/dist/data-grid/data-grid-sort-menu.js +283 -0
- package/dist/data-grid/data-grid-sort-menu.js.map +1 -0
- package/dist/data-grid/data-grid-view-menu.d.ts +24 -0
- package/dist/data-grid/data-grid-view-menu.js +74 -0
- package/dist/data-grid/data-grid-view-menu.js.map +1 -0
- package/dist/data-grid/data-grid.d.ts +44 -0
- package/dist/data-grid/data-grid.js +238 -0
- package/dist/data-grid/data-grid.js.map +1 -0
- package/dist/data-grid/filters.d.ts +27 -0
- package/dist/data-grid/filters.js +233 -0
- package/dist/data-grid/filters.js.map +1 -0
- package/dist/data-grid/index.d.ts +25 -0
- package/dist/data-grid/index.js +95 -0
- package/dist/data-grid/index.js.map +1 -0
- package/dist/data-grid/messages-en.d.ts +294 -0
- package/dist/data-grid/messages-en.js +279 -0
- package/dist/data-grid/messages-en.js.map +1 -0
- package/dist/data-grid/messages-vi.d.ts +12 -0
- package/dist/data-grid/messages-vi.js +279 -0
- package/dist/data-grid/messages-vi.js.map +1 -0
- package/dist/data-grid/messages.d.ts +567 -0
- package/dist/data-grid/messages.js +20 -0
- package/dist/data-grid/messages.js.map +1 -0
- package/dist/data-grid/sortable.d.ts +50 -0
- package/dist/data-grid/sortable.js +361 -0
- package/dist/data-grid/sortable.js.map +1 -0
- package/dist/data-grid/toast.d.ts +10 -0
- package/dist/data-grid/toast.js +21 -0
- package/dist/data-grid/toast.js.map +1 -0
- package/dist/data-grid/types.d.ts +189 -0
- package/dist/data-grid/types.js +1 -0
- package/dist/data-grid/types.js.map +1 -0
- package/dist/data-grid/use-as-ref.d.ts +5 -0
- package/dist/data-grid/use-as-ref.js +13 -0
- package/dist/data-grid/use-as-ref.js.map +1 -0
- package/dist/data-grid/use-badge-overflow.d.ts +24 -0
- package/dist/data-grid/use-badge-overflow.js +123 -0
- package/dist/data-grid/use-badge-overflow.js.map +1 -0
- package/dist/data-grid/use-callback-ref.d.ts +10 -0
- package/dist/data-grid/use-callback-ref.js +12 -0
- package/dist/data-grid/use-callback-ref.js.map +1 -0
- package/dist/data-grid/use-data-grid-undo-redo.d.ts +45 -0
- package/dist/data-grid/use-data-grid-undo-redo.js +348 -0
- package/dist/data-grid/use-data-grid-undo-redo.js.map +1 -0
- package/dist/data-grid/use-data-grid.d.ts +372 -0
- package/dist/data-grid/use-data-grid.js +2697 -0
- package/dist/data-grid/use-data-grid.js.map +1 -0
- package/dist/data-grid/use-debounced-callback.d.ts +6 -0
- package/dist/data-grid/use-debounced-callback.js +19 -0
- package/dist/data-grid/use-debounced-callback.js.map +1 -0
- package/dist/data-grid/use-isomorphic-layout-effect.d.ts +5 -0
- package/dist/data-grid/use-isomorphic-layout-effect.js +6 -0
- package/dist/data-grid/use-isomorphic-layout-effect.js.map +1 -0
- package/dist/data-grid/use-lazy-ref.d.ts +5 -0
- package/dist/data-grid/use-lazy-ref.js +12 -0
- package/dist/data-grid/use-lazy-ref.js.map +1 -0
- package/dist/data-grid/utils.d.ts +81 -0
- package/dist/data-grid/utils.js +409 -0
- package/dist/data-grid/utils.js.map +1 -0
- package/package.json +33 -15
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
const messagesEn = {
|
|
2
|
+
grid: {
|
|
3
|
+
/** Nhãn mặc định của vùng `role="grid"` (ghi đè bằng prop `aria-label`) */
|
|
4
|
+
label: "Data grid",
|
|
5
|
+
addRow: "Add row"
|
|
6
|
+
},
|
|
7
|
+
search: {
|
|
8
|
+
placeholder: "Find in table...",
|
|
9
|
+
label: "Find in table",
|
|
10
|
+
prevMatch: "Previous match",
|
|
11
|
+
nextMatch: "Next match",
|
|
12
|
+
close: "Close search",
|
|
13
|
+
matchPosition: (index, total) => `${index} / ${total}`,
|
|
14
|
+
noResults: "No results",
|
|
15
|
+
typeToSearch: "Type to search"
|
|
16
|
+
},
|
|
17
|
+
column: {
|
|
18
|
+
sortAsc: "Sort asc",
|
|
19
|
+
sortDesc: "Sort desc",
|
|
20
|
+
removeSort: "Remove sort",
|
|
21
|
+
pinLeft: "Pin to left",
|
|
22
|
+
unpinLeft: "Unpin from left",
|
|
23
|
+
pinRight: "Pin to right",
|
|
24
|
+
unpinRight: "Unpin from right",
|
|
25
|
+
hide: "Hide column",
|
|
26
|
+
resize: (label) => `Resize ${label} column`,
|
|
27
|
+
/** Tên kiểu dữ liệu của cột, hiện trong tooltip ở tiêu đề cột */
|
|
28
|
+
variant: {
|
|
29
|
+
shortText: "Short text",
|
|
30
|
+
longText: "Long text",
|
|
31
|
+
number: "Number",
|
|
32
|
+
url: "URL",
|
|
33
|
+
checkbox: "Checkbox",
|
|
34
|
+
select: "Select",
|
|
35
|
+
multiSelect: "Multi-select",
|
|
36
|
+
date: "Date",
|
|
37
|
+
file: "File"
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
select: {
|
|
41
|
+
all: "Select all",
|
|
42
|
+
row: "Select row",
|
|
43
|
+
rowNumber: (rowNumber) => `Select row ${rowNumber}`
|
|
44
|
+
},
|
|
45
|
+
contextMenu: {
|
|
46
|
+
copy: "Copy",
|
|
47
|
+
cut: "Cut",
|
|
48
|
+
clear: "Clear",
|
|
49
|
+
deleteRows: "Delete rows"
|
|
50
|
+
},
|
|
51
|
+
pasteDialog: {
|
|
52
|
+
title: "Do you want to add more rows?",
|
|
53
|
+
description: (rowsNeeded) => `We need ${rowsNeeded} additional ${rowsNeeded === 1 ? "row" : "rows"} to paste everything from your clipboard.`,
|
|
54
|
+
expandTitle: "Create new rows",
|
|
55
|
+
expandDescription: (rowsNeeded) => `Add ${rowsNeeded} new ${rowsNeeded === 1 ? "row" : "rows"} to the table and paste all data`,
|
|
56
|
+
keepTitle: "Keep current rows",
|
|
57
|
+
keepDescription: "Paste only what fits in the existing rows",
|
|
58
|
+
cancel: "Cancel",
|
|
59
|
+
confirm: "Continue"
|
|
60
|
+
},
|
|
61
|
+
rowHeight: {
|
|
62
|
+
label: "Row height",
|
|
63
|
+
short: "Short",
|
|
64
|
+
medium: "Medium",
|
|
65
|
+
tall: "Tall",
|
|
66
|
+
extraTall: "Extra tall"
|
|
67
|
+
},
|
|
68
|
+
view: {
|
|
69
|
+
trigger: "View",
|
|
70
|
+
toggleColumns: "Toggle columns",
|
|
71
|
+
searchPlaceholder: "Search columns...",
|
|
72
|
+
empty: "No columns found."
|
|
73
|
+
},
|
|
74
|
+
sort: {
|
|
75
|
+
trigger: "Sort",
|
|
76
|
+
title: "Sort by",
|
|
77
|
+
emptyTitle: "No sorting applied",
|
|
78
|
+
description: "Modify sorting to organize your rows.",
|
|
79
|
+
emptyDescription: "Add sorting to organize your rows.",
|
|
80
|
+
add: "Add sort",
|
|
81
|
+
reset: "Reset sorting",
|
|
82
|
+
remove: "Remove sort",
|
|
83
|
+
drag: "Drag to reorder",
|
|
84
|
+
fieldPlaceholder: "Search fields...",
|
|
85
|
+
fieldEmpty: "No fields found.",
|
|
86
|
+
asc: "Asc",
|
|
87
|
+
desc: "Desc"
|
|
88
|
+
},
|
|
89
|
+
filter: {
|
|
90
|
+
trigger: "Filter",
|
|
91
|
+
title: "Filter by",
|
|
92
|
+
emptyTitle: "No filters applied",
|
|
93
|
+
description: "Modify filters to narrow down your data.",
|
|
94
|
+
emptyDescription: "Add filters to narrow down your data.",
|
|
95
|
+
add: "Add filter",
|
|
96
|
+
reset: "Reset filters",
|
|
97
|
+
remove: "Remove filter",
|
|
98
|
+
drag: "Drag to reorder",
|
|
99
|
+
where: "Where",
|
|
100
|
+
and: "And",
|
|
101
|
+
fieldPlaceholder: "Search fields...",
|
|
102
|
+
fieldEmpty: "No fields found.",
|
|
103
|
+
valuePlaceholder: "Value",
|
|
104
|
+
rangeStart: "From",
|
|
105
|
+
rangeEnd: "To",
|
|
106
|
+
pickDate: "Pick a date",
|
|
107
|
+
pickRange: "Pick a range",
|
|
108
|
+
optionPlaceholder: "Search options...",
|
|
109
|
+
optionEmpty: "No options found.",
|
|
110
|
+
selectedCount: (count) => `${count} selected`,
|
|
111
|
+
emptyValue: (label) => `${label} filter is empty`,
|
|
112
|
+
/** Nhãn toán tử lọc — xem `filters.ts` để biết toán tử nào dùng cho kiểu ô nào */
|
|
113
|
+
operators: {
|
|
114
|
+
contains: "Contains",
|
|
115
|
+
notContains: "Does not contain",
|
|
116
|
+
equals: "Is",
|
|
117
|
+
notEquals: "Is not",
|
|
118
|
+
startsWith: "Starts with",
|
|
119
|
+
endsWith: "Ends with",
|
|
120
|
+
isEmpty: "Is empty",
|
|
121
|
+
isNotEmpty: "Is not empty",
|
|
122
|
+
lessThan: "Is less than",
|
|
123
|
+
lessThanOrEqual: "Is less than or equal to",
|
|
124
|
+
greaterThan: "Is greater than",
|
|
125
|
+
greaterThanOrEqual: "Is greater than or equal to",
|
|
126
|
+
isBetween: "Is between",
|
|
127
|
+
dateEquals: "Is",
|
|
128
|
+
dateNotEquals: "Is not",
|
|
129
|
+
before: "Is before",
|
|
130
|
+
after: "Is after",
|
|
131
|
+
onOrBefore: "Is on or before",
|
|
132
|
+
onOrAfter: "Is on or after",
|
|
133
|
+
is: "Is",
|
|
134
|
+
isNot: "Is not",
|
|
135
|
+
isAnyOf: "Has any of",
|
|
136
|
+
isNoneOf: "Has none of",
|
|
137
|
+
isTrue: "Is checked",
|
|
138
|
+
isFalse: "Is not checked"
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
cell: {
|
|
142
|
+
longTextPlaceholder: "Enter text...",
|
|
143
|
+
optionSearchPlaceholder: "Search...",
|
|
144
|
+
optionEmpty: "No options found.",
|
|
145
|
+
clearAll: "Clear all",
|
|
146
|
+
invalidUrlTitle: "Invalid URL",
|
|
147
|
+
invalidUrlDescription: "URL contains a dangerous protocol (javascript:, data:, vbscript:, or file:)"
|
|
148
|
+
},
|
|
149
|
+
file: {
|
|
150
|
+
uploadLabel: "Upload",
|
|
151
|
+
dropHere: "Drop files here",
|
|
152
|
+
dragHere: "Drag files here",
|
|
153
|
+
browse: "or click to browse",
|
|
154
|
+
limits: (maxSize, maxFiles) => {
|
|
155
|
+
if (maxSize && maxFiles) return `Max size: ${maxSize} \u2022 Max ${maxFiles} files`;
|
|
156
|
+
if (maxSize) return `Max size: ${maxSize}`;
|
|
157
|
+
if (maxFiles) return `Max ${maxFiles} files`;
|
|
158
|
+
return "Select files to upload";
|
|
159
|
+
},
|
|
160
|
+
count: (count) => `${count} ${count === 1 ? "file" : "files"}`,
|
|
161
|
+
clearAll: "Clear all",
|
|
162
|
+
remove: "Remove file",
|
|
163
|
+
uploading: "Uploading...",
|
|
164
|
+
deleting: "Deleting...",
|
|
165
|
+
tooMany: (maxFiles) => `Only ${maxFiles} ${maxFiles === 1 ? "file" : "files"} allowed`,
|
|
166
|
+
tooLarge: (maxSize) => `File size exceeds ${maxSize}`,
|
|
167
|
+
wrongType: "File type not accepted",
|
|
168
|
+
rejectedOne: (name) => `"${name}" has been rejected`,
|
|
169
|
+
rejectedMany: (name, others) => `"${name}" and ${others} more rejected`,
|
|
170
|
+
uploadFailed: (count) => `Failed to upload ${count} ${count === 1 ? "file" : "files"}`,
|
|
171
|
+
deleteFailed: (name) => `Failed to delete ${name}`,
|
|
172
|
+
deleteFailedMany: "Failed to delete files"
|
|
173
|
+
},
|
|
174
|
+
toast: {
|
|
175
|
+
cellsCopied: (count) => `${count} ${count === 1 ? "cell" : "cells"} copied`,
|
|
176
|
+
copyFailed: "Failed to copy to clipboard",
|
|
177
|
+
cellsCut: (count) => `${count} ${count === 1 ? "cell" : "cells"} cut`,
|
|
178
|
+
cutFailed: "Failed to cut to clipboard",
|
|
179
|
+
cellsPasted: (count) => `${count} ${count === 1 ? "cell" : "cells"} pasted`,
|
|
180
|
+
cellsPastedWithSkipped: (count, skipped) => `${count} ${count === 1 ? "cell" : "cells"} pasted, ${skipped} skipped`,
|
|
181
|
+
pasteSkipped: (skipped) => `${skipped} ${skipped === 1 ? "cell" : "cells"} skipped pasting for invalid data`,
|
|
182
|
+
pasteFailed: "Failed to paste. Please try again.",
|
|
183
|
+
cellsCleared: (count) => `${count} ${count === 1 ? "cell" : "cells"} cleared`,
|
|
184
|
+
rowsDeleted: (count) => `${count} ${count === 1 ? "row" : "rows"} deleted`,
|
|
185
|
+
nothingToUndo: "Nothing left to undo",
|
|
186
|
+
nothingToRedo: "Nothing left to redo",
|
|
187
|
+
undone: (count) => `${count} ${count === 1 ? "action" : "actions"} undone`,
|
|
188
|
+
redone: (count) => `${count} ${count === 1 ? "action" : "actions"} redone`
|
|
189
|
+
},
|
|
190
|
+
/** Giá trị văn bản khi dán boolean vào ô văn bản */
|
|
191
|
+
booleanText: {
|
|
192
|
+
checked: "Yes",
|
|
193
|
+
unchecked: "No"
|
|
194
|
+
},
|
|
195
|
+
shortcuts: {
|
|
196
|
+
trigger: "Keyboard shortcuts",
|
|
197
|
+
title: "Keyboard shortcuts",
|
|
198
|
+
description: "Every shortcut for working through the grid without the mouse.",
|
|
199
|
+
searchPlaceholder: "Search shortcuts...",
|
|
200
|
+
emptyTitle: "No shortcuts found",
|
|
201
|
+
emptyDescription: "Try a different search term.",
|
|
202
|
+
close: "Close",
|
|
203
|
+
groups: {
|
|
204
|
+
navigation: "Navigation",
|
|
205
|
+
selection: "Selection",
|
|
206
|
+
editing: "Editing",
|
|
207
|
+
search: "Search",
|
|
208
|
+
filtering: "Filtering",
|
|
209
|
+
sorting: "Sorting",
|
|
210
|
+
general: "General"
|
|
211
|
+
},
|
|
212
|
+
keys: {
|
|
213
|
+
click: "Click",
|
|
214
|
+
doubleClick: "Double click"
|
|
215
|
+
},
|
|
216
|
+
navigation: {
|
|
217
|
+
move: "Navigate between cells",
|
|
218
|
+
nextCell: "Move to next cell",
|
|
219
|
+
prevCell: "Move to previous cell",
|
|
220
|
+
firstColumn: "Move to first column",
|
|
221
|
+
lastColumn: "Move to last column",
|
|
222
|
+
firstRowSameColumn: "Move to first row (same column)",
|
|
223
|
+
lastRowSameColumn: "Move to last row (same column)",
|
|
224
|
+
firstColumnSameRow: "Move to first column (same row)",
|
|
225
|
+
lastColumnSameRow: "Move to last column (same row)",
|
|
226
|
+
firstCell: "Move to first cell",
|
|
227
|
+
lastCell: "Move to last cell",
|
|
228
|
+
pageUp: "Move up one page",
|
|
229
|
+
pageDown: "Move down one page",
|
|
230
|
+
scrollUp: "Scroll up one page",
|
|
231
|
+
scrollDown: "Scroll down one page",
|
|
232
|
+
scrollLeft: "Scroll left one page of columns",
|
|
233
|
+
scrollRight: "Scroll right one page of columns"
|
|
234
|
+
},
|
|
235
|
+
selection: {
|
|
236
|
+
extend: "Extend selection",
|
|
237
|
+
toTop: "Select to top of table",
|
|
238
|
+
toBottom: "Select to bottom of table",
|
|
239
|
+
toFirstColumn: "Select to first column",
|
|
240
|
+
toLastColumn: "Select to last column",
|
|
241
|
+
all: "Select all cells",
|
|
242
|
+
toggle: "Toggle cell selection",
|
|
243
|
+
range: "Select range",
|
|
244
|
+
clear: "Clear selection"
|
|
245
|
+
},
|
|
246
|
+
editing: {
|
|
247
|
+
start: "Start editing cell",
|
|
248
|
+
insertRow: "Insert row below",
|
|
249
|
+
copy: "Copy selected cells",
|
|
250
|
+
cut: "Cut selected cells",
|
|
251
|
+
paste: "Paste cells",
|
|
252
|
+
clear: "Clear selected cells",
|
|
253
|
+
deleteRows: "Delete selected rows",
|
|
254
|
+
undo: "Undo last action",
|
|
255
|
+
redo: "Redo last action"
|
|
256
|
+
},
|
|
257
|
+
search: {
|
|
258
|
+
open: "Open search",
|
|
259
|
+
next: "Next match",
|
|
260
|
+
prev: "Previous match",
|
|
261
|
+
close: "Close search"
|
|
262
|
+
},
|
|
263
|
+
filtering: {
|
|
264
|
+
toggle: "Toggle the filter menu",
|
|
265
|
+
remove: "Remove filter (when focused)"
|
|
266
|
+
},
|
|
267
|
+
sorting: {
|
|
268
|
+
toggle: "Toggle the sort menu",
|
|
269
|
+
remove: "Remove sort (when focused)"
|
|
270
|
+
},
|
|
271
|
+
general: {
|
|
272
|
+
shortcuts: "Show keyboard shortcuts"
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
};
|
|
276
|
+
export {
|
|
277
|
+
messagesEn
|
|
278
|
+
};
|
|
279
|
+
//# sourceMappingURL=messages-en.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/data-grid/messages-en.ts"],"sourcesContent":["/**\n * Chuỗi hiển thị tiếng ANH của DataGrid — và là BẢN GỐC định nghĩa hình dạng của\n * {@link DataGridMessages}. Mọi bảng ngôn ngữ khác phải khớp đúng bộ khoá này; thiếu một khoá là\n * typecheck đỏ ngay, không phải một chuỗi rỗng lặng lẽ xuất hiện trên giao diện.\n *\n * ⚠ **KHÔNG `as const`.** Có `as const` thì mỗi chuỗi thành một literal type riêng\n * (`\"Add row\"` chứ không phải `string`), và bảng tiếng Việt vĩnh viễn không bao giờ gán được vào\n * `DataGridMessages`. Kiểu rộng mới là thứ dùng được ở đây.\n *\n * ─ VÌ SAO TIẾNG ANH LÀ BẢN GỐC, TRONG KHI CẢ GÓI MẶC ĐỊNH TIẾNG VIỆT ─\n * Đây là NGOẠI LỆ CÓ CHỦ Ý của `DataGrid`, quyết định ở `2.0.0` (xem CHANGELOG). Phần lớn chuỗi\n * ở đây là chuỗi gốc của tablecn — repo mà lưới được port từ đó — nên giữ tiếng Anh làm bản gốc\n * thì mỗi lần đối chiếu ngược với thượng nguồn là so trực tiếp, không phải dịch hai lượt.\n *\n * Quy ước: chuỗi cố định để nguyên; chuỗi có tham số viết thành HÀM (đừng nối chuỗi ở chỗ gọi —\n * trật tự từ của tiếng Việt và tiếng Anh khác nhau). KHÔNG đặt JSX ở đây.\n */\nexport const messagesEn = {\n grid: {\n /** Nhãn mặc định của vùng `role=\"grid\"` (ghi đè bằng prop `aria-label`) */\n label: \"Data grid\",\n addRow: \"Add row\"\n },\n\n search: {\n placeholder: \"Find in table...\",\n label: \"Find in table\",\n prevMatch: \"Previous match\",\n nextMatch: \"Next match\",\n close: \"Close search\",\n matchPosition: (index: number, total: number) => `${index} / ${total}`,\n noResults: \"No results\",\n typeToSearch: \"Type to search\"\n },\n\n column: {\n sortAsc: \"Sort asc\",\n sortDesc: \"Sort desc\",\n removeSort: \"Remove sort\",\n pinLeft: \"Pin to left\",\n unpinLeft: \"Unpin from left\",\n pinRight: \"Pin to right\",\n unpinRight: \"Unpin from right\",\n hide: \"Hide column\",\n resize: (label: string) => `Resize ${label} column`,\n /** Tên kiểu dữ liệu của cột, hiện trong tooltip ở tiêu đề cột */\n variant: {\n shortText: \"Short text\",\n longText: \"Long text\",\n number: \"Number\",\n url: \"URL\",\n checkbox: \"Checkbox\",\n select: \"Select\",\n multiSelect: \"Multi-select\",\n date: \"Date\",\n file: \"File\"\n }\n },\n\n select: {\n all: \"Select all\",\n row: \"Select row\",\n rowNumber: (rowNumber: number) => `Select row ${rowNumber}`\n },\n\n contextMenu: {\n copy: \"Copy\",\n cut: \"Cut\",\n clear: \"Clear\",\n deleteRows: \"Delete rows\"\n },\n\n pasteDialog: {\n title: \"Do you want to add more rows?\",\n description: (rowsNeeded: number) =>\n `We need ${rowsNeeded} additional ${rowsNeeded === 1 ? \"row\" : \"rows\"} to paste everything from your clipboard.`,\n expandTitle: \"Create new rows\",\n expandDescription: (rowsNeeded: number) =>\n `Add ${rowsNeeded} new ${rowsNeeded === 1 ? \"row\" : \"rows\"} to the table and paste all data`,\n keepTitle: \"Keep current rows\",\n keepDescription: \"Paste only what fits in the existing rows\",\n cancel: \"Cancel\",\n confirm: \"Continue\"\n },\n\n rowHeight: {\n label: \"Row height\",\n short: \"Short\",\n medium: \"Medium\",\n tall: \"Tall\",\n extraTall: \"Extra tall\"\n },\n\n view: {\n trigger: \"View\",\n toggleColumns: \"Toggle columns\",\n searchPlaceholder: \"Search columns...\",\n empty: \"No columns found.\"\n },\n\n sort: {\n trigger: \"Sort\",\n title: \"Sort by\",\n emptyTitle: \"No sorting applied\",\n description: \"Modify sorting to organize your rows.\",\n emptyDescription: \"Add sorting to organize your rows.\",\n add: \"Add sort\",\n reset: \"Reset sorting\",\n remove: \"Remove sort\",\n drag: \"Drag to reorder\",\n fieldPlaceholder: \"Search fields...\",\n fieldEmpty: \"No fields found.\",\n asc: \"Asc\",\n desc: \"Desc\"\n },\n\n filter: {\n trigger: \"Filter\",\n title: \"Filter by\",\n emptyTitle: \"No filters applied\",\n description: \"Modify filters to narrow down your data.\",\n emptyDescription: \"Add filters to narrow down your data.\",\n add: \"Add filter\",\n reset: \"Reset filters\",\n remove: \"Remove filter\",\n drag: \"Drag to reorder\",\n where: \"Where\",\n and: \"And\",\n fieldPlaceholder: \"Search fields...\",\n fieldEmpty: \"No fields found.\",\n valuePlaceholder: \"Value\",\n rangeStart: \"From\",\n rangeEnd: \"To\",\n pickDate: \"Pick a date\",\n pickRange: \"Pick a range\",\n optionPlaceholder: \"Search options...\",\n optionEmpty: \"No options found.\",\n selectedCount: (count: number) => `${count} selected`,\n emptyValue: (label: string) => `${label} filter is empty`,\n /** Nhãn toán tử lọc — xem `filters.ts` để biết toán tử nào dùng cho kiểu ô nào */\n operators: {\n contains: \"Contains\",\n notContains: \"Does not contain\",\n equals: \"Is\",\n notEquals: \"Is not\",\n startsWith: \"Starts with\",\n endsWith: \"Ends with\",\n isEmpty: \"Is empty\",\n isNotEmpty: \"Is not empty\",\n lessThan: \"Is less than\",\n lessThanOrEqual: \"Is less than or equal to\",\n greaterThan: \"Is greater than\",\n greaterThanOrEqual: \"Is greater than or equal to\",\n isBetween: \"Is between\",\n dateEquals: \"Is\",\n dateNotEquals: \"Is not\",\n before: \"Is before\",\n after: \"Is after\",\n onOrBefore: \"Is on or before\",\n onOrAfter: \"Is on or after\",\n is: \"Is\",\n isNot: \"Is not\",\n isAnyOf: \"Has any of\",\n isNoneOf: \"Has none of\",\n isTrue: \"Is checked\",\n isFalse: \"Is not checked\"\n }\n },\n\n cell: {\n longTextPlaceholder: \"Enter text...\",\n optionSearchPlaceholder: \"Search...\",\n optionEmpty: \"No options found.\",\n clearAll: \"Clear all\",\n invalidUrlTitle: \"Invalid URL\",\n invalidUrlDescription: \"URL contains a dangerous protocol (javascript:, data:, vbscript:, or file:)\"\n },\n\n file: {\n uploadLabel: \"Upload\",\n dropHere: \"Drop files here\",\n dragHere: \"Drag files here\",\n browse: \"or click to browse\",\n limits: (maxSize?: string, maxFiles?: number) => {\n if (maxSize && maxFiles) return `Max size: ${maxSize} • Max ${maxFiles} files`;\n if (maxSize) return `Max size: ${maxSize}`;\n if (maxFiles) return `Max ${maxFiles} files`;\n return \"Select files to upload\";\n },\n count: (count: number) => `${count} ${count === 1 ? \"file\" : \"files\"}`,\n clearAll: \"Clear all\",\n remove: \"Remove file\",\n uploading: \"Uploading...\",\n deleting: \"Deleting...\",\n tooMany: (maxFiles: number) => `Only ${maxFiles} ${maxFiles === 1 ? \"file\" : \"files\"} allowed`,\n tooLarge: (maxSize: string) => `File size exceeds ${maxSize}`,\n wrongType: \"File type not accepted\",\n rejectedOne: (name: string) => `\"${name}\" has been rejected`,\n rejectedMany: (name: string, others: number) => `\"${name}\" and ${others} more rejected`,\n uploadFailed: (count: number) => `Failed to upload ${count} ${count === 1 ? \"file\" : \"files\"}`,\n deleteFailed: (name: string) => `Failed to delete ${name}`,\n deleteFailedMany: \"Failed to delete files\"\n },\n\n toast: {\n cellsCopied: (count: number) => `${count} ${count === 1 ? \"cell\" : \"cells\"} copied`,\n copyFailed: \"Failed to copy to clipboard\",\n cellsCut: (count: number) => `${count} ${count === 1 ? \"cell\" : \"cells\"} cut`,\n cutFailed: \"Failed to cut to clipboard\",\n cellsPasted: (count: number) => `${count} ${count === 1 ? \"cell\" : \"cells\"} pasted`,\n cellsPastedWithSkipped: (count: number, skipped: number) =>\n `${count} ${count === 1 ? \"cell\" : \"cells\"} pasted, ${skipped} skipped`,\n pasteSkipped: (skipped: number) =>\n `${skipped} ${skipped === 1 ? \"cell\" : \"cells\"} skipped pasting for invalid data`,\n pasteFailed: \"Failed to paste. Please try again.\",\n cellsCleared: (count: number) => `${count} ${count === 1 ? \"cell\" : \"cells\"} cleared`,\n rowsDeleted: (count: number) => `${count} ${count === 1 ? \"row\" : \"rows\"} deleted`,\n nothingToUndo: \"Nothing left to undo\",\n nothingToRedo: \"Nothing left to redo\",\n undone: (count: number) => `${count} ${count === 1 ? \"action\" : \"actions\"} undone`,\n redone: (count: number) => `${count} ${count === 1 ? \"action\" : \"actions\"} redone`\n },\n\n /** Giá trị văn bản khi dán boolean vào ô văn bản */\n booleanText: {\n checked: \"Yes\",\n unchecked: \"No\"\n },\n\n shortcuts: {\n trigger: \"Keyboard shortcuts\",\n title: \"Keyboard shortcuts\",\n description: \"Every shortcut for working through the grid without the mouse.\",\n searchPlaceholder: \"Search shortcuts...\",\n emptyTitle: \"No shortcuts found\",\n emptyDescription: \"Try a different search term.\",\n close: \"Close\",\n groups: {\n navigation: \"Navigation\",\n selection: \"Selection\",\n editing: \"Editing\",\n search: \"Search\",\n filtering: \"Filtering\",\n sorting: \"Sorting\",\n general: \"General\"\n },\n keys: {\n click: \"Click\",\n doubleClick: \"Double click\"\n },\n navigation: {\n move: \"Navigate between cells\",\n nextCell: \"Move to next cell\",\n prevCell: \"Move to previous cell\",\n firstColumn: \"Move to first column\",\n lastColumn: \"Move to last column\",\n firstRowSameColumn: \"Move to first row (same column)\",\n lastRowSameColumn: \"Move to last row (same column)\",\n firstColumnSameRow: \"Move to first column (same row)\",\n lastColumnSameRow: \"Move to last column (same row)\",\n firstCell: \"Move to first cell\",\n lastCell: \"Move to last cell\",\n pageUp: \"Move up one page\",\n pageDown: \"Move down one page\",\n scrollUp: \"Scroll up one page\",\n scrollDown: \"Scroll down one page\",\n scrollLeft: \"Scroll left one page of columns\",\n scrollRight: \"Scroll right one page of columns\"\n },\n selection: {\n extend: \"Extend selection\",\n toTop: \"Select to top of table\",\n toBottom: \"Select to bottom of table\",\n toFirstColumn: \"Select to first column\",\n toLastColumn: \"Select to last column\",\n all: \"Select all cells\",\n toggle: \"Toggle cell selection\",\n range: \"Select range\",\n clear: \"Clear selection\"\n },\n editing: {\n start: \"Start editing cell\",\n insertRow: \"Insert row below\",\n copy: \"Copy selected cells\",\n cut: \"Cut selected cells\",\n paste: \"Paste cells\",\n clear: \"Clear selected cells\",\n deleteRows: \"Delete selected rows\",\n undo: \"Undo last action\",\n redo: \"Redo last action\"\n },\n search: {\n open: \"Open search\",\n next: \"Next match\",\n prev: \"Previous match\",\n close: \"Close search\"\n },\n filtering: {\n toggle: \"Toggle the filter menu\",\n remove: \"Remove filter (when focused)\"\n },\n sorting: {\n toggle: \"Toggle the sort menu\",\n remove: \"Remove sort (when focused)\"\n },\n general: {\n shortcuts: \"Show keyboard shortcuts\"\n }\n }\n};\n\n/**\n * Hình dạng của một bảng ngôn ngữ. Suy ra từ bảng tiếng Anh nên không có chỗ nào để hai thứ\n * lệch nhau: thêm một khoá vào `messagesEn` là mọi bảng khác đỏ cho tới khi dịch xong.\n */\nexport type DataGridMessages = typeof messagesEn;\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { DataGridMessages } from './messages-en.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Bảng tiếng VIỆT của DataGrid. Hình dạng do `messages-en.ts` quy định — chú thích `: DataGridMessages`
|
|
5
|
+
* ở đây là thứ bắt lỗi: thêm khoá mới ở bản tiếng Anh mà quên dịch thì typecheck đỏ ngay, thay vì
|
|
6
|
+
* một chuỗi `undefined` lọt ra giao diện lúc chạy.
|
|
7
|
+
*
|
|
8
|
+
* ⚠ Bản này KHÔNG còn là mặc định từ `2.0.0`. Muốn nó thì truyền `locale="vi"` (xem README §5).
|
|
9
|
+
*/
|
|
10
|
+
declare const messagesVi: DataGridMessages;
|
|
11
|
+
|
|
12
|
+
export { messagesVi };
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
const messagesVi = {
|
|
2
|
+
grid: {
|
|
3
|
+
/** Nhãn mặc định của vùng `role="grid"` (ghi đè bằng prop `aria-label`) */
|
|
4
|
+
label: "B\u1EA3ng d\u1EEF li\u1EC7u",
|
|
5
|
+
addRow: "Th\xEAm d\xF2ng"
|
|
6
|
+
},
|
|
7
|
+
search: {
|
|
8
|
+
placeholder: "T\xECm trong b\u1EA3ng...",
|
|
9
|
+
label: "T\xECm trong b\u1EA3ng",
|
|
10
|
+
prevMatch: "K\u1EBFt qu\u1EA3 tr\u01B0\u1EDBc",
|
|
11
|
+
nextMatch: "K\u1EBFt qu\u1EA3 sau",
|
|
12
|
+
close: "\u0110\xF3ng t\xECm ki\u1EBFm",
|
|
13
|
+
matchPosition: (index, total) => `${index} / ${total}`,
|
|
14
|
+
noResults: "Kh\xF4ng c\xF3 k\u1EBFt qu\u1EA3",
|
|
15
|
+
typeToSearch: "G\xF5 \u0111\u1EC3 t\xECm"
|
|
16
|
+
},
|
|
17
|
+
column: {
|
|
18
|
+
sortAsc: "S\u1EAFp x\u1EBFp t\u0103ng d\u1EA7n",
|
|
19
|
+
sortDesc: "S\u1EAFp x\u1EBFp gi\u1EA3m d\u1EA7n",
|
|
20
|
+
removeSort: "B\u1ECF s\u1EAFp x\u1EBFp",
|
|
21
|
+
pinLeft: "Ghim sang tr\xE1i",
|
|
22
|
+
unpinLeft: "B\u1ECF ghim tr\xE1i",
|
|
23
|
+
pinRight: "Ghim sang ph\u1EA3i",
|
|
24
|
+
unpinRight: "B\u1ECF ghim ph\u1EA3i",
|
|
25
|
+
hide: "\u1EA8n c\u1ED9t",
|
|
26
|
+
resize: (label) => `\u0110\u1ED5i \u0111\u1ED9 r\u1ED9ng c\u1ED9t ${label}`,
|
|
27
|
+
/** Tên kiểu dữ liệu của cột, hiện trong tooltip ở tiêu đề cột */
|
|
28
|
+
variant: {
|
|
29
|
+
shortText: "V\u0103n b\u1EA3n ng\u1EAFn",
|
|
30
|
+
longText: "V\u0103n b\u1EA3n d\xE0i",
|
|
31
|
+
number: "S\u1ED1",
|
|
32
|
+
url: "Li\xEAn k\u1EBFt",
|
|
33
|
+
checkbox: "\xD4 \u0111\xE1nh d\u1EA5u",
|
|
34
|
+
select: "Ch\u1ECDn m\u1ED9t",
|
|
35
|
+
multiSelect: "Ch\u1ECDn nhi\u1EC1u",
|
|
36
|
+
date: "Ng\xE0y",
|
|
37
|
+
file: "T\u1EC7p"
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
select: {
|
|
41
|
+
all: "Ch\u1ECDn t\u1EA5t c\u1EA3",
|
|
42
|
+
row: "Ch\u1ECDn d\xF2ng",
|
|
43
|
+
rowNumber: (rowNumber) => `Ch\u1ECDn d\xF2ng ${rowNumber}`
|
|
44
|
+
},
|
|
45
|
+
contextMenu: {
|
|
46
|
+
copy: "Sao ch\xE9p",
|
|
47
|
+
cut: "C\u1EAFt",
|
|
48
|
+
clear: "Xo\xE1 n\u1ED9i dung",
|
|
49
|
+
deleteRows: "Xo\xE1 d\xF2ng"
|
|
50
|
+
},
|
|
51
|
+
pasteDialog: {
|
|
52
|
+
title: "Th\xEAm d\xF2ng \u0111\u1EC3 d\xE1n h\u1EBFt d\u1EEF li\u1EC7u?",
|
|
53
|
+
description: (rowsNeeded) => `C\u1EA7n th\xEAm ${rowsNeeded} d\xF2ng n\u1EEFa \u0111\u1EC3 d\xE1n h\u1EBFt n\u1ED9i dung \u0111ang c\xF3 trong clipboard.`,
|
|
54
|
+
expandTitle: "T\u1EA1o d\xF2ng m\u1EDBi",
|
|
55
|
+
expandDescription: (rowsNeeded) => `Th\xEAm ${rowsNeeded} d\xF2ng v\xE0o b\u1EA3ng r\u1ED3i d\xE1n to\xE0n b\u1ED9 d\u1EEF li\u1EC7u`,
|
|
56
|
+
keepTitle: "Gi\u1EEF nguy\xEAn s\u1ED1 d\xF2ng",
|
|
57
|
+
keepDescription: "Ch\u1EC9 d\xE1n ph\u1EA7n v\u1EEBa v\u1EDBi c\xE1c d\xF2ng hi\u1EC7n c\xF3",
|
|
58
|
+
cancel: "Hu\u1EF7",
|
|
59
|
+
confirm: "Ti\u1EBFp t\u1EE5c"
|
|
60
|
+
},
|
|
61
|
+
rowHeight: {
|
|
62
|
+
label: "Chi\u1EC1u cao d\xF2ng",
|
|
63
|
+
short: "Th\u1EA5p",
|
|
64
|
+
medium: "V\u1EEBa",
|
|
65
|
+
tall: "Cao",
|
|
66
|
+
extraTall: "R\u1EA5t cao"
|
|
67
|
+
},
|
|
68
|
+
view: {
|
|
69
|
+
trigger: "Hi\u1EC3n th\u1ECB",
|
|
70
|
+
toggleColumns: "\u1EA8n/hi\u1EC7n c\u1ED9t",
|
|
71
|
+
searchPlaceholder: "T\xECm c\u1ED9t...",
|
|
72
|
+
empty: "Kh\xF4ng c\xF3 c\u1ED9t ph\xF9 h\u1EE3p."
|
|
73
|
+
},
|
|
74
|
+
sort: {
|
|
75
|
+
trigger: "S\u1EAFp x\u1EBFp",
|
|
76
|
+
title: "S\u1EAFp x\u1EBFp theo",
|
|
77
|
+
emptyTitle: "Ch\u01B0a s\u1EAFp x\u1EBFp",
|
|
78
|
+
description: "\u0110\u1ED5i ti\xEAu ch\xED s\u1EAFp x\u1EBFp cho danh s\xE1ch.",
|
|
79
|
+
emptyDescription: "Th\xEAm ti\xEAu ch\xED \u0111\u1EC3 s\u1EAFp x\u1EBFp danh s\xE1ch.",
|
|
80
|
+
add: "Th\xEAm s\u1EAFp x\u1EBFp",
|
|
81
|
+
reset: "B\u1ECF s\u1EAFp x\u1EBFp",
|
|
82
|
+
remove: "Xo\xE1 ti\xEAu ch\xED",
|
|
83
|
+
drag: "K\xE9o \u0111\u1EC3 \u0111\u1ED5i th\u1EE9 t\u1EF1",
|
|
84
|
+
fieldPlaceholder: "T\xECm tr\u01B0\u1EDDng...",
|
|
85
|
+
fieldEmpty: "Kh\xF4ng c\xF3 tr\u01B0\u1EDDng ph\xF9 h\u1EE3p.",
|
|
86
|
+
asc: "T\u0103ng d\u1EA7n",
|
|
87
|
+
desc: "Gi\u1EA3m d\u1EA7n"
|
|
88
|
+
},
|
|
89
|
+
filter: {
|
|
90
|
+
trigger: "L\u1ECDc",
|
|
91
|
+
title: "L\u1ECDc theo",
|
|
92
|
+
emptyTitle: "Ch\u01B0a c\xF3 b\u1ED9 l\u1ECDc",
|
|
93
|
+
description: "\u0110\u1ED5i \u0111i\u1EC1u ki\u1EC7n l\u1ECDc \u0111\u1EC3 thu h\u1EB9p d\u1EEF li\u1EC7u.",
|
|
94
|
+
emptyDescription: "Th\xEAm \u0111i\u1EC1u ki\u1EC7n l\u1ECDc \u0111\u1EC3 thu h\u1EB9p d\u1EEF li\u1EC7u.",
|
|
95
|
+
add: "Th\xEAm b\u1ED9 l\u1ECDc",
|
|
96
|
+
reset: "Xo\xE1 b\u1ED9 l\u1ECDc",
|
|
97
|
+
remove: "Xo\xE1 \u0111i\u1EC1u ki\u1EC7n",
|
|
98
|
+
drag: "K\xE9o \u0111\u1EC3 \u0111\u1ED5i th\u1EE9 t\u1EF1",
|
|
99
|
+
where: "Khi",
|
|
100
|
+
and: "V\xE0",
|
|
101
|
+
fieldPlaceholder: "T\xECm tr\u01B0\u1EDDng...",
|
|
102
|
+
fieldEmpty: "Kh\xF4ng c\xF3 tr\u01B0\u1EDDng ph\xF9 h\u1EE3p.",
|
|
103
|
+
valuePlaceholder: "Gi\xE1 tr\u1ECB",
|
|
104
|
+
rangeStart: "T\u1EEB",
|
|
105
|
+
rangeEnd: "\u0110\u1EBFn",
|
|
106
|
+
pickDate: "Ch\u1ECDn ng\xE0y",
|
|
107
|
+
pickRange: "Ch\u1ECDn kho\u1EA3ng ng\xE0y",
|
|
108
|
+
optionPlaceholder: "T\xECm l\u1EF1a ch\u1ECDn...",
|
|
109
|
+
optionEmpty: "Kh\xF4ng c\xF3 l\u1EF1a ch\u1ECDn ph\xF9 h\u1EE3p.",
|
|
110
|
+
selectedCount: (count) => `\u0110\xE3 ch\u1ECDn ${count}`,
|
|
111
|
+
emptyValue: (label) => `B\u1ED9 l\u1ECDc ${label} ch\u01B0a c\u1EA7n gi\xE1 tr\u1ECB`,
|
|
112
|
+
/** Nhãn toán tử lọc — xem `filters.ts` để biết toán tử nào dùng cho kiểu ô nào */
|
|
113
|
+
operators: {
|
|
114
|
+
contains: "Ch\u1EE9a",
|
|
115
|
+
notContains: "Kh\xF4ng ch\u1EE9a",
|
|
116
|
+
equals: "B\u1EB1ng",
|
|
117
|
+
notEquals: "Kh\xE1c",
|
|
118
|
+
startsWith: "B\u1EAFt \u0111\u1EA7u b\u1EB1ng",
|
|
119
|
+
endsWith: "K\u1EBFt th\xFAc b\u1EB1ng",
|
|
120
|
+
isEmpty: "\u0110ang tr\u1ED1ng",
|
|
121
|
+
isNotEmpty: "Kh\xF4ng tr\u1ED1ng",
|
|
122
|
+
lessThan: "Nh\u1ECF h\u01A1n",
|
|
123
|
+
lessThanOrEqual: "Nh\u1ECF h\u01A1n ho\u1EB7c b\u1EB1ng",
|
|
124
|
+
greaterThan: "L\u1EDBn h\u01A1n",
|
|
125
|
+
greaterThanOrEqual: "L\u1EDBn h\u01A1n ho\u1EB7c b\u1EB1ng",
|
|
126
|
+
isBetween: "Trong kho\u1EA3ng",
|
|
127
|
+
dateEquals: "\u0110\xFAng ng\xE0y",
|
|
128
|
+
dateNotEquals: "Kh\xE1c ng\xE0y",
|
|
129
|
+
before: "Tr\u01B0\u1EDBc ng\xE0y",
|
|
130
|
+
after: "Sau ng\xE0y",
|
|
131
|
+
onOrBefore: "V\xE0o ho\u1EB7c tr\u01B0\u1EDBc ng\xE0y",
|
|
132
|
+
onOrAfter: "V\xE0o ho\u1EB7c sau ng\xE0y",
|
|
133
|
+
is: "L\xE0",
|
|
134
|
+
isNot: "Kh\xF4ng l\xE0",
|
|
135
|
+
isAnyOf: "L\xE0 m\u1ED9t trong",
|
|
136
|
+
isNoneOf: "Kh\xF4ng l\xE0 b\u1EA5t k\u1EF3",
|
|
137
|
+
isTrue: "C\xF3 \u0111\xE1nh d\u1EA5u",
|
|
138
|
+
isFalse: "Kh\xF4ng \u0111\xE1nh d\u1EA5u"
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
cell: {
|
|
142
|
+
longTextPlaceholder: "Nh\u1EADp n\u1ED9i dung...",
|
|
143
|
+
optionSearchPlaceholder: "T\xECm...",
|
|
144
|
+
optionEmpty: "Kh\xF4ng c\xF3 l\u1EF1a ch\u1ECDn ph\xF9 h\u1EE3p.",
|
|
145
|
+
clearAll: "B\u1ECF ch\u1ECDn h\u1EBFt",
|
|
146
|
+
invalidUrlTitle: "Li\xEAn k\u1EBFt kh\xF4ng h\u1EE3p l\u1EC7",
|
|
147
|
+
invalidUrlDescription: "Li\xEAn k\u1EBFt ch\u1EE9a giao th\u1EE9c nguy hi\u1EC3m (javascript:, data:, vbscript: ho\u1EB7c file:)"
|
|
148
|
+
},
|
|
149
|
+
file: {
|
|
150
|
+
uploadLabel: "T\u1EA3i t\u1EC7p l\xEAn",
|
|
151
|
+
dropHere: "Th\u1EA3 t\u1EC7p v\xE0o \u0111\xE2y",
|
|
152
|
+
dragHere: "K\xE9o t\u1EC7p v\xE0o \u0111\xE2y",
|
|
153
|
+
browse: "ho\u1EB7c b\u1EA5m \u0111\u1EC3 ch\u1ECDn t\u1EC7p",
|
|
154
|
+
limits: (maxSize, maxFiles) => {
|
|
155
|
+
if (maxSize && maxFiles) return `T\u1ED1i \u0111a ${maxSize} \u2022 T\u1ED1i \u0111a ${maxFiles} t\u1EC7p`;
|
|
156
|
+
if (maxSize) return `T\u1ED1i \u0111a ${maxSize}`;
|
|
157
|
+
if (maxFiles) return `T\u1ED1i \u0111a ${maxFiles} t\u1EC7p`;
|
|
158
|
+
return "Ch\u1ECDn t\u1EC7p \u0111\u1EC3 t\u1EA3i l\xEAn";
|
|
159
|
+
},
|
|
160
|
+
count: (count) => `${count} t\u1EC7p`,
|
|
161
|
+
clearAll: "Xo\xE1 h\u1EBFt",
|
|
162
|
+
remove: "Xo\xE1 t\u1EC7p",
|
|
163
|
+
uploading: "\u0110ang t\u1EA3i l\xEAn...",
|
|
164
|
+
deleting: "\u0110ang xo\xE1...",
|
|
165
|
+
tooMany: (maxFiles) => `Ch\u1EC9 cho ph\xE9p t\u1ED1i \u0111a ${maxFiles} t\u1EC7p`,
|
|
166
|
+
tooLarge: (maxSize) => `T\u1EC7p v\u01B0\u1EE3t qu\xE1 ${maxSize}`,
|
|
167
|
+
wrongType: "Kh\xF4ng ch\u1EA5p nh\u1EADn \u0111\u1ECBnh d\u1EA1ng t\u1EC7p n\xE0y",
|
|
168
|
+
rejectedOne: (name) => `\u0110\xE3 b\u1ECF qua "${name}"`,
|
|
169
|
+
rejectedMany: (name, others) => `\u0110\xE3 b\u1ECF qua "${name}" v\xE0 ${others} t\u1EC7p kh\xE1c`,
|
|
170
|
+
uploadFailed: (count) => `Kh\xF4ng t\u1EA3i l\xEAn \u0111\u01B0\u1EE3c ${count} t\u1EC7p`,
|
|
171
|
+
deleteFailed: (name) => `Kh\xF4ng xo\xE1 \u0111\u01B0\u1EE3c ${name}`,
|
|
172
|
+
deleteFailedMany: "Kh\xF4ng xo\xE1 \u0111\u01B0\u1EE3c t\u1EC7p"
|
|
173
|
+
},
|
|
174
|
+
toast: {
|
|
175
|
+
cellsCopied: (count) => `\u0110\xE3 sao ch\xE9p ${count} \xF4`,
|
|
176
|
+
copyFailed: "Kh\xF4ng sao ch\xE9p \u0111\u01B0\u1EE3c v\xE0o clipboard",
|
|
177
|
+
cellsCut: (count) => `\u0110\xE3 c\u1EAFt ${count} \xF4`,
|
|
178
|
+
cutFailed: "Kh\xF4ng c\u1EAFt \u0111\u01B0\u1EE3c v\xE0o clipboard",
|
|
179
|
+
cellsPasted: (count) => `\u0110\xE3 d\xE1n ${count} \xF4`,
|
|
180
|
+
cellsPastedWithSkipped: (count, skipped) => `\u0110\xE3 d\xE1n ${count} \xF4, b\u1ECF qua ${skipped} \xF4`,
|
|
181
|
+
pasteSkipped: (skipped) => `B\u1ECF qua ${skipped} \xF4 do d\u1EEF li\u1EC7u kh\xF4ng h\u1EE3p l\u1EC7`,
|
|
182
|
+
pasteFailed: "Kh\xF4ng d\xE1n \u0111\u01B0\u1EE3c. Vui l\xF2ng th\u1EED l\u1EA1i.",
|
|
183
|
+
cellsCleared: (count) => `\u0110\xE3 xo\xE1 n\u1ED9i dung ${count} \xF4`,
|
|
184
|
+
rowsDeleted: (count) => `\u0110\xE3 xo\xE1 ${count} d\xF2ng`,
|
|
185
|
+
nothingToUndo: "Kh\xF4ng c\xF2n thao t\xE1c \u0111\u1EC3 ho\xE0n t\xE1c",
|
|
186
|
+
nothingToRedo: "Kh\xF4ng c\xF2n thao t\xE1c \u0111\u1EC3 l\xE0m l\u1EA1i",
|
|
187
|
+
undone: (count) => `\u0110\xE3 ho\xE0n t\xE1c ${count} thao t\xE1c`,
|
|
188
|
+
redone: (count) => `\u0110\xE3 l\xE0m l\u1EA1i ${count} thao t\xE1c`
|
|
189
|
+
},
|
|
190
|
+
/** Giá trị văn bản khi dán boolean vào ô văn bản */
|
|
191
|
+
booleanText: {
|
|
192
|
+
checked: "C\xF3",
|
|
193
|
+
unchecked: "Kh\xF4ng"
|
|
194
|
+
},
|
|
195
|
+
shortcuts: {
|
|
196
|
+
trigger: "Ph\xEDm t\u1EAFt",
|
|
197
|
+
title: "Ph\xEDm t\u1EAFt",
|
|
198
|
+
description: "Danh s\xE1ch ph\xEDm t\u1EAFt \u0111\u1EC3 thao t\xE1c nhanh v\u1EDBi b\u1EA3ng d\u1EEF li\u1EC7u.",
|
|
199
|
+
searchPlaceholder: "T\xECm ph\xEDm t\u1EAFt...",
|
|
200
|
+
emptyTitle: "Kh\xF4ng t\xECm th\u1EA5y ph\xEDm t\u1EAFt",
|
|
201
|
+
emptyDescription: "Th\u1EED t\xECm v\u1EDBi t\u1EEB kho\xE1 kh\xE1c.",
|
|
202
|
+
close: "\u0110\xF3ng",
|
|
203
|
+
groups: {
|
|
204
|
+
navigation: "Di chuy\u1EC3n",
|
|
205
|
+
selection: "Ch\u1ECDn \xF4",
|
|
206
|
+
editing: "S\u1EEDa d\u1EEF li\u1EC7u",
|
|
207
|
+
search: "T\xECm ki\u1EBFm",
|
|
208
|
+
filtering: "L\u1ECDc",
|
|
209
|
+
sorting: "S\u1EAFp x\u1EBFp",
|
|
210
|
+
general: "Chung"
|
|
211
|
+
},
|
|
212
|
+
keys: {
|
|
213
|
+
click: "Nh\u1EA5p chu\u1ED9t",
|
|
214
|
+
doubleClick: "Nh\u1EA5p \u0111\xFAp"
|
|
215
|
+
},
|
|
216
|
+
navigation: {
|
|
217
|
+
move: "Di chuy\u1EC3n gi\u1EEFa c\xE1c \xF4",
|
|
218
|
+
nextCell: "Sang \xF4 k\u1EBF ti\u1EBFp",
|
|
219
|
+
prevCell: "V\u1EC1 \xF4 tr\u01B0\u1EDBc \u0111\xF3",
|
|
220
|
+
firstColumn: "V\u1EC1 c\u1ED9t \u0111\u1EA7u",
|
|
221
|
+
lastColumn: "T\u1EDBi c\u1ED9t cu\u1ED1i",
|
|
222
|
+
firstRowSameColumn: "V\u1EC1 d\xF2ng \u0111\u1EA7u (c\xF9ng c\u1ED9t)",
|
|
223
|
+
lastRowSameColumn: "T\u1EDBi d\xF2ng cu\u1ED1i (c\xF9ng c\u1ED9t)",
|
|
224
|
+
firstColumnSameRow: "V\u1EC1 c\u1ED9t \u0111\u1EA7u (c\xF9ng d\xF2ng)",
|
|
225
|
+
lastColumnSameRow: "T\u1EDBi c\u1ED9t cu\u1ED1i (c\xF9ng d\xF2ng)",
|
|
226
|
+
firstCell: "V\u1EC1 \xF4 \u0111\u1EA7u b\u1EA3ng",
|
|
227
|
+
lastCell: "T\u1EDBi \xF4 cu\u1ED1i b\u1EA3ng",
|
|
228
|
+
pageUp: "L\xEAn m\u1ED9t trang",
|
|
229
|
+
pageDown: "Xu\u1ED1ng m\u1ED9t trang",
|
|
230
|
+
scrollUp: "Cu\u1ED9n l\xEAn m\u1ED9t trang",
|
|
231
|
+
scrollDown: "Cu\u1ED9n xu\u1ED1ng m\u1ED9t trang",
|
|
232
|
+
scrollLeft: "Cu\u1ED9n sang tr\xE1i m\u1ED9t trang c\u1ED9t",
|
|
233
|
+
scrollRight: "Cu\u1ED9n sang ph\u1EA3i m\u1ED9t trang c\u1ED9t"
|
|
234
|
+
},
|
|
235
|
+
selection: {
|
|
236
|
+
extend: "M\u1EDF r\u1ED9ng v\xF9ng ch\u1ECDn",
|
|
237
|
+
toTop: "Ch\u1ECDn t\u1EDBi \u0111\u1EA7u b\u1EA3ng",
|
|
238
|
+
toBottom: "Ch\u1ECDn t\u1EDBi cu\u1ED1i b\u1EA3ng",
|
|
239
|
+
toFirstColumn: "Ch\u1ECDn t\u1EDBi c\u1ED9t \u0111\u1EA7u",
|
|
240
|
+
toLastColumn: "Ch\u1ECDn t\u1EDBi c\u1ED9t cu\u1ED1i",
|
|
241
|
+
all: "Ch\u1ECDn to\xE0n b\u1ED9 \xF4",
|
|
242
|
+
toggle: "Th\xEAm/b\u1EDBt m\u1ED9t \xF4 kh\u1ECFi v\xF9ng ch\u1ECDn",
|
|
243
|
+
range: "Ch\u1ECDn c\u1EA3 v\xF9ng",
|
|
244
|
+
clear: "B\u1ECF ch\u1ECDn"
|
|
245
|
+
},
|
|
246
|
+
editing: {
|
|
247
|
+
start: "B\u1EAFt \u0111\u1EA7u s\u1EEDa \xF4",
|
|
248
|
+
insertRow: "Ch\xE8n d\xF2ng b\xEAn d\u01B0\u1EDBi",
|
|
249
|
+
copy: "Sao ch\xE9p \xF4 \u0111ang ch\u1ECDn",
|
|
250
|
+
cut: "C\u1EAFt \xF4 \u0111ang ch\u1ECDn",
|
|
251
|
+
paste: "D\xE1n v\xE0o \xF4",
|
|
252
|
+
clear: "Xo\xE1 n\u1ED9i dung \xF4 \u0111ang ch\u1ECDn",
|
|
253
|
+
deleteRows: "Xo\xE1 d\xF2ng \u0111ang ch\u1ECDn",
|
|
254
|
+
undo: "Ho\xE0n t\xE1c",
|
|
255
|
+
redo: "L\xE0m l\u1EA1i"
|
|
256
|
+
},
|
|
257
|
+
search: {
|
|
258
|
+
open: "M\u1EDF \xF4 t\xECm ki\u1EBFm",
|
|
259
|
+
next: "K\u1EBFt qu\u1EA3 k\u1EBF ti\u1EBFp",
|
|
260
|
+
prev: "K\u1EBFt qu\u1EA3 tr\u01B0\u1EDBc \u0111\xF3",
|
|
261
|
+
close: "\u0110\xF3ng t\xECm ki\u1EBFm"
|
|
262
|
+
},
|
|
263
|
+
filtering: {
|
|
264
|
+
toggle: "M\u1EDF/\u0111\xF3ng menu l\u1ECDc",
|
|
265
|
+
remove: "Xo\xE1 \u0111i\u1EC1u ki\u1EC7n l\u1ECDc (khi \u0111ang ch\u1ECDn)"
|
|
266
|
+
},
|
|
267
|
+
sorting: {
|
|
268
|
+
toggle: "M\u1EDF/\u0111\xF3ng menu s\u1EAFp x\u1EBFp",
|
|
269
|
+
remove: "Xo\xE1 ti\xEAu ch\xED s\u1EAFp x\u1EBFp (khi \u0111ang ch\u1ECDn)"
|
|
270
|
+
},
|
|
271
|
+
general: {
|
|
272
|
+
shortcuts: "Xem danh s\xE1ch ph\xEDm t\u1EAFt"
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
};
|
|
276
|
+
export {
|
|
277
|
+
messagesVi
|
|
278
|
+
};
|
|
279
|
+
//# sourceMappingURL=messages-vi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/data-grid/messages-vi.ts"],"sourcesContent":["import type { DataGridMessages } from \"./messages-en.js\";\n\n/**\n * Bảng tiếng VIỆT của DataGrid. Hình dạng do `messages-en.ts` quy định — chú thích `: DataGridMessages`\n * ở đây là thứ bắt lỗi: thêm khoá mới ở bản tiếng Anh mà quên dịch thì typecheck đỏ ngay, thay vì\n * một chuỗi `undefined` lọt ra giao diện lúc chạy.\n *\n * ⚠ Bản này KHÔNG còn là mặc định từ `2.0.0`. Muốn nó thì truyền `locale=\"vi\"` (xem README §5).\n */\nexport const messagesVi: DataGridMessages = {\n grid: {\n /** Nhãn mặc định của vùng `role=\"grid\"` (ghi đè bằng prop `aria-label`) */\n label: \"Bảng dữ liệu\",\n addRow: \"Thêm dòng\"\n },\n\n search: {\n placeholder: \"Tìm trong bảng...\",\n label: \"Tìm trong bảng\",\n prevMatch: \"Kết quả trước\",\n nextMatch: \"Kết quả sau\",\n close: \"Đóng tìm kiếm\",\n matchPosition: (index: number, total: number) => `${index} / ${total}`,\n noResults: \"Không có kết quả\",\n typeToSearch: \"Gõ để tìm\"\n },\n\n column: {\n sortAsc: \"Sắp xếp tăng dần\",\n sortDesc: \"Sắp xếp giảm dần\",\n removeSort: \"Bỏ sắp xếp\",\n pinLeft: \"Ghim sang trái\",\n unpinLeft: \"Bỏ ghim trái\",\n pinRight: \"Ghim sang phải\",\n unpinRight: \"Bỏ ghim phải\",\n hide: \"Ẩn cột\",\n resize: (label: string) => `Đổi độ rộng cột ${label}`,\n /** Tên kiểu dữ liệu của cột, hiện trong tooltip ở tiêu đề cột */\n variant: {\n shortText: \"Văn bản ngắn\",\n longText: \"Văn bản dài\",\n number: \"Số\",\n url: \"Liên kết\",\n checkbox: \"Ô đánh dấu\",\n select: \"Chọn một\",\n multiSelect: \"Chọn nhiều\",\n date: \"Ngày\",\n file: \"Tệp\"\n }\n },\n\n select: {\n all: \"Chọn tất cả\",\n row: \"Chọn dòng\",\n rowNumber: (rowNumber: number) => `Chọn dòng ${rowNumber}`\n },\n\n contextMenu: {\n copy: \"Sao chép\",\n cut: \"Cắt\",\n clear: \"Xoá nội dung\",\n deleteRows: \"Xoá dòng\"\n },\n\n pasteDialog: {\n title: \"Thêm dòng để dán hết dữ liệu?\",\n description: (rowsNeeded: number) => `Cần thêm ${rowsNeeded} dòng nữa để dán hết nội dung đang có trong clipboard.`,\n expandTitle: \"Tạo dòng mới\",\n expandDescription: (rowsNeeded: number) => `Thêm ${rowsNeeded} dòng vào bảng rồi dán toàn bộ dữ liệu`,\n keepTitle: \"Giữ nguyên số dòng\",\n keepDescription: \"Chỉ dán phần vừa với các dòng hiện có\",\n cancel: \"Huỷ\",\n confirm: \"Tiếp tục\"\n },\n\n rowHeight: {\n label: \"Chiều cao dòng\",\n short: \"Thấp\",\n medium: \"Vừa\",\n tall: \"Cao\",\n extraTall: \"Rất cao\"\n },\n\n view: {\n trigger: \"Hiển thị\",\n toggleColumns: \"Ẩn/hiện cột\",\n searchPlaceholder: \"Tìm cột...\",\n empty: \"Không có cột phù hợp.\"\n },\n\n sort: {\n trigger: \"Sắp xếp\",\n title: \"Sắp xếp theo\",\n emptyTitle: \"Chưa sắp xếp\",\n description: \"Đổi tiêu chí sắp xếp cho danh sách.\",\n emptyDescription: \"Thêm tiêu chí để sắp xếp danh sách.\",\n add: \"Thêm sắp xếp\",\n reset: \"Bỏ sắp xếp\",\n remove: \"Xoá tiêu chí\",\n drag: \"Kéo để đổi thứ tự\",\n fieldPlaceholder: \"Tìm trường...\",\n fieldEmpty: \"Không có trường phù hợp.\",\n asc: \"Tăng dần\",\n desc: \"Giảm dần\"\n },\n\n filter: {\n trigger: \"Lọc\",\n title: \"Lọc theo\",\n emptyTitle: \"Chưa có bộ lọc\",\n description: \"Đổi điều kiện lọc để thu hẹp dữ liệu.\",\n emptyDescription: \"Thêm điều kiện lọc để thu hẹp dữ liệu.\",\n add: \"Thêm bộ lọc\",\n reset: \"Xoá bộ lọc\",\n remove: \"Xoá điều kiện\",\n drag: \"Kéo để đổi thứ tự\",\n where: \"Khi\",\n and: \"Và\",\n fieldPlaceholder: \"Tìm trường...\",\n fieldEmpty: \"Không có trường phù hợp.\",\n valuePlaceholder: \"Giá trị\",\n rangeStart: \"Từ\",\n rangeEnd: \"Đến\",\n pickDate: \"Chọn ngày\",\n pickRange: \"Chọn khoảng ngày\",\n optionPlaceholder: \"Tìm lựa chọn...\",\n optionEmpty: \"Không có lựa chọn phù hợp.\",\n selectedCount: (count: number) => `Đã chọn ${count}`,\n emptyValue: (label: string) => `Bộ lọc ${label} chưa cần giá trị`,\n /** Nhãn toán tử lọc — xem `filters.ts` để biết toán tử nào dùng cho kiểu ô nào */\n operators: {\n contains: \"Chứa\",\n notContains: \"Không chứa\",\n equals: \"Bằng\",\n notEquals: \"Khác\",\n startsWith: \"Bắt đầu bằng\",\n endsWith: \"Kết thúc bằng\",\n isEmpty: \"Đang trống\",\n isNotEmpty: \"Không trống\",\n lessThan: \"Nhỏ hơn\",\n lessThanOrEqual: \"Nhỏ hơn hoặc bằng\",\n greaterThan: \"Lớn hơn\",\n greaterThanOrEqual: \"Lớn hơn hoặc bằng\",\n isBetween: \"Trong khoảng\",\n dateEquals: \"Đúng ngày\",\n dateNotEquals: \"Khác ngày\",\n before: \"Trước ngày\",\n after: \"Sau ngày\",\n onOrBefore: \"Vào hoặc trước ngày\",\n onOrAfter: \"Vào hoặc sau ngày\",\n is: \"Là\",\n isNot: \"Không là\",\n isAnyOf: \"Là một trong\",\n isNoneOf: \"Không là bất kỳ\",\n isTrue: \"Có đánh dấu\",\n isFalse: \"Không đánh dấu\"\n }\n },\n\n cell: {\n longTextPlaceholder: \"Nhập nội dung...\",\n optionSearchPlaceholder: \"Tìm...\",\n optionEmpty: \"Không có lựa chọn phù hợp.\",\n clearAll: \"Bỏ chọn hết\",\n invalidUrlTitle: \"Liên kết không hợp lệ\",\n invalidUrlDescription: \"Liên kết chứa giao thức nguy hiểm (javascript:, data:, vbscript: hoặc file:)\"\n },\n\n file: {\n uploadLabel: \"Tải tệp lên\",\n dropHere: \"Thả tệp vào đây\",\n dragHere: \"Kéo tệp vào đây\",\n browse: \"hoặc bấm để chọn tệp\",\n limits: (maxSize?: string, maxFiles?: number) => {\n if (maxSize && maxFiles) return `Tối đa ${maxSize} • Tối đa ${maxFiles} tệp`;\n if (maxSize) return `Tối đa ${maxSize}`;\n if (maxFiles) return `Tối đa ${maxFiles} tệp`;\n return \"Chọn tệp để tải lên\";\n },\n count: (count: number) => `${count} tệp`,\n clearAll: \"Xoá hết\",\n remove: \"Xoá tệp\",\n uploading: \"Đang tải lên...\",\n deleting: \"Đang xoá...\",\n tooMany: (maxFiles: number) => `Chỉ cho phép tối đa ${maxFiles} tệp`,\n tooLarge: (maxSize: string) => `Tệp vượt quá ${maxSize}`,\n wrongType: \"Không chấp nhận định dạng tệp này\",\n rejectedOne: (name: string) => `Đã bỏ qua \"${name}\"`,\n rejectedMany: (name: string, others: number) => `Đã bỏ qua \"${name}\" và ${others} tệp khác`,\n uploadFailed: (count: number) => `Không tải lên được ${count} tệp`,\n deleteFailed: (name: string) => `Không xoá được ${name}`,\n deleteFailedMany: \"Không xoá được tệp\"\n },\n\n toast: {\n cellsCopied: (count: number) => `Đã sao chép ${count} ô`,\n copyFailed: \"Không sao chép được vào clipboard\",\n cellsCut: (count: number) => `Đã cắt ${count} ô`,\n cutFailed: \"Không cắt được vào clipboard\",\n cellsPasted: (count: number) => `Đã dán ${count} ô`,\n cellsPastedWithSkipped: (count: number, skipped: number) => `Đã dán ${count} ô, bỏ qua ${skipped} ô`,\n pasteSkipped: (skipped: number) => `Bỏ qua ${skipped} ô do dữ liệu không hợp lệ`,\n pasteFailed: \"Không dán được. Vui lòng thử lại.\",\n cellsCleared: (count: number) => `Đã xoá nội dung ${count} ô`,\n rowsDeleted: (count: number) => `Đã xoá ${count} dòng`,\n nothingToUndo: \"Không còn thao tác để hoàn tác\",\n nothingToRedo: \"Không còn thao tác để làm lại\",\n undone: (count: number) => `Đã hoàn tác ${count} thao tác`,\n redone: (count: number) => `Đã làm lại ${count} thao tác`\n },\n\n /** Giá trị văn bản khi dán boolean vào ô văn bản */\n booleanText: {\n checked: \"Có\",\n unchecked: \"Không\"\n },\n\n shortcuts: {\n trigger: \"Phím tắt\",\n title: \"Phím tắt\",\n description: \"Danh sách phím tắt để thao tác nhanh với bảng dữ liệu.\",\n searchPlaceholder: \"Tìm phím tắt...\",\n emptyTitle: \"Không tìm thấy phím tắt\",\n emptyDescription: \"Thử tìm với từ khoá khác.\",\n close: \"Đóng\",\n groups: {\n navigation: \"Di chuyển\",\n selection: \"Chọn ô\",\n editing: \"Sửa dữ liệu\",\n search: \"Tìm kiếm\",\n filtering: \"Lọc\",\n sorting: \"Sắp xếp\",\n general: \"Chung\"\n },\n keys: {\n click: \"Nhấp chuột\",\n doubleClick: \"Nhấp đúp\"\n },\n navigation: {\n move: \"Di chuyển giữa các ô\",\n nextCell: \"Sang ô kế tiếp\",\n prevCell: \"Về ô trước đó\",\n firstColumn: \"Về cột đầu\",\n lastColumn: \"Tới cột cuối\",\n firstRowSameColumn: \"Về dòng đầu (cùng cột)\",\n lastRowSameColumn: \"Tới dòng cuối (cùng cột)\",\n firstColumnSameRow: \"Về cột đầu (cùng dòng)\",\n lastColumnSameRow: \"Tới cột cuối (cùng dòng)\",\n firstCell: \"Về ô đầu bảng\",\n lastCell: \"Tới ô cuối bảng\",\n pageUp: \"Lên một trang\",\n pageDown: \"Xuống một trang\",\n scrollUp: \"Cuộn lên một trang\",\n scrollDown: \"Cuộn xuống một trang\",\n scrollLeft: \"Cuộn sang trái một trang cột\",\n scrollRight: \"Cuộn sang phải một trang cột\"\n },\n selection: {\n extend: \"Mở rộng vùng chọn\",\n toTop: \"Chọn tới đầu bảng\",\n toBottom: \"Chọn tới cuối bảng\",\n toFirstColumn: \"Chọn tới cột đầu\",\n toLastColumn: \"Chọn tới cột cuối\",\n all: \"Chọn toàn bộ ô\",\n toggle: \"Thêm/bớt một ô khỏi vùng chọn\",\n range: \"Chọn cả vùng\",\n clear: \"Bỏ chọn\"\n },\n editing: {\n start: \"Bắt đầu sửa ô\",\n insertRow: \"Chèn dòng bên dưới\",\n copy: \"Sao chép ô đang chọn\",\n cut: \"Cắt ô đang chọn\",\n paste: \"Dán vào ô\",\n clear: \"Xoá nội dung ô đang chọn\",\n deleteRows: \"Xoá dòng đang chọn\",\n undo: \"Hoàn tác\",\n redo: \"Làm lại\"\n },\n search: {\n open: \"Mở ô tìm kiếm\",\n next: \"Kết quả kế tiếp\",\n prev: \"Kết quả trước đó\",\n close: \"Đóng tìm kiếm\"\n },\n filtering: {\n toggle: \"Mở/đóng menu lọc\",\n remove: \"Xoá điều kiện lọc (khi đang chọn)\"\n },\n sorting: {\n toggle: \"Mở/đóng menu sắp xếp\",\n remove: \"Xoá tiêu chí sắp xếp (khi đang chọn)\"\n },\n general: {\n shortcuts: \"Xem danh sách phím tắt\"\n }\n }\n};\n"],"mappings":"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","names":[]}
|