@comitor/ui 1.10.0 → 1.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.
- package/README.md +15 -4
- 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 +1734 -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 +205 -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 +160 -0
- package/dist/data-grid/data-grid-context-menu.js.map +1 -0
- package/dist/data-grid/data-grid-filter-menu.d.ts +12 -0
- package/dist/data-grid/data-grid-filter-menu.js +714 -0
- package/dist/data-grid/data-grid-filter-menu.js.map +1 -0
- package/dist/data-grid/data-grid-keyboard-shortcuts.d.ts +20 -0
- package/dist/data-grid/data-grid-keyboard-shortcuts.js +227 -0
- package/dist/data-grid/data-grid-keyboard-shortcuts.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 +103 -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 +15 -0
- package/dist/data-grid/data-grid-row-height-menu.js +56 -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 +183 -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 +177 -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 +12 -0
- package/dist/data-grid/data-grid-sort-menu.js +271 -0
- package/dist/data-grid/data-grid-sort-menu.js.map +1 -0
- package/dist/data-grid/data-grid-view-menu.d.ts +13 -0
- package/dist/data-grid/data-grid-view-menu.js +66 -0
- package/dist/data-grid/data-grid-view-menu.js.map +1 -0
- package/dist/data-grid/data-grid.d.ts +32 -0
- package/dist/data-grid/data-grid.js +235 -0
- package/dist/data-grid/data-grid.js.map +1 -0
- package/dist/data-grid/filters.d.ts +31 -0
- package/dist/data-grid/filters.js +212 -0
- package/dist/data-grid/filters.js.map +1 -0
- package/dist/data-grid/index.d.ts +22 -0
- package/dist/data-grid/index.js +77 -0
- package/dist/data-grid/index.js.map +1 -0
- package/dist/data-grid/messages.d.ts +280 -0
- package/dist/data-grid/messages.js +279 -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 +33 -0
- package/dist/data-grid/use-data-grid-undo-redo.js +345 -0
- package/dist/data-grid/use-data-grid-undo-redo.js.map +1 -0
- package/dist/data-grid/use-data-grid.d.ts +92 -0
- package/dist/data-grid/use-data-grid.js +2692 -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 +73 -0
- package/dist/data-grid/utils.js +408 -0
- package/dist/data-grid/utils.js.map +1 -0
- package/package.json +33 -15
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export { DataGrid } from './data-grid.js';
|
|
2
|
+
export { DataGridFilterMenu } from './data-grid-filter-menu.js';
|
|
3
|
+
export { DataGridKeyboardShortcuts } from './data-grid-keyboard-shortcuts.js';
|
|
4
|
+
export { DataGridCellPresence, DataGridPresenceProvider, useDataGridPresence } from './data-grid-presence.js';
|
|
5
|
+
export { DataGridRowHeightMenu } from './data-grid-row-height-menu.js';
|
|
6
|
+
export { getDataGridSelectColumn } from './data-grid-select-column.js';
|
|
7
|
+
export { DataGridSkeleton, DataGridSkeletonGrid, DataGridSkeletonToolbar } from './data-grid-skeleton.js';
|
|
8
|
+
export { DataGridSortMenu } from './data-grid-sort-menu.js';
|
|
9
|
+
export { DataGridViewMenu } from './data-grid-view-menu.js';
|
|
10
|
+
export { BOOLEAN_FILTER_OPERATORS, DATE_FILTER_OPERATORS, NUMBER_FILTER_OPERATORS, SELECT_FILTER_OPERATORS, TEXT_FILTER_OPERATORS, getDefaultOperator, getFilterFn, getOperatorsForVariant } from './filters.js';
|
|
11
|
+
export { DataGridMessages, msg as dataGridMessages } from './messages.js';
|
|
12
|
+
export { BooleanFilterOperator, CellOpts, CellPosition, CellRange, CellSelectOption, CellUpdate, ContextMenuState, DataGridCellProps, DateFilterOperator, Direction, FileCellData, FilterOperator, FilterValue, NavigationDirection, NumberFilterOperator, PasteDialogState, RowHeightValue, SearchState, SelectFilterOperator, SelectionState, TextFilterOperator } from './types.js';
|
|
13
|
+
export { UseDataGridProps, useDataGrid } from './use-data-grid.js';
|
|
14
|
+
export { UndoRedoCellUpdate, useDataGridUndoRedo } from './use-data-grid-undo-redo.js';
|
|
15
|
+
export { formatDate, formatDateForDisplay, formatDateToString, formatFileSize, generateFileId, getCellKey, getColumnVariant, getEmptyCellValue, getLineCount, getRowHeightValue, parseCellKey, parseLocalDate } from './utils.js';
|
|
16
|
+
import 'react';
|
|
17
|
+
import '@tanstack/react-table';
|
|
18
|
+
import '../components/ui/popover.js';
|
|
19
|
+
import '@radix-ui/react-popover';
|
|
20
|
+
import '../components/ui/select.js';
|
|
21
|
+
import '@radix-ui/react-select';
|
|
22
|
+
import '@tanstack/react-virtual';
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { DataGrid } from "./data-grid.js";
|
|
2
|
+
import { DataGridFilterMenu } from "./data-grid-filter-menu.js";
|
|
3
|
+
import { DataGridKeyboardShortcuts } from "./data-grid-keyboard-shortcuts.js";
|
|
4
|
+
import {
|
|
5
|
+
DataGridPresenceProvider,
|
|
6
|
+
useDataGridPresence
|
|
7
|
+
} from "./data-grid-presence.js";
|
|
8
|
+
import { DataGridRowHeightMenu } from "./data-grid-row-height-menu.js";
|
|
9
|
+
import { getDataGridSelectColumn } from "./data-grid-select-column.js";
|
|
10
|
+
import { DataGridSkeleton, DataGridSkeletonGrid, DataGridSkeletonToolbar } from "./data-grid-skeleton.js";
|
|
11
|
+
import { DataGridSortMenu } from "./data-grid-sort-menu.js";
|
|
12
|
+
import { DataGridViewMenu } from "./data-grid-view-menu.js";
|
|
13
|
+
import {
|
|
14
|
+
BOOLEAN_FILTER_OPERATORS,
|
|
15
|
+
DATE_FILTER_OPERATORS,
|
|
16
|
+
getDefaultOperator,
|
|
17
|
+
getFilterFn,
|
|
18
|
+
getOperatorsForVariant,
|
|
19
|
+
NUMBER_FILTER_OPERATORS,
|
|
20
|
+
SELECT_FILTER_OPERATORS,
|
|
21
|
+
TEXT_FILTER_OPERATORS
|
|
22
|
+
} from "./filters.js";
|
|
23
|
+
import { msg } from "./messages.js";
|
|
24
|
+
import { useDataGrid } from "./use-data-grid.js";
|
|
25
|
+
import { useDataGridUndoRedo } from "./use-data-grid-undo-redo.js";
|
|
26
|
+
import {
|
|
27
|
+
formatDate,
|
|
28
|
+
formatDateForDisplay,
|
|
29
|
+
formatDateToString,
|
|
30
|
+
formatFileSize,
|
|
31
|
+
generateFileId,
|
|
32
|
+
getCellKey,
|
|
33
|
+
getColumnVariant,
|
|
34
|
+
getEmptyCellValue,
|
|
35
|
+
getLineCount,
|
|
36
|
+
getRowHeightValue,
|
|
37
|
+
parseCellKey,
|
|
38
|
+
parseLocalDate
|
|
39
|
+
} from "./utils.js";
|
|
40
|
+
export {
|
|
41
|
+
BOOLEAN_FILTER_OPERATORS,
|
|
42
|
+
DATE_FILTER_OPERATORS,
|
|
43
|
+
DataGrid,
|
|
44
|
+
DataGridFilterMenu,
|
|
45
|
+
DataGridKeyboardShortcuts,
|
|
46
|
+
DataGridPresenceProvider,
|
|
47
|
+
DataGridRowHeightMenu,
|
|
48
|
+
DataGridSkeleton,
|
|
49
|
+
DataGridSkeletonGrid,
|
|
50
|
+
DataGridSkeletonToolbar,
|
|
51
|
+
DataGridSortMenu,
|
|
52
|
+
DataGridViewMenu,
|
|
53
|
+
NUMBER_FILTER_OPERATORS,
|
|
54
|
+
SELECT_FILTER_OPERATORS,
|
|
55
|
+
TEXT_FILTER_OPERATORS,
|
|
56
|
+
msg as dataGridMessages,
|
|
57
|
+
formatDate,
|
|
58
|
+
formatDateForDisplay,
|
|
59
|
+
formatDateToString,
|
|
60
|
+
formatFileSize,
|
|
61
|
+
generateFileId,
|
|
62
|
+
getCellKey,
|
|
63
|
+
getColumnVariant,
|
|
64
|
+
getDataGridSelectColumn,
|
|
65
|
+
getDefaultOperator,
|
|
66
|
+
getEmptyCellValue,
|
|
67
|
+
getFilterFn,
|
|
68
|
+
getLineCount,
|
|
69
|
+
getOperatorsForVariant,
|
|
70
|
+
getRowHeightValue,
|
|
71
|
+
parseCellKey,
|
|
72
|
+
parseLocalDate,
|
|
73
|
+
useDataGrid,
|
|
74
|
+
useDataGridPresence,
|
|
75
|
+
useDataGridUndoRedo
|
|
76
|
+
};
|
|
77
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/data-grid/index.ts"],"sourcesContent":["// @comitor/ui/data-grid — lưới dữ liệu sửa trực tiếp (như bảng tính).\n//\n// Port từ tablecn (https://tablecn.com) — MIT License, Copyright (c) 2024 Sadman Sakib —\n// và chỉnh lại để dùng primitive/token của package, chuỗi tiếng Việt, không phụ thuộc backend.\n// Xem docs/data-grid.md (§10) để biết danh sách khác biệt so với bản gốc.\n//\n// Tách khỏi barrel chính vì kéo theo @tanstack/react-table (peer), @tanstack/react-virtual và @dnd-kit,\n// đồng thời khoanh vùng phần `declare module \"@tanstack/react-table\"` (thêm `meta.cell`, `TableMeta`)\n// để ứng dụng không dùng lưới không bị ảnh hưởng.\n\n// Components\nexport { DataGrid } from \"./data-grid.js\";\nexport { DataGridFilterMenu } from \"./data-grid-filter-menu.js\";\nexport { DataGridKeyboardShortcuts } from \"./data-grid-keyboard-shortcuts.js\";\nexport {\n type DataGridCellPresence,\n DataGridPresenceProvider,\n useDataGridPresence\n} from \"./data-grid-presence.js\";\nexport { DataGridRowHeightMenu } from \"./data-grid-row-height-menu.js\";\nexport { getDataGridSelectColumn } from \"./data-grid-select-column.js\";\nexport { DataGridSkeleton, DataGridSkeletonGrid, DataGridSkeletonToolbar } from \"./data-grid-skeleton.js\";\nexport { DataGridSortMenu } from \"./data-grid-sort-menu.js\";\nexport { DataGridViewMenu } from \"./data-grid-view-menu.js\";\n// Bộ lọc\nexport {\n BOOLEAN_FILTER_OPERATORS,\n DATE_FILTER_OPERATORS,\n getDefaultOperator,\n getFilterFn,\n getOperatorsForVariant,\n NUMBER_FILTER_OPERATORS,\n SELECT_FILTER_OPERATORS,\n TEXT_FILTER_OPERATORS\n} from \"./filters.js\";\n// Chuỗi hiển thị (dùng lại khi app muốn nhất quán từ ngữ)\nexport { type DataGridMessages, msg as dataGridMessages } from \"./messages.js\";\n// Types\nexport type * from \"./types.js\";\n// Hooks\nexport { type UseDataGridProps, useDataGrid } from \"./use-data-grid.js\";\nexport { type UndoRedoCellUpdate, useDataGridUndoRedo } from \"./use-data-grid-undo-redo.js\";\n// Tiện ích hay dùng ở phía ứng dụng\nexport {\n formatDate,\n formatDateForDisplay,\n formatDateToString,\n formatFileSize,\n generateFileId,\n getCellKey,\n getColumnVariant,\n getEmptyCellValue,\n getLineCount,\n getRowHeightValue,\n parseCellKey,\n parseLocalDate\n} from \"./utils.js\";\n"],"mappings":"AAWA,SAAS,gBAAgB;AACzB,SAAS,0BAA0B;AACnC,SAAS,iCAAiC;AAC1C;AAAA,EAEE;AAAA,EACA;AAAA,OACK;AACP,SAAS,6BAA6B;AACtC,SAAS,+BAA+B;AACxC,SAAS,kBAAkB,sBAAsB,+BAA+B;AAChF,SAAS,wBAAwB;AACjC,SAAS,wBAAwB;AAEjC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAuC,WAAwB;AAI/D,SAAgC,mBAAmB;AACnD,SAAkC,2BAA2B;AAE7D;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;","names":[]}
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Toàn bộ chuỗi hiển thị của DataGrid (tiếng Việt) — gom một chỗ để dễ rà soát,
|
|
3
|
+
* đổi từ ngữ theo nghiệp vụ, hoặc dịch sang ngôn ngữ khác sau này.
|
|
4
|
+
*
|
|
5
|
+
* Quy ước: chuỗi cố định để nguyên; chuỗi có tham số viết thành hàm.
|
|
6
|
+
* KHÔNG đặt JSX ở đây — chỉ chuỗi thuần.
|
|
7
|
+
*/
|
|
8
|
+
declare const msg: {
|
|
9
|
+
readonly grid: {
|
|
10
|
+
/** Nhãn mặc định của vùng `role="grid"` (ghi đè bằng prop `aria-label`) */
|
|
11
|
+
readonly label: "Bảng dữ liệu";
|
|
12
|
+
readonly addRow: "Thêm dòng";
|
|
13
|
+
};
|
|
14
|
+
readonly search: {
|
|
15
|
+
readonly placeholder: "Tìm trong bảng...";
|
|
16
|
+
readonly label: "Tìm trong bảng";
|
|
17
|
+
readonly prevMatch: "Kết quả trước";
|
|
18
|
+
readonly nextMatch: "Kết quả sau";
|
|
19
|
+
readonly close: "Đóng tìm kiếm";
|
|
20
|
+
readonly matchPosition: (index: number, total: number) => string;
|
|
21
|
+
readonly noResults: "Không có kết quả";
|
|
22
|
+
readonly typeToSearch: "Gõ để tìm";
|
|
23
|
+
};
|
|
24
|
+
readonly column: {
|
|
25
|
+
readonly sortAsc: "Sắp xếp tăng dần";
|
|
26
|
+
readonly sortDesc: "Sắp xếp giảm dần";
|
|
27
|
+
readonly removeSort: "Bỏ sắp xếp";
|
|
28
|
+
readonly pinLeft: "Ghim sang trái";
|
|
29
|
+
readonly unpinLeft: "Bỏ ghim trái";
|
|
30
|
+
readonly pinRight: "Ghim sang phải";
|
|
31
|
+
readonly unpinRight: "Bỏ ghim phải";
|
|
32
|
+
readonly hide: "Ẩn cột";
|
|
33
|
+
readonly resize: (label: string) => string;
|
|
34
|
+
/** Tên kiểu dữ liệu của cột, hiện trong tooltip ở tiêu đề cột */
|
|
35
|
+
readonly variant: {
|
|
36
|
+
readonly shortText: "Văn bản ngắn";
|
|
37
|
+
readonly longText: "Văn bản dài";
|
|
38
|
+
readonly number: "Số";
|
|
39
|
+
readonly url: "Liên kết";
|
|
40
|
+
readonly checkbox: "Ô đánh dấu";
|
|
41
|
+
readonly select: "Chọn một";
|
|
42
|
+
readonly multiSelect: "Chọn nhiều";
|
|
43
|
+
readonly date: "Ngày";
|
|
44
|
+
readonly file: "Tệp";
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
readonly select: {
|
|
48
|
+
readonly all: "Chọn tất cả";
|
|
49
|
+
readonly row: "Chọn dòng";
|
|
50
|
+
readonly rowNumber: (rowNumber: number) => string;
|
|
51
|
+
};
|
|
52
|
+
readonly contextMenu: {
|
|
53
|
+
readonly copy: "Sao chép";
|
|
54
|
+
readonly cut: "Cắt";
|
|
55
|
+
readonly clear: "Xoá nội dung";
|
|
56
|
+
readonly deleteRows: "Xoá dòng";
|
|
57
|
+
};
|
|
58
|
+
readonly pasteDialog: {
|
|
59
|
+
readonly title: "Thêm dòng để dán hết dữ liệu?";
|
|
60
|
+
readonly description: (rowsNeeded: number) => string;
|
|
61
|
+
readonly expandTitle: "Tạo dòng mới";
|
|
62
|
+
readonly expandDescription: (rowsNeeded: number) => string;
|
|
63
|
+
readonly keepTitle: "Giữ nguyên số dòng";
|
|
64
|
+
readonly keepDescription: "Chỉ dán phần vừa với các dòng hiện có";
|
|
65
|
+
readonly cancel: "Huỷ";
|
|
66
|
+
readonly confirm: "Tiếp tục";
|
|
67
|
+
};
|
|
68
|
+
readonly rowHeight: {
|
|
69
|
+
readonly label: "Chiều cao dòng";
|
|
70
|
+
readonly short: "Thấp";
|
|
71
|
+
readonly medium: "Vừa";
|
|
72
|
+
readonly tall: "Cao";
|
|
73
|
+
readonly extraTall: "Rất cao";
|
|
74
|
+
};
|
|
75
|
+
readonly view: {
|
|
76
|
+
readonly trigger: "Hiển thị";
|
|
77
|
+
readonly toggleColumns: "Ẩn/hiện cột";
|
|
78
|
+
readonly searchPlaceholder: "Tìm cột...";
|
|
79
|
+
readonly empty: "Không có cột phù hợp.";
|
|
80
|
+
};
|
|
81
|
+
readonly sort: {
|
|
82
|
+
readonly trigger: "Sắp xếp";
|
|
83
|
+
readonly title: "Sắp xếp theo";
|
|
84
|
+
readonly emptyTitle: "Chưa sắp xếp";
|
|
85
|
+
readonly description: "Đổi tiêu chí sắp xếp cho danh sách.";
|
|
86
|
+
readonly emptyDescription: "Thêm tiêu chí để sắp xếp danh sách.";
|
|
87
|
+
readonly add: "Thêm sắp xếp";
|
|
88
|
+
readonly reset: "Bỏ sắp xếp";
|
|
89
|
+
readonly remove: "Xoá tiêu chí";
|
|
90
|
+
readonly drag: "Kéo để đổi thứ tự";
|
|
91
|
+
readonly fieldPlaceholder: "Tìm trường...";
|
|
92
|
+
readonly fieldEmpty: "Không có trường phù hợp.";
|
|
93
|
+
readonly asc: "Tăng dần";
|
|
94
|
+
readonly desc: "Giảm dần";
|
|
95
|
+
};
|
|
96
|
+
readonly filter: {
|
|
97
|
+
readonly trigger: "Lọc";
|
|
98
|
+
readonly title: "Lọc theo";
|
|
99
|
+
readonly emptyTitle: "Chưa có bộ lọc";
|
|
100
|
+
readonly description: "Đổi điều kiện lọc để thu hẹp dữ liệu.";
|
|
101
|
+
readonly emptyDescription: "Thêm điều kiện lọc để thu hẹp dữ liệu.";
|
|
102
|
+
readonly add: "Thêm bộ lọc";
|
|
103
|
+
readonly reset: "Xoá bộ lọc";
|
|
104
|
+
readonly remove: "Xoá điều kiện";
|
|
105
|
+
readonly drag: "Kéo để đổi thứ tự";
|
|
106
|
+
readonly where: "Khi";
|
|
107
|
+
readonly and: "Và";
|
|
108
|
+
readonly fieldPlaceholder: "Tìm trường...";
|
|
109
|
+
readonly fieldEmpty: "Không có trường phù hợp.";
|
|
110
|
+
readonly valuePlaceholder: "Giá trị";
|
|
111
|
+
readonly rangeStart: "Từ";
|
|
112
|
+
readonly rangeEnd: "Đến";
|
|
113
|
+
readonly pickDate: "Chọn ngày";
|
|
114
|
+
readonly pickRange: "Chọn khoảng ngày";
|
|
115
|
+
readonly optionPlaceholder: "Tìm lựa chọn...";
|
|
116
|
+
readonly optionEmpty: "Không có lựa chọn phù hợp.";
|
|
117
|
+
readonly selectedCount: (count: number) => string;
|
|
118
|
+
readonly emptyValue: (label: string) => string;
|
|
119
|
+
/** Nhãn toán tử lọc — xem `filters.ts` để biết toán tử nào dùng cho kiểu ô nào */
|
|
120
|
+
readonly operators: {
|
|
121
|
+
readonly contains: "Chứa";
|
|
122
|
+
readonly notContains: "Không chứa";
|
|
123
|
+
readonly equals: "Bằng";
|
|
124
|
+
readonly notEquals: "Khác";
|
|
125
|
+
readonly startsWith: "Bắt đầu bằng";
|
|
126
|
+
readonly endsWith: "Kết thúc bằng";
|
|
127
|
+
readonly isEmpty: "Đang trống";
|
|
128
|
+
readonly isNotEmpty: "Không trống";
|
|
129
|
+
readonly lessThan: "Nhỏ hơn";
|
|
130
|
+
readonly lessThanOrEqual: "Nhỏ hơn hoặc bằng";
|
|
131
|
+
readonly greaterThan: "Lớn hơn";
|
|
132
|
+
readonly greaterThanOrEqual: "Lớn hơn hoặc bằng";
|
|
133
|
+
readonly isBetween: "Trong khoảng";
|
|
134
|
+
readonly dateEquals: "Đúng ngày";
|
|
135
|
+
readonly dateNotEquals: "Khác ngày";
|
|
136
|
+
readonly before: "Trước ngày";
|
|
137
|
+
readonly after: "Sau ngày";
|
|
138
|
+
readonly onOrBefore: "Vào hoặc trước ngày";
|
|
139
|
+
readonly onOrAfter: "Vào hoặc sau ngày";
|
|
140
|
+
readonly is: "Là";
|
|
141
|
+
readonly isNot: "Không là";
|
|
142
|
+
readonly isAnyOf: "Là một trong";
|
|
143
|
+
readonly isNoneOf: "Không là bất kỳ";
|
|
144
|
+
readonly isTrue: "Có đánh dấu";
|
|
145
|
+
readonly isFalse: "Không đánh dấu";
|
|
146
|
+
};
|
|
147
|
+
};
|
|
148
|
+
readonly cell: {
|
|
149
|
+
readonly longTextPlaceholder: "Nhập nội dung...";
|
|
150
|
+
readonly optionSearchPlaceholder: "Tìm...";
|
|
151
|
+
readonly optionEmpty: "Không có lựa chọn phù hợp.";
|
|
152
|
+
readonly clearAll: "Bỏ chọn hết";
|
|
153
|
+
readonly invalidUrlTitle: "Liên kết không hợp lệ";
|
|
154
|
+
readonly invalidUrlDescription: "Liên kết chứa giao thức nguy hiểm (javascript:, data:, vbscript: hoặc file:)";
|
|
155
|
+
};
|
|
156
|
+
readonly file: {
|
|
157
|
+
readonly uploadLabel: "Tải tệp lên";
|
|
158
|
+
readonly dropHere: "Thả tệp vào đây";
|
|
159
|
+
readonly dragHere: "Kéo tệp vào đây";
|
|
160
|
+
readonly browse: "hoặc bấm để chọn tệp";
|
|
161
|
+
readonly limits: (maxSize?: string, maxFiles?: number) => string;
|
|
162
|
+
readonly count: (count: number) => string;
|
|
163
|
+
readonly clearAll: "Xoá hết";
|
|
164
|
+
readonly remove: "Xoá tệp";
|
|
165
|
+
readonly uploading: "Đang tải lên...";
|
|
166
|
+
readonly deleting: "Đang xoá...";
|
|
167
|
+
readonly tooMany: (maxFiles: number) => string;
|
|
168
|
+
readonly tooLarge: (maxSize: string) => string;
|
|
169
|
+
readonly wrongType: "Không chấp nhận định dạng tệp này";
|
|
170
|
+
readonly rejectedOne: (name: string) => string;
|
|
171
|
+
readonly rejectedMany: (name: string, others: number) => string;
|
|
172
|
+
readonly uploadFailed: (count: number) => string;
|
|
173
|
+
readonly deleteFailed: (name: string) => string;
|
|
174
|
+
readonly deleteFailedMany: "Không xoá được tệp";
|
|
175
|
+
};
|
|
176
|
+
readonly toast: {
|
|
177
|
+
readonly cellsCopied: (count: number) => string;
|
|
178
|
+
readonly copyFailed: "Không sao chép được vào clipboard";
|
|
179
|
+
readonly cellsCut: (count: number) => string;
|
|
180
|
+
readonly cutFailed: "Không cắt được vào clipboard";
|
|
181
|
+
readonly cellsPasted: (count: number) => string;
|
|
182
|
+
readonly cellsPastedWithSkipped: (count: number, skipped: number) => string;
|
|
183
|
+
readonly pasteSkipped: (skipped: number) => string;
|
|
184
|
+
readonly pasteFailed: "Không dán được. Vui lòng thử lại.";
|
|
185
|
+
readonly cellsCleared: (count: number) => string;
|
|
186
|
+
readonly rowsDeleted: (count: number) => string;
|
|
187
|
+
readonly nothingToUndo: "Không còn thao tác để hoàn tác";
|
|
188
|
+
readonly nothingToRedo: "Không còn thao tác để làm lại";
|
|
189
|
+
readonly undone: (count: number) => string;
|
|
190
|
+
readonly redone: (count: number) => string;
|
|
191
|
+
};
|
|
192
|
+
/** Giá trị văn bản khi dán boolean vào ô văn bản */
|
|
193
|
+
readonly booleanText: {
|
|
194
|
+
readonly checked: "Có";
|
|
195
|
+
readonly unchecked: "Không";
|
|
196
|
+
};
|
|
197
|
+
readonly shortcuts: {
|
|
198
|
+
readonly trigger: "Phím tắt";
|
|
199
|
+
readonly title: "Phím tắt";
|
|
200
|
+
readonly description: "Danh sách phím tắt để thao tác nhanh với bảng dữ liệu.";
|
|
201
|
+
readonly searchPlaceholder: "Tìm phím tắt...";
|
|
202
|
+
readonly emptyTitle: "Không tìm thấy phím tắt";
|
|
203
|
+
readonly emptyDescription: "Thử tìm với từ khoá khác.";
|
|
204
|
+
readonly close: "Đóng";
|
|
205
|
+
readonly groups: {
|
|
206
|
+
readonly navigation: "Di chuyển";
|
|
207
|
+
readonly selection: "Chọn ô";
|
|
208
|
+
readonly editing: "Sửa dữ liệu";
|
|
209
|
+
readonly search: "Tìm kiếm";
|
|
210
|
+
readonly filtering: "Lọc";
|
|
211
|
+
readonly sorting: "Sắp xếp";
|
|
212
|
+
readonly general: "Chung";
|
|
213
|
+
};
|
|
214
|
+
readonly keys: {
|
|
215
|
+
readonly click: "Nhấp chuột";
|
|
216
|
+
readonly doubleClick: "Nhấp đúp";
|
|
217
|
+
};
|
|
218
|
+
readonly navigation: {
|
|
219
|
+
readonly move: "Di chuyển giữa các ô";
|
|
220
|
+
readonly nextCell: "Sang ô kế tiếp";
|
|
221
|
+
readonly prevCell: "Về ô trước đó";
|
|
222
|
+
readonly firstColumn: "Về cột đầu";
|
|
223
|
+
readonly lastColumn: "Tới cột cuối";
|
|
224
|
+
readonly firstRowSameColumn: "Về dòng đầu (cùng cột)";
|
|
225
|
+
readonly lastRowSameColumn: "Tới dòng cuối (cùng cột)";
|
|
226
|
+
readonly firstColumnSameRow: "Về cột đầu (cùng dòng)";
|
|
227
|
+
readonly lastColumnSameRow: "Tới cột cuối (cùng dòng)";
|
|
228
|
+
readonly firstCell: "Về ô đầu bảng";
|
|
229
|
+
readonly lastCell: "Tới ô cuối bảng";
|
|
230
|
+
readonly pageUp: "Lên một trang";
|
|
231
|
+
readonly pageDown: "Xuống một trang";
|
|
232
|
+
readonly scrollUp: "Cuộn lên một trang";
|
|
233
|
+
readonly scrollDown: "Cuộn xuống một trang";
|
|
234
|
+
readonly scrollLeft: "Cuộn sang trái một trang cột";
|
|
235
|
+
readonly scrollRight: "Cuộn sang phải một trang cột";
|
|
236
|
+
};
|
|
237
|
+
readonly selection: {
|
|
238
|
+
readonly extend: "Mở rộng vùng chọn";
|
|
239
|
+
readonly toTop: "Chọn tới đầu bảng";
|
|
240
|
+
readonly toBottom: "Chọn tới cuối bảng";
|
|
241
|
+
readonly toFirstColumn: "Chọn tới cột đầu";
|
|
242
|
+
readonly toLastColumn: "Chọn tới cột cuối";
|
|
243
|
+
readonly all: "Chọn toàn bộ ô";
|
|
244
|
+
readonly toggle: "Thêm/bớt một ô khỏi vùng chọn";
|
|
245
|
+
readonly range: "Chọn cả vùng";
|
|
246
|
+
readonly clear: "Bỏ chọn";
|
|
247
|
+
};
|
|
248
|
+
readonly editing: {
|
|
249
|
+
readonly start: "Bắt đầu sửa ô";
|
|
250
|
+
readonly insertRow: "Chèn dòng bên dưới";
|
|
251
|
+
readonly copy: "Sao chép ô đang chọn";
|
|
252
|
+
readonly cut: "Cắt ô đang chọn";
|
|
253
|
+
readonly paste: "Dán vào ô";
|
|
254
|
+
readonly clear: "Xoá nội dung ô đang chọn";
|
|
255
|
+
readonly deleteRows: "Xoá dòng đang chọn";
|
|
256
|
+
readonly undo: "Hoàn tác";
|
|
257
|
+
readonly redo: "Làm lại";
|
|
258
|
+
};
|
|
259
|
+
readonly search: {
|
|
260
|
+
readonly open: "Mở ô tìm kiếm";
|
|
261
|
+
readonly next: "Kết quả kế tiếp";
|
|
262
|
+
readonly prev: "Kết quả trước đó";
|
|
263
|
+
readonly close: "Đóng tìm kiếm";
|
|
264
|
+
};
|
|
265
|
+
readonly filtering: {
|
|
266
|
+
readonly toggle: "Mở/đóng menu lọc";
|
|
267
|
+
readonly remove: "Xoá điều kiện lọc (khi đang chọn)";
|
|
268
|
+
};
|
|
269
|
+
readonly sorting: {
|
|
270
|
+
readonly toggle: "Mở/đóng menu sắp xếp";
|
|
271
|
+
readonly remove: "Xoá tiêu chí sắp xếp (khi đang chọn)";
|
|
272
|
+
};
|
|
273
|
+
readonly general: {
|
|
274
|
+
readonly shortcuts: "Xem danh sách phím tắt";
|
|
275
|
+
};
|
|
276
|
+
};
|
|
277
|
+
};
|
|
278
|
+
type DataGridMessages = typeof msg;
|
|
279
|
+
|
|
280
|
+
export { type DataGridMessages, msg };
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
const msg = {
|
|
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
|
+
msg
|
|
278
|
+
};
|
|
279
|
+
//# sourceMappingURL=messages.js.map
|