import { Language } from '@sdcorejs/angular/models'; export { Language, SUPPORTED_LANGUAGES } from '@sdcorejs/angular/models'; import * as i0 from '@angular/core'; import { Signal, PipeTransform } from '@angular/core'; declare const I18N_STORAGE_KEY = "sd-core.language"; declare const EN_MESSAGES: { readonly 'core.common.cancel': "Cancel"; readonly 'core.common.close': "Close"; readonly 'core.common.reload': "Reload page"; readonly 'core.test.greet': "Hello {name}"; readonly 'core.validator.email.name': "Email"; readonly 'core.validator.email.error': "Invalid email"; readonly 'core.validator.phone.name': "Phone"; readonly 'core.validator.phone.error': "Invalid phone number"; readonly 'core.validator.phone-vn.name': "VN phone"; readonly 'core.validator.phone-vn.error': "Invalid Vietnamese phone number"; readonly 'core.validator.cccd.name': "National ID"; readonly 'core.validator.cccd.error': "Invalid national ID (12 digits)"; readonly 'core.validator.id-vn.name': "National ID / Passport"; readonly 'core.validator.id-vn.error': "Invalid national ID or passport"; readonly 'core.validator.vn-phone.name': "VN phone"; readonly 'core.validator.vn-phone.error': "Invalid Vietnamese phone number"; readonly 'core.validator.vn-id.name': "National ID"; readonly 'core.validator.vn-id.error': "Invalid national ID (12 digits)"; readonly 'core.validator.passport.name': "Passport"; readonly 'core.validator.passport.error': "Invalid passport (1 letter + 7 digits)"; readonly 'core.validator.vn-id-or-passport.name': "National ID / Passport"; readonly 'core.validator.vn-id-or-passport.error': "Invalid national ID or passport"; readonly 'core.validator.time.name': "Time"; readonly 'core.validator.time.error': "Invalid time (format HH:mm)"; readonly 'core.validator.url.name': "URL"; readonly 'core.validator.url.error': "Invalid URL"; readonly 'core.validator.domain.name': "Domain"; readonly 'core.validator.domain.error': "Invalid domain"; readonly 'core.validator.ipv4.name': "IPv4"; readonly 'core.validator.ipv4.error': "Invalid IPv4 address"; readonly 'core.validator.ipv6.name': "IPv6"; readonly 'core.validator.ipv6.error': "Invalid IPv6 address"; readonly 'core.validator.image-url.name': "Image URL"; readonly 'core.validator.image-url.error': "Invalid image URL"; readonly 'core.validator.slug.name': "Slug"; readonly 'core.validator.slug.error': "Invalid slug"; readonly 'core.validator.number.name': "Number"; readonly 'core.validator.number.error': "Invalid number"; readonly 'core.validator.integer.name': "Integer"; readonly 'core.validator.integer.error': "Invalid integer"; readonly 'core.validator.decimal.name': "Decimal"; readonly 'core.validator.decimal.error': "Invalid decimal number"; readonly 'core.validator.positive-number.name': "Positive number"; readonly 'core.validator.positive-number.error': "Must be a positive number"; readonly 'core.validator.uuid.name': "UUID"; readonly 'core.validator.uuid.error': "Invalid UUID"; readonly 'core.validator.code-16.name': "16-char code"; readonly 'core.validator.code-16.error': "Invalid 16-character code"; readonly 'core.validator.code-32.name': "32-char code"; readonly 'core.validator.code-32.error': "Invalid 32-character code"; readonly 'core.validator.hex-color.name': "Hex color"; readonly 'core.validator.hex-color.error': "Invalid hex color"; readonly 'core.validator.base64.name': "Base64"; readonly 'core.validator.base64.error': "Invalid Base64 string"; readonly 'core.operator.equal.display': "Equal"; readonly 'core.operator.not-equal.display': "Not equal"; readonly 'core.operator.greater-than.display': "Greater than"; readonly 'core.operator.less-than.display': "Less than"; readonly 'core.operator.greater-or-equal.display': "Greater than or equal"; readonly 'core.operator.less-or-equal.display': "Less than or equal"; readonly 'core.operator.contain.display': "Contains"; readonly 'core.operator.not-contain.display': "Does not contain"; readonly 'core.operator.start-with.display': "Starts with"; readonly 'core.operator.not-start-with.display': "Does not start with"; readonly 'core.operator.end-with.display': "Ends with"; readonly 'core.operator.not-end-with.display': "Does not end with"; readonly 'core.operator.in.display': "In"; readonly 'core.operator.not-in.display': "Not in"; readonly 'core.operator.between.display': "Between"; readonly 'core.operator.null.display': "Is empty"; readonly 'core.operator.not-null.display': "Is not empty"; readonly 'core.handler.global-error.update-title': "A NEW SYSTEM UPDATE IS AVAILABLE"; readonly 'core.handler.global-error.update-body': "The current version is outdated and could not load resources.\nPlease press OK to reload the page."; readonly 'core.interceptor.no-internet.offline': "No network connection. Waiting for connection..."; readonly 'core.interceptor.no-internet.cors-error': "Cannot connect to server (CORS or configuration error)."; readonly 'core.interceptor.no-internet.maintenance': "Server is under maintenance. Please try again later."; readonly 'core.interceptor.no-internet.restored': "Connection restored."; readonly 'core.excel.cannot-read-file': "Could not read file content"; readonly 'core.excel.no-sheet': "Excel file has no data sheet"; readonly 'core.docx.invalid-format': "Invalid format. Please select a template in DOC or DOCX format"; readonly 'core.docx.size-exceeded': "Template file size exceeds the supported limit. Please try again"; readonly 'core.docx.convert-error': "An error occurred while converting the DOCX file"; readonly 'core.notify.type.success': "Success"; readonly 'core.notify.type.info': "Information"; readonly 'core.notify.type.warning': "Warning"; readonly 'core.notify.type.error': "Error"; readonly 'core.notify.show-more': "Show more ({count})"; readonly 'core.notify.show-less': "Show less"; readonly 'core.confirm.title': "Confirm"; readonly 'core.confirm.yes': "OK"; readonly 'core.confirm.no': "Cancel"; readonly 'core.confirm.yes-short': "Yes"; readonly 'core.confirm.no-short': "No"; readonly 'core.directive.hover-copy.tooltip': "Copy"; readonly 'core.form.input.required': "Please enter information"; readonly 'core.form.input.maxlength': "Maximum characters: {max}"; readonly 'core.form.input.invalid-pattern': "Invalid format"; readonly 'core.form.input.exceeded': "Exceeded maximum characters"; readonly 'core.form.input.mask-incomplete': "The value is incomplete"; readonly 'core.form.input.mask-invalid': "The value contains invalid characters"; readonly 'core.form.autocomplete.required': "Please enter information"; readonly 'core.form.chip.required': "Please enter information"; readonly 'core.form.chip.minlength': "Please enter at least {min} values"; readonly 'core.form.chip.maxlength': "Please enter at most {max} values"; readonly 'core.form.chip-calendar.required': "Please enter information"; readonly 'core.form.chip-calendar.minlength': "Please enter at least {min} values"; readonly 'core.form.chip-calendar.maxlength': "Please enter at most {max} values"; readonly 'core.form.date.required': "Please enter information"; readonly 'core.form.date.min-date': "Minimum date: {date}"; readonly 'core.form.date.max-date': "Maximum date: {date}"; readonly 'core.form.date.parse-error': "Parse error: {text}"; readonly 'core.form.date.invalid-format': "Invalid format"; readonly 'core.form.date-range.required': "Please enter information"; readonly 'core.form.date-range.invalid-min': "Start date is invalid (below limit)"; readonly 'core.form.date-range.invalid-max': "End date is invalid (above limit)"; readonly 'core.form.date-range.from': "From"; readonly 'core.form.date-range.to': "to"; readonly 'core.form.datetime.required': "Please enter information"; readonly 'core.form.datetime.min-date': "Minimum date: {date}"; readonly 'core.form.datetime.max-date': "Maximum date: {date}"; readonly 'core.form.datetime.invalid-format': "Invalid format"; readonly 'core.form.datetime.now': "Now"; readonly 'core.form.datetime.confirm': "Confirm"; readonly 'core.form.entity-picker.placeholder': "Select an entity"; readonly 'core.form.entity-picker.modal-title': "Select entity"; readonly 'core.form.entity-picker.value': "Value"; readonly 'core.form.entity-picker.clear': "Clear selection"; readonly 'core.form.entity-picker.add': "Add"; readonly 'core.form.entity-picker.cancel': "Cancel"; readonly 'core.form.entity-picker.apply': "Apply"; readonly 'core.form.tree-select.placeholder': "Select a tree item"; readonly 'core.form.tree-select.modal-title': "Select tree item"; readonly 'core.form.tree-select.clear': "Clear selection"; readonly 'core.form.tree-select.search': "Search tree"; readonly 'core.form.tree-select.cancel': "Cancel"; readonly 'core.form.tree-select.apply': "Apply"; readonly 'core.component.tree.retry': "Retry"; readonly 'core.service.unsaved-changes.message': "You have unsaved changes. Discard them and continue?"; readonly 'core.component.job-progress.status.idle': "Ready"; readonly 'core.component.job-progress.status.queued': "Queued"; readonly 'core.component.job-progress.status.running': "In progress"; readonly 'core.component.job-progress.status.succeeded': "Completed"; readonly 'core.component.job-progress.status.failed': "Failed"; readonly 'core.component.job-progress.status.cancelled': "Cancelled"; readonly 'core.component.job-progress.cancel': "Cancel"; readonly 'core.component.job-progress.retry': "Retry"; readonly 'core.component.audit-diff.label': "Audit changes"; readonly 'core.component.audit-diff.field': "Field"; readonly 'core.component.audit-diff.before': "Before"; readonly 'core.component.audit-diff.after': "After"; readonly 'core.component.audit-diff.empty': "No changes"; readonly 'core.component.audit-diff.kind.added': "Added"; readonly 'core.component.audit-diff.kind.removed': "Removed"; readonly 'core.component.audit-diff.kind.changed': "Changed"; readonly 'core.component.audit-diff.kind.unchanged': "Unchanged"; readonly 'core.component.audit-diff.value.label': "Value"; readonly 'core.component.audit-diff.value.not-set': "Not set"; readonly 'core.component.audit-diff.value.undefined': "Undefined"; readonly 'core.component.audit-diff.value.null': "Null"; readonly 'core.component.audit-diff.value.true': "Yes"; readonly 'core.component.audit-diff.value.false': "No"; readonly 'core.form.time.required': "Please enter a time"; readonly 'core.form.time.invalid': "Enter a valid time in HH:mm format"; readonly 'core.form.time.min': "Time must not be earlier than {min}"; readonly 'core.form.time.max': "Time must not be later than {max}"; readonly 'core.form.time.step': "Time must align to a {step}-minute interval"; readonly 'core.form.time.open-picker': "Open time picker"; readonly 'core.form.time.confirm': "Confirm"; readonly 'core.form.time.clear': "Clear time"; readonly 'core.form.time-range.required': "Please enter both start and end times"; readonly 'core.form.time-range.incomplete': "Enter both times or enable an open-ended range"; readonly 'core.form.time-range.range': "Start time must not be later than end time"; readonly 'core.form.time-range.invalid': "Enter valid times in HH:mm format"; readonly 'core.form.time-range.min': "Times must not be earlier than {min}"; readonly 'core.form.time-range.max': "Times must not be later than {max}"; readonly 'core.form.time-range.step': "Times must align to a {step}-minute interval"; readonly 'core.form.time-range.from': "From"; readonly 'core.form.time-range.to': "To"; readonly 'core.form.time-range.clear': "Clear time range"; readonly 'core.form.time-spinner.hour': "Hour"; readonly 'core.form.time-spinner.minute': "Minute"; readonly 'core.form.time-spinner.second': "Second"; readonly 'core.form.time-spinner.increase-hour': "Increase hour"; readonly 'core.form.time-spinner.decrease-hour': "Decrease hour"; readonly 'core.form.time-spinner.increase-minute': "Increase minute"; readonly 'core.form.time-spinner.decrease-minute': "Decrease minute"; readonly 'core.form.time-spinner.increase-second': "Increase second"; readonly 'core.form.time-spinner.decrease-second': "Decrease second"; readonly 'core.form.input-number.required': "Please enter information"; readonly 'core.form.input-number.min': "Value must not be less than {min}"; readonly 'core.form.input-number.max': "Value must not be greater than {max}"; readonly 'core.form.radio.required': "Please enter information"; readonly 'core.form.switch.on': "On"; readonly 'core.form.switch.off': "Off"; readonly 'core.form.checkbox.checked': "Yes"; readonly 'core.form.checkbox.unchecked': "No"; readonly 'core.form.select.required': "Please enter information"; readonly 'core.form.textarea.required': "Please enter information"; readonly 'core.form.textarea.maxlength': "Maximum characters: {max}"; readonly 'core.form.textarea.invalid-pattern': "Invalid format"; readonly 'core.form.textarea.exceeded': "Exceeded maximum characters"; readonly 'core.component.editor.required': "Please enter content"; readonly 'core.component.editor.maxlength': "Maximum characters: {max}"; readonly 'core.component.editor.image.invalid-format': "File format \".{format}\" is not allowed. Allowed formats: {allowed}"; readonly 'core.component.editor.image.size-exceeded': "File size {sizeMB}MB exceeds the limit of {maxSizeMB}MB"; readonly 'core.component.editor.image.min-width': "Image width {width}px is below the minimum of {min}px"; readonly 'core.component.editor.image.min-height': "Image height {height}px is below the minimum of {min}px"; readonly 'core.component.editor.image.max-width': "Image width {width}px exceeds the limit of {max}px"; readonly 'core.component.editor.image.max-height': "Image height {height}px exceeds the limit of {max}px"; readonly 'core.component.editor.image.max-per-selection': "You can select at most {max} images per selection"; readonly 'core.component.document-builder.page-number.current': "Current page number"; readonly 'core.component.document-builder.page-number.total': "Total pages"; readonly 'core.component.document-builder.ck-comment.label': "Comment"; readonly 'core.component.document-builder.ck-comment.text-too-long': "Text too long ({length} characters). Maximum {max} characters."; readonly 'core.component.document-builder.variable.not-allowed': "Adding variable to the text is not allowed"; readonly 'core.component.document-builder.variable.invalid-data': "Invalid variable data"; readonly 'core.component.form-builder.field-key': "Field key"; readonly 'core.component.form-builder.display': "Display"; readonly 'core.component.form-builder.general': "General"; readonly 'core.component.form-builder.visible-when': "Visible when"; readonly 'core.component.form-builder.required': "Required"; readonly 'core.component.form-builder.label': "Label"; readonly 'core.component.form-builder.disabled': "Disabled"; readonly 'core.component.form-builder.disabled-when': "Disabled when"; readonly 'core.component.form-builder.hidden-when': "Hidden when"; readonly 'core.component.form-builder.validation': "Validation"; readonly 'core.component.form-builder.required-when': "Required when"; readonly 'core.component.form-builder.confirm': "Confirm"; readonly 'core.component.form-builder.delete': "Delete"; readonly 'core.component.form-builder.save': "Save"; readonly 'core.component.form-builder.hint': "Hint"; readonly 'core.component.form-builder.parameter': "Parameters"; readonly 'core.component.form-builder.add-field': "Add field"; readonly 'core.component.form-builder.data': "Data"; readonly 'core.component.form-builder.query-condition': "Query condition"; readonly 'core.component.form-builder.set-query-value': "Set query value"; readonly 'core.component.form-builder.value-source-field': "Source field"; readonly 'core.component.form-builder.assign-parameter': "Assign parameter"; readonly 'core.component.form-builder.template-data': "Template data"; readonly 'core.component.form-builder.set-expression': "Set expression"; readonly 'core.component.form-builder.condition-group': "Condition group"; readonly 'core.component.form-builder.condition': "Condition"; readonly 'core.component.form-builder.layout': "Layout"; readonly 'core.component.form-builder.maxlength': "Maximum characters"; readonly 'core.component.form-builder.assign-parameter-value': "Assign parameter value"; readonly 'core.component.form-builder.parameter-name': "Parameter name"; readonly 'core.component.form-builder.parameter-value': "Parameter value"; readonly 'core.component.form-builder.assign-value': "Assign value"; readonly 'core.component.form-builder.add-data': "Add data"; readonly 'core.component.form-builder.data-api': "API data"; readonly 'core.component.form-builder.data-static': "Static data"; readonly 'core.component.form-builder.set-on-change-assign': "Set value-on-change"; readonly 'core.component.form-builder.target-field': "Target field"; readonly 'core.component.form-builder.target-value': "Target value"; readonly 'core.component.form-builder.column-data': "Column data"; readonly 'core.component.form-builder.add-column': "Add column"; readonly 'core.component.form-builder.column-config': "Column config"; readonly 'core.component.form-builder.column-name': "Column name"; readonly 'core.component.form-builder.width': "Width"; readonly 'core.component.form-builder.data-type': "Data type"; readonly 'core.component.form-builder.show-when-true': "Show when TRUE"; readonly 'core.component.form-builder.show-when-false': "Show when FALSE"; readonly 'core.component.form-builder.column-list': "Column list"; readonly 'core.component.form-builder.yes-no': "Yes/No"; readonly 'core.component.form-builder.config-validation-error-warning': "Configure validation error/warning"; readonly 'core.component.form-builder.message-type': "Message type"; readonly 'core.component.form-builder.message-display': "Display message"; readonly 'core.component.form-builder.condition-expression': "Condition expression"; readonly 'core.component.form-builder.add-validation': "Add validation"; readonly 'core.component.form-builder.expression': "Expression"; readonly 'core.component.form-builder.available-methods': "Available methods"; readonly 'core.component.form-builder.format': "Format"; readonly 'core.component.form-builder.time': "Time"; readonly 'core.component.form-builder.content': "Content"; readonly 'core.component.form-builder.min': "Minimum"; readonly 'core.component.form-builder.max': "Maximum"; readonly 'core.component.form-builder.vertical': "Vertical"; readonly 'core.component.form-builder.multiple': "Multiple selection"; readonly 'core.component.form-builder.default-value': "Default value"; readonly 'core.component.form-builder.type': "Type"; readonly 'core.component.form-builder.file': "File"; readonly 'core.component.form-builder.image': "Image"; readonly 'core.component.form-builder.max-files': "Max files/images"; readonly 'core.component.form-builder.size-mb': "Size (MB)"; readonly 'core.component.form-builder.format-example': "Format (e.g. png,jpg ...)"; readonly 'core.component.form-builder.source-mobile': "Source (mobile)"; readonly 'core.component.form-builder.config-variable': "Configure variables"; readonly 'core.component.form-builder.config-validation-warning-error': "Configure validation warning/error"; readonly 'core.component.form-builder.back-to-design': "Back to design"; readonly 'core.component.form-builder.preview': "Preview"; readonly 'core.component.form-builder.drag-vertically': "Drag up/down"; readonly 'core.component.form-builder.unset-readonly': "Remove read-only"; readonly 'core.component.form-builder.set-readonly': "Read-only"; readonly 'core.component.form-builder.duplicate': "Duplicate"; readonly 'core.component.form-builder.show': "Show"; readonly 'core.component.form-builder.hide': "Hide"; readonly 'core.component.form-builder.flex': "Flex"; readonly 'core.component.form-builder.display-label': "Display label"; readonly 'core.component.form-builder.attribute': "Attribute"; readonly 'core.component.form-builder.add-variable': "Add variable"; readonly 'core.component.form-builder.add-new': "Add new"; readonly 'core.component.form-builder.detail': "Details"; readonly 'core.component.form-builder.create-update': "Create/update"; readonly 'core.component.form-builder.default': "Default"; readonly 'core.component.form-builder.show-more': "Show more"; readonly 'core.component.form-builder.show-less': "Show less"; readonly 'core.component.inform.show-more': "Show more"; readonly 'core.component.inform.show-less': "Show less"; readonly 'core.component.data-state.loading.title': "Loading"; readonly 'core.component.data-state.loading.message': "Please wait while the data is being loaded."; readonly 'core.component.data-state.empty.title': "No data"; readonly 'core.component.data-state.empty.message': "There is no data to display yet."; readonly 'core.component.data-state.error.title': "Unable to load data"; readonly 'core.component.data-state.error.message': "An error occurred. Please try again."; readonly 'core.component.data-state.forbidden.title': "Access denied"; readonly 'core.component.data-state.forbidden.message': "You do not have permission to view this content."; readonly 'core.component.data-state.retry': "Try again"; readonly 'core.component.form-builder.row-overflow': "Cannot move to this row because the total size exceeds 12 columns"; readonly 'core.component.form-builder.upload-source.all': "All"; readonly 'core.component.form-builder.upload-source.photo-library': "Pick from library"; readonly 'core.component.form-builder.upload-source.capture': "Take photo"; readonly 'core.component.form-builder.components': "Components"; readonly 'core.component.form-builder.search-components': "Search components…"; readonly 'core.component.form-builder.view-json': "View JSON"; readonly 'core.component.form-builder.design': "Design"; readonly 'core.component.form-builder.preview-runtime': "Preview · Runtime"; readonly 'core.component.form-builder.cancel': "Cancel"; readonly 'core.component.form-builder.submit': "Submit"; readonly 'core.component.form-builder.empty-title': "Drag components here to start"; readonly 'core.component.form-builder.empty-hint': "Build your form by dragging fields from the left panel, or press"; readonly 'core.component.form-builder.conditional': "Conditional"; readonly 'core.component.form-builder.group-drop-here': "Drop a field here to add it to this group"; readonly 'core.component.form-builder.edit-group': "Edit group"; readonly 'core.component.form-builder.group-empty-hint': "Click Details to add fields to this group"; readonly 'core.component.form-builder.hidden': "Hidden"; readonly 'core.component.form-builder.read-only': "Read only"; readonly 'core.component.form-builder.untitled': "Untitled"; readonly 'core.component.form-builder.no-selection-title': "Nothing selected"; readonly 'core.component.form-builder.no-selection-hint': "Select a component on the canvas to edit its attributes."; readonly 'core.component.form-builder.group-children': "Children"; readonly 'core.component.form-builder.group-icon': "Icon"; readonly 'core.component.form-builder.group-accent-color': "Accent color"; readonly 'core.component.form-builder.group-no-children': "No fields yet. Add or drag fields into this group."; readonly 'core.component.form-builder.break': "Break"; readonly 'core.component.code-editor.copied': "Copied!"; readonly 'core.component.code-editor.copy': "Copy code"; readonly 'core.component.history.by': "By"; readonly 'core.component.import-excel.title': "Import Excel data"; readonly 'core.component.import-excel.see-all': "See all"; readonly 'core.component.import-excel.valid-rows': "Valid rows"; readonly 'core.component.import-excel.error-rows': "Error rows"; readonly 'core.component.import-excel.warning-rows': "Warning rows"; readonly 'core.component.import-excel.valid-data': "Valid data"; readonly 'core.component.import-excel.download-template-tooltip': "Click to download template"; readonly 'core.component.import-excel.upload': "Upload"; readonly 'core.component.import-excel.download': "Download"; readonly 'core.component.import-excel.confirm-save': "Confirm & Save"; readonly 'core.component.import-excel.status': "Status"; readonly 'core.component.import-excel.no-data-upload': "No data uploaded"; readonly 'core.component.import-excel.click-here-template': "Click here to download template"; readonly 'core.component.import-excel.no-data-in-file': "File has no data"; readonly 'core.component.import-excel.row-limit': "Upload limit is {limit} rows"; readonly 'core.component.import-excel.required': "Required data"; readonly 'core.component.import-excel.min-length': "Minimum string length: {min}"; readonly 'core.component.import-excel.max-length': "Maximum string length: {max}"; readonly 'core.component.import-excel.not-a-number': "{value} is not a valid number"; readonly 'core.component.import-excel.below-min': "{value} is below the minimum value: {min}"; readonly 'core.component.import-excel.above-max': "{value} is above the maximum value: {max}"; readonly 'core.component.import-excel.invalid-bool': "Please enter a valid value (true, false, 1, 0)"; readonly 'core.component.import-excel.invalid-value': "Value {value} is invalid"; readonly 'core.component.import-excel.value-not-in-list': "Value {value} is not in the allowed list [{list}]"; readonly 'core.component.import-excel.invalid-date-format': "Date {value} does not match format {format}"; readonly 'core.component.import-excel.generic-error': "An error occurred"; readonly 'core.component.import-excel.notify-title': "Notification"; readonly 'core.component.import-excel.message-column': "Message"; readonly 'core.component.import-excel.success': "Success"; readonly 'core.component.preview-image.no-image': "No image information"; readonly 'core.component.preview-image.title': "Preview image"; readonly 'core.component.preview-image.no-image-hint': "There are no images to display"; readonly 'core.component.preview-image.load-error': "Failed to load image"; readonly 'core.component.preview-image.load-error-hint': "The image may have been deleted or the path is invalid"; readonly 'core.component.preview-image.retry': "Retry"; readonly 'core.component.preview-image.close': "Close"; readonly 'core.component.preview-image.prev': "Previous image"; readonly 'core.component.preview-image.next': "Next image"; readonly 'core.component.preview-image.zoom-in': "Zoom in"; readonly 'core.component.preview-image.zoom-out': "Zoom out"; readonly 'core.component.preview-image.fit': "Fit to screen"; readonly 'core.component.preview-image.rotate': "Rotate"; readonly 'core.component.preview-image.download': "Download"; readonly 'core.component.preview-image.fullscreen': "Fullscreen"; readonly 'core.component.preview-image.loading': "Loading image..."; readonly 'core.component.preview-image.kbd-hint-nav': "navigate"; readonly 'core.component.preview-image.kbd-hint-close': "close"; readonly 'core.component.preview-pdf.title': "Preview document"; readonly 'core.component.preview-pdf.close': "Close"; readonly 'core.component.preview-pdf.pages-count': "{count} pages"; readonly 'core.component.preview-pdf.tab.thumbnails': "Pages"; readonly 'core.component.preview-pdf.tab.outline': "Outline"; readonly 'core.component.preview-pdf.tab.search': "Find"; readonly 'core.component.preview-pdf.first-page': "First page"; readonly 'core.component.preview-pdf.prev-page': "Previous page"; readonly 'core.component.preview-pdf.next-page': "Next page"; readonly 'core.component.preview-pdf.last-page': "Last page"; readonly 'core.component.preview-pdf.zoom-in': "Zoom in"; readonly 'core.component.preview-pdf.zoom-out': "Zoom out"; readonly 'core.component.preview-pdf.fit-page': "Fit page"; readonly 'core.component.preview-pdf.fit-width': "Fit width"; readonly 'core.component.preview-pdf.actual-size': "Actual size"; readonly 'core.component.preview-pdf.rotate': "Rotate"; readonly 'core.component.preview-pdf.scroll-page': "Single page"; readonly 'core.component.preview-pdf.scroll-continuous': "Continuous scroll"; readonly 'core.component.preview-pdf.print': "Print"; readonly 'core.component.preview-pdf.download': "Download"; readonly 'core.component.preview-pdf.fullscreen': "Fullscreen"; readonly 'core.component.preview-pdf.toggle-sidebar': "Toggle sidebar"; readonly 'core.component.preview-pdf.page-of': "page {current} / {total}"; readonly 'core.component.preview-pdf.empty.title': "No document"; readonly 'core.component.preview-pdf.empty.subtitle': "No PDF file to display yet"; readonly 'core.component.preview-pdf.loading': "Loading document..."; readonly 'core.component.preview-pdf.loading.page': "Processing page {current} / {total}"; readonly 'core.component.preview-pdf.error.invalid.title': "Failed to load document"; readonly 'core.component.preview-pdf.error.invalid.body': "The PDF file may be corrupted. Please check the file."; readonly 'core.component.preview-pdf.error.password.title': "Document is protected"; readonly 'core.component.preview-pdf.error.password.body': "This PDF file requires a password to open."; readonly 'core.component.preview-pdf.error.network.title': "Cannot connect"; readonly 'core.component.preview-pdf.error.network.body': "Unable to load the file from the server. Please try again later."; readonly 'core.component.preview-pdf.error.unknown.title': "An error occurred"; readonly 'core.component.preview-pdf.error.unknown.body': "Please retry or download the original file to view it."; readonly 'core.component.preview-pdf.error.retry': "Retry"; readonly 'core.component.preview-pdf.error.download-raw': "Download original"; readonly 'core.component.preview-pdf.search': "Search"; readonly 'core.component.preview-pdf.search-placeholder': "Search in document..."; readonly 'core.component.preview-pdf.search-case': "Match case"; readonly 'core.component.preview-pdf.search-whole': "Whole word"; readonly 'core.component.preview-pdf.search-no-results': "No results"; readonly 'core.component.preview-pdf.search-results-count': "{count} results for \"{term}\""; readonly 'core.component.preview-pdf.search-truncated': "Showing the first {count} matches. Refine your search to see fewer results."; readonly 'core.component.preview-pdf.search-prev': "Previous match"; readonly 'core.component.preview-pdf.search-next': "Next match"; readonly 'core.component.preview-pdf.search-close': "Close search"; readonly 'core.component.table.setup': "Table setup"; readonly 'core.component.table.column-header': "Column header"; readonly 'core.component.table.width': "Width"; readonly 'core.component.table.fixed': "Fixed"; readonly 'core.component.table.char-limit': "Character limit"; readonly 'core.component.table.skip': "Skip"; readonly 'core.component.table.apply': "Apply"; readonly 'core.component.table.filter': "Filter"; readonly 'core.component.table.clear-selection': "Clear selection"; readonly 'core.component.table.customize': "Customize"; readonly 'core.component.table.search': "Search"; readonly 'core.component.table.reload': "Reload"; readonly 'core.component.table.setup-short': "Setup"; readonly 'core.component.table.no-results': "No results found"; readonly 'core.component.table.no-results-hint': "Please search or filter with different criteria"; readonly 'core.component.table.choose-filter-hint': "Please choose a filter to start"; readonly 'core.component.table.no-data': "No data"; readonly 'core.component.table.export-excel': "Export Excel"; readonly 'core.component.table.export-csv': "Export CSV"; readonly 'core.component.table.showing': "Showing:"; readonly 'core.component.table.paginator.first-page': "First page"; readonly 'core.component.table.paginator.last-page': "Last page"; readonly 'core.component.table.paginator.items-per-page': "Showing"; readonly 'core.component.table.paginator.next-page': "Next page"; readonly 'core.component.table.paginator.previous-page': "Previous page"; readonly 'core.component.table.error-occurred': "An error occurred"; readonly 'core.component.table.not-an-array': "Data is not an array"; readonly 'core.component.table.config.confirm-reset': "Confirm reset all settings to defaults"; readonly 'core.component.table.popup-export.select-columns': "Please select columns to export"; readonly 'core.component.table.selector-action.default-msg': "items selected"; readonly 'core.component.tab-router.too-many-tabs': "You have opened too many tabs."; readonly 'core.component.upload-file.upload': "Upload file"; readonly 'core.component.upload-file.error-occurred': "An error occurred"; readonly 'core.component.upload-file.please-upload': "Please upload a file/image"; readonly 'core.component.upload-file.desc-format-and-size': "Format: {exts} and up to: {maxSize}MB"; readonly 'core.component.upload-file.desc-format': "Format: {exts}"; readonly 'core.component.upload-file.desc-max-size': "Up to: {maxSize}MB"; readonly 'core.component.upload-file.not-image': "[{name}] Uploaded file is not an image"; readonly 'core.component.upload-file.invalid-format': "[{name}] Uploaded file has invalid format: {exts}"; readonly 'core.component.upload-file.size-exceeded': "[{name}] Max file size: {maxSize} MB"; readonly 'core.component.upload-file.upload-failed': "An error occurred during file upload"; readonly 'core.component.upload-file.too-many-files': "You selected too many files. Please check the count"; readonly 'core.component.upload-file.confirm-delete-message': "Do you want to delete this file? This action cannot be undone"; readonly 'core.component.upload-file.confirm-delete-title': "Confirm delete?"; readonly 'core.component.upload-file.confirm-yes': "Confirm"; readonly 'core.component.upload-file.confirm-no': "Cancel"; readonly 'core.component.upload-file.no-configuration': "Please inject SD_UPLOAD_FILE_CONFIGURATION or pass [upload] directly into the component"; readonly 'core.component.upload-file.no-configuration-key': "No upload configuration found for key='{key}'. Please check providers or pass [upload] directly"; readonly 'core.component.upload-file.preview-title': "Preview image"; readonly 'core.module.layout.user.change-password': "Change password"; readonly 'core.module.layout.user.logout': "Sign out"; readonly 'core.module.layout.user.update-profile': "Update profile"; readonly 'core.module.layout.user.setting': "Settings"; readonly 'core.module.layout.user.notification': "Notifications"; readonly 'core.module.layout.sidebar.search': "Search"; readonly 'core.module.layout.sidebar.toggle': "Toggle sidebar"; readonly 'core.module.layout.greeting.hello': "Hello, {name}"; readonly 'core.module.layout.weekday.0': "Sunday"; readonly 'core.module.layout.weekday.1': "Monday"; readonly 'core.module.layout.weekday.2': "Tuesday"; readonly 'core.module.layout.weekday.3': "Wednesday"; readonly 'core.module.layout.weekday.4': "Thursday"; readonly 'core.module.layout.weekday.5': "Friday"; readonly 'core.module.layout.weekday.6': "Saturday"; readonly 'core.module.layout.today-info.format': "{weekday}, {date}"; readonly 'core.module.layout.forbidden.title': "Access denied"; readonly 'core.module.layout.forbidden.message': "You don't have permission to access this page. Please contact your administrator or go back to the home page"; readonly 'core.module.layout.forbidden.back-home': "Back to home"; readonly 'core.module.layout.not-found.title': "404 - Page not found"; readonly 'core.module.layout.not-found.message': "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."; readonly 'core.module.layout.not-found.back': "Go back"; readonly 'core.module.layout.home.tab-name': "Home"; readonly 'core.module.layout.home.feature.data': "Data"; readonly 'core.module.layout.home.feature.reports': "Reports"; readonly 'core.module.layout.home.feature.users': "Users"; readonly 'core.module.layout.home.feature.workflow': "Workflow"; readonly 'core.module.layout.home.feature.audit': "Audit"; readonly 'core.module.layout.home.feature.integration': "Integration"; readonly 'core.module.layout.mock.user.full-name': "Demo User"; readonly 'core.module.generic.generic-select.detail-link': "details"; }; type I18nKey = keyof typeof EN_MESSAGES; type I18nParams = Record; /** * I18nCatalog — full catalog of messages keyed by I18nKey. * * Tip: hover over EN_MESSAGES['key'] to see the EN reference value when typing a custom catalog. * * Example: * import type { I18nCatalog } from '@sdcorejs/angular/i18n'; * const myCustom: I18nCatalog = { * 'core.common.cancel': 'Annuler', * // ... must provide all keys * }; */ type I18nCatalog = Record; /** * Custom language provider. Returns a complete I18nCatalog synchronously. * * Sync-only by design: keeping the resolution path synchronous lets `t()` return the * correct value on the very first call (no microtask flash of 'vi' fallback) and keeps * the pipe pure. If you need to load a catalog from an API, fetch it before * bootstrapping Angular and pass the already-resolved object here. * * Example: * const config: ISdCoreConfiguration = { language: () => ({ ...myCatalog }) }; */ type CustomLanguageProvider = () => I18nCatalog; declare const I18N_MESSAGES: Record>>; declare class I18nService { #private; readonly language: Signal; readonly messages: Signal>>; setLanguage(lang: Language, opts?: { reload?: boolean; }): void; t(key: string, params?: I18nParams): string; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵprov: i0.ɵɵInjectableDeclaration; } declare class TranslatePipe implements PipeTransform { #private; transform(key: string, params?: I18nParams): string; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵpipe: i0.ɵɵPipeDeclaration; } export { I18N_MESSAGES, I18N_STORAGE_KEY, I18nService, TranslatePipe }; export type { CustomLanguageProvider, I18nCatalog, I18nKey, I18nParams };