@sdcorejs/angular 20.1.5 → 20.1.6

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.
@@ -1 +1 @@
1
- {"version":3,"file":"sdcorejs-angular-i18n.mjs","sources":["../../../projects/sdcorejs-angular/i18n/src/i18n.token.ts","../../../projects/sdcorejs-angular/i18n/src/en.ts","../../../projects/sdcorejs-angular/i18n/src/ja.ts","../../../projects/sdcorejs-angular/i18n/src/ko.ts","../../../projects/sdcorejs-angular/i18n/src/vi.ts","../../../projects/sdcorejs-angular/i18n/src/zh.ts","../../../projects/sdcorejs-angular/i18n/src/i18n.messages.ts","../../../projects/sdcorejs-angular/i18n/src/i18n.service.ts","../../../projects/sdcorejs-angular/i18n/src/i18n.pipe.ts","../../../projects/sdcorejs-angular/i18n/sdcorejs-angular-i18n.ts"],"sourcesContent":["export const I18N_STORAGE_KEY = 'sd-core.language';\n","export const EN_MESSAGES = {\n 'core.common.cancel': 'Cancel',\n 'core.common.close': 'Close',\n 'core.common.reload': 'Reload page',\n 'core.test.greet': 'Hello {name}',\n\n // ---- Validators (VALIDATION_PATTERNS in @sdcorejs/utils/constants) ----\n 'core.validator.email.name': 'Email',\n 'core.validator.email.error': 'Invalid email',\n 'core.validator.phone.name': 'Phone',\n 'core.validator.phone.error': 'Invalid phone number',\n // Legacy aliases — pattern.model.ts cũ vẫn dùng các key này (phone-vn / cccd / id-vn)\n 'core.validator.phone-vn.name': 'VN phone',\n 'core.validator.phone-vn.error': 'Invalid Vietnamese phone number',\n 'core.validator.cccd.name': 'National ID',\n 'core.validator.cccd.error': 'Invalid national ID (12 digits)',\n 'core.validator.id-vn.name': 'National ID / Passport',\n 'core.validator.id-vn.error': 'Invalid national ID or passport',\n 'core.validator.vn-phone.name': 'VN phone',\n 'core.validator.vn-phone.error': 'Invalid Vietnamese phone number',\n 'core.validator.vn-id.name': 'National ID',\n 'core.validator.vn-id.error': 'Invalid national ID (12 digits)',\n 'core.validator.passport.name': 'Passport',\n 'core.validator.passport.error': 'Invalid passport (1 letter + 7 digits)',\n 'core.validator.vn-id-or-passport.name': 'National ID / Passport',\n 'core.validator.vn-id-or-passport.error': 'Invalid national ID or passport',\n 'core.validator.time.name': 'Time',\n 'core.validator.time.error': 'Invalid time (format HH:mm)',\n 'core.validator.url.name': 'URL',\n 'core.validator.url.error': 'Invalid URL',\n 'core.validator.domain.name': 'Domain',\n 'core.validator.domain.error': 'Invalid domain',\n 'core.validator.ipv4.name': 'IPv4',\n 'core.validator.ipv4.error': 'Invalid IPv4 address',\n 'core.validator.ipv6.name': 'IPv6',\n 'core.validator.ipv6.error': 'Invalid IPv6 address',\n 'core.validator.image-url.name': 'Image URL',\n 'core.validator.image-url.error': 'Invalid image URL',\n 'core.validator.slug.name': 'Slug',\n 'core.validator.slug.error': 'Invalid slug',\n 'core.validator.number.name': 'Number',\n 'core.validator.number.error': 'Invalid number',\n 'core.validator.integer.name': 'Integer',\n 'core.validator.integer.error': 'Invalid integer',\n 'core.validator.decimal.name': 'Decimal',\n 'core.validator.decimal.error': 'Invalid decimal number',\n 'core.validator.positive-number.name': 'Positive number',\n 'core.validator.positive-number.error': 'Must be a positive number',\n 'core.validator.uuid.name': 'UUID',\n 'core.validator.uuid.error': 'Invalid UUID',\n 'core.validator.code-16.name': '16-char code',\n 'core.validator.code-16.error': 'Invalid 16-character code',\n 'core.validator.code-32.name': '32-char code',\n 'core.validator.code-32.error': 'Invalid 32-character code',\n 'core.validator.hex-color.name': 'Hex color',\n 'core.validator.hex-color.error': 'Invalid hex color',\n 'core.validator.base64.name': 'Base64',\n 'core.validator.base64.error': 'Invalid Base64 string',\n\n // ---- Operators (operator.model.ts) ----\n 'core.operator.equal.display': 'Equal',\n 'core.operator.not-equal.display': 'Not equal',\n 'core.operator.greater-than.display': 'Greater than',\n 'core.operator.less-than.display': 'Less than',\n 'core.operator.greater-or-equal.display': 'Greater than or equal',\n 'core.operator.less-or-equal.display': 'Less than or equal',\n 'core.operator.contain.display': 'Contains',\n 'core.operator.not-contain.display': 'Does not contain',\n 'core.operator.start-with.display': 'Starts with',\n 'core.operator.not-start-with.display': 'Does not start with',\n 'core.operator.end-with.display': 'Ends with',\n 'core.operator.not-end-with.display': 'Does not end with',\n 'core.operator.in.display': 'In',\n 'core.operator.not-in.display': 'Not in',\n 'core.operator.between.display': 'Between',\n 'core.operator.null.display': 'Is empty',\n 'core.operator.not-null.display': 'Is not empty',\n\n // ---- Global error handler ----\n 'core.handler.global-error.update-title': 'A NEW SYSTEM UPDATE IS AVAILABLE',\n 'core.handler.global-error.update-body':\n 'The current version is outdated and could not load resources.\\nPlease press OK to reload the page.',\n\n // ---- Interceptor: no-internet ----\n 'core.interceptor.no-internet.offline': 'No network connection. Waiting for connection...',\n 'core.interceptor.no-internet.cors-error': 'Cannot connect to server (CORS or configuration error).',\n 'core.interceptor.no-internet.maintenance': 'Server is under maintenance. Please try again later.',\n 'core.interceptor.no-internet.restored': 'Connection restored.',\n\n // ---- Service: excel ----\n 'core.excel.cannot-read-file': 'Could not read file content',\n 'core.excel.no-sheet': 'Excel file has no data sheet',\n\n // ---- Service: docx ----\n 'core.docx.invalid-format': 'Invalid format. Please select a template in DOC or DOCX format',\n 'core.docx.size-exceeded': 'Template file size exceeds the supported limit. Please try again',\n 'core.docx.convert-error': 'An error occurred while converting the DOCX file',\n\n // ---- Service: notify (toast) ----\n 'core.notify.type.success': 'Success',\n 'core.notify.type.info': 'Information',\n 'core.notify.type.warning': 'Warning',\n 'core.notify.type.error': 'Error',\n 'core.notify.show-more': 'Show more ({count})',\n 'core.notify.show-less': 'Show less',\n\n // ---- Service: confirm ----\n 'core.confirm.title': 'Confirm',\n 'core.confirm.yes': 'OK',\n 'core.confirm.no': 'Cancel',\n 'core.confirm.yes-short': 'Yes',\n 'core.confirm.no-short': 'No',\n\n // ---- Directive: hover-copy ----\n 'core.directive.hover-copy.tooltip': 'Copy',\n\n // ---- Forms: input ----\n 'core.form.input.required': 'Please enter information',\n 'core.form.input.maxlength': 'Maximum characters: {max}',\n 'core.form.input.invalid-pattern': 'Invalid format',\n 'core.form.input.exceeded': 'Exceeded maximum characters',\n 'core.form.input.mask-incomplete': 'The value is incomplete',\n 'core.form.input.mask-invalid': 'The value contains invalid characters',\n\n // ---- Forms: autocomplete ----\n 'core.form.autocomplete.required': 'Please enter information',\n\n // ---- Forms: chip ----\n 'core.form.chip.required': 'Please enter information',\n 'core.form.chip.minlength': 'Please enter at least {min} values',\n 'core.form.chip.maxlength': 'Please enter at most {max} values',\n\n // ---- Forms: chip-calendar ----\n 'core.form.chip-calendar.required': 'Please enter information',\n 'core.form.chip-calendar.minlength': 'Please enter at least {min} values',\n 'core.form.chip-calendar.maxlength': 'Please enter at most {max} values',\n\n // ---- Forms: date ----\n 'core.form.date.required': 'Please enter information',\n 'core.form.date.min-date': 'Minimum date: {date}',\n 'core.form.date.max-date': 'Maximum date: {date}',\n 'core.form.date.parse-error': 'Parse error: {text}',\n 'core.form.date.invalid-format': 'Invalid format',\n\n // ---- Forms: date-range ----\n 'core.form.date-range.required': 'Please enter information',\n 'core.form.date-range.invalid-min': 'Start date is invalid (below limit)',\n 'core.form.date-range.invalid-max': 'End date is invalid (above limit)',\n 'core.form.date-range.from': 'From',\n 'core.form.date-range.to': 'to',\n\n // ---- Forms: datetime ----\n 'core.form.datetime.required': 'Please enter information',\n 'core.form.datetime.min-date': 'Minimum date: {date}',\n 'core.form.datetime.max-date': 'Maximum date: {date}',\n 'core.form.datetime.invalid-format': 'Invalid format',\n 'core.form.datetime.now': 'Now',\n 'core.form.datetime.confirm': 'Confirm',\n\n // ---- Forms: entity-picker / tree-select ----\n 'core.form.entity-picker.placeholder': 'Select an entity',\n 'core.form.entity-picker.modal-title': 'Select entity',\n 'core.form.entity-picker.value': 'Value',\n 'core.form.entity-picker.clear': 'Clear selection',\n 'core.form.entity-picker.add': 'Add',\n 'core.form.entity-picker.cancel': 'Cancel',\n 'core.form.entity-picker.apply': 'Apply',\n 'core.form.tree-select.placeholder': 'Select a tree item',\n 'core.form.tree-select.modal-title': 'Select tree item',\n 'core.form.tree-select.clear': 'Clear selection',\n 'core.form.tree-select.search': 'Search tree',\n 'core.form.tree-select.cancel': 'Cancel',\n 'core.form.tree-select.apply': 'Apply',\n 'core.component.tree.retry': 'Retry',\n 'core.service.unsaved-changes.message': 'You have unsaved changes. Discard them and continue?',\n 'core.component.job-progress.status.idle': 'Ready',\n 'core.component.job-progress.status.queued': 'Queued',\n 'core.component.job-progress.status.running': 'In progress',\n 'core.component.job-progress.status.succeeded': 'Completed',\n 'core.component.job-progress.status.failed': 'Failed',\n 'core.component.job-progress.status.cancelled': 'Cancelled',\n 'core.component.job-progress.cancel': 'Cancel',\n 'core.component.job-progress.retry': 'Retry',\n 'core.component.audit-diff.label': 'Audit changes',\n 'core.component.audit-diff.field': 'Field',\n 'core.component.audit-diff.before': 'Before',\n 'core.component.audit-diff.after': 'After',\n 'core.component.audit-diff.empty': 'No changes',\n 'core.component.audit-diff.kind.added': 'Added',\n 'core.component.audit-diff.kind.removed': 'Removed',\n 'core.component.audit-diff.kind.changed': 'Changed',\n 'core.component.audit-diff.kind.unchanged': 'Unchanged',\n 'core.component.audit-diff.value.label': 'Value',\n 'core.component.audit-diff.value.not-set': 'Not set',\n 'core.component.audit-diff.value.undefined': 'Undefined',\n 'core.component.audit-diff.value.null': 'Null',\n 'core.component.audit-diff.value.true': 'Yes',\n 'core.component.audit-diff.value.false': 'No',\n\n // ---- Forms: time ----\n 'core.form.time.required': 'Please enter a time',\n 'core.form.time.invalid': 'Enter a valid time in HH:mm format',\n 'core.form.time.min': 'Time must not be earlier than {min}',\n 'core.form.time.max': 'Time must not be later than {max}',\n 'core.form.time.step': 'Time must align to a {step}-minute interval',\n 'core.form.time.open-picker': 'Open time picker',\n 'core.form.time.confirm': 'Confirm',\n 'core.form.time.clear': 'Clear time',\n\n // ---- Forms: time-range ----\n 'core.form.time-range.required': 'Please enter both start and end times',\n 'core.form.time-range.incomplete': 'Enter both times or enable an open-ended range',\n 'core.form.time-range.range': 'Start time must not be later than end time',\n 'core.form.time-range.invalid': 'Enter valid times in HH:mm format',\n 'core.form.time-range.min': 'Times must not be earlier than {min}',\n 'core.form.time-range.max': 'Times must not be later than {max}',\n 'core.form.time-range.step': 'Times must align to a {step}-minute interval',\n 'core.form.time-range.from': 'From',\n 'core.form.time-range.to': 'To',\n 'core.form.time-range.clear': 'Clear time range',\n\n // ---- Forms: time-spinner ----\n 'core.form.time-spinner.hour': 'Hour',\n 'core.form.time-spinner.minute': 'Minute',\n 'core.form.time-spinner.second': 'Second',\n 'core.form.time-spinner.increase-hour': 'Increase hour',\n 'core.form.time-spinner.decrease-hour': 'Decrease hour',\n 'core.form.time-spinner.increase-minute': 'Increase minute',\n 'core.form.time-spinner.decrease-minute': 'Decrease minute',\n 'core.form.time-spinner.increase-second': 'Increase second',\n 'core.form.time-spinner.decrease-second': 'Decrease second',\n\n // ---- Forms: input-number ----\n 'core.form.input-number.required': 'Please enter information',\n 'core.form.input-number.min': 'Value must not be less than {min}',\n 'core.form.input-number.max': 'Value must not be greater than {max}',\n\n // ---- Forms: radio ----\n 'core.form.radio.required': 'Please enter information',\n\n // ---- Forms: switch ----\n 'core.form.switch.on': 'On',\n 'core.form.switch.off': 'Off',\n\n // ---- Forms: checkbox ----\n 'core.form.checkbox.checked': 'Yes',\n 'core.form.checkbox.unchecked': 'No',\n\n // ---- Forms: select ----\n 'core.form.select.required': 'Please enter information',\n\n // ---- Forms: textarea ----\n 'core.form.textarea.required': 'Please enter information',\n 'core.form.textarea.maxlength': 'Maximum characters: {max}',\n 'core.form.textarea.invalid-pattern': 'Invalid format',\n 'core.form.textarea.exceeded': 'Exceeded maximum characters',\n\n // ---- Component: editor ----\n 'core.component.editor.required': 'Please enter content',\n 'core.component.editor.maxlength': 'Maximum characters: {max}',\n 'core.component.editor.image.invalid-format': 'File format \".{format}\" is not allowed. Allowed formats: {allowed}',\n 'core.component.editor.image.size-exceeded': 'File size {sizeMB}MB exceeds the limit of {maxSizeMB}MB',\n 'core.component.editor.image.min-width': 'Image width {width}px is below the minimum of {min}px',\n 'core.component.editor.image.min-height': 'Image height {height}px is below the minimum of {min}px',\n 'core.component.editor.image.max-width': 'Image width {width}px exceeds the limit of {max}px',\n 'core.component.editor.image.max-height': 'Image height {height}px exceeds the limit of {max}px',\n 'core.component.editor.image.max-per-selection': 'You can select at most {max} images per selection',\n\n // ---- Component: document-builder ----\n 'core.component.document-builder.page-number.current': 'Current page number',\n 'core.component.document-builder.page-number.total': 'Total pages',\n 'core.component.document-builder.ck-comment.label': 'Comment',\n 'core.component.document-builder.ck-comment.text-too-long': 'Text too long ({length} characters). Maximum {max} characters.',\n 'core.component.document-builder.variable.not-allowed': 'Adding variable to the text is not allowed',\n 'core.component.document-builder.variable.invalid-data': 'Invalid variable data',\n\n // ---- Component: form-builder ----\n 'core.component.form-builder.field-key': 'Field key',\n 'core.component.form-builder.display': 'Display',\n 'core.component.form-builder.general': 'General',\n 'core.component.form-builder.visible-when': 'Visible when',\n 'core.component.form-builder.required': 'Required',\n 'core.component.form-builder.label': 'Label',\n 'core.component.form-builder.disabled': 'Disabled',\n 'core.component.form-builder.disabled-when': 'Disabled when',\n 'core.component.form-builder.hidden-when': 'Hidden when',\n 'core.component.form-builder.validation': 'Validation',\n 'core.component.form-builder.required-when': 'Required when',\n 'core.component.form-builder.confirm': 'Confirm',\n 'core.component.form-builder.delete': 'Delete',\n 'core.component.form-builder.save': 'Save',\n 'core.component.form-builder.hint': 'Hint',\n 'core.component.form-builder.parameter': 'Parameters',\n 'core.component.form-builder.add-field': 'Add field',\n 'core.component.form-builder.data': 'Data',\n 'core.component.form-builder.query-condition': 'Query condition',\n 'core.component.form-builder.set-query-value': 'Set query value',\n 'core.component.form-builder.value-source-field': 'Source field',\n 'core.component.form-builder.assign-parameter': 'Assign parameter',\n 'core.component.form-builder.template-data': 'Template data',\n 'core.component.form-builder.set-expression': 'Set expression',\n 'core.component.form-builder.condition-group': 'Condition group',\n 'core.component.form-builder.condition': 'Condition',\n 'core.component.form-builder.layout': 'Layout',\n 'core.component.form-builder.maxlength': 'Maximum characters',\n 'core.component.form-builder.assign-parameter-value': 'Assign parameter value',\n 'core.component.form-builder.parameter-name': 'Parameter name',\n 'core.component.form-builder.parameter-value': 'Parameter value',\n 'core.component.form-builder.assign-value': 'Assign value',\n 'core.component.form-builder.add-data': 'Add data',\n 'core.component.form-builder.data-api': 'API data',\n 'core.component.form-builder.data-static': 'Static data',\n 'core.component.form-builder.set-on-change-assign': 'Set value-on-change',\n 'core.component.form-builder.target-field': 'Target field',\n 'core.component.form-builder.target-value': 'Target value',\n 'core.component.form-builder.column-data': 'Column data',\n 'core.component.form-builder.add-column': 'Add column',\n 'core.component.form-builder.column-config': 'Column config',\n 'core.component.form-builder.column-name': 'Column name',\n 'core.component.form-builder.width': 'Width',\n 'core.component.form-builder.data-type': 'Data type',\n 'core.component.form-builder.show-when-true': 'Show when TRUE',\n 'core.component.form-builder.show-when-false': 'Show when FALSE',\n 'core.component.form-builder.column-list': 'Column list',\n 'core.component.form-builder.yes-no': 'Yes/No',\n 'core.component.form-builder.config-validation-error-warning': 'Configure validation error/warning',\n 'core.component.form-builder.message-type': 'Message type',\n 'core.component.form-builder.message-display': 'Display message',\n 'core.component.form-builder.condition-expression': 'Condition expression',\n 'core.component.form-builder.add-validation': 'Add validation',\n 'core.component.form-builder.expression': 'Expression',\n 'core.component.form-builder.available-methods': 'Available methods',\n 'core.component.form-builder.format': 'Format',\n 'core.component.form-builder.time': 'Time',\n 'core.component.form-builder.content': 'Content',\n 'core.component.form-builder.min': 'Minimum',\n 'core.component.form-builder.max': 'Maximum',\n 'core.component.form-builder.vertical': 'Vertical',\n 'core.component.form-builder.multiple': 'Multiple selection',\n 'core.component.form-builder.default-value': 'Default value',\n 'core.component.form-builder.type': 'Type',\n 'core.component.form-builder.file': 'File',\n 'core.component.form-builder.image': 'Image',\n 'core.component.form-builder.max-files': 'Max files/images',\n 'core.component.form-builder.size-mb': 'Size (MB)',\n 'core.component.form-builder.format-example': 'Format (e.g. png,jpg ...)',\n 'core.component.form-builder.source-mobile': 'Source (mobile)',\n 'core.component.form-builder.config-variable': 'Configure variables',\n 'core.component.form-builder.config-validation-warning-error': 'Configure validation warning/error',\n 'core.component.form-builder.back-to-design': 'Back to design',\n 'core.component.form-builder.preview': 'Preview',\n 'core.component.form-builder.drag-vertically': 'Drag up/down',\n 'core.component.form-builder.unset-readonly': 'Remove read-only',\n 'core.component.form-builder.set-readonly': 'Read-only',\n 'core.component.form-builder.duplicate': 'Duplicate',\n 'core.component.form-builder.show': 'Show',\n 'core.component.form-builder.hide': 'Hide',\n 'core.component.form-builder.flex': 'Flex',\n 'core.component.form-builder.display-label': 'Display label',\n 'core.component.form-builder.attribute': 'Attribute',\n 'core.component.form-builder.add-variable': 'Add variable',\n 'core.component.form-builder.add-new': 'Add new',\n 'core.component.form-builder.detail': 'Details',\n 'core.component.form-builder.create-update': 'Create/update',\n 'core.component.form-builder.default': 'Default',\n 'core.component.form-builder.show-more': 'Show more',\n 'core.component.form-builder.show-less': 'Show less',\n 'core.component.inform.show-more': 'Show more',\n 'core.component.inform.show-less': 'Show less',\n 'core.component.data-state.loading.title': 'Loading',\n 'core.component.data-state.loading.message': 'Please wait while the data is being loaded.',\n 'core.component.data-state.empty.title': 'No data',\n 'core.component.data-state.empty.message': 'There is no data to display yet.',\n 'core.component.data-state.error.title': 'Unable to load data',\n 'core.component.data-state.error.message': 'An error occurred. Please try again.',\n 'core.component.data-state.forbidden.title': 'Access denied',\n 'core.component.data-state.forbidden.message': 'You do not have permission to view this content.',\n 'core.component.data-state.retry': 'Try again',\n 'core.component.form-builder.row-overflow': 'Cannot move to this row because the total size exceeds 12 columns',\n 'core.component.form-builder.upload-source.all': 'All',\n 'core.component.form-builder.upload-source.photo-library': 'Pick from library',\n 'core.component.form-builder.upload-source.capture': 'Take photo',\n // Form-builder UI v2 (M3 redesign)\n 'core.component.form-builder.components': 'Components',\n 'core.component.form-builder.search-components': 'Search components…',\n 'core.component.form-builder.view-json': 'View JSON',\n 'core.component.form-builder.design': 'Design',\n 'core.component.form-builder.preview-runtime': 'Preview · Runtime',\n 'core.component.form-builder.cancel': 'Cancel',\n 'core.component.form-builder.submit': 'Submit',\n 'core.component.form-builder.empty-title': 'Drag components here to start',\n 'core.component.form-builder.empty-hint': 'Build your form by dragging fields from the left panel, or press',\n 'core.component.form-builder.conditional': 'Conditional',\n 'core.component.form-builder.group-drop-here': 'Drop a field here to add it to this group',\n 'core.component.form-builder.edit-group': 'Edit group',\n 'core.component.form-builder.group-empty-hint': 'Click Details to add fields to this group',\n 'core.component.form-builder.hidden': 'Hidden',\n 'core.component.form-builder.read-only': 'Read only',\n 'core.component.form-builder.untitled': 'Untitled',\n 'core.component.form-builder.no-selection-title': 'Nothing selected',\n 'core.component.form-builder.no-selection-hint': 'Select a component on the canvas to edit its attributes.',\n 'core.component.form-builder.group-children': 'Children',\n 'core.component.form-builder.group-icon': 'Icon',\n 'core.component.form-builder.group-accent-color': 'Accent color',\n 'core.component.form-builder.group-no-children': 'No fields yet. Add or drag fields into this group.',\n 'core.component.form-builder.break': 'Break',\n\n // ---- Component: code-editor ----\n 'core.component.code-editor.copied': 'Copied!',\n 'core.component.code-editor.copy': 'Copy code',\n\n // ---- Component: history ----\n 'core.component.history.by': 'By',\n\n // ---- Component: import-excel ----\n 'core.component.import-excel.title': 'Import Excel data',\n 'core.component.import-excel.see-all': 'See all',\n 'core.component.import-excel.valid-rows': 'Valid rows',\n 'core.component.import-excel.error-rows': 'Error rows',\n 'core.component.import-excel.warning-rows': 'Warning rows',\n 'core.component.import-excel.valid-data': 'Valid data',\n 'core.component.import-excel.download-template-tooltip': 'Click to download template',\n 'core.component.import-excel.upload': 'Upload',\n 'core.component.import-excel.download': 'Download',\n 'core.component.import-excel.confirm-save': 'Confirm & Save',\n 'core.component.import-excel.status': 'Status',\n 'core.component.import-excel.no-data-upload': 'No data uploaded',\n 'core.component.import-excel.click-here-template': 'Click here to download template',\n 'core.component.import-excel.no-data-in-file': 'File has no data',\n 'core.component.import-excel.row-limit': 'Upload limit is {limit} rows',\n 'core.component.import-excel.required': 'Required data',\n 'core.component.import-excel.min-length': 'Minimum string length: {min}',\n 'core.component.import-excel.max-length': 'Maximum string length: {max}',\n 'core.component.import-excel.not-a-number': '{value} is not a valid number',\n 'core.component.import-excel.below-min': '{value} is below the minimum value: {min}',\n 'core.component.import-excel.above-max': '{value} is above the maximum value: {max}',\n 'core.component.import-excel.invalid-bool': 'Please enter a valid value (true, false, 1, 0)',\n 'core.component.import-excel.invalid-value': 'Value {value} is invalid',\n 'core.component.import-excel.value-not-in-list': 'Value {value} is not in the allowed list [{list}]',\n 'core.component.import-excel.invalid-date-format': 'Date {value} does not match format {format}',\n 'core.component.import-excel.generic-error': 'An error occurred',\n 'core.component.import-excel.notify-title': 'Notification',\n 'core.component.import-excel.message-column': 'Message',\n 'core.component.import-excel.success': 'Success',\n\n // ---- Component: preview-image ----\n 'core.component.preview-image.no-image': 'No image information',\n 'core.component.preview-image.title': 'Preview image',\n 'core.component.preview-image.no-image-hint': 'There are no images to display',\n 'core.component.preview-image.load-error': 'Failed to load image',\n 'core.component.preview-image.load-error-hint': 'The image may have been deleted or the path is invalid',\n 'core.component.preview-image.retry': 'Retry',\n 'core.component.preview-image.close': 'Close',\n 'core.component.preview-image.prev': 'Previous image',\n 'core.component.preview-image.next': 'Next image',\n 'core.component.preview-image.zoom-in': 'Zoom in',\n 'core.component.preview-image.zoom-out': 'Zoom out',\n 'core.component.preview-image.fit': 'Fit to screen',\n 'core.component.preview-image.rotate': 'Rotate',\n 'core.component.preview-image.download': 'Download',\n 'core.component.preview-image.fullscreen': 'Fullscreen',\n 'core.component.preview-image.loading': 'Loading image...',\n 'core.component.preview-image.kbd-hint-nav': 'navigate',\n 'core.component.preview-image.kbd-hint-close': 'close',\n\n // ---- Component: preview-pdf ----\n 'core.component.preview-pdf.title': 'Preview document',\n 'core.component.preview-pdf.close': 'Close',\n 'core.component.preview-pdf.pages-count': '{count} pages',\n 'core.component.preview-pdf.tab.thumbnails': 'Pages',\n 'core.component.preview-pdf.tab.outline': 'Outline',\n 'core.component.preview-pdf.tab.search': 'Find',\n 'core.component.preview-pdf.first-page': 'First page',\n 'core.component.preview-pdf.prev-page': 'Previous page',\n 'core.component.preview-pdf.next-page': 'Next page',\n 'core.component.preview-pdf.last-page': 'Last page',\n 'core.component.preview-pdf.zoom-in': 'Zoom in',\n 'core.component.preview-pdf.zoom-out': 'Zoom out',\n 'core.component.preview-pdf.fit-page': 'Fit page',\n 'core.component.preview-pdf.fit-width': 'Fit width',\n 'core.component.preview-pdf.actual-size': 'Actual size',\n 'core.component.preview-pdf.rotate': 'Rotate',\n 'core.component.preview-pdf.scroll-page': 'Single page',\n 'core.component.preview-pdf.scroll-continuous': 'Continuous scroll',\n 'core.component.preview-pdf.print': 'Print',\n 'core.component.preview-pdf.download': 'Download',\n 'core.component.preview-pdf.fullscreen': 'Fullscreen',\n 'core.component.preview-pdf.toggle-sidebar': 'Toggle sidebar',\n 'core.component.preview-pdf.page-of': 'page {current} / {total}',\n 'core.component.preview-pdf.empty.title': 'No document',\n 'core.component.preview-pdf.empty.subtitle': 'No PDF file to display yet',\n 'core.component.preview-pdf.loading': 'Loading document...',\n 'core.component.preview-pdf.loading.page': 'Processing page {current} / {total}',\n 'core.component.preview-pdf.error.invalid.title': 'Failed to load document',\n 'core.component.preview-pdf.error.invalid.body': 'The PDF file may be corrupted. Please check the file.',\n 'core.component.preview-pdf.error.password.title': 'Document is protected',\n 'core.component.preview-pdf.error.password.body': 'This PDF file requires a password to open.',\n 'core.component.preview-pdf.error.network.title': 'Cannot connect',\n 'core.component.preview-pdf.error.network.body': 'Unable to load the file from the server. Please try again later.',\n 'core.component.preview-pdf.error.unknown.title': 'An error occurred',\n 'core.component.preview-pdf.error.unknown.body': 'Please retry or download the original file to view it.',\n 'core.component.preview-pdf.error.retry': 'Retry',\n 'core.component.preview-pdf.error.download-raw': 'Download original',\n 'core.component.preview-pdf.search': 'Search',\n 'core.component.preview-pdf.search-placeholder': 'Search in document...',\n 'core.component.preview-pdf.search-case': 'Match case',\n 'core.component.preview-pdf.search-whole': 'Whole word',\n 'core.component.preview-pdf.search-no-results': 'No results',\n 'core.component.preview-pdf.search-results-count': '{count} results for \"{term}\"',\n 'core.component.preview-pdf.search-truncated': 'Showing the first {count} matches. Refine your search to see fewer results.',\n 'core.component.preview-pdf.search-prev': 'Previous match',\n 'core.component.preview-pdf.search-next': 'Next match',\n 'core.component.preview-pdf.search-close': 'Close search',\n\n // ---- Component: table ----\n 'core.component.table.setup': 'Table setup',\n 'core.component.table.column-header': 'Column header',\n 'core.component.table.width': 'Width',\n 'core.component.table.fixed': 'Fixed',\n 'core.component.table.char-limit': 'Character limit',\n 'core.component.table.skip': 'Skip',\n 'core.component.table.apply': 'Apply',\n 'core.component.table.filter': 'Filter',\n 'core.component.table.clear-selection': 'Clear selection',\n 'core.component.table.customize': 'Customize',\n 'core.component.table.search': 'Search',\n 'core.component.table.reload': 'Reload',\n 'core.component.table.setup-short': 'Setup',\n 'core.component.table.no-results': 'No results found',\n 'core.component.table.no-results-hint': 'Please search or filter with different criteria',\n 'core.component.table.choose-filter-hint': 'Please choose a filter to start',\n 'core.component.table.no-data': 'No data',\n 'core.component.table.export-excel': 'Export Excel',\n 'core.component.table.export-csv': 'Export CSV',\n 'core.component.table.showing': 'Showing:',\n 'core.component.table.paginator.first-page': 'First page',\n 'core.component.table.paginator.last-page': 'Last page',\n 'core.component.table.paginator.items-per-page': 'Showing',\n 'core.component.table.paginator.next-page': 'Next page',\n 'core.component.table.paginator.previous-page': 'Previous page',\n 'core.component.table.error-occurred': 'An error occurred',\n 'core.component.table.not-an-array': 'Data is not an array',\n 'core.component.table.config.confirm-reset': 'Confirm reset all settings to defaults',\n 'core.component.table.popup-export.select-columns': 'Please select columns to export',\n 'core.component.table.selector-action.default-msg': 'items selected',\n 'core.component.tab-router.too-many-tabs': 'You have opened too many tabs.',\n\n // ---- Component: upload-file ----\n 'core.component.upload-file.upload': 'Upload file',\n 'core.component.upload-file.error-occurred': 'An error occurred',\n 'core.component.upload-file.please-upload': 'Please upload a file/image',\n 'core.component.upload-file.desc-format-and-size': 'Format: {exts} and up to: {maxSize}MB',\n 'core.component.upload-file.desc-format': 'Format: {exts}',\n 'core.component.upload-file.desc-max-size': 'Up to: {maxSize}MB',\n 'core.component.upload-file.not-image': '[{name}] Uploaded file is not an image',\n 'core.component.upload-file.invalid-format': '[{name}] Uploaded file has invalid format: {exts}',\n 'core.component.upload-file.size-exceeded': '[{name}] Max file size: {maxSize} MB',\n 'core.component.upload-file.upload-failed': 'An error occurred during file upload',\n 'core.component.upload-file.too-many-files': 'You selected too many files. Please check the count',\n 'core.component.upload-file.confirm-delete-message': 'Do you want to delete this file? This action cannot be undone',\n 'core.component.upload-file.confirm-delete-title': 'Confirm delete?',\n 'core.component.upload-file.confirm-yes': 'Confirm',\n 'core.component.upload-file.confirm-no': 'Cancel',\n 'core.component.upload-file.no-configuration': 'Please inject SD_UPLOAD_FILE_CONFIGURATION or pass [upload] directly into the component',\n 'core.component.upload-file.no-configuration-key':\n \"No upload configuration found for key='{key}'. Please check providers or pass [upload] directly\",\n 'core.component.upload-file.preview-title': 'Preview image',\n\n // ---- Module: layout (sidebar / user menu) ----\n 'core.module.layout.user.change-password': 'Change password',\n 'core.module.layout.user.logout': 'Sign out',\n 'core.module.layout.user.update-profile': 'Update profile',\n 'core.module.layout.user.setting': 'Settings',\n 'core.module.layout.user.notification': 'Notifications',\n 'core.module.layout.sidebar.search': 'Search',\n 'core.module.layout.sidebar.toggle': 'Toggle sidebar',\n\n // ---- Module: layout (greeting + weekday) ----\n 'core.module.layout.greeting.hello': 'Hello, {name}',\n 'core.module.layout.weekday.0': 'Sunday',\n 'core.module.layout.weekday.1': 'Monday',\n 'core.module.layout.weekday.2': 'Tuesday',\n 'core.module.layout.weekday.3': 'Wednesday',\n 'core.module.layout.weekday.4': 'Thursday',\n 'core.module.layout.weekday.5': 'Friday',\n 'core.module.layout.weekday.6': 'Saturday',\n 'core.module.layout.today-info.format': '{weekday}, {date}',\n\n // ---- Module: layout (forbidden page) ----\n 'core.module.layout.forbidden.title': 'Access denied',\n 'core.module.layout.forbidden.message':\n \"You don't have permission to access this page. Please contact your administrator or go back to the home page\",\n 'core.module.layout.forbidden.back-home': 'Back to home',\n\n // ---- Module: layout (not-found page) ----\n 'core.module.layout.not-found.title': '404 - Page not found',\n 'core.module.layout.not-found.message':\n \"The page you're looking for doesn't exist or has been removed. Please check the URL or go back to the home page to continue.\",\n 'core.module.layout.not-found.back': 'Go back',\n\n // ---- Module: layout (home page) ----\n 'core.module.layout.home.tab-name': 'Home',\n 'core.module.layout.home.feature.data': 'Data',\n 'core.module.layout.home.feature.reports': 'Reports',\n 'core.module.layout.home.feature.users': 'Users',\n 'core.module.layout.home.feature.workflow': 'Workflow',\n 'core.module.layout.home.feature.audit': 'Audit',\n 'core.module.layout.home.feature.integration': 'Integration',\n\n // ---- Module: layout (mock fallback when SD_LAYOUT_CONFIGURATION is not provided) ----\n 'core.module.layout.mock.user.full-name': 'Demo User',\n\n // ---- Module: generic (generic-select) ----\n 'core.module.generic.generic-select.detail-link': 'details',\n} as const;\n","import type { EN_MESSAGES } from './en';\n\nexport const JA_MESSAGES: Record<keyof typeof EN_MESSAGES, string> = {\n 'core.common.cancel': 'キャンセル',\n 'core.common.close': '閉じる',\n 'core.common.reload': 'ページを再読み込み',\n 'core.test.greet': 'こんにちは {name}さん',\n\n // ---- Validators (VALIDATION_PATTERNS in @sdcorejs/utils/constants) ----\n 'core.validator.email.name': 'メールアドレス',\n 'core.validator.email.error': 'メールアドレスの形式が正しくありません',\n 'core.validator.phone.name': '電話番号',\n 'core.validator.phone.error': '電話番号の形式が正しくありません',\n // Legacy aliases\n 'core.validator.phone-vn.name': 'VN電話番号',\n 'core.validator.phone-vn.error': 'ベトナムの電話番号の形式が正しくありません',\n 'core.validator.cccd.name': '個人番号',\n 'core.validator.cccd.error': '個人番号の形式が正しくありません(12桁)',\n 'core.validator.id-vn.name': '個人番号 / パスポート',\n 'core.validator.id-vn.error': '個人番号またはパスポート番号の形式が正しくありません',\n 'core.validator.vn-phone.name': 'VN電話番号',\n 'core.validator.vn-phone.error': 'ベトナムの電話番号の形式が正しくありません',\n 'core.validator.vn-id.name': '個人番号',\n 'core.validator.vn-id.error': '個人番号の形式が正しくありません(12桁)',\n 'core.validator.passport.name': 'パスポート',\n 'core.validator.passport.error': 'パスポート番号の形式が正しくありません(英字1文字 + 数字7桁)',\n 'core.validator.vn-id-or-passport.name': '個人番号 / パスポート',\n 'core.validator.vn-id-or-passport.error': '個人番号またはパスポート番号の形式が正しくありません',\n 'core.validator.time.name': '時刻',\n 'core.validator.time.error': '時刻の形式が正しくありません(HH:mm 形式)',\n 'core.validator.url.name': 'URL',\n 'core.validator.url.error': 'URLの形式が正しくありません',\n 'core.validator.domain.name': 'ドメイン',\n 'core.validator.domain.error': 'ドメインの形式が正しくありません',\n 'core.validator.ipv4.name': 'IPv4',\n 'core.validator.ipv4.error': 'IPv4アドレスの形式が正しくありません',\n 'core.validator.ipv6.name': 'IPv6',\n 'core.validator.ipv6.error': 'IPv6アドレスの形式が正しくありません',\n 'core.validator.image-url.name': '画像URL',\n 'core.validator.image-url.error': '画像URLの形式が正しくありません',\n 'core.validator.slug.name': 'スラッグ',\n 'core.validator.slug.error': 'スラッグの形式が正しくありません',\n 'core.validator.number.name': '数値',\n 'core.validator.number.error': '数値の形式が正しくありません',\n 'core.validator.integer.name': '整数',\n 'core.validator.integer.error': '整数の形式が正しくありません',\n 'core.validator.decimal.name': '小数',\n 'core.validator.decimal.error': '小数の形式が正しくありません',\n 'core.validator.positive-number.name': '正の数',\n 'core.validator.positive-number.error': '正の数を入力してください',\n 'core.validator.uuid.name': 'UUID',\n 'core.validator.uuid.error': 'UUIDの形式が正しくありません',\n 'core.validator.code-16.name': '16文字コード',\n 'core.validator.code-16.error': '16文字コードの形式が正しくありません',\n 'core.validator.code-32.name': '32文字コード',\n 'core.validator.code-32.error': '32文字コードの形式が正しくありません',\n 'core.validator.hex-color.name': 'HEXカラー',\n 'core.validator.hex-color.error': 'HEXカラーの形式が正しくありません',\n 'core.validator.base64.name': 'Base64',\n 'core.validator.base64.error': 'Base64文字列の形式が正しくありません',\n\n // ---- Operators (operator.model.ts) ----\n 'core.operator.equal.display': '等しい',\n 'core.operator.not-equal.display': '等しくない',\n 'core.operator.greater-than.display': 'より大きい',\n 'core.operator.less-than.display': 'より小さい',\n 'core.operator.greater-or-equal.display': '以上',\n 'core.operator.less-or-equal.display': '以下',\n 'core.operator.contain.display': '含む',\n 'core.operator.not-contain.display': '含まない',\n 'core.operator.start-with.display': 'で始まる',\n 'core.operator.not-start-with.display': 'で始まらない',\n 'core.operator.end-with.display': 'で終わる',\n 'core.operator.not-end-with.display': 'で終わらない',\n 'core.operator.in.display': 'いずれかに一致',\n 'core.operator.not-in.display': 'いずれにも一致しない',\n 'core.operator.between.display': '範囲内',\n 'core.operator.null.display': '空である',\n 'core.operator.not-null.display': '空でない',\n\n // ---- Global error handler ----\n 'core.handler.global-error.update-title': '新しいシステムアップデートがあります',\n 'core.handler.global-error.update-body':\n '現在のバージョンが古いため、リソースを読み込めませんでした。\\nOKを押してページを再読み込みしてください。',\n\n // ---- Interceptor: no-internet ----\n 'core.interceptor.no-internet.offline': 'ネットワーク接続がありません。接続を待機中...',\n 'core.interceptor.no-internet.cors-error': 'サーバーに接続できません(CORSまたは設定エラー)。',\n 'core.interceptor.no-internet.maintenance': 'サーバーはメンテナンス中です。しばらくしてから再度お試しください。',\n 'core.interceptor.no-internet.restored': '接続が復旧しました。',\n\n // ---- Service: excel ----\n 'core.excel.cannot-read-file': 'ファイルの内容を読み取れませんでした',\n 'core.excel.no-sheet': 'Excelファイルにデータシートがありません',\n\n // ---- Service: docx ----\n 'core.docx.invalid-format': '形式が正しくありません。DOCまたはDOCX形式のテンプレートを選択してください',\n 'core.docx.size-exceeded': 'テンプレートファイルのサイズが上限を超えています。もう一度お試しください',\n 'core.docx.convert-error': 'DOCXファイルの変換中にエラーが発生しました',\n\n // ---- Service: notify (toast) ----\n 'core.notify.type.success': '成功',\n 'core.notify.type.info': '情報',\n 'core.notify.type.warning': '警告',\n 'core.notify.type.error': 'エラー',\n 'core.notify.show-more': 'もっと見る ({count})',\n 'core.notify.show-less': '折りたたむ',\n\n // ---- Service: confirm ----\n 'core.confirm.title': '確認',\n 'core.confirm.yes': 'OK',\n 'core.confirm.no': 'キャンセル',\n 'core.confirm.yes-short': 'はい',\n 'core.confirm.no-short': 'いいえ',\n\n // ---- Directive: hover-copy ----\n 'core.directive.hover-copy.tooltip': 'コピー',\n\n // ---- Forms: input ----\n 'core.form.input.required': '入力してください',\n 'core.form.input.maxlength': '最大文字数: {max}',\n 'core.form.input.invalid-pattern': '形式が正しくありません',\n 'core.form.input.exceeded': '最大文字数を超えています',\n 'core.form.input.mask-incomplete': '値が未完成です',\n 'core.form.input.mask-invalid': '使用できない文字が含まれています',\n\n // ---- Forms: autocomplete ----\n 'core.form.autocomplete.required': '入力してください',\n\n // ---- Forms: chip ----\n 'core.form.chip.required': '入力してください',\n 'core.form.chip.minlength': '{min}件以上入力してください',\n 'core.form.chip.maxlength': '{max}件以内で入力してください',\n\n // ---- Forms: chip-calendar ----\n 'core.form.chip-calendar.required': '入力してください',\n 'core.form.chip-calendar.minlength': '{min}件以上入力してください',\n 'core.form.chip-calendar.maxlength': '{max}件以内で入力してください',\n\n // ---- Forms: date ----\n 'core.form.date.required': '入力してください',\n 'core.form.date.min-date': '最小日付: {date}',\n 'core.form.date.max-date': '最大日付: {date}',\n 'core.form.date.parse-error': '解析エラー: {text}',\n 'core.form.date.invalid-format': '形式が正しくありません',\n\n // ---- Forms: date-range ----\n 'core.form.date-range.required': '入力してください',\n 'core.form.date-range.invalid-min': '開始日が無効です(下限を下回っています)',\n 'core.form.date-range.invalid-max': '終了日が無効です(上限を超えています)',\n 'core.form.date-range.from': '開始',\n 'core.form.date-range.to': '~',\n\n // ---- Forms: datetime ----\n 'core.form.datetime.required': '入力してください',\n 'core.form.datetime.min-date': '最小日付: {date}',\n 'core.form.datetime.max-date': '最大日付: {date}',\n 'core.form.datetime.invalid-format': '形式が正しくありません',\n 'core.form.datetime.now': '現在',\n 'core.form.datetime.confirm': '確定',\n\n // ---- Forms: entity-picker / tree-select ----\n 'core.form.entity-picker.placeholder': 'エンティティを選択',\n 'core.form.entity-picker.modal-title': 'エンティティを選択',\n 'core.form.entity-picker.value': '値',\n 'core.form.entity-picker.clear': '選択をクリア',\n 'core.form.entity-picker.add': '追加',\n 'core.form.entity-picker.cancel': 'キャンセル',\n 'core.form.entity-picker.apply': '適用',\n 'core.form.tree-select.placeholder': 'ツリー項目を選択',\n 'core.form.tree-select.modal-title': 'ツリー項目を選択',\n 'core.form.tree-select.clear': '選択をクリア',\n 'core.form.tree-select.search': 'ツリーを検索',\n 'core.form.tree-select.cancel': 'キャンセル',\n 'core.form.tree-select.apply': '適用',\n 'core.component.tree.retry': '再試行',\n 'core.service.unsaved-changes.message': '未保存の変更があります。破棄して続行しますか?',\n 'core.component.job-progress.status.idle': '準備完了',\n 'core.component.job-progress.status.queued': '待機中',\n 'core.component.job-progress.status.running': '処理中',\n 'core.component.job-progress.status.succeeded': '完了',\n 'core.component.job-progress.status.failed': '失敗',\n 'core.component.job-progress.status.cancelled': 'キャンセル済み',\n 'core.component.job-progress.cancel': 'キャンセル',\n 'core.component.job-progress.retry': '再試行',\n 'core.component.audit-diff.label': '監査変更',\n 'core.component.audit-diff.field': '項目',\n 'core.component.audit-diff.before': '変更前',\n 'core.component.audit-diff.after': '変更後',\n 'core.component.audit-diff.empty': '変更はありません',\n 'core.component.audit-diff.kind.added': '追加',\n 'core.component.audit-diff.kind.removed': '削除',\n 'core.component.audit-diff.kind.changed': '変更',\n 'core.component.audit-diff.kind.unchanged': '未変更',\n 'core.component.audit-diff.value.label': '値',\n 'core.component.audit-diff.value.not-set': '未設定',\n 'core.component.audit-diff.value.undefined': '未定義',\n 'core.component.audit-diff.value.null': 'Null',\n 'core.component.audit-diff.value.true': 'はい',\n 'core.component.audit-diff.value.false': 'いいえ',\n\n // ---- Forms: time ----\n 'core.form.time.required': '時刻を入力してください',\n 'core.form.time.invalid': 'HH:mm形式の有効な時刻を入力してください',\n 'core.form.time.min': '時刻は{min}以降にしてください',\n 'core.form.time.max': '時刻は{max}以前にしてください',\n 'core.form.time.step': '時刻は{step}分間隔で入力してください',\n 'core.form.time.open-picker': '時刻選択を開く',\n 'core.form.time.confirm': '確定',\n 'core.form.time.clear': '時刻をクリア',\n\n // ---- Forms: time-range ----\n 'core.form.time-range.required': '開始時刻と終了時刻を入力してください',\n 'core.form.time-range.incomplete': '両方の時刻を入力するか、オープン範囲を有効にしてください',\n 'core.form.time-range.range': '開始時刻は終了時刻以前にしてください',\n 'core.form.time-range.invalid': 'HH:mm形式の有効な時刻を入力してください',\n 'core.form.time-range.min': '時刻は{min}以降にしてください',\n 'core.form.time-range.max': '時刻は{max}以前にしてください',\n 'core.form.time-range.step': '時刻は{step}分間隔で入力してください',\n 'core.form.time-range.from': '開始',\n 'core.form.time-range.to': '終了',\n 'core.form.time-range.clear': '時間範囲をクリア',\n\n // ---- Forms: time-spinner ----\n 'core.form.time-spinner.hour': '時',\n 'core.form.time-spinner.minute': '分',\n 'core.form.time-spinner.second': '秒',\n 'core.form.time-spinner.increase-hour': '時を増やす',\n 'core.form.time-spinner.decrease-hour': '時を減らす',\n 'core.form.time-spinner.increase-minute': '分を増やす',\n 'core.form.time-spinner.decrease-minute': '分を減らす',\n 'core.form.time-spinner.increase-second': '秒を増やす',\n 'core.form.time-spinner.decrease-second': '秒を減らす',\n\n // ---- Forms: input-number ----\n 'core.form.input-number.required': '入力してください',\n 'core.form.input-number.min': '{min}以上の値を入力してください',\n 'core.form.input-number.max': '{max}以下の値を入力してください',\n\n // ---- Forms: radio ----\n 'core.form.radio.required': '選択してください',\n\n // ---- Forms: switch ----\n 'core.form.switch.on': 'オン',\n 'core.form.switch.off': 'オフ',\n\n // ---- Forms: checkbox ----\n 'core.form.checkbox.checked': 'はい',\n 'core.form.checkbox.unchecked': 'いいえ',\n\n // ---- Forms: select ----\n 'core.form.select.required': '選択してください',\n\n // ---- Forms: textarea ----\n 'core.form.textarea.required': '入力してください',\n 'core.form.textarea.maxlength': '最大文字数: {max}',\n 'core.form.textarea.invalid-pattern': '形式が正しくありません',\n 'core.form.textarea.exceeded': '最大文字数を超えています',\n\n // ---- Component: editor ----\n 'core.component.editor.required': '内容を入力してください',\n 'core.component.editor.maxlength': '最大文字数: {max}',\n 'core.component.editor.image.invalid-format': 'ファイル形式 \".{format}\" は許可されていません。許可される形式: {allowed}',\n 'core.component.editor.image.size-exceeded': 'ファイルサイズ {sizeMB}MB は上限の {maxSizeMB}MB を超えています',\n 'core.component.editor.image.min-width': '画像の幅 {width}px は最小値 {min}px を下回っています',\n 'core.component.editor.image.min-height': '画像の高さ {height}px は最小値 {min}px を下回っています',\n 'core.component.editor.image.max-width': '画像の幅 {width}px は上限 {max}px を超えています',\n 'core.component.editor.image.max-height': '画像の高さ {height}px は上限 {max}px を超えています',\n 'core.component.editor.image.max-per-selection': '一度に選択できる画像は最大{max}枚です',\n\n // ---- Component: document-builder ----\n 'core.component.document-builder.page-number.current': '現在のページ番号',\n 'core.component.document-builder.page-number.total': '総ページ数',\n 'core.component.document-builder.ck-comment.label': 'コメント',\n 'core.component.document-builder.ck-comment.text-too-long': 'テキストが長すぎます({length}文字)。最大{max}文字です。',\n 'core.component.document-builder.variable.not-allowed': 'テキストへの変数の追加は許可されていません',\n 'core.component.document-builder.variable.invalid-data': '変数データが正しくありません',\n\n // ---- Component: form-builder ----\n 'core.component.form-builder.field-key': 'フィールドキー',\n 'core.component.form-builder.display': '表示',\n 'core.component.form-builder.general': '一般',\n 'core.component.form-builder.visible-when': '表示条件',\n 'core.component.form-builder.required': '必須',\n 'core.component.form-builder.label': 'ラベル',\n 'core.component.form-builder.disabled': '無効',\n 'core.component.form-builder.disabled-when': '無効化条件',\n 'core.component.form-builder.hidden-when': '非表示条件',\n 'core.component.form-builder.validation': 'バリデーション',\n 'core.component.form-builder.required-when': '必須条件',\n 'core.component.form-builder.confirm': '確認',\n 'core.component.form-builder.delete': '削除',\n 'core.component.form-builder.save': '保存',\n 'core.component.form-builder.hint': 'ヒント',\n 'core.component.form-builder.parameter': 'パラメータ',\n 'core.component.form-builder.add-field': 'フィールドを追加',\n 'core.component.form-builder.data': 'データ',\n 'core.component.form-builder.query-condition': 'クエリ条件',\n 'core.component.form-builder.set-query-value': 'クエリ値を設定',\n 'core.component.form-builder.value-source-field': 'ソースフィールド',\n 'core.component.form-builder.assign-parameter': 'パラメータを割り当て',\n 'core.component.form-builder.template-data': 'テンプレートデータ',\n 'core.component.form-builder.set-expression': '式を設定',\n 'core.component.form-builder.condition-group': '条件グループ',\n 'core.component.form-builder.condition': '条件',\n 'core.component.form-builder.layout': 'レイアウト',\n 'core.component.form-builder.maxlength': '最大文字数',\n 'core.component.form-builder.assign-parameter-value': 'パラメータ値を割り当て',\n 'core.component.form-builder.parameter-name': 'パラメータ名',\n 'core.component.form-builder.parameter-value': 'パラメータ値',\n 'core.component.form-builder.assign-value': '値を割り当て',\n 'core.component.form-builder.add-data': 'データを追加',\n 'core.component.form-builder.data-api': 'APIデータ',\n 'core.component.form-builder.data-static': '静的データ',\n 'core.component.form-builder.set-on-change-assign': '変更時の割り当てを設定',\n 'core.component.form-builder.target-field': '対象フィールド',\n 'core.component.form-builder.target-value': '対象値',\n 'core.component.form-builder.column-data': '列データ',\n 'core.component.form-builder.add-column': '列を追加',\n 'core.component.form-builder.column-config': '列設定',\n 'core.component.form-builder.column-name': '列名',\n 'core.component.form-builder.width': '幅',\n 'core.component.form-builder.data-type': 'データ型',\n 'core.component.form-builder.show-when-true': 'TRUEのとき表示',\n 'core.component.form-builder.show-when-false': 'FALSEのとき表示',\n 'core.component.form-builder.column-list': '列一覧',\n 'core.component.form-builder.yes-no': 'はい/いいえ',\n 'core.component.form-builder.config-validation-error-warning': 'エラー/警告のバリデーションを設定',\n 'core.component.form-builder.message-type': 'メッセージ種別',\n 'core.component.form-builder.message-display': '表示メッセージ',\n 'core.component.form-builder.condition-expression': '条件式',\n 'core.component.form-builder.add-validation': 'バリデーションを追加',\n 'core.component.form-builder.expression': '式',\n 'core.component.form-builder.available-methods': '利用可能なメソッド',\n 'core.component.form-builder.format': 'フォーマット',\n 'core.component.form-builder.time': '時刻',\n 'core.component.form-builder.content': '内容',\n 'core.component.form-builder.min': '最小',\n 'core.component.form-builder.max': '最大',\n 'core.component.form-builder.vertical': '縦',\n 'core.component.form-builder.multiple': '複数選択',\n 'core.component.form-builder.default-value': 'デフォルト値',\n 'core.component.form-builder.type': '種別',\n 'core.component.form-builder.file': 'ファイル',\n 'core.component.form-builder.image': '画像',\n 'core.component.form-builder.max-files': 'ファイル/画像の最大数',\n 'core.component.form-builder.size-mb': 'サイズ (MB)',\n 'core.component.form-builder.format-example': 'フォーマット (例: png,jpg ...)',\n 'core.component.form-builder.source-mobile': 'ソース (モバイル)',\n 'core.component.form-builder.config-variable': '変数を設定',\n 'core.component.form-builder.config-validation-warning-error': '警告/エラーのバリデーションを設定',\n 'core.component.form-builder.back-to-design': 'デザインに戻る',\n 'core.component.form-builder.preview': 'プレビュー',\n 'core.component.form-builder.drag-vertically': '上下にドラッグ',\n 'core.component.form-builder.unset-readonly': '読み取り専用を解除',\n 'core.component.form-builder.set-readonly': '読み取り専用',\n 'core.component.form-builder.duplicate': '複製',\n 'core.component.form-builder.show': '表示',\n 'core.component.form-builder.hide': '非表示',\n 'core.component.form-builder.flex': 'フレックス',\n 'core.component.form-builder.display-label': '表示ラベル',\n 'core.component.form-builder.attribute': '属性',\n 'core.component.form-builder.add-variable': '変数を追加',\n 'core.component.form-builder.add-new': '新規追加',\n 'core.component.form-builder.detail': '詳細',\n 'core.component.form-builder.create-update': '作成/更新',\n 'core.component.form-builder.default': 'デフォルト',\n 'core.component.form-builder.show-more': 'もっと見る',\n 'core.component.form-builder.show-less': '折りたたむ',\n 'core.component.inform.show-more': 'もっと見る',\n 'core.component.inform.show-less': '折りたたむ',\n 'core.component.data-state.loading.title': '読み込み中',\n 'core.component.data-state.loading.message': 'データを読み込んでいます。しばらくお待ちください。',\n 'core.component.data-state.empty.title': 'データがありません',\n 'core.component.data-state.empty.message': '表示するデータはまだありません。',\n 'core.component.data-state.error.title': 'データを読み込めません',\n 'core.component.data-state.error.message': 'エラーが発生しました。もう一度お試しください。',\n 'core.component.data-state.forbidden.title': 'アクセスが拒否されました',\n 'core.component.data-state.forbidden.message': 'このコンテンツを表示する権限がありません。',\n 'core.component.data-state.retry': '再試行',\n 'core.component.form-builder.row-overflow': '合計サイズが12列を超えるため、この行に移動できません',\n 'core.component.form-builder.upload-source.all': 'すべて',\n 'core.component.form-builder.upload-source.photo-library': 'ライブラリから選択',\n 'core.component.form-builder.upload-source.capture': '写真を撮影',\n // Form-builder UI v2 (M3 redesign)\n 'core.component.form-builder.components': 'コンポーネント',\n 'core.component.form-builder.search-components': 'コンポーネントを検索…',\n 'core.component.form-builder.view-json': 'JSONを表示',\n 'core.component.form-builder.design': 'デザイン',\n 'core.component.form-builder.preview-runtime': 'プレビュー · ランタイム',\n 'core.component.form-builder.cancel': 'キャンセル',\n 'core.component.form-builder.submit': '送信',\n 'core.component.form-builder.empty-title': 'コンポーネントをここにドラッグして開始',\n 'core.component.form-builder.empty-hint': '左パネルからフィールドをドラッグしてフォームを構築するか、次を押します:',\n 'core.component.form-builder.conditional': '条件付き',\n 'core.component.form-builder.group-drop-here': 'フィールドをここにドロップしてグループに追加',\n 'core.component.form-builder.edit-group': 'グループを編集',\n 'core.component.form-builder.group-empty-hint': '「詳細」をクリックしてフィールドを追加',\n 'core.component.form-builder.hidden': '非表示',\n 'core.component.form-builder.read-only': '読み取り専用',\n 'core.component.form-builder.untitled': '無題',\n 'core.component.form-builder.no-selection-title': '選択なし',\n 'core.component.form-builder.no-selection-hint': 'キャンバスでコンポーネントを選択して属性を編集します。',\n 'core.component.form-builder.group-children': '子要素',\n 'core.component.form-builder.group-icon': 'アイコン',\n 'core.component.form-builder.group-accent-color': 'アクセントカラー',\n 'core.component.form-builder.group-no-children': 'フィールドがまだありません。このグループにフィールドを追加またはドラッグしてください。',\n 'core.component.form-builder.break': '改行',\n\n // ---- Component: code-editor ----\n 'core.component.code-editor.copied': 'コピーしました!',\n 'core.component.code-editor.copy': 'コードをコピー',\n\n // ---- Component: history ----\n 'core.component.history.by': '実行者',\n\n // ---- Component: import-excel ----\n 'core.component.import-excel.title': 'Excelデータをインポート',\n 'core.component.import-excel.see-all': 'すべて表示',\n 'core.component.import-excel.valid-rows': '有効な行数',\n 'core.component.import-excel.error-rows': 'エラー行数',\n 'core.component.import-excel.warning-rows': '警告行数',\n 'core.component.import-excel.valid-data': '有効なデータ',\n 'core.component.import-excel.download-template-tooltip': 'クリックしてテンプレートをダウンロード',\n 'core.component.import-excel.upload': 'アップロード',\n 'core.component.import-excel.download': 'ダウンロード',\n 'core.component.import-excel.confirm-save': '確認して保存',\n 'core.component.import-excel.status': 'ステータス',\n 'core.component.import-excel.no-data-upload': 'アップロードデータがありません',\n 'core.component.import-excel.click-here-template': 'ここをクリックしてテンプレートをダウンロード',\n 'core.component.import-excel.no-data-in-file': 'ファイルにデータがありません',\n 'core.component.import-excel.row-limit': 'アップロード上限は{limit}行です',\n 'core.component.import-excel.required': '必須データ',\n 'core.component.import-excel.min-length': '最小文字数: {min}',\n 'core.component.import-excel.max-length': '最大文字数: {max}',\n 'core.component.import-excel.not-a-number': '{value} は有効な数値ではありません',\n 'core.component.import-excel.below-min': '{value} は最小値 {min} を下回っています',\n 'core.component.import-excel.above-max': '{value} は最大値 {max} を超えています',\n 'core.component.import-excel.invalid-bool': '有効な値を入力してください (true, false, 1, 0)',\n 'core.component.import-excel.invalid-value': '値 {value} は正しくありません',\n 'core.component.import-excel.value-not-in-list': '値 {value} は許可されたリスト [{list}] に含まれていません',\n 'core.component.import-excel.invalid-date-format': '日付 {value} はフォーマット {format} と一致しません',\n 'core.component.import-excel.generic-error': 'エラーが発生しました',\n 'core.component.import-excel.notify-title': 'お知らせ',\n 'core.component.import-excel.message-column': 'メッセージ',\n 'core.component.import-excel.success': '成功',\n\n // ---- Component: preview-image ----\n 'core.component.preview-image.no-image': '画像情報がありません',\n 'core.component.preview-image.title': '画像プレビュー',\n 'core.component.preview-image.no-image-hint': '表示する画像がありません',\n 'core.component.preview-image.load-error': '画像を読み込めませんでした',\n 'core.component.preview-image.load-error-hint': '画像ファイルが削除されたか、パスが無効である可能性があります',\n 'core.component.preview-image.retry': '再試行',\n 'core.component.preview-image.close': '閉じる',\n 'core.component.preview-image.prev': '前の画像',\n 'core.component.preview-image.next': '次の画像',\n 'core.component.preview-image.zoom-in': '拡大',\n 'core.component.preview-image.zoom-out': '縮小',\n 'core.component.preview-image.fit': '画面に合わせる',\n 'core.component.preview-image.rotate': '回転',\n 'core.component.preview-image.download': 'ダウンロード',\n 'core.component.preview-image.fullscreen': '全画面表示',\n 'core.component.preview-image.loading': '画像を読み込み中...',\n 'core.component.preview-image.kbd-hint-nav': '画像切替',\n 'core.component.preview-image.kbd-hint-close': '閉じる',\n\n // ---- Component: preview-pdf ----\n 'core.component.preview-pdf.title': 'ドキュメントを表示',\n 'core.component.preview-pdf.close': '閉じる',\n 'core.component.preview-pdf.pages-count': '{count} ページ',\n 'core.component.preview-pdf.tab.thumbnails': 'ページ',\n 'core.component.preview-pdf.tab.outline': '目次',\n 'core.component.preview-pdf.tab.search': '検索',\n 'core.component.preview-pdf.first-page': '最初のページ',\n 'core.component.preview-pdf.prev-page': '前のページ',\n 'core.component.preview-pdf.next-page': '次のページ',\n 'core.component.preview-pdf.last-page': '最後のページ',\n 'core.component.preview-pdf.zoom-in': '拡大',\n 'core.component.preview-pdf.zoom-out': '縮小',\n 'core.component.preview-pdf.fit-page': 'ページに合わせる',\n 'core.component.preview-pdf.fit-width': '幅に合わせる',\n 'core.component.preview-pdf.actual-size': '実際のサイズ',\n 'core.component.preview-pdf.rotate': '回転',\n 'core.component.preview-pdf.scroll-page': '単ページ',\n 'core.component.preview-pdf.scroll-continuous': '連続スクロール',\n 'core.component.preview-pdf.print': '印刷',\n 'core.component.preview-pdf.download': 'ダウンロード',\n 'core.component.preview-pdf.fullscreen': '全画面',\n 'core.component.preview-pdf.toggle-sidebar': 'サイドバー表示切替',\n 'core.component.preview-pdf.page-of': '{current} / {total} ページ',\n 'core.component.preview-pdf.empty.title': 'ドキュメントがありません',\n 'core.component.preview-pdf.empty.subtitle': '表示する PDF ファイルがまだありません',\n 'core.component.preview-pdf.loading': 'ドキュメントを読み込み中...',\n 'core.component.preview-pdf.loading.page': 'ページ {current} / {total} を処理中',\n 'core.component.preview-pdf.error.invalid.title': 'ドキュメントを読み込めません',\n 'core.component.preview-pdf.error.invalid.body': 'PDF ファイルが破損している可能性があります。ファイルを確認してください。',\n 'core.component.preview-pdf.error.password.title': '保護されたドキュメント',\n 'core.component.preview-pdf.error.password.body': 'この PDF ファイルを開くにはパスワードが必要です。',\n 'core.component.preview-pdf.error.network.title': '接続できません',\n 'core.component.preview-pdf.error.network.body': 'サーバーからファイルを読み込めません。後でもう一度お試しください。',\n 'core.component.preview-pdf.error.unknown.title': 'エラーが発生しました',\n 'core.component.preview-pdf.error.unknown.body': 'もう一度試すか、元のファイルをダウンロードしてご覧ください。',\n 'core.component.preview-pdf.error.retry': '再試行',\n 'core.component.preview-pdf.error.download-raw': '元のファイルをダウンロード',\n 'core.component.preview-pdf.search': '検索',\n 'core.component.preview-pdf.search-placeholder': 'ドキュメント内を検索...',\n 'core.component.preview-pdf.search-case': '大文字小文字を区別',\n 'core.component.preview-pdf.search-whole': '単語単位で一致',\n 'core.component.preview-pdf.search-no-results': '見つかりません',\n 'core.component.preview-pdf.search-results-count': '「{term}」の検索結果 {count} 件',\n 'core.component.preview-pdf.search-truncated': '最初の {count} 件を表示しています。検索条件を絞り込んでください。',\n 'core.component.preview-pdf.search-prev': '前の結果',\n 'core.component.preview-pdf.search-next': '次の結果',\n 'core.component.preview-pdf.search-close': '検索を閉じる',\n\n // ---- Component: table ----\n 'core.component.table.setup': 'テーブル設定',\n 'core.component.table.column-header': '列ヘッダー',\n 'core.component.table.width': '幅',\n 'core.component.table.fixed': '固定',\n 'core.component.table.char-limit': '文字数制限',\n 'core.component.table.skip': 'スキップ',\n 'core.component.table.apply': '適用',\n 'core.component.table.filter': 'フィルター',\n 'core.component.table.clear-selection': '選択を解除',\n 'core.component.table.customize': 'カスタマイズ',\n 'core.component.table.search': '検索',\n 'core.component.table.reload': '再読み込み',\n 'core.component.table.setup-short': '設定',\n 'core.component.table.no-results': '一致する結果がありません',\n 'core.component.table.no-results-hint': '別の条件で検索またはフィルターしてください',\n 'core.component.table.choose-filter-hint': 'まずフィルターを選択してください',\n 'core.component.table.no-data': 'データがありません',\n 'core.component.table.export-excel': 'Excelエクスポート',\n 'core.component.table.export-csv': 'CSVエクスポート',\n 'core.component.table.showing': '表示中:',\n 'core.component.table.paginator.first-page': '最初のページ',\n 'core.component.table.paginator.last-page': '最後のページ',\n 'core.component.table.paginator.items-per-page': '表示中',\n 'core.component.table.paginator.next-page': '次のページ',\n 'core.component.table.paginator.previous-page': '前のページ',\n 'core.component.table.error-occurred': 'エラーが発生しました',\n 'core.component.table.not-an-array': 'データが配列ではありません',\n 'core.component.table.config.confirm-reset': 'すべての設定をデフォルトに戻しますか',\n 'core.component.table.popup-export.select-columns': 'エクスポートする列を選択してください',\n 'core.component.table.selector-action.default-msg': '件選択中',\n 'core.component.tab-router.too-many-tabs': 'タブを開きすぎています。',\n\n // ---- Component: upload-file ----\n 'core.component.upload-file.upload': 'ファイルをアップロード',\n 'core.component.upload-file.error-occurred': 'エラーが発生しました',\n 'core.component.upload-file.please-upload': 'ファイル/画像をアップロードしてください',\n 'core.component.upload-file.desc-format-and-size': 'フォーマット: {exts}、最大: {maxSize}MB',\n 'core.component.upload-file.desc-format': 'フォーマット: {exts}',\n 'core.component.upload-file.desc-max-size': '最大: {maxSize}MB',\n 'core.component.upload-file.not-image': '[{name}] アップロードされたファイルは画像ではありません',\n 'core.component.upload-file.invalid-format': '[{name}] アップロードされたファイルの形式が正しくありません: {exts}',\n 'core.component.upload-file.size-exceeded': '[{name}] 最大ファイルサイズ: {maxSize} MB',\n 'core.component.upload-file.upload-failed': 'ファイルのアップロード中にエラーが発生しました',\n 'core.component.upload-file.too-many-files': 'ファイルの選択数が多すぎます。件数を確認してください',\n 'core.component.upload-file.confirm-delete-message': 'このファイルを削除しますか?この操作は取り消せません',\n 'core.component.upload-file.confirm-delete-title': '削除の確認',\n 'core.component.upload-file.confirm-yes': '確認',\n 'core.component.upload-file.confirm-no': 'キャンセル',\n 'core.component.upload-file.no-configuration':\n 'SD_UPLOAD_FILE_CONFIGURATION をインジェクトするか、コンポーネントに [upload] を直接渡してください',\n 'core.component.upload-file.no-configuration-key':\n \"key='{key}' に対応するアップロード設定が見つかりません。プロバイダーを確認するか [upload] を直接渡してください\",\n 'core.component.upload-file.preview-title': '画像プレビュー',\n\n // ---- Module: layout (sidebar / user menu) ----\n 'core.module.layout.user.change-password': 'パスワード変更',\n 'core.module.layout.user.logout': 'ログアウト',\n 'core.module.layout.user.update-profile': 'プロフィールを更新',\n 'core.module.layout.user.setting': '設定',\n 'core.module.layout.user.notification': '通知',\n 'core.module.layout.sidebar.search': '検索',\n 'core.module.layout.sidebar.toggle': 'サイドバーを切り替える',\n\n // ---- Module: layout (greeting + weekday) ----\n 'core.module.layout.greeting.hello': 'こんにちは、{name}さん',\n 'core.module.layout.weekday.0': '日曜日',\n 'core.module.layout.weekday.1': '月曜日',\n 'core.module.layout.weekday.2': '火曜日',\n 'core.module.layout.weekday.3': '水曜日',\n 'core.module.layout.weekday.4': '木曜日',\n 'core.module.layout.weekday.5': '金曜日',\n 'core.module.layout.weekday.6': '土曜日',\n 'core.module.layout.today-info.format': '{weekday}、{date}',\n\n // ---- Module: layout (forbidden page) ----\n 'core.module.layout.forbidden.title': 'アクセスが拒否されました',\n 'core.module.layout.forbidden.message':\n 'このページにアクセスする権限がありません。管理者にお問い合わせいただくか、ホームページに戻ってください',\n 'core.module.layout.forbidden.back-home': 'ホームに戻る',\n\n // ---- Module: layout (not-found page) ----\n 'core.module.layout.not-found.title': '404 - ページが見つかりません',\n 'core.module.layout.not-found.message':\n 'お探しのページは存在しないか、削除されました。URLを確認するか、ホームページに戻って続行してください。',\n 'core.module.layout.not-found.back': '戻る',\n\n // ---- Module: layout (home page) ----\n 'core.module.layout.home.tab-name': 'ホーム',\n 'core.module.layout.home.feature.data': 'データ',\n 'core.module.layout.home.feature.reports': 'レポート',\n 'core.module.layout.home.feature.users': 'ユーザー',\n 'core.module.layout.home.feature.workflow': 'ワークフロー',\n 'core.module.layout.home.feature.audit': '監査',\n 'core.module.layout.home.feature.integration': '連携',\n\n // ---- Module: layout (mock fallback when SD_LAYOUT_CONFIGURATION is not provided) ----\n 'core.module.layout.mock.user.full-name': 'デモユーザー',\n\n // ---- Module: generic (generic-select) ----\n 'core.module.generic.generic-select.detail-link': '詳細',\n};\n","import type { EN_MESSAGES } from './en';\n\nexport const KO_MESSAGES: Record<keyof typeof EN_MESSAGES, string> = {\n 'core.common.cancel': '취소',\n 'core.common.close': '닫기',\n 'core.common.reload': '페이지 새로고침',\n 'core.test.greet': '안녕하세요 {name}님',\n\n // ---- Validators (VALIDATION_PATTERNS in @sdcorejs/utils/constants) ----\n 'core.validator.email.name': '이메일',\n 'core.validator.email.error': '올바르지 않은 이메일 형식입니다',\n 'core.validator.phone.name': '전화번호',\n 'core.validator.phone.error': '올바르지 않은 전화번호 형식입니다',\n // Legacy aliases\n 'core.validator.phone-vn.name': 'VN 전화번호',\n 'core.validator.phone-vn.error': '올바르지 않은 베트남 전화번호 형식입니다',\n 'core.validator.cccd.name': '주민번호',\n 'core.validator.cccd.error': '올바르지 않은 주민번호 형식입니다 (12자리)',\n 'core.validator.id-vn.name': '주민번호 / 여권',\n 'core.validator.id-vn.error': '올바르지 않은 주민번호 또는 여권번호입니다',\n 'core.validator.vn-phone.name': 'VN 전화번호',\n 'core.validator.vn-phone.error': '올바르지 않은 베트남 전화번호 형식입니다',\n 'core.validator.vn-id.name': '주민번호',\n 'core.validator.vn-id.error': '올바르지 않은 주민번호 형식입니다 (12자리)',\n 'core.validator.passport.name': '여권',\n 'core.validator.passport.error': '올바르지 않은 여권번호입니다 (영문 1자 + 숫자 7자리)',\n 'core.validator.vn-id-or-passport.name': '주민번호 / 여권',\n 'core.validator.vn-id-or-passport.error': '올바르지 않은 주민번호 또는 여권번호입니다',\n 'core.validator.time.name': '시간',\n 'core.validator.time.error': '올바르지 않은 시간 형식입니다 (HH:mm 형식)',\n 'core.validator.url.name': 'URL',\n 'core.validator.url.error': '올바르지 않은 URL 형식입니다',\n 'core.validator.domain.name': '도메인',\n 'core.validator.domain.error': '올바르지 않은 도메인 형식입니다',\n 'core.validator.ipv4.name': 'IPv4',\n 'core.validator.ipv4.error': '올바르지 않은 IPv4 주소입니다',\n 'core.validator.ipv6.name': 'IPv6',\n 'core.validator.ipv6.error': '올바르지 않은 IPv6 주소입니다',\n 'core.validator.image-url.name': '이미지 URL',\n 'core.validator.image-url.error': '올바르지 않은 이미지 URL입니다',\n 'core.validator.slug.name': '슬러그',\n 'core.validator.slug.error': '올바르지 않은 슬러그 형식입니다',\n 'core.validator.number.name': '숫자',\n 'core.validator.number.error': '올바르지 않은 숫자 형식입니다',\n 'core.validator.integer.name': '정수',\n 'core.validator.integer.error': '올바르지 않은 정수 형식입니다',\n 'core.validator.decimal.name': '소수',\n 'core.validator.decimal.error': '올바르지 않은 소수 형식입니다',\n 'core.validator.positive-number.name': '양수',\n 'core.validator.positive-number.error': '양수여야 합니다',\n 'core.validator.uuid.name': 'UUID',\n 'core.validator.uuid.error': '올바르지 않은 UUID 형식입니다',\n 'core.validator.code-16.name': '16자 코드',\n 'core.validator.code-16.error': '올바르지 않은 16자 코드입니다',\n 'core.validator.code-32.name': '32자 코드',\n 'core.validator.code-32.error': '올바르지 않은 32자 코드입니다',\n 'core.validator.hex-color.name': 'HEX 색상',\n 'core.validator.hex-color.error': '올바르지 않은 HEX 색상 형식입니다',\n 'core.validator.base64.name': 'Base64',\n 'core.validator.base64.error': '올바르지 않은 Base64 문자열입니다',\n\n // ---- Operators (operator.model.ts) ----\n 'core.operator.equal.display': '같음',\n 'core.operator.not-equal.display': '같지 않음',\n 'core.operator.greater-than.display': '초과',\n 'core.operator.less-than.display': '미만',\n 'core.operator.greater-or-equal.display': '이상',\n 'core.operator.less-or-equal.display': '이하',\n 'core.operator.contain.display': '포함',\n 'core.operator.not-contain.display': '포함하지 않음',\n 'core.operator.start-with.display': '~로 시작',\n 'core.operator.not-start-with.display': '~로 시작하지 않음',\n 'core.operator.end-with.display': '~로 끝',\n 'core.operator.not-end-with.display': '~로 끝나지 않음',\n 'core.operator.in.display': '~중 하나',\n 'core.operator.not-in.display': '~중 하나가 아님',\n 'core.operator.between.display': '범위 내',\n 'core.operator.null.display': '비어 있음',\n 'core.operator.not-null.display': '비어 있지 않음',\n\n // ---- Global error handler ----\n 'core.handler.global-error.update-title': '새로운 시스템 업데이트가 있습니다',\n 'core.handler.global-error.update-body': '현재 버전이 오래되어 리소스를 불러올 수 없습니다.\\n확인을 누르면 페이지가 새로고침됩니다.',\n\n // ---- Interceptor: no-internet ----\n 'core.interceptor.no-internet.offline': '네트워크 연결이 없습니다. 연결을 기다리는 중...',\n 'core.interceptor.no-internet.cors-error': '서버에 연결할 수 없습니다 (CORS 또는 설정 오류).',\n 'core.interceptor.no-internet.maintenance': '서버 점검 중입니다. 잠시 후 다시 시도해 주세요.',\n 'core.interceptor.no-internet.restored': '연결이 복구되었습니다.',\n\n // ---- Service: excel ----\n 'core.excel.cannot-read-file': '파일 내용을 읽을 수 없습니다',\n 'core.excel.no-sheet': 'Excel 파일에 데이터 시트가 없습니다',\n\n // ---- Service: docx ----\n 'core.docx.invalid-format': '형식이 올바르지 않습니다. DOC 또는 DOCX 형식의 템플릿을 선택해 주세요',\n 'core.docx.size-exceeded': '템플릿 파일 크기가 지원 한도를 초과했습니다. 다시 시도해 주세요',\n 'core.docx.convert-error': 'DOCX 파일 변환 중 오류가 발생했습니다',\n\n // ---- Service: notify (toast) ----\n 'core.notify.type.success': '성공',\n 'core.notify.type.info': '정보',\n 'core.notify.type.warning': '경고',\n 'core.notify.type.error': '오류',\n 'core.notify.show-more': '더 보기 ({count})',\n 'core.notify.show-less': '접기',\n\n // ---- Service: confirm ----\n 'core.confirm.title': '확인',\n 'core.confirm.yes': '확인',\n 'core.confirm.no': '취소',\n 'core.confirm.yes-short': '예',\n 'core.confirm.no-short': '아니오',\n\n // ---- Directive: hover-copy ----\n 'core.directive.hover-copy.tooltip': '복사',\n\n // ---- Forms: input ----\n 'core.form.input.required': '정보를 입력해 주세요',\n 'core.form.input.maxlength': '최대 글자수: {max}',\n 'core.form.input.invalid-pattern': '형식이 올바르지 않습니다',\n 'core.form.input.exceeded': '최대 글자수를 초과했습니다',\n 'core.form.input.mask-incomplete': '값이 완전하지 않습니다',\n 'core.form.input.mask-invalid': '허용되지 않는 문자가 포함되어 있습니다',\n\n // ---- Forms: autocomplete ----\n 'core.form.autocomplete.required': '정보를 입력해 주세요',\n\n // ---- Forms: chip ----\n 'core.form.chip.required': '정보를 입력해 주세요',\n 'core.form.chip.minlength': '최소 {min}개의 값을 입력해 주세요',\n 'core.form.chip.maxlength': '최대 {max}개의 값을 입력해 주세요',\n\n // ---- Forms: chip-calendar ----\n 'core.form.chip-calendar.required': '정보를 입력해 주세요',\n 'core.form.chip-calendar.minlength': '최소 {min}개의 값을 입력해 주세요',\n 'core.form.chip-calendar.maxlength': '최대 {max}개의 값을 입력해 주세요',\n\n // ---- Forms: date ----\n 'core.form.date.required': '정보를 입력해 주세요',\n 'core.form.date.min-date': '최소 날짜: {date}',\n 'core.form.date.max-date': '최대 날짜: {date}',\n 'core.form.date.parse-error': '구문 분석 오류: {text}',\n 'core.form.date.invalid-format': '형식이 올바르지 않습니다',\n\n // ---- Forms: date-range ----\n 'core.form.date-range.required': '정보를 입력해 주세요',\n 'core.form.date-range.invalid-min': '시작일이 올바르지 않습니다 (한도 미만)',\n 'core.form.date-range.invalid-max': '종료일이 올바르지 않습니다 (한도 초과)',\n 'core.form.date-range.from': '시작',\n 'core.form.date-range.to': '~',\n\n // ---- Forms: datetime ----\n 'core.form.datetime.required': '정보를 입력해 주세요',\n 'core.form.datetime.min-date': '최소 날짜: {date}',\n 'core.form.datetime.max-date': '최대 날짜: {date}',\n 'core.form.datetime.invalid-format': '형식이 올바르지 않습니다',\n 'core.form.datetime.now': '지금',\n 'core.form.datetime.confirm': '확인',\n\n // ---- Forms: entity-picker / tree-select ----\n 'core.form.entity-picker.placeholder': '엔터티 선택',\n 'core.form.entity-picker.modal-title': '엔터티 선택',\n 'core.form.entity-picker.value': '값',\n 'core.form.entity-picker.clear': '선택 지우기',\n 'core.form.entity-picker.add': '추가',\n 'core.form.entity-picker.cancel': '취소',\n 'core.form.entity-picker.apply': '적용',\n 'core.form.tree-select.placeholder': '트리 항목 선택',\n 'core.form.tree-select.modal-title': '트리 항목 선택',\n 'core.form.tree-select.clear': '선택 지우기',\n 'core.form.tree-select.search': '트리 검색',\n 'core.form.tree-select.cancel': '취소',\n 'core.form.tree-select.apply': '적용',\n 'core.component.tree.retry': '다시 시도',\n 'core.service.unsaved-changes.message': '저장하지 않은 변경 사항이 있습니다. 변경을 버리고 계속할까요?',\n 'core.component.job-progress.status.idle': '준비됨',\n 'core.component.job-progress.status.queued': '대기 중',\n 'core.component.job-progress.status.running': '진행 중',\n 'core.component.job-progress.status.succeeded': '완료됨',\n 'core.component.job-progress.status.failed': '실패',\n 'core.component.job-progress.status.cancelled': '취소됨',\n 'core.component.job-progress.cancel': '취소',\n 'core.component.job-progress.retry': '다시 시도',\n 'core.component.audit-diff.label': '감사 변경 사항',\n 'core.component.audit-diff.field': '필드',\n 'core.component.audit-diff.before': '변경 전',\n 'core.component.audit-diff.after': '변경 후',\n 'core.component.audit-diff.empty': '변경 사항 없음',\n 'core.component.audit-diff.kind.added': '추가됨',\n 'core.component.audit-diff.kind.removed': '삭제됨',\n 'core.component.audit-diff.kind.changed': '변경됨',\n 'core.component.audit-diff.kind.unchanged': '변경 없음',\n 'core.component.audit-diff.value.label': '값',\n 'core.component.audit-diff.value.not-set': '설정 안 됨',\n 'core.component.audit-diff.value.undefined': '정의되지 않음',\n 'core.component.audit-diff.value.null': 'Null',\n 'core.component.audit-diff.value.true': '예',\n 'core.component.audit-diff.value.false': '아니요',\n\n // ---- Forms: time ----\n 'core.form.time.required': '시간을 입력해 주세요',\n 'core.form.time.invalid': 'HH:mm 형식의 올바른 시간을 입력해 주세요',\n 'core.form.time.min': '시간은 {min}보다 빠를 수 없습니다',\n 'core.form.time.max': '시간은 {max}보다 늦을 수 없습니다',\n 'core.form.time.step': '시간은 {step}분 간격에 맞아야 합니다',\n 'core.form.time.open-picker': '시간 선택기 열기',\n 'core.form.time.confirm': '확인',\n 'core.form.time.clear': '시간 지우기',\n\n // ---- Forms: time-range ----\n 'core.form.time-range.required': '시작 시간과 종료 시간을 모두 입력해 주세요',\n 'core.form.time-range.incomplete': '두 시간을 모두 입력하거나 열린 범위를 활성화해 주세요',\n 'core.form.time-range.range': '시작 시간은 종료 시간보다 늦을 수 없습니다',\n 'core.form.time-range.invalid': 'HH:mm 형식의 올바른 시간을 입력해 주세요',\n 'core.form.time-range.min': '시간은 {min}보다 빠를 수 없습니다',\n 'core.form.time-range.max': '시간은 {max}보다 늦을 수 없습니다',\n 'core.form.time-range.step': '시간은 {step}분 간격에 맞아야 합니다',\n 'core.form.time-range.from': '시작',\n 'core.form.time-range.to': '종료',\n 'core.form.time-range.clear': '시간 범위 지우기',\n\n // ---- Forms: time-spinner ----\n 'core.form.time-spinner.hour': '시',\n 'core.form.time-spinner.minute': '분',\n 'core.form.time-spinner.second': '초',\n 'core.form.time-spinner.increase-hour': '시 증가',\n 'core.form.time-spinner.decrease-hour': '시 감소',\n 'core.form.time-spinner.increase-minute': '분 증가',\n 'core.form.time-spinner.decrease-minute': '분 감소',\n 'core.form.time-spinner.increase-second': '초 증가',\n 'core.form.time-spinner.decrease-second': '초 감소',\n\n // ---- Forms: input-number ----\n 'core.form.input-number.required': '정보를 입력해 주세요',\n 'core.form.input-number.min': '값은 {min} 이상이어야 합니다',\n 'core.form.input-number.max': '값은 {max} 이하여야 합니다',\n\n // ---- Forms: radio ----\n 'core.form.radio.required': '선택해 주세요',\n\n // ---- Forms: switch ----\n 'core.form.switch.on': '켜짐',\n 'core.form.switch.off': '꺼짐',\n\n // ---- Forms: checkbox ----\n 'core.form.checkbox.checked': '예',\n 'core.form.checkbox.unchecked': '아니오',\n\n // ---- Forms: select ----\n 'core.form.select.required': '선택해 주세요',\n\n // ---- Forms: textarea ----\n 'core.form.textarea.required': '정보를 입력해 주세요',\n 'core.form.textarea.maxlength': '최대 글자수: {max}',\n 'core.form.textarea.invalid-pattern': '형식이 올바르지 않습니다',\n 'core.form.textarea.exceeded': '최대 글자수를 초과했습니다',\n\n // ---- Component: editor ----\n 'core.component.editor.required': '내용을 입력해 주세요',\n 'core.component.editor.maxlength': '최대 글자수: {max}',\n 'core.component.editor.image.invalid-format': '파일 형식 \".{format}\" 은(는) 허용되지 않습니다. 허용 형식: {allowed}',\n 'core.component.editor.image.size-exceeded': '파일 크기 {sizeMB}MB가 한도 {maxSizeMB}MB를 초과합니다',\n 'core.component.editor.image.min-width': '이미지 너비 {width}px가 최소값 {min}px 미만입니다',\n 'core.component.editor.image.min-height': '이미지 높이 {height}px가 최소값 {min}px 미만입니다',\n 'core.component.editor.image.max-width': '이미지 너비 {width}px가 한도 {max}px를 초과합니다',\n 'core.component.editor.image.max-height': '이미지 높이 {height}px가 한도 {max}px를 초과합니다',\n 'core.component.editor.image.max-per-selection': '한 번에 최대 {max}장의 이미지를 선택할 수 있습니다',\n\n // ---- Component: document-builder ----\n 'core.component.document-builder.page-number.current': '현재 페이지 번호',\n 'core.component.document-builder.page-number.total': '전체 페이지 수',\n 'core.component.document-builder.ck-comment.label': '댓글',\n 'core.component.document-builder.ck-comment.text-too-long': '텍스트가 너무 깁니다 ({length}자). 최대 {max}자입니다.',\n 'core.component.document-builder.variable.not-allowed': '텍스트에 변수를 추가할 수 없습니다',\n 'core.component.document-builder.variable.invalid-data': '변수 데이터가 올바르지 않습니다',\n\n // ---- Component: form-builder ----\n 'core.component.form-builder.field-key': '필드 키',\n 'core.component.form-builder.display': '표시',\n 'core.component.form-builder.general': '일반',\n 'core.component.form-builder.visible-when': '표시 조건',\n 'core.component.form-builder.required': '필수',\n 'core.component.form-builder.label': '라벨',\n 'core.component.form-builder.disabled': '비활성',\n 'core.component.form-builder.disabled-when': '비활성 조건',\n 'core.component.form-builder.hidden-when': '숨김 조건',\n 'core.component.form-builder.validation': '유효성 검사',\n 'core.component.form-builder.required-when': '필수 조건',\n 'core.component.form-builder.confirm': '확인',\n 'core.component.form-builder.delete': '삭제',\n 'core.component.form-builder.save': '저장',\n 'core.component.form-builder.hint': '힌트',\n 'core.component.form-builder.parameter': '매개변수',\n 'core.component.form-builder.add-field': '필드 추가',\n 'core.component.form-builder.data': '데이터',\n 'core.component.form-builder.query-condition': '쿼리 조건',\n 'core.component.form-builder.set-query-value': '쿼리 값 설정',\n 'core.component.form-builder.value-source-field': '소스 필드',\n 'core.component.form-builder.assign-parameter': '매개변수 할당',\n 'core.component.form-builder.template-data': '템플릿 데이터',\n 'core.component.form-builder.set-expression': '식 설정',\n 'core.component.form-builder.condition-group': '조건 그룹',\n 'core.component.form-builder.condition': '조건',\n 'core.component.form-builder.layout': '레이아웃',\n 'core.component.form-builder.maxlength': '최대 글자수',\n 'core.component.form-builder.assign-parameter-value': '매개변수 값 할당',\n 'core.component.form-builder.parameter-name': '매개변수 이름',\n 'core.component.form-builder.parameter-value': '매개변수 값',\n 'core.component.form-builder.assign-value': '값 할당',\n 'core.component.form-builder.add-data': '데이터 추가',\n 'core.component.form-builder.data-api': 'API 데이터',\n 'core.component.form-builder.data-static': '정적 데이터',\n 'core.component.form-builder.set-on-change-assign': '변경 시 값 할당 설정',\n 'core.component.form-builder.target-field': '대상 필드',\n 'core.component.form-builder.target-value': '대상 값',\n 'core.component.form-builder.column-data': '열 데이터',\n 'core.component.form-builder.add-column': '열 추가',\n 'core.component.form-builder.column-config': '열 설정',\n 'core.component.form-builder.column-name': '열 이름',\n 'core.component.form-builder.width': '너비',\n 'core.component.form-builder.data-type': '데이터 유형',\n 'core.component.form-builder.show-when-true': 'TRUE일 때 표시',\n 'core.component.form-builder.show-when-false': 'FALSE일 때 표시',\n 'core.component.form-builder.column-list': '열 목록',\n 'core.component.form-builder.yes-no': '예/아니오',\n 'core.component.form-builder.config-validation-error-warning': '오류/경고 유효성 검사 설정',\n 'core.component.form-builder.message-type': '메시지 유형',\n 'core.component.form-builder.message-display': '표시 메시지',\n 'core.component.form-builder.condition-expression': '조건식',\n 'core.component.form-builder.add-validation': '유효성 검사 추가',\n 'core.component.form-builder.expression': '식',\n 'core.component.form-builder.available-methods': '사용 가능한 메서드',\n 'core.component.form-builder.format': '형식',\n 'core.component.form-builder.time': '시간',\n 'core.component.form-builder.content': '내용',\n 'core.component.form-builder.min': '최소',\n 'core.component.form-builder.max': '최대',\n 'core.component.form-builder.vertical': '세로',\n 'core.component.form-builder.multiple': '다중 선택',\n 'core.component.form-builder.default-value': '기본값',\n 'core.component.form-builder.type': '유형',\n 'core.component.form-builder.file': '파일',\n 'core.component.form-builder.image': '이미지',\n 'core.component.form-builder.max-files': '최대 파일/이미지 수',\n 'core.component.form-builder.size-mb': '크기 (MB)',\n 'core.component.form-builder.format-example': '형식 (예: png,jpg ...)',\n 'core.component.form-builder.source-mobile': '소스 (모바일)',\n 'core.component.form-builder.config-variable': '변수 설정',\n 'core.component.form-builder.config-validation-warning-error': '경고/오류 유효성 검사 설정',\n 'core.component.form-builder.back-to-design': '디자인으로 돌아가기',\n 'core.component.form-builder.preview': '미리보기',\n 'core.component.form-builder.drag-vertically': '위/아래로 드래그',\n 'core.component.form-builder.unset-readonly': '읽기 전용 해제',\n 'core.component.form-builder.set-readonly': '읽기 전용',\n 'core.component.form-builder.duplicate': '복제',\n 'core.component.form-builder.show': '표시',\n 'core.component.form-builder.hide': '숨기기',\n 'core.component.form-builder.flex': '플렉스',\n 'core.component.form-builder.display-label': '표시 라벨',\n 'core.component.form-builder.attribute': '속성',\n 'core.component.form-builder.add-variable': '변수 추가',\n 'core.component.form-builder.add-new': '새로 추가',\n 'core.component.form-builder.detail': '상세',\n 'core.component.form-builder.create-update': '생성/수정',\n 'core.component.form-builder.default': '기본',\n 'core.component.form-builder.show-more': '더 보기',\n 'core.component.form-builder.show-less': '접기',\n 'core.component.inform.show-more': '더 보기',\n 'core.component.inform.show-less': '접기',\n 'core.component.data-state.loading.title': '불러오는 중',\n 'core.component.data-state.loading.message': '데이터를 불러오는 동안 잠시 기다려 주세요.',\n 'core.component.data-state.empty.title': '데이터 없음',\n 'core.component.data-state.empty.message': '표시할 데이터가 아직 없습니다.',\n 'core.component.data-state.error.title': '데이터를 불러올 수 없음',\n 'core.component.data-state.error.message': '오류가 발생했습니다. 다시 시도해 주세요.',\n 'core.component.data-state.forbidden.title': '접근 거부됨',\n 'core.component.data-state.forbidden.message': '이 콘텐츠를 볼 권한이 없습니다.',\n 'core.component.data-state.retry': '다시 시도',\n 'core.component.form-builder.row-overflow': '전체 크기가 12열을 초과하여 이 행으로 이동할 수 없습니다',\n 'core.component.form-builder.upload-source.all': '전체',\n 'core.component.form-builder.upload-source.photo-library': '라이브러리에서 선택',\n 'core.component.form-builder.upload-source.capture': '사진 촬영',\n // Form-builder UI v2 (M3 redesign)\n 'core.component.form-builder.components': '컴포넌트',\n 'core.component.form-builder.search-components': '컴포넌트 검색…',\n 'core.component.form-builder.view-json': 'JSON 보기',\n 'core.component.form-builder.design': '디자인',\n 'core.component.form-builder.preview-runtime': '미리보기 · 런타임',\n 'core.component.form-builder.cancel': '취소',\n 'core.component.form-builder.submit': '제출',\n 'core.component.form-builder.empty-title': '여기에 컴포넌트를 끌어다 놓아 시작',\n 'core.component.form-builder.empty-hint': '왼쪽 패널에서 필드를 드래그하여 양식을 만들거나 다음을 누르세요:',\n 'core.component.form-builder.conditional': '조건부',\n 'core.component.form-builder.group-drop-here': '필드를 여기에 놓아 이 그룹에 추가',\n 'core.component.form-builder.edit-group': '그룹 편집',\n 'core.component.form-builder.group-empty-hint': '상세를 클릭하여 그룹에 필드 추가',\n 'core.component.form-builder.hidden': '숨김',\n 'core.component.form-builder.read-only': '읽기 전용',\n 'core.component.form-builder.untitled': '제목 없음',\n 'core.component.form-builder.no-selection-title': '선택 항목 없음',\n 'core.component.form-builder.no-selection-hint': '캔버스에서 컴포넌트를 선택하여 속성을 편집하세요.',\n 'core.component.form-builder.group-children': '하위 요소',\n 'core.component.form-builder.group-icon': '아이콘',\n 'core.component.form-builder.group-accent-color': '강조 색상',\n 'core.component.form-builder.group-no-children': '필드가 아직 없습니다. 이 그룹에 필드를 추가하거나 드래그하세요.',\n 'core.component.form-builder.break': '줄 바꿈',\n\n // ---- Component: code-editor ----\n 'core.component.code-editor.copied': '복사되었습니다!',\n 'core.component.code-editor.copy': '코드 복사',\n\n // ---- Component: history ----\n 'core.component.history.by': '작성자',\n\n // ---- Component: import-excel ----\n 'core.component.import-excel.title': 'Excel 데이터 가져오기',\n 'core.component.import-excel.see-all': '전체 보기',\n 'core.component.import-excel.valid-rows': '유효한 행',\n 'core.component.import-excel.error-rows': '오류 행',\n 'core.component.import-excel.warning-rows': '경고 행',\n 'core.component.import-excel.valid-data': '유효한 데이터',\n 'core.component.import-excel.download-template-tooltip': '클릭하여 템플릿 다운로드',\n 'core.component.import-excel.upload': '업로드',\n 'core.component.import-excel.download': '다운로드',\n 'core.component.import-excel.confirm-save': '확인 및 저장',\n 'core.component.import-excel.status': '상태',\n 'core.component.import-excel.no-data-upload': '업로드된 데이터가 없습니다',\n 'core.component.import-excel.click-here-template': '여기를 클릭하여 템플릿 다운로드',\n 'core.component.import-excel.no-data-in-file': '파일에 데이터가 없습니다',\n 'core.component.import-excel.row-limit': '업로드 한도는 {limit}행입니다',\n 'core.component.import-excel.required': '필수 데이터',\n 'core.component.import-excel.min-length': '최소 문자열 길이: {min}',\n 'core.component.import-excel.max-length': '최대 문자열 길이: {max}',\n 'core.component.import-excel.not-a-number': '{value} 은(는) 유효한 숫자가 아닙니다',\n 'core.component.import-excel.below-min': '{value} 은(는) 최소값 {min} 미만입니다',\n 'core.component.import-excel.above-max': '{value} 은(는) 최대값 {max} 초과입니다',\n 'core.component.import-excel.invalid-bool': '유효한 값을 입력해 주세요 (true, false, 1, 0)',\n 'core.component.import-excel.invalid-value': '값 {value} 이(가) 올바르지 않습니다',\n 'core.component.import-excel.value-not-in-list': '값 {value} 이(가) 허용 목록 [{list}]에 없습니다',\n 'core.component.import-excel.invalid-date-format': '날짜 {value} 이(가) 형식 {format} 과(와) 일치하지 않습니다',\n 'core.component.import-excel.generic-error': '오류가 발생했습니다',\n 'core.component.import-excel.notify-title': '알림',\n 'core.component.import-excel.message-column': '메시지',\n 'core.component.import-excel.success': '성공',\n\n // ---- Component: preview-image ----\n 'core.component.preview-image.no-image': '이미지 정보가 없습니다',\n 'core.component.preview-image.title': '이미지 미리보기',\n 'core.component.preview-image.no-image-hint': '표시할 이미지가 없습니다',\n 'core.component.preview-image.load-error': '이미지를 불러올 수 없습니다',\n 'core.component.preview-image.load-error-hint': '이미지 파일이 삭제되었거나 경로가 유효하지 않을 수 있습니다',\n 'core.component.preview-image.retry': '다시 시도',\n 'core.component.preview-image.close': '닫기',\n 'core.component.preview-image.prev': '이전 이미지',\n 'core.component.preview-image.next': '다음 이미지',\n 'core.component.preview-image.zoom-in': '확대',\n 'core.component.preview-image.zoom-out': '축소',\n 'core.component.preview-image.fit': '화면에 맞춤',\n 'core.component.preview-image.rotate': '회전',\n 'core.component.preview-image.download': '다운로드',\n 'core.component.preview-image.fullscreen': '전체 화면',\n 'core.component.preview-image.loading': '이미지를 불러오는 중...',\n 'core.component.preview-image.kbd-hint-nav': '이미지 이동',\n 'core.component.preview-image.kbd-hint-close': '닫기',\n\n // ---- Component: preview-pdf ----\n 'core.component.preview-pdf.title': '문서 보기',\n 'core.component.preview-pdf.close': '닫기',\n 'core.component.preview-pdf.pages-count': '{count} 페이지',\n 'core.component.preview-pdf.tab.thumbnails': '페이지',\n 'core.component.preview-pdf.tab.outline': '목차',\n 'core.component.preview-pdf.tab.search': '검색',\n 'core.component.preview-pdf.first-page': '첫 페이지',\n 'core.component.preview-pdf.prev-page': '이전 페이지',\n 'core.component.preview-pdf.next-page': '다음 페이지',\n 'core.component.preview-pdf.last-page': '마지막 페이지',\n 'core.component.preview-pdf.zoom-in': '확대',\n 'core.component.preview-pdf.zoom-out': '축소',\n 'core.component.preview-pdf.fit-page': '페이지에 맞춤',\n 'core.component.preview-pdf.fit-width': '너비에 맞춤',\n 'core.component.preview-pdf.actual-size': '실제 크기',\n 'core.component.preview-pdf.rotate': '회전',\n 'core.component.preview-pdf.scroll-page': '한 페이지',\n 'core.component.preview-pdf.scroll-continuous': '연속 스크롤',\n 'core.component.preview-pdf.print': '인쇄',\n 'core.component.preview-pdf.download': '다운로드',\n 'core.component.preview-pdf.fullscreen': '전체 화면',\n 'core.component.preview-pdf.toggle-sidebar': '사이드바 전환',\n 'core.component.preview-pdf.page-of': '페이지 {current} / {total}',\n 'core.component.preview-pdf.empty.title': '문서가 없습니다',\n 'core.component.preview-pdf.empty.subtitle': '아직 표시할 PDF 파일이 없습니다',\n 'core.component.preview-pdf.loading': '문서를 불러오는 중...',\n 'core.component.preview-pdf.loading.page': '페이지 {current} / {total} 처리 중',\n 'core.component.preview-pdf.error.invalid.title': '문서를 불러올 수 없습니다',\n 'core.component.preview-pdf.error.invalid.body': 'PDF 파일이 손상되었을 수 있습니다. 파일을 확인하세요.',\n 'core.component.preview-pdf.error.password.title': '보호된 문서',\n 'core.component.preview-pdf.error.password.body': '이 PDF 파일을 열려면 비밀번호가 필요합니다.',\n 'core.component.preview-pdf.error.network.title': '연결할 수 없습니다',\n 'core.component.preview-pdf.error.network.body': '서버에서 파일을 불러올 수 없습니다. 나중에 다시 시도하세요.',\n 'core.component.preview-pdf.error.unknown.title': '오류가 발생했습니다',\n 'core.component.preview-pdf.error.unknown.body': '다시 시도하거나 원본 파일을 다운로드하여 확인하세요.',\n 'core.component.preview-pdf.error.retry': '다시 시도',\n 'core.component.preview-pdf.error.download-raw': '원본 다운로드',\n 'core.component.preview-pdf.search': '검색',\n 'core.component.preview-pdf.search-placeholder': '문서에서 검색...',\n 'core.component.preview-pdf.search-case': '대소문자 구분',\n 'core.component.preview-pdf.search-whole': '단어 단위',\n 'core.component.preview-pdf.search-no-results': '결과 없음',\n 'core.component.preview-pdf.search-results-count': '\"{term}\"에 대한 결과 {count}개',\n 'core.component.preview-pdf.search-truncated': '처음 {count}개의 결과를 표시합니다. 검색어를 구체화하세요.',\n 'core.component.preview-pdf.search-prev': '이전 결과',\n 'core.component.preview-pdf.search-next': '다음 결과',\n 'core.component.preview-pdf.search-close': '검색 닫기',\n\n // ---- Component: table ----\n 'core.component.table.setup': '테이블 설정',\n 'core.component.table.column-header': '열 머리글',\n 'core.component.table.width': '너비',\n 'core.component.table.fixed': '고정',\n 'core.component.table.char-limit': '글자수 제한',\n 'core.component.table.skip': '건너뛰기',\n 'core.component.table.apply': '적용',\n 'core.component.table.filter': '필터',\n 'core.component.table.clear-selection': '선택 해제',\n 'core.component.table.customize': '사용자 지정',\n 'core.component.table.search': '검색',\n 'core.component.table.reload': '새로고침',\n 'core.component.table.setup-short': '설정',\n 'core.component.table.no-results': '검색 결과가 없습니다',\n 'core.component.table.no-results-hint': '다른 조건으로 검색하거나 필터링해 주세요',\n 'core.component.table.choose-filter-hint': '시작하려면 필터를 선택해 주세요',\n 'core.component.table.no-data': '데이터가 없습니다',\n 'core.component.table.export-excel': 'Excel 내보내기',\n 'core.component.table.export-csv': 'CSV 내보내기',\n 'core.component.table.showing': '표시 중:',\n 'core.component.table.paginator.first-page': '첫 페이지',\n 'core.component.table.paginator.last-page': '마지막 페이지',\n 'core.component.table.paginator.items-per-page': '표시 중',\n 'core.component.table.paginator.next-page': '다음 페이지',\n 'core.component.table.paginator.previous-page': '이전 페이지',\n 'core.component.table.error-occurred': '오류가 발생했습니다',\n 'core.component.table.not-an-array': '데이터가 배열이 아닙니다',\n 'core.component.table.config.confirm-reset': '모든 설정을 기본값으로 초기화하시겠습니까',\n 'core.component.table.popup-export.select-columns': '내보낼 열을 선택해 주세요',\n 'core.component.table.selector-action.default-msg': '개 선택됨',\n 'core.component.tab-router.too-many-tabs': '너무 많은 탭이 열려 있습니다.',\n\n // ---- Component: upload-file ----\n 'core.component.upload-file.upload': '파일 업로드',\n 'core.component.upload-file.error-occurred': '오류가 발생했습니다',\n 'core.component.upload-file.please-upload': '파일/이미지를 업로드해 주세요',\n 'core.component.upload-file.desc-format-and-size': '형식: {exts}, 최대: {maxSize}MB',\n 'core.component.upload-file.desc-format': '형식: {exts}',\n 'core.component.upload-file.desc-max-size': '최대: {maxSize}MB',\n 'core.component.upload-file.not-image': '[{name}] 업로드한 파일이 이미지가 아닙니다',\n 'core.component.upload-file.invalid-format': '[{name}] 업로드한 파일의 형식이 올바르지 않습니다: {exts}',\n 'core.component.upload-file.size-exceeded': '[{name}] 최대 파일 크기: {maxSize} MB',\n 'core.component.upload-file.upload-failed': '파일 업로드 중 오류가 발생했습니다',\n 'core.component.upload-file.too-many-files': '파일을 너무 많이 선택했습니다. 개수를 확인해 주세요',\n 'core.component.upload-file.confirm-delete-message': '이 파일을 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다',\n 'core.component.upload-file.confirm-delete-title': '삭제 확인',\n 'core.component.upload-file.confirm-yes': '확인',\n 'core.component.upload-file.confirm-no': '취소',\n 'core.component.upload-file.no-configuration': 'SD_UPLOAD_FILE_CONFIGURATION 을 inject 하거나 컴포넌트에 [upload] 를 직접 전달해 주세요',\n 'core.component.upload-file.no-configuration-key':\n \"key='{key}' 에 대한 업로드 설정을 찾을 수 없습니다. provider 를 확인하거나 [upload] 를 직접 전달해 주세요\",\n 'core.component.upload-file.preview-title': '이미지 미리보기',\n\n // ---- Module: layout (sidebar / user menu) ----\n 'core.module.layout.user.change-password': '비밀번호 변경',\n 'core.module.layout.user.logout': '로그아웃',\n 'core.module.layout.user.update-profile': '프로필 수정',\n 'core.module.layout.user.setting': '설정',\n 'core.module.layout.user.notification': '알림',\n 'core.module.layout.sidebar.search': '검색',\n 'core.module.layout.sidebar.toggle': '사이드바 전환',\n\n // ---- Module: layout (greeting + weekday) ----\n 'core.module.layout.greeting.hello': '안녕하세요, {name}님',\n 'core.module.layout.weekday.0': '일요일',\n 'core.module.layout.weekday.1': '월요일',\n 'core.module.layout.weekday.2': '화요일',\n 'core.module.layout.weekday.3': '수요일',\n 'core.module.layout.weekday.4': '목요일',\n 'core.module.layout.weekday.5': '금요일',\n 'core.module.layout.weekday.6': '토요일',\n 'core.module.layout.today-info.format': '{weekday}, {date}',\n\n // ---- Module: layout (forbidden page) ----\n 'core.module.layout.forbidden.title': '접근이 거부되었습니다',\n 'core.module.layout.forbidden.message': '이 페이지에 접근할 권한이 없습니다. 관리자에게 문의하거나 홈으로 돌아가 주세요',\n 'core.module.layout.forbidden.back-home': '홈으로 돌아가기',\n\n // ---- Module: layout (not-found page) ----\n 'core.module.layout.not-found.title': '404 - 페이지를 찾을 수 없습니다',\n 'core.module.layout.not-found.message':\n '찾으시는 페이지가 존재하지 않거나 삭제되었습니다. URL을 확인하거나 홈으로 돌아가 계속 진행해 주세요.',\n 'core.module.layout.not-found.back': '돌아가기',\n\n // ---- Module: layout (home page) ----\n 'core.module.layout.home.tab-name': '홈',\n 'core.module.layout.home.feature.data': '데이터',\n 'core.module.layout.home.feature.reports': '리포트',\n 'core.module.layout.home.feature.users': '사용자',\n 'core.module.layout.home.feature.workflow': '워크플로우',\n 'core.module.layout.home.feature.audit': '감사',\n 'core.module.layout.home.feature.integration': '연계',\n\n // ---- Module: layout (mock fallback when SD_LAYOUT_CONFIGURATION is not provided) ----\n 'core.module.layout.mock.user.full-name': '데모 사용자',\n\n // ---- Module: generic (generic-select) ----\n 'core.module.generic.generic-select.detail-link': '상세',\n};\n","import type { EN_MESSAGES } from './en';\n\nexport const VI_MESSAGES: Record<keyof typeof EN_MESSAGES, string> = {\n 'core.common.cancel': 'Hủy',\n 'core.common.close': 'Đóng',\n 'core.common.reload': 'Tải lại trang',\n 'core.test.greet': 'Xin chào {name}',\n\n // ---- Validators (VALIDATION_PATTERNS in @sdcorejs/utils/constants) ----\n 'core.validator.email.name': 'Email',\n 'core.validator.email.error': 'Email không hợp lệ',\n 'core.validator.phone.name': 'SĐT',\n 'core.validator.phone.error': 'Số điện thoại không hợp lệ',\n // Legacy aliases — pattern.model.ts cũ vẫn dùng các key này\n 'core.validator.phone-vn.name': 'SĐT VN',\n 'core.validator.phone-vn.error': 'SĐT Việt Nam không hợp lệ',\n 'core.validator.cccd.name': 'CCCD',\n 'core.validator.cccd.error': 'CCCD không hợp lệ (12 chữ số)',\n 'core.validator.id-vn.name': 'CCCD / Hộ chiếu',\n 'core.validator.id-vn.error': 'CCCD hoặc Hộ chiếu không hợp lệ',\n 'core.validator.vn-phone.name': 'SĐT VN',\n 'core.validator.vn-phone.error': 'SĐT Việt Nam không hợp lệ',\n 'core.validator.vn-id.name': 'CCCD',\n 'core.validator.vn-id.error': 'CCCD không hợp lệ (12 chữ số)',\n 'core.validator.passport.name': 'Hộ chiếu',\n 'core.validator.passport.error': 'Hộ chiếu không hợp lệ (1 chữ cái + 7 chữ số)',\n 'core.validator.vn-id-or-passport.name': 'CCCD / Hộ chiếu',\n 'core.validator.vn-id-or-passport.error': 'CCCD hoặc Hộ chiếu không hợp lệ',\n 'core.validator.time.name': 'Giờ',\n 'core.validator.time.error': 'Giờ không hợp lệ (định dạng HH:mm)',\n 'core.validator.url.name': 'URL',\n 'core.validator.url.error': 'URL không hợp lệ',\n 'core.validator.domain.name': 'Tên miền',\n 'core.validator.domain.error': 'Tên miền không hợp lệ',\n 'core.validator.ipv4.name': 'IPv4',\n 'core.validator.ipv4.error': 'Địa chỉ IPv4 không hợp lệ',\n 'core.validator.ipv6.name': 'IPv6',\n 'core.validator.ipv6.error': 'Địa chỉ IPv6 không hợp lệ',\n 'core.validator.image-url.name': 'URL ảnh',\n 'core.validator.image-url.error': 'URL ảnh không hợp lệ',\n 'core.validator.slug.name': 'Slug',\n 'core.validator.slug.error': 'Slug không hợp lệ',\n 'core.validator.number.name': 'Số',\n 'core.validator.number.error': 'Số không hợp lệ',\n 'core.validator.integer.name': 'Số nguyên',\n 'core.validator.integer.error': 'Số nguyên không hợp lệ',\n 'core.validator.decimal.name': 'Số thập phân',\n 'core.validator.decimal.error': 'Số thập phân không hợp lệ',\n 'core.validator.positive-number.name': 'Số dương',\n 'core.validator.positive-number.error': 'Phải là số dương',\n 'core.validator.uuid.name': 'UUID',\n 'core.validator.uuid.error': 'UUID không hợp lệ',\n 'core.validator.code-16.name': 'Mã 16 ký tự',\n 'core.validator.code-16.error': 'Mã 16 ký tự không hợp lệ',\n 'core.validator.code-32.name': 'Mã 32 ký tự',\n 'core.validator.code-32.error': 'Mã 32 ký tự không hợp lệ',\n 'core.validator.hex-color.name': 'Mã màu HEX',\n 'core.validator.hex-color.error': 'Mã màu HEX không hợp lệ',\n 'core.validator.base64.name': 'Base64',\n 'core.validator.base64.error': 'Chuỗi Base64 không hợp lệ',\n\n // ---- Operators (operator.model.ts) ----\n 'core.operator.equal.display': 'Bằng',\n 'core.operator.not-equal.display': 'Không bằng',\n 'core.operator.greater-than.display': 'Lớn hơn',\n 'core.operator.less-than.display': 'Nhỏ hơn',\n 'core.operator.greater-or-equal.display': 'Lớn hơn, hoặc bằng',\n 'core.operator.less-or-equal.display': 'Nhỏ hơn, hoặc bằng',\n 'core.operator.contain.display': 'Chứa',\n 'core.operator.not-contain.display': 'Không chứa',\n 'core.operator.start-with.display': 'Bắt đầu bởi',\n 'core.operator.not-start-with.display': 'Không bắt đầu bởi',\n 'core.operator.end-with.display': 'Kết thúc bởi',\n 'core.operator.not-end-with.display': 'Không kết thúc bởi',\n 'core.operator.in.display': 'Nằm trong',\n 'core.operator.not-in.display': 'Không nằm trong',\n 'core.operator.between.display': 'Trong khoảng',\n 'core.operator.null.display': 'Là rỗng',\n 'core.operator.not-null.display': 'Không rỗng',\n\n // ---- Global error handler ----\n 'core.handler.global-error.update-title': 'HỆ THỐNG CÓ BẢN CẬP NHẬT MỚI',\n 'core.handler.global-error.update-body': 'Phiên bản hiện tại đã cũ và không tải được tài nguyên.\\nVui lòng bấm OK để tải lại trang.',\n\n // ---- Interceptor: no-internet ----\n 'core.interceptor.no-internet.offline': 'Không có kết nối mạng. Đang chờ kết nối...',\n 'core.interceptor.no-internet.cors-error': 'Không thể kết nối đến máy chủ (Lỗi CORS hoặc cấu hình).',\n 'core.interceptor.no-internet.maintenance': 'Máy chủ đang bảo trì. Vui lòng thử lại sau!',\n 'core.interceptor.no-internet.restored': 'Kết nối đã được khôi phục!',\n\n // ---- Service: excel ----\n 'core.excel.cannot-read-file': 'Không đọc được nội dung file',\n 'core.excel.no-sheet': 'File Excel không có sheet dữ liệu',\n\n // ---- Service: docx ----\n 'core.docx.invalid-format': 'Định dạng không hợp lệ. Vui lòng chọn Mẫu có định dạng DOC hoặc DOCX',\n 'core.docx.size-exceeded': 'Kích thước tệp mẫu vượt quá tiêu chuẩn hỗ trợ của hệ thống. Vui lòng thử lại',\n 'core.docx.convert-error': 'Có lỗi xảy ra khi chuyển đổi file DOCX',\n\n // ---- Service: notify (toast) ----\n 'core.notify.type.success': 'Thành công',\n 'core.notify.type.info': 'Thông tin',\n 'core.notify.type.warning': 'Cảnh báo',\n 'core.notify.type.error': 'Lỗi',\n 'core.notify.show-more': 'Hiện thêm ({count})',\n 'core.notify.show-less': 'Thu gọn',\n\n // ---- Service: confirm ----\n 'core.confirm.title': 'Xác nhận',\n 'core.confirm.yes': 'Đồng ý',\n 'core.confirm.no': 'Hủy bỏ',\n 'core.confirm.yes-short': 'Có',\n 'core.confirm.no-short': 'Không',\n\n // ---- Directive: hover-copy ----\n 'core.directive.hover-copy.tooltip': 'Sao chép',\n\n // ---- Forms: input ----\n 'core.form.input.required': 'Vui lòng nhập thông tin',\n 'core.form.input.maxlength': 'Số ký tự tối đa: {max}',\n 'core.form.input.invalid-pattern': 'Định dạng không hợp lệ',\n 'core.form.input.exceeded': 'Vượt quá số ký tự tối đa',\n 'core.form.input.mask-incomplete': 'Giá trị chưa đầy đủ',\n 'core.form.input.mask-invalid': 'Giá trị chứa ký tự không hợp lệ',\n\n // ---- Forms: autocomplete ----\n 'core.form.autocomplete.required': 'Vui lòng nhập thông tin',\n\n // ---- Forms: chip ----\n 'core.form.chip.required': 'Vui lòng nhập thông tin',\n 'core.form.chip.minlength': 'Vui lòng nhập ít nhất {min} giá trị',\n 'core.form.chip.maxlength': 'Vui lòng nhập tối đa {max} giá trị',\n\n // ---- Forms: chip-calendar ----\n 'core.form.chip-calendar.required': 'Vui lòng nhập thông tin',\n 'core.form.chip-calendar.minlength': 'Vui lòng nhập ít nhất {min} giá trị',\n 'core.form.chip-calendar.maxlength': 'Vui lòng nhập tối đa {max} giá trị',\n\n // ---- Forms: date ----\n 'core.form.date.required': 'Vui lòng nhập thông tin',\n 'core.form.date.min-date': 'Ngày nhỏ nhất: {date}',\n 'core.form.date.max-date': 'Ngày lớn nhất: {date}',\n 'core.form.date.parse-error': 'Lỗi phân tích: {text}',\n 'core.form.date.invalid-format': 'Sai định dạng',\n\n // ---- Forms: date-range ----\n 'core.form.date-range.required': 'Vui lòng nhập thông tin',\n 'core.form.date-range.invalid-min': 'Ngày bắt đầu không hợp lệ (nhỏ hơn giới hạn)',\n '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)',\n 'core.form.date-range.from': 'Từ',\n 'core.form.date-range.to': 'đến',\n\n // ---- Forms: datetime ----\n 'core.form.datetime.required': 'Vui lòng nhập thông tin',\n 'core.form.datetime.min-date': 'Ngày nhỏ nhất: {date}',\n 'core.form.datetime.max-date': 'Ngày lớn nhất: {date}',\n 'core.form.datetime.invalid-format': 'Sai định dạng',\n 'core.form.datetime.now': 'Bây giờ',\n 'core.form.datetime.confirm': 'Xác nhận',\n\n // ---- Forms: entity-picker / tree-select ----\n 'core.form.entity-picker.placeholder': 'Chọn đối tượng',\n 'core.form.entity-picker.modal-title': 'Chọn đối tượng',\n 'core.form.entity-picker.value': 'Giá trị',\n 'core.form.entity-picker.clear': 'Xóa lựa chọn',\n 'core.form.entity-picker.add': 'Thêm mới',\n 'core.form.entity-picker.cancel': 'Hủy',\n 'core.form.entity-picker.apply': 'Áp dụng',\n 'core.form.tree-select.placeholder': 'Chọn mục cây',\n 'core.form.tree-select.modal-title': 'Chọn mục cây',\n 'core.form.tree-select.clear': 'Xóa lựa chọn',\n 'core.form.tree-select.search': 'Tìm kiếm cây',\n 'core.form.tree-select.cancel': 'Hủy',\n 'core.form.tree-select.apply': 'Áp dụng',\n 'core.component.tree.retry': 'Thử lại',\n 'core.service.unsaved-changes.message': 'Bạn có thay đổi chưa lưu. Bỏ thay đổi và tiếp tục?',\n 'core.component.job-progress.status.idle': 'Sẵn sàng',\n 'core.component.job-progress.status.queued': 'Đang chờ',\n 'core.component.job-progress.status.running': 'Đang thực hiện',\n 'core.component.job-progress.status.succeeded': 'Hoàn tất',\n 'core.component.job-progress.status.failed': 'Thất bại',\n 'core.component.job-progress.status.cancelled': 'Đã hủy',\n 'core.component.job-progress.cancel': 'Hủy',\n 'core.component.job-progress.retry': 'Thử lại',\n 'core.component.audit-diff.label': 'Thay đổi kiểm toán',\n 'core.component.audit-diff.field': 'Trường',\n 'core.component.audit-diff.before': 'Trước',\n 'core.component.audit-diff.after': 'Sau',\n 'core.component.audit-diff.empty': 'Không có thay đổi',\n 'core.component.audit-diff.kind.added': 'Đã thêm',\n 'core.component.audit-diff.kind.removed': 'Đã xóa',\n 'core.component.audit-diff.kind.changed': 'Đã đổi',\n 'core.component.audit-diff.kind.unchanged': 'Không đổi',\n 'core.component.audit-diff.value.label': 'Giá trị',\n 'core.component.audit-diff.value.not-set': 'Chưa thiết lập',\n 'core.component.audit-diff.value.undefined': 'Không xác định',\n 'core.component.audit-diff.value.null': 'Rỗng',\n 'core.component.audit-diff.value.true': 'Có',\n 'core.component.audit-diff.value.false': 'Không',\n\n // ---- Forms: time ----\n 'core.form.time.required': 'Vui lòng nhập giờ',\n 'core.form.time.invalid': 'Vui lòng nhập giờ hợp lệ theo định dạng HH:mm',\n 'core.form.time.min': 'Giờ không được sớm hơn {min}',\n 'core.form.time.max': 'Giờ không được muộn hơn {max}',\n 'core.form.time.step': 'Giờ phải theo khoảng {step} phút',\n 'core.form.time.open-picker': 'Mở bộ chọn giờ',\n 'core.form.time.confirm': 'Xác nhận',\n 'core.form.time.clear': 'Xóa giờ',\n\n // ---- Forms: time-range ----\n 'core.form.time-range.required': 'Vui lòng nhập cả giờ bắt đầu và kết thúc',\n 'core.form.time-range.incomplete': 'Nhập đủ hai đầu hoặc bật khoảng thời gian mở',\n 'core.form.time-range.range': 'Giờ bắt đầu không được sau giờ kết thúc',\n 'core.form.time-range.invalid': 'Vui lòng nhập giờ hợp lệ theo định dạng HH:mm',\n 'core.form.time-range.min': 'Các mốc giờ không được sớm hơn {min}',\n 'core.form.time-range.max': 'Các mốc giờ không được muộn hơn {max}',\n 'core.form.time-range.step': 'Các mốc giờ phải theo khoảng {step} phút',\n 'core.form.time-range.from': 'Từ',\n 'core.form.time-range.to': 'Đến',\n 'core.form.time-range.clear': 'Xóa khoảng giờ',\n\n // ---- Forms: time-spinner ----\n 'core.form.time-spinner.hour': 'Giờ',\n 'core.form.time-spinner.minute': 'Phút',\n 'core.form.time-spinner.second': 'Giây',\n 'core.form.time-spinner.increase-hour': 'Tăng giờ',\n 'core.form.time-spinner.decrease-hour': 'Giảm giờ',\n 'core.form.time-spinner.increase-minute': 'Tăng phút',\n 'core.form.time-spinner.decrease-minute': 'Giảm phút',\n 'core.form.time-spinner.increase-second': 'Tăng giây',\n 'core.form.time-spinner.decrease-second': 'Giảm giây',\n\n // ---- Forms: input-number ----\n 'core.form.input-number.required': 'Vui lòng nhập thông tin',\n 'core.form.input-number.min': 'Giá trị không được nhỏ hơn {min}',\n 'core.form.input-number.max': 'Giá trị không được lớn hơn {max}',\n\n // ---- Forms: radio ----\n 'core.form.radio.required': 'Vui lòng nhập thông tin',\n\n // ---- Forms: switch ----\n 'core.form.switch.on': 'Bật',\n 'core.form.switch.off': 'Tắt',\n\n // ---- Forms: checkbox ----\n 'core.form.checkbox.checked': 'Có',\n 'core.form.checkbox.unchecked': 'Không',\n\n // ---- Forms: select ----\n 'core.form.select.required': 'Vui lòng nhập thông tin',\n\n // ---- Forms: textarea ----\n 'core.form.textarea.required': 'Vui lòng nhập thông tin',\n 'core.form.textarea.maxlength': 'Số ký tự tối đa: {max}',\n 'core.form.textarea.invalid-pattern': 'Định dạng không hợp lệ',\n 'core.form.textarea.exceeded': 'Vượt quá số ký tự tối đa',\n\n // ---- Component: editor ----\n 'core.component.editor.required': 'Vui lòng nhập nội dung',\n 'core.component.editor.maxlength': 'Số ký tự tối đa: {max}',\n 'core.component.editor.image.invalid-format': 'Định dạng file \".{format}\" không được phép. Các định dạng hợp lệ: {allowed}',\n 'core.component.editor.image.size-exceeded': 'Dung lượng file {sizeMB}MB vượt quá giới hạn {maxSizeMB}MB',\n 'core.component.editor.image.min-width': 'Chiều rộng ảnh {width}px nhỏ hơn giới hạn tối thiểu {min}px',\n 'core.component.editor.image.min-height': 'Chiều cao ảnh {height}px nhỏ hơn giới hạn tối thiểu {min}px',\n 'core.component.editor.image.max-width': 'Chiều rộng ảnh {width}px vượt quá giới hạn {max}px',\n 'core.component.editor.image.max-height': 'Chiều cao ảnh {height}px vượt quá giới hạn {max}px',\n 'core.component.editor.image.max-per-selection': 'Chỉ được phép chọn tối đa {max} ảnh mỗi lần',\n\n // ---- Component: document-builder ----\n 'core.component.document-builder.page-number.current': 'Số trang hiện tại',\n 'core.component.document-builder.page-number.total': 'Tổng số trang',\n 'core.component.document-builder.ck-comment.label': 'Bình luận',\n 'core.component.document-builder.ck-comment.text-too-long': 'Văn bản quá dài ({length} ký tự). Tối đa {max} ký tự.',\n 'core.component.document-builder.variable.not-allowed': 'Không cho phép thêm variable vào văn bản',\n 'core.component.document-builder.variable.invalid-data': 'Dữ liệu variable không hợp lệ',\n\n // ---- Component: form-builder ----\n 'core.component.form-builder.field-key': 'Trường dữ liệu',\n 'core.component.form-builder.display': 'Hiển thị',\n 'core.component.form-builder.general': 'Thông tin chung',\n 'core.component.form-builder.visible-when': 'Hiển thị khi',\n 'core.component.form-builder.required': 'Bắt buộc',\n 'core.component.form-builder.label': 'Tên hiển thị',\n 'core.component.form-builder.disabled': 'Vô hiệu',\n 'core.component.form-builder.disabled-when': 'Vô hiệu khi',\n 'core.component.form-builder.hidden-when': 'Ẩn khi',\n 'core.component.form-builder.validation': 'Ràng buộc',\n 'core.component.form-builder.required-when': 'Bắt buộc khi',\n 'core.component.form-builder.confirm': 'Xác nhận',\n 'core.component.form-builder.delete': 'Xóa',\n 'core.component.form-builder.save': 'Lưu',\n 'core.component.form-builder.hint': 'Gợi ý',\n 'core.component.form-builder.parameter': 'Tham số',\n 'core.component.form-builder.add-field': 'Thêm trường',\n 'core.component.form-builder.data': 'Dữ liệu',\n 'core.component.form-builder.query-condition': 'Điều kiện truy vấn',\n 'core.component.form-builder.set-query-value': 'Thiết lập giá trị truy vấn',\n 'core.component.form-builder.value-source-field': 'Trường lấy giá trị',\n 'core.component.form-builder.assign-parameter': 'Gán tham số',\n 'core.component.form-builder.template-data': 'Dữ liệu mẫu',\n 'core.component.form-builder.set-expression': 'Thiết lập biểu thức',\n 'core.component.form-builder.condition-group': 'Nhóm điều kiện',\n 'core.component.form-builder.condition': 'Điều kiện',\n 'core.component.form-builder.layout': 'Bố cục',\n 'core.component.form-builder.maxlength': 'Ký tự tối đa',\n 'core.component.form-builder.assign-parameter-value': 'Gán giá trị Tham số',\n 'core.component.form-builder.parameter-name': 'Tên tham số',\n 'core.component.form-builder.parameter-value': 'Giá trị tương ứng',\n 'core.component.form-builder.assign-value': 'Gán giá trị',\n 'core.component.form-builder.add-data': 'Thêm dữ liệu',\n 'core.component.form-builder.data-api': 'Dữ liệu API',\n 'core.component.form-builder.data-static': 'Dữ liệu tĩnh',\n 'core.component.form-builder.set-on-change-assign': 'Thiết lập gán giá trị khi thay đổi',\n 'core.component.form-builder.target-field': 'Trường muốn gán giá trị',\n 'core.component.form-builder.target-value': 'Giá trị muốn gán',\n 'core.component.form-builder.column-data': 'Dữ liệu cột',\n 'core.component.form-builder.add-column': 'Thêm cột',\n 'core.component.form-builder.column-config': 'Cấu hình cột',\n 'core.component.form-builder.column-name': 'Tên cột',\n 'core.component.form-builder.width': 'Chiều rộng',\n 'core.component.form-builder.data-type': 'Loại dữ liệu',\n 'core.component.form-builder.show-when-true': 'Hiển thị khi TRUE',\n 'core.component.form-builder.show-when-false': 'Hiển thị khi FALSE',\n 'core.component.form-builder.column-list': 'Danh sách cột',\n 'core.component.form-builder.yes-no': 'Có/Không',\n 'core.component.form-builder.config-validation-error-warning': 'Cấu hình xác thực lỗi/cảnh báo',\n 'core.component.form-builder.message-type': 'Loại thông báo',\n 'core.component.form-builder.message-display': 'Thông báo hiển thị',\n 'core.component.form-builder.condition-expression': 'Biểu thức điều kiện',\n 'core.component.form-builder.add-validation': 'Thêm xác thực',\n 'core.component.form-builder.expression': 'Biểu thức',\n 'core.component.form-builder.available-methods': 'Phương thức sẵn có',\n 'core.component.form-builder.format': 'Định dạng',\n 'core.component.form-builder.time': 'Thời điểm',\n 'core.component.form-builder.content': 'Nội dung',\n 'core.component.form-builder.min': 'Giá trị nhỏ nhất',\n 'core.component.form-builder.max': 'Giá trị lớn nhất',\n 'core.component.form-builder.vertical': 'Dọc',\n 'core.component.form-builder.multiple': 'Chọn nhiều',\n 'core.component.form-builder.default-value': 'Giá trị mặc định',\n 'core.component.form-builder.type': 'Loại',\n 'core.component.form-builder.file': 'Tệp',\n 'core.component.form-builder.image': 'Ảnh',\n 'core.component.form-builder.max-files': 'SL tệp/ảnh tối đa',\n 'core.component.form-builder.size-mb': 'Dung lượng (Mb)',\n 'core.component.form-builder.format-example': 'Định dạng (VD: png,jpg ...)',\n 'core.component.form-builder.source-mobile': 'Nguồn (mobile)',\n 'core.component.form-builder.config-variable': 'Cấu hình biến',\n 'core.component.form-builder.config-validation-warning-error': 'Cấu hình xác thực cảnh báo/lỗi',\n 'core.component.form-builder.back-to-design': 'Trở về thiết kế',\n 'core.component.form-builder.preview': 'Xem thử',\n 'core.component.form-builder.drag-vertically': 'Kéo lên / xuống',\n 'core.component.form-builder.unset-readonly': 'Bỏ chỉ xem',\n 'core.component.form-builder.set-readonly': 'Chỉ xem',\n 'core.component.form-builder.duplicate': 'Nhân bản',\n 'core.component.form-builder.show': 'Hiện',\n 'core.component.form-builder.hide': 'Ẩn',\n 'core.component.form-builder.flex': 'Co dãn',\n 'core.component.form-builder.display-label': 'Nhãn hiển thị',\n 'core.component.form-builder.attribute': 'Thuộc tính',\n 'core.component.form-builder.add-variable': 'Thêm biến',\n 'core.component.form-builder.add-new': 'Thêm mới',\n 'core.component.form-builder.detail': 'Chi tiết',\n 'core.component.form-builder.create-update': 'Tạo mới/cập nhật',\n 'core.component.form-builder.default': 'Mặc định',\n 'core.component.form-builder.show-more': 'Xem thêm',\n 'core.component.form-builder.show-less': 'Thu gọn',\n 'core.component.inform.show-more': 'Xem thêm',\n 'core.component.inform.show-less': 'Thu gọn',\n 'core.component.data-state.loading.title': 'Đang tải',\n 'core.component.data-state.loading.message': 'Vui lòng chờ trong khi dữ liệu được tải.',\n 'core.component.data-state.empty.title': 'Chưa có dữ liệu',\n 'core.component.data-state.empty.message': 'Hiện chưa có dữ liệu để hiển thị.',\n 'core.component.data-state.error.title': 'Không thể tải dữ liệu',\n 'core.component.data-state.error.message': 'Đã xảy ra lỗi. Vui lòng thử lại.',\n 'core.component.data-state.forbidden.title': 'Không có quyền truy cập',\n 'core.component.data-state.forbidden.message': 'Bạn không có quyền xem nội dung này.',\n 'core.component.data-state.retry': 'Thử lại',\n 'core.component.form-builder.row-overflow': 'Không thể di chuyển tới dòng này vì tổng kích thước vượt quá 12 cột',\n 'core.component.form-builder.upload-source.all': 'Tất cả',\n 'core.component.form-builder.upload-source.photo-library': 'Chọn từ thư viện',\n 'core.component.form-builder.upload-source.capture': 'Chụp ảnh',\n // Form-builder UI v2 (M3 redesign)\n 'core.component.form-builder.components': 'Components',\n 'core.component.form-builder.search-components': 'Tìm component…',\n 'core.component.form-builder.view-json': 'Xem JSON',\n 'core.component.form-builder.design': 'Thiết kế',\n 'core.component.form-builder.preview-runtime': 'Xem trước · Runtime',\n 'core.component.form-builder.cancel': 'Hủy',\n 'core.component.form-builder.submit': 'Gửi',\n 'core.component.form-builder.empty-title': 'Kéo component vào đây để bắt đầu',\n 'core.component.form-builder.empty-hint': 'Tạo form bằng cách kéo các trường từ panel bên trái, hoặc nhấn',\n 'core.component.form-builder.conditional': 'Có điều kiện',\n 'core.component.form-builder.group-drop-here': 'Kéo trường vào đây để thêm vào group',\n 'core.component.form-builder.edit-group': 'Thiết kế group',\n 'core.component.form-builder.group-empty-hint': 'Bấm Chi tiết để thêm trường vào group',\n 'core.component.form-builder.hidden': 'Đã ẩn',\n 'core.component.form-builder.read-only': 'Chỉ đọc',\n 'core.component.form-builder.untitled': 'Chưa đặt tên',\n 'core.component.form-builder.no-selection-title': 'Chưa chọn component nào',\n 'core.component.form-builder.no-selection-hint': 'Chọn một component trên canvas để chỉnh sửa thuộc tính.',\n 'core.component.form-builder.group-children': 'Thành phần con',\n 'core.component.form-builder.group-icon': 'Icon',\n 'core.component.form-builder.group-accent-color': 'Màu nhấn',\n 'core.component.form-builder.group-no-children': 'Chưa có trường nào. Thêm hoặc kéo trường vào group này.',\n 'core.component.form-builder.break': 'Ngắt dòng',\n\n // ---- Component: code-editor ----\n 'core.component.code-editor.copied': 'Đã copy!',\n 'core.component.code-editor.copy': 'Copy code',\n\n // ---- Component: history ----\n 'core.component.history.by': 'Bởi',\n\n // ---- Component: import-excel ----\n 'core.component.import-excel.title': 'Nhập dữ liệu Excel',\n 'core.component.import-excel.see-all': 'Xem tất cả',\n 'core.component.import-excel.valid-rows': 'Số dòng dữ liệu hợp lệ',\n 'core.component.import-excel.error-rows': 'Số dòng dữ liệu có lỗi',\n 'core.component.import-excel.warning-rows': 'Số dòng dữ liệu có cảnh báo',\n 'core.component.import-excel.valid-data': 'Dữ liệu hợp lệ',\n 'core.component.import-excel.download-template-tooltip': 'Nhấn để tải tệp mẫu về máy',\n 'core.component.import-excel.upload': 'Tải lên',\n 'core.component.import-excel.download': 'Tải về',\n 'core.component.import-excel.confirm-save': 'Xác nhận & Lưu',\n 'core.component.import-excel.status': 'Trạng thái',\n 'core.component.import-excel.no-data-upload': 'Chưa có dữ liệu tải lên',\n 'core.component.import-excel.click-here-template': 'Nhấn vào đây để tải tệp mẫu',\n 'core.component.import-excel.no-data-in-file': 'Tệp tin không có dữ liệu',\n 'core.component.import-excel.row-limit': 'Giới hạn tải lên {limit} dòng',\n 'core.component.import-excel.required': 'Dữ liệu bắt buộc',\n 'core.component.import-excel.min-length': 'Độ dài chuỗi tối thiểu: {min}',\n 'core.component.import-excel.max-length': 'Độ dài chuỗi tối đa: {max}',\n 'core.component.import-excel.not-a-number': '{value} không phải số hợp lệ',\n 'core.component.import-excel.below-min': '{value} không thỏa giá trị tối thiểu: {min}',\n 'core.component.import-excel.above-max': '{value} không thỏa giá trị tối đa: {max}',\n 'core.component.import-excel.invalid-bool': 'Vui lòng nhập giá trị hợp lệ true, false, 1, 0',\n 'core.component.import-excel.invalid-value': 'Giá trị {value} không hợp lệ',\n 'core.component.import-excel.value-not-in-list': 'Giá trị {value} không thuộc danh sách cho phép [{list}]',\n 'core.component.import-excel.invalid-date-format': 'Ngày {value} không đúng định dạng {format}',\n 'core.component.import-excel.generic-error': 'Có lỗi xảy ra',\n 'core.component.import-excel.notify-title': 'Thông báo',\n 'core.component.import-excel.message-column': 'Thông báo',\n 'core.component.import-excel.success': 'Thành công',\n\n // ---- Component: preview-image ----\n 'core.component.preview-image.no-image': 'Không có thông tin ảnh',\n 'core.component.preview-image.title': 'Xem ảnh',\n 'core.component.preview-image.no-image-hint': 'Chưa có ảnh nào để hiển thị',\n 'core.component.preview-image.load-error': 'Không tải được ảnh',\n 'core.component.preview-image.load-error-hint': 'File ảnh có thể đã bị xóa hoặc đường dẫn không hợp lệ',\n 'core.component.preview-image.retry': 'Thử lại',\n 'core.component.preview-image.close': 'Đóng',\n 'core.component.preview-image.prev': 'Ảnh trước',\n 'core.component.preview-image.next': 'Ảnh tiếp theo',\n 'core.component.preview-image.zoom-in': 'Phóng to',\n 'core.component.preview-image.zoom-out': 'Thu nhỏ',\n 'core.component.preview-image.fit': 'Vừa khung',\n 'core.component.preview-image.rotate': 'Xoay',\n 'core.component.preview-image.download': 'Tải xuống',\n 'core.component.preview-image.fullscreen': 'Toàn màn hình',\n 'core.component.preview-image.loading': 'Đang tải ảnh...',\n 'core.component.preview-image.kbd-hint-nav': 'chuyển ảnh',\n 'core.component.preview-image.kbd-hint-close': 'đóng',\n\n // ---- Component: preview-pdf ----\n 'core.component.preview-pdf.title': 'Xem tài liệu',\n 'core.component.preview-pdf.close': 'Đóng',\n 'core.component.preview-pdf.pages-count': '{count} trang',\n 'core.component.preview-pdf.tab.thumbnails': 'Trang',\n 'core.component.preview-pdf.tab.outline': 'Mục lục',\n 'core.component.preview-pdf.tab.search': 'Tìm',\n 'core.component.preview-pdf.first-page': 'Trang đầu',\n 'core.component.preview-pdf.prev-page': 'Trang trước',\n 'core.component.preview-pdf.next-page': 'Trang tiếp',\n 'core.component.preview-pdf.last-page': 'Trang cuối',\n 'core.component.preview-pdf.zoom-in': 'Phóng to',\n 'core.component.preview-pdf.zoom-out': 'Thu nhỏ',\n 'core.component.preview-pdf.fit-page': 'Vừa trang',\n 'core.component.preview-pdf.fit-width': 'Vừa rộng',\n 'core.component.preview-pdf.actual-size': 'Kích thước thật',\n 'core.component.preview-pdf.rotate': 'Xoay',\n 'core.component.preview-pdf.scroll-page': 'Từng trang',\n 'core.component.preview-pdf.scroll-continuous': 'Cuộn liên tục',\n 'core.component.preview-pdf.print': 'In',\n 'core.component.preview-pdf.download': 'Tải xuống',\n 'core.component.preview-pdf.fullscreen': 'Toàn màn hình',\n 'core.component.preview-pdf.toggle-sidebar': 'Hiện/ẩn thanh bên',\n 'core.component.preview-pdf.page-of': 'trang {current} / {total}',\n 'core.component.preview-pdf.empty.title': 'Không có tài liệu',\n 'core.component.preview-pdf.empty.subtitle': 'Chưa có file PDF nào để hiển thị',\n 'core.component.preview-pdf.loading': 'Đang tải tài liệu...',\n 'core.component.preview-pdf.loading.page': 'Đang xử lý trang {current} / {total}',\n 'core.component.preview-pdf.error.invalid.title': 'Không tải được tài liệu',\n 'core.component.preview-pdf.error.invalid.body': 'File PDF có thể bị hỏng. Vui lòng kiểm tra lại file.',\n 'core.component.preview-pdf.error.password.title': 'Tài liệu được bảo vệ',\n 'core.component.preview-pdf.error.password.body': 'File PDF này yêu cầu mật khẩu để mở.',\n 'core.component.preview-pdf.error.network.title': 'Không kết nối được',\n 'core.component.preview-pdf.error.network.body': 'Không thể tải file từ máy chủ. Vui lòng thử lại sau.',\n 'core.component.preview-pdf.error.unknown.title': 'Đã có lỗi xảy ra',\n 'core.component.preview-pdf.error.unknown.body': 'Vui lòng thử lại hoặc tải file gốc về để xem.',\n 'core.component.preview-pdf.error.retry': 'Thử lại',\n 'core.component.preview-pdf.error.download-raw': 'Tải file gốc',\n 'core.component.preview-pdf.search': 'Tìm kiếm',\n 'core.component.preview-pdf.search-placeholder': 'Tìm trong tài liệu...',\n 'core.component.preview-pdf.search-case': 'Phân biệt hoa thường',\n 'core.component.preview-pdf.search-whole': 'Từ nguyên',\n 'core.component.preview-pdf.search-no-results': 'Không tìm thấy',\n 'core.component.preview-pdf.search-results-count': '{count} kết quả cho \"{term}\"',\n 'core.component.preview-pdf.search-truncated': 'Đang hiển thị {count} kết quả đầu tiên. Hãy thu hẹp nội dung tìm kiếm.',\n 'core.component.preview-pdf.search-prev': 'Kết quả trước',\n 'core.component.preview-pdf.search-next': 'Kết quả tiếp',\n 'core.component.preview-pdf.search-close': 'Đóng tìm kiếm',\n\n // ---- Component: table ----\n 'core.component.table.setup': 'Thiết lập bảng',\n 'core.component.table.column-header': 'Tiêu đề cột',\n 'core.component.table.width': 'Rộng',\n 'core.component.table.fixed': 'Cố định',\n 'core.component.table.char-limit': 'Giới hạn ký tự',\n 'core.component.table.skip': 'Bỏ qua',\n 'core.component.table.apply': 'Áp dụng',\n 'core.component.table.filter': 'Bộ lọc',\n 'core.component.table.clear-selection': 'Xóa lựa chọn',\n 'core.component.table.customize': 'Tùy chỉnh',\n 'core.component.table.search': 'Tìm kiếm',\n 'core.component.table.reload': 'Tải lại',\n 'core.component.table.setup-short': 'Thiết lập',\n 'core.component.table.no-results': 'Không có kết quả phù hợp',\n 'core.component.table.no-results-hint': 'Vui lòng tìm kiếm hoặc lọc theo tiêu chí khác',\n 'core.component.table.choose-filter-hint': 'Vui lòng chọn bộ lọc để bắt đầu',\n 'core.component.table.no-data': 'Chưa có dữ liệu',\n 'core.component.table.export-excel': 'Xuất excel',\n 'core.component.table.export-csv': 'Xuất CSV',\n 'core.component.table.showing': 'Đang hiển thị:',\n 'core.component.table.paginator.first-page': 'Trang đầu',\n 'core.component.table.paginator.last-page': 'Trang cuối',\n 'core.component.table.paginator.items-per-page': 'Đang hiển thị',\n 'core.component.table.paginator.next-page': 'Trang sau',\n 'core.component.table.paginator.previous-page': 'Trang trước',\n 'core.component.table.error-occurred': 'Có lỗi xảy ra',\n 'core.component.table.not-an-array': 'Dữ liệu không phải là một mảng',\n 'core.component.table.config.confirm-reset': 'Xác nhận đưa tất cả thiết lập về mặc định',\n 'core.component.table.popup-export.select-columns': 'Vui lòng chọn cột dữ liệu để xuất',\n 'core.component.table.selector-action.default-msg': 'dữ liệu được chọn',\n 'core.component.tab-router.too-many-tabs': 'Bạn đã mở quá nhiều tab.',\n\n // ---- Component: upload-file ----\n 'core.component.upload-file.upload': 'Tải file',\n 'core.component.upload-file.error-occurred': 'Có lỗi xảy ra',\n 'core.component.upload-file.please-upload': 'Vui lòng tải lên tệp/ảnh',\n 'core.component.upload-file.desc-format-and-size': 'Định dạng: {exts} và tối đa: {maxSize}MB',\n 'core.component.upload-file.desc-format': 'Định dạng: {exts}',\n 'core.component.upload-file.desc-max-size': 'Tối đa: {maxSize}MB',\n 'core.component.upload-file.not-image': '[{name}] Tệp tải lên không phải là ảnh',\n 'core.component.upload-file.invalid-format': '[{name}] Tệp tải lên không đúng định dạng: {exts}',\n 'core.component.upload-file.size-exceeded': '[{name}] Kích thước tệp tối đa: {maxSize} MB',\n 'core.component.upload-file.upload-failed': 'Có lỗi xảy ra trong quá trình tải lên tệp',\n 'core.component.upload-file.too-many-files': 'Bạn đã chọn quá nhiều file. Vui lòng kiểm tra lại số lượng',\n 'core.component.upload-file.confirm-delete-message': 'Bạn có muốn xóa file này không? Thao tác này không thể hoàn tác',\n 'core.component.upload-file.confirm-delete-title': 'Xác nhận xóa?',\n 'core.component.upload-file.confirm-yes': 'Xác nhận',\n 'core.component.upload-file.confirm-no': 'Hủy',\n 'core.component.upload-file.no-configuration':\n 'Vui lòng inject SD_UPLOAD_FILE_CONFIGURATION hoặc truyền [upload] trực tiếp vào component',\n 'core.component.upload-file.no-configuration-key':\n \"Không tìm thấy upload configuration theo key='{key}'. Vui lòng kiểm tra providers hoặc truyền [upload] trực tiếp\",\n 'core.component.upload-file.preview-title': 'Xem ảnh',\n\n // ---- Module: layout (sidebar / user menu) ----\n 'core.module.layout.user.change-password': 'Đổi mật khẩu',\n 'core.module.layout.user.logout': 'Đăng xuất',\n 'core.module.layout.user.update-profile': 'Chỉnh sửa hồ sơ',\n 'core.module.layout.user.setting': 'Thiết lập',\n 'core.module.layout.user.notification': 'Thông báo',\n 'core.module.layout.sidebar.search': 'Tìm kiếm',\n 'core.module.layout.sidebar.toggle': 'Thu gọn hoặc mở rộng thanh điều hướng',\n\n // ---- Module: layout (greeting + weekday) ----\n 'core.module.layout.greeting.hello': 'Xin chào, {name}',\n 'core.module.layout.weekday.0': 'Chủ Nhật',\n 'core.module.layout.weekday.1': 'Thứ 2',\n 'core.module.layout.weekday.2': 'Thứ 3',\n 'core.module.layout.weekday.3': 'Thứ 4',\n 'core.module.layout.weekday.4': 'Thứ 5',\n 'core.module.layout.weekday.5': 'Thứ 6',\n 'core.module.layout.weekday.6': 'Thứ 7',\n 'core.module.layout.today-info.format': '{weekday}, ngày {date}',\n\n // ---- Module: layout (forbidden page) ----\n 'core.module.layout.forbidden.title': 'Không được phép truy cập',\n 'core.module.layout.forbidden.message': 'Bạn không có quyền truy cập vào trang này. Liên hệ với quản trị viên hoặc quay lại trang chủ',\n 'core.module.layout.forbidden.back-home': 'Quay lại trang chủ',\n\n // ---- Module: layout (not-found page) ----\n 'core.module.layout.not-found.title': '404 - Trang không tồn tại',\n 'core.module.layout.not-found.message':\n 'Trang bạn tìm không tồn tại hoặc đã bị xóa. Vui lòng kiểm tra lại địa chỉ URL hoặc quay lại trang chủ để tiếp tục.',\n 'core.module.layout.not-found.back': 'Quay trở lại',\n\n // ---- Module: layout (home page) ----\n 'core.module.layout.home.tab-name': 'Trang chủ',\n 'core.module.layout.home.feature.data': 'Dữ liệu',\n 'core.module.layout.home.feature.reports': 'Báo cáo',\n 'core.module.layout.home.feature.users': 'Người dùng',\n 'core.module.layout.home.feature.workflow': 'Quy trình',\n 'core.module.layout.home.feature.audit': 'Kiểm toán',\n 'core.module.layout.home.feature.integration': 'Tích hợp',\n\n // ---- Module: layout (mock fallback khi không provide SD_LAYOUT_CONFIGURATION) ----\n 'core.module.layout.mock.user.full-name': 'Người dùng demo',\n\n // ---- Module: generic (generic-select) ----\n 'core.module.generic.generic-select.detail-link': 'chi tiết',\n};\n","import type { EN_MESSAGES } from './en';\n\nexport const ZH_MESSAGES: Record<keyof typeof EN_MESSAGES, string> = {\n 'core.common.cancel': '取消',\n 'core.common.close': '关闭',\n 'core.common.reload': '重新加载页面',\n 'core.test.greet': '你好 {name}',\n\n // ---- Validators (VALIDATION_PATTERNS in @sdcorejs/utils/constants) ----\n 'core.validator.email.name': '邮箱',\n 'core.validator.email.error': '邮箱格式不正确',\n 'core.validator.phone.name': '电话',\n 'core.validator.phone.error': '电话号码格式不正确',\n // Legacy aliases\n 'core.validator.phone-vn.name': '越南电话',\n 'core.validator.phone-vn.error': '越南电话号码格式不正确',\n 'core.validator.cccd.name': '身份证号',\n 'core.validator.cccd.error': '身份证号格式不正确(12位数字)',\n 'core.validator.id-vn.name': '身份证 / 护照',\n 'core.validator.id-vn.error': '身份证或护照号码格式不正确',\n 'core.validator.vn-phone.name': '越南电话',\n 'core.validator.vn-phone.error': '越南电话号码格式不正确',\n 'core.validator.vn-id.name': '身份证号',\n 'core.validator.vn-id.error': '身份证号格式不正确(12位数字)',\n 'core.validator.passport.name': '护照',\n 'core.validator.passport.error': '护照号码格式不正确(1个字母 + 7位数字)',\n 'core.validator.vn-id-or-passport.name': '身份证 / 护照',\n 'core.validator.vn-id-or-passport.error': '身份证或护照号码格式不正确',\n 'core.validator.time.name': '时间',\n 'core.validator.time.error': '时间格式不正确(HH:mm 格式)',\n 'core.validator.url.name': 'URL',\n 'core.validator.url.error': 'URL 格式不正确',\n 'core.validator.domain.name': '域名',\n 'core.validator.domain.error': '域名格式不正确',\n 'core.validator.ipv4.name': 'IPv4',\n 'core.validator.ipv4.error': 'IPv4 地址格式不正确',\n 'core.validator.ipv6.name': 'IPv6',\n 'core.validator.ipv6.error': 'IPv6 地址格式不正确',\n 'core.validator.image-url.name': '图片 URL',\n 'core.validator.image-url.error': '图片 URL 格式不正确',\n 'core.validator.slug.name': 'Slug',\n 'core.validator.slug.error': 'Slug 格式不正确',\n 'core.validator.number.name': '数字',\n 'core.validator.number.error': '数字格式不正确',\n 'core.validator.integer.name': '整数',\n 'core.validator.integer.error': '整数格式不正确',\n 'core.validator.decimal.name': '小数',\n 'core.validator.decimal.error': '小数格式不正确',\n 'core.validator.positive-number.name': '正数',\n 'core.validator.positive-number.error': '必须为正数',\n 'core.validator.uuid.name': 'UUID',\n 'core.validator.uuid.error': 'UUID 格式不正确',\n 'core.validator.code-16.name': '16 位代码',\n 'core.validator.code-16.error': '16 位代码格式不正确',\n 'core.validator.code-32.name': '32 位代码',\n 'core.validator.code-32.error': '32 位代码格式不正确',\n 'core.validator.hex-color.name': 'HEX 颜色',\n 'core.validator.hex-color.error': 'HEX 颜色格式不正确',\n 'core.validator.base64.name': 'Base64',\n 'core.validator.base64.error': 'Base64 字符串格式不正确',\n\n // ---- Operators (operator.model.ts) ----\n 'core.operator.equal.display': '等于',\n 'core.operator.not-equal.display': '不等于',\n 'core.operator.greater-than.display': '大于',\n 'core.operator.less-than.display': '小于',\n 'core.operator.greater-or-equal.display': '大于或等于',\n 'core.operator.less-or-equal.display': '小于或等于',\n 'core.operator.contain.display': '包含',\n 'core.operator.not-contain.display': '不包含',\n 'core.operator.start-with.display': '开始于',\n 'core.operator.not-start-with.display': '不开始于',\n 'core.operator.end-with.display': '结束于',\n 'core.operator.not-end-with.display': '不结束于',\n 'core.operator.in.display': '属于',\n 'core.operator.not-in.display': '不属于',\n 'core.operator.between.display': '介于之间',\n 'core.operator.null.display': '为空',\n 'core.operator.not-null.display': '不为空',\n\n // ---- Global error handler ----\n 'core.handler.global-error.update-title': '系统有新的更新',\n 'core.handler.global-error.update-body': '当前版本已过期,无法加载资源。\\n请点击确定重新加载页面。',\n\n // ---- Interceptor: no-internet ----\n 'core.interceptor.no-internet.offline': '没有网络连接,等待连接中...',\n 'core.interceptor.no-internet.cors-error': '无法连接到服务器(CORS 或配置错误)。',\n 'core.interceptor.no-internet.maintenance': '服务器正在维护中,请稍后再试。',\n 'core.interceptor.no-internet.restored': '网络连接已恢复。',\n\n // ---- Service: excel ----\n 'core.excel.cannot-read-file': '无法读取文件内容',\n 'core.excel.no-sheet': 'Excel 文件没有数据表',\n\n // ---- Service: docx ----\n 'core.docx.invalid-format': '格式不正确,请选择 DOC 或 DOCX 格式的模板',\n 'core.docx.size-exceeded': '模板文件大小超出支持范围,请重试',\n 'core.docx.convert-error': '转换 DOCX 文件时发生错误',\n\n // ---- Service: notify (toast) ----\n 'core.notify.type.success': '成功',\n 'core.notify.type.info': '信息',\n 'core.notify.type.warning': '警告',\n 'core.notify.type.error': '错误',\n 'core.notify.show-more': '显示更多 ({count})',\n 'core.notify.show-less': '收起',\n\n // ---- Service: confirm ----\n 'core.confirm.title': '确认',\n 'core.confirm.yes': '确定',\n 'core.confirm.no': '取消',\n 'core.confirm.yes-short': '是',\n 'core.confirm.no-short': '否',\n\n // ---- Directive: hover-copy ----\n 'core.directive.hover-copy.tooltip': '复制',\n\n // ---- Forms: input ----\n 'core.form.input.required': '请输入内容',\n 'core.form.input.maxlength': '最大字符数: {max}',\n 'core.form.input.invalid-pattern': '格式不正确',\n 'core.form.input.exceeded': '已超过最大字符数',\n 'core.form.input.mask-incomplete': '输入值不完整',\n 'core.form.input.mask-invalid': '输入值包含无效字符',\n\n // ---- Forms: autocomplete ----\n 'core.form.autocomplete.required': '请输入内容',\n\n // ---- Forms: chip ----\n 'core.form.chip.required': '请输入内容',\n 'core.form.chip.minlength': '请至少输入 {min} 个值',\n 'core.form.chip.maxlength': '最多输入 {max} 个值',\n\n // ---- Forms: chip-calendar ----\n 'core.form.chip-calendar.required': '请输入内容',\n 'core.form.chip-calendar.minlength': '请至少输入 {min} 个值',\n 'core.form.chip-calendar.maxlength': '最多输入 {max} 个值',\n\n // ---- Forms: date ----\n 'core.form.date.required': '请输入内容',\n 'core.form.date.min-date': '最小日期: {date}',\n 'core.form.date.max-date': '最大日期: {date}',\n 'core.form.date.parse-error': '解析错误: {text}',\n 'core.form.date.invalid-format': '格式不正确',\n\n // ---- Forms: date-range ----\n 'core.form.date-range.required': '请输入内容',\n 'core.form.date-range.invalid-min': '开始日期无效(低于限制)',\n 'core.form.date-range.invalid-max': '结束日期无效(高于限制)',\n 'core.form.date-range.from': '从',\n 'core.form.date-range.to': '至',\n\n // ---- Forms: datetime ----\n 'core.form.datetime.required': '请输入内容',\n 'core.form.datetime.min-date': '最小日期: {date}',\n 'core.form.datetime.max-date': '最大日期: {date}',\n 'core.form.datetime.invalid-format': '格式不正确',\n 'core.form.datetime.now': '现在',\n 'core.form.datetime.confirm': '确认',\n\n // ---- Forms: entity-picker / tree-select ----\n 'core.form.entity-picker.placeholder': '选择实体',\n 'core.form.entity-picker.modal-title': '选择实体',\n 'core.form.entity-picker.value': '值',\n 'core.form.entity-picker.clear': '清除选择',\n 'core.form.entity-picker.add': '添加',\n 'core.form.entity-picker.cancel': '取消',\n 'core.form.entity-picker.apply': '应用',\n 'core.form.tree-select.placeholder': '选择树节点',\n 'core.form.tree-select.modal-title': '选择树节点',\n 'core.form.tree-select.clear': '清除选择',\n 'core.form.tree-select.search': '搜索树',\n 'core.form.tree-select.cancel': '取消',\n 'core.form.tree-select.apply': '应用',\n 'core.component.tree.retry': '重试',\n 'core.service.unsaved-changes.message': '您有未保存的更改。是否放弃更改并继续?',\n 'core.component.job-progress.status.idle': '就绪',\n 'core.component.job-progress.status.queued': '排队中',\n 'core.component.job-progress.status.running': '进行中',\n 'core.component.job-progress.status.succeeded': '已完成',\n 'core.component.job-progress.status.failed': '失败',\n 'core.component.job-progress.status.cancelled': '已取消',\n 'core.component.job-progress.cancel': '取消',\n 'core.component.job-progress.retry': '重试',\n 'core.component.audit-diff.label': '审计变更',\n 'core.component.audit-diff.field': '字段',\n 'core.component.audit-diff.before': '变更前',\n 'core.component.audit-diff.after': '变更后',\n 'core.component.audit-diff.empty': '没有变更',\n 'core.component.audit-diff.kind.added': '已添加',\n 'core.component.audit-diff.kind.removed': '已删除',\n 'core.component.audit-diff.kind.changed': '已更改',\n 'core.component.audit-diff.kind.unchanged': '未更改',\n 'core.component.audit-diff.value.label': '值',\n 'core.component.audit-diff.value.not-set': '未设置',\n 'core.component.audit-diff.value.undefined': '未定义',\n 'core.component.audit-diff.value.null': '空值',\n 'core.component.audit-diff.value.true': '是',\n 'core.component.audit-diff.value.false': '否',\n\n // ---- Forms: time ----\n 'core.form.time.required': '请输入时间',\n 'core.form.time.invalid': '请输入 HH:mm 格式的有效时间',\n 'core.form.time.min': '时间不得早于 {min}',\n 'core.form.time.max': '时间不得晚于 {max}',\n 'core.form.time.step': '时间必须符合 {step} 分钟间隔',\n 'core.form.time.open-picker': '打开时间选择器',\n 'core.form.time.confirm': '确认',\n 'core.form.time.clear': '清除时间',\n\n // ---- Forms: time-range ----\n 'core.form.time-range.required': '请输入开始和结束时间',\n 'core.form.time-range.incomplete': '请输入两个时间,或启用开放时间范围',\n 'core.form.time-range.range': '开始时间不得晚于结束时间',\n 'core.form.time-range.invalid': '请输入 HH:mm 格式的有效时间',\n 'core.form.time-range.min': '时间不得早于 {min}',\n 'core.form.time-range.max': '时间不得晚于 {max}',\n 'core.form.time-range.step': '时间必须符合 {step} 分钟间隔',\n 'core.form.time-range.from': '开始',\n 'core.form.time-range.to': '结束',\n 'core.form.time-range.clear': '清除时间范围',\n\n // ---- Forms: time-spinner ----\n 'core.form.time-spinner.hour': '时',\n 'core.form.time-spinner.minute': '分',\n 'core.form.time-spinner.second': '秒',\n 'core.form.time-spinner.increase-hour': '增加小时',\n 'core.form.time-spinner.decrease-hour': '减少小时',\n 'core.form.time-spinner.increase-minute': '增加分钟',\n 'core.form.time-spinner.decrease-minute': '减少分钟',\n 'core.form.time-spinner.increase-second': '增加秒',\n 'core.form.time-spinner.decrease-second': '减少秒',\n\n // ---- Forms: input-number ----\n 'core.form.input-number.required': '请输入内容',\n 'core.form.input-number.min': '值不能小于 {min}',\n 'core.form.input-number.max': '值不能大于 {max}',\n\n // ---- Forms: radio ----\n 'core.form.radio.required': '请选择',\n\n // ---- Forms: switch ----\n 'core.form.switch.on': '开',\n 'core.form.switch.off': '关',\n\n // ---- Forms: checkbox ----\n 'core.form.checkbox.checked': '是',\n 'core.form.checkbox.unchecked': '否',\n\n // ---- Forms: select ----\n 'core.form.select.required': '请选择',\n\n // ---- Forms: textarea ----\n 'core.form.textarea.required': '请输入内容',\n 'core.form.textarea.maxlength': '最大字符数: {max}',\n 'core.form.textarea.invalid-pattern': '格式不正确',\n 'core.form.textarea.exceeded': '已超过最大字符数',\n\n // ---- Component: editor ----\n 'core.component.editor.required': '请输入内容',\n 'core.component.editor.maxlength': '最大字符数: {max}',\n 'core.component.editor.image.invalid-format': '不允许的文件格式 \".{format}\"。允许的格式: {allowed}',\n 'core.component.editor.image.size-exceeded': '文件大小 {sizeMB}MB 超过限制 {maxSizeMB}MB',\n 'core.component.editor.image.min-width': '图片宽度 {width}px 低于最小值 {min}px',\n 'core.component.editor.image.min-height': '图片高度 {height}px 低于最小值 {min}px',\n 'core.component.editor.image.max-width': '图片宽度 {width}px 超过限制 {max}px',\n 'core.component.editor.image.max-height': '图片高度 {height}px 超过限制 {max}px',\n 'core.component.editor.image.max-per-selection': '每次最多选择 {max} 张图片',\n\n // ---- Component: document-builder ----\n 'core.component.document-builder.page-number.current': '当前页码',\n 'core.component.document-builder.page-number.total': '总页数',\n 'core.component.document-builder.ck-comment.label': '评论',\n 'core.component.document-builder.ck-comment.text-too-long': '文本过长({length} 字符)。最多 {max} 字符。',\n 'core.component.document-builder.variable.not-allowed': '不允许在文本中添加变量',\n 'core.component.document-builder.variable.invalid-data': '变量数据无效',\n\n // ---- Component: form-builder ----\n 'core.component.form-builder.field-key': '字段键',\n 'core.component.form-builder.display': '显示',\n 'core.component.form-builder.general': '常规',\n 'core.component.form-builder.visible-when': '显示条件',\n 'core.component.form-builder.required': '必填',\n 'core.component.form-builder.label': '标签',\n 'core.component.form-builder.disabled': '禁用',\n 'core.component.form-builder.disabled-when': '禁用条件',\n 'core.component.form-builder.hidden-when': '隐藏条件',\n 'core.component.form-builder.validation': '校验',\n 'core.component.form-builder.required-when': '必填条件',\n 'core.component.form-builder.confirm': '确认',\n 'core.component.form-builder.delete': '删除',\n 'core.component.form-builder.save': '保存',\n 'core.component.form-builder.hint': '提示',\n 'core.component.form-builder.parameter': '参数',\n 'core.component.form-builder.add-field': '添加字段',\n 'core.component.form-builder.data': '数据',\n 'core.component.form-builder.query-condition': '查询条件',\n 'core.component.form-builder.set-query-value': '设置查询值',\n 'core.component.form-builder.value-source-field': '取值字段',\n 'core.component.form-builder.assign-parameter': '分配参数',\n 'core.component.form-builder.template-data': '模板数据',\n 'core.component.form-builder.set-expression': '设置表达式',\n 'core.component.form-builder.condition-group': '条件组',\n 'core.component.form-builder.condition': '条件',\n 'core.component.form-builder.layout': '布局',\n 'core.component.form-builder.maxlength': '最大字符数',\n 'core.component.form-builder.assign-parameter-value': '分配参数值',\n 'core.component.form-builder.parameter-name': '参数名',\n 'core.component.form-builder.parameter-value': '参数值',\n 'core.component.form-builder.assign-value': '赋值',\n 'core.component.form-builder.add-data': '添加数据',\n 'core.component.form-builder.data-api': 'API 数据',\n 'core.component.form-builder.data-static': '静态数据',\n 'core.component.form-builder.set-on-change-assign': '设置变更时赋值',\n 'core.component.form-builder.target-field': '目标字段',\n 'core.component.form-builder.target-value': '目标值',\n 'core.component.form-builder.column-data': '列数据',\n 'core.component.form-builder.add-column': '添加列',\n 'core.component.form-builder.column-config': '列配置',\n 'core.component.form-builder.column-name': '列名',\n 'core.component.form-builder.width': '宽度',\n 'core.component.form-builder.data-type': '数据类型',\n 'core.component.form-builder.show-when-true': '为 TRUE 时显示',\n 'core.component.form-builder.show-when-false': '为 FALSE 时显示',\n 'core.component.form-builder.column-list': '列列表',\n 'core.component.form-builder.yes-no': '是/否',\n 'core.component.form-builder.config-validation-error-warning': '配置错误/警告校验',\n 'core.component.form-builder.message-type': '消息类型',\n 'core.component.form-builder.message-display': '显示消息',\n 'core.component.form-builder.condition-expression': '条件表达式',\n 'core.component.form-builder.add-validation': '添加校验',\n 'core.component.form-builder.expression': '表达式',\n 'core.component.form-builder.available-methods': '可用方法',\n 'core.component.form-builder.format': '格式',\n 'core.component.form-builder.time': '时间',\n 'core.component.form-builder.content': '内容',\n 'core.component.form-builder.min': '最小值',\n 'core.component.form-builder.max': '最大值',\n 'core.component.form-builder.vertical': '垂直',\n 'core.component.form-builder.multiple': '多选',\n 'core.component.form-builder.default-value': '默认值',\n 'core.component.form-builder.type': '类型',\n 'core.component.form-builder.file': '文件',\n 'core.component.form-builder.image': '图片',\n 'core.component.form-builder.max-files': '最大文件/图片数',\n 'core.component.form-builder.size-mb': '大小 (MB)',\n 'core.component.form-builder.format-example': '格式(例如: png,jpg ...)',\n 'core.component.form-builder.source-mobile': '来源(移动端)',\n 'core.component.form-builder.config-variable': '配置变量',\n 'core.component.form-builder.config-validation-warning-error': '配置警告/错误校验',\n 'core.component.form-builder.back-to-design': '返回设计',\n 'core.component.form-builder.preview': '预览',\n 'core.component.form-builder.drag-vertically': '上下拖动',\n 'core.component.form-builder.unset-readonly': '取消只读',\n 'core.component.form-builder.set-readonly': '只读',\n 'core.component.form-builder.duplicate': '复制',\n 'core.component.form-builder.show': '显示',\n 'core.component.form-builder.hide': '隐藏',\n 'core.component.form-builder.flex': '弹性',\n 'core.component.form-builder.display-label': '显示标签',\n 'core.component.form-builder.attribute': '属性',\n 'core.component.form-builder.add-variable': '添加变量',\n 'core.component.form-builder.add-new': '新增',\n 'core.component.form-builder.detail': '详情',\n 'core.component.form-builder.create-update': '新建/更新',\n 'core.component.form-builder.default': '默认',\n 'core.component.form-builder.show-more': '查看更多',\n 'core.component.form-builder.show-less': '收起',\n 'core.component.inform.show-more': '展开',\n 'core.component.inform.show-less': '收起',\n 'core.component.data-state.loading.title': '正在加载',\n 'core.component.data-state.loading.message': '正在加载数据,请稍候。',\n 'core.component.data-state.empty.title': '暂无数据',\n 'core.component.data-state.empty.message': '目前没有可显示的数据。',\n 'core.component.data-state.error.title': '无法加载数据',\n 'core.component.data-state.error.message': '发生错误,请重试。',\n 'core.component.data-state.forbidden.title': '访问被拒绝',\n 'core.component.data-state.forbidden.message': '您没有权限查看此内容。',\n 'core.component.data-state.retry': '重试',\n 'core.component.form-builder.row-overflow': '无法移动到该行,因为总宽度超过 12 列',\n 'core.component.form-builder.upload-source.all': '全部',\n 'core.component.form-builder.upload-source.photo-library': '从相册选择',\n 'core.component.form-builder.upload-source.capture': '拍照',\n // Form-builder UI v2 (M3 redesign)\n 'core.component.form-builder.components': '组件',\n 'core.component.form-builder.search-components': '搜索组件…',\n 'core.component.form-builder.view-json': '查看 JSON',\n 'core.component.form-builder.design': '设计',\n 'core.component.form-builder.preview-runtime': '预览 · 运行时',\n 'core.component.form-builder.cancel': '取消',\n 'core.component.form-builder.submit': '提交',\n 'core.component.form-builder.empty-title': '拖动组件到此处开始',\n 'core.component.form-builder.empty-hint': '从左侧面板拖动字段构建表单,或按',\n 'core.component.form-builder.conditional': '条件',\n 'core.component.form-builder.group-drop-here': '将字段拖到此处以添加到该分组',\n 'core.component.form-builder.edit-group': '编辑分组',\n 'core.component.form-builder.group-empty-hint': '点击详情以向该分组添加字段',\n 'core.component.form-builder.hidden': '已隐藏',\n 'core.component.form-builder.read-only': '只读',\n 'core.component.form-builder.untitled': '未命名',\n 'core.component.form-builder.no-selection-title': '未选中任何项',\n 'core.component.form-builder.no-selection-hint': '在画布上选择一个组件以编辑其属性。',\n 'core.component.form-builder.group-children': '子项',\n 'core.component.form-builder.group-icon': '图标',\n 'core.component.form-builder.group-accent-color': '强调色',\n 'core.component.form-builder.group-no-children': '尚无字段。请向此分组添加或拖入字段。',\n 'core.component.form-builder.break': '换行',\n\n // ---- Component: code-editor ----\n 'core.component.code-editor.copied': '已复制!',\n 'core.component.code-editor.copy': '复制代码',\n\n // ---- Component: history ----\n 'core.component.history.by': '操作人',\n\n // ---- Component: import-excel ----\n 'core.component.import-excel.title': '导入 Excel 数据',\n 'core.component.import-excel.see-all': '查看全部',\n 'core.component.import-excel.valid-rows': '有效行数',\n 'core.component.import-excel.error-rows': '错误行数',\n 'core.component.import-excel.warning-rows': '警告行数',\n 'core.component.import-excel.valid-data': '有效数据',\n 'core.component.import-excel.download-template-tooltip': '点击下载模板',\n 'core.component.import-excel.upload': '上传',\n 'core.component.import-excel.download': '下载',\n 'core.component.import-excel.confirm-save': '确认并保存',\n 'core.component.import-excel.status': '状态',\n 'core.component.import-excel.no-data-upload': '未上传任何数据',\n 'core.component.import-excel.click-here-template': '点击此处下载模板',\n 'core.component.import-excel.no-data-in-file': '文件中没有数据',\n 'core.component.import-excel.row-limit': '上传上限为 {limit} 行',\n 'core.component.import-excel.required': '必填数据',\n 'core.component.import-excel.min-length': '最小字符串长度: {min}',\n 'core.component.import-excel.max-length': '最大字符串长度: {max}',\n 'core.component.import-excel.not-a-number': '{value} 不是有效的数字',\n 'core.component.import-excel.below-min': '{value} 低于最小值: {min}',\n 'core.component.import-excel.above-max': '{value} 高于最大值: {max}',\n 'core.component.import-excel.invalid-bool': '请输入有效值 (true, false, 1, 0)',\n 'core.component.import-excel.invalid-value': '值 {value} 无效',\n 'core.component.import-excel.value-not-in-list': '值 {value} 不在允许列表 [{list}] 中',\n 'core.component.import-excel.invalid-date-format': '日期 {value} 不符合格式 {format}',\n 'core.component.import-excel.generic-error': '发生错误',\n 'core.component.import-excel.notify-title': '通知',\n 'core.component.import-excel.message-column': '消息',\n 'core.component.import-excel.success': '成功',\n\n // ---- Component: preview-image ----\n 'core.component.preview-image.no-image': '没有图片信息',\n 'core.component.preview-image.title': '图片预览',\n 'core.component.preview-image.no-image-hint': '暂无可显示的图片',\n 'core.component.preview-image.load-error': '无法加载图片',\n 'core.component.preview-image.load-error-hint': '图片文件可能已被删除或路径无效',\n 'core.component.preview-image.retry': '重试',\n 'core.component.preview-image.close': '关闭',\n 'core.component.preview-image.prev': '上一张',\n 'core.component.preview-image.next': '下一张',\n 'core.component.preview-image.zoom-in': '放大',\n 'core.component.preview-image.zoom-out': '缩小',\n 'core.component.preview-image.fit': '适应屏幕',\n 'core.component.preview-image.rotate': '旋转',\n 'core.component.preview-image.download': '下载',\n 'core.component.preview-image.fullscreen': '全屏',\n 'core.component.preview-image.loading': '正在加载图片...',\n 'core.component.preview-image.kbd-hint-nav': '切换图片',\n 'core.component.preview-image.kbd-hint-close': '关闭',\n\n // ---- Component: preview-pdf ----\n 'core.component.preview-pdf.title': '查看文档',\n 'core.component.preview-pdf.close': '关闭',\n 'core.component.preview-pdf.pages-count': '{count} 页',\n 'core.component.preview-pdf.tab.thumbnails': '页面',\n 'core.component.preview-pdf.tab.outline': '目录',\n 'core.component.preview-pdf.tab.search': '查找',\n 'core.component.preview-pdf.first-page': '首页',\n 'core.component.preview-pdf.prev-page': '上一页',\n 'core.component.preview-pdf.next-page': '下一页',\n 'core.component.preview-pdf.last-page': '末页',\n 'core.component.preview-pdf.zoom-in': '放大',\n 'core.component.preview-pdf.zoom-out': '缩小',\n 'core.component.preview-pdf.fit-page': '适合页面',\n 'core.component.preview-pdf.fit-width': '适合宽度',\n 'core.component.preview-pdf.actual-size': '实际大小',\n 'core.component.preview-pdf.rotate': '旋转',\n 'core.component.preview-pdf.scroll-page': '单页',\n 'core.component.preview-pdf.scroll-continuous': '连续滚动',\n 'core.component.preview-pdf.print': '打印',\n 'core.component.preview-pdf.download': '下载',\n 'core.component.preview-pdf.fullscreen': '全屏',\n 'core.component.preview-pdf.toggle-sidebar': '切换侧边栏',\n 'core.component.preview-pdf.page-of': '第 {current} / {total} 页',\n 'core.component.preview-pdf.empty.title': '没有文档',\n 'core.component.preview-pdf.empty.subtitle': '尚无可显示的 PDF 文件',\n 'core.component.preview-pdf.loading': '正在加载文档...',\n 'core.component.preview-pdf.loading.page': '正在处理第 {current} / {total} 页',\n 'core.component.preview-pdf.error.invalid.title': '无法加载文档',\n 'core.component.preview-pdf.error.invalid.body': 'PDF 文件可能已损坏。请检查文件。',\n 'core.component.preview-pdf.error.password.title': '受保护的文档',\n 'core.component.preview-pdf.error.password.body': '此 PDF 文件需要密码才能打开。',\n 'core.component.preview-pdf.error.network.title': '无法连接',\n 'core.component.preview-pdf.error.network.body': '无法从服务器加载文件。请稍后再试。',\n 'core.component.preview-pdf.error.unknown.title': '发生错误',\n 'core.component.preview-pdf.error.unknown.body': '请重试或下载原始文件查看。',\n 'core.component.preview-pdf.error.retry': '重试',\n 'core.component.preview-pdf.error.download-raw': '下载原始文件',\n 'core.component.preview-pdf.search': '搜索',\n 'core.component.preview-pdf.search-placeholder': '在文档中搜索...',\n 'core.component.preview-pdf.search-case': '区分大小写',\n 'core.component.preview-pdf.search-whole': '全词匹配',\n 'core.component.preview-pdf.search-no-results': '未找到结果',\n 'core.component.preview-pdf.search-results-count': '关于 \"{term}\" 的 {count} 个结果',\n 'core.component.preview-pdf.search-truncated': '正在显示前 {count} 个匹配项。请缩小搜索范围。',\n 'core.component.preview-pdf.search-prev': '上一个结果',\n 'core.component.preview-pdf.search-next': '下一个结果',\n 'core.component.preview-pdf.search-close': '关闭搜索',\n\n // ---- Component: table ----\n 'core.component.table.setup': '表格设置',\n 'core.component.table.column-header': '列标题',\n 'core.component.table.width': '宽度',\n 'core.component.table.fixed': '固定',\n 'core.component.table.char-limit': '字符限制',\n 'core.component.table.skip': '跳过',\n 'core.component.table.apply': '应用',\n 'core.component.table.filter': '筛选',\n 'core.component.table.clear-selection': '清除选择',\n 'core.component.table.customize': '自定义',\n 'core.component.table.search': '搜索',\n 'core.component.table.reload': '刷新',\n 'core.component.table.setup-short': '设置',\n 'core.component.table.no-results': '未找到匹配结果',\n 'core.component.table.no-results-hint': '请使用其他条件搜索或筛选',\n 'core.component.table.choose-filter-hint': '请先选择筛选条件',\n 'core.component.table.no-data': '暂无数据',\n 'core.component.table.export-excel': '导出 Excel',\n 'core.component.table.export-csv': '导出 CSV',\n 'core.component.table.showing': '显示:',\n 'core.component.table.paginator.first-page': '首页',\n 'core.component.table.paginator.last-page': '末页',\n 'core.component.table.paginator.items-per-page': '显示',\n 'core.component.table.paginator.next-page': '下一页',\n 'core.component.table.paginator.previous-page': '上一页',\n 'core.component.table.error-occurred': '发生错误',\n 'core.component.table.not-an-array': '数据不是数组',\n 'core.component.table.config.confirm-reset': '确认将所有设置恢复为默认值',\n 'core.component.table.popup-export.select-columns': '请选择要导出的列',\n 'core.component.table.selector-action.default-msg': '项已选择',\n 'core.component.tab-router.too-many-tabs': '您已打开过多标签页。',\n\n // ---- Component: upload-file ----\n 'core.component.upload-file.upload': '上传文件',\n 'core.component.upload-file.error-occurred': '发生错误',\n 'core.component.upload-file.please-upload': '请上传文件/图片',\n 'core.component.upload-file.desc-format-and-size': '格式: {exts},最大: {maxSize}MB',\n 'core.component.upload-file.desc-format': '格式: {exts}',\n 'core.component.upload-file.desc-max-size': '最大: {maxSize}MB',\n 'core.component.upload-file.not-image': '[{name}] 上传的文件不是图片',\n 'core.component.upload-file.invalid-format': '[{name}] 上传的文件格式不正确: {exts}',\n 'core.component.upload-file.size-exceeded': '[{name}] 最大文件大小: {maxSize} MB',\n 'core.component.upload-file.upload-failed': '文件上传过程中发生错误',\n 'core.component.upload-file.too-many-files': '所选文件数量过多,请检查数量',\n 'core.component.upload-file.confirm-delete-message': '是否要删除此文件?此操作无法撤销',\n 'core.component.upload-file.confirm-delete-title': '确认删除?',\n 'core.component.upload-file.confirm-yes': '确认',\n 'core.component.upload-file.confirm-no': '取消',\n 'core.component.upload-file.no-configuration': '请注入 SD_UPLOAD_FILE_CONFIGURATION 或将 [upload] 直接传入组件',\n 'core.component.upload-file.no-configuration-key': \"未找到 key='{key}' 对应的上传配置。请检查 providers 或直接传入 [upload]\",\n 'core.component.upload-file.preview-title': '图片预览',\n\n // ---- Module: layout (sidebar / user menu) ----\n 'core.module.layout.user.change-password': '修改密码',\n 'core.module.layout.user.logout': '退出登录',\n 'core.module.layout.user.update-profile': '更新个人资料',\n 'core.module.layout.user.setting': '设置',\n 'core.module.layout.user.notification': '通知',\n 'core.module.layout.sidebar.search': '搜索',\n 'core.module.layout.sidebar.toggle': '切换侧边栏',\n\n // ---- Module: layout (greeting + weekday) ----\n 'core.module.layout.greeting.hello': '你好,{name}',\n 'core.module.layout.weekday.0': '星期日',\n 'core.module.layout.weekday.1': '星期一',\n 'core.module.layout.weekday.2': '星期二',\n 'core.module.layout.weekday.3': '星期三',\n 'core.module.layout.weekday.4': '星期四',\n 'core.module.layout.weekday.5': '星期五',\n 'core.module.layout.weekday.6': '星期六',\n 'core.module.layout.today-info.format': '{weekday},{date}',\n\n // ---- Module: layout (forbidden page) ----\n 'core.module.layout.forbidden.title': '禁止访问',\n 'core.module.layout.forbidden.message': '您没有访问此页面的权限。请联系管理员或返回首页',\n 'core.module.layout.forbidden.back-home': '返回首页',\n\n // ---- Module: layout (not-found page) ----\n 'core.module.layout.not-found.title': '404 - 页面未找到',\n 'core.module.layout.not-found.message': '您正在查找的页面不存在或已被移除。请检查 URL 或返回首页继续。',\n 'core.module.layout.not-found.back': '返回',\n\n // ---- Module: layout (home page) ----\n 'core.module.layout.home.tab-name': '首页',\n 'core.module.layout.home.feature.data': '数据',\n 'core.module.layout.home.feature.reports': '报表',\n 'core.module.layout.home.feature.users': '用户',\n 'core.module.layout.home.feature.workflow': '流程',\n 'core.module.layout.home.feature.audit': '审计',\n 'core.module.layout.home.feature.integration': '集成',\n\n // ---- Module: layout (mock fallback when SD_LAYOUT_CONFIGURATION is not provided) ----\n 'core.module.layout.mock.user.full-name': '演示用户',\n\n // ---- Module: generic (generic-select) ----\n 'core.module.generic.generic-select.detail-link': '详情',\n};\n","import { EN_MESSAGES } from './en';\nimport { JA_MESSAGES } from './ja';\nimport { KO_MESSAGES } from './ko';\nimport { VI_MESSAGES } from './vi';\nimport { ZH_MESSAGES } from './zh';\nimport type { Language } from './i18n.types';\n\nexport const I18N_MESSAGES: Record<Language, Readonly<Record<string, string>>> = {\n vi: VI_MESSAGES,\n en: EN_MESSAGES,\n ja: JA_MESSAGES,\n ko: KO_MESSAGES,\n zh: ZH_MESSAGES,\n};\n","import { computed, inject, Injectable, signal, Signal, WritableSignal } from '@angular/core';\nimport { ISdCoreConfiguration, SD_CORE_CONFIGURATION } from '@sdcorejs/angular/configurations';\nimport { I18N_MESSAGES } from './i18n.messages';\nimport { I18N_STORAGE_KEY } from './i18n.token';\nimport { SUPPORTED_LANGUAGES, I18nParams, Language } from './i18n.types';\n\n@Injectable({ providedIn: 'root' })\nexport class I18nService {\n readonly #config = inject<ISdCoreConfiguration | null>(SD_CORE_CONFIGURATION, { optional: true });\n // Custom catalog (signal) — non-null khi user cấu hình `language: () => I18nCatalog`.\n // Khi non-null, `messages` computed sẽ ưu tiên trả về catalog này thay vì I18N_MESSAGES[lang].\n // PHẢI khai báo TRƯỚC `#language` vì `#resolveInitial()` chạy trong initializer của `#language`\n // và có thể gọi `this.#customMessages.set(...)` (sync custom catalog path).\n readonly #customMessages: WritableSignal<Readonly<Record<string, string>> | null> = signal(null);\n readonly #language: WritableSignal<Language> = signal(this.#resolveInitial());\n readonly #warned = new Set<string>();\n\n readonly language: Signal<Language> = this.#language.asReadonly();\n readonly messages: Signal<Readonly<Record<string, string>>> = computed(() => {\n const custom = this.#customMessages();\n if (custom) return custom;\n return I18N_MESSAGES[this.#language()];\n });\n\n // Đổi ngôn ngữ require reload trang (model \"reload trên đổi\"). Pipe `translate` là pure\n // nên không tự cập nhật runtime — phải reload để cache pipe được rebuild với messages mới.\n // Test có thể pass `{ reload: false }` để tránh reload page trong Karma.\n setLanguage(lang: Language, opts: { reload?: boolean } = { reload: true }): void {\n if (!SUPPORTED_LANGUAGES.includes(lang)) return;\n if (this.#language() === lang && !this.#customMessages()) return; // no-op if same and not in custom mode\n // User chọn 'vi'/'en' rõ ràng -> clear custom mode (override custom provider)\n this.#customMessages.set(null);\n try {\n localStorage.setItem(I18N_STORAGE_KEY, lang);\n } catch {\n /* ignore */\n }\n this.#language.set(lang);\n if (opts.reload && typeof window !== 'undefined') {\n window.location.reload();\n }\n }\n\n t(key: string, params?: I18nParams): string {\n // Đọc từ computed `messages()` để hỗ trợ cả custom catalog lẫn built-in lang.\n const raw = this.messages()[key] ?? this.#fallback(key);\n return this.#interpolate(raw, params);\n }\n\n #fallback(key: string): string {\n const vi = I18N_MESSAGES.vi[key];\n if (vi !== undefined) {\n this.#warnOnce(`[I18n] Missing key in ${this.#language()}: ${key} (fallback to vi)`);\n return vi;\n }\n this.#warnOnce(`[I18n] Missing key: ${key}`);\n return key;\n }\n\n #interpolate(raw: string, params?: I18nParams): string {\n if (!params) return raw;\n return raw.replace(/\\{(\\w+)\\}/g, (m, name) => (name in params ? String(params[name]) : m));\n }\n\n #warnOnce(msg: string): void {\n if (this.#warned.has(msg)) return;\n this.#warned.add(msg);\n console.warn(msg);\n }\n\n #resolveInitial(): Language {\n // 1) localStorage (only 'vi'/'en' supported there) — luôn ưu tiên cao nhất\n try {\n const stored = localStorage.getItem(I18N_STORAGE_KEY) as Language | null;\n if (stored && SUPPORTED_LANGUAGES.includes(stored)) return stored;\n } catch {\n /* ignore */\n }\n\n const configured = this.#config?.language;\n\n // 2) function — custom language provider (sync only)\n if (typeof configured === 'function') {\n this.#loadCustom(configured);\n return 'vi'; // language() vẫn báo 'vi' trong custom mode; messages() ưu tiên #customMessages\n }\n\n // 3) string — built-in lang\n if (configured && SUPPORTED_LANGUAGES.includes(configured as Language)) return configured as Language;\n\n // 4) default\n return 'vi';\n }\n\n #loadCustom(fn: () => Record<string, string>): void {\n try {\n const catalog = fn();\n this.#customMessages.set(catalog);\n } catch (err) {\n console.warn('[I18n] Custom language fn threw:', err);\n }\n }\n}\n","import { inject, Pipe, PipeTransform } from '@angular/core';\nimport { I18nService } from './i18n.service';\nimport { I18nParams } from './i18n.types';\n\n@Pipe({ name: 'translate', standalone: true })\nexport class TranslatePipe implements PipeTransform {\n readonly #i18n = inject(I18nService);\n\n transform(key: string, params?: I18nParams): string {\n return this.#i18n.t(key, params);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sdcorejs-angular-i18n.mjs","sources":["../../../projects/sdcorejs-angular/i18n/src/i18n.token.ts","../../../projects/sdcorejs-angular/i18n/src/en.ts","../../../projects/sdcorejs-angular/i18n/src/ja.ts","../../../projects/sdcorejs-angular/i18n/src/ko.ts","../../../projects/sdcorejs-angular/i18n/src/vi.ts","../../../projects/sdcorejs-angular/i18n/src/zh.ts","../../../projects/sdcorejs-angular/i18n/src/i18n.messages.ts","../../../projects/sdcorejs-angular/i18n/src/i18n.service.ts","../../../projects/sdcorejs-angular/i18n/src/i18n.pipe.ts","../../../projects/sdcorejs-angular/i18n/sdcorejs-angular-i18n.ts"],"sourcesContent":["export const I18N_STORAGE_KEY = 'sd-core.language';\n","export const EN_MESSAGES = {\n 'core.common.cancel': 'Cancel',\n 'core.common.close': 'Close',\n 'core.common.reload': 'Reload page',\n 'core.test.greet': 'Hello {name}',\n\n // ---- Validators (VALIDATION_PATTERNS in @sdcorejs/utils/constants) ----\n 'core.validator.email.name': 'Email',\n 'core.validator.email.error': 'Invalid email',\n 'core.validator.phone.name': 'Phone',\n 'core.validator.phone.error': 'Invalid phone number',\n // Legacy aliases — pattern.model.ts cũ vẫn dùng các key này (phone-vn / cccd / id-vn)\n 'core.validator.phone-vn.name': 'VN phone',\n 'core.validator.phone-vn.error': 'Invalid Vietnamese phone number',\n 'core.validator.cccd.name': 'National ID',\n 'core.validator.cccd.error': 'Invalid national ID (12 digits)',\n 'core.validator.id-vn.name': 'National ID / Passport',\n 'core.validator.id-vn.error': 'Invalid national ID or passport',\n 'core.validator.vn-phone.name': 'VN phone',\n 'core.validator.vn-phone.error': 'Invalid Vietnamese phone number',\n 'core.validator.vn-id.name': 'National ID',\n 'core.validator.vn-id.error': 'Invalid national ID (12 digits)',\n 'core.validator.passport.name': 'Passport',\n 'core.validator.passport.error': 'Invalid passport (1 letter + 7 digits)',\n 'core.validator.vn-id-or-passport.name': 'National ID / Passport',\n 'core.validator.vn-id-or-passport.error': 'Invalid national ID or passport',\n 'core.validator.time.name': 'Time',\n 'core.validator.time.error': 'Invalid time (format HH:mm)',\n 'core.validator.url.name': 'URL',\n 'core.validator.url.error': 'Invalid URL',\n 'core.validator.domain.name': 'Domain',\n 'core.validator.domain.error': 'Invalid domain',\n 'core.validator.ipv4.name': 'IPv4',\n 'core.validator.ipv4.error': 'Invalid IPv4 address',\n 'core.validator.ipv6.name': 'IPv6',\n 'core.validator.ipv6.error': 'Invalid IPv6 address',\n 'core.validator.image-url.name': 'Image URL',\n 'core.validator.image-url.error': 'Invalid image URL',\n 'core.validator.slug.name': 'Slug',\n 'core.validator.slug.error': 'Invalid slug',\n 'core.validator.number.name': 'Number',\n 'core.validator.number.error': 'Invalid number',\n 'core.validator.integer.name': 'Integer',\n 'core.validator.integer.error': 'Invalid integer',\n 'core.validator.decimal.name': 'Decimal',\n 'core.validator.decimal.error': 'Invalid decimal number',\n 'core.validator.positive-number.name': 'Positive number',\n 'core.validator.positive-number.error': 'Must be a positive number',\n 'core.validator.uuid.name': 'UUID',\n 'core.validator.uuid.error': 'Invalid UUID',\n 'core.validator.code-16.name': '16-char code',\n 'core.validator.code-16.error': 'Invalid 16-character code',\n 'core.validator.code-32.name': '32-char code',\n 'core.validator.code-32.error': 'Invalid 32-character code',\n 'core.validator.hex-color.name': 'Hex color',\n 'core.validator.hex-color.error': 'Invalid hex color',\n 'core.validator.base64.name': 'Base64',\n 'core.validator.base64.error': 'Invalid Base64 string',\n\n // ---- Operators (operator.model.ts) ----\n 'core.operator.equal.display': 'Equal',\n 'core.operator.not-equal.display': 'Not equal',\n 'core.operator.greater-than.display': 'Greater than',\n 'core.operator.less-than.display': 'Less than',\n 'core.operator.greater-or-equal.display': 'Greater than or equal',\n 'core.operator.less-or-equal.display': 'Less than or equal',\n 'core.operator.contain.display': 'Contains',\n 'core.operator.not-contain.display': 'Does not contain',\n 'core.operator.start-with.display': 'Starts with',\n 'core.operator.not-start-with.display': 'Does not start with',\n 'core.operator.end-with.display': 'Ends with',\n 'core.operator.not-end-with.display': 'Does not end with',\n 'core.operator.in.display': 'In',\n 'core.operator.not-in.display': 'Not in',\n 'core.operator.between.display': 'Between',\n 'core.operator.null.display': 'Is empty',\n 'core.operator.not-null.display': 'Is not empty',\n\n // ---- Global error handler ----\n 'core.handler.global-error.update-title': 'A NEW SYSTEM UPDATE IS AVAILABLE',\n 'core.handler.global-error.update-body':\n 'The current version is outdated and could not load resources.\\nPlease press OK to reload the page.',\n\n // ---- Interceptor: no-internet ----\n 'core.interceptor.no-internet.offline': 'No network connection. Waiting for connection...',\n 'core.interceptor.no-internet.cors-error': 'Cannot connect to server (CORS or configuration error).',\n 'core.interceptor.no-internet.maintenance': 'Server is under maintenance. Please try again later.',\n 'core.interceptor.no-internet.restored': 'Connection restored.',\n\n // ---- Service: excel ----\n 'core.excel.cannot-read-file': 'Could not read file content',\n 'core.excel.no-sheet': 'Excel file has no data sheet',\n\n // ---- Service: docx ----\n 'core.docx.invalid-format': 'Invalid format. Please select a template in DOC or DOCX format',\n 'core.docx.size-exceeded': 'Template file size exceeds the supported limit. Please try again',\n 'core.docx.convert-error': 'An error occurred while converting the DOCX file',\n\n // ---- Service: notify (toast) ----\n 'core.notify.type.success': 'Success',\n 'core.notify.type.info': 'Information',\n 'core.notify.type.warning': 'Warning',\n 'core.notify.type.error': 'Error',\n 'core.notify.show-more': 'Show more ({count})',\n 'core.notify.show-less': 'Show less',\n\n // ---- Service: confirm ----\n 'core.confirm.title': 'Confirm',\n 'core.confirm.yes': 'OK',\n 'core.confirm.no': 'Cancel',\n 'core.confirm.yes-short': 'Yes',\n 'core.confirm.no-short': 'No',\n\n // ---- Directive: hover-copy ----\n 'core.directive.hover-copy.tooltip': 'Copy',\n\n // ---- Forms: input ----\n 'core.form.input.required': 'Please enter information',\n 'core.form.input.maxlength': 'Maximum characters: {max}',\n 'core.form.input.invalid-pattern': 'Invalid format',\n 'core.form.input.exceeded': 'Exceeded maximum characters',\n 'core.form.input.mask-incomplete': 'The value is incomplete',\n 'core.form.input.mask-invalid': 'The value contains invalid characters',\n\n // ---- Forms: autocomplete ----\n 'core.form.autocomplete.required': 'Please enter information',\n\n // ---- Forms: chip ----\n 'core.form.chip.required': 'Please enter information',\n 'core.form.chip.minlength': 'Please enter at least {min} values',\n 'core.form.chip.maxlength': 'Please enter at most {max} values',\n\n // ---- Forms: chip-calendar ----\n 'core.form.chip-calendar.required': 'Please enter information',\n 'core.form.chip-calendar.minlength': 'Please enter at least {min} values',\n 'core.form.chip-calendar.maxlength': 'Please enter at most {max} values',\n\n // ---- Forms: date ----\n 'core.form.date.required': 'Please enter information',\n 'core.form.date.min-date': 'Minimum date: {date}',\n 'core.form.date.max-date': 'Maximum date: {date}',\n 'core.form.date.parse-error': 'Parse error: {text}',\n 'core.form.date.invalid-format': 'Invalid format',\n\n // ---- Forms: date-range ----\n 'core.form.date-range.required': 'Please enter information',\n 'core.form.date-range.invalid-min': 'Start date is invalid (below limit)',\n 'core.form.date-range.invalid-max': 'End date is invalid (above limit)',\n 'core.form.date-range.from': 'From',\n 'core.form.date-range.to': 'to',\n\n // ---- Forms: datetime ----\n 'core.form.datetime.required': 'Please enter information',\n 'core.form.datetime.min-date': 'Minimum date: {date}',\n 'core.form.datetime.max-date': 'Maximum date: {date}',\n 'core.form.datetime.invalid-format': 'Invalid format',\n 'core.form.datetime.now': 'Now',\n 'core.form.datetime.confirm': 'Confirm',\n\n // ---- Forms: entity-picker / tree-select ----\n 'core.form.entity-picker.placeholder': 'Select an entity',\n 'core.form.entity-picker.modal-title': 'Select entity',\n 'core.form.entity-picker.value': 'Value',\n 'core.form.entity-picker.clear': 'Clear selection',\n 'core.form.entity-picker.add': 'Add',\n 'core.form.entity-picker.cancel': 'Cancel',\n 'core.form.entity-picker.apply': 'Apply',\n 'core.form.tree-select.placeholder': 'Select a tree item',\n 'core.form.tree-select.modal-title': 'Select tree item',\n 'core.form.tree-select.clear': 'Clear selection',\n 'core.form.tree-select.search': 'Search tree',\n 'core.form.tree-select.cancel': 'Cancel',\n 'core.form.tree-select.apply': 'Apply',\n 'core.component.tree.retry': 'Retry',\n 'core.service.unsaved-changes.message': 'You have unsaved changes. Discard them and continue?',\n 'core.component.job-progress.status.idle': 'Ready',\n 'core.component.job-progress.status.queued': 'Queued',\n 'core.component.job-progress.status.running': 'In progress',\n 'core.component.job-progress.status.succeeded': 'Completed',\n 'core.component.job-progress.status.failed': 'Failed',\n 'core.component.job-progress.status.cancelled': 'Cancelled',\n 'core.component.job-progress.cancel': 'Cancel',\n 'core.component.job-progress.retry': 'Retry',\n 'core.component.audit-diff.label': 'Audit changes',\n 'core.component.audit-diff.field': 'Field',\n 'core.component.audit-diff.before': 'Before',\n 'core.component.audit-diff.after': 'After',\n 'core.component.audit-diff.empty': 'No changes',\n 'core.component.audit-diff.kind.added': 'Added',\n 'core.component.audit-diff.kind.removed': 'Removed',\n 'core.component.audit-diff.kind.changed': 'Changed',\n 'core.component.audit-diff.kind.unchanged': 'Unchanged',\n 'core.component.audit-diff.value.label': 'Value',\n 'core.component.audit-diff.value.not-set': 'Not set',\n 'core.component.audit-diff.value.undefined': 'Undefined',\n 'core.component.audit-diff.value.null': 'Null',\n 'core.component.audit-diff.value.true': 'Yes',\n 'core.component.audit-diff.value.false': 'No',\n\n // ---- Forms: time ----\n 'core.form.time.required': 'Please enter a time',\n 'core.form.time.invalid': 'Enter a valid time in HH:mm format',\n 'core.form.time.min': 'Time must not be earlier than {min}',\n 'core.form.time.max': 'Time must not be later than {max}',\n 'core.form.time.step': 'Time must align to a {step}-minute interval',\n 'core.form.time.open-picker': 'Open time picker',\n 'core.form.time.confirm': 'Confirm',\n 'core.form.time.clear': 'Clear time',\n\n // ---- Forms: time-range ----\n 'core.form.time-range.required': 'Please enter both start and end times',\n 'core.form.time-range.incomplete': 'Enter both times or enable an open-ended range',\n 'core.form.time-range.range': 'Start time must not be later than end time',\n 'core.form.time-range.invalid': 'Enter valid times in HH:mm format',\n 'core.form.time-range.min': 'Times must not be earlier than {min}',\n 'core.form.time-range.max': 'Times must not be later than {max}',\n 'core.form.time-range.step': 'Times must align to a {step}-minute interval',\n 'core.form.time-range.from': 'From',\n 'core.form.time-range.to': 'To',\n 'core.form.time-range.clear': 'Clear time range',\n\n // ---- Forms: time-spinner ----\n 'core.form.time-spinner.hour': 'Hour',\n 'core.form.time-spinner.minute': 'Minute',\n 'core.form.time-spinner.second': 'Second',\n 'core.form.time-spinner.increase-hour': 'Increase hour',\n 'core.form.time-spinner.decrease-hour': 'Decrease hour',\n 'core.form.time-spinner.increase-minute': 'Increase minute',\n 'core.form.time-spinner.decrease-minute': 'Decrease minute',\n 'core.form.time-spinner.increase-second': 'Increase second',\n 'core.form.time-spinner.decrease-second': 'Decrease second',\n\n // ---- Forms: input-number ----\n 'core.form.input-number.required': 'Please enter information',\n 'core.form.input-number.min': 'Value must not be less than {min}',\n 'core.form.input-number.max': 'Value must not be greater than {max}',\n\n // ---- Forms: radio ----\n 'core.form.radio.required': 'Please enter information',\n\n // ---- Forms: switch ----\n 'core.form.switch.on': 'On',\n 'core.form.switch.off': 'Off',\n\n // ---- Forms: checkbox ----\n 'core.form.checkbox.checked': 'Yes',\n 'core.form.checkbox.unchecked': 'No',\n\n // ---- Forms: select ----\n 'core.form.select.required': 'Please enter information',\n\n // ---- Forms: textarea ----\n 'core.form.textarea.required': 'Please enter information',\n 'core.form.textarea.maxlength': 'Maximum characters: {max}',\n 'core.form.textarea.invalid-pattern': 'Invalid format',\n 'core.form.textarea.exceeded': 'Exceeded maximum characters',\n\n // ---- Component: editor ----\n 'core.component.editor.required': 'Please enter content',\n 'core.component.editor.maxlength': 'Maximum characters: {max}',\n 'core.component.editor.image.invalid-format': 'File format \".{format}\" is not allowed. Allowed formats: {allowed}',\n 'core.component.editor.image.size-exceeded': 'File size {sizeMB}MB exceeds the limit of {maxSizeMB}MB',\n 'core.component.editor.image.min-width': 'Image width {width}px is below the minimum of {min}px',\n 'core.component.editor.image.min-height': 'Image height {height}px is below the minimum of {min}px',\n 'core.component.editor.image.max-width': 'Image width {width}px exceeds the limit of {max}px',\n 'core.component.editor.image.max-height': 'Image height {height}px exceeds the limit of {max}px',\n 'core.component.editor.image.max-per-selection': 'You can select at most {max} images per selection',\n\n // ---- Component: document-builder ----\n 'core.component.document-builder.page-number.current': 'Current page number',\n 'core.component.document-builder.page-number.total': 'Total pages',\n 'core.component.document-builder.ck-comment.label': 'Comment',\n 'core.component.document-builder.ck-comment.text-too-long': 'Text too long ({length} characters). Maximum {max} characters.',\n 'core.component.document-builder.variable.not-allowed': 'Adding variable to the text is not allowed',\n 'core.component.document-builder.variable.invalid-data': 'Invalid variable data',\n\n // ---- Component: form-builder ----\n 'core.component.form-builder.field-key': 'Field key',\n 'core.component.form-builder.display': 'Display',\n 'core.component.form-builder.general': 'General',\n 'core.component.form-builder.visible-when': 'Visible when',\n 'core.component.form-builder.required': 'Required',\n 'core.component.form-builder.label': 'Label',\n 'core.component.form-builder.disabled': 'Disabled',\n 'core.component.form-builder.disabled-when': 'Disabled when',\n 'core.component.form-builder.hidden-when': 'Hidden when',\n 'core.component.form-builder.validation': 'Validation',\n 'core.component.form-builder.required-when': 'Required when',\n 'core.component.form-builder.confirm': 'Confirm',\n 'core.component.form-builder.delete': 'Delete',\n 'core.component.form-builder.save': 'Save',\n 'core.component.form-builder.hint': 'Hint',\n 'core.component.form-builder.parameter': 'Parameters',\n 'core.component.form-builder.add-field': 'Add field',\n 'core.component.form-builder.data': 'Data',\n 'core.component.form-builder.query-condition': 'Query condition',\n 'core.component.form-builder.set-query-value': 'Set query value',\n 'core.component.form-builder.value-source-field': 'Source field',\n 'core.component.form-builder.assign-parameter': 'Assign parameter',\n 'core.component.form-builder.template-data': 'Template data',\n 'core.component.form-builder.set-expression': 'Set expression',\n 'core.component.form-builder.condition-group': 'Condition group',\n 'core.component.form-builder.condition': 'Condition',\n 'core.component.form-builder.layout': 'Layout',\n 'core.component.form-builder.maxlength': 'Maximum characters',\n 'core.component.form-builder.assign-parameter-value': 'Assign parameter value',\n 'core.component.form-builder.parameter-name': 'Parameter name',\n 'core.component.form-builder.parameter-value': 'Parameter value',\n 'core.component.form-builder.assign-value': 'Assign value',\n 'core.component.form-builder.add-data': 'Add data',\n 'core.component.form-builder.data-api': 'API data',\n 'core.component.form-builder.data-static': 'Static data',\n 'core.component.form-builder.set-on-change-assign': 'Set value-on-change',\n 'core.component.form-builder.target-field': 'Target field',\n 'core.component.form-builder.target-value': 'Target value',\n 'core.component.form-builder.column-data': 'Column data',\n 'core.component.form-builder.add-column': 'Add column',\n 'core.component.form-builder.column-config': 'Column config',\n 'core.component.form-builder.column-name': 'Column name',\n 'core.component.form-builder.width': 'Width',\n 'core.component.form-builder.data-type': 'Data type',\n 'core.component.form-builder.show-when-true': 'Show when TRUE',\n 'core.component.form-builder.show-when-false': 'Show when FALSE',\n 'core.component.form-builder.column-list': 'Column list',\n 'core.component.form-builder.yes-no': 'Yes/No',\n 'core.component.form-builder.config-validation-error-warning': 'Configure validation error/warning',\n 'core.component.form-builder.message-type': 'Message type',\n 'core.component.form-builder.message-display': 'Display message',\n 'core.component.form-builder.condition-expression': 'Condition expression',\n 'core.component.form-builder.add-validation': 'Add validation',\n 'core.component.form-builder.expression': 'Expression',\n 'core.component.form-builder.available-methods': 'Available methods',\n 'core.component.form-builder.format': 'Format',\n 'core.component.form-builder.time': 'Time',\n 'core.component.form-builder.content': 'Content',\n 'core.component.form-builder.min': 'Minimum',\n 'core.component.form-builder.max': 'Maximum',\n 'core.component.form-builder.vertical': 'Vertical',\n 'core.component.form-builder.multiple': 'Multiple selection',\n 'core.component.form-builder.default-value': 'Default value',\n 'core.component.form-builder.type': 'Type',\n 'core.component.form-builder.file': 'File',\n 'core.component.form-builder.image': 'Image',\n 'core.component.form-builder.max-files': 'Max files/images',\n 'core.component.form-builder.size-mb': 'Size (MB)',\n 'core.component.form-builder.format-example': 'Format (e.g. png,jpg ...)',\n 'core.component.form-builder.source-mobile': 'Source (mobile)',\n 'core.component.form-builder.config-variable': 'Configure variables',\n 'core.component.form-builder.config-validation-warning-error': 'Configure validation warning/error',\n 'core.component.form-builder.back-to-design': 'Back to design',\n 'core.component.form-builder.preview': 'Preview',\n 'core.component.form-builder.drag-vertically': 'Drag up/down',\n 'core.component.form-builder.unset-readonly': 'Remove read-only',\n 'core.component.form-builder.set-readonly': 'Read-only',\n 'core.component.form-builder.duplicate': 'Duplicate',\n 'core.component.form-builder.show': 'Show',\n 'core.component.form-builder.hide': 'Hide',\n 'core.component.form-builder.flex': 'Flex',\n 'core.component.form-builder.display-label': 'Display label',\n 'core.component.form-builder.attribute': 'Attribute',\n 'core.component.form-builder.add-variable': 'Add variable',\n 'core.component.form-builder.add-new': 'Add new',\n 'core.component.form-builder.detail': 'Details',\n 'core.component.form-builder.create-update': 'Create/update',\n 'core.component.form-builder.default': 'Default',\n 'core.component.form-builder.show-more': 'Show more',\n 'core.component.form-builder.show-less': 'Show less',\n 'core.component.inform.show-more': 'Show more',\n 'core.component.inform.show-less': 'Show less',\n 'core.component.data-state.loading.title': 'Loading',\n 'core.component.data-state.loading.message': 'Please wait while the data is being loaded.',\n 'core.component.data-state.empty.title': 'No data',\n 'core.component.data-state.empty.message': 'There is no data to display yet.',\n 'core.component.data-state.error.title': 'Unable to load data',\n 'core.component.data-state.error.message': 'An error occurred. Please try again.',\n 'core.component.data-state.forbidden.title': 'Access denied',\n 'core.component.data-state.forbidden.message': 'You do not have permission to view this content.',\n 'core.component.data-state.retry': 'Try again',\n 'core.component.form-builder.row-overflow': 'Cannot move to this row because the total size exceeds 12 columns',\n 'core.component.form-builder.upload-source.all': 'All',\n 'core.component.form-builder.upload-source.photo-library': 'Pick from library',\n 'core.component.form-builder.upload-source.capture': 'Take photo',\n // Form-builder UI v2 (M3 redesign)\n 'core.component.form-builder.components': 'Components',\n 'core.component.form-builder.search-components': 'Search components…',\n 'core.component.form-builder.view-json': 'View JSON',\n 'core.component.form-builder.design': 'Design',\n 'core.component.form-builder.preview-runtime': 'Preview · Runtime',\n 'core.component.form-builder.cancel': 'Cancel',\n 'core.component.form-builder.submit': 'Submit',\n 'core.component.form-builder.empty-title': 'Drag components here to start',\n 'core.component.form-builder.empty-hint': 'Build your form by dragging fields from the left panel, or press',\n 'core.component.form-builder.conditional': 'Conditional',\n 'core.component.form-builder.group-drop-here': 'Drop a field here to add it to this group',\n 'core.component.form-builder.edit-group': 'Edit group',\n 'core.component.form-builder.group-empty-hint': 'Click Details to add fields to this group',\n 'core.component.form-builder.hidden': 'Hidden',\n 'core.component.form-builder.read-only': 'Read only',\n 'core.component.form-builder.untitled': 'Untitled',\n 'core.component.form-builder.no-selection-title': 'Nothing selected',\n 'core.component.form-builder.no-selection-hint': 'Select a component on the canvas to edit its attributes.',\n 'core.component.form-builder.group-children': 'Children',\n 'core.component.form-builder.group-icon': 'Icon',\n 'core.component.form-builder.group-accent-color': 'Accent color',\n 'core.component.form-builder.group-no-children': 'No fields yet. Add or drag fields into this group.',\n 'core.component.form-builder.break': 'Break',\n\n // ---- Component: code-editor ----\n 'core.component.code-editor.copied': 'Copied!',\n 'core.component.code-editor.copy': 'Copy code',\n\n // ---- Component: history ----\n 'core.component.history.by': 'By',\n\n // ---- Component: import-excel ----\n 'core.component.import-excel.title': 'Import Excel data',\n 'core.component.import-excel.see-all': 'See all',\n 'core.component.import-excel.valid-rows': 'Valid rows',\n 'core.component.import-excel.error-rows': 'Error rows',\n 'core.component.import-excel.warning-rows': 'Warning rows',\n 'core.component.import-excel.valid-data': 'Valid data',\n 'core.component.import-excel.download-template-tooltip': 'Click to download template',\n 'core.component.import-excel.upload': 'Upload',\n 'core.component.import-excel.download': 'Download',\n 'core.component.import-excel.confirm-save': 'Confirm & Save',\n 'core.component.import-excel.status': 'Status',\n 'core.component.import-excel.no-data-upload': 'No data uploaded',\n 'core.component.import-excel.click-here-template': 'Click here to download template',\n 'core.component.import-excel.no-data-in-file': 'File has no data',\n 'core.component.import-excel.row-limit': 'Upload limit is {limit} rows',\n 'core.component.import-excel.required': 'Required data',\n 'core.component.import-excel.min-length': 'Minimum string length: {min}',\n 'core.component.import-excel.max-length': 'Maximum string length: {max}',\n 'core.component.import-excel.not-a-number': '{value} is not a valid number',\n 'core.component.import-excel.below-min': '{value} is below the minimum value: {min}',\n 'core.component.import-excel.above-max': '{value} is above the maximum value: {max}',\n 'core.component.import-excel.invalid-bool': 'Please enter a valid value (true, false, 1, 0)',\n 'core.component.import-excel.invalid-value': 'Value {value} is invalid',\n 'core.component.import-excel.value-not-in-list': 'Value {value} is not in the allowed list [{list}]',\n 'core.component.import-excel.invalid-date-format': 'Date {value} does not match format {format}',\n 'core.component.import-excel.generic-error': 'An error occurred',\n 'core.component.import-excel.notify-title': 'Notification',\n 'core.component.import-excel.message-column': 'Message',\n 'core.component.import-excel.success': 'Success',\n\n // ---- Component: preview-image ----\n 'core.component.preview-image.no-image': 'No image information',\n 'core.component.preview-image.title': 'Preview image',\n 'core.component.preview-image.no-image-hint': 'There are no images to display',\n 'core.component.preview-image.load-error': 'Failed to load image',\n 'core.component.preview-image.load-error-hint': 'The image may have been deleted or the path is invalid',\n 'core.component.preview-image.retry': 'Retry',\n 'core.component.preview-image.close': 'Close',\n 'core.component.preview-image.prev': 'Previous image',\n 'core.component.preview-image.next': 'Next image',\n 'core.component.preview-image.zoom-in': 'Zoom in',\n 'core.component.preview-image.zoom-out': 'Zoom out',\n 'core.component.preview-image.fit': 'Fit to screen',\n 'core.component.preview-image.rotate': 'Rotate',\n 'core.component.preview-image.download': 'Download',\n 'core.component.preview-image.fullscreen': 'Fullscreen',\n 'core.component.preview-image.loading': 'Loading image...',\n 'core.component.preview-image.kbd-hint-nav': 'navigate',\n 'core.component.preview-image.kbd-hint-close': 'close',\n\n // ---- Component: preview-pdf ----\n 'core.component.preview-pdf.title': 'Preview document',\n 'core.component.preview-pdf.close': 'Close',\n 'core.component.preview-pdf.pages-count': '{count} pages',\n 'core.component.preview-pdf.tab.thumbnails': 'Pages',\n 'core.component.preview-pdf.tab.outline': 'Outline',\n 'core.component.preview-pdf.tab.search': 'Find',\n 'core.component.preview-pdf.first-page': 'First page',\n 'core.component.preview-pdf.prev-page': 'Previous page',\n 'core.component.preview-pdf.next-page': 'Next page',\n 'core.component.preview-pdf.last-page': 'Last page',\n 'core.component.preview-pdf.zoom-in': 'Zoom in',\n 'core.component.preview-pdf.zoom-out': 'Zoom out',\n 'core.component.preview-pdf.fit-page': 'Fit page',\n 'core.component.preview-pdf.fit-width': 'Fit width',\n 'core.component.preview-pdf.actual-size': 'Actual size',\n 'core.component.preview-pdf.rotate': 'Rotate',\n 'core.component.preview-pdf.scroll-page': 'Single page',\n 'core.component.preview-pdf.scroll-continuous': 'Continuous scroll',\n 'core.component.preview-pdf.print': 'Print',\n 'core.component.preview-pdf.download': 'Download',\n 'core.component.preview-pdf.fullscreen': 'Fullscreen',\n 'core.component.preview-pdf.toggle-sidebar': 'Toggle sidebar',\n 'core.component.preview-pdf.page-of': 'page {current} / {total}',\n 'core.component.preview-pdf.empty.title': 'No document',\n 'core.component.preview-pdf.empty.subtitle': 'No PDF file to display yet',\n 'core.component.preview-pdf.loading': 'Loading document...',\n 'core.component.preview-pdf.loading.page': 'Processing page {current} / {total}',\n 'core.component.preview-pdf.error.invalid.title': 'Failed to load document',\n 'core.component.preview-pdf.error.invalid.body': 'The PDF file may be corrupted. Please check the file.',\n 'core.component.preview-pdf.error.password.title': 'Document is protected',\n 'core.component.preview-pdf.error.password.body': 'This PDF file requires a password to open.',\n 'core.component.preview-pdf.error.network.title': 'Cannot connect',\n 'core.component.preview-pdf.error.network.body': 'Unable to load the file from the server. Please try again later.',\n 'core.component.preview-pdf.error.unknown.title': 'An error occurred',\n 'core.component.preview-pdf.error.unknown.body': 'Please retry or download the original file to view it.',\n 'core.component.preview-pdf.error.retry': 'Retry',\n 'core.component.preview-pdf.error.download-raw': 'Download original',\n 'core.component.preview-pdf.search': 'Search',\n 'core.component.preview-pdf.search-placeholder': 'Search in document...',\n 'core.component.preview-pdf.search-case': 'Match case',\n 'core.component.preview-pdf.search-whole': 'Whole word',\n 'core.component.preview-pdf.search-no-results': 'No results',\n 'core.component.preview-pdf.search-results-count': '{count} results for \"{term}\"',\n 'core.component.preview-pdf.search-truncated': 'Showing the first {count} matches. Refine your search to see fewer results.',\n 'core.component.preview-pdf.search-prev': 'Previous match',\n 'core.component.preview-pdf.search-next': 'Next match',\n 'core.component.preview-pdf.search-close': 'Close search',\n\n // ---- Component: table ----\n 'core.component.table.setup': 'Table setup',\n 'core.component.table.column-header': 'Column header',\n 'core.component.table.width': 'Width',\n 'core.component.table.fixed': 'Fixed',\n 'core.component.table.char-limit': 'Character limit',\n 'core.component.table.skip': 'Skip',\n 'core.component.table.apply': 'Apply',\n 'core.component.table.filter': 'Filter',\n 'core.component.table.clear-selection': 'Clear selection',\n 'core.component.table.customize': 'Customize',\n 'core.component.table.search': 'Search',\n 'core.component.table.reload': 'Reload',\n 'core.component.table.setup-short': 'Setup',\n 'core.component.table.no-results': 'No results found',\n 'core.component.table.no-results-hint': 'Please search or filter with different criteria',\n 'core.component.table.choose-filter-hint': 'Please choose a filter to start',\n 'core.component.table.no-data': 'No data',\n 'core.component.table.export-excel': 'Export Excel',\n 'core.component.table.exporting': 'Exporting...{percent}%',\n 'core.component.table.export': 'Export',\n 'core.component.table.export-csv': 'Export CSV',\n 'core.component.table.showing': 'Showing:',\n 'core.component.table.paginator.first-page': 'First page',\n 'core.component.table.paginator.last-page': 'Last page',\n 'core.component.table.paginator.items-per-page': 'Showing',\n 'core.component.table.paginator.next-page': 'Next page',\n 'core.component.table.paginator.previous-page': 'Previous page',\n 'core.component.table.error-occurred': 'An error occurred',\n 'core.component.table.not-an-array': 'Data is not an array',\n 'core.component.table.config.confirm-reset': 'Confirm reset all settings to defaults',\n 'core.component.table.popup-export.select-columns': 'Please select columns to export',\n 'core.component.table.selector-action.default-msg': 'items selected',\n 'core.component.tab-router.too-many-tabs': 'You have opened too many tabs.',\n\n // ---- Component: upload-file ----\n 'core.component.upload-file.upload': 'Upload file',\n 'core.component.upload-file.error-occurred': 'An error occurred',\n 'core.component.upload-file.please-upload': 'Please upload a file/image',\n 'core.component.upload-file.desc-format-and-size': 'Format: {exts} and up to: {maxSize}MB',\n 'core.component.upload-file.desc-format': 'Format: {exts}',\n 'core.component.upload-file.desc-max-size': 'Up to: {maxSize}MB',\n 'core.component.upload-file.not-image': '[{name}] Uploaded file is not an image',\n 'core.component.upload-file.invalid-format': '[{name}] Uploaded file has invalid format: {exts}',\n 'core.component.upload-file.size-exceeded': '[{name}] Max file size: {maxSize} MB',\n 'core.component.upload-file.upload-failed': 'An error occurred during file upload',\n 'core.component.upload-file.too-many-files': 'You selected too many files. Please check the count',\n 'core.component.upload-file.confirm-delete-message': 'Do you want to delete this file? This action cannot be undone',\n 'core.component.upload-file.confirm-delete-title': 'Confirm delete?',\n 'core.component.upload-file.confirm-yes': 'Confirm',\n 'core.component.upload-file.confirm-no': 'Cancel',\n 'core.component.upload-file.no-configuration': 'Please inject SD_UPLOAD_FILE_CONFIGURATION or pass [upload] directly into the component',\n 'core.component.upload-file.no-configuration-key':\n \"No upload configuration found for key='{key}'. Please check providers or pass [upload] directly\",\n 'core.component.upload-file.preview-title': 'Preview image',\n\n // ---- Module: layout (sidebar / user menu) ----\n 'core.module.layout.user.change-password': 'Change password',\n 'core.module.layout.user.logout': 'Sign out',\n 'core.module.layout.user.update-profile': 'Update profile',\n 'core.module.layout.user.setting': 'Settings',\n 'core.module.layout.user.notification': 'Notifications',\n 'core.module.layout.sidebar.search': 'Search',\n 'core.module.layout.sidebar.toggle': 'Toggle sidebar',\n\n // ---- Module: layout (greeting + weekday) ----\n 'core.module.layout.greeting.hello': 'Hello, {name}',\n 'core.module.layout.weekday.0': 'Sunday',\n 'core.module.layout.weekday.1': 'Monday',\n 'core.module.layout.weekday.2': 'Tuesday',\n 'core.module.layout.weekday.3': 'Wednesday',\n 'core.module.layout.weekday.4': 'Thursday',\n 'core.module.layout.weekday.5': 'Friday',\n 'core.module.layout.weekday.6': 'Saturday',\n 'core.module.layout.today-info.format': '{weekday}, {date}',\n\n // ---- Module: layout (forbidden page) ----\n 'core.module.layout.forbidden.title': 'Access denied',\n 'core.module.layout.forbidden.message':\n \"You don't have permission to access this page. Please contact your administrator or go back to the home page\",\n 'core.module.layout.forbidden.back-home': 'Back to home',\n\n // ---- Module: layout (not-found page) ----\n 'core.module.layout.not-found.title': '404 - Page not found',\n 'core.module.layout.not-found.message':\n \"The page you're looking for doesn't exist or has been removed. Please check the URL or go back to the home page to continue.\",\n 'core.module.layout.not-found.back': 'Go back',\n\n // ---- Module: layout (home page) ----\n 'core.module.layout.home.tab-name': 'Home',\n 'core.module.layout.not-found.tab-name': 'Page Not Found',\n 'core.module.layout.forbidden.tab-name': 'Access Denied',\n 'core.module.layout.home.feature.data': 'Data',\n 'core.module.layout.home.feature.reports': 'Reports',\n 'core.module.layout.home.feature.users': 'Users',\n 'core.module.layout.home.feature.workflow': 'Workflow',\n 'core.module.layout.home.feature.audit': 'Audit',\n 'core.module.layout.home.feature.integration': 'Integration',\n\n // ---- Module: layout (mock fallback when SD_LAYOUT_CONFIGURATION is not provided) ----\n 'core.module.layout.mock.user.full-name': 'Demo User',\n\n // ---- Module: generic (generic-select) ----\n 'core.module.generic.generic-select.detail-link': 'details',\n} as const;\n","import type { EN_MESSAGES } from './en';\n\nexport const JA_MESSAGES: Record<keyof typeof EN_MESSAGES, string> = {\n 'core.common.cancel': 'キャンセル',\n 'core.common.close': '閉じる',\n 'core.common.reload': 'ページを再読み込み',\n 'core.test.greet': 'こんにちは {name}さん',\n\n // ---- Validators (VALIDATION_PATTERNS in @sdcorejs/utils/constants) ----\n 'core.validator.email.name': 'メールアドレス',\n 'core.validator.email.error': 'メールアドレスの形式が正しくありません',\n 'core.validator.phone.name': '電話番号',\n 'core.validator.phone.error': '電話番号の形式が正しくありません',\n // Legacy aliases\n 'core.validator.phone-vn.name': 'VN電話番号',\n 'core.validator.phone-vn.error': 'ベトナムの電話番号の形式が正しくありません',\n 'core.validator.cccd.name': '個人番号',\n 'core.validator.cccd.error': '個人番号の形式が正しくありません(12桁)',\n 'core.validator.id-vn.name': '個人番号 / パスポート',\n 'core.validator.id-vn.error': '個人番号またはパスポート番号の形式が正しくありません',\n 'core.validator.vn-phone.name': 'VN電話番号',\n 'core.validator.vn-phone.error': 'ベトナムの電話番号の形式が正しくありません',\n 'core.validator.vn-id.name': '個人番号',\n 'core.validator.vn-id.error': '個人番号の形式が正しくありません(12桁)',\n 'core.validator.passport.name': 'パスポート',\n 'core.validator.passport.error': 'パスポート番号の形式が正しくありません(英字1文字 + 数字7桁)',\n 'core.validator.vn-id-or-passport.name': '個人番号 / パスポート',\n 'core.validator.vn-id-or-passport.error': '個人番号またはパスポート番号の形式が正しくありません',\n 'core.validator.time.name': '時刻',\n 'core.validator.time.error': '時刻の形式が正しくありません(HH:mm 形式)',\n 'core.validator.url.name': 'URL',\n 'core.validator.url.error': 'URLの形式が正しくありません',\n 'core.validator.domain.name': 'ドメイン',\n 'core.validator.domain.error': 'ドメインの形式が正しくありません',\n 'core.validator.ipv4.name': 'IPv4',\n 'core.validator.ipv4.error': 'IPv4アドレスの形式が正しくありません',\n 'core.validator.ipv6.name': 'IPv6',\n 'core.validator.ipv6.error': 'IPv6アドレスの形式が正しくありません',\n 'core.validator.image-url.name': '画像URL',\n 'core.validator.image-url.error': '画像URLの形式が正しくありません',\n 'core.validator.slug.name': 'スラッグ',\n 'core.validator.slug.error': 'スラッグの形式が正しくありません',\n 'core.validator.number.name': '数値',\n 'core.validator.number.error': '数値の形式が正しくありません',\n 'core.validator.integer.name': '整数',\n 'core.validator.integer.error': '整数の形式が正しくありません',\n 'core.validator.decimal.name': '小数',\n 'core.validator.decimal.error': '小数の形式が正しくありません',\n 'core.validator.positive-number.name': '正の数',\n 'core.validator.positive-number.error': '正の数を入力してください',\n 'core.validator.uuid.name': 'UUID',\n 'core.validator.uuid.error': 'UUIDの形式が正しくありません',\n 'core.validator.code-16.name': '16文字コード',\n 'core.validator.code-16.error': '16文字コードの形式が正しくありません',\n 'core.validator.code-32.name': '32文字コード',\n 'core.validator.code-32.error': '32文字コードの形式が正しくありません',\n 'core.validator.hex-color.name': 'HEXカラー',\n 'core.validator.hex-color.error': 'HEXカラーの形式が正しくありません',\n 'core.validator.base64.name': 'Base64',\n 'core.validator.base64.error': 'Base64文字列の形式が正しくありません',\n\n // ---- Operators (operator.model.ts) ----\n 'core.operator.equal.display': '等しい',\n 'core.operator.not-equal.display': '等しくない',\n 'core.operator.greater-than.display': 'より大きい',\n 'core.operator.less-than.display': 'より小さい',\n 'core.operator.greater-or-equal.display': '以上',\n 'core.operator.less-or-equal.display': '以下',\n 'core.operator.contain.display': '含む',\n 'core.operator.not-contain.display': '含まない',\n 'core.operator.start-with.display': 'で始まる',\n 'core.operator.not-start-with.display': 'で始まらない',\n 'core.operator.end-with.display': 'で終わる',\n 'core.operator.not-end-with.display': 'で終わらない',\n 'core.operator.in.display': 'いずれかに一致',\n 'core.operator.not-in.display': 'いずれにも一致しない',\n 'core.operator.between.display': '範囲内',\n 'core.operator.null.display': '空である',\n 'core.operator.not-null.display': '空でない',\n\n // ---- Global error handler ----\n 'core.handler.global-error.update-title': '新しいシステムアップデートがあります',\n 'core.handler.global-error.update-body':\n '現在のバージョンが古いため、リソースを読み込めませんでした。\\nOKを押してページを再読み込みしてください。',\n\n // ---- Interceptor: no-internet ----\n 'core.interceptor.no-internet.offline': 'ネットワーク接続がありません。接続を待機中...',\n 'core.interceptor.no-internet.cors-error': 'サーバーに接続できません(CORSまたは設定エラー)。',\n 'core.interceptor.no-internet.maintenance': 'サーバーはメンテナンス中です。しばらくしてから再度お試しください。',\n 'core.interceptor.no-internet.restored': '接続が復旧しました。',\n\n // ---- Service: excel ----\n 'core.excel.cannot-read-file': 'ファイルの内容を読み取れませんでした',\n 'core.excel.no-sheet': 'Excelファイルにデータシートがありません',\n\n // ---- Service: docx ----\n 'core.docx.invalid-format': '形式が正しくありません。DOCまたはDOCX形式のテンプレートを選択してください',\n 'core.docx.size-exceeded': 'テンプレートファイルのサイズが上限を超えています。もう一度お試しください',\n 'core.docx.convert-error': 'DOCXファイルの変換中にエラーが発生しました',\n\n // ---- Service: notify (toast) ----\n 'core.notify.type.success': '成功',\n 'core.notify.type.info': '情報',\n 'core.notify.type.warning': '警告',\n 'core.notify.type.error': 'エラー',\n 'core.notify.show-more': 'もっと見る ({count})',\n 'core.notify.show-less': '折りたたむ',\n\n // ---- Service: confirm ----\n 'core.confirm.title': '確認',\n 'core.confirm.yes': 'OK',\n 'core.confirm.no': 'キャンセル',\n 'core.confirm.yes-short': 'はい',\n 'core.confirm.no-short': 'いいえ',\n\n // ---- Directive: hover-copy ----\n 'core.directive.hover-copy.tooltip': 'コピー',\n\n // ---- Forms: input ----\n 'core.form.input.required': '入力してください',\n 'core.form.input.maxlength': '最大文字数: {max}',\n 'core.form.input.invalid-pattern': '形式が正しくありません',\n 'core.form.input.exceeded': '最大文字数を超えています',\n 'core.form.input.mask-incomplete': '値が未完成です',\n 'core.form.input.mask-invalid': '使用できない文字が含まれています',\n\n // ---- Forms: autocomplete ----\n 'core.form.autocomplete.required': '入力してください',\n\n // ---- Forms: chip ----\n 'core.form.chip.required': '入力してください',\n 'core.form.chip.minlength': '{min}件以上入力してください',\n 'core.form.chip.maxlength': '{max}件以内で入力してください',\n\n // ---- Forms: chip-calendar ----\n 'core.form.chip-calendar.required': '入力してください',\n 'core.form.chip-calendar.minlength': '{min}件以上入力してください',\n 'core.form.chip-calendar.maxlength': '{max}件以内で入力してください',\n\n // ---- Forms: date ----\n 'core.form.date.required': '入力してください',\n 'core.form.date.min-date': '最小日付: {date}',\n 'core.form.date.max-date': '最大日付: {date}',\n 'core.form.date.parse-error': '解析エラー: {text}',\n 'core.form.date.invalid-format': '形式が正しくありません',\n\n // ---- Forms: date-range ----\n 'core.form.date-range.required': '入力してください',\n 'core.form.date-range.invalid-min': '開始日が無効です(下限を下回っています)',\n 'core.form.date-range.invalid-max': '終了日が無効です(上限を超えています)',\n 'core.form.date-range.from': '開始',\n 'core.form.date-range.to': '~',\n\n // ---- Forms: datetime ----\n 'core.form.datetime.required': '入力してください',\n 'core.form.datetime.min-date': '最小日付: {date}',\n 'core.form.datetime.max-date': '最大日付: {date}',\n 'core.form.datetime.invalid-format': '形式が正しくありません',\n 'core.form.datetime.now': '現在',\n 'core.form.datetime.confirm': '確定',\n\n // ---- Forms: entity-picker / tree-select ----\n 'core.form.entity-picker.placeholder': 'エンティティを選択',\n 'core.form.entity-picker.modal-title': 'エンティティを選択',\n 'core.form.entity-picker.value': '値',\n 'core.form.entity-picker.clear': '選択をクリア',\n 'core.form.entity-picker.add': '追加',\n 'core.form.entity-picker.cancel': 'キャンセル',\n 'core.form.entity-picker.apply': '適用',\n 'core.form.tree-select.placeholder': 'ツリー項目を選択',\n 'core.form.tree-select.modal-title': 'ツリー項目を選択',\n 'core.form.tree-select.clear': '選択をクリア',\n 'core.form.tree-select.search': 'ツリーを検索',\n 'core.form.tree-select.cancel': 'キャンセル',\n 'core.form.tree-select.apply': '適用',\n 'core.component.tree.retry': '再試行',\n 'core.service.unsaved-changes.message': '未保存の変更があります。破棄して続行しますか?',\n 'core.component.job-progress.status.idle': '準備完了',\n 'core.component.job-progress.status.queued': '待機中',\n 'core.component.job-progress.status.running': '処理中',\n 'core.component.job-progress.status.succeeded': '完了',\n 'core.component.job-progress.status.failed': '失敗',\n 'core.component.job-progress.status.cancelled': 'キャンセル済み',\n 'core.component.job-progress.cancel': 'キャンセル',\n 'core.component.job-progress.retry': '再試行',\n 'core.component.audit-diff.label': '監査変更',\n 'core.component.audit-diff.field': '項目',\n 'core.component.audit-diff.before': '変更前',\n 'core.component.audit-diff.after': '変更後',\n 'core.component.audit-diff.empty': '変更はありません',\n 'core.component.audit-diff.kind.added': '追加',\n 'core.component.audit-diff.kind.removed': '削除',\n 'core.component.audit-diff.kind.changed': '変更',\n 'core.component.audit-diff.kind.unchanged': '未変更',\n 'core.component.audit-diff.value.label': '値',\n 'core.component.audit-diff.value.not-set': '未設定',\n 'core.component.audit-diff.value.undefined': '未定義',\n 'core.component.audit-diff.value.null': 'Null',\n 'core.component.audit-diff.value.true': 'はい',\n 'core.component.audit-diff.value.false': 'いいえ',\n\n // ---- Forms: time ----\n 'core.form.time.required': '時刻を入力してください',\n 'core.form.time.invalid': 'HH:mm形式の有効な時刻を入力してください',\n 'core.form.time.min': '時刻は{min}以降にしてください',\n 'core.form.time.max': '時刻は{max}以前にしてください',\n 'core.form.time.step': '時刻は{step}分間隔で入力してください',\n 'core.form.time.open-picker': '時刻選択を開く',\n 'core.form.time.confirm': '確定',\n 'core.form.time.clear': '時刻をクリア',\n\n // ---- Forms: time-range ----\n 'core.form.time-range.required': '開始時刻と終了時刻を入力してください',\n 'core.form.time-range.incomplete': '両方の時刻を入力するか、オープン範囲を有効にしてください',\n 'core.form.time-range.range': '開始時刻は終了時刻以前にしてください',\n 'core.form.time-range.invalid': 'HH:mm形式の有効な時刻を入力してください',\n 'core.form.time-range.min': '時刻は{min}以降にしてください',\n 'core.form.time-range.max': '時刻は{max}以前にしてください',\n 'core.form.time-range.step': '時刻は{step}分間隔で入力してください',\n 'core.form.time-range.from': '開始',\n 'core.form.time-range.to': '終了',\n 'core.form.time-range.clear': '時間範囲をクリア',\n\n // ---- Forms: time-spinner ----\n 'core.form.time-spinner.hour': '時',\n 'core.form.time-spinner.minute': '分',\n 'core.form.time-spinner.second': '秒',\n 'core.form.time-spinner.increase-hour': '時を増やす',\n 'core.form.time-spinner.decrease-hour': '時を減らす',\n 'core.form.time-spinner.increase-minute': '分を増やす',\n 'core.form.time-spinner.decrease-minute': '分を減らす',\n 'core.form.time-spinner.increase-second': '秒を増やす',\n 'core.form.time-spinner.decrease-second': '秒を減らす',\n\n // ---- Forms: input-number ----\n 'core.form.input-number.required': '入力してください',\n 'core.form.input-number.min': '{min}以上の値を入力してください',\n 'core.form.input-number.max': '{max}以下の値を入力してください',\n\n // ---- Forms: radio ----\n 'core.form.radio.required': '選択してください',\n\n // ---- Forms: switch ----\n 'core.form.switch.on': 'オン',\n 'core.form.switch.off': 'オフ',\n\n // ---- Forms: checkbox ----\n 'core.form.checkbox.checked': 'はい',\n 'core.form.checkbox.unchecked': 'いいえ',\n\n // ---- Forms: select ----\n 'core.form.select.required': '選択してください',\n\n // ---- Forms: textarea ----\n 'core.form.textarea.required': '入力してください',\n 'core.form.textarea.maxlength': '最大文字数: {max}',\n 'core.form.textarea.invalid-pattern': '形式が正しくありません',\n 'core.form.textarea.exceeded': '最大文字数を超えています',\n\n // ---- Component: editor ----\n 'core.component.editor.required': '内容を入力してください',\n 'core.component.editor.maxlength': '最大文字数: {max}',\n 'core.component.editor.image.invalid-format': 'ファイル形式 \".{format}\" は許可されていません。許可される形式: {allowed}',\n 'core.component.editor.image.size-exceeded': 'ファイルサイズ {sizeMB}MB は上限の {maxSizeMB}MB を超えています',\n 'core.component.editor.image.min-width': '画像の幅 {width}px は最小値 {min}px を下回っています',\n 'core.component.editor.image.min-height': '画像の高さ {height}px は最小値 {min}px を下回っています',\n 'core.component.editor.image.max-width': '画像の幅 {width}px は上限 {max}px を超えています',\n 'core.component.editor.image.max-height': '画像の高さ {height}px は上限 {max}px を超えています',\n 'core.component.editor.image.max-per-selection': '一度に選択できる画像は最大{max}枚です',\n\n // ---- Component: document-builder ----\n 'core.component.document-builder.page-number.current': '現在のページ番号',\n 'core.component.document-builder.page-number.total': '総ページ数',\n 'core.component.document-builder.ck-comment.label': 'コメント',\n 'core.component.document-builder.ck-comment.text-too-long': 'テキストが長すぎます({length}文字)。最大{max}文字です。',\n 'core.component.document-builder.variable.not-allowed': 'テキストへの変数の追加は許可されていません',\n 'core.component.document-builder.variable.invalid-data': '変数データが正しくありません',\n\n // ---- Component: form-builder ----\n 'core.component.form-builder.field-key': 'フィールドキー',\n 'core.component.form-builder.display': '表示',\n 'core.component.form-builder.general': '一般',\n 'core.component.form-builder.visible-when': '表示条件',\n 'core.component.form-builder.required': '必須',\n 'core.component.form-builder.label': 'ラベル',\n 'core.component.form-builder.disabled': '無効',\n 'core.component.form-builder.disabled-when': '無効化条件',\n 'core.component.form-builder.hidden-when': '非表示条件',\n 'core.component.form-builder.validation': 'バリデーション',\n 'core.component.form-builder.required-when': '必須条件',\n 'core.component.form-builder.confirm': '確認',\n 'core.component.form-builder.delete': '削除',\n 'core.component.form-builder.save': '保存',\n 'core.component.form-builder.hint': 'ヒント',\n 'core.component.form-builder.parameter': 'パラメータ',\n 'core.component.form-builder.add-field': 'フィールドを追加',\n 'core.component.form-builder.data': 'データ',\n 'core.component.form-builder.query-condition': 'クエリ条件',\n 'core.component.form-builder.set-query-value': 'クエリ値を設定',\n 'core.component.form-builder.value-source-field': 'ソースフィールド',\n 'core.component.form-builder.assign-parameter': 'パラメータを割り当て',\n 'core.component.form-builder.template-data': 'テンプレートデータ',\n 'core.component.form-builder.set-expression': '式を設定',\n 'core.component.form-builder.condition-group': '条件グループ',\n 'core.component.form-builder.condition': '条件',\n 'core.component.form-builder.layout': 'レイアウト',\n 'core.component.form-builder.maxlength': '最大文字数',\n 'core.component.form-builder.assign-parameter-value': 'パラメータ値を割り当て',\n 'core.component.form-builder.parameter-name': 'パラメータ名',\n 'core.component.form-builder.parameter-value': 'パラメータ値',\n 'core.component.form-builder.assign-value': '値を割り当て',\n 'core.component.form-builder.add-data': 'データを追加',\n 'core.component.form-builder.data-api': 'APIデータ',\n 'core.component.form-builder.data-static': '静的データ',\n 'core.component.form-builder.set-on-change-assign': '変更時の割り当てを設定',\n 'core.component.form-builder.target-field': '対象フィールド',\n 'core.component.form-builder.target-value': '対象値',\n 'core.component.form-builder.column-data': '列データ',\n 'core.component.form-builder.add-column': '列を追加',\n 'core.component.form-builder.column-config': '列設定',\n 'core.component.form-builder.column-name': '列名',\n 'core.component.form-builder.width': '幅',\n 'core.component.form-builder.data-type': 'データ型',\n 'core.component.form-builder.show-when-true': 'TRUEのとき表示',\n 'core.component.form-builder.show-when-false': 'FALSEのとき表示',\n 'core.component.form-builder.column-list': '列一覧',\n 'core.component.form-builder.yes-no': 'はい/いいえ',\n 'core.component.form-builder.config-validation-error-warning': 'エラー/警告のバリデーションを設定',\n 'core.component.form-builder.message-type': 'メッセージ種別',\n 'core.component.form-builder.message-display': '表示メッセージ',\n 'core.component.form-builder.condition-expression': '条件式',\n 'core.component.form-builder.add-validation': 'バリデーションを追加',\n 'core.component.form-builder.expression': '式',\n 'core.component.form-builder.available-methods': '利用可能なメソッド',\n 'core.component.form-builder.format': 'フォーマット',\n 'core.component.form-builder.time': '時刻',\n 'core.component.form-builder.content': '内容',\n 'core.component.form-builder.min': '最小',\n 'core.component.form-builder.max': '最大',\n 'core.component.form-builder.vertical': '縦',\n 'core.component.form-builder.multiple': '複数選択',\n 'core.component.form-builder.default-value': 'デフォルト値',\n 'core.component.form-builder.type': '種別',\n 'core.component.form-builder.file': 'ファイル',\n 'core.component.form-builder.image': '画像',\n 'core.component.form-builder.max-files': 'ファイル/画像の最大数',\n 'core.component.form-builder.size-mb': 'サイズ (MB)',\n 'core.component.form-builder.format-example': 'フォーマット (例: png,jpg ...)',\n 'core.component.form-builder.source-mobile': 'ソース (モバイル)',\n 'core.component.form-builder.config-variable': '変数を設定',\n 'core.component.form-builder.config-validation-warning-error': '警告/エラーのバリデーションを設定',\n 'core.component.form-builder.back-to-design': 'デザインに戻る',\n 'core.component.form-builder.preview': 'プレビュー',\n 'core.component.form-builder.drag-vertically': '上下にドラッグ',\n 'core.component.form-builder.unset-readonly': '読み取り専用を解除',\n 'core.component.form-builder.set-readonly': '読み取り専用',\n 'core.component.form-builder.duplicate': '複製',\n 'core.component.form-builder.show': '表示',\n 'core.component.form-builder.hide': '非表示',\n 'core.component.form-builder.flex': 'フレックス',\n 'core.component.form-builder.display-label': '表示ラベル',\n 'core.component.form-builder.attribute': '属性',\n 'core.component.form-builder.add-variable': '変数を追加',\n 'core.component.form-builder.add-new': '新規追加',\n 'core.component.form-builder.detail': '詳細',\n 'core.component.form-builder.create-update': '作成/更新',\n 'core.component.form-builder.default': 'デフォルト',\n 'core.component.form-builder.show-more': 'もっと見る',\n 'core.component.form-builder.show-less': '折りたたむ',\n 'core.component.inform.show-more': 'もっと見る',\n 'core.component.inform.show-less': '折りたたむ',\n 'core.component.data-state.loading.title': '読み込み中',\n 'core.component.data-state.loading.message': 'データを読み込んでいます。しばらくお待ちください。',\n 'core.component.data-state.empty.title': 'データがありません',\n 'core.component.data-state.empty.message': '表示するデータはまだありません。',\n 'core.component.data-state.error.title': 'データを読み込めません',\n 'core.component.data-state.error.message': 'エラーが発生しました。もう一度お試しください。',\n 'core.component.data-state.forbidden.title': 'アクセスが拒否されました',\n 'core.component.data-state.forbidden.message': 'このコンテンツを表示する権限がありません。',\n 'core.component.data-state.retry': '再試行',\n 'core.component.form-builder.row-overflow': '合計サイズが12列を超えるため、この行に移動できません',\n 'core.component.form-builder.upload-source.all': 'すべて',\n 'core.component.form-builder.upload-source.photo-library': 'ライブラリから選択',\n 'core.component.form-builder.upload-source.capture': '写真を撮影',\n // Form-builder UI v2 (M3 redesign)\n 'core.component.form-builder.components': 'コンポーネント',\n 'core.component.form-builder.search-components': 'コンポーネントを検索…',\n 'core.component.form-builder.view-json': 'JSONを表示',\n 'core.component.form-builder.design': 'デザイン',\n 'core.component.form-builder.preview-runtime': 'プレビュー · ランタイム',\n 'core.component.form-builder.cancel': 'キャンセル',\n 'core.component.form-builder.submit': '送信',\n 'core.component.form-builder.empty-title': 'コンポーネントをここにドラッグして開始',\n 'core.component.form-builder.empty-hint': '左パネルからフィールドをドラッグしてフォームを構築するか、次を押します:',\n 'core.component.form-builder.conditional': '条件付き',\n 'core.component.form-builder.group-drop-here': 'フィールドをここにドロップしてグループに追加',\n 'core.component.form-builder.edit-group': 'グループを編集',\n 'core.component.form-builder.group-empty-hint': '「詳細」をクリックしてフィールドを追加',\n 'core.component.form-builder.hidden': '非表示',\n 'core.component.form-builder.read-only': '読み取り専用',\n 'core.component.form-builder.untitled': '無題',\n 'core.component.form-builder.no-selection-title': '選択なし',\n 'core.component.form-builder.no-selection-hint': 'キャンバスでコンポーネントを選択して属性を編集します。',\n 'core.component.form-builder.group-children': '子要素',\n 'core.component.form-builder.group-icon': 'アイコン',\n 'core.component.form-builder.group-accent-color': 'アクセントカラー',\n 'core.component.form-builder.group-no-children': 'フィールドがまだありません。このグループにフィールドを追加またはドラッグしてください。',\n 'core.component.form-builder.break': '改行',\n\n // ---- Component: code-editor ----\n 'core.component.code-editor.copied': 'コピーしました!',\n 'core.component.code-editor.copy': 'コードをコピー',\n\n // ---- Component: history ----\n 'core.component.history.by': '実行者',\n\n // ---- Component: import-excel ----\n 'core.component.import-excel.title': 'Excelデータをインポート',\n 'core.component.import-excel.see-all': 'すべて表示',\n 'core.component.import-excel.valid-rows': '有効な行数',\n 'core.component.import-excel.error-rows': 'エラー行数',\n 'core.component.import-excel.warning-rows': '警告行数',\n 'core.component.import-excel.valid-data': '有効なデータ',\n 'core.component.import-excel.download-template-tooltip': 'クリックしてテンプレートをダウンロード',\n 'core.component.import-excel.upload': 'アップロード',\n 'core.component.import-excel.download': 'ダウンロード',\n 'core.component.import-excel.confirm-save': '確認して保存',\n 'core.component.import-excel.status': 'ステータス',\n 'core.component.import-excel.no-data-upload': 'アップロードデータがありません',\n 'core.component.import-excel.click-here-template': 'ここをクリックしてテンプレートをダウンロード',\n 'core.component.import-excel.no-data-in-file': 'ファイルにデータがありません',\n 'core.component.import-excel.row-limit': 'アップロード上限は{limit}行です',\n 'core.component.import-excel.required': '必須データ',\n 'core.component.import-excel.min-length': '最小文字数: {min}',\n 'core.component.import-excel.max-length': '最大文字数: {max}',\n 'core.component.import-excel.not-a-number': '{value} は有効な数値ではありません',\n 'core.component.import-excel.below-min': '{value} は最小値 {min} を下回っています',\n 'core.component.import-excel.above-max': '{value} は最大値 {max} を超えています',\n 'core.component.import-excel.invalid-bool': '有効な値を入力してください (true, false, 1, 0)',\n 'core.component.import-excel.invalid-value': '値 {value} は正しくありません',\n 'core.component.import-excel.value-not-in-list': '値 {value} は許可されたリスト [{list}] に含まれていません',\n 'core.component.import-excel.invalid-date-format': '日付 {value} はフォーマット {format} と一致しません',\n 'core.component.import-excel.generic-error': 'エラーが発生しました',\n 'core.component.import-excel.notify-title': 'お知らせ',\n 'core.component.import-excel.message-column': 'メッセージ',\n 'core.component.import-excel.success': '成功',\n\n // ---- Component: preview-image ----\n 'core.component.preview-image.no-image': '画像情報がありません',\n 'core.component.preview-image.title': '画像プレビュー',\n 'core.component.preview-image.no-image-hint': '表示する画像がありません',\n 'core.component.preview-image.load-error': '画像を読み込めませんでした',\n 'core.component.preview-image.load-error-hint': '画像ファイルが削除されたか、パスが無効である可能性があります',\n 'core.component.preview-image.retry': '再試行',\n 'core.component.preview-image.close': '閉じる',\n 'core.component.preview-image.prev': '前の画像',\n 'core.component.preview-image.next': '次の画像',\n 'core.component.preview-image.zoom-in': '拡大',\n 'core.component.preview-image.zoom-out': '縮小',\n 'core.component.preview-image.fit': '画面に合わせる',\n 'core.component.preview-image.rotate': '回転',\n 'core.component.preview-image.download': 'ダウンロード',\n 'core.component.preview-image.fullscreen': '全画面表示',\n 'core.component.preview-image.loading': '画像を読み込み中...',\n 'core.component.preview-image.kbd-hint-nav': '画像切替',\n 'core.component.preview-image.kbd-hint-close': '閉じる',\n\n // ---- Component: preview-pdf ----\n 'core.component.preview-pdf.title': 'ドキュメントを表示',\n 'core.component.preview-pdf.close': '閉じる',\n 'core.component.preview-pdf.pages-count': '{count} ページ',\n 'core.component.preview-pdf.tab.thumbnails': 'ページ',\n 'core.component.preview-pdf.tab.outline': '目次',\n 'core.component.preview-pdf.tab.search': '検索',\n 'core.component.preview-pdf.first-page': '最初のページ',\n 'core.component.preview-pdf.prev-page': '前のページ',\n 'core.component.preview-pdf.next-page': '次のページ',\n 'core.component.preview-pdf.last-page': '最後のページ',\n 'core.component.preview-pdf.zoom-in': '拡大',\n 'core.component.preview-pdf.zoom-out': '縮小',\n 'core.component.preview-pdf.fit-page': 'ページに合わせる',\n 'core.component.preview-pdf.fit-width': '幅に合わせる',\n 'core.component.preview-pdf.actual-size': '実際のサイズ',\n 'core.component.preview-pdf.rotate': '回転',\n 'core.component.preview-pdf.scroll-page': '単ページ',\n 'core.component.preview-pdf.scroll-continuous': '連続スクロール',\n 'core.component.preview-pdf.print': '印刷',\n 'core.component.preview-pdf.download': 'ダウンロード',\n 'core.component.preview-pdf.fullscreen': '全画面',\n 'core.component.preview-pdf.toggle-sidebar': 'サイドバー表示切替',\n 'core.component.preview-pdf.page-of': '{current} / {total} ページ',\n 'core.component.preview-pdf.empty.title': 'ドキュメントがありません',\n 'core.component.preview-pdf.empty.subtitle': '表示する PDF ファイルがまだありません',\n 'core.component.preview-pdf.loading': 'ドキュメントを読み込み中...',\n 'core.component.preview-pdf.loading.page': 'ページ {current} / {total} を処理中',\n 'core.component.preview-pdf.error.invalid.title': 'ドキュメントを読み込めません',\n 'core.component.preview-pdf.error.invalid.body': 'PDF ファイルが破損している可能性があります。ファイルを確認してください。',\n 'core.component.preview-pdf.error.password.title': '保護されたドキュメント',\n 'core.component.preview-pdf.error.password.body': 'この PDF ファイルを開くにはパスワードが必要です。',\n 'core.component.preview-pdf.error.network.title': '接続できません',\n 'core.component.preview-pdf.error.network.body': 'サーバーからファイルを読み込めません。後でもう一度お試しください。',\n 'core.component.preview-pdf.error.unknown.title': 'エラーが発生しました',\n 'core.component.preview-pdf.error.unknown.body': 'もう一度試すか、元のファイルをダウンロードしてご覧ください。',\n 'core.component.preview-pdf.error.retry': '再試行',\n 'core.component.preview-pdf.error.download-raw': '元のファイルをダウンロード',\n 'core.component.preview-pdf.search': '検索',\n 'core.component.preview-pdf.search-placeholder': 'ドキュメント内を検索...',\n 'core.component.preview-pdf.search-case': '大文字小文字を区別',\n 'core.component.preview-pdf.search-whole': '単語単位で一致',\n 'core.component.preview-pdf.search-no-results': '見つかりません',\n 'core.component.preview-pdf.search-results-count': '「{term}」の検索結果 {count} 件',\n 'core.component.preview-pdf.search-truncated': '最初の {count} 件を表示しています。検索条件を絞り込んでください。',\n 'core.component.preview-pdf.search-prev': '前の結果',\n 'core.component.preview-pdf.search-next': '次の結果',\n 'core.component.preview-pdf.search-close': '検索を閉じる',\n\n // ---- Component: table ----\n 'core.component.table.setup': 'テーブル設定',\n 'core.component.table.column-header': '列ヘッダー',\n 'core.component.table.width': '幅',\n 'core.component.table.fixed': '固定',\n 'core.component.table.char-limit': '文字数制限',\n 'core.component.table.skip': 'スキップ',\n 'core.component.table.apply': '適用',\n 'core.component.table.filter': 'フィルター',\n 'core.component.table.clear-selection': '選択を解除',\n 'core.component.table.customize': 'カスタマイズ',\n 'core.component.table.search': '検索',\n 'core.component.table.reload': '再読み込み',\n 'core.component.table.setup-short': '設定',\n 'core.component.table.no-results': '一致する結果がありません',\n 'core.component.table.no-results-hint': '別の条件で検索またはフィルターしてください',\n 'core.component.table.choose-filter-hint': 'まずフィルターを選択してください',\n 'core.component.table.no-data': 'データがありません',\n 'core.component.table.export-excel': 'Excelエクスポート',\n 'core.component.table.exporting': 'エクスポート中...{percent}%',\n 'core.component.table.export': 'エクスポート',\n 'core.component.table.export-csv': 'CSVエクスポート',\n 'core.component.table.showing': '表示中:',\n 'core.component.table.paginator.first-page': '最初のページ',\n 'core.component.table.paginator.last-page': '最後のページ',\n 'core.component.table.paginator.items-per-page': '表示中',\n 'core.component.table.paginator.next-page': '次のページ',\n 'core.component.table.paginator.previous-page': '前のページ',\n 'core.component.table.error-occurred': 'エラーが発生しました',\n 'core.component.table.not-an-array': 'データが配列ではありません',\n 'core.component.table.config.confirm-reset': 'すべての設定をデフォルトに戻しますか',\n 'core.component.table.popup-export.select-columns': 'エクスポートする列を選択してください',\n 'core.component.table.selector-action.default-msg': '件選択中',\n 'core.component.tab-router.too-many-tabs': 'タブを開きすぎています。',\n\n // ---- Component: upload-file ----\n 'core.component.upload-file.upload': 'ファイルをアップロード',\n 'core.component.upload-file.error-occurred': 'エラーが発生しました',\n 'core.component.upload-file.please-upload': 'ファイル/画像をアップロードしてください',\n 'core.component.upload-file.desc-format-and-size': 'フォーマット: {exts}、最大: {maxSize}MB',\n 'core.component.upload-file.desc-format': 'フォーマット: {exts}',\n 'core.component.upload-file.desc-max-size': '最大: {maxSize}MB',\n 'core.component.upload-file.not-image': '[{name}] アップロードされたファイルは画像ではありません',\n 'core.component.upload-file.invalid-format': '[{name}] アップロードされたファイルの形式が正しくありません: {exts}',\n 'core.component.upload-file.size-exceeded': '[{name}] 最大ファイルサイズ: {maxSize} MB',\n 'core.component.upload-file.upload-failed': 'ファイルのアップロード中にエラーが発生しました',\n 'core.component.upload-file.too-many-files': 'ファイルの選択数が多すぎます。件数を確認してください',\n 'core.component.upload-file.confirm-delete-message': 'このファイルを削除しますか?この操作は取り消せません',\n 'core.component.upload-file.confirm-delete-title': '削除の確認',\n 'core.component.upload-file.confirm-yes': '確認',\n 'core.component.upload-file.confirm-no': 'キャンセル',\n 'core.component.upload-file.no-configuration':\n 'SD_UPLOAD_FILE_CONFIGURATION をインジェクトするか、コンポーネントに [upload] を直接渡してください',\n 'core.component.upload-file.no-configuration-key':\n \"key='{key}' に対応するアップロード設定が見つかりません。プロバイダーを確認するか [upload] を直接渡してください\",\n 'core.component.upload-file.preview-title': '画像プレビュー',\n\n // ---- Module: layout (sidebar / user menu) ----\n 'core.module.layout.user.change-password': 'パスワード変更',\n 'core.module.layout.user.logout': 'ログアウト',\n 'core.module.layout.user.update-profile': 'プロフィールを更新',\n 'core.module.layout.user.setting': '設定',\n 'core.module.layout.user.notification': '通知',\n 'core.module.layout.sidebar.search': '検索',\n 'core.module.layout.sidebar.toggle': 'サイドバーを切り替える',\n\n // ---- Module: layout (greeting + weekday) ----\n 'core.module.layout.greeting.hello': 'こんにちは、{name}さん',\n 'core.module.layout.weekday.0': '日曜日',\n 'core.module.layout.weekday.1': '月曜日',\n 'core.module.layout.weekday.2': '火曜日',\n 'core.module.layout.weekday.3': '水曜日',\n 'core.module.layout.weekday.4': '木曜日',\n 'core.module.layout.weekday.5': '金曜日',\n 'core.module.layout.weekday.6': '土曜日',\n 'core.module.layout.today-info.format': '{weekday}、{date}',\n\n // ---- Module: layout (forbidden page) ----\n 'core.module.layout.forbidden.title': 'アクセスが拒否されました',\n 'core.module.layout.forbidden.message':\n 'このページにアクセスする権限がありません。管理者にお問い合わせいただくか、ホームページに戻ってください',\n 'core.module.layout.forbidden.back-home': 'ホームに戻る',\n\n // ---- Module: layout (not-found page) ----\n 'core.module.layout.not-found.title': '404 - ページが見つかりません',\n 'core.module.layout.not-found.message':\n 'お探しのページは存在しないか、削除されました。URLを確認するか、ホームページに戻って続行してください。',\n 'core.module.layout.not-found.back': '戻る',\n\n // ---- Module: layout (home page) ----\n 'core.module.layout.home.tab-name': 'ホーム',\n 'core.module.layout.not-found.tab-name': 'ページが見つかりません',\n 'core.module.layout.forbidden.tab-name': 'アクセス拒否',\n 'core.module.layout.home.feature.data': 'データ',\n 'core.module.layout.home.feature.reports': 'レポート',\n 'core.module.layout.home.feature.users': 'ユーザー',\n 'core.module.layout.home.feature.workflow': 'ワークフロー',\n 'core.module.layout.home.feature.audit': '監査',\n 'core.module.layout.home.feature.integration': '連携',\n\n // ---- Module: layout (mock fallback when SD_LAYOUT_CONFIGURATION is not provided) ----\n 'core.module.layout.mock.user.full-name': 'デモユーザー',\n\n // ---- Module: generic (generic-select) ----\n 'core.module.generic.generic-select.detail-link': '詳細',\n};\n","import type { EN_MESSAGES } from './en';\n\nexport const KO_MESSAGES: Record<keyof typeof EN_MESSAGES, string> = {\n 'core.common.cancel': '취소',\n 'core.common.close': '닫기',\n 'core.common.reload': '페이지 새로고침',\n 'core.test.greet': '안녕하세요 {name}님',\n\n // ---- Validators (VALIDATION_PATTERNS in @sdcorejs/utils/constants) ----\n 'core.validator.email.name': '이메일',\n 'core.validator.email.error': '올바르지 않은 이메일 형식입니다',\n 'core.validator.phone.name': '전화번호',\n 'core.validator.phone.error': '올바르지 않은 전화번호 형식입니다',\n // Legacy aliases\n 'core.validator.phone-vn.name': 'VN 전화번호',\n 'core.validator.phone-vn.error': '올바르지 않은 베트남 전화번호 형식입니다',\n 'core.validator.cccd.name': '주민번호',\n 'core.validator.cccd.error': '올바르지 않은 주민번호 형식입니다 (12자리)',\n 'core.validator.id-vn.name': '주민번호 / 여권',\n 'core.validator.id-vn.error': '올바르지 않은 주민번호 또는 여권번호입니다',\n 'core.validator.vn-phone.name': 'VN 전화번호',\n 'core.validator.vn-phone.error': '올바르지 않은 베트남 전화번호 형식입니다',\n 'core.validator.vn-id.name': '주민번호',\n 'core.validator.vn-id.error': '올바르지 않은 주민번호 형식입니다 (12자리)',\n 'core.validator.passport.name': '여권',\n 'core.validator.passport.error': '올바르지 않은 여권번호입니다 (영문 1자 + 숫자 7자리)',\n 'core.validator.vn-id-or-passport.name': '주민번호 / 여권',\n 'core.validator.vn-id-or-passport.error': '올바르지 않은 주민번호 또는 여권번호입니다',\n 'core.validator.time.name': '시간',\n 'core.validator.time.error': '올바르지 않은 시간 형식입니다 (HH:mm 형식)',\n 'core.validator.url.name': 'URL',\n 'core.validator.url.error': '올바르지 않은 URL 형식입니다',\n 'core.validator.domain.name': '도메인',\n 'core.validator.domain.error': '올바르지 않은 도메인 형식입니다',\n 'core.validator.ipv4.name': 'IPv4',\n 'core.validator.ipv4.error': '올바르지 않은 IPv4 주소입니다',\n 'core.validator.ipv6.name': 'IPv6',\n 'core.validator.ipv6.error': '올바르지 않은 IPv6 주소입니다',\n 'core.validator.image-url.name': '이미지 URL',\n 'core.validator.image-url.error': '올바르지 않은 이미지 URL입니다',\n 'core.validator.slug.name': '슬러그',\n 'core.validator.slug.error': '올바르지 않은 슬러그 형식입니다',\n 'core.validator.number.name': '숫자',\n 'core.validator.number.error': '올바르지 않은 숫자 형식입니다',\n 'core.validator.integer.name': '정수',\n 'core.validator.integer.error': '올바르지 않은 정수 형식입니다',\n 'core.validator.decimal.name': '소수',\n 'core.validator.decimal.error': '올바르지 않은 소수 형식입니다',\n 'core.validator.positive-number.name': '양수',\n 'core.validator.positive-number.error': '양수여야 합니다',\n 'core.validator.uuid.name': 'UUID',\n 'core.validator.uuid.error': '올바르지 않은 UUID 형식입니다',\n 'core.validator.code-16.name': '16자 코드',\n 'core.validator.code-16.error': '올바르지 않은 16자 코드입니다',\n 'core.validator.code-32.name': '32자 코드',\n 'core.validator.code-32.error': '올바르지 않은 32자 코드입니다',\n 'core.validator.hex-color.name': 'HEX 색상',\n 'core.validator.hex-color.error': '올바르지 않은 HEX 색상 형식입니다',\n 'core.validator.base64.name': 'Base64',\n 'core.validator.base64.error': '올바르지 않은 Base64 문자열입니다',\n\n // ---- Operators (operator.model.ts) ----\n 'core.operator.equal.display': '같음',\n 'core.operator.not-equal.display': '같지 않음',\n 'core.operator.greater-than.display': '초과',\n 'core.operator.less-than.display': '미만',\n 'core.operator.greater-or-equal.display': '이상',\n 'core.operator.less-or-equal.display': '이하',\n 'core.operator.contain.display': '포함',\n 'core.operator.not-contain.display': '포함하지 않음',\n 'core.operator.start-with.display': '~로 시작',\n 'core.operator.not-start-with.display': '~로 시작하지 않음',\n 'core.operator.end-with.display': '~로 끝',\n 'core.operator.not-end-with.display': '~로 끝나지 않음',\n 'core.operator.in.display': '~중 하나',\n 'core.operator.not-in.display': '~중 하나가 아님',\n 'core.operator.between.display': '범위 내',\n 'core.operator.null.display': '비어 있음',\n 'core.operator.not-null.display': '비어 있지 않음',\n\n // ---- Global error handler ----\n 'core.handler.global-error.update-title': '새로운 시스템 업데이트가 있습니다',\n 'core.handler.global-error.update-body': '현재 버전이 오래되어 리소스를 불러올 수 없습니다.\\n확인을 누르면 페이지가 새로고침됩니다.',\n\n // ---- Interceptor: no-internet ----\n 'core.interceptor.no-internet.offline': '네트워크 연결이 없습니다. 연결을 기다리는 중...',\n 'core.interceptor.no-internet.cors-error': '서버에 연결할 수 없습니다 (CORS 또는 설정 오류).',\n 'core.interceptor.no-internet.maintenance': '서버 점검 중입니다. 잠시 후 다시 시도해 주세요.',\n 'core.interceptor.no-internet.restored': '연결이 복구되었습니다.',\n\n // ---- Service: excel ----\n 'core.excel.cannot-read-file': '파일 내용을 읽을 수 없습니다',\n 'core.excel.no-sheet': 'Excel 파일에 데이터 시트가 없습니다',\n\n // ---- Service: docx ----\n 'core.docx.invalid-format': '형식이 올바르지 않습니다. DOC 또는 DOCX 형식의 템플릿을 선택해 주세요',\n 'core.docx.size-exceeded': '템플릿 파일 크기가 지원 한도를 초과했습니다. 다시 시도해 주세요',\n 'core.docx.convert-error': 'DOCX 파일 변환 중 오류가 발생했습니다',\n\n // ---- Service: notify (toast) ----\n 'core.notify.type.success': '성공',\n 'core.notify.type.info': '정보',\n 'core.notify.type.warning': '경고',\n 'core.notify.type.error': '오류',\n 'core.notify.show-more': '더 보기 ({count})',\n 'core.notify.show-less': '접기',\n\n // ---- Service: confirm ----\n 'core.confirm.title': '확인',\n 'core.confirm.yes': '확인',\n 'core.confirm.no': '취소',\n 'core.confirm.yes-short': '예',\n 'core.confirm.no-short': '아니오',\n\n // ---- Directive: hover-copy ----\n 'core.directive.hover-copy.tooltip': '복사',\n\n // ---- Forms: input ----\n 'core.form.input.required': '정보를 입력해 주세요',\n 'core.form.input.maxlength': '최대 글자수: {max}',\n 'core.form.input.invalid-pattern': '형식이 올바르지 않습니다',\n 'core.form.input.exceeded': '최대 글자수를 초과했습니다',\n 'core.form.input.mask-incomplete': '값이 완전하지 않습니다',\n 'core.form.input.mask-invalid': '허용되지 않는 문자가 포함되어 있습니다',\n\n // ---- Forms: autocomplete ----\n 'core.form.autocomplete.required': '정보를 입력해 주세요',\n\n // ---- Forms: chip ----\n 'core.form.chip.required': '정보를 입력해 주세요',\n 'core.form.chip.minlength': '최소 {min}개의 값을 입력해 주세요',\n 'core.form.chip.maxlength': '최대 {max}개의 값을 입력해 주세요',\n\n // ---- Forms: chip-calendar ----\n 'core.form.chip-calendar.required': '정보를 입력해 주세요',\n 'core.form.chip-calendar.minlength': '최소 {min}개의 값을 입력해 주세요',\n 'core.form.chip-calendar.maxlength': '최대 {max}개의 값을 입력해 주세요',\n\n // ---- Forms: date ----\n 'core.form.date.required': '정보를 입력해 주세요',\n 'core.form.date.min-date': '최소 날짜: {date}',\n 'core.form.date.max-date': '최대 날짜: {date}',\n 'core.form.date.parse-error': '구문 분석 오류: {text}',\n 'core.form.date.invalid-format': '형식이 올바르지 않습니다',\n\n // ---- Forms: date-range ----\n 'core.form.date-range.required': '정보를 입력해 주세요',\n 'core.form.date-range.invalid-min': '시작일이 올바르지 않습니다 (한도 미만)',\n 'core.form.date-range.invalid-max': '종료일이 올바르지 않습니다 (한도 초과)',\n 'core.form.date-range.from': '시작',\n 'core.form.date-range.to': '~',\n\n // ---- Forms: datetime ----\n 'core.form.datetime.required': '정보를 입력해 주세요',\n 'core.form.datetime.min-date': '최소 날짜: {date}',\n 'core.form.datetime.max-date': '최대 날짜: {date}',\n 'core.form.datetime.invalid-format': '형식이 올바르지 않습니다',\n 'core.form.datetime.now': '지금',\n 'core.form.datetime.confirm': '확인',\n\n // ---- Forms: entity-picker / tree-select ----\n 'core.form.entity-picker.placeholder': '엔터티 선택',\n 'core.form.entity-picker.modal-title': '엔터티 선택',\n 'core.form.entity-picker.value': '값',\n 'core.form.entity-picker.clear': '선택 지우기',\n 'core.form.entity-picker.add': '추가',\n 'core.form.entity-picker.cancel': '취소',\n 'core.form.entity-picker.apply': '적용',\n 'core.form.tree-select.placeholder': '트리 항목 선택',\n 'core.form.tree-select.modal-title': '트리 항목 선택',\n 'core.form.tree-select.clear': '선택 지우기',\n 'core.form.tree-select.search': '트리 검색',\n 'core.form.tree-select.cancel': '취소',\n 'core.form.tree-select.apply': '적용',\n 'core.component.tree.retry': '다시 시도',\n 'core.service.unsaved-changes.message': '저장하지 않은 변경 사항이 있습니다. 변경을 버리고 계속할까요?',\n 'core.component.job-progress.status.idle': '준비됨',\n 'core.component.job-progress.status.queued': '대기 중',\n 'core.component.job-progress.status.running': '진행 중',\n 'core.component.job-progress.status.succeeded': '완료됨',\n 'core.component.job-progress.status.failed': '실패',\n 'core.component.job-progress.status.cancelled': '취소됨',\n 'core.component.job-progress.cancel': '취소',\n 'core.component.job-progress.retry': '다시 시도',\n 'core.component.audit-diff.label': '감사 변경 사항',\n 'core.component.audit-diff.field': '필드',\n 'core.component.audit-diff.before': '변경 전',\n 'core.component.audit-diff.after': '변경 후',\n 'core.component.audit-diff.empty': '변경 사항 없음',\n 'core.component.audit-diff.kind.added': '추가됨',\n 'core.component.audit-diff.kind.removed': '삭제됨',\n 'core.component.audit-diff.kind.changed': '변경됨',\n 'core.component.audit-diff.kind.unchanged': '변경 없음',\n 'core.component.audit-diff.value.label': '값',\n 'core.component.audit-diff.value.not-set': '설정 안 됨',\n 'core.component.audit-diff.value.undefined': '정의되지 않음',\n 'core.component.audit-diff.value.null': 'Null',\n 'core.component.audit-diff.value.true': '예',\n 'core.component.audit-diff.value.false': '아니요',\n\n // ---- Forms: time ----\n 'core.form.time.required': '시간을 입력해 주세요',\n 'core.form.time.invalid': 'HH:mm 형식의 올바른 시간을 입력해 주세요',\n 'core.form.time.min': '시간은 {min}보다 빠를 수 없습니다',\n 'core.form.time.max': '시간은 {max}보다 늦을 수 없습니다',\n 'core.form.time.step': '시간은 {step}분 간격에 맞아야 합니다',\n 'core.form.time.open-picker': '시간 선택기 열기',\n 'core.form.time.confirm': '확인',\n 'core.form.time.clear': '시간 지우기',\n\n // ---- Forms: time-range ----\n 'core.form.time-range.required': '시작 시간과 종료 시간을 모두 입력해 주세요',\n 'core.form.time-range.incomplete': '두 시간을 모두 입력하거나 열린 범위를 활성화해 주세요',\n 'core.form.time-range.range': '시작 시간은 종료 시간보다 늦을 수 없습니다',\n 'core.form.time-range.invalid': 'HH:mm 형식의 올바른 시간을 입력해 주세요',\n 'core.form.time-range.min': '시간은 {min}보다 빠를 수 없습니다',\n 'core.form.time-range.max': '시간은 {max}보다 늦을 수 없습니다',\n 'core.form.time-range.step': '시간은 {step}분 간격에 맞아야 합니다',\n 'core.form.time-range.from': '시작',\n 'core.form.time-range.to': '종료',\n 'core.form.time-range.clear': '시간 범위 지우기',\n\n // ---- Forms: time-spinner ----\n 'core.form.time-spinner.hour': '시',\n 'core.form.time-spinner.minute': '분',\n 'core.form.time-spinner.second': '초',\n 'core.form.time-spinner.increase-hour': '시 증가',\n 'core.form.time-spinner.decrease-hour': '시 감소',\n 'core.form.time-spinner.increase-minute': '분 증가',\n 'core.form.time-spinner.decrease-minute': '분 감소',\n 'core.form.time-spinner.increase-second': '초 증가',\n 'core.form.time-spinner.decrease-second': '초 감소',\n\n // ---- Forms: input-number ----\n 'core.form.input-number.required': '정보를 입력해 주세요',\n 'core.form.input-number.min': '값은 {min} 이상이어야 합니다',\n 'core.form.input-number.max': '값은 {max} 이하여야 합니다',\n\n // ---- Forms: radio ----\n 'core.form.radio.required': '선택해 주세요',\n\n // ---- Forms: switch ----\n 'core.form.switch.on': '켜짐',\n 'core.form.switch.off': '꺼짐',\n\n // ---- Forms: checkbox ----\n 'core.form.checkbox.checked': '예',\n 'core.form.checkbox.unchecked': '아니오',\n\n // ---- Forms: select ----\n 'core.form.select.required': '선택해 주세요',\n\n // ---- Forms: textarea ----\n 'core.form.textarea.required': '정보를 입력해 주세요',\n 'core.form.textarea.maxlength': '최대 글자수: {max}',\n 'core.form.textarea.invalid-pattern': '형식이 올바르지 않습니다',\n 'core.form.textarea.exceeded': '최대 글자수를 초과했습니다',\n\n // ---- Component: editor ----\n 'core.component.editor.required': '내용을 입력해 주세요',\n 'core.component.editor.maxlength': '최대 글자수: {max}',\n 'core.component.editor.image.invalid-format': '파일 형식 \".{format}\" 은(는) 허용되지 않습니다. 허용 형식: {allowed}',\n 'core.component.editor.image.size-exceeded': '파일 크기 {sizeMB}MB가 한도 {maxSizeMB}MB를 초과합니다',\n 'core.component.editor.image.min-width': '이미지 너비 {width}px가 최소값 {min}px 미만입니다',\n 'core.component.editor.image.min-height': '이미지 높이 {height}px가 최소값 {min}px 미만입니다',\n 'core.component.editor.image.max-width': '이미지 너비 {width}px가 한도 {max}px를 초과합니다',\n 'core.component.editor.image.max-height': '이미지 높이 {height}px가 한도 {max}px를 초과합니다',\n 'core.component.editor.image.max-per-selection': '한 번에 최대 {max}장의 이미지를 선택할 수 있습니다',\n\n // ---- Component: document-builder ----\n 'core.component.document-builder.page-number.current': '현재 페이지 번호',\n 'core.component.document-builder.page-number.total': '전체 페이지 수',\n 'core.component.document-builder.ck-comment.label': '댓글',\n 'core.component.document-builder.ck-comment.text-too-long': '텍스트가 너무 깁니다 ({length}자). 최대 {max}자입니다.',\n 'core.component.document-builder.variable.not-allowed': '텍스트에 변수를 추가할 수 없습니다',\n 'core.component.document-builder.variable.invalid-data': '변수 데이터가 올바르지 않습니다',\n\n // ---- Component: form-builder ----\n 'core.component.form-builder.field-key': '필드 키',\n 'core.component.form-builder.display': '표시',\n 'core.component.form-builder.general': '일반',\n 'core.component.form-builder.visible-when': '표시 조건',\n 'core.component.form-builder.required': '필수',\n 'core.component.form-builder.label': '라벨',\n 'core.component.form-builder.disabled': '비활성',\n 'core.component.form-builder.disabled-when': '비활성 조건',\n 'core.component.form-builder.hidden-when': '숨김 조건',\n 'core.component.form-builder.validation': '유효성 검사',\n 'core.component.form-builder.required-when': '필수 조건',\n 'core.component.form-builder.confirm': '확인',\n 'core.component.form-builder.delete': '삭제',\n 'core.component.form-builder.save': '저장',\n 'core.component.form-builder.hint': '힌트',\n 'core.component.form-builder.parameter': '매개변수',\n 'core.component.form-builder.add-field': '필드 추가',\n 'core.component.form-builder.data': '데이터',\n 'core.component.form-builder.query-condition': '쿼리 조건',\n 'core.component.form-builder.set-query-value': '쿼리 값 설정',\n 'core.component.form-builder.value-source-field': '소스 필드',\n 'core.component.form-builder.assign-parameter': '매개변수 할당',\n 'core.component.form-builder.template-data': '템플릿 데이터',\n 'core.component.form-builder.set-expression': '식 설정',\n 'core.component.form-builder.condition-group': '조건 그룹',\n 'core.component.form-builder.condition': '조건',\n 'core.component.form-builder.layout': '레이아웃',\n 'core.component.form-builder.maxlength': '최대 글자수',\n 'core.component.form-builder.assign-parameter-value': '매개변수 값 할당',\n 'core.component.form-builder.parameter-name': '매개변수 이름',\n 'core.component.form-builder.parameter-value': '매개변수 값',\n 'core.component.form-builder.assign-value': '값 할당',\n 'core.component.form-builder.add-data': '데이터 추가',\n 'core.component.form-builder.data-api': 'API 데이터',\n 'core.component.form-builder.data-static': '정적 데이터',\n 'core.component.form-builder.set-on-change-assign': '변경 시 값 할당 설정',\n 'core.component.form-builder.target-field': '대상 필드',\n 'core.component.form-builder.target-value': '대상 값',\n 'core.component.form-builder.column-data': '열 데이터',\n 'core.component.form-builder.add-column': '열 추가',\n 'core.component.form-builder.column-config': '열 설정',\n 'core.component.form-builder.column-name': '열 이름',\n 'core.component.form-builder.width': '너비',\n 'core.component.form-builder.data-type': '데이터 유형',\n 'core.component.form-builder.show-when-true': 'TRUE일 때 표시',\n 'core.component.form-builder.show-when-false': 'FALSE일 때 표시',\n 'core.component.form-builder.column-list': '열 목록',\n 'core.component.form-builder.yes-no': '예/아니오',\n 'core.component.form-builder.config-validation-error-warning': '오류/경고 유효성 검사 설정',\n 'core.component.form-builder.message-type': '메시지 유형',\n 'core.component.form-builder.message-display': '표시 메시지',\n 'core.component.form-builder.condition-expression': '조건식',\n 'core.component.form-builder.add-validation': '유효성 검사 추가',\n 'core.component.form-builder.expression': '식',\n 'core.component.form-builder.available-methods': '사용 가능한 메서드',\n 'core.component.form-builder.format': '형식',\n 'core.component.form-builder.time': '시간',\n 'core.component.form-builder.content': '내용',\n 'core.component.form-builder.min': '최소',\n 'core.component.form-builder.max': '최대',\n 'core.component.form-builder.vertical': '세로',\n 'core.component.form-builder.multiple': '다중 선택',\n 'core.component.form-builder.default-value': '기본값',\n 'core.component.form-builder.type': '유형',\n 'core.component.form-builder.file': '파일',\n 'core.component.form-builder.image': '이미지',\n 'core.component.form-builder.max-files': '최대 파일/이미지 수',\n 'core.component.form-builder.size-mb': '크기 (MB)',\n 'core.component.form-builder.format-example': '형식 (예: png,jpg ...)',\n 'core.component.form-builder.source-mobile': '소스 (모바일)',\n 'core.component.form-builder.config-variable': '변수 설정',\n 'core.component.form-builder.config-validation-warning-error': '경고/오류 유효성 검사 설정',\n 'core.component.form-builder.back-to-design': '디자인으로 돌아가기',\n 'core.component.form-builder.preview': '미리보기',\n 'core.component.form-builder.drag-vertically': '위/아래로 드래그',\n 'core.component.form-builder.unset-readonly': '읽기 전용 해제',\n 'core.component.form-builder.set-readonly': '읽기 전용',\n 'core.component.form-builder.duplicate': '복제',\n 'core.component.form-builder.show': '표시',\n 'core.component.form-builder.hide': '숨기기',\n 'core.component.form-builder.flex': '플렉스',\n 'core.component.form-builder.display-label': '표시 라벨',\n 'core.component.form-builder.attribute': '속성',\n 'core.component.form-builder.add-variable': '변수 추가',\n 'core.component.form-builder.add-new': '새로 추가',\n 'core.component.form-builder.detail': '상세',\n 'core.component.form-builder.create-update': '생성/수정',\n 'core.component.form-builder.default': '기본',\n 'core.component.form-builder.show-more': '더 보기',\n 'core.component.form-builder.show-less': '접기',\n 'core.component.inform.show-more': '더 보기',\n 'core.component.inform.show-less': '접기',\n 'core.component.data-state.loading.title': '불러오는 중',\n 'core.component.data-state.loading.message': '데이터를 불러오는 동안 잠시 기다려 주세요.',\n 'core.component.data-state.empty.title': '데이터 없음',\n 'core.component.data-state.empty.message': '표시할 데이터가 아직 없습니다.',\n 'core.component.data-state.error.title': '데이터를 불러올 수 없음',\n 'core.component.data-state.error.message': '오류가 발생했습니다. 다시 시도해 주세요.',\n 'core.component.data-state.forbidden.title': '접근 거부됨',\n 'core.component.data-state.forbidden.message': '이 콘텐츠를 볼 권한이 없습니다.',\n 'core.component.data-state.retry': '다시 시도',\n 'core.component.form-builder.row-overflow': '전체 크기가 12열을 초과하여 이 행으로 이동할 수 없습니다',\n 'core.component.form-builder.upload-source.all': '전체',\n 'core.component.form-builder.upload-source.photo-library': '라이브러리에서 선택',\n 'core.component.form-builder.upload-source.capture': '사진 촬영',\n // Form-builder UI v2 (M3 redesign)\n 'core.component.form-builder.components': '컴포넌트',\n 'core.component.form-builder.search-components': '컴포넌트 검색…',\n 'core.component.form-builder.view-json': 'JSON 보기',\n 'core.component.form-builder.design': '디자인',\n 'core.component.form-builder.preview-runtime': '미리보기 · 런타임',\n 'core.component.form-builder.cancel': '취소',\n 'core.component.form-builder.submit': '제출',\n 'core.component.form-builder.empty-title': '여기에 컴포넌트를 끌어다 놓아 시작',\n 'core.component.form-builder.empty-hint': '왼쪽 패널에서 필드를 드래그하여 양식을 만들거나 다음을 누르세요:',\n 'core.component.form-builder.conditional': '조건부',\n 'core.component.form-builder.group-drop-here': '필드를 여기에 놓아 이 그룹에 추가',\n 'core.component.form-builder.edit-group': '그룹 편집',\n 'core.component.form-builder.group-empty-hint': '상세를 클릭하여 그룹에 필드 추가',\n 'core.component.form-builder.hidden': '숨김',\n 'core.component.form-builder.read-only': '읽기 전용',\n 'core.component.form-builder.untitled': '제목 없음',\n 'core.component.form-builder.no-selection-title': '선택 항목 없음',\n 'core.component.form-builder.no-selection-hint': '캔버스에서 컴포넌트를 선택하여 속성을 편집하세요.',\n 'core.component.form-builder.group-children': '하위 요소',\n 'core.component.form-builder.group-icon': '아이콘',\n 'core.component.form-builder.group-accent-color': '강조 색상',\n 'core.component.form-builder.group-no-children': '필드가 아직 없습니다. 이 그룹에 필드를 추가하거나 드래그하세요.',\n 'core.component.form-builder.break': '줄 바꿈',\n\n // ---- Component: code-editor ----\n 'core.component.code-editor.copied': '복사되었습니다!',\n 'core.component.code-editor.copy': '코드 복사',\n\n // ---- Component: history ----\n 'core.component.history.by': '작성자',\n\n // ---- Component: import-excel ----\n 'core.component.import-excel.title': 'Excel 데이터 가져오기',\n 'core.component.import-excel.see-all': '전체 보기',\n 'core.component.import-excel.valid-rows': '유효한 행',\n 'core.component.import-excel.error-rows': '오류 행',\n 'core.component.import-excel.warning-rows': '경고 행',\n 'core.component.import-excel.valid-data': '유효한 데이터',\n 'core.component.import-excel.download-template-tooltip': '클릭하여 템플릿 다운로드',\n 'core.component.import-excel.upload': '업로드',\n 'core.component.import-excel.download': '다운로드',\n 'core.component.import-excel.confirm-save': '확인 및 저장',\n 'core.component.import-excel.status': '상태',\n 'core.component.import-excel.no-data-upload': '업로드된 데이터가 없습니다',\n 'core.component.import-excel.click-here-template': '여기를 클릭하여 템플릿 다운로드',\n 'core.component.import-excel.no-data-in-file': '파일에 데이터가 없습니다',\n 'core.component.import-excel.row-limit': '업로드 한도는 {limit}행입니다',\n 'core.component.import-excel.required': '필수 데이터',\n 'core.component.import-excel.min-length': '최소 문자열 길이: {min}',\n 'core.component.import-excel.max-length': '최대 문자열 길이: {max}',\n 'core.component.import-excel.not-a-number': '{value} 은(는) 유효한 숫자가 아닙니다',\n 'core.component.import-excel.below-min': '{value} 은(는) 최소값 {min} 미만입니다',\n 'core.component.import-excel.above-max': '{value} 은(는) 최대값 {max} 초과입니다',\n 'core.component.import-excel.invalid-bool': '유효한 값을 입력해 주세요 (true, false, 1, 0)',\n 'core.component.import-excel.invalid-value': '값 {value} 이(가) 올바르지 않습니다',\n 'core.component.import-excel.value-not-in-list': '값 {value} 이(가) 허용 목록 [{list}]에 없습니다',\n 'core.component.import-excel.invalid-date-format': '날짜 {value} 이(가) 형식 {format} 과(와) 일치하지 않습니다',\n 'core.component.import-excel.generic-error': '오류가 발생했습니다',\n 'core.component.import-excel.notify-title': '알림',\n 'core.component.import-excel.message-column': '메시지',\n 'core.component.import-excel.success': '성공',\n\n // ---- Component: preview-image ----\n 'core.component.preview-image.no-image': '이미지 정보가 없습니다',\n 'core.component.preview-image.title': '이미지 미리보기',\n 'core.component.preview-image.no-image-hint': '표시할 이미지가 없습니다',\n 'core.component.preview-image.load-error': '이미지를 불러올 수 없습니다',\n 'core.component.preview-image.load-error-hint': '이미지 파일이 삭제되었거나 경로가 유효하지 않을 수 있습니다',\n 'core.component.preview-image.retry': '다시 시도',\n 'core.component.preview-image.close': '닫기',\n 'core.component.preview-image.prev': '이전 이미지',\n 'core.component.preview-image.next': '다음 이미지',\n 'core.component.preview-image.zoom-in': '확대',\n 'core.component.preview-image.zoom-out': '축소',\n 'core.component.preview-image.fit': '화면에 맞춤',\n 'core.component.preview-image.rotate': '회전',\n 'core.component.preview-image.download': '다운로드',\n 'core.component.preview-image.fullscreen': '전체 화면',\n 'core.component.preview-image.loading': '이미지를 불러오는 중...',\n 'core.component.preview-image.kbd-hint-nav': '이미지 이동',\n 'core.component.preview-image.kbd-hint-close': '닫기',\n\n // ---- Component: preview-pdf ----\n 'core.component.preview-pdf.title': '문서 보기',\n 'core.component.preview-pdf.close': '닫기',\n 'core.component.preview-pdf.pages-count': '{count} 페이지',\n 'core.component.preview-pdf.tab.thumbnails': '페이지',\n 'core.component.preview-pdf.tab.outline': '목차',\n 'core.component.preview-pdf.tab.search': '검색',\n 'core.component.preview-pdf.first-page': '첫 페이지',\n 'core.component.preview-pdf.prev-page': '이전 페이지',\n 'core.component.preview-pdf.next-page': '다음 페이지',\n 'core.component.preview-pdf.last-page': '마지막 페이지',\n 'core.component.preview-pdf.zoom-in': '확대',\n 'core.component.preview-pdf.zoom-out': '축소',\n 'core.component.preview-pdf.fit-page': '페이지에 맞춤',\n 'core.component.preview-pdf.fit-width': '너비에 맞춤',\n 'core.component.preview-pdf.actual-size': '실제 크기',\n 'core.component.preview-pdf.rotate': '회전',\n 'core.component.preview-pdf.scroll-page': '한 페이지',\n 'core.component.preview-pdf.scroll-continuous': '연속 스크롤',\n 'core.component.preview-pdf.print': '인쇄',\n 'core.component.preview-pdf.download': '다운로드',\n 'core.component.preview-pdf.fullscreen': '전체 화면',\n 'core.component.preview-pdf.toggle-sidebar': '사이드바 전환',\n 'core.component.preview-pdf.page-of': '페이지 {current} / {total}',\n 'core.component.preview-pdf.empty.title': '문서가 없습니다',\n 'core.component.preview-pdf.empty.subtitle': '아직 표시할 PDF 파일이 없습니다',\n 'core.component.preview-pdf.loading': '문서를 불러오는 중...',\n 'core.component.preview-pdf.loading.page': '페이지 {current} / {total} 처리 중',\n 'core.component.preview-pdf.error.invalid.title': '문서를 불러올 수 없습니다',\n 'core.component.preview-pdf.error.invalid.body': 'PDF 파일이 손상되었을 수 있습니다. 파일을 확인하세요.',\n 'core.component.preview-pdf.error.password.title': '보호된 문서',\n 'core.component.preview-pdf.error.password.body': '이 PDF 파일을 열려면 비밀번호가 필요합니다.',\n 'core.component.preview-pdf.error.network.title': '연결할 수 없습니다',\n 'core.component.preview-pdf.error.network.body': '서버에서 파일을 불러올 수 없습니다. 나중에 다시 시도하세요.',\n 'core.component.preview-pdf.error.unknown.title': '오류가 발생했습니다',\n 'core.component.preview-pdf.error.unknown.body': '다시 시도하거나 원본 파일을 다운로드하여 확인하세요.',\n 'core.component.preview-pdf.error.retry': '다시 시도',\n 'core.component.preview-pdf.error.download-raw': '원본 다운로드',\n 'core.component.preview-pdf.search': '검색',\n 'core.component.preview-pdf.search-placeholder': '문서에서 검색...',\n 'core.component.preview-pdf.search-case': '대소문자 구분',\n 'core.component.preview-pdf.search-whole': '단어 단위',\n 'core.component.preview-pdf.search-no-results': '결과 없음',\n 'core.component.preview-pdf.search-results-count': '\"{term}\"에 대한 결과 {count}개',\n 'core.component.preview-pdf.search-truncated': '처음 {count}개의 결과를 표시합니다. 검색어를 구체화하세요.',\n 'core.component.preview-pdf.search-prev': '이전 결과',\n 'core.component.preview-pdf.search-next': '다음 결과',\n 'core.component.preview-pdf.search-close': '검색 닫기',\n\n // ---- Component: table ----\n 'core.component.table.setup': '테이블 설정',\n 'core.component.table.column-header': '열 머리글',\n 'core.component.table.width': '너비',\n 'core.component.table.fixed': '고정',\n 'core.component.table.char-limit': '글자수 제한',\n 'core.component.table.skip': '건너뛰기',\n 'core.component.table.apply': '적용',\n 'core.component.table.filter': '필터',\n 'core.component.table.clear-selection': '선택 해제',\n 'core.component.table.customize': '사용자 지정',\n 'core.component.table.search': '검색',\n 'core.component.table.reload': '새로고침',\n 'core.component.table.setup-short': '설정',\n 'core.component.table.no-results': '검색 결과가 없습니다',\n 'core.component.table.no-results-hint': '다른 조건으로 검색하거나 필터링해 주세요',\n 'core.component.table.choose-filter-hint': '시작하려면 필터를 선택해 주세요',\n 'core.component.table.no-data': '데이터가 없습니다',\n 'core.component.table.export-excel': 'Excel 내보내기',\n 'core.component.table.exporting': '내보내는 중...{percent}%',\n 'core.component.table.export': '내보내기',\n 'core.component.table.export-csv': 'CSV 내보내기',\n 'core.component.table.showing': '표시 중:',\n 'core.component.table.paginator.first-page': '첫 페이지',\n 'core.component.table.paginator.last-page': '마지막 페이지',\n 'core.component.table.paginator.items-per-page': '표시 중',\n 'core.component.table.paginator.next-page': '다음 페이지',\n 'core.component.table.paginator.previous-page': '이전 페이지',\n 'core.component.table.error-occurred': '오류가 발생했습니다',\n 'core.component.table.not-an-array': '데이터가 배열이 아닙니다',\n 'core.component.table.config.confirm-reset': '모든 설정을 기본값으로 초기화하시겠습니까',\n 'core.component.table.popup-export.select-columns': '내보낼 열을 선택해 주세요',\n 'core.component.table.selector-action.default-msg': '개 선택됨',\n 'core.component.tab-router.too-many-tabs': '너무 많은 탭이 열려 있습니다.',\n\n // ---- Component: upload-file ----\n 'core.component.upload-file.upload': '파일 업로드',\n 'core.component.upload-file.error-occurred': '오류가 발생했습니다',\n 'core.component.upload-file.please-upload': '파일/이미지를 업로드해 주세요',\n 'core.component.upload-file.desc-format-and-size': '형식: {exts}, 최대: {maxSize}MB',\n 'core.component.upload-file.desc-format': '형식: {exts}',\n 'core.component.upload-file.desc-max-size': '최대: {maxSize}MB',\n 'core.component.upload-file.not-image': '[{name}] 업로드한 파일이 이미지가 아닙니다',\n 'core.component.upload-file.invalid-format': '[{name}] 업로드한 파일의 형식이 올바르지 않습니다: {exts}',\n 'core.component.upload-file.size-exceeded': '[{name}] 최대 파일 크기: {maxSize} MB',\n 'core.component.upload-file.upload-failed': '파일 업로드 중 오류가 발생했습니다',\n 'core.component.upload-file.too-many-files': '파일을 너무 많이 선택했습니다. 개수를 확인해 주세요',\n 'core.component.upload-file.confirm-delete-message': '이 파일을 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다',\n 'core.component.upload-file.confirm-delete-title': '삭제 확인',\n 'core.component.upload-file.confirm-yes': '확인',\n 'core.component.upload-file.confirm-no': '취소',\n 'core.component.upload-file.no-configuration': 'SD_UPLOAD_FILE_CONFIGURATION 을 inject 하거나 컴포넌트에 [upload] 를 직접 전달해 주세요',\n 'core.component.upload-file.no-configuration-key':\n \"key='{key}' 에 대한 업로드 설정을 찾을 수 없습니다. provider 를 확인하거나 [upload] 를 직접 전달해 주세요\",\n 'core.component.upload-file.preview-title': '이미지 미리보기',\n\n // ---- Module: layout (sidebar / user menu) ----\n 'core.module.layout.user.change-password': '비밀번호 변경',\n 'core.module.layout.user.logout': '로그아웃',\n 'core.module.layout.user.update-profile': '프로필 수정',\n 'core.module.layout.user.setting': '설정',\n 'core.module.layout.user.notification': '알림',\n 'core.module.layout.sidebar.search': '검색',\n 'core.module.layout.sidebar.toggle': '사이드바 전환',\n\n // ---- Module: layout (greeting + weekday) ----\n 'core.module.layout.greeting.hello': '안녕하세요, {name}님',\n 'core.module.layout.weekday.0': '일요일',\n 'core.module.layout.weekday.1': '월요일',\n 'core.module.layout.weekday.2': '화요일',\n 'core.module.layout.weekday.3': '수요일',\n 'core.module.layout.weekday.4': '목요일',\n 'core.module.layout.weekday.5': '금요일',\n 'core.module.layout.weekday.6': '토요일',\n 'core.module.layout.today-info.format': '{weekday}, {date}',\n\n // ---- Module: layout (forbidden page) ----\n 'core.module.layout.forbidden.title': '접근이 거부되었습니다',\n 'core.module.layout.forbidden.message': '이 페이지에 접근할 권한이 없습니다. 관리자에게 문의하거나 홈으로 돌아가 주세요',\n 'core.module.layout.forbidden.back-home': '홈으로 돌아가기',\n\n // ---- Module: layout (not-found page) ----\n 'core.module.layout.not-found.title': '404 - 페이지를 찾을 수 없습니다',\n 'core.module.layout.not-found.message':\n '찾으시는 페이지가 존재하지 않거나 삭제되었습니다. URL을 확인하거나 홈으로 돌아가 계속 진행해 주세요.',\n 'core.module.layout.not-found.back': '돌아가기',\n\n // ---- Module: layout (home page) ----\n 'core.module.layout.home.tab-name': '홈',\n 'core.module.layout.not-found.tab-name': '페이지를 찾을 수 없음',\n 'core.module.layout.forbidden.tab-name': '접근 거부',\n 'core.module.layout.home.feature.data': '데이터',\n 'core.module.layout.home.feature.reports': '리포트',\n 'core.module.layout.home.feature.users': '사용자',\n 'core.module.layout.home.feature.workflow': '워크플로우',\n 'core.module.layout.home.feature.audit': '감사',\n 'core.module.layout.home.feature.integration': '연계',\n\n // ---- Module: layout (mock fallback when SD_LAYOUT_CONFIGURATION is not provided) ----\n 'core.module.layout.mock.user.full-name': '데모 사용자',\n\n // ---- Module: generic (generic-select) ----\n 'core.module.generic.generic-select.detail-link': '상세',\n};\n","import type { EN_MESSAGES } from './en';\n\nexport const VI_MESSAGES: Record<keyof typeof EN_MESSAGES, string> = {\n 'core.common.cancel': 'Hủy',\n 'core.common.close': 'Đóng',\n 'core.common.reload': 'Tải lại trang',\n 'core.test.greet': 'Xin chào {name}',\n\n // ---- Validators (VALIDATION_PATTERNS in @sdcorejs/utils/constants) ----\n 'core.validator.email.name': 'Email',\n 'core.validator.email.error': 'Email không hợp lệ',\n 'core.validator.phone.name': 'SĐT',\n 'core.validator.phone.error': 'Số điện thoại không hợp lệ',\n // Legacy aliases — pattern.model.ts cũ vẫn dùng các key này\n 'core.validator.phone-vn.name': 'SĐT VN',\n 'core.validator.phone-vn.error': 'SĐT Việt Nam không hợp lệ',\n 'core.validator.cccd.name': 'CCCD',\n 'core.validator.cccd.error': 'CCCD không hợp lệ (12 chữ số)',\n 'core.validator.id-vn.name': 'CCCD / Hộ chiếu',\n 'core.validator.id-vn.error': 'CCCD hoặc Hộ chiếu không hợp lệ',\n 'core.validator.vn-phone.name': 'SĐT VN',\n 'core.validator.vn-phone.error': 'SĐT Việt Nam không hợp lệ',\n 'core.validator.vn-id.name': 'CCCD',\n 'core.validator.vn-id.error': 'CCCD không hợp lệ (12 chữ số)',\n 'core.validator.passport.name': 'Hộ chiếu',\n 'core.validator.passport.error': 'Hộ chiếu không hợp lệ (1 chữ cái + 7 chữ số)',\n 'core.validator.vn-id-or-passport.name': 'CCCD / Hộ chiếu',\n 'core.validator.vn-id-or-passport.error': 'CCCD hoặc Hộ chiếu không hợp lệ',\n 'core.validator.time.name': 'Giờ',\n 'core.validator.time.error': 'Giờ không hợp lệ (định dạng HH:mm)',\n 'core.validator.url.name': 'URL',\n 'core.validator.url.error': 'URL không hợp lệ',\n 'core.validator.domain.name': 'Tên miền',\n 'core.validator.domain.error': 'Tên miền không hợp lệ',\n 'core.validator.ipv4.name': 'IPv4',\n 'core.validator.ipv4.error': 'Địa chỉ IPv4 không hợp lệ',\n 'core.validator.ipv6.name': 'IPv6',\n 'core.validator.ipv6.error': 'Địa chỉ IPv6 không hợp lệ',\n 'core.validator.image-url.name': 'URL ảnh',\n 'core.validator.image-url.error': 'URL ảnh không hợp lệ',\n 'core.validator.slug.name': 'Slug',\n 'core.validator.slug.error': 'Slug không hợp lệ',\n 'core.validator.number.name': 'Số',\n 'core.validator.number.error': 'Số không hợp lệ',\n 'core.validator.integer.name': 'Số nguyên',\n 'core.validator.integer.error': 'Số nguyên không hợp lệ',\n 'core.validator.decimal.name': 'Số thập phân',\n 'core.validator.decimal.error': 'Số thập phân không hợp lệ',\n 'core.validator.positive-number.name': 'Số dương',\n 'core.validator.positive-number.error': 'Phải là số dương',\n 'core.validator.uuid.name': 'UUID',\n 'core.validator.uuid.error': 'UUID không hợp lệ',\n 'core.validator.code-16.name': 'Mã 16 ký tự',\n 'core.validator.code-16.error': 'Mã 16 ký tự không hợp lệ',\n 'core.validator.code-32.name': 'Mã 32 ký tự',\n 'core.validator.code-32.error': 'Mã 32 ký tự không hợp lệ',\n 'core.validator.hex-color.name': 'Mã màu HEX',\n 'core.validator.hex-color.error': 'Mã màu HEX không hợp lệ',\n 'core.validator.base64.name': 'Base64',\n 'core.validator.base64.error': 'Chuỗi Base64 không hợp lệ',\n\n // ---- Operators (operator.model.ts) ----\n 'core.operator.equal.display': 'Bằng',\n 'core.operator.not-equal.display': 'Không bằng',\n 'core.operator.greater-than.display': 'Lớn hơn',\n 'core.operator.less-than.display': 'Nhỏ hơn',\n 'core.operator.greater-or-equal.display': 'Lớn hơn, hoặc bằng',\n 'core.operator.less-or-equal.display': 'Nhỏ hơn, hoặc bằng',\n 'core.operator.contain.display': 'Chứa',\n 'core.operator.not-contain.display': 'Không chứa',\n 'core.operator.start-with.display': 'Bắt đầu bởi',\n 'core.operator.not-start-with.display': 'Không bắt đầu bởi',\n 'core.operator.end-with.display': 'Kết thúc bởi',\n 'core.operator.not-end-with.display': 'Không kết thúc bởi',\n 'core.operator.in.display': 'Nằm trong',\n 'core.operator.not-in.display': 'Không nằm trong',\n 'core.operator.between.display': 'Trong khoảng',\n 'core.operator.null.display': 'Là rỗng',\n 'core.operator.not-null.display': 'Không rỗng',\n\n // ---- Global error handler ----\n 'core.handler.global-error.update-title': 'HỆ THỐNG CÓ BẢN CẬP NHẬT MỚI',\n 'core.handler.global-error.update-body': 'Phiên bản hiện tại đã cũ và không tải được tài nguyên.\\nVui lòng bấm OK để tải lại trang.',\n\n // ---- Interceptor: no-internet ----\n 'core.interceptor.no-internet.offline': 'Không có kết nối mạng. Đang chờ kết nối...',\n 'core.interceptor.no-internet.cors-error': 'Không thể kết nối đến máy chủ (Lỗi CORS hoặc cấu hình).',\n 'core.interceptor.no-internet.maintenance': 'Máy chủ đang bảo trì. Vui lòng thử lại sau!',\n 'core.interceptor.no-internet.restored': 'Kết nối đã được khôi phục!',\n\n // ---- Service: excel ----\n 'core.excel.cannot-read-file': 'Không đọc được nội dung file',\n 'core.excel.no-sheet': 'File Excel không có sheet dữ liệu',\n\n // ---- Service: docx ----\n 'core.docx.invalid-format': 'Định dạng không hợp lệ. Vui lòng chọn Mẫu có định dạng DOC hoặc DOCX',\n 'core.docx.size-exceeded': 'Kích thước tệp mẫu vượt quá tiêu chuẩn hỗ trợ của hệ thống. Vui lòng thử lại',\n 'core.docx.convert-error': 'Có lỗi xảy ra khi chuyển đổi file DOCX',\n\n // ---- Service: notify (toast) ----\n 'core.notify.type.success': 'Thành công',\n 'core.notify.type.info': 'Thông tin',\n 'core.notify.type.warning': 'Cảnh báo',\n 'core.notify.type.error': 'Lỗi',\n 'core.notify.show-more': 'Hiện thêm ({count})',\n 'core.notify.show-less': 'Thu gọn',\n\n // ---- Service: confirm ----\n 'core.confirm.title': 'Xác nhận',\n 'core.confirm.yes': 'Đồng ý',\n 'core.confirm.no': 'Hủy bỏ',\n 'core.confirm.yes-short': 'Có',\n 'core.confirm.no-short': 'Không',\n\n // ---- Directive: hover-copy ----\n 'core.directive.hover-copy.tooltip': 'Sao chép',\n\n // ---- Forms: input ----\n 'core.form.input.required': 'Vui lòng nhập thông tin',\n 'core.form.input.maxlength': 'Số ký tự tối đa: {max}',\n 'core.form.input.invalid-pattern': 'Định dạng không hợp lệ',\n 'core.form.input.exceeded': 'Vượt quá số ký tự tối đa',\n 'core.form.input.mask-incomplete': 'Giá trị chưa đầy đủ',\n 'core.form.input.mask-invalid': 'Giá trị chứa ký tự không hợp lệ',\n\n // ---- Forms: autocomplete ----\n 'core.form.autocomplete.required': 'Vui lòng nhập thông tin',\n\n // ---- Forms: chip ----\n 'core.form.chip.required': 'Vui lòng nhập thông tin',\n 'core.form.chip.minlength': 'Vui lòng nhập ít nhất {min} giá trị',\n 'core.form.chip.maxlength': 'Vui lòng nhập tối đa {max} giá trị',\n\n // ---- Forms: chip-calendar ----\n 'core.form.chip-calendar.required': 'Vui lòng nhập thông tin',\n 'core.form.chip-calendar.minlength': 'Vui lòng nhập ít nhất {min} giá trị',\n 'core.form.chip-calendar.maxlength': 'Vui lòng nhập tối đa {max} giá trị',\n\n // ---- Forms: date ----\n 'core.form.date.required': 'Vui lòng nhập thông tin',\n 'core.form.date.min-date': 'Ngày nhỏ nhất: {date}',\n 'core.form.date.max-date': 'Ngày lớn nhất: {date}',\n 'core.form.date.parse-error': 'Lỗi phân tích: {text}',\n 'core.form.date.invalid-format': 'Sai định dạng',\n\n // ---- Forms: date-range ----\n 'core.form.date-range.required': 'Vui lòng nhập thông tin',\n 'core.form.date-range.invalid-min': 'Ngày bắt đầu không hợp lệ (nhỏ hơn giới hạn)',\n '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)',\n 'core.form.date-range.from': 'Từ',\n 'core.form.date-range.to': 'đến',\n\n // ---- Forms: datetime ----\n 'core.form.datetime.required': 'Vui lòng nhập thông tin',\n 'core.form.datetime.min-date': 'Ngày nhỏ nhất: {date}',\n 'core.form.datetime.max-date': 'Ngày lớn nhất: {date}',\n 'core.form.datetime.invalid-format': 'Sai định dạng',\n 'core.form.datetime.now': 'Bây giờ',\n 'core.form.datetime.confirm': 'Xác nhận',\n\n // ---- Forms: entity-picker / tree-select ----\n 'core.form.entity-picker.placeholder': 'Chọn đối tượng',\n 'core.form.entity-picker.modal-title': 'Chọn đối tượng',\n 'core.form.entity-picker.value': 'Giá trị',\n 'core.form.entity-picker.clear': 'Xóa lựa chọn',\n 'core.form.entity-picker.add': 'Thêm mới',\n 'core.form.entity-picker.cancel': 'Hủy',\n 'core.form.entity-picker.apply': 'Áp dụng',\n 'core.form.tree-select.placeholder': 'Chọn mục cây',\n 'core.form.tree-select.modal-title': 'Chọn mục cây',\n 'core.form.tree-select.clear': 'Xóa lựa chọn',\n 'core.form.tree-select.search': 'Tìm kiếm cây',\n 'core.form.tree-select.cancel': 'Hủy',\n 'core.form.tree-select.apply': 'Áp dụng',\n 'core.component.tree.retry': 'Thử lại',\n 'core.service.unsaved-changes.message': 'Bạn có thay đổi chưa lưu. Bỏ thay đổi và tiếp tục?',\n 'core.component.job-progress.status.idle': 'Sẵn sàng',\n 'core.component.job-progress.status.queued': 'Đang chờ',\n 'core.component.job-progress.status.running': 'Đang thực hiện',\n 'core.component.job-progress.status.succeeded': 'Hoàn tất',\n 'core.component.job-progress.status.failed': 'Thất bại',\n 'core.component.job-progress.status.cancelled': 'Đã hủy',\n 'core.component.job-progress.cancel': 'Hủy',\n 'core.component.job-progress.retry': 'Thử lại',\n 'core.component.audit-diff.label': 'Thay đổi kiểm toán',\n 'core.component.audit-diff.field': 'Trường',\n 'core.component.audit-diff.before': 'Trước',\n 'core.component.audit-diff.after': 'Sau',\n 'core.component.audit-diff.empty': 'Không có thay đổi',\n 'core.component.audit-diff.kind.added': 'Đã thêm',\n 'core.component.audit-diff.kind.removed': 'Đã xóa',\n 'core.component.audit-diff.kind.changed': 'Đã đổi',\n 'core.component.audit-diff.kind.unchanged': 'Không đổi',\n 'core.component.audit-diff.value.label': 'Giá trị',\n 'core.component.audit-diff.value.not-set': 'Chưa thiết lập',\n 'core.component.audit-diff.value.undefined': 'Không xác định',\n 'core.component.audit-diff.value.null': 'Rỗng',\n 'core.component.audit-diff.value.true': 'Có',\n 'core.component.audit-diff.value.false': 'Không',\n\n // ---- Forms: time ----\n 'core.form.time.required': 'Vui lòng nhập giờ',\n 'core.form.time.invalid': 'Vui lòng nhập giờ hợp lệ theo định dạng HH:mm',\n 'core.form.time.min': 'Giờ không được sớm hơn {min}',\n 'core.form.time.max': 'Giờ không được muộn hơn {max}',\n 'core.form.time.step': 'Giờ phải theo khoảng {step} phút',\n 'core.form.time.open-picker': 'Mở bộ chọn giờ',\n 'core.form.time.confirm': 'Xác nhận',\n 'core.form.time.clear': 'Xóa giờ',\n\n // ---- Forms: time-range ----\n 'core.form.time-range.required': 'Vui lòng nhập cả giờ bắt đầu và kết thúc',\n 'core.form.time-range.incomplete': 'Nhập đủ hai đầu hoặc bật khoảng thời gian mở',\n 'core.form.time-range.range': 'Giờ bắt đầu không được sau giờ kết thúc',\n 'core.form.time-range.invalid': 'Vui lòng nhập giờ hợp lệ theo định dạng HH:mm',\n 'core.form.time-range.min': 'Các mốc giờ không được sớm hơn {min}',\n 'core.form.time-range.max': 'Các mốc giờ không được muộn hơn {max}',\n 'core.form.time-range.step': 'Các mốc giờ phải theo khoảng {step} phút',\n 'core.form.time-range.from': 'Từ',\n 'core.form.time-range.to': 'Đến',\n 'core.form.time-range.clear': 'Xóa khoảng giờ',\n\n // ---- Forms: time-spinner ----\n 'core.form.time-spinner.hour': 'Giờ',\n 'core.form.time-spinner.minute': 'Phút',\n 'core.form.time-spinner.second': 'Giây',\n 'core.form.time-spinner.increase-hour': 'Tăng giờ',\n 'core.form.time-spinner.decrease-hour': 'Giảm giờ',\n 'core.form.time-spinner.increase-minute': 'Tăng phút',\n 'core.form.time-spinner.decrease-minute': 'Giảm phút',\n 'core.form.time-spinner.increase-second': 'Tăng giây',\n 'core.form.time-spinner.decrease-second': 'Giảm giây',\n\n // ---- Forms: input-number ----\n 'core.form.input-number.required': 'Vui lòng nhập thông tin',\n 'core.form.input-number.min': 'Giá trị không được nhỏ hơn {min}',\n 'core.form.input-number.max': 'Giá trị không được lớn hơn {max}',\n\n // ---- Forms: radio ----\n 'core.form.radio.required': 'Vui lòng nhập thông tin',\n\n // ---- Forms: switch ----\n 'core.form.switch.on': 'Bật',\n 'core.form.switch.off': 'Tắt',\n\n // ---- Forms: checkbox ----\n 'core.form.checkbox.checked': 'Có',\n 'core.form.checkbox.unchecked': 'Không',\n\n // ---- Forms: select ----\n 'core.form.select.required': 'Vui lòng nhập thông tin',\n\n // ---- Forms: textarea ----\n 'core.form.textarea.required': 'Vui lòng nhập thông tin',\n 'core.form.textarea.maxlength': 'Số ký tự tối đa: {max}',\n 'core.form.textarea.invalid-pattern': 'Định dạng không hợp lệ',\n 'core.form.textarea.exceeded': 'Vượt quá số ký tự tối đa',\n\n // ---- Component: editor ----\n 'core.component.editor.required': 'Vui lòng nhập nội dung',\n 'core.component.editor.maxlength': 'Số ký tự tối đa: {max}',\n 'core.component.editor.image.invalid-format': 'Định dạng file \".{format}\" không được phép. Các định dạng hợp lệ: {allowed}',\n 'core.component.editor.image.size-exceeded': 'Dung lượng file {sizeMB}MB vượt quá giới hạn {maxSizeMB}MB',\n 'core.component.editor.image.min-width': 'Chiều rộng ảnh {width}px nhỏ hơn giới hạn tối thiểu {min}px',\n 'core.component.editor.image.min-height': 'Chiều cao ảnh {height}px nhỏ hơn giới hạn tối thiểu {min}px',\n 'core.component.editor.image.max-width': 'Chiều rộng ảnh {width}px vượt quá giới hạn {max}px',\n 'core.component.editor.image.max-height': 'Chiều cao ảnh {height}px vượt quá giới hạn {max}px',\n 'core.component.editor.image.max-per-selection': 'Chỉ được phép chọn tối đa {max} ảnh mỗi lần',\n\n // ---- Component: document-builder ----\n 'core.component.document-builder.page-number.current': 'Số trang hiện tại',\n 'core.component.document-builder.page-number.total': 'Tổng số trang',\n 'core.component.document-builder.ck-comment.label': 'Bình luận',\n 'core.component.document-builder.ck-comment.text-too-long': 'Văn bản quá dài ({length} ký tự). Tối đa {max} ký tự.',\n 'core.component.document-builder.variable.not-allowed': 'Không cho phép thêm variable vào văn bản',\n 'core.component.document-builder.variable.invalid-data': 'Dữ liệu variable không hợp lệ',\n\n // ---- Component: form-builder ----\n 'core.component.form-builder.field-key': 'Trường dữ liệu',\n 'core.component.form-builder.display': 'Hiển thị',\n 'core.component.form-builder.general': 'Thông tin chung',\n 'core.component.form-builder.visible-when': 'Hiển thị khi',\n 'core.component.form-builder.required': 'Bắt buộc',\n 'core.component.form-builder.label': 'Tên hiển thị',\n 'core.component.form-builder.disabled': 'Vô hiệu',\n 'core.component.form-builder.disabled-when': 'Vô hiệu khi',\n 'core.component.form-builder.hidden-when': 'Ẩn khi',\n 'core.component.form-builder.validation': 'Ràng buộc',\n 'core.component.form-builder.required-when': 'Bắt buộc khi',\n 'core.component.form-builder.confirm': 'Xác nhận',\n 'core.component.form-builder.delete': 'Xóa',\n 'core.component.form-builder.save': 'Lưu',\n 'core.component.form-builder.hint': 'Gợi ý',\n 'core.component.form-builder.parameter': 'Tham số',\n 'core.component.form-builder.add-field': 'Thêm trường',\n 'core.component.form-builder.data': 'Dữ liệu',\n 'core.component.form-builder.query-condition': 'Điều kiện truy vấn',\n 'core.component.form-builder.set-query-value': 'Thiết lập giá trị truy vấn',\n 'core.component.form-builder.value-source-field': 'Trường lấy giá trị',\n 'core.component.form-builder.assign-parameter': 'Gán tham số',\n 'core.component.form-builder.template-data': 'Dữ liệu mẫu',\n 'core.component.form-builder.set-expression': 'Thiết lập biểu thức',\n 'core.component.form-builder.condition-group': 'Nhóm điều kiện',\n 'core.component.form-builder.condition': 'Điều kiện',\n 'core.component.form-builder.layout': 'Bố cục',\n 'core.component.form-builder.maxlength': 'Ký tự tối đa',\n 'core.component.form-builder.assign-parameter-value': 'Gán giá trị Tham số',\n 'core.component.form-builder.parameter-name': 'Tên tham số',\n 'core.component.form-builder.parameter-value': 'Giá trị tương ứng',\n 'core.component.form-builder.assign-value': 'Gán giá trị',\n 'core.component.form-builder.add-data': 'Thêm dữ liệu',\n 'core.component.form-builder.data-api': 'Dữ liệu API',\n 'core.component.form-builder.data-static': 'Dữ liệu tĩnh',\n 'core.component.form-builder.set-on-change-assign': 'Thiết lập gán giá trị khi thay đổi',\n 'core.component.form-builder.target-field': 'Trường muốn gán giá trị',\n 'core.component.form-builder.target-value': 'Giá trị muốn gán',\n 'core.component.form-builder.column-data': 'Dữ liệu cột',\n 'core.component.form-builder.add-column': 'Thêm cột',\n 'core.component.form-builder.column-config': 'Cấu hình cột',\n 'core.component.form-builder.column-name': 'Tên cột',\n 'core.component.form-builder.width': 'Chiều rộng',\n 'core.component.form-builder.data-type': 'Loại dữ liệu',\n 'core.component.form-builder.show-when-true': 'Hiển thị khi TRUE',\n 'core.component.form-builder.show-when-false': 'Hiển thị khi FALSE',\n 'core.component.form-builder.column-list': 'Danh sách cột',\n 'core.component.form-builder.yes-no': 'Có/Không',\n 'core.component.form-builder.config-validation-error-warning': 'Cấu hình xác thực lỗi/cảnh báo',\n 'core.component.form-builder.message-type': 'Loại thông báo',\n 'core.component.form-builder.message-display': 'Thông báo hiển thị',\n 'core.component.form-builder.condition-expression': 'Biểu thức điều kiện',\n 'core.component.form-builder.add-validation': 'Thêm xác thực',\n 'core.component.form-builder.expression': 'Biểu thức',\n 'core.component.form-builder.available-methods': 'Phương thức sẵn có',\n 'core.component.form-builder.format': 'Định dạng',\n 'core.component.form-builder.time': 'Thời điểm',\n 'core.component.form-builder.content': 'Nội dung',\n 'core.component.form-builder.min': 'Giá trị nhỏ nhất',\n 'core.component.form-builder.max': 'Giá trị lớn nhất',\n 'core.component.form-builder.vertical': 'Dọc',\n 'core.component.form-builder.multiple': 'Chọn nhiều',\n 'core.component.form-builder.default-value': 'Giá trị mặc định',\n 'core.component.form-builder.type': 'Loại',\n 'core.component.form-builder.file': 'Tệp',\n 'core.component.form-builder.image': 'Ảnh',\n 'core.component.form-builder.max-files': 'SL tệp/ảnh tối đa',\n 'core.component.form-builder.size-mb': 'Dung lượng (Mb)',\n 'core.component.form-builder.format-example': 'Định dạng (VD: png,jpg ...)',\n 'core.component.form-builder.source-mobile': 'Nguồn (mobile)',\n 'core.component.form-builder.config-variable': 'Cấu hình biến',\n 'core.component.form-builder.config-validation-warning-error': 'Cấu hình xác thực cảnh báo/lỗi',\n 'core.component.form-builder.back-to-design': 'Trở về thiết kế',\n 'core.component.form-builder.preview': 'Xem thử',\n 'core.component.form-builder.drag-vertically': 'Kéo lên / xuống',\n 'core.component.form-builder.unset-readonly': 'Bỏ chỉ xem',\n 'core.component.form-builder.set-readonly': 'Chỉ xem',\n 'core.component.form-builder.duplicate': 'Nhân bản',\n 'core.component.form-builder.show': 'Hiện',\n 'core.component.form-builder.hide': 'Ẩn',\n 'core.component.form-builder.flex': 'Co dãn',\n 'core.component.form-builder.display-label': 'Nhãn hiển thị',\n 'core.component.form-builder.attribute': 'Thuộc tính',\n 'core.component.form-builder.add-variable': 'Thêm biến',\n 'core.component.form-builder.add-new': 'Thêm mới',\n 'core.component.form-builder.detail': 'Chi tiết',\n 'core.component.form-builder.create-update': 'Tạo mới/cập nhật',\n 'core.component.form-builder.default': 'Mặc định',\n 'core.component.form-builder.show-more': 'Xem thêm',\n 'core.component.form-builder.show-less': 'Thu gọn',\n 'core.component.inform.show-more': 'Xem thêm',\n 'core.component.inform.show-less': 'Thu gọn',\n 'core.component.data-state.loading.title': 'Đang tải',\n 'core.component.data-state.loading.message': 'Vui lòng chờ trong khi dữ liệu được tải.',\n 'core.component.data-state.empty.title': 'Chưa có dữ liệu',\n 'core.component.data-state.empty.message': 'Hiện chưa có dữ liệu để hiển thị.',\n 'core.component.data-state.error.title': 'Không thể tải dữ liệu',\n 'core.component.data-state.error.message': 'Đã xảy ra lỗi. Vui lòng thử lại.',\n 'core.component.data-state.forbidden.title': 'Không có quyền truy cập',\n 'core.component.data-state.forbidden.message': 'Bạn không có quyền xem nội dung này.',\n 'core.component.data-state.retry': 'Thử lại',\n 'core.component.form-builder.row-overflow': 'Không thể di chuyển tới dòng này vì tổng kích thước vượt quá 12 cột',\n 'core.component.form-builder.upload-source.all': 'Tất cả',\n 'core.component.form-builder.upload-source.photo-library': 'Chọn từ thư viện',\n 'core.component.form-builder.upload-source.capture': 'Chụp ảnh',\n // Form-builder UI v2 (M3 redesign)\n 'core.component.form-builder.components': 'Components',\n 'core.component.form-builder.search-components': 'Tìm component…',\n 'core.component.form-builder.view-json': 'Xem JSON',\n 'core.component.form-builder.design': 'Thiết kế',\n 'core.component.form-builder.preview-runtime': 'Xem trước · Runtime',\n 'core.component.form-builder.cancel': 'Hủy',\n 'core.component.form-builder.submit': 'Gửi',\n 'core.component.form-builder.empty-title': 'Kéo component vào đây để bắt đầu',\n 'core.component.form-builder.empty-hint': 'Tạo form bằng cách kéo các trường từ panel bên trái, hoặc nhấn',\n 'core.component.form-builder.conditional': 'Có điều kiện',\n 'core.component.form-builder.group-drop-here': 'Kéo trường vào đây để thêm vào group',\n 'core.component.form-builder.edit-group': 'Thiết kế group',\n 'core.component.form-builder.group-empty-hint': 'Bấm Chi tiết để thêm trường vào group',\n 'core.component.form-builder.hidden': 'Đã ẩn',\n 'core.component.form-builder.read-only': 'Chỉ đọc',\n 'core.component.form-builder.untitled': 'Chưa đặt tên',\n 'core.component.form-builder.no-selection-title': 'Chưa chọn component nào',\n 'core.component.form-builder.no-selection-hint': 'Chọn một component trên canvas để chỉnh sửa thuộc tính.',\n 'core.component.form-builder.group-children': 'Thành phần con',\n 'core.component.form-builder.group-icon': 'Icon',\n 'core.component.form-builder.group-accent-color': 'Màu nhấn',\n 'core.component.form-builder.group-no-children': 'Chưa có trường nào. Thêm hoặc kéo trường vào group này.',\n 'core.component.form-builder.break': 'Ngắt dòng',\n\n // ---- Component: code-editor ----\n 'core.component.code-editor.copied': 'Đã copy!',\n 'core.component.code-editor.copy': 'Copy code',\n\n // ---- Component: history ----\n 'core.component.history.by': 'Bởi',\n\n // ---- Component: import-excel ----\n 'core.component.import-excel.title': 'Nhập dữ liệu Excel',\n 'core.component.import-excel.see-all': 'Xem tất cả',\n 'core.component.import-excel.valid-rows': 'Số dòng dữ liệu hợp lệ',\n 'core.component.import-excel.error-rows': 'Số dòng dữ liệu có lỗi',\n 'core.component.import-excel.warning-rows': 'Số dòng dữ liệu có cảnh báo',\n 'core.component.import-excel.valid-data': 'Dữ liệu hợp lệ',\n 'core.component.import-excel.download-template-tooltip': 'Nhấn để tải tệp mẫu về máy',\n 'core.component.import-excel.upload': 'Tải lên',\n 'core.component.import-excel.download': 'Tải về',\n 'core.component.import-excel.confirm-save': 'Xác nhận & Lưu',\n 'core.component.import-excel.status': 'Trạng thái',\n 'core.component.import-excel.no-data-upload': 'Chưa có dữ liệu tải lên',\n 'core.component.import-excel.click-here-template': 'Nhấn vào đây để tải tệp mẫu',\n 'core.component.import-excel.no-data-in-file': 'Tệp tin không có dữ liệu',\n 'core.component.import-excel.row-limit': 'Giới hạn tải lên {limit} dòng',\n 'core.component.import-excel.required': 'Dữ liệu bắt buộc',\n 'core.component.import-excel.min-length': 'Độ dài chuỗi tối thiểu: {min}',\n 'core.component.import-excel.max-length': 'Độ dài chuỗi tối đa: {max}',\n 'core.component.import-excel.not-a-number': '{value} không phải số hợp lệ',\n 'core.component.import-excel.below-min': '{value} không thỏa giá trị tối thiểu: {min}',\n 'core.component.import-excel.above-max': '{value} không thỏa giá trị tối đa: {max}',\n 'core.component.import-excel.invalid-bool': 'Vui lòng nhập giá trị hợp lệ true, false, 1, 0',\n 'core.component.import-excel.invalid-value': 'Giá trị {value} không hợp lệ',\n 'core.component.import-excel.value-not-in-list': 'Giá trị {value} không thuộc danh sách cho phép [{list}]',\n 'core.component.import-excel.invalid-date-format': 'Ngày {value} không đúng định dạng {format}',\n 'core.component.import-excel.generic-error': 'Có lỗi xảy ra',\n 'core.component.import-excel.notify-title': 'Thông báo',\n 'core.component.import-excel.message-column': 'Thông báo',\n 'core.component.import-excel.success': 'Thành công',\n\n // ---- Component: preview-image ----\n 'core.component.preview-image.no-image': 'Không có thông tin ảnh',\n 'core.component.preview-image.title': 'Xem ảnh',\n 'core.component.preview-image.no-image-hint': 'Chưa có ảnh nào để hiển thị',\n 'core.component.preview-image.load-error': 'Không tải được ảnh',\n 'core.component.preview-image.load-error-hint': 'File ảnh có thể đã bị xóa hoặc đường dẫn không hợp lệ',\n 'core.component.preview-image.retry': 'Thử lại',\n 'core.component.preview-image.close': 'Đóng',\n 'core.component.preview-image.prev': 'Ảnh trước',\n 'core.component.preview-image.next': 'Ảnh tiếp theo',\n 'core.component.preview-image.zoom-in': 'Phóng to',\n 'core.component.preview-image.zoom-out': 'Thu nhỏ',\n 'core.component.preview-image.fit': 'Vừa khung',\n 'core.component.preview-image.rotate': 'Xoay',\n 'core.component.preview-image.download': 'Tải xuống',\n 'core.component.preview-image.fullscreen': 'Toàn màn hình',\n 'core.component.preview-image.loading': 'Đang tải ảnh...',\n 'core.component.preview-image.kbd-hint-nav': 'chuyển ảnh',\n 'core.component.preview-image.kbd-hint-close': 'đóng',\n\n // ---- Component: preview-pdf ----\n 'core.component.preview-pdf.title': 'Xem tài liệu',\n 'core.component.preview-pdf.close': 'Đóng',\n 'core.component.preview-pdf.pages-count': '{count} trang',\n 'core.component.preview-pdf.tab.thumbnails': 'Trang',\n 'core.component.preview-pdf.tab.outline': 'Mục lục',\n 'core.component.preview-pdf.tab.search': 'Tìm',\n 'core.component.preview-pdf.first-page': 'Trang đầu',\n 'core.component.preview-pdf.prev-page': 'Trang trước',\n 'core.component.preview-pdf.next-page': 'Trang tiếp',\n 'core.component.preview-pdf.last-page': 'Trang cuối',\n 'core.component.preview-pdf.zoom-in': 'Phóng to',\n 'core.component.preview-pdf.zoom-out': 'Thu nhỏ',\n 'core.component.preview-pdf.fit-page': 'Vừa trang',\n 'core.component.preview-pdf.fit-width': 'Vừa rộng',\n 'core.component.preview-pdf.actual-size': 'Kích thước thật',\n 'core.component.preview-pdf.rotate': 'Xoay',\n 'core.component.preview-pdf.scroll-page': 'Từng trang',\n 'core.component.preview-pdf.scroll-continuous': 'Cuộn liên tục',\n 'core.component.preview-pdf.print': 'In',\n 'core.component.preview-pdf.download': 'Tải xuống',\n 'core.component.preview-pdf.fullscreen': 'Toàn màn hình',\n 'core.component.preview-pdf.toggle-sidebar': 'Hiện/ẩn thanh bên',\n 'core.component.preview-pdf.page-of': 'trang {current} / {total}',\n 'core.component.preview-pdf.empty.title': 'Không có tài liệu',\n 'core.component.preview-pdf.empty.subtitle': 'Chưa có file PDF nào để hiển thị',\n 'core.component.preview-pdf.loading': 'Đang tải tài liệu...',\n 'core.component.preview-pdf.loading.page': 'Đang xử lý trang {current} / {total}',\n 'core.component.preview-pdf.error.invalid.title': 'Không tải được tài liệu',\n 'core.component.preview-pdf.error.invalid.body': 'File PDF có thể bị hỏng. Vui lòng kiểm tra lại file.',\n 'core.component.preview-pdf.error.password.title': 'Tài liệu được bảo vệ',\n 'core.component.preview-pdf.error.password.body': 'File PDF này yêu cầu mật khẩu để mở.',\n 'core.component.preview-pdf.error.network.title': 'Không kết nối được',\n 'core.component.preview-pdf.error.network.body': 'Không thể tải file từ máy chủ. Vui lòng thử lại sau.',\n 'core.component.preview-pdf.error.unknown.title': 'Đã có lỗi xảy ra',\n 'core.component.preview-pdf.error.unknown.body': 'Vui lòng thử lại hoặc tải file gốc về để xem.',\n 'core.component.preview-pdf.error.retry': 'Thử lại',\n 'core.component.preview-pdf.error.download-raw': 'Tải file gốc',\n 'core.component.preview-pdf.search': 'Tìm kiếm',\n 'core.component.preview-pdf.search-placeholder': 'Tìm trong tài liệu...',\n 'core.component.preview-pdf.search-case': 'Phân biệt hoa thường',\n 'core.component.preview-pdf.search-whole': 'Từ nguyên',\n 'core.component.preview-pdf.search-no-results': 'Không tìm thấy',\n 'core.component.preview-pdf.search-results-count': '{count} kết quả cho \"{term}\"',\n 'core.component.preview-pdf.search-truncated': 'Đang hiển thị {count} kết quả đầu tiên. Hãy thu hẹp nội dung tìm kiếm.',\n 'core.component.preview-pdf.search-prev': 'Kết quả trước',\n 'core.component.preview-pdf.search-next': 'Kết quả tiếp',\n 'core.component.preview-pdf.search-close': 'Đóng tìm kiếm',\n\n // ---- Component: table ----\n 'core.component.table.setup': 'Thiết lập bảng',\n 'core.component.table.column-header': 'Tiêu đề cột',\n 'core.component.table.width': 'Rộng',\n 'core.component.table.fixed': 'Cố định',\n 'core.component.table.char-limit': 'Giới hạn ký tự',\n 'core.component.table.skip': 'Bỏ qua',\n 'core.component.table.apply': 'Áp dụng',\n 'core.component.table.filter': 'Bộ lọc',\n 'core.component.table.clear-selection': 'Xóa lựa chọn',\n 'core.component.table.customize': 'Tùy chỉnh',\n 'core.component.table.search': 'Tìm kiếm',\n 'core.component.table.reload': 'Tải lại',\n 'core.component.table.setup-short': 'Thiết lập',\n 'core.component.table.no-results': 'Không có kết quả phù hợp',\n 'core.component.table.no-results-hint': 'Vui lòng tìm kiếm hoặc lọc theo tiêu chí khác',\n 'core.component.table.choose-filter-hint': 'Vui lòng chọn bộ lọc để bắt đầu',\n 'core.component.table.no-data': 'Chưa có dữ liệu',\n 'core.component.table.export-excel': 'Xuất excel',\n 'core.component.table.exporting': 'Đang xuất...{percent}%',\n 'core.component.table.export': 'Xuất dữ liệu',\n 'core.component.table.export-csv': 'Xuất CSV',\n 'core.component.table.showing': 'Đang hiển thị:',\n 'core.component.table.paginator.first-page': 'Trang đầu',\n 'core.component.table.paginator.last-page': 'Trang cuối',\n 'core.component.table.paginator.items-per-page': 'Đang hiển thị',\n 'core.component.table.paginator.next-page': 'Trang sau',\n 'core.component.table.paginator.previous-page': 'Trang trước',\n 'core.component.table.error-occurred': 'Có lỗi xảy ra',\n 'core.component.table.not-an-array': 'Dữ liệu không phải là một mảng',\n 'core.component.table.config.confirm-reset': 'Xác nhận đưa tất cả thiết lập về mặc định',\n 'core.component.table.popup-export.select-columns': 'Vui lòng chọn cột dữ liệu để xuất',\n 'core.component.table.selector-action.default-msg': 'dữ liệu được chọn',\n 'core.component.tab-router.too-many-tabs': 'Bạn đã mở quá nhiều tab.',\n\n // ---- Component: upload-file ----\n 'core.component.upload-file.upload': 'Tải file',\n 'core.component.upload-file.error-occurred': 'Có lỗi xảy ra',\n 'core.component.upload-file.please-upload': 'Vui lòng tải lên tệp/ảnh',\n 'core.component.upload-file.desc-format-and-size': 'Định dạng: {exts} và tối đa: {maxSize}MB',\n 'core.component.upload-file.desc-format': 'Định dạng: {exts}',\n 'core.component.upload-file.desc-max-size': 'Tối đa: {maxSize}MB',\n 'core.component.upload-file.not-image': '[{name}] Tệp tải lên không phải là ảnh',\n 'core.component.upload-file.invalid-format': '[{name}] Tệp tải lên không đúng định dạng: {exts}',\n 'core.component.upload-file.size-exceeded': '[{name}] Kích thước tệp tối đa: {maxSize} MB',\n 'core.component.upload-file.upload-failed': 'Có lỗi xảy ra trong quá trình tải lên tệp',\n 'core.component.upload-file.too-many-files': 'Bạn đã chọn quá nhiều file. Vui lòng kiểm tra lại số lượng',\n 'core.component.upload-file.confirm-delete-message': 'Bạn có muốn xóa file này không? Thao tác này không thể hoàn tác',\n 'core.component.upload-file.confirm-delete-title': 'Xác nhận xóa?',\n 'core.component.upload-file.confirm-yes': 'Xác nhận',\n 'core.component.upload-file.confirm-no': 'Hủy',\n 'core.component.upload-file.no-configuration':\n 'Vui lòng inject SD_UPLOAD_FILE_CONFIGURATION hoặc truyền [upload] trực tiếp vào component',\n 'core.component.upload-file.no-configuration-key':\n \"Không tìm thấy upload configuration theo key='{key}'. Vui lòng kiểm tra providers hoặc truyền [upload] trực tiếp\",\n 'core.component.upload-file.preview-title': 'Xem ảnh',\n\n // ---- Module: layout (sidebar / user menu) ----\n 'core.module.layout.user.change-password': 'Đổi mật khẩu',\n 'core.module.layout.user.logout': 'Đăng xuất',\n 'core.module.layout.user.update-profile': 'Chỉnh sửa hồ sơ',\n 'core.module.layout.user.setting': 'Thiết lập',\n 'core.module.layout.user.notification': 'Thông báo',\n 'core.module.layout.sidebar.search': 'Tìm kiếm',\n 'core.module.layout.sidebar.toggle': 'Thu gọn hoặc mở rộng thanh điều hướng',\n\n // ---- Module: layout (greeting + weekday) ----\n 'core.module.layout.greeting.hello': 'Xin chào, {name}',\n 'core.module.layout.weekday.0': 'Chủ Nhật',\n 'core.module.layout.weekday.1': 'Thứ 2',\n 'core.module.layout.weekday.2': 'Thứ 3',\n 'core.module.layout.weekday.3': 'Thứ 4',\n 'core.module.layout.weekday.4': 'Thứ 5',\n 'core.module.layout.weekday.5': 'Thứ 6',\n 'core.module.layout.weekday.6': 'Thứ 7',\n 'core.module.layout.today-info.format': '{weekday}, ngày {date}',\n\n // ---- Module: layout (forbidden page) ----\n 'core.module.layout.forbidden.title': 'Không được phép truy cập',\n 'core.module.layout.forbidden.message': 'Bạn không có quyền truy cập vào trang này. Liên hệ với quản trị viên hoặc quay lại trang chủ',\n 'core.module.layout.forbidden.back-home': 'Quay lại trang chủ',\n\n // ---- Module: layout (not-found page) ----\n 'core.module.layout.not-found.title': '404 - Trang không tồn tại',\n 'core.module.layout.not-found.message':\n 'Trang bạn tìm không tồn tại hoặc đã bị xóa. Vui lòng kiểm tra lại địa chỉ URL hoặc quay lại trang chủ để tiếp tục.',\n 'core.module.layout.not-found.back': 'Quay trở lại',\n\n // ---- Module: layout (home page) ----\n 'core.module.layout.home.tab-name': 'Trang chủ',\n 'core.module.layout.not-found.tab-name': 'Không tìm thấy trang',\n 'core.module.layout.forbidden.tab-name': 'Không có quyền',\n 'core.module.layout.home.feature.data': 'Dữ liệu',\n 'core.module.layout.home.feature.reports': 'Báo cáo',\n 'core.module.layout.home.feature.users': 'Người dùng',\n 'core.module.layout.home.feature.workflow': 'Quy trình',\n 'core.module.layout.home.feature.audit': 'Kiểm toán',\n 'core.module.layout.home.feature.integration': 'Tích hợp',\n\n // ---- Module: layout (mock fallback khi không provide SD_LAYOUT_CONFIGURATION) ----\n 'core.module.layout.mock.user.full-name': 'Người dùng demo',\n\n // ---- Module: generic (generic-select) ----\n 'core.module.generic.generic-select.detail-link': 'chi tiết',\n};\n","import type { EN_MESSAGES } from './en';\n\nexport const ZH_MESSAGES: Record<keyof typeof EN_MESSAGES, string> = {\n 'core.common.cancel': '取消',\n 'core.common.close': '关闭',\n 'core.common.reload': '重新加载页面',\n 'core.test.greet': '你好 {name}',\n\n // ---- Validators (VALIDATION_PATTERNS in @sdcorejs/utils/constants) ----\n 'core.validator.email.name': '邮箱',\n 'core.validator.email.error': '邮箱格式不正确',\n 'core.validator.phone.name': '电话',\n 'core.validator.phone.error': '电话号码格式不正确',\n // Legacy aliases\n 'core.validator.phone-vn.name': '越南电话',\n 'core.validator.phone-vn.error': '越南电话号码格式不正确',\n 'core.validator.cccd.name': '身份证号',\n 'core.validator.cccd.error': '身份证号格式不正确(12位数字)',\n 'core.validator.id-vn.name': '身份证 / 护照',\n 'core.validator.id-vn.error': '身份证或护照号码格式不正确',\n 'core.validator.vn-phone.name': '越南电话',\n 'core.validator.vn-phone.error': '越南电话号码格式不正确',\n 'core.validator.vn-id.name': '身份证号',\n 'core.validator.vn-id.error': '身份证号格式不正确(12位数字)',\n 'core.validator.passport.name': '护照',\n 'core.validator.passport.error': '护照号码格式不正确(1个字母 + 7位数字)',\n 'core.validator.vn-id-or-passport.name': '身份证 / 护照',\n 'core.validator.vn-id-or-passport.error': '身份证或护照号码格式不正确',\n 'core.validator.time.name': '时间',\n 'core.validator.time.error': '时间格式不正确(HH:mm 格式)',\n 'core.validator.url.name': 'URL',\n 'core.validator.url.error': 'URL 格式不正确',\n 'core.validator.domain.name': '域名',\n 'core.validator.domain.error': '域名格式不正确',\n 'core.validator.ipv4.name': 'IPv4',\n 'core.validator.ipv4.error': 'IPv4 地址格式不正确',\n 'core.validator.ipv6.name': 'IPv6',\n 'core.validator.ipv6.error': 'IPv6 地址格式不正确',\n 'core.validator.image-url.name': '图片 URL',\n 'core.validator.image-url.error': '图片 URL 格式不正确',\n 'core.validator.slug.name': 'Slug',\n 'core.validator.slug.error': 'Slug 格式不正确',\n 'core.validator.number.name': '数字',\n 'core.validator.number.error': '数字格式不正确',\n 'core.validator.integer.name': '整数',\n 'core.validator.integer.error': '整数格式不正确',\n 'core.validator.decimal.name': '小数',\n 'core.validator.decimal.error': '小数格式不正确',\n 'core.validator.positive-number.name': '正数',\n 'core.validator.positive-number.error': '必须为正数',\n 'core.validator.uuid.name': 'UUID',\n 'core.validator.uuid.error': 'UUID 格式不正确',\n 'core.validator.code-16.name': '16 位代码',\n 'core.validator.code-16.error': '16 位代码格式不正确',\n 'core.validator.code-32.name': '32 位代码',\n 'core.validator.code-32.error': '32 位代码格式不正确',\n 'core.validator.hex-color.name': 'HEX 颜色',\n 'core.validator.hex-color.error': 'HEX 颜色格式不正确',\n 'core.validator.base64.name': 'Base64',\n 'core.validator.base64.error': 'Base64 字符串格式不正确',\n\n // ---- Operators (operator.model.ts) ----\n 'core.operator.equal.display': '等于',\n 'core.operator.not-equal.display': '不等于',\n 'core.operator.greater-than.display': '大于',\n 'core.operator.less-than.display': '小于',\n 'core.operator.greater-or-equal.display': '大于或等于',\n 'core.operator.less-or-equal.display': '小于或等于',\n 'core.operator.contain.display': '包含',\n 'core.operator.not-contain.display': '不包含',\n 'core.operator.start-with.display': '开始于',\n 'core.operator.not-start-with.display': '不开始于',\n 'core.operator.end-with.display': '结束于',\n 'core.operator.not-end-with.display': '不结束于',\n 'core.operator.in.display': '属于',\n 'core.operator.not-in.display': '不属于',\n 'core.operator.between.display': '介于之间',\n 'core.operator.null.display': '为空',\n 'core.operator.not-null.display': '不为空',\n\n // ---- Global error handler ----\n 'core.handler.global-error.update-title': '系统有新的更新',\n 'core.handler.global-error.update-body': '当前版本已过期,无法加载资源。\\n请点击确定重新加载页面。',\n\n // ---- Interceptor: no-internet ----\n 'core.interceptor.no-internet.offline': '没有网络连接,等待连接中...',\n 'core.interceptor.no-internet.cors-error': '无法连接到服务器(CORS 或配置错误)。',\n 'core.interceptor.no-internet.maintenance': '服务器正在维护中,请稍后再试。',\n 'core.interceptor.no-internet.restored': '网络连接已恢复。',\n\n // ---- Service: excel ----\n 'core.excel.cannot-read-file': '无法读取文件内容',\n 'core.excel.no-sheet': 'Excel 文件没有数据表',\n\n // ---- Service: docx ----\n 'core.docx.invalid-format': '格式不正确,请选择 DOC 或 DOCX 格式的模板',\n 'core.docx.size-exceeded': '模板文件大小超出支持范围,请重试',\n 'core.docx.convert-error': '转换 DOCX 文件时发生错误',\n\n // ---- Service: notify (toast) ----\n 'core.notify.type.success': '成功',\n 'core.notify.type.info': '信息',\n 'core.notify.type.warning': '警告',\n 'core.notify.type.error': '错误',\n 'core.notify.show-more': '显示更多 ({count})',\n 'core.notify.show-less': '收起',\n\n // ---- Service: confirm ----\n 'core.confirm.title': '确认',\n 'core.confirm.yes': '确定',\n 'core.confirm.no': '取消',\n 'core.confirm.yes-short': '是',\n 'core.confirm.no-short': '否',\n\n // ---- Directive: hover-copy ----\n 'core.directive.hover-copy.tooltip': '复制',\n\n // ---- Forms: input ----\n 'core.form.input.required': '请输入内容',\n 'core.form.input.maxlength': '最大字符数: {max}',\n 'core.form.input.invalid-pattern': '格式不正确',\n 'core.form.input.exceeded': '已超过最大字符数',\n 'core.form.input.mask-incomplete': '输入值不完整',\n 'core.form.input.mask-invalid': '输入值包含无效字符',\n\n // ---- Forms: autocomplete ----\n 'core.form.autocomplete.required': '请输入内容',\n\n // ---- Forms: chip ----\n 'core.form.chip.required': '请输入内容',\n 'core.form.chip.minlength': '请至少输入 {min} 个值',\n 'core.form.chip.maxlength': '最多输入 {max} 个值',\n\n // ---- Forms: chip-calendar ----\n 'core.form.chip-calendar.required': '请输入内容',\n 'core.form.chip-calendar.minlength': '请至少输入 {min} 个值',\n 'core.form.chip-calendar.maxlength': '最多输入 {max} 个值',\n\n // ---- Forms: date ----\n 'core.form.date.required': '请输入内容',\n 'core.form.date.min-date': '最小日期: {date}',\n 'core.form.date.max-date': '最大日期: {date}',\n 'core.form.date.parse-error': '解析错误: {text}',\n 'core.form.date.invalid-format': '格式不正确',\n\n // ---- Forms: date-range ----\n 'core.form.date-range.required': '请输入内容',\n 'core.form.date-range.invalid-min': '开始日期无效(低于限制)',\n 'core.form.date-range.invalid-max': '结束日期无效(高于限制)',\n 'core.form.date-range.from': '从',\n 'core.form.date-range.to': '至',\n\n // ---- Forms: datetime ----\n 'core.form.datetime.required': '请输入内容',\n 'core.form.datetime.min-date': '最小日期: {date}',\n 'core.form.datetime.max-date': '最大日期: {date}',\n 'core.form.datetime.invalid-format': '格式不正确',\n 'core.form.datetime.now': '现在',\n 'core.form.datetime.confirm': '确认',\n\n // ---- Forms: entity-picker / tree-select ----\n 'core.form.entity-picker.placeholder': '选择实体',\n 'core.form.entity-picker.modal-title': '选择实体',\n 'core.form.entity-picker.value': '值',\n 'core.form.entity-picker.clear': '清除选择',\n 'core.form.entity-picker.add': '添加',\n 'core.form.entity-picker.cancel': '取消',\n 'core.form.entity-picker.apply': '应用',\n 'core.form.tree-select.placeholder': '选择树节点',\n 'core.form.tree-select.modal-title': '选择树节点',\n 'core.form.tree-select.clear': '清除选择',\n 'core.form.tree-select.search': '搜索树',\n 'core.form.tree-select.cancel': '取消',\n 'core.form.tree-select.apply': '应用',\n 'core.component.tree.retry': '重试',\n 'core.service.unsaved-changes.message': '您有未保存的更改。是否放弃更改并继续?',\n 'core.component.job-progress.status.idle': '就绪',\n 'core.component.job-progress.status.queued': '排队中',\n 'core.component.job-progress.status.running': '进行中',\n 'core.component.job-progress.status.succeeded': '已完成',\n 'core.component.job-progress.status.failed': '失败',\n 'core.component.job-progress.status.cancelled': '已取消',\n 'core.component.job-progress.cancel': '取消',\n 'core.component.job-progress.retry': '重试',\n 'core.component.audit-diff.label': '审计变更',\n 'core.component.audit-diff.field': '字段',\n 'core.component.audit-diff.before': '变更前',\n 'core.component.audit-diff.after': '变更后',\n 'core.component.audit-diff.empty': '没有变更',\n 'core.component.audit-diff.kind.added': '已添加',\n 'core.component.audit-diff.kind.removed': '已删除',\n 'core.component.audit-diff.kind.changed': '已更改',\n 'core.component.audit-diff.kind.unchanged': '未更改',\n 'core.component.audit-diff.value.label': '值',\n 'core.component.audit-diff.value.not-set': '未设置',\n 'core.component.audit-diff.value.undefined': '未定义',\n 'core.component.audit-diff.value.null': '空值',\n 'core.component.audit-diff.value.true': '是',\n 'core.component.audit-diff.value.false': '否',\n\n // ---- Forms: time ----\n 'core.form.time.required': '请输入时间',\n 'core.form.time.invalid': '请输入 HH:mm 格式的有效时间',\n 'core.form.time.min': '时间不得早于 {min}',\n 'core.form.time.max': '时间不得晚于 {max}',\n 'core.form.time.step': '时间必须符合 {step} 分钟间隔',\n 'core.form.time.open-picker': '打开时间选择器',\n 'core.form.time.confirm': '确认',\n 'core.form.time.clear': '清除时间',\n\n // ---- Forms: time-range ----\n 'core.form.time-range.required': '请输入开始和结束时间',\n 'core.form.time-range.incomplete': '请输入两个时间,或启用开放时间范围',\n 'core.form.time-range.range': '开始时间不得晚于结束时间',\n 'core.form.time-range.invalid': '请输入 HH:mm 格式的有效时间',\n 'core.form.time-range.min': '时间不得早于 {min}',\n 'core.form.time-range.max': '时间不得晚于 {max}',\n 'core.form.time-range.step': '时间必须符合 {step} 分钟间隔',\n 'core.form.time-range.from': '开始',\n 'core.form.time-range.to': '结束',\n 'core.form.time-range.clear': '清除时间范围',\n\n // ---- Forms: time-spinner ----\n 'core.form.time-spinner.hour': '时',\n 'core.form.time-spinner.minute': '分',\n 'core.form.time-spinner.second': '秒',\n 'core.form.time-spinner.increase-hour': '增加小时',\n 'core.form.time-spinner.decrease-hour': '减少小时',\n 'core.form.time-spinner.increase-minute': '增加分钟',\n 'core.form.time-spinner.decrease-minute': '减少分钟',\n 'core.form.time-spinner.increase-second': '增加秒',\n 'core.form.time-spinner.decrease-second': '减少秒',\n\n // ---- Forms: input-number ----\n 'core.form.input-number.required': '请输入内容',\n 'core.form.input-number.min': '值不能小于 {min}',\n 'core.form.input-number.max': '值不能大于 {max}',\n\n // ---- Forms: radio ----\n 'core.form.radio.required': '请选择',\n\n // ---- Forms: switch ----\n 'core.form.switch.on': '开',\n 'core.form.switch.off': '关',\n\n // ---- Forms: checkbox ----\n 'core.form.checkbox.checked': '是',\n 'core.form.checkbox.unchecked': '否',\n\n // ---- Forms: select ----\n 'core.form.select.required': '请选择',\n\n // ---- Forms: textarea ----\n 'core.form.textarea.required': '请输入内容',\n 'core.form.textarea.maxlength': '最大字符数: {max}',\n 'core.form.textarea.invalid-pattern': '格式不正确',\n 'core.form.textarea.exceeded': '已超过最大字符数',\n\n // ---- Component: editor ----\n 'core.component.editor.required': '请输入内容',\n 'core.component.editor.maxlength': '最大字符数: {max}',\n 'core.component.editor.image.invalid-format': '不允许的文件格式 \".{format}\"。允许的格式: {allowed}',\n 'core.component.editor.image.size-exceeded': '文件大小 {sizeMB}MB 超过限制 {maxSizeMB}MB',\n 'core.component.editor.image.min-width': '图片宽度 {width}px 低于最小值 {min}px',\n 'core.component.editor.image.min-height': '图片高度 {height}px 低于最小值 {min}px',\n 'core.component.editor.image.max-width': '图片宽度 {width}px 超过限制 {max}px',\n 'core.component.editor.image.max-height': '图片高度 {height}px 超过限制 {max}px',\n 'core.component.editor.image.max-per-selection': '每次最多选择 {max} 张图片',\n\n // ---- Component: document-builder ----\n 'core.component.document-builder.page-number.current': '当前页码',\n 'core.component.document-builder.page-number.total': '总页数',\n 'core.component.document-builder.ck-comment.label': '评论',\n 'core.component.document-builder.ck-comment.text-too-long': '文本过长({length} 字符)。最多 {max} 字符。',\n 'core.component.document-builder.variable.not-allowed': '不允许在文本中添加变量',\n 'core.component.document-builder.variable.invalid-data': '变量数据无效',\n\n // ---- Component: form-builder ----\n 'core.component.form-builder.field-key': '字段键',\n 'core.component.form-builder.display': '显示',\n 'core.component.form-builder.general': '常规',\n 'core.component.form-builder.visible-when': '显示条件',\n 'core.component.form-builder.required': '必填',\n 'core.component.form-builder.label': '标签',\n 'core.component.form-builder.disabled': '禁用',\n 'core.component.form-builder.disabled-when': '禁用条件',\n 'core.component.form-builder.hidden-when': '隐藏条件',\n 'core.component.form-builder.validation': '校验',\n 'core.component.form-builder.required-when': '必填条件',\n 'core.component.form-builder.confirm': '确认',\n 'core.component.form-builder.delete': '删除',\n 'core.component.form-builder.save': '保存',\n 'core.component.form-builder.hint': '提示',\n 'core.component.form-builder.parameter': '参数',\n 'core.component.form-builder.add-field': '添加字段',\n 'core.component.form-builder.data': '数据',\n 'core.component.form-builder.query-condition': '查询条件',\n 'core.component.form-builder.set-query-value': '设置查询值',\n 'core.component.form-builder.value-source-field': '取值字段',\n 'core.component.form-builder.assign-parameter': '分配参数',\n 'core.component.form-builder.template-data': '模板数据',\n 'core.component.form-builder.set-expression': '设置表达式',\n 'core.component.form-builder.condition-group': '条件组',\n 'core.component.form-builder.condition': '条件',\n 'core.component.form-builder.layout': '布局',\n 'core.component.form-builder.maxlength': '最大字符数',\n 'core.component.form-builder.assign-parameter-value': '分配参数值',\n 'core.component.form-builder.parameter-name': '参数名',\n 'core.component.form-builder.parameter-value': '参数值',\n 'core.component.form-builder.assign-value': '赋值',\n 'core.component.form-builder.add-data': '添加数据',\n 'core.component.form-builder.data-api': 'API 数据',\n 'core.component.form-builder.data-static': '静态数据',\n 'core.component.form-builder.set-on-change-assign': '设置变更时赋值',\n 'core.component.form-builder.target-field': '目标字段',\n 'core.component.form-builder.target-value': '目标值',\n 'core.component.form-builder.column-data': '列数据',\n 'core.component.form-builder.add-column': '添加列',\n 'core.component.form-builder.column-config': '列配置',\n 'core.component.form-builder.column-name': '列名',\n 'core.component.form-builder.width': '宽度',\n 'core.component.form-builder.data-type': '数据类型',\n 'core.component.form-builder.show-when-true': '为 TRUE 时显示',\n 'core.component.form-builder.show-when-false': '为 FALSE 时显示',\n 'core.component.form-builder.column-list': '列列表',\n 'core.component.form-builder.yes-no': '是/否',\n 'core.component.form-builder.config-validation-error-warning': '配置错误/警告校验',\n 'core.component.form-builder.message-type': '消息类型',\n 'core.component.form-builder.message-display': '显示消息',\n 'core.component.form-builder.condition-expression': '条件表达式',\n 'core.component.form-builder.add-validation': '添加校验',\n 'core.component.form-builder.expression': '表达式',\n 'core.component.form-builder.available-methods': '可用方法',\n 'core.component.form-builder.format': '格式',\n 'core.component.form-builder.time': '时间',\n 'core.component.form-builder.content': '内容',\n 'core.component.form-builder.min': '最小值',\n 'core.component.form-builder.max': '最大值',\n 'core.component.form-builder.vertical': '垂直',\n 'core.component.form-builder.multiple': '多选',\n 'core.component.form-builder.default-value': '默认值',\n 'core.component.form-builder.type': '类型',\n 'core.component.form-builder.file': '文件',\n 'core.component.form-builder.image': '图片',\n 'core.component.form-builder.max-files': '最大文件/图片数',\n 'core.component.form-builder.size-mb': '大小 (MB)',\n 'core.component.form-builder.format-example': '格式(例如: png,jpg ...)',\n 'core.component.form-builder.source-mobile': '来源(移动端)',\n 'core.component.form-builder.config-variable': '配置变量',\n 'core.component.form-builder.config-validation-warning-error': '配置警告/错误校验',\n 'core.component.form-builder.back-to-design': '返回设计',\n 'core.component.form-builder.preview': '预览',\n 'core.component.form-builder.drag-vertically': '上下拖动',\n 'core.component.form-builder.unset-readonly': '取消只读',\n 'core.component.form-builder.set-readonly': '只读',\n 'core.component.form-builder.duplicate': '复制',\n 'core.component.form-builder.show': '显示',\n 'core.component.form-builder.hide': '隐藏',\n 'core.component.form-builder.flex': '弹性',\n 'core.component.form-builder.display-label': '显示标签',\n 'core.component.form-builder.attribute': '属性',\n 'core.component.form-builder.add-variable': '添加变量',\n 'core.component.form-builder.add-new': '新增',\n 'core.component.form-builder.detail': '详情',\n 'core.component.form-builder.create-update': '新建/更新',\n 'core.component.form-builder.default': '默认',\n 'core.component.form-builder.show-more': '查看更多',\n 'core.component.form-builder.show-less': '收起',\n 'core.component.inform.show-more': '展开',\n 'core.component.inform.show-less': '收起',\n 'core.component.data-state.loading.title': '正在加载',\n 'core.component.data-state.loading.message': '正在加载数据,请稍候。',\n 'core.component.data-state.empty.title': '暂无数据',\n 'core.component.data-state.empty.message': '目前没有可显示的数据。',\n 'core.component.data-state.error.title': '无法加载数据',\n 'core.component.data-state.error.message': '发生错误,请重试。',\n 'core.component.data-state.forbidden.title': '访问被拒绝',\n 'core.component.data-state.forbidden.message': '您没有权限查看此内容。',\n 'core.component.data-state.retry': '重试',\n 'core.component.form-builder.row-overflow': '无法移动到该行,因为总宽度超过 12 列',\n 'core.component.form-builder.upload-source.all': '全部',\n 'core.component.form-builder.upload-source.photo-library': '从相册选择',\n 'core.component.form-builder.upload-source.capture': '拍照',\n // Form-builder UI v2 (M3 redesign)\n 'core.component.form-builder.components': '组件',\n 'core.component.form-builder.search-components': '搜索组件…',\n 'core.component.form-builder.view-json': '查看 JSON',\n 'core.component.form-builder.design': '设计',\n 'core.component.form-builder.preview-runtime': '预览 · 运行时',\n 'core.component.form-builder.cancel': '取消',\n 'core.component.form-builder.submit': '提交',\n 'core.component.form-builder.empty-title': '拖动组件到此处开始',\n 'core.component.form-builder.empty-hint': '从左侧面板拖动字段构建表单,或按',\n 'core.component.form-builder.conditional': '条件',\n 'core.component.form-builder.group-drop-here': '将字段拖到此处以添加到该分组',\n 'core.component.form-builder.edit-group': '编辑分组',\n 'core.component.form-builder.group-empty-hint': '点击详情以向该分组添加字段',\n 'core.component.form-builder.hidden': '已隐藏',\n 'core.component.form-builder.read-only': '只读',\n 'core.component.form-builder.untitled': '未命名',\n 'core.component.form-builder.no-selection-title': '未选中任何项',\n 'core.component.form-builder.no-selection-hint': '在画布上选择一个组件以编辑其属性。',\n 'core.component.form-builder.group-children': '子项',\n 'core.component.form-builder.group-icon': '图标',\n 'core.component.form-builder.group-accent-color': '强调色',\n 'core.component.form-builder.group-no-children': '尚无字段。请向此分组添加或拖入字段。',\n 'core.component.form-builder.break': '换行',\n\n // ---- Component: code-editor ----\n 'core.component.code-editor.copied': '已复制!',\n 'core.component.code-editor.copy': '复制代码',\n\n // ---- Component: history ----\n 'core.component.history.by': '操作人',\n\n // ---- Component: import-excel ----\n 'core.component.import-excel.title': '导入 Excel 数据',\n 'core.component.import-excel.see-all': '查看全部',\n 'core.component.import-excel.valid-rows': '有效行数',\n 'core.component.import-excel.error-rows': '错误行数',\n 'core.component.import-excel.warning-rows': '警告行数',\n 'core.component.import-excel.valid-data': '有效数据',\n 'core.component.import-excel.download-template-tooltip': '点击下载模板',\n 'core.component.import-excel.upload': '上传',\n 'core.component.import-excel.download': '下载',\n 'core.component.import-excel.confirm-save': '确认并保存',\n 'core.component.import-excel.status': '状态',\n 'core.component.import-excel.no-data-upload': '未上传任何数据',\n 'core.component.import-excel.click-here-template': '点击此处下载模板',\n 'core.component.import-excel.no-data-in-file': '文件中没有数据',\n 'core.component.import-excel.row-limit': '上传上限为 {limit} 行',\n 'core.component.import-excel.required': '必填数据',\n 'core.component.import-excel.min-length': '最小字符串长度: {min}',\n 'core.component.import-excel.max-length': '最大字符串长度: {max}',\n 'core.component.import-excel.not-a-number': '{value} 不是有效的数字',\n 'core.component.import-excel.below-min': '{value} 低于最小值: {min}',\n 'core.component.import-excel.above-max': '{value} 高于最大值: {max}',\n 'core.component.import-excel.invalid-bool': '请输入有效值 (true, false, 1, 0)',\n 'core.component.import-excel.invalid-value': '值 {value} 无效',\n 'core.component.import-excel.value-not-in-list': '值 {value} 不在允许列表 [{list}] 中',\n 'core.component.import-excel.invalid-date-format': '日期 {value} 不符合格式 {format}',\n 'core.component.import-excel.generic-error': '发生错误',\n 'core.component.import-excel.notify-title': '通知',\n 'core.component.import-excel.message-column': '消息',\n 'core.component.import-excel.success': '成功',\n\n // ---- Component: preview-image ----\n 'core.component.preview-image.no-image': '没有图片信息',\n 'core.component.preview-image.title': '图片预览',\n 'core.component.preview-image.no-image-hint': '暂无可显示的图片',\n 'core.component.preview-image.load-error': '无法加载图片',\n 'core.component.preview-image.load-error-hint': '图片文件可能已被删除或路径无效',\n 'core.component.preview-image.retry': '重试',\n 'core.component.preview-image.close': '关闭',\n 'core.component.preview-image.prev': '上一张',\n 'core.component.preview-image.next': '下一张',\n 'core.component.preview-image.zoom-in': '放大',\n 'core.component.preview-image.zoom-out': '缩小',\n 'core.component.preview-image.fit': '适应屏幕',\n 'core.component.preview-image.rotate': '旋转',\n 'core.component.preview-image.download': '下载',\n 'core.component.preview-image.fullscreen': '全屏',\n 'core.component.preview-image.loading': '正在加载图片...',\n 'core.component.preview-image.kbd-hint-nav': '切换图片',\n 'core.component.preview-image.kbd-hint-close': '关闭',\n\n // ---- Component: preview-pdf ----\n 'core.component.preview-pdf.title': '查看文档',\n 'core.component.preview-pdf.close': '关闭',\n 'core.component.preview-pdf.pages-count': '{count} 页',\n 'core.component.preview-pdf.tab.thumbnails': '页面',\n 'core.component.preview-pdf.tab.outline': '目录',\n 'core.component.preview-pdf.tab.search': '查找',\n 'core.component.preview-pdf.first-page': '首页',\n 'core.component.preview-pdf.prev-page': '上一页',\n 'core.component.preview-pdf.next-page': '下一页',\n 'core.component.preview-pdf.last-page': '末页',\n 'core.component.preview-pdf.zoom-in': '放大',\n 'core.component.preview-pdf.zoom-out': '缩小',\n 'core.component.preview-pdf.fit-page': '适合页面',\n 'core.component.preview-pdf.fit-width': '适合宽度',\n 'core.component.preview-pdf.actual-size': '实际大小',\n 'core.component.preview-pdf.rotate': '旋转',\n 'core.component.preview-pdf.scroll-page': '单页',\n 'core.component.preview-pdf.scroll-continuous': '连续滚动',\n 'core.component.preview-pdf.print': '打印',\n 'core.component.preview-pdf.download': '下载',\n 'core.component.preview-pdf.fullscreen': '全屏',\n 'core.component.preview-pdf.toggle-sidebar': '切换侧边栏',\n 'core.component.preview-pdf.page-of': '第 {current} / {total} 页',\n 'core.component.preview-pdf.empty.title': '没有文档',\n 'core.component.preview-pdf.empty.subtitle': '尚无可显示的 PDF 文件',\n 'core.component.preview-pdf.loading': '正在加载文档...',\n 'core.component.preview-pdf.loading.page': '正在处理第 {current} / {total} 页',\n 'core.component.preview-pdf.error.invalid.title': '无法加载文档',\n 'core.component.preview-pdf.error.invalid.body': 'PDF 文件可能已损坏。请检查文件。',\n 'core.component.preview-pdf.error.password.title': '受保护的文档',\n 'core.component.preview-pdf.error.password.body': '此 PDF 文件需要密码才能打开。',\n 'core.component.preview-pdf.error.network.title': '无法连接',\n 'core.component.preview-pdf.error.network.body': '无法从服务器加载文件。请稍后再试。',\n 'core.component.preview-pdf.error.unknown.title': '发生错误',\n 'core.component.preview-pdf.error.unknown.body': '请重试或下载原始文件查看。',\n 'core.component.preview-pdf.error.retry': '重试',\n 'core.component.preview-pdf.error.download-raw': '下载原始文件',\n 'core.component.preview-pdf.search': '搜索',\n 'core.component.preview-pdf.search-placeholder': '在文档中搜索...',\n 'core.component.preview-pdf.search-case': '区分大小写',\n 'core.component.preview-pdf.search-whole': '全词匹配',\n 'core.component.preview-pdf.search-no-results': '未找到结果',\n 'core.component.preview-pdf.search-results-count': '关于 \"{term}\" 的 {count} 个结果',\n 'core.component.preview-pdf.search-truncated': '正在显示前 {count} 个匹配项。请缩小搜索范围。',\n 'core.component.preview-pdf.search-prev': '上一个结果',\n 'core.component.preview-pdf.search-next': '下一个结果',\n 'core.component.preview-pdf.search-close': '关闭搜索',\n\n // ---- Component: table ----\n 'core.component.table.setup': '表格设置',\n 'core.component.table.column-header': '列标题',\n 'core.component.table.width': '宽度',\n 'core.component.table.fixed': '固定',\n 'core.component.table.char-limit': '字符限制',\n 'core.component.table.skip': '跳过',\n 'core.component.table.apply': '应用',\n 'core.component.table.filter': '筛选',\n 'core.component.table.clear-selection': '清除选择',\n 'core.component.table.customize': '自定义',\n 'core.component.table.search': '搜索',\n 'core.component.table.reload': '刷新',\n 'core.component.table.setup-short': '设置',\n 'core.component.table.no-results': '未找到匹配结果',\n 'core.component.table.no-results-hint': '请使用其他条件搜索或筛选',\n 'core.component.table.choose-filter-hint': '请先选择筛选条件',\n 'core.component.table.no-data': '暂无数据',\n 'core.component.table.export-excel': '导出 Excel',\n 'core.component.table.exporting': '正在导出...{percent}%',\n 'core.component.table.export': '导出数据',\n 'core.component.table.export-csv': '导出 CSV',\n 'core.component.table.showing': '显示:',\n 'core.component.table.paginator.first-page': '首页',\n 'core.component.table.paginator.last-page': '末页',\n 'core.component.table.paginator.items-per-page': '显示',\n 'core.component.table.paginator.next-page': '下一页',\n 'core.component.table.paginator.previous-page': '上一页',\n 'core.component.table.error-occurred': '发生错误',\n 'core.component.table.not-an-array': '数据不是数组',\n 'core.component.table.config.confirm-reset': '确认将所有设置恢复为默认值',\n 'core.component.table.popup-export.select-columns': '请选择要导出的列',\n 'core.component.table.selector-action.default-msg': '项已选择',\n 'core.component.tab-router.too-many-tabs': '您已打开过多标签页。',\n\n // ---- Component: upload-file ----\n 'core.component.upload-file.upload': '上传文件',\n 'core.component.upload-file.error-occurred': '发生错误',\n 'core.component.upload-file.please-upload': '请上传文件/图片',\n 'core.component.upload-file.desc-format-and-size': '格式: {exts},最大: {maxSize}MB',\n 'core.component.upload-file.desc-format': '格式: {exts}',\n 'core.component.upload-file.desc-max-size': '最大: {maxSize}MB',\n 'core.component.upload-file.not-image': '[{name}] 上传的文件不是图片',\n 'core.component.upload-file.invalid-format': '[{name}] 上传的文件格式不正确: {exts}',\n 'core.component.upload-file.size-exceeded': '[{name}] 最大文件大小: {maxSize} MB',\n 'core.component.upload-file.upload-failed': '文件上传过程中发生错误',\n 'core.component.upload-file.too-many-files': '所选文件数量过多,请检查数量',\n 'core.component.upload-file.confirm-delete-message': '是否要删除此文件?此操作无法撤销',\n 'core.component.upload-file.confirm-delete-title': '确认删除?',\n 'core.component.upload-file.confirm-yes': '确认',\n 'core.component.upload-file.confirm-no': '取消',\n 'core.component.upload-file.no-configuration': '请注入 SD_UPLOAD_FILE_CONFIGURATION 或将 [upload] 直接传入组件',\n 'core.component.upload-file.no-configuration-key': \"未找到 key='{key}' 对应的上传配置。请检查 providers 或直接传入 [upload]\",\n 'core.component.upload-file.preview-title': '图片预览',\n\n // ---- Module: layout (sidebar / user menu) ----\n 'core.module.layout.user.change-password': '修改密码',\n 'core.module.layout.user.logout': '退出登录',\n 'core.module.layout.user.update-profile': '更新个人资料',\n 'core.module.layout.user.setting': '设置',\n 'core.module.layout.user.notification': '通知',\n 'core.module.layout.sidebar.search': '搜索',\n 'core.module.layout.sidebar.toggle': '切换侧边栏',\n\n // ---- Module: layout (greeting + weekday) ----\n 'core.module.layout.greeting.hello': '你好,{name}',\n 'core.module.layout.weekday.0': '星期日',\n 'core.module.layout.weekday.1': '星期一',\n 'core.module.layout.weekday.2': '星期二',\n 'core.module.layout.weekday.3': '星期三',\n 'core.module.layout.weekday.4': '星期四',\n 'core.module.layout.weekday.5': '星期五',\n 'core.module.layout.weekday.6': '星期六',\n 'core.module.layout.today-info.format': '{weekday},{date}',\n\n // ---- Module: layout (forbidden page) ----\n 'core.module.layout.forbidden.title': '禁止访问',\n 'core.module.layout.forbidden.message': '您没有访问此页面的权限。请联系管理员或返回首页',\n 'core.module.layout.forbidden.back-home': '返回首页',\n\n // ---- Module: layout (not-found page) ----\n 'core.module.layout.not-found.title': '404 - 页面未找到',\n 'core.module.layout.not-found.message': '您正在查找的页面不存在或已被移除。请检查 URL 或返回首页继续。',\n 'core.module.layout.not-found.back': '返回',\n\n // ---- Module: layout (home page) ----\n 'core.module.layout.home.tab-name': '首页',\n 'core.module.layout.not-found.tab-name': '页面未找到',\n 'core.module.layout.forbidden.tab-name': '拒绝访问',\n 'core.module.layout.home.feature.data': '数据',\n 'core.module.layout.home.feature.reports': '报表',\n 'core.module.layout.home.feature.users': '用户',\n 'core.module.layout.home.feature.workflow': '流程',\n 'core.module.layout.home.feature.audit': '审计',\n 'core.module.layout.home.feature.integration': '集成',\n\n // ---- Module: layout (mock fallback when SD_LAYOUT_CONFIGURATION is not provided) ----\n 'core.module.layout.mock.user.full-name': '演示用户',\n\n // ---- Module: generic (generic-select) ----\n 'core.module.generic.generic-select.detail-link': '详情',\n};\n","import { EN_MESSAGES } from './en';\nimport { JA_MESSAGES } from './ja';\nimport { KO_MESSAGES } from './ko';\nimport { VI_MESSAGES } from './vi';\nimport { ZH_MESSAGES } from './zh';\nimport type { Language } from './i18n.types';\n\nexport const I18N_MESSAGES: Record<Language, Readonly<Record<string, string>>> = {\n vi: VI_MESSAGES,\n en: EN_MESSAGES,\n ja: JA_MESSAGES,\n ko: KO_MESSAGES,\n zh: ZH_MESSAGES,\n};\n","import { computed, inject, Injectable, signal, Signal, WritableSignal } from '@angular/core';\nimport { ISdCoreConfiguration, SD_CORE_CONFIGURATION } from '@sdcorejs/angular/configurations';\nimport { I18N_MESSAGES } from './i18n.messages';\nimport { I18N_STORAGE_KEY } from './i18n.token';\nimport { SUPPORTED_LANGUAGES, I18nParams, Language } from './i18n.types';\n\n@Injectable({ providedIn: 'root' })\nexport class I18nService {\n readonly #config = inject<ISdCoreConfiguration | null>(SD_CORE_CONFIGURATION, { optional: true });\n // Custom catalog (signal) — non-null khi user cấu hình `language: () => I18nCatalog`.\n // Khi non-null, `messages` computed sẽ ưu tiên trả về catalog này thay vì I18N_MESSAGES[lang].\n // PHẢI khai báo TRƯỚC `#language` vì `#resolveInitial()` chạy trong initializer của `#language`\n // và có thể gọi `this.#customMessages.set(...)` (sync custom catalog path).\n readonly #customMessages: WritableSignal<Readonly<Record<string, string>> | null> = signal(null);\n readonly #language: WritableSignal<Language> = signal(this.#resolveInitial());\n readonly #warned = new Set<string>();\n\n readonly language: Signal<Language> = this.#language.asReadonly();\n readonly messages: Signal<Readonly<Record<string, string>>> = computed(() => {\n const custom = this.#customMessages();\n if (custom) return custom;\n return I18N_MESSAGES[this.#language()];\n });\n\n // Đổi ngôn ngữ require reload trang (model \"reload trên đổi\"). Pipe `translate` là pure\n // nên không tự cập nhật runtime — phải reload để cache pipe được rebuild với messages mới.\n // Test có thể pass `{ reload: false }` để tránh reload page trong Karma.\n setLanguage(lang: Language, opts: { reload?: boolean } = { reload: true }): void {\n if (!SUPPORTED_LANGUAGES.includes(lang)) return;\n if (this.#language() === lang && !this.#customMessages()) return; // no-op if same and not in custom mode\n // User chọn 'vi'/'en' rõ ràng -> clear custom mode (override custom provider)\n this.#customMessages.set(null);\n try {\n localStorage.setItem(I18N_STORAGE_KEY, lang);\n } catch {\n /* ignore */\n }\n this.#language.set(lang);\n if (opts.reload && typeof window !== 'undefined') {\n window.location.reload();\n }\n }\n\n t(key: string, params?: I18nParams): string {\n // Đọc từ computed `messages()` để hỗ trợ cả custom catalog lẫn built-in lang.\n const raw = this.messages()[key] ?? this.#fallback(key);\n return this.#interpolate(raw, params);\n }\n\n #fallback(key: string): string {\n const vi = I18N_MESSAGES.vi[key];\n if (vi !== undefined) {\n this.#warnOnce(`[I18n] Missing key in ${this.#language()}: ${key} (fallback to vi)`);\n return vi;\n }\n this.#warnOnce(`[I18n] Missing key: ${key}`);\n return key;\n }\n\n #interpolate(raw: string, params?: I18nParams): string {\n if (!params) return raw;\n return raw.replace(/\\{(\\w+)\\}/g, (m, name) => (name in params ? String(params[name]) : m));\n }\n\n #warnOnce(msg: string): void {\n if (this.#warned.has(msg)) return;\n this.#warned.add(msg);\n console.warn(msg);\n }\n\n #resolveInitial(): Language {\n // 1) localStorage (only 'vi'/'en' supported there) — luôn ưu tiên cao nhất\n try {\n const stored = localStorage.getItem(I18N_STORAGE_KEY) as Language | null;\n if (stored && SUPPORTED_LANGUAGES.includes(stored)) return stored;\n } catch {\n /* ignore */\n }\n\n const configured = this.#config?.language;\n\n // 2) function — custom language provider (sync only)\n if (typeof configured === 'function') {\n this.#loadCustom(configured);\n return 'vi'; // language() vẫn báo 'vi' trong custom mode; messages() ưu tiên #customMessages\n }\n\n // 3) string — built-in lang\n if (configured && SUPPORTED_LANGUAGES.includes(configured as Language)) return configured as Language;\n\n // 4) default\n return 'vi';\n }\n\n #loadCustom(fn: () => Record<string, string>): void {\n try {\n const catalog = fn();\n this.#customMessages.set(catalog);\n } catch (err) {\n console.warn('[I18n] Custom language fn threw:', err);\n }\n }\n}\n","import { inject, Pipe, PipeTransform } from '@angular/core';\nimport { I18nService } from './i18n.service';\nimport { I18nParams } from './i18n.types';\n\n@Pipe({ name: 'translate', standalone: true })\nexport class TranslatePipe implements PipeTransform {\n readonly #i18n = inject(I18nService);\n\n transform(key: string, params?: I18nParams): string {\n return this.#i18n.t(key, params);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}