@sd-angular/core 19.0.31 → 19.0.33

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/assets/scss/core/_read-state-panel.scss +57 -0
  2. package/components/data-state/index.d.ts +1 -0
  3. package/components/data-state/src/data-state.component.d.ts +41 -0
  4. package/components/import-excel/src/import-excel.component.d.ts +23 -1
  5. package/components/index.d.ts +1 -0
  6. package/components/quick-action/src/quick-action.component.d.ts +3 -1
  7. package/components/table/src/components/selector-action/selector-action.component.d.ts +12 -0
  8. package/components/table/src/models/table-option-selector.model.d.ts +2 -0
  9. package/components/table/src/table.component.d.ts +10 -1
  10. package/components/upload-file/src/upload-file.component.d.ts +5 -1
  11. package/fesm2022/sd-angular-core-components-badge.mjs +2 -2
  12. package/fesm2022/sd-angular-core-components-badge.mjs.map +1 -1
  13. package/fesm2022/sd-angular-core-components-button.mjs +2 -2
  14. package/fesm2022/sd-angular-core-components-button.mjs.map +1 -1
  15. package/fesm2022/sd-angular-core-components-data-state.mjs +72 -0
  16. package/fesm2022/sd-angular-core-components-data-state.mjs.map +1 -0
  17. package/fesm2022/sd-angular-core-components-form-generic.mjs +14 -14
  18. package/fesm2022/sd-angular-core-components-form-generic.mjs.map +1 -1
  19. package/fesm2022/sd-angular-core-components-import-excel.mjs +67 -18
  20. package/fesm2022/sd-angular-core-components-import-excel.mjs.map +1 -1
  21. package/fesm2022/sd-angular-core-components-inform.mjs +6 -6
  22. package/fesm2022/sd-angular-core-components-inform.mjs.map +1 -1
  23. package/fesm2022/sd-angular-core-components-query-bar.mjs +3 -3
  24. package/fesm2022/sd-angular-core-components-query-bar.mjs.map +1 -1
  25. package/fesm2022/sd-angular-core-components-query-builder.mjs +1 -1
  26. package/fesm2022/sd-angular-core-components-query-builder.mjs.map +1 -1
  27. package/fesm2022/sd-angular-core-components-quick-action.mjs +4 -2
  28. package/fesm2022/sd-angular-core-components-quick-action.mjs.map +1 -1
  29. package/fesm2022/sd-angular-core-components-stepper.mjs +2 -2
  30. package/fesm2022/sd-angular-core-components-stepper.mjs.map +1 -1
  31. package/fesm2022/sd-angular-core-components-table.mjs +125 -31
  32. package/fesm2022/sd-angular-core-components-table.mjs.map +1 -1
  33. package/fesm2022/sd-angular-core-components-tree.mjs +1 -1
  34. package/fesm2022/sd-angular-core-components-tree.mjs.map +1 -1
  35. package/fesm2022/sd-angular-core-components-upload-file.mjs +20 -6
  36. package/fesm2022/sd-angular-core-components-upload-file.mjs.map +1 -1
  37. package/fesm2022/sd-angular-core-components.mjs +1 -0
  38. package/fesm2022/sd-angular-core-components.mjs.map +1 -1
  39. package/fesm2022/sd-angular-core-forms-autocomplete.mjs +247 -59
  40. package/fesm2022/sd-angular-core-forms-autocomplete.mjs.map +1 -1
  41. package/fesm2022/sd-angular-core-forms-date-range.mjs +2 -2
  42. package/fesm2022/sd-angular-core-forms-date-range.mjs.map +1 -1
  43. package/fesm2022/sd-angular-core-forms-date.mjs +2 -2
  44. package/fesm2022/sd-angular-core-forms-date.mjs.map +1 -1
  45. package/fesm2022/sd-angular-core-forms-datetime.mjs +2 -2
  46. package/fesm2022/sd-angular-core-forms-datetime.mjs.map +1 -1
  47. package/fesm2022/sd-angular-core-forms-select.mjs +290 -67
  48. package/fesm2022/sd-angular-core-forms-select.mjs.map +1 -1
  49. package/fesm2022/sd-angular-core-i18n.mjs +160 -0
  50. package/fesm2022/sd-angular-core-i18n.mjs.map +1 -1
  51. package/fesm2022/sd-angular-core-modules-layout.mjs +756 -15
  52. package/fesm2022/sd-angular-core-modules-layout.mjs.map +1 -1
  53. package/fesm2022/sd-angular-core-utilities-read-state.mjs +87 -0
  54. package/fesm2022/sd-angular-core-utilities-read-state.mjs.map +1 -0
  55. package/fesm2022/sd-angular-core-utilities.mjs +1 -0
  56. package/fesm2022/sd-angular-core-utilities.mjs.map +1 -1
  57. package/forms/autocomplete/src/autocomplete.component.d.ts +13 -2
  58. package/forms/select/src/select.component.d.ts +11 -1
  59. package/i18n/src/en.d.ts +32 -0
  60. package/modules/layout/components/layout-main/layout-main.component.d.ts +1 -1
  61. package/modules/layout/components/sidebar-mobile-v1/components/sidebar/sidebar.component.d.ts +2 -2
  62. package/modules/layout/components/sidebar-mobile-v1/main.component.d.ts +2 -2
  63. package/modules/layout/components/sidebar-v2/components/sidebar/sidebar.component.d.ts +56 -0
  64. package/modules/layout/components/sidebar-v2/components/user/user.component.d.ts +22 -0
  65. package/modules/layout/components/sidebar-v2/main.component.d.ts +25 -0
  66. package/modules/layout/configurations/layout.configuration.d.ts +5 -1
  67. package/modules/layout/services/layout.service.d.ts +2 -2
  68. package/package.json +9 -1
  69. package/utilities/index.d.ts +1 -0
  70. package/utilities/read-state/index.d.ts +1 -0
  71. package/utilities/read-state/src/read-state.d.ts +37 -0
@@ -7,6 +7,15 @@ import { SD_CORE_CONFIGURATION } from '@sd-angular/core/configurations';
7
7
  const I18N_STORAGE_KEY = 'sd-core.language';
8
8
 
9
9
  const EN_MESSAGES = {
10
+ 'core.component.data-state.loading.title': 'Loading',
11
+ 'core.component.data-state.loading.message': 'Please wait while the data is being loaded.',
12
+ 'core.component.data-state.empty.title': 'No data',
13
+ 'core.component.data-state.empty.message': 'There is no data to display yet.',
14
+ 'core.component.data-state.error.title': 'Unable to load data',
15
+ 'core.component.data-state.error.message': 'An error occurred. Please try again.',
16
+ 'core.component.data-state.forbidden.title': 'Access denied',
17
+ 'core.component.data-state.forbidden.message': 'You do not have permission to view this content.',
18
+ 'core.component.data-state.retry': 'Try again',
10
19
  'core.common.cancel': 'Cancel',
11
20
  'core.common.close': 'Close',
12
21
  'core.common.reload': 'Reload page',
@@ -138,6 +147,7 @@ const EN_MESSAGES = {
138
147
  'core.form.date-range.invalid-max': 'End date is invalid (above limit)',
139
148
  'core.form.date-range.from': 'From',
140
149
  'core.form.date-range.to': 'to',
150
+ 'core.form.date-range.clear': 'Clear date range',
141
151
  // ---- Forms: datetime ----
142
152
  'core.form.datetime.required': 'Please enter information',
143
153
  'core.form.datetime.min-date': 'Minimum date: {date}',
@@ -170,6 +180,7 @@ const EN_MESSAGES = {
170
180
  // ---- Forms: select ----
171
181
  'core.form.select.required': 'Please enter information',
172
182
  'core.form.select.selectAll': 'All',
183
+ 'core.form.select.selected-count': '{count} items selected',
173
184
  // ---- Forms: textarea ----
174
185
  'core.form.textarea.required': 'Please enter information',
175
186
  'core.form.textarea.maxlength': 'Maximum characters: {max}',
@@ -319,6 +330,21 @@ const EN_MESSAGES = {
319
330
  // ---- Component: history ----
320
331
  'core.component.history.by': 'By',
321
332
  // ---- Component: import-excel ----
333
+ 'core.component.import-excel.choose-hint': 'Choose an .xlsx template file with up to {limit} rows.',
334
+ 'core.component.import-excel.choose-file': 'Choose Excel file',
335
+ 'core.component.import-excel.template': 'Download template',
336
+ 'core.component.import-excel.row-count': '{count} data rows',
337
+ 'core.component.import-excel.replace-file': 'Replace file',
338
+ 'core.component.import-excel.filter-all': 'All',
339
+ 'core.component.import-excel.filter-success': 'Valid',
340
+ 'core.component.import-excel.filter-warning': 'Warnings',
341
+ 'core.component.import-excel.filter-error': 'Errors',
342
+ 'core.component.import-excel.preview': 'Excel data preview',
343
+ 'core.component.import-excel.issue-count': 'View {count} issues',
344
+ 'core.component.import-excel.no-filter-results': 'No matching rows',
345
+ 'core.component.import-excel.no-filter-results-hint': 'Try another filter or view all data.',
346
+ 'core.component.import-excel.blocked-errors': 'Fix {count} rows with errors before importing.',
347
+ 'core.component.import-excel.submitted': 'Data has been submitted for processing.',
322
348
  'core.component.import-excel.title': 'Import Excel data',
323
349
  'core.component.import-excel.see-all': 'See all',
324
350
  'core.component.import-excel.valid-rows': 'Valid rows',
@@ -448,10 +474,15 @@ const EN_MESSAGES = {
448
474
  'core.component.table.not-an-array': 'Data is not an array',
449
475
  'core.component.table.config.confirm-reset': 'Confirm reset all settings to defaults',
450
476
  'core.component.table.popup-export.select-columns': 'Please select columns to export',
477
+ 'core.component.table.selector-action.selected': 'Selected {count}',
478
+ 'core.component.table.selector-action.more': 'More',
451
479
  'core.component.table.selector-action.default-msg': 'items selected',
452
480
  'core.component.tab-router.too-many-tabs': 'You have opened too many tabs.',
453
481
  // ---- Component: upload-file ----
454
482
  'core.component.upload-file.upload': 'Upload file',
483
+ 'core.component.upload-file.remove': 'Remove file',
484
+ 'core.component.upload-file.loading': 'Uploading file',
485
+ 'core.component.upload-file.choose-or-drop': 'Choose a file or drag it here',
455
486
  'core.component.upload-file.error-occurred': 'An error occurred',
456
487
  'core.component.upload-file.please-upload': 'Please upload a file/image',
457
488
  'core.component.upload-file.desc-format-and-size': 'Format: {exts} and up to: {maxSize}MB',
@@ -473,6 +504,7 @@ const EN_MESSAGES = {
473
504
  'core.module.layout.user.change-password': 'Change password',
474
505
  'core.module.layout.user.logout': 'Sign out',
475
506
  'core.module.layout.sidebar.search': 'Search',
507
+ 'core.module.layout.sidebar.clear-search': 'Clear search',
476
508
  // ---- Module: layout (greeting + weekday) ----
477
509
  'core.module.layout.greeting.hello': 'Hello, {name}',
478
510
  'core.module.layout.weekday.0': 'Sunday',
@@ -508,6 +540,15 @@ const EN_MESSAGES = {
508
540
  };
509
541
 
510
542
  const JA_MESSAGES = {
543
+ 'core.component.data-state.loading.title': '読み込み中',
544
+ 'core.component.data-state.loading.message': 'データを読み込んでいます。しばらくお待ちください。',
545
+ 'core.component.data-state.empty.title': 'データがありません',
546
+ 'core.component.data-state.empty.message': '表示するデータはまだありません。',
547
+ 'core.component.data-state.error.title': 'データを読み込めません',
548
+ 'core.component.data-state.error.message': 'エラーが発生しました。もう一度お試しください。',
549
+ 'core.component.data-state.forbidden.title': 'アクセスが拒否されました',
550
+ 'core.component.data-state.forbidden.message': 'このコンテンツを表示する権限がありません。',
551
+ 'core.component.data-state.retry': '再試行',
511
552
  'core.common.cancel': 'キャンセル',
512
553
  'core.common.close': '閉じる',
513
554
  'core.common.reload': 'ページを再読み込み',
@@ -639,6 +680,7 @@ const JA_MESSAGES = {
639
680
  'core.form.date-range.invalid-max': '終了日が無効です(上限を超えています)',
640
681
  'core.form.date-range.from': '開始',
641
682
  'core.form.date-range.to': '~',
683
+ 'core.form.date-range.clear': '日付範囲をクリア',
642
684
  // ---- Forms: datetime ----
643
685
  'core.form.datetime.required': '入力してください',
644
686
  'core.form.datetime.min-date': '最小日付: {date}',
@@ -671,6 +713,7 @@ const JA_MESSAGES = {
671
713
  // ---- Forms: select ----
672
714
  'core.form.select.required': '選択してください',
673
715
  'core.form.select.selectAll': 'すべて',
716
+ 'core.form.select.selected-count': '{count} 件選択',
674
717
  // ---- Forms: textarea ----
675
718
  'core.form.textarea.required': '入力してください',
676
719
  'core.form.textarea.maxlength': '最大文字数: {max}',
@@ -820,6 +863,21 @@ const JA_MESSAGES = {
820
863
  // ---- Component: history ----
821
864
  'core.component.history.by': '実行者',
822
865
  // ---- Component: import-excel ----
866
+ 'core.component.import-excel.choose-hint': 'テンプレートに沿った .xlsx ファイルを選択してください(最大 {limit} 行)。',
867
+ 'core.component.import-excel.choose-file': 'Excel ファイルを選択',
868
+ 'core.component.import-excel.template': 'テンプレートを取得',
869
+ 'core.component.import-excel.row-count': 'データ {count} 行',
870
+ 'core.component.import-excel.replace-file': 'ファイルを変更',
871
+ 'core.component.import-excel.filter-all': 'すべて',
872
+ 'core.component.import-excel.filter-success': '有効',
873
+ 'core.component.import-excel.filter-warning': '警告',
874
+ 'core.component.import-excel.filter-error': 'エラー',
875
+ 'core.component.import-excel.preview': 'Excel データのプレビュー',
876
+ 'core.component.import-excel.issue-count': '{count} 件の問題を表示',
877
+ 'core.component.import-excel.no-filter-results': '一致する行がありません',
878
+ 'core.component.import-excel.no-filter-results-hint': '別のフィルターを選ぶか、すべてのデータを表示してください。',
879
+ 'core.component.import-excel.blocked-errors': 'インポート前にエラーのある {count} 行を修正してください。',
880
+ 'core.component.import-excel.submitted': '処理のためにデータを送信しました。',
823
881
  'core.component.import-excel.title': 'Excelデータをインポート',
824
882
  'core.component.import-excel.see-all': 'すべて表示',
825
883
  'core.component.import-excel.valid-rows': '有効な行数',
@@ -949,10 +1007,15 @@ const JA_MESSAGES = {
949
1007
  'core.component.table.not-an-array': 'データが配列ではありません',
950
1008
  'core.component.table.config.confirm-reset': 'すべての設定をデフォルトに戻しますか',
951
1009
  'core.component.table.popup-export.select-columns': 'エクスポートする列を選択してください',
1010
+ 'core.component.table.selector-action.selected': '{count} 件選択中',
1011
+ 'core.component.table.selector-action.more': 'その他',
952
1012
  'core.component.table.selector-action.default-msg': '件選択中',
953
1013
  'core.component.tab-router.too-many-tabs': 'タブを開きすぎています。',
954
1014
  // ---- Component: upload-file ----
955
1015
  'core.component.upload-file.upload': 'ファイルをアップロード',
1016
+ 'core.component.upload-file.remove': 'ファイルを削除',
1017
+ 'core.component.upload-file.loading': 'ファイルをアップロード中',
1018
+ 'core.component.upload-file.choose-or-drop': 'ファイルを選択するか、ここにドラッグしてください',
956
1019
  'core.component.upload-file.error-occurred': 'エラーが発生しました',
957
1020
  'core.component.upload-file.please-upload': 'ファイル/画像をアップロードしてください',
958
1021
  'core.component.upload-file.desc-format-and-size': 'フォーマット: {exts}、最大: {maxSize}MB',
@@ -974,6 +1037,7 @@ const JA_MESSAGES = {
974
1037
  'core.module.layout.user.change-password': 'パスワード変更',
975
1038
  'core.module.layout.user.logout': 'ログアウト',
976
1039
  'core.module.layout.sidebar.search': '検索',
1040
+ 'core.module.layout.sidebar.clear-search': '検索をクリア',
977
1041
  // ---- Module: layout (greeting + weekday) ----
978
1042
  'core.module.layout.greeting.hello': 'こんにちは、{name}さん',
979
1043
  'core.module.layout.weekday.0': '日曜日',
@@ -1009,6 +1073,15 @@ const JA_MESSAGES = {
1009
1073
  };
1010
1074
 
1011
1075
  const KO_MESSAGES = {
1076
+ 'core.component.data-state.loading.title': '불러오는 중',
1077
+ 'core.component.data-state.loading.message': '데이터를 불러오는 동안 잠시 기다려 주세요.',
1078
+ 'core.component.data-state.empty.title': '데이터 없음',
1079
+ 'core.component.data-state.empty.message': '표시할 데이터가 아직 없습니다.',
1080
+ 'core.component.data-state.error.title': '데이터를 불러올 수 없음',
1081
+ 'core.component.data-state.error.message': '오류가 발생했습니다. 다시 시도해 주세요.',
1082
+ 'core.component.data-state.forbidden.title': '접근 거부됨',
1083
+ 'core.component.data-state.forbidden.message': '이 콘텐츠를 볼 권한이 없습니다.',
1084
+ 'core.component.data-state.retry': '다시 시도',
1012
1085
  'core.common.cancel': '취소',
1013
1086
  'core.common.close': '닫기',
1014
1087
  'core.common.reload': '페이지 새로고침',
@@ -1140,6 +1213,7 @@ const KO_MESSAGES = {
1140
1213
  'core.form.date-range.invalid-max': '종료일이 올바르지 않습니다 (한도 초과)',
1141
1214
  'core.form.date-range.from': '시작',
1142
1215
  'core.form.date-range.to': '~',
1216
+ 'core.form.date-range.clear': '날짜 범위 지우기',
1143
1217
  // ---- Forms: datetime ----
1144
1218
  'core.form.datetime.required': '정보를 입력해 주세요',
1145
1219
  'core.form.datetime.min-date': '최소 날짜: {date}',
@@ -1172,6 +1246,7 @@ const KO_MESSAGES = {
1172
1246
  // ---- Forms: select ----
1173
1247
  'core.form.select.required': '선택해 주세요',
1174
1248
  'core.form.select.selectAll': '전체',
1249
+ 'core.form.select.selected-count': '{count}개 선택됨',
1175
1250
  // ---- Forms: textarea ----
1176
1251
  'core.form.textarea.required': '정보를 입력해 주세요',
1177
1252
  'core.form.textarea.maxlength': '최대 글자수: {max}',
@@ -1321,6 +1396,21 @@ const KO_MESSAGES = {
1321
1396
  // ---- Component: history ----
1322
1397
  'core.component.history.by': '작성자',
1323
1398
  // ---- Component: import-excel ----
1399
+ 'core.component.import-excel.choose-hint': '양식에 맞는 .xlsx 파일을 선택하세요. 최대 {limit}행까지 가능합니다.',
1400
+ 'core.component.import-excel.choose-file': 'Excel 파일 선택',
1401
+ 'core.component.import-excel.template': '양식 다운로드',
1402
+ 'core.component.import-excel.row-count': '데이터 {count}행',
1403
+ 'core.component.import-excel.replace-file': '파일 변경',
1404
+ 'core.component.import-excel.filter-all': '전체',
1405
+ 'core.component.import-excel.filter-success': '유효',
1406
+ 'core.component.import-excel.filter-warning': '경고',
1407
+ 'core.component.import-excel.filter-error': '오류',
1408
+ 'core.component.import-excel.preview': 'Excel 데이터 미리보기',
1409
+ 'core.component.import-excel.issue-count': '문제 {count}개 보기',
1410
+ 'core.component.import-excel.no-filter-results': '일치하는 행이 없습니다',
1411
+ 'core.component.import-excel.no-filter-results-hint': '다른 필터를 선택하거나 모든 데이터를 확인하세요.',
1412
+ 'core.component.import-excel.blocked-errors': '가져오기 전에 오류가 있는 {count}행을 수정하세요.',
1413
+ 'core.component.import-excel.submitted': '처리를 위해 데이터를 제출했습니다.',
1324
1414
  'core.component.import-excel.title': 'Excel 데이터 가져오기',
1325
1415
  'core.component.import-excel.see-all': '전체 보기',
1326
1416
  'core.component.import-excel.valid-rows': '유효한 행',
@@ -1450,10 +1540,15 @@ const KO_MESSAGES = {
1450
1540
  'core.component.table.not-an-array': '데이터가 배열이 아닙니다',
1451
1541
  'core.component.table.config.confirm-reset': '모든 설정을 기본값으로 초기화하시겠습니까',
1452
1542
  'core.component.table.popup-export.select-columns': '내보낼 열을 선택해 주세요',
1543
+ 'core.component.table.selector-action.selected': '{count}개 선택됨',
1544
+ 'core.component.table.selector-action.more': '더 보기',
1453
1545
  'core.component.table.selector-action.default-msg': '개 선택됨',
1454
1546
  'core.component.tab-router.too-many-tabs': '너무 많은 탭이 열려 있습니다.',
1455
1547
  // ---- Component: upload-file ----
1456
1548
  'core.component.upload-file.upload': '파일 업로드',
1549
+ 'core.component.upload-file.remove': '파일 삭제',
1550
+ 'core.component.upload-file.loading': '파일 업로드 중',
1551
+ 'core.component.upload-file.choose-or-drop': '파일을 선택하거나 여기에 끌어 놓으세요',
1457
1552
  'core.component.upload-file.error-occurred': '오류가 발생했습니다',
1458
1553
  'core.component.upload-file.please-upload': '파일/이미지를 업로드해 주세요',
1459
1554
  'core.component.upload-file.desc-format-and-size': '형식: {exts}, 최대: {maxSize}MB',
@@ -1475,6 +1570,7 @@ const KO_MESSAGES = {
1475
1570
  'core.module.layout.user.change-password': '비밀번호 변경',
1476
1571
  'core.module.layout.user.logout': '로그아웃',
1477
1572
  'core.module.layout.sidebar.search': '검색',
1573
+ 'core.module.layout.sidebar.clear-search': '검색 지우기',
1478
1574
  // ---- Module: layout (greeting + weekday) ----
1479
1575
  'core.module.layout.greeting.hello': '안녕하세요, {name}님',
1480
1576
  'core.module.layout.weekday.0': '일요일',
@@ -1510,6 +1606,15 @@ const KO_MESSAGES = {
1510
1606
  };
1511
1607
 
1512
1608
  const VI_MESSAGES = {
1609
+ 'core.component.data-state.loading.title': 'Đang tải',
1610
+ 'core.component.data-state.loading.message': 'Vui lòng chờ trong khi dữ liệu được tải.',
1611
+ 'core.component.data-state.empty.title': 'Chưa có dữ liệu',
1612
+ 'core.component.data-state.empty.message': 'Hiện chưa có dữ liệu để hiển thị.',
1613
+ 'core.component.data-state.error.title': 'Không thể tải dữ liệu',
1614
+ 'core.component.data-state.error.message': 'Đã xảy ra lỗi. Vui lòng thử lại.',
1615
+ 'core.component.data-state.forbidden.title': 'Không có quyền truy cập',
1616
+ 'core.component.data-state.forbidden.message': 'Bạn không có quyền xem nội dung này.',
1617
+ 'core.component.data-state.retry': 'Thử lại',
1513
1618
  'core.common.cancel': 'Hủy',
1514
1619
  'core.common.close': 'Đóng',
1515
1620
  'core.common.reload': 'Tải lại trang',
@@ -1641,6 +1746,7 @@ const VI_MESSAGES = {
1641
1746
  'core.form.date-range.invalid-max': 'Ngày kết thúc không hợp lệ (lớn hơn giới hạn)',
1642
1747
  'core.form.date-range.from': 'Từ',
1643
1748
  'core.form.date-range.to': 'đến',
1749
+ 'core.form.date-range.clear': 'Xóa khoảng ngày',
1644
1750
  // ---- Forms: datetime ----
1645
1751
  'core.form.datetime.required': 'Vui lòng nhập thông tin',
1646
1752
  'core.form.datetime.min-date': 'Ngày nhỏ nhất: {date}',
@@ -1673,6 +1779,7 @@ const VI_MESSAGES = {
1673
1779
  // ---- Forms: select ----
1674
1780
  'core.form.select.required': 'Vui lòng nhập thông tin',
1675
1781
  'core.form.select.selectAll': 'Tất cả',
1782
+ 'core.form.select.selected-count': 'Đã chọn {count} phần tử',
1676
1783
  // ---- Forms: textarea ----
1677
1784
  'core.form.textarea.required': 'Vui lòng nhập thông tin',
1678
1785
  'core.form.textarea.maxlength': 'Số ký tự tối đa: {max}',
@@ -1822,6 +1929,21 @@ const VI_MESSAGES = {
1822
1929
  // ---- Component: history ----
1823
1930
  'core.component.history.by': 'Bởi',
1824
1931
  // ---- Component: import-excel ----
1932
+ 'core.component.import-excel.choose-hint': 'Chọn tệp .xlsx theo mẫu, tối đa {limit} dòng.',
1933
+ 'core.component.import-excel.choose-file': 'Chọn tệp Excel',
1934
+ 'core.component.import-excel.template': 'Tải mẫu',
1935
+ 'core.component.import-excel.row-count': '{count} dòng dữ liệu',
1936
+ 'core.component.import-excel.replace-file': 'Đổi tệp',
1937
+ 'core.component.import-excel.filter-all': 'Tất cả',
1938
+ 'core.component.import-excel.filter-success': 'Hợp lệ',
1939
+ 'core.component.import-excel.filter-warning': 'Cảnh báo',
1940
+ 'core.component.import-excel.filter-error': 'Lỗi',
1941
+ 'core.component.import-excel.preview': 'Xem trước dữ liệu Excel',
1942
+ 'core.component.import-excel.issue-count': 'Xem {count} vấn đề',
1943
+ 'core.component.import-excel.no-filter-results': 'Không có dòng phù hợp',
1944
+ 'core.component.import-excel.no-filter-results-hint': 'Thử bộ lọc khác hoặc xem tất cả dữ liệu.',
1945
+ 'core.component.import-excel.blocked-errors': 'Cần sửa {count} dòng lỗi trước khi nhập.',
1946
+ 'core.component.import-excel.submitted': 'Dữ liệu đã được gửi để xử lý.',
1825
1947
  'core.component.import-excel.title': 'Nhập dữ liệu Excel',
1826
1948
  'core.component.import-excel.see-all': 'Xem tất cả',
1827
1949
  'core.component.import-excel.valid-rows': 'Số dòng dữ liệu hợp lệ',
@@ -1951,10 +2073,15 @@ const VI_MESSAGES = {
1951
2073
  'core.component.table.not-an-array': 'Dữ liệu không phải là một mảng',
1952
2074
  'core.component.table.config.confirm-reset': 'Xác nhận đưa tất cả thiết lập về mặc định',
1953
2075
  'core.component.table.popup-export.select-columns': 'Vui lòng chọn cột dữ liệu để xuất',
2076
+ 'core.component.table.selector-action.selected': 'Đã chọn {count}',
2077
+ 'core.component.table.selector-action.more': 'Thêm',
1954
2078
  'core.component.table.selector-action.default-msg': 'dữ liệu được chọn',
1955
2079
  'core.component.tab-router.too-many-tabs': 'Bạn đã mở quá nhiều tab.',
1956
2080
  // ---- Component: upload-file ----
1957
2081
  'core.component.upload-file.upload': 'Tải file',
2082
+ 'core.component.upload-file.remove': 'Xóa tệp',
2083
+ 'core.component.upload-file.loading': 'Đang tải tệp lên',
2084
+ 'core.component.upload-file.choose-or-drop': 'Chọn tệp hoặc kéo thả vào đây',
1958
2085
  'core.component.upload-file.error-occurred': 'Có lỗi xảy ra',
1959
2086
  'core.component.upload-file.please-upload': 'Vui lòng tải lên tệp/ảnh',
1960
2087
  'core.component.upload-file.desc-format-and-size': 'Định dạng: {exts} và tối đa: {maxSize}MB',
@@ -1976,6 +2103,7 @@ const VI_MESSAGES = {
1976
2103
  'core.module.layout.user.change-password': 'Đổi mật khẩu',
1977
2104
  'core.module.layout.user.logout': 'Đăng xuất',
1978
2105
  'core.module.layout.sidebar.search': 'Tìm kiếm',
2106
+ 'core.module.layout.sidebar.clear-search': 'Xóa tìm kiếm',
1979
2107
  // ---- Module: layout (greeting + weekday) ----
1980
2108
  'core.module.layout.greeting.hello': 'Xin chào, {name}',
1981
2109
  'core.module.layout.weekday.0': 'Chủ Nhật',
@@ -2011,6 +2139,15 @@ const VI_MESSAGES = {
2011
2139
  };
2012
2140
 
2013
2141
  const ZH_MESSAGES = {
2142
+ 'core.component.data-state.loading.title': '正在加载',
2143
+ 'core.component.data-state.loading.message': '正在加载数据,请稍候。',
2144
+ 'core.component.data-state.empty.title': '暂无数据',
2145
+ 'core.component.data-state.empty.message': '目前没有可显示的数据。',
2146
+ 'core.component.data-state.error.title': '无法加载数据',
2147
+ 'core.component.data-state.error.message': '发生错误,请重试。',
2148
+ 'core.component.data-state.forbidden.title': '访问被拒绝',
2149
+ 'core.component.data-state.forbidden.message': '您没有权限查看此内容。',
2150
+ 'core.component.data-state.retry': '重试',
2014
2151
  'core.common.cancel': '取消',
2015
2152
  'core.common.close': '关闭',
2016
2153
  'core.common.reload': '重新加载页面',
@@ -2142,6 +2279,7 @@ const ZH_MESSAGES = {
2142
2279
  'core.form.date-range.invalid-max': '结束日期无效(高于限制)',
2143
2280
  'core.form.date-range.from': '从',
2144
2281
  'core.form.date-range.to': '至',
2282
+ 'core.form.date-range.clear': '清除日期范围',
2145
2283
  // ---- Forms: datetime ----
2146
2284
  'core.form.datetime.required': '请输入内容',
2147
2285
  'core.form.datetime.min-date': '最小日期: {date}',
@@ -2174,6 +2312,7 @@ const ZH_MESSAGES = {
2174
2312
  // ---- Forms: select ----
2175
2313
  'core.form.select.required': '请选择',
2176
2314
  'core.form.select.selectAll': '全部',
2315
+ 'core.form.select.selected-count': '已选择 {count} 项',
2177
2316
  // ---- Forms: textarea ----
2178
2317
  'core.form.textarea.required': '请输入内容',
2179
2318
  'core.form.textarea.maxlength': '最大字符数: {max}',
@@ -2323,6 +2462,21 @@ const ZH_MESSAGES = {
2323
2462
  // ---- Component: history ----
2324
2463
  'core.component.history.by': '操作人',
2325
2464
  // ---- Component: import-excel ----
2465
+ 'core.component.import-excel.choose-hint': '请选择符合模板的 .xlsx 文件,最多 {limit} 行。',
2466
+ 'core.component.import-excel.choose-file': '选择 Excel 文件',
2467
+ 'core.component.import-excel.template': '下载模板',
2468
+ 'core.component.import-excel.row-count': '{count} 行数据',
2469
+ 'core.component.import-excel.replace-file': '更换文件',
2470
+ 'core.component.import-excel.filter-all': '全部',
2471
+ 'core.component.import-excel.filter-success': '有效',
2472
+ 'core.component.import-excel.filter-warning': '警告',
2473
+ 'core.component.import-excel.filter-error': '错误',
2474
+ 'core.component.import-excel.preview': 'Excel 数据预览',
2475
+ 'core.component.import-excel.issue-count': '查看 {count} 个问题',
2476
+ 'core.component.import-excel.no-filter-results': '没有匹配的行',
2477
+ 'core.component.import-excel.no-filter-results-hint': '请尝试其他筛选条件或查看全部数据。',
2478
+ 'core.component.import-excel.blocked-errors': '导入前请修正 {count} 行错误数据。',
2479
+ 'core.component.import-excel.submitted': '数据已提交处理。',
2326
2480
  'core.component.import-excel.title': '导入 Excel 数据',
2327
2481
  'core.component.import-excel.see-all': '查看全部',
2328
2482
  'core.component.import-excel.valid-rows': '有效行数',
@@ -2452,10 +2606,15 @@ const ZH_MESSAGES = {
2452
2606
  'core.component.table.not-an-array': '数据不是数组',
2453
2607
  'core.component.table.config.confirm-reset': '确认将所有设置恢复为默认值',
2454
2608
  'core.component.table.popup-export.select-columns': '请选择要导出的列',
2609
+ 'core.component.table.selector-action.selected': '已选择 {count} 项',
2610
+ 'core.component.table.selector-action.more': '更多',
2455
2611
  'core.component.table.selector-action.default-msg': '项已选择',
2456
2612
  'core.component.tab-router.too-many-tabs': '您已打开过多标签页。',
2457
2613
  // ---- Component: upload-file ----
2458
2614
  'core.component.upload-file.upload': '上传文件',
2615
+ 'core.component.upload-file.remove': '删除文件',
2616
+ 'core.component.upload-file.loading': '正在上传文件',
2617
+ 'core.component.upload-file.choose-or-drop': '选择文件或拖放到此处',
2459
2618
  'core.component.upload-file.error-occurred': '发生错误',
2460
2619
  'core.component.upload-file.please-upload': '请上传文件/图片',
2461
2620
  'core.component.upload-file.desc-format-and-size': '格式: {exts},最大: {maxSize}MB',
@@ -2477,6 +2636,7 @@ const ZH_MESSAGES = {
2477
2636
  'core.module.layout.user.change-password': '修改密码',
2478
2637
  'core.module.layout.user.logout': '退出登录',
2479
2638
  'core.module.layout.sidebar.search': '搜索',
2639
+ 'core.module.layout.sidebar.clear-search': '清除搜索',
2480
2640
  // ---- Module: layout (greeting + weekday) ----
2481
2641
  'core.module.layout.greeting.hello': '你好,{name}',
2482
2642
  'core.module.layout.weekday.0': '星期日',