import { ApplicationContext, LangUtils } from '@sankhyalabs/core';

const continuousInsertUtilsMessages$2 = {
  actions: {
    enable: "Ativar inclusão contínua",
    disable: "Desativar inclusão contínua"
  }
};

const crudUtilsMessages$2 = {
  errorArray: "CrudUtils.find deve receber um array de fields, ou uma lista separada por virgula.",
};

const dataFetcherMessages$2 = {
  errorDetected: "Falha detectada",
  noErrorMessage: "Não há mensagem de erro",
  noErrorInfo: "Não há informações sobre o erro",
  clientEventNotRegisteredWarn: "Client event {{id}} não registrado",
  clientEventNotRegisteredTitle: "ClientEvent não registrado",
  clientEventNotRegisteredMsg: "Ocorreu o client event {{id}} porém não há client event registrado na aplicação.",
  serviceExecutionError: "Erro ao executar serviço",
  serviceExecutionErrorWarn: "Erro ao executar serviço: {{err}}",
  serviceExecutionErrorWithName: "Erro ao executar serviço: {{serviceName}}",
  serviceCanceled: "Serviço cancelado"
};

const dataUnitDataLoaderHelperMessages$2 = {
  pagination: {
    title: "Aviso",
    line1: "Uma quantidade de registros muito grande está sendo carregada.",
    line2: "Recomendamos que a paginação seja cancelada e que seja criado um filtro para os registros.",
    line3: "Deseja cancelar o carregamento?"
  },
  checkbox: {
    loadAll: "Carregar tudo",
  },
  buttons: {
    continue: "Continuar",
    cancel: "Cancelar paginação"
  },
  errors: {
    noMessageBuilder: "Arquivo de mensagens não encontrado!"
  }
};

const fileViewerMessages$2 = {
  error: {
    title: "Erro na Exportação",
    message: "O usuário não possui permissão para exportar o arquivo."
  },
  message: {
    exportSuccess: "Exportado com sucesso!",
  }
};

const snkActionsButtonMessages$2 = {
  title: {
    actions: "Ações",
    error: "Erro",
    warning: "Aviso"
  },
  action: {
    incorrectAction: "A ação \"{{description}}\" não pode ser executada porque ela não foi salva corretamente.",
    emptyParamName: "<b>Regra Personalizada:</b><br/><br/>É necessário informar o atributo 'paramName'",
    nonExistentType: "Tipo de ação não implementada: {{this.actionType}}"
  },
  launchScreen: {
    emptyField: "A ação \"{{description}}\" não pôde ser executada porque o campo \"{{localFieldLabel}}\" está vazio."
  },
  form: {
    fillParams: "Informe os parâmetros"
  },
  clientEvent: {
    cancelMessage: "Caso queira cancelar, feche esta mensagem.",
    labelCancel: "Cancelar",
    labelConfirm: "Sim"
  },
  buttons: {
    apply: "Aplicar",
    cancel: "Cancelar",
    yes: "Sim",
    no: "Não"
  }
};

const snkApplicationMessages$2 = {
  dataUnit: {
    initDataUnitError: "Dataunit não inicializado",
  },
  keyboard: {
    shortcuts: {
      searchApp: "Pesquisar por telas",
      showDesktop: "Mostrar o desktop",
      openHelp: "Abrir ajuda"
    }
  },
  loading: {
    text: "Carregando..."
  },
  newVersionPopup: {
    title: "Boas vindas à nova interface da tela {{screenName}}",
    info: "Com uma jornada mais moderna, simples e intuitiva, a performance aprimorada da nova interface impulsionará a sua produtividade.",
    okButton: "Quero experimentar!",
    cancelButton: "Voltar à interface anterior",
  },
  search: {
    error: {
      title: "Erro ao pesquisar",
      requiredField: "É necessário informar o campo {{fieldLabel}} para executar a pesquisa."
    }
  }
};

const snkAttachMessages$2 = {
  title: "Anexar arquivos",
  description: "Faça o upload dos arquivos ou informe links que deseja anexar ao título",
  attachHint: "Fazer download do arquivo",
  breadcrumbTitle: "Anexar",
  finishedMessage: "O anexo foi finalizado com sucesso",
  finish: "Finalizar",
  cancelConfirmation: {
    title: "Atenção",
    message: "As alterações realizadas não serão aplicadas.<br/><br/><b>Deseja mesmo continuar?</b>",
  },
  alertValidation: {
    fileAndLinkAtTheSameTime: {
      title: "Atenção",
      message: "Não é permitido inserir o arquivo e o link ao mesmo tempo."
    },
    anyLinkOrFileFilled: {
      title: "Atenção",
      message: `É necessário preencher o campo "Link" ou anexar um arquivo.`
    },
    descriptionCannotBeChanged: {
      title: "Atenção",
      message: "O campo 'Descrição' não pode ser alterado."
    },
    noRecordSelected: {
      message: "Nenhum registro selecionado"
    }
  },
  taskbar: {
    titleDownload: "Fazer download",
    titleLink: "Abrir link",
  },
  attachMetadata: {
    lblCode: "Código",
    lblDescription: "Descrição",
    lblFileOrLink: "Arquivo / Link",
    lblUser: "Usuário",
    lblDate: "Data de alteração",
    lblFile: "Arquivo",
    lblSubTitle: "Clique para selecionar um arquivo",
  }
};

const snkConfiguratorMessages$2 = {
  titleConfigurations: "Configurações",
  subTitleModeConfig: "Modo de visualização",
  labelConfigGrid: "Configurar grade",
  labelConfigForm: "Configurar formulário",
  labelGrid: "Grade",
  labelForm: "Formulário",
  labelLayoutForm: "Layout do formulário",
  labelNumberingConfig: "Configuração de numeração",
  buttons: {
    cancel: "Cancelar",
    save: "Salvar"
  }
};

const snkCrudMessages$2 = {
  title: {
    clone: "Duplicar registro",
    insert: "Cadastrar registro",
    update: "Alterar registro",
    clean: "{{ENTITY_NAME}}",
  },
  newRecord: "Novo Registro",
  findColumn: "Buscar campos (Ctrl+F)",
  goBackTitle: "Voltar",
  guide: {
    tooltip: {
      disabledDetail: "Finalize o cadastro para ter acesso a esta guia."
    }
  },
  multipleEdition: {
    editing: "Editando {{COUNT}} registros"
  },
  detail: {
    tooltip: {
      needSingleSelection: "Para alterar detalhes é necessário estar com um (e apenas um) registro selecionado."
    }
  },
  errors: {
    resourceIDNotProvided: "Erro interno: resourceID não informado"
  },
  shortcuts: {
    toggleView: "Alterna entre modo formulário e grade.",
    saveData: "Salva os dados.",
    addRecord: "Adiciona um novo registro.",
    removeRecord: "Remove o registro selecionado.",
    refreshData: "Atualiza os dados.",
    cancelAction: "Cancela uma ação."
  },
  customButtons: {
    filter: "Abre o painel de filtros",
    entitySearch: "Busca na entidade"
  },
  entitySearch: {
    label: "Busca por registros",
    placeholder: "Digite o que você procura aqui..."
  }
};

const snkDataExporterMessages$2 = {
  group: {
    export: {
      default: "Exportar para",
      multiSelected: "Exportar {0} linhas selecionadas",
      selectedLine: "Exportar somente 1 linha selecionada",
      title: "Exportar",
    },
    custom: "Personalizado"
  },
  label: {
    currentPage: "Somente a página atual",
    allRecords: "Todos os registros",
    spreadsheet: "Planilha",
    cube: "Cubo",
    sendByEmail: "Enviar por email",
  },
  message: {
    emailSuccess: "E-mail enviado com sucesso",
    exportError: "Falha ao exportar dados",
    unknownFailure: "O motivo da falha não pode ser identificado.",
    exportPermission: "O usuário não possui permissão para exportar o arquivo.",
  },
  title: {
    error: "Erro",
    permission: "Falha detectada",
  },
  limitExceeded: {
    title: "Atenção",
    description: "Apenas os {{limit}} primeiros registros serão exportados. Deseja continuar?",
    subdescription: "Caso seja necessária uma quantidade maior de registros exportados, utilize o Extrator de Dados através de um Relatório Personalizado.",
    cancel: "Cancelar",
    continue: "Continuar"
  }
};

const snkDataUnitMessages$2 = {
  saveInfo: {
    clone: 'Duplicação realizada!',
    insert: 'Inclusão realizada!',
    update: 'Alteração realizada!',
    updateMultiples: 'Múltiplos registros alterados com sucesso!'
  },
  cancelInfo: {
    clone: 'Duplicação descartada!',
    insert: 'A inclusão foi descartada!',
    update: 'A edição foi descartada!',
    updateMultiples: 'A edição de múltiplos registros foi descartada com sucesso!'
  },
  confirm: {
    cancel: 'Cancelar',
    delete: 'Excluir',
    updateMultipleConfirm: 'Confirmar edição',
    yes: 'Sim',
    no: 'Não',
  },
  mainTab: 'Principal',
  removeInfo: 'Registro removido com sucesso!',
  cancelConfirmationTitle: 'Aviso',
  cancelConfirmation: 'As alterações realizadas serão descartadas<br/><br/><b>Você realmente gostaria de cancelar?',
  removeConfirmationTitle: 'Aviso',
  removeConfirmation: 'Deseja realmente excluir o registro atual?',
  multipleUpdateConfirmationTitle: 'Confirmar edição múltipla',
  multipleUpdateConfirmationMessage: 'As informações dos campos abaixo foram alteradas e serão aplicadas a {{size}} registros',
  forbidden: 'Sem permissão',
  forbiddenUpdate: 'Não é possível fazer alterações. Verifique as permissões de acesso.',
  forbiddenInsert: 'Não é possível incluir. Verifique as permissões de acesso.',
  forbiddenClone: 'Não é possível duplicar. Verifique as permissões de acesso.',
  forbiddenRemove: 'Não é possível remover. Verifique as permissões de acesso.',
  removeAllConfirmation: 'Os <strong>{{size}} registros selecionados</strong> serão excluídos.<br/><br/><strong>Você realmente gostaria de continuar?</strong>',
  removeAllInfo: 'Os {{size}} registros foram removidos com sucesso!',
  fieldNameRequired: 'É necessário informar o nome da coluna.',
  selectedRecordsDeprecated: 'SnkDataUnit: O método `selectedRecords` foi descontinuado. Use o método `selectionInfo`.',
  selectedRecordsVirtualError: 'Erro interno: Impossível obter os registros selecionados. A seleção atual é virtual. Use o atributo `selectionInfo`.',
  main: 'Principal',
};

const snkEntityListMessages$2 = {
  selected: "Selecionados:"
};

const snkErrorHandlerMessages$2 = {
  title: {
    promiseRejected: "Promise rejeitada",
    errorDetected: "Erro detectado"
  },
  message: {
    undeterminedPromiseRejection: "Erro interno: Uma promise foi rejeitada sem razão determinada.",
    cannotOpenHelp: "Não é possível abrir a ajuda fora do workspace Sankhya",
    silentExceptionIgnored: "SilentException ignorada"
  },
  errorCode: {
    label: "Código: "
  },
  error: {
    internal: "Erro interno"
  }
};

const snkExporterMessages$2 = {
  emailSenderTitle: "Enviar por email",
  emailSenderBackButton: "Voltar",
  emailSenderNextButton: "Avançar",
  emailSenderCancelButton: "Cancelar",
  emailSenderSendButton: "Enviar",
  emailSenderOptStep_subtitle: "Primeiro, escolha o formato do arquivo",
  emailSenderOptStep_lblFormat: "Formato:",
  emailSenderOptStep_formatPDF: "PDF (.pdf)",
  emailSenderOptStep_formatXLS: "Planilha (.xls)",
  emailSenderOptStep_export: "Exportar:",
  emailSenderOptStep_allData: "Toda a grade",
  emailSenderOptStep_currentPage: "Somente a página atual",
  emailSenderOptStep_someRecords: "{{SELECTION_COUNT}} linhas selecionadas",
  emailSenderOptStep_oneRecord: "Somente a linha selecionada",
  emailSenderInfoStep_subtitle: "Informações de email",
  emailSenderInfoStep_sendTo: "Enviar para",
  emailSenderInfoStep_subject: "Assunto",
  emailSenderInfoStep_message: "Mensagem"
};

const snkFilterBarMessages$2 = {
  addFilter: "Adicionar filtro",
  pinFilter: "Fixar filtro",
  unpinFilter: "Desfixar filtro",
  removeFilter: "Remover filtro",
  cleanFilter: "Limpar",
  applyFilter: "Aplicar",
  findFilter: "Buscar filtros...",
  findField: "Buscar filtros...",
  modalFindFilter: "Buscar filtro",
  emptyFiltersList: "Não há filtros disponíveis",
  emptyAppliedFiltersList: "Não há filtros aplicados",
  customFilter: "Filtro personalizado",
  defaultFilter: "Filtro padrão",
  failToLoadConfig: "Falha ao buscar configuração de filtros",
  clearAllFilters: "Limpar todos os filtros",
  successfullyCleaned: "Filtro limpo com sucesso!",
  activeFilter: "{{ACTIVE_FILTERS}} filtro aplicado",
  activeFilters: "{{ACTIVE_FILTERS}} filtros aplicados",
  noActiveFilters: "Nenhum filtro aplicado",
  modalDefaultFilterTitle: "Filtro padrão",
  modalInfoTextEditDefault: "Use o layout antigo para editar o seu filtro padrão, em breve traremos uma nova experiência.",
  modalInfoTextCreateDefault: "Use o layout antigo para criar o seu filtro padrão, em breve traremos uma nova experiência.",
  modalPersonalizedFilterTitle: "Filtro personalizado",
  modalPersonalizedFilterSubTitle: "Gerencie seus filtros",
  modalInfoTextCreateEditPersonalized: "Use o layout antigo para criar ou editar filtros, em breve traremos uma nova experiência",
  modalInfoTextCreateFilter: "Criar filtro personalizado",
  modalInfoTextNoFilterRegister: "Você não possui filtros cadastrados.",
  modalOkButtonLabel: "Aplicar",
  modalCancelButtonLabel: "Limpar",
  binarySelectTooltip: "Exibindo registros",
  multiListToltip: "selecionado(a)s",
  onlyStartToltip: "A partir de",
  onlyEndToltip: "Até",
  fullPeriodTooltip: "Data de {{LABEL}}: {{START_LABEL}} até {{END_LABEL}}",
  labelStart: "Inicial",
  labelEnd: "Final",
  labelTo: "até",
  fullIntervalTooltip: "{{LABEL}}: {{START_LABEL}} até {{END_LABEL}}",
  filters: "Filtros",
  personalizedCount: "{{activeCount}} selecionado(s)",
  filterItem: {
    updateFilterItemNotFound: "FilterItem não encontrado, o mesmo não será atualizado.",
    addFilterItemExists: "FilterItem já existe, o mesmo não será adicionado novamente.",
    removeFilterItemNotFound: "FilterItem não encontrado"
  },
  filterModal: {
    title: "Filtros",
    okButtonLabel: "Aplicar",
    cancelButtonLabel: "Limpar tudo",
    customFilters: "Filtros personalizados",
    quickFilters: "Filtros rápidos",
    clearModal: "Limpar",
    defaultFilter: {
      title: "Filtro padrão",
      edit: "Editar filtro",
      remove: "Excluir filtro",
      create: "Criar filtro padrão",
    },
    validations: {
      requiredFilter: "Filtro obrigatório",
      notFullFilled: {
        title: "Filtro parcialmente preenchido",
        message: "Favor completar todas as informações do filtro."
      },
      notSaved: {
        title: "Atenção",
        message: "As alterações realizadas não serão aplicadas.<br/><br/><b>Deseja mesmo continuar?</b>"
      }
    }
  },
};

const snkFilterFieldSearchMessages$2 = {
  searchLabel: "Buscar campo",
  fieldLabel: "Campos de {{link}}",
  linkLabel: "Categorias de {{link}}",
  groupEmpty: "Não há categorias para seleção",
  searchEmpty: "Nenhum resultado encontrado"
};

const snkFilterListMessages$2 = {
  showMore: "Mostrar mais"
};

const snkFilterParamConfigMessages$2 = {
  modalTitle: "Configuração de valor variável",
  labelSystemConfig: "Usar definições do sistema",
  labelUserConfig: "Usar definições personalizadas",
  labelInstance: "Categoria",
  labelField: "Campo",
  labelDescription: "Descrição (obrigatório) *",
  labelType: "Tipo (obrigatório) *",
  labelTypeValues: {
    date: "Data",
    text: "Texto",
    integer: "Número Inteiro",
    decimal: "Número com Decimal",
  },
  labelExpression: "Expressão",
  labelCancel: "Cancelar",
  labelSave: "Salvar"
};

const snkLayoutFormConfigMessages$2 = {
  cascadeLayout: {
    label: "Layout compacto em cascata",
    description: "Todos os campos serão organizados em uma coluna única."
  },
  classicCascadeLayout: {
    label: "Layout clássico em cascata",
    description: "Todos os campos serão organizados em uma coluna única com estilo clássico."
  },
  sideBySideLayout: {
    label: "Layout compacto lado a lado",
    description: "Todos os campos serão dispostos lado a lado, ajustando-se automaticamente à largura da tela."
  },
  classicSideBySideLayout: {
    label: "Layout clássico lado a lado",
    description: "Todos os campos serão dispostos lado a lado com estilo clássico, ajustando-se automaticamente à largura da tela."
  }
};

const snkNumberingConfigMessages$2 = {
  labelAutoNumbering: "Numeração automática",
  labelInitialNumber: "Número inicial"
};

const snkPersonalizedFilterMessages$2 = {
  info: {
    titleEdit: "Editar filtro personalizado",
    titleAdd: "Criar filtro personalizado",
    titleCreateDefault: "Aplicar filtro padrão",
    titleEditDefault: "Editar filtro padrão",
    titleCollapsible: "Expressão a ser aplicada (gerada pelo assistente)",
    labelSearchField: "Buscar campo",
    labelOperator: "Operador",
    labelValueVarible: "Valor variável",
    titleTooltip: "Ao ativar um valor variável, é possível inserir um valor diferente sempre que o filtro for aplicado",
    labelAddNewExpression: "Adicionar nova linha de expressão",
    labelDeleteExpression: "Remover expressão",
    labelDeleteItem: "Remover item",
    labelDisabledAddGroupButton: "Filtros Personalizados possuem um limite de {{LIMIT_GROUP_LEVEL}} Grupos de Condições e Valores",
    labelDisabledAddExpressionButton: "Preencha campos obrigatórios ou indique valores variáveis nas expressões do grupo antes de adicionar mais itens",
    labelCancel: "Cancelar",
    labelSave: "Salvar",
    labelNameFilter: "Nome do filtro",
    labelExpression: "Expressão",
    badgeVariable: "variável",
    noDataFound: "Nenhum filtro encontrado",
    condition: "Condição",
    conditionAnd: "E",
    conditionOr: "OU",
    labelDefaultValue: "Valor",
    addGroup: "Adicionar grupo",
    addField: "Adicionar campo",
    applyExpression: "Expressão a ser aplicada:",
    tooltipDisabledAssistentMode: "Expressão não suportada pelo assistente.",
    activeModeAdvanced: "Ativar modo avançado",
    activeModeAssistent: "Ativar modo assistente",
    textInputDisabled: "Campo desabilitado para filtros padrões",
    checkVariableDisabled: "Filtro padrão não pode ser variável.",
    deleteDefaultFilterConfirm: "Deseja excluir o <b>filtro padrão</b>?",
  },
  confirmExpression: {
    title: "Aviso",
    description: `As informações da condição serão descartadas.</br></br><b>Gostaria de continuar?</b>`
  },
  confirmGroup: {
    title: "Aviso",
    description: `As informações do Grupo e suas Condições serão descartadas.</br></br><b>Gostaria de continuar?</b>`
  },
  confirmCancel: {
    title: "Aviso",
    description: `As alterações realizadas serão descartadas.</br></br><b>Gostaria de continuar?</b>`
  },
  confirmChangeModeAssistent: {
    title: "Aviso",
    description: `Ao modificar a expressão, o modo assistente será desabilitado.</br></br><b>Gostaria de continuar?</b>`
  },
  confirmChangeModeAdvanced: {
    title: "Aviso",
    description: `Ao retornar ao modo assistente suas alterações serão perdidas.</br></br><b>Gostaria de continuar?</b>`
  },
  confirmSaveModeAdvanced: {
    title: "Aviso",
    description: `Ao modificar a expressão, o modo assistente será desabilitado.</br></br><b>Gostaria de continuar?</b>`
  },
  operador: {
    firstLevel: "A seleção será habilitada a partir da adição da segunda linha de regras.",
    and: "Será verdadeiro se todas as condições forem obedecidas.",
    or: "Será verdadeiro se qualquer uma das condições for obedecida."
  },
  error: {
    title: "Atenção",
    description: "Há pelo menos um campo obrigatório não preenchido."
  },
  errorValidation: {
    title: "Erro na expressão"
  },
  confirmSave: {
    title: "Filtro criado com sucesso!"
  },
  confirmEdit: {
    title: "Filtro atualizado com sucesso!"
  },
  deleteConfirm: {
    title: "Aviso",
    message: "Deseja realmente excluir o filtro '{{filterName}}'?"
  },
  listActions: {
    edit: "Editar",
    delete: "Excluir"
  },
  footerActions: {
    clear: "Limpar",
    create: "Criar filtro"
  },
  operands: {
    equal: "Igual (=)",
    different: "Diferente (<>)",
    like: "Contendo (LIKE)",
    in: "Contido em (IN)",
    startWith: "Iniciado com (%?)",
    finishedWith: "Terminado com (?%)",
    null: "Vazio (NULL)",
    notNull: "Não Vazio (NOT NULL)",
    larger: "Maior (>)",
    largerEqual: "Maior ou Igual (>=)",
    smaller: "Menor (<)",
    smallerEqual: "Menor ou Igual (<=)"
  }
};

const snkPesquisaMessages$2 = {
  search: {
    label: "Buscar",
    button: "Pesquisar",
    clearButton: "Limpar pesquisa",
    waitMessage: "Aguarde, buscando registros...",
    noResultsMessage: "Nenhum registro encontrado",
    initialMessage: "Os resultados de sua pesquisa aparecerão aqui...",
    resultsFoundSingular: "1 registro encontrado",
    resultsFoundPlural: "{{COUNT}} registros encontrados",
    limitMessage: "Esta pesquisa foi limitada, existem mais resultados."
  },
  viewMode: {
    tableMode: "Modo grade",
    listMode: "Modo lista",
  },
  tree: {
    emptyMessage: "Nenhum registro encontrado...",
    expandButton: "Expandir",
    collapseButton: "Recolher",
    errorTitle: "Erro",
    nonAnalyticError: "Há pelo menos um registro inválido selecionado. Você deve selecionar itens do tipo 'analítico'."
  }
};

const snkPrintSelectorMessages$2 = {
  title: {
    warning: "Aviso",
    printerSelection: "Seleção de impressora",
    remotePrintersTab: "Impressoras remotas",
    localPrintersTab: "Impressoras locais"
  },
  subtitle: {
    document: "Documento:",
    jobs: "Trabalhos:"
  },
  message: {
    canceledPrint: "A impressão será cancelada. Deseja mesmo continuar?",
    noPrinters: "Não há impressoras para seleção",
    savePrinter: "Usar sempre esta seleção"
  },
  button: {
    print: "Imprimir",
    cancel: "Cancelar",
    yes: "Sim",
    no: "Não"
  }
};

const snkSimpleBarMessages$2 = {
  backTitle: "Voltar"
};

const snkSimpleCrudMessages$2 = {
  findColumn: "Busca de colunas (Ctrl+F)",
  findFields: "Busca de campos (Ctrl+F)",
  formConfigUnavaliable: {
    title: "Aviso",
    message: 'A opção "Configurar formulário" será disponibilizada em breve. Enquanto isso, acesse a configuração do fomulário através dos layouts anteriores, HTML5 ou Flex.'
  },
  keyboardShortcuts: {
    saveData: "Salva os dados.",
    addRecord: "Adiciona um novo registro.",
    removeRecord: "Remove o registro selecionado.",
    cancelAction: "Cancela uma ação."
  }
};

const snkSimpleFormConfigMessages$2 = {
  popup: {
    title: "Configurar formulário"
  },
  lists: {
    availableFields: "Campos disponíveis",
    selectedFields: "Campos selecionados",
    entityLabel: "campo",
    entityLabelPlural: "campos"
  },
  buttons: {
    restore: "Restaurar",
    cancel: "Cancelar",
    save: "Salvar"
  }
};

const snkTaskbarMessages$2 = {
  titleUpdateMultiple: "Editar Múltiplos",
  titleUpdate: "Editar",
  titlePrevious: "Anterior",
  titleNext: "Próximo",
  titleRefresh: "Atualizar",
  titleClone: "Duplicar",
  titleRemove: "Excluir",
  titleMoreOptions: "Mais Opções",
  titleInsert: "Cadastrar",
  titleCancel: "Cancelar",
  titleSave: "Salvar",
  titleGridMode: "Modo Grade",
  titleFormMode: "Modo Formulário",
  titleConfigurator: "Configurações",
  titleAttach: "Anexar",
  forbidden: "Permissão não liberada"
};

const snkImageInputMessages$2 = {
  msgTipoImage: "Tipo de arquivo inválido. Tipos aceitos: ",
  errorImageSize: "O tamanho do arquivo excede o máximo permitido: ",
  defaultLabel: "Clique ou arraste para fazer upload de uma imagem",
  removeImage: "Remover imagem",
  imageAlt: "Visualização da imagem",
  imagePreview: "Visualização da Imagem",
  uploadError: "Erro ao fazer upload do arquivo",
  downloadError: "Erro ao baixar imagem",
  errorTitle: "Erro"
};

const snkGridMessages$2 = {
  findColumn: 'Busca de colunas (Ctrl+F)',
  cancelConfirmation: {
    title: 'Aviso',
    message: 'As alterações realizadas serão descartadas<br/><br/><b>Você realmente gostaria de cancelar?</b>',
  },
  requiredFiltersNotFilled: {
    title: 'Erro',
    message: 'Existem filtros obrigatórios não preenchidos.',
  },
};
const snkGridConfigMessages$2 = {
  gridConfiguration: 'Configuração da Grade',
  columnVisibilityOrder: 'Arraste os itens para definir a ordem e visibilidade das colunas da sua grade.',
  sortingSequence: 'Sequência da ordenação',
  findColumn: 'Localizar coluna',
  cancel: 'Cancelar',
  reset: 'Restaurar',
  complete: 'Concluir',
  columnsSelection: 'Seleção de colunas',
  availableColumns: 'Colunas disponíveis',
  selectedColumns: 'Colunas selecionadas',
  dataOrdering: 'Ordenação de dados',
  emptyMensage: {
    left: 'Nenhuma coluna disponível',
    right: 'Nenhuma coluna selecionada',
  },
  tab: {
    columns: 'Colunas',
    lineOrdering: 'Ordenação das linhas',
  },
  info: {
    successfullyConfigSaved: 'As configurações foram salvas com sucesso!',
  },
  confirm: {
    cancel: 'Descartar',
    save: 'Salvar',
    alert: 'Aviso',
    msgCancel: 'As alterações realizadas serão descartadas. Gostaria de salvar antes de sair?',
  },
  group: {
    visible: 'Visíveis',
    hidden: 'Ocultas',
  },
};

const snkConfigOptionsMessages$2 = {
  label: {
    nameField: "Nome do Campo *",
    typeValueDefault: "Tipo de valor padrão *",
    valueDefault: "Valor Padrão",
    clearDuplicate: "Limpar ao Duplicar",
    requiredField: "Campo Obrigatório",
    protectedField: "Campo Protegido"
  },
  options: {
    valueFixed: "Valor Fixo",
    variable: "Variável"
  },
  validation: {
    requiredField: "Informe um valor para "
  },
  fieldConfig: {
    title: "Configuração do campo",
    buttons: {
      cancel: "Cancelar",
      confirm: "Confirmar"
    }
  }
};
const snkFormConfigMessages$2 = {
  title: "Configuração do formulário",
  goBackTitle: "Voltar",
  applyConfig: "Aplicar configuração",
  availableFields: {
    title: "Campos disponíveis",
    labelNoFields: "Nenhum campo disponível",
    labelOneField: "1 campo disponível",
    labelAvailableFields: "Campos disponíveis",
    labelSearchField: "Buscar campo"
  },
  form: {
    subTitleInfo: "Inclua estes campos nos grupos ou deixe-os separados no topo do formulário!",
    labelDropField: "Arraste e solte um campo aqui",
    labelNewGroup: "Adicionar novo grupo",
    mainArea: "Área principal",
    tabGeneral: "Geral",
    canNotEditCustomGuide: "Não é possível editar guias detalhe e guias personalizadas",
    canNotEditDetailGuide: "Para realizar a configuração de uma tela de detalhes é necessário acessar a sua aba",
    createNewGroup: "Criar novo grupo",
    newGroup: "Criar novo grupo",
    noGuideSelected: "Selecione uma guia e comece a configurar",
    newGuide: "Nova guia"
  },
  buttons: {
    rename: "Renomear"
  },
  configs: {
    buttonLabel: "Configurações",
    selectedConfig: "configuração selecionada"
  },
  confirm: {
    title: "Aviso",
    deleteTab: "Você realmente deseja excluir a aba",
    deleteGuide: "Deseja realmente excluir a guia <b>{0}</b>?",
    cancel: "As alterações realizadas serão descartadas.<br/><br/><b>Gostaria de continuar?</b>",
    exit: "Ao sair as alterações serão descartadas.<br/><br/><b>Você realmente gostaria de sair?</b>",
    apply: "A <b>{0}</b> irá substituir a configuração atual!<br/><br/><b>Deseja continuar?</b>",
    group: "Não é possível salvar as configurações com um grupo vazio!",
    labelCancel: "Cancelar",
    labelDelete: "Excluir"
  },
  noGuideSelected: {
    title: "Atenção",
    message: "Selecione uma guia para iniciar a configuração!"
  },
  canNotAddFieldToGuide: {
    title: "Atenção",
    message: "Não é possível adicionar campos à guias customizadas ou guias detalhe!"
  },
  alert: {
    titleGroupExists: "Já existe um grupo com título",
    titleGroupEditing: "Há um <b>grupo<b/> em edição. <br/> Finalize a edição para salvar as configurações.",
    titleGuideExists: "Já existe uma guia com título",
    titleGuideEditing: "Há uma <b>guia<b/> em edição. <br/> Finalize a edição para salvar as configurações.",
    titleGuideReservedName: "Este título é reservado para configurações internas do sistema e não pode ser utilizado.",
    infoValidTitle: "Por favor, digite um título válido.",
    inTab: "na aba"
  },
  info: {
    successfullyConfigSaved: "As configurações foram salvas com sucesso!",
    successfullyGuideDeleted: 'A guia "{0}" foi excluída. Salve para confirmar a alteração.'
  },
  actions: {
    cancel: "Cancelar",
    save: "Salvar"
  },
  errors: {
    failMakeGroupsDraggable: "Falha ao tornar container de grupos arrastável: ",
    failMakeFieldContainerDraggable: "Falha ao tornar grupo arrastável: ",
    failFetchUserConfig: "Falha ao buscar configurações de formulário definida pelo usuário."
  },
  guidesConfigurator: {
    title: "Guias",
    searchGuide: "Buscar guia",
    visibleGuides: "Guias visíveis",
    hiddenGuides: "Guias ocultas",
    createNewGuide: "Criar nova guia",
    noHiddenGuides: "Nenhuma guia oculta",
    noVisibleGuides: "Nenhuma guia visível",
    canNotDeleteCustomGuide: "Não é possível excluir guias detalhe e guias personalizadas",
    actions: {
      hide: "Ocultar",
      show: "Tornar visível",
      delete: "Excluir",
    }
  }
};
const snkFieldConfigMessages$2 = {
  titleRemove: "Remover",
  titleConfigurations: "Configurações",
  titleAdd: "Adicionar",
  titleEdit: "Editar",
  titleAddToLayout: "Adicionar ao Layout"
};
const snkTabConfigMessages$2 = {
  labelRename: "Renomear",
  labelHide: "Ocultar",
  labelShow: "Exibir",
  labelDelete: "Excluir"
};

const messageResourcePtBR$2 = {
    snkApplication: snkApplicationMessages$2,
    snkDataUnit: snkDataUnitMessages$2,
    snkFormConfig: snkFormConfigMessages$2,
    snkConfigOptions: snkConfigOptionsMessages$2,
    snkTaskbar: snkTaskbarMessages$2,
    snkFieldConfig: snkFieldConfigMessages$2,
    snkFilterBar: snkFilterBarMessages$2,
    snkConfigurator: snkConfiguratorMessages$2,
    snkTabConfig: snkTabConfigMessages$2,
    crudUtils: crudUtilsMessages$2,
    snkGrid: snkGridMessages$2,
    snkGridConfig: snkGridConfigMessages$2,
    snkExporter: snkExporterMessages$2,
    snkDataExporter: snkDataExporterMessages$2,
    snkCrud: snkCrudMessages$2,
    snkSimpleCrud: snkSimpleCrudMessages$2,
    fileViewer: fileViewerMessages$2,
    snkFilterParamConfig: snkFilterParamConfigMessages$2,
    snkFilterFieldSearch: snkFilterFieldSearchMessages$2,
    snkSimpleBar: snkSimpleBarMessages$2,
    snkAttach: snkAttachMessages$2,
    snkImageInput: snkImageInputMessages$2,
    snkPersonalizedFilter: snkPersonalizedFilterMessages$2,
    snkEntityList: snkEntityListMessages$2,
    snkActionsButton: snkActionsButtonMessages$2,
    snkPrintSelector: snkPrintSelectorMessages$2,
    snkErrorHandler: snkErrorHandlerMessages$2,
    snkFilterList: snkFilterListMessages$2,
    snkLayoutFormConfig: snkLayoutFormConfigMessages$2,
    snkPesquisa: snkPesquisaMessages$2,
    snkSimpleFormConfig: snkSimpleFormConfigMessages$2,
    snkNumberingConfig: snkNumberingConfigMessages$2,
    dataUnitDataLoaderHelper: dataUnitDataLoaderHelperMessages$2,
    continuousInsertUtils: continuousInsertUtilsMessages$2,
    dataFetcher: dataFetcherMessages$2
};

const continuousInsertUtilsMessages$1 = {
  actions: {
    enable: "Enable continuous insertion",
    disable: "Disable continuous insertion"
  }
};

const crudUtilsMessages$1 = {
  errorArray: "CrudUtils.find must receive an array of fields, or a comma-separated list.",
};

const dataFetcherMessages$1 = {
  errorDetected: "Failure detected",
  noErrorMessage: "No error message",
  noErrorInfo: "No error information",
  clientEventNotRegisteredWarn: "Client event {{id}} not registered",
  clientEventNotRegisteredTitle: "ClientEvent not registered",
  clientEventNotRegisteredMsg: "Client event {{id}} occurred but no client event is registered in the application.",
  serviceExecutionError: "Error executing service",
  serviceExecutionErrorWarn: "Error executing service: {{err}}",
  serviceExecutionErrorWithName: "Error executing service: {{serviceName}}",
  serviceCanceled: "Service canceled"
};

const dataUnitDataLoaderHelperMessages$1 = {
  pagination: {
    title: "Warning",
    line1: "A very large number of records is being loaded.",
    line2: "We recommend that pagination be canceled and a filter for the records be created.",
    line3: "Do you want to cancel loading?"
  },
  checkbox: {
    loadAll: "Load all",
  },
  buttons: {
    continue: "Continue",
    cancel: "Cancel pagination"
  },
  errors: {
    noMessageBuilder: "Message file not found!"
  }
};

const fileViewerMessages$1 = {
  error: {
    title: "Export Error",
    message: "The user does not have permission to export the file."
  },
  message: {
    exportSuccess: "Successfully exported!",
  }
};

const snkActionsButtonMessages$1 = {
  title: {
    actions: "Actions",
    error: "Error",
    warning: "Warning"
  },
  action: {
    incorrectAction: "The action \"{{description}}\" cannot be executed because it was not saved correctly.",
    emptyParamName: "<b>Custom Rule:</b><br/><br/>The 'paramName' attribute must be provided",
    nonExistentType: "Action type not implemented: {{this.actionType}}"
  },
  launchScreen: {
    emptyField: "The action \"{{description}}\" could not be executed because the field \"{{localFieldLabel}}\" is empty."
  },
  form: {
    fillParams: "Enter the parameters"
  },
  clientEvent: {
    cancelMessage: "If you want to cancel, close this message.",
    labelCancel: "Cancel",
    labelConfirm: "Yes"
  },
  buttons: {
    apply: "Apply",
    cancel: "Cancel",
    yes: "Yes",
    no: "No"
  }
};

const snkApplicationMessages$1 = {
  dataUnit: {
    initDataUnitError: "Dataunit not initialized",
  },
  keyboard: {
    shortcuts: {
      searchApp: "Search for screens",
      showDesktop: "Show desktop",
      openHelp: "Open help"
    }
  },
  loading: {
    text: "Loading..."
  },
  newVersionPopup: {
    title: "Welcome to the new interface of {{screenName}}",
    info: "With a more modern, simple and intuitive journey, the improved performance of the new interface will boost your productivity.",
    okButton: "I want to try it!",
    cancelButton: "Return to previous interface",
  },
  search: {
    error: {
      title: "Search error",
      requiredField: "You need to provide the field {{fieldLabel}} to execute the search."
    }
  }
};

const snkAttachMessages$1 = {
  title: "Attach files",
  description: "Upload files or provide links you want to attach to the title",
  attachHint: "Download file",
  breadcrumbTitle: "Attach",
  finishedMessage: "The attachment has been successfully completed",
  finish: "Finish",
  cancelConfirmation: {
    title: "Attention",
    message: "The changes made will not be applied.<br/><br/><b>Do you want to continue anyway?</b>",
  },
  alertValidation: {
    fileAndLinkAtTheSameTime: {
      title: "Attention",
      message: "It is not allowed to insert the file and the link at the same time."
    },
    anyLinkOrFileFilled: {
      title: "Attention",
      message: `You must fill in the "Link" field or attach a file.`
    },
    descriptionCannotBeChanged: {
      title: "Attention",
      message: "The 'Description' field cannot be changed."
    },
    noRecordSelected: {
      message: "No record selected"
    }
  },
  taskbar: {
    titleDownload: "Download",
    titleLink: "Open link",
  },
  attachMetadata: {
    lblCode: "Code",
    lblDescription: "Description",
    lblFileOrLink: "File / Link",
    lblUser: "User",
    lblDate: "Update date",
    lblFile: "File",
    lblSubTitle: "Click to select a file",
  }
};

const snkConfiguratorMessages$1 = {
  titleConfigurations: "Settings",
  subTitleModeConfig: "View mode",
  labelConfigGrid: "Configure grid",
  labelConfigForm: "Configure form",
  labelGrid: "Grid",
  labelForm: "Form",
  labelLayoutForm: "Form layout",
  labelNumberingConfig: "Numbering configuration",
  buttons: {
    cancel: "Cancel",
    save: "Save"
  }
};

const snkCrudMessages$1 = {
  title: {
    clone: "Duplicate record",
    insert: "Register record",
    update: "Update record",
    clean: "{{ENTITY_NAME}}",
  },
  newRecord: "New Record",
  findColumn: "Search fields (Ctrl+F)",
  goBackTitle: "Back",
  guide: {
    tooltip: {
      disabledDetail: "Complete the registration to access this tab."
    }
  },
  multipleEdition: {
    editing: "Editing {{COUNT}} records"
  },
  detail: {
    tooltip: {
      needSingleSelection: "To change details, you need to have one (and only one) record selected."
    }
  },
  errors: {
    resourceIDNotProvided: "Internal error: resourceID not provided"
  },
  shortcuts: {
    toggleView: "Toggle between form and grid mode.",
    saveData: "Save data.",
    addRecord: "Add a new record.",
    removeRecord: "Remove the selected record.",
    refreshData: "Refresh data.",
    cancelAction: "Cancel an action."
  },
  customButtons: {
    filter: "Opens the filters panel",
    entitySearch: "Search in entity"
  },
  entitySearch: {
    label: "Search for records",
    placeholder: "Type what you are looking for here..."
  }
};

const snkDataExporterMessages$1 = {
  group: {
    export: {
      default: "Export to",
      multiSelected: "Export {0} selected rows",
      selectedLine: "Export only 1 selected row",
      title: "Export",
    },
    custom: "Custom"
  },
  label: {
    currentPage: "Current page only",
    allRecords: "All records",
    spreadsheet: "Spreadsheet",
    cube: "Cube",
    sendByEmail: "Send by email",
  },
  message: {
    emailSuccess: "Email sent successfully",
    exportError: "Failed to export data",
    unknownFailure: "The reason for the failure could not be identified.",
    exportPermission: "The user does not have permission to export the file.",
  },
  title: {
    error: "Error",
    permission: "Failure detected",
  },
  limitExceeded: {
    title: "Attention",
    description: "Only the first {{limit}} records will be exported. Do you want to continue?",
    subdescription: "If you need to export a larger number of records, use the Data Extractor through a Custom Report.",
    cancel: "Cancel",
    continue: "Continue"
  }
};

const snkDataUnitMessages$1 = {
  saveInfo: {
    clone: 'Duplication completed!',
    insert: 'Inclusion completed!',
    update: 'Update completed!',
    updateMultiples: 'Multiple records successfully updated!'
  },
  cancelInfo: {
    clone: 'Duplication discarded!',
    insert: 'The inclusion has been discarded!',
    update: 'The edit has been discarded!',
    updateMultiples: 'The editing of multiple records has been successfully discarded!'
  },
  confirm: {
    cancel: 'Cancel',
    delete: 'Delete',
    updateMultipleConfirm: 'Confirm edit',
    yes: 'Yes',
    no: 'No',
  },
  mainTab: 'Main',
  removeInfo: 'Record successfully removed!',
  cancelConfirmationTitle: 'Warning',
  cancelConfirmation: 'The changes made will be discarded<br/><br/><b>Do you really want to cancel?',
  removeConfirmationTitle: 'Warning',
  removeConfirmation: 'Do you really want to delete the current record?',
  multipleUpdateConfirmationTitle: 'Confirm multiple edit',
  multipleUpdateConfirmationMessage: 'The information in the fields below has been changed and will be applied to {{size}} records',
  forbidden: 'No permission',
  forbiddenUpdate: 'Cannot make changes. Check access permissions.',
  forbiddenInsert: 'Cannot include. Check access permissions.',
  forbiddenClone: 'Cannot duplicate. Check access permissions.',
  forbiddenRemove: 'Cannot remove. Check access permissions.',
  removeAllConfirmation: 'The <strong>{{size}} selected records</strong> will be deleted.<br/><br/><strong>Do you really want to continue?</strong>',
  removeAllInfo: 'The {{size}} records have been successfully removed!',
  fieldNameRequired: 'You must provide the column name.',
  selectedRecordsDeprecated: 'SnkDataUnit: The `selectedRecords` method has been deprecated. Use the `selectionInfo` method instead.',
  selectedRecordsVirtualError: 'Internal error: Unable to get the selected records. The current selection is virtual. Use the `selectionInfo` attribute.',
  main: 'Main',
};

const snkEntityListMessages$1 = {
  selected: "Selected:"
};

const snkErrorHandlerMessages$1 = {
  title: {
    promiseRejected: "Promise rejected",
    errorDetected: "Error detected"
  },
  message: {
    undeterminedPromiseRejection: "Internal error: A promise was rejected without a determined reason.",
    cannotOpenHelp: "Cannot open help outside the Sankhya workspace",
    silentExceptionIgnored: "Silent Exception ignored"
  },
  errorCode: {
    label: "Code: "
  },
  error: {
    internal: "Internal error"
  }
};

const snkExporterMessages$1 = {
  emailSenderTitle: "Send by email",
  emailSenderBackButton: "Back",
  emailSenderNextButton: "Next",
  emailSenderCancelButton: "Cancel",
  emailSenderSendButton: "Send",
  emailSenderOptStep_subtitle: "First, choose the file format",
  emailSenderOptStep_lblFormat: "Format:",
  emailSenderOptStep_formatPDF: "PDF (.pdf)",
  emailSenderOptStep_formatXLS: "Spreadsheet (.xls)",
  emailSenderOptStep_export: "Export:",
  emailSenderOptStep_allData: "Entire grid",
  emailSenderOptStep_currentPage: "Current page only",
  emailSenderOptStep_someRecords: "{{SELECTION_COUNT}} selected rows",
  emailSenderOptStep_oneRecord: "Selected row only",
  emailSenderInfoStep_subtitle: "Email information",
  emailSenderInfoStep_sendTo: "Send to",
  emailSenderInfoStep_subject: "Subject",
  emailSenderInfoStep_message: "Message"
};

const snkFilterBarMessages$1 = {
  addFilter: "Add filter",
  pinFilter: "Pin filter",
  unpinFilter: "Unpin filter",
  removeFilter: "Remove filter",
  cleanFilter: "Clear",
  applyFilter: "Apply",
  findFilter: "Search filters...",
  findField: "Search filters...",
  modalFindFilter: "Search filter",
  emptyFiltersList: "No filters available",
  emptyAppliedFiltersList: "No filters applied",
  customFilter: "Custom filter",
  defaultFilter: "Default filter",
  failToLoadConfig: "Failed to fetch filter configuration",
  clearAllFilters: "Clear all filters",
  successfullyCleaned: "Filter cleared successfully!",
  activeFilter: "{{ACTIVE_FILTERS}} filter applied",
  activeFilters: "{{ACTIVE_FILTERS}} filters applied",
  noActiveFilters: "No filters applied",
  modalDefaultFilterTitle: "Default filter",
  modalInfoTextEditDefault: "Use the old layout to edit your default filter, we'll bring a new experience soon.",
  modalInfoTextCreateDefault: "Use the old layout to create your default filter, we'll bring a new experience soon.",
  modalPersonalizedFilterTitle: "Custom filter",
  modalPersonalizedFilterSubTitle: "Manage your filters",
  modalInfoTextCreateEditPersonalized: "Use the old layout to create or edit filters, we'll bring a new experience soon",
  modalInfoTextCreateFilter: "Create custom filter",
  modalInfoTextNoFilterRegister: "You don't have any registered filters.",
  modalOkButtonLabel: "Apply",
  modalCancelButtonLabel: "Clear",
  binarySelectTooltip: "Showing records",
  multiListToltip: "selected",
  onlyStartToltip: "From",
  onlyEndToltip: "To",
  fullPeriodTooltip: "{{LABEL}} date: {{START_LABEL}} to {{END_LABEL}}",
  labelStart: "Initial",
  labelEnd: "Final",
  labelTo: "to",
  fullIntervalTooltip: "{{LABEL}}: {{START_LABEL}} to {{END_LABEL}}",
  filters: "Filters",
  personalizedCount: "{{activeCount}} selected",
  filterItem: {
    updateFilterItemNotFound: "FilterItem not found, it will not be updated.",
    addFilterItemExists: "FilterItem already exists, it will not be added again.",
    removeFilterItemNotFound: "FilterItem not found"
  },
  filterModal: {
    title: "Filters",
    okButtonLabel: "Apply",
    cancelButtonLabel: "Clear all",
    customFilters: "Custom filters",
    quickFilters: "Quick filters",
    clearModal: "Clear",
    defaultFilter: {
      title: "Default filter",
      edit: "Edit filter",
      remove: "Delete filter",
      create: "Create default filter",
    },
    validations: {
      requiredFilter: "Required filter",
      notFullFilled: {
        title: "Partially filled filter",
        message: "Please complete all filter information."
      },
      notSaved: {
        title: "Attention",
        message: "The changes made will not be applied.<br/><br/><b>Do you want to continue anyway?</b>"
      }
    }
  },
};

const snkFilterFieldSearchMessages$1 = {
  searchLabel: "Search field",
  fieldLabel: "Fields of {{link}}",
  linkLabel: "Categories of {{link}}",
  groupEmpty: "There are no categories for selection",
  searchEmpty: "No results found"
};

const snkFilterListMessages$1 = {
  showMore: "Show more"
};

const snkFilterParamConfigMessages$1 = {
  modalTitle: "Variable value configuration",
  labelSystemConfig: "Use system definitions",
  labelUserConfig: "Use custom definitions",
  labelInstance: "Category",
  labelField: "Field",
  labelDescription: "Description (required) *",
  labelType: "Type (required) *",
  labelTypeValues: {
    date: "Date",
    text: "Text",
    integer: "Integer Number",
    decimal: "Decimal Number",
  },
  labelExpression: "Expression",
  labelCancel: "Cancel",
  labelSave: "Save"
};

const snkLayoutFormConfigMessages$1 = {
  cascadeLayout: {
    label: "Cascade compact layout",
    description: "All fields will be organized in a single column."
  },
  classicCascadeLayout: {
    label: "Classic cascade layout",
    description: "All fields will be organized in a single column with classic style."
  },
  sideBySideLayout: {
    label: "Side by side compact layout",
    description: "All fields will be arranged side by side, automatically adjusting to the screen width."
  },
  classicSideBySideLayout: {
    label: "Classic side by side layout",
    description: "All fields will be arranged side by side with classic style, automatically adjusting to the screen width."
  }
};

const snkNumberingConfigMessages$1 = {
  labelAutoNumbering: "Auto Numbering",
  labelInitialNumber: "Initial Number"
};

const snkPersonalizedFilterMessages$1 = {
  info: {
    titleEdit: "Edit custom filter",
    titleAdd: "Create custom filter",
    titleCreateDefault: "Apply default filter",
    titleEditDefault: "Edit default filter",
    titleCollapsible: "Expression to be applied (generated by the assistant)",
    labelSearchField: "Search field",
    labelOperator: "Operator",
    labelValueVarible: "Variable value",
    titleTooltip: "By activating a variable value, it's possible to insert a different value each time the filter is applied",
    labelAddNewExpression: "Add new expression line",
    labelDeleteExpression: "Remove expression",
    labelDeleteItem: "Remove item",
    labelDisabledAddGroupButton: "Custom Filters have a limit of {{LIMIT_GROUP_LEVEL}} Condition and Value Groups",
    labelDisabledAddExpressionButton: "Fill in required fields or indicate variable values in the group expressions before adding more items",
    labelCancel: "Cancel",
    labelSave: "Save",
    labelNameFilter: "Filter name",
    labelExpression: "Expression",
    badgeVariable: "variable",
    noDataFound: "No filters found",
    condition: "Condition",
    conditionAnd: "AND",
    conditionOr: "OR",
    labelDefaultValue: "Value",
    addGroup: "Add group",
    addField: "Add field",
    applyExpression: "Expression to be applied:",
    tooltipDisabledAssistentMode: "Expression not supported by the assistant.",
    activeModeAdvanced: "Activate advanced mode",
    activeModeAssistent: "Activate assistant mode",
    textInputDisabled: "Field disabled for default filters",
    checkVariableDisabled: "Default filter cannot be variable.",
    deleteDefaultFilterConfirm: "Do you want to delete the <b>default filter</b>?",
  },
  confirmExpression: {
    title: "Warning",
    description: `The condition information will be discarded.</br></br><b>Do you want to continue?</b>`
  },
  confirmGroup: {
    title: "Warning",
    description: `The Group information and its Conditions will be discarded.</br></br><b>Do you want to continue?</b>`
  },
  confirmCancel: {
    title: "Warning",
    description: `The changes made will be discarded.</br></br><b>Do you want to continue?</b>`
  },
  confirmChangeModeAssistent: {
    title: "Warning",
    description: `When modifying the expression, assistant mode will be disabled.</br></br><b>Do you want to continue?</b>`
  },
  confirmChangeModeAdvanced: {
    title: "Warning",
    description: `When returning to assistant mode, your changes will be lost.</br></br><b>Do you want to continue?</b>`
  },
  confirmSaveModeAdvanced: {
    title: "Warning",
    description: `When modifying the expression, assistant mode will be disabled.</br></br><b>Do you want to continue?</b>`
  },
  operador: {
    firstLevel: "Selection will be enabled after adding the second line of rules.",
    and: "Will be true if all conditions are met.",
    or: "Will be true if any of the conditions is met."
  },
  error: {
    title: "Attention",
    description: "There is at least one required field not filled."
  },
  errorValidation: {
    title: "Error in expression"
  },
  confirmSave: {
    title: "Filter created successfully!"
  },
  confirmEdit: {
    title: "Filter updated successfully!"
  },
  deleteConfirm: {
    title: "Warning",
    message: "Do you really want to delete the filter '{{filterName}}'?"
  },
  listActions: {
    edit: "Edit",
    delete: "Delete"
  },
  footerActions: {
    clear: "Clear",
    create: "Create filter"
  },
  operands: {
    equal: "Equal (=)",
    different: "Different (<>)",
    like: "Contains (LIKE)",
    in: "Contained in (IN)",
    startWith: "Starts with (%?)",
    finishedWith: "Ends with (?%)",
    null: "Empty (NULL)",
    notNull: "Not Empty (NOT NULL)",
    larger: "Greater than (>)",
    largerEqual: "Greater than or Equal (>=)",
    smaller: "Less than (<)",
    smallerEqual: "Less than or Equal (<=)"
  }
};

const snkPesquisaMessages$1 = {
  search: {
    label: "Search",
    button: "Search",
    clearButton: "Clear search",
    waitMessage: "Please wait, searching records...",
    noResultsMessage: "No records found",
    initialMessage: "Your search results will appear here...",
    resultsFoundSingular: "1 record found",
    resultsFoundPlural: "{{COUNT}} registros encontrados",
    limitMessage: "This search was limited, there are more results."
  },
  viewMode: {
    tableMode: "Grid mode",
    listMode: "List mode",
    treeMode: "Hierarchical tree mode"
  },
  tree: {
    emptyMessage: "No records found...",
    expandButton: "Expand",
    collapseButton: "Collapse",
    errorTitle: "Error",
    nonAnalyticError: "There is at least one invalid record selected. You must select items of the 'analytic' type."
  }
};

const snkPrintSelectorMessages$1 = {
  title: {
    warning: "Warning",
    printerSelection: "Printer selection",
    remotePrintersTab: "Remote printers",
    localPrintersTab: "Local printers"
  },
  subtitle: {
    document: "Document:",
    jobs: "Jobs:"
  },
  message: {
    canceledPrint: "The print will be canceled. Do you really want to continue?",
    noPrinters: "There are no printers for selection",
    savePrinter: "Always use this selection"
  },
  button: {
    print: "Print",
    cancel: "Cancel",
    yes: "Yes",
    no: "No"
  }
};

const snkSimpleBarMessages$1 = {
  backTitle: "Back"
};

const snkSimpleCrudMessages$1 = {
  findColumn: "Search columns (Ctrl+F)",
  findFields: "Search fields (Ctrl+F)",
  formConfigUnavaliable: {
    title: "Notice",
    message: 'The "Configure form" option will be available soon. In the meantime, access the form configuration through previous layouts, HTML5 or Flex.'
  },
  keyboardShortcuts: {
    saveData: "Saves the data.",
    addRecord: "Adds a new record.",
    removeRecord: "Removes the selected record.",
    cancelAction: "Cancels an action."
  }
};

const snkSimpleFormConfigMessages$1 = {
  popup: {
    title: "Configure form"
  },
  lists: {
    availableFields: "Available fields",
    selectedFields: "Selected fields",
    entityLabel: "field",
    entityLabelPlural: "fields"
  },
  buttons: {
    restore: "Restore",
    cancel: "Cancel",
    save: "Save"
  }
};

const snkTaskbarMessages$1 = {
  titleUpdateMultiple: "Edit Multiple",
  titleUpdate: "Edit",
  titlePrevious: "Previous",
  titleNext: "Next",
  titleRefresh: "Refresh",
  titleClone: "Duplicate",
  titleRemove: "Delete",
  titleMoreOptions: "More Options",
  titleInsert: "Register",
  titleCancel: "Cancel",
  titleSave: "Save",
  titleGridMode: "Grid Mode",
  titleFormMode: "Form Mode",
  titleConfigurator: "Settings",
  titleAttach: "Attach",
  forbidden: "Permission not granted"
};

const snkImageInputMessages$1 = {
  msgTipoImage: "Invalid file type. Accepted types: ",
  errorImageSize: "File size exceeds the maximum allowed: ",
  defaultLabel: "Click or drag to upload an image",
  removeImage: "Remove image",
  imageAlt: "Preview image",
  imagePreview: "Image Preview",
  uploadError: "Error uploading file",
  downloadError: "Error downloading image",
  errorTitle: "Error"
};

const snkGridMessages$1 = {
  findColumn: 'Search columns (Ctrl+F)',
  cancelConfirmation: {
    title: 'Warning',
    message: 'The changes made will be discarded<br/><br/><b>Do you really want to cancel?</b>',
  },
  requiredFiltersNotFilled: {
    title: 'Error',
    message: 'There are required filters that are not filled.',
  },
};
const snkGridConfigMessages$1 = {
  gridConfiguration: 'Grid Configuration',
  columnVisibilityOrder: 'Drag items to define the order and visibility of columns in your grid.',
  sortingSequence: 'Sorting sequence',
  findColumn: 'Find column',
  cancel: 'Cancel',
  reset: 'Reset',
  complete: 'Complete',
  columnsSelection: 'Column selection',
  availableColumns: 'Available columns',
  selectedColumns: 'Selected columns',
  dataOrdering: 'Data ordering',
  emptyMensage: {
    left: 'No columns available',
    right: 'No columns selected',
  },
  tab: {
    columns: 'Columns',
    lineOrdering: 'Row ordering',
  },
  info: {
    successfullyConfigSaved: 'The settings have been saved successfully!',
  },
  confirm: {
    cancel: 'Discard',
    save: 'Save',
    alert: 'Warning',
    msgCancel: 'The changes made will be discarded. Do you want to save before exiting?',
  },
  group: {
    visible: 'Visible',
    hidden: 'Hidden',
  },
};

const snkConfigOptionsMessages$1 = {
  label: {
    nameField: "Field Name *",
    typeValueDefault: "Default Value Type *",
    valueDefault: "Default Value",
    clearDuplicate: "Clear on Duplicate",
    requiredField: "Required Field",
    protectedField: "Protected Field"
  },
  options: {
    valueFixed: "Fixed Value",
    variable: "Variable"
  },
  validation: {
    requiredField: "Enter a value for Field Name *"
  },
  fieldConfig: {
    title: "Field configuration",
    buttons: {
      cancel: "Cancel",
      confirm: "Confirm"
    }
  }
};
const snkFormConfigMessages$1 = {
  title: "Form configuration",
  goBackTitle: "Back",
  applyConfig: "Apply configuration",
  availableFields: {
    title: "Available fields",
    labelNoFields: "No fields available",
    labelOneField: "1 field available",
    labelAvailableFields: "Available fields",
    labelSearchField: "Search field"
  },
  form: {
    subTitleInfo: "Include these fields in groups or leave them separate at the top of the form!",
    labelDropField: "Drag and drop a field here",
    labelNewGroup: "Add new group",
    mainArea: "Main area",
    tabGeneral: "General",
    canNotEditCustomGuide: "It is not possible to edit detail tabs and custom tabs",
    canNotEditDetailGuide: "To configure a detail screen, you must access its tab",
    createNewGroup: "Create new group",
    newGroup: "New group",
    noGuideSelected: "Select a tab and start configuring",
    newGuide: "New tab"
  },
  buttons: {
    rename: "Rename"
  },
  configs: {
    buttonLabel: "Settings",
    selectedConfig: "selected configuration"
  },
  confirm: {
    title: "Warning",
    deleteTab: "Do you really want to delete the tab",
    deleteGuide: "Do you really want to delete the guide <b>{0}</b>?",
    cancel: "The changes made will be discarded.<br/><br/><b>Do you want to continue?</b>",
    exit: "When exiting, changes will be discarded.<br/><br/><b>Do you really want to exit?</b>",
    apply: "The <b>{0}</b> will replace the current configuration!<br/><br/><b>Do you want to continue?</b>",
    group: "It is not possible to save settings with an empty group!",
    labelCancel: "Cancel",
    labelDelete: "Delete"
  },
  noGuideSelected: {
    title: "Attention",
    message: "Select a guide to start configuration!"
  },
  canNotAddFieldToGuide: {
    title: "Attention",
    message: "It is not possible to add fields to detail tabs or custom tabs!"
  },
  alert: {
    titleGroupExists: "A group with this title already exists",
    titleGroupEditing: "There is a <b>group<b/> being edited. <br/> Finish editing to save the settings.",
    titleGuideExists: "A guide with this title already exists",
    titleGuideEditing: "There is a <b>guide<b/> being edited. <br/> Finish editing to save the settings.",
    titleGuideReservedName: "This title is reserved for internal system settings and cannot be used.",
    infoValidTitle: "Please enter a valid title.",
    inTab: "in the tab"
  },
  info: {
    successfullyConfigSaved: "The settings have been saved successfully!",
    successfullyGuideDeleted: 'The guide "{0}" has been deleted. Save to confirm the change.'
  },
  actions: {
    cancel: "Cancel",
    save: "Save"
  },
  errors: {
    failMakeGroupsDraggable: "Failed to make groups container draggable: ",
    failMakeFieldContainerDraggable: "Failed to make group draggable: ",
    failFetchUserConfig: "Failed to fetch user-defined form configurations."
  },
  guidesConfigurator: {
    title: "Tabs",
    searchGuide: "Search tab",
    visibleGuides: "Visible tabs",
    hiddenGuides: "Hidden tabs",
    createNewGuide: "Create new tab",
    noHiddenGuides: "No hidden tabs",
    noVisibleGuides: "No visible tabs",
    canNotDeleteCustomGuide: "Is not possible to detail detail tabs os a custom tabs",
    actions: {
      hide: "Hide",
      show: "Make visible",
      delete: "Delete"
    }
  }
};
const snkFieldConfigMessages$1 = {
  titleRemove: "Remove",
  titleConfigurations: "Settings",
  titleAdd: "Add",
  titleEdit: "Edit",
  titleAddToLayout: "Add to Layout"
};
const snkTabConfigMessages$1 = {
  labelRename: "Rename",
  labelHide: "Hide",
  labelShow: "Show",
  labelDelete: "Delete"
};

const messageResourcePtBR$1 = {
    snkApplication: snkApplicationMessages$1,
    snkDataUnit: snkDataUnitMessages$1,
    snkFormConfig: snkFormConfigMessages$1,
    snkConfigOptions: snkConfigOptionsMessages$1,
    snkTaskbar: snkTaskbarMessages$1,
    snkFieldConfig: snkFieldConfigMessages$1,
    snkFilterBar: snkFilterBarMessages$1,
    snkConfigurator: snkConfiguratorMessages$1,
    snkTabConfig: snkTabConfigMessages$1,
    crudUtils: crudUtilsMessages$1,
    snkGrid: snkGridMessages$1,
    snkGridConfig: snkGridConfigMessages$1,
    snkExporter: snkExporterMessages$1,
    snkDataExporter: snkDataExporterMessages$1,
    snkCrud: snkCrudMessages$1,
    snkSimpleCrud: snkSimpleCrudMessages$1,
    fileViewer: fileViewerMessages$1,
    snkFilterParamConfig: snkFilterParamConfigMessages$1,
    snkFilterFieldSearch: snkFilterFieldSearchMessages$1,
    snkSimpleBar: snkSimpleBarMessages$1,
    snkAttach: snkAttachMessages$1,
    snkImageInput: snkImageInputMessages$1,
    snkPersonalizedFilter: snkPersonalizedFilterMessages$1,
    snkEntityList: snkEntityListMessages$1,
    snkActionsButton: snkActionsButtonMessages$1,
    snkPrintSelector: snkPrintSelectorMessages$1,
    snkErrorHandler: snkErrorHandlerMessages$1,
    snkFilterList: snkFilterListMessages$1,
    snkLayoutFormConfig: snkLayoutFormConfigMessages$1,
    snkPesquisa: snkPesquisaMessages$1,
    snkSimpleFormConfig: snkSimpleFormConfigMessages$1,
    snkNumberingConfig: snkNumberingConfigMessages$1,
    dataUnitDataLoaderHelper: dataUnitDataLoaderHelperMessages$1,
    continuousInsertUtils: continuousInsertUtilsMessages$1,
    dataFetcher: dataFetcherMessages$1
};

const continuousInsertUtilsMessages = {
  actions: {
    enable: "Activar inserción continua",
    disable: "Desactivar inserción continua"
  }
};

const crudUtilsMessages = {
  errorArray: "CrudUtils.find debe recibir un array de campos, o una lista separada por comas.",
};

const dataFetcherMessages = {
  errorDetected: "Fallo detectado",
  noErrorMessage: "No hay mensaje de error",
  noErrorInfo: "No hay información sobre el error",
  clientEventNotRegisteredWarn: "Evento de cliente {{id}} no registrado",
  clientEventNotRegisteredTitle: "Evento de cliente no registrado",
  clientEventNotRegisteredMsg: "Ocurrió el evento de cliente {{id}} pero no hay evento de cliente registrado en la aplicación.",
  serviceExecutionError: "Error al ejecutar el servicio",
  serviceExecutionErrorWarn: "Error al ejecutar el servicio: {{err}}",
  serviceExecutionErrorWithName: "Error al ejecutar el servicio: {{serviceName}}",
  serviceCanceled: "Servicio cancelado"
};

const dataUnitDataLoaderHelperMessages = {
  pagination: {
    title: "Aviso",
    line1: "Se está cargando una cantidad muy grande de registros.",
    line2: "Recomendamos que se cancele la paginación y se cree un filtro para los registros.",
    line3: "¿Desea cancelar la carga?"
  },
  checkbox: {
    loadAll: "Cargar todo",
  },
  buttons: {
    continue: "Continuar",
    cancel: "Cancelar paginación"
  },
  errors: {
    noMessageBuilder: "¡Archivo de mensajes no encontrado!"
  }
};

const fileViewerMessages = {
  error: {
    title: "Error en la Exportación",
    message: "El usuario no tiene permiso para exportar el archivo."
  },
  message: {
    exportSuccess: "¡Exportado con éxito!",
  }
};

const snkActionsButtonMessages = {
  title: {
    actions: "Acciones",
    error: "Error",
    warning: "Aviso"
  },
  action: {
    incorrectAction: "La acción \"{{description}}\" no puede ejecutarse porque no se guardó correctamente.",
    emptyParamName: "<b>Regla Personalizada:</b><br/><br/>Es necesario informar el atributo 'paramName'",
    nonExistentType: "Tipo de acción no implementada: {{this.actionType}}"
  },
  launchScreen: {
    emptyField: "La acción \"{{description}}\" no pudo ejecutarse porque el campo \"{{localFieldLabel}}\" está vacío."
  },
  form: {
    fillParams: "Informe los parámetros"
  },
  clientEvent: {
    cancelMessage: "Si desea cancelar, cierre este mensaje.",
    labelCancel: "Cancelar",
    labelConfirm: "Sí"
  },
  buttons: {
    apply: "Aplicar",
    cancel: "Cancelar",
    yes: "Sí",
    no: "No"
  }
};

const snkApplicationMessages = {
  dataUnit: {
    initDataUnitError: "Dataunit no inicializado",
  },
  keyboard: {
    shortcuts: {
      searchApp: "Buscar pantallas",
      showDesktop: "Mostrar escritorio",
      openHelp: "Abrir ayuda"
    }
  },
  loading: {
    text: "Cargando..."
  },
  newVersionPopup: {
    title: "Bienvenido a la nueva interfaz de {{screenName}}",
    info: "Con un recorrido más moderno, simple e intuitivo, el rendimiento mejorado de la nueva interfaz impulsará su productividad.",
    okButton: "¡Quiero probarlo!",
    cancelButton: "Volver a la interfaz anterior",
  },
  search: {
    error: {
      title: "Error al buscar",
      requiredField: "Es necesario informar el campo {{fieldLabel}} para ejecutar la búsqueda."
    }
  }
};

const snkAttachMessages = {
  title: "Adjuntar archivos",
  description: "Suba los archivos o proporcione enlaces que desea adjuntar al título",
  attachHint: "Descargar archivo",
  breadcrumbTitle: "Adjuntar",
  finishedMessage: "El archivo adjunto se ha finalizado con éxito",
  finish: "Finalizar",
  cancelConfirmation: {
    title: "Atención",
    message: "Los cambios realizados no se aplicarán.<br/><br/><b>¿Desea continuar de todos modos?</b>",
  },
  alertValidation: {
    fileAndLinkAtTheSameTime: {
      title: "Atención",
      message: "No está permitido insertar el archivo y el enlace al mismo tiempo."
    },
    anyLinkOrFileFilled: {
      title: "Atención",
      message: `Es necesario completar el campo "Enlace" o adjuntar un archivo.`
    },
    descriptionCannotBeChanged: {
      title: "Atención",
      message: "El campo 'Descripción' no puede ser modificado."
    },
    noRecordSelected: {
      message: "Ningún registro seleccionado"
    }
  },
  taskbar: {
    titleDownload: "Descargar",
    titleLink: "Abrir enlace",
  },
  attachMetadata: {
    lblCode: "Código",
    lblDescription: "Descripción",
    lblFileOrLink: "Archivo / Enlace",
    lblUser: "Usuario",
    lblDate: "Fecha de modificación",
    lblFile: "Archivo",
    lblSubTitle: "Haga clic para seleccionar un archivo",
  }
};

const snkConfiguratorMessages = {
  titleConfigurations: "Configuraciones",
  subTitleModeConfig: "Modo de visualización",
  labelConfigGrid: "Configurar cuadrícula",
  labelConfigForm: "Configurar formulario",
  labelGrid: "Cuadrícula",
  labelForm: "Formulario",
  labelLayoutForm: "Diseño del formulario",
  labelNumberingConfig: "Configuración de numeración",
  buttons: {
    cancel: "Cancelar",
    save: "Guardar"
  }
};

const snkCrudMessages = {
  title: {
    clone: "Duplicar registro",
    insert: "Registrar nuevo",
    update: "Modificar registro",
    clean: "{{ENTITY_NAME}}",
  },
  newRecord: "Nuevo Registro",
  findColumn: "Buscar campos (Ctrl+F)",
  goBackTitle: "Volver",
  guide: {
    tooltip: {
      disabledDetail: "Complete el registro para acceder a esta pestaña."
    }
  },
  multipleEdition: {
    editing: "Editando {{COUNT}} registros"
  },
  detail: {
    tooltip: {
      needSingleSelection: "Para cambiar detalles, necesita tener un (y solo un) registro seleccionado."
    }
  },
  errors: {
    resourceIDNotProvided: "Error interno: resourceID no proporcionado"
  },
  shortcuts: {
    toggleView: "Alternar entre modo formulario y cuadrícula.",
    saveData: "Guardar datos.",
    addRecord: "Añadir un nuevo registro.",
    removeRecord: "Eliminar el registro seleccionado.",
    refreshData: "Actualizar datos.",
    cancelAction: "Cancelar una acción."
  },
  customButtons: {
    filter: "Abre el panel de filtros",
    entitySearch: "Buscar en entidad"
  },
  entitySearch: {
    label: "Búsqueda de registros",
    placeholder: "Escribe lo que buscas aquí..."
  }
};

const snkDataExporterMessages = {
  group: {
    export: {
      default: "Exportar a",
      multiSelected: "Exportar {0} filas seleccionadas",
      selectedLine: "Exportar solo 1 fila seleccionada",
      title: "Exportar",
    },
    custom: "Personalizado"
  },
  label: {
    currentPage: "Solo la página actual",
    allRecords: "Todos los registros",
    spreadsheet: "Hoja de cálculo",
    cube: "Cubo",
    sendByEmail: "Enviar por correo electrónico",
  },
  message: {
    emailSuccess: "Correo electrónico enviado con éxito",
    exportError: "Error al exportar datos",
    unknownFailure: "No se pudo identificar el motivo del fallo.",
    exportPermission: "El usuario no tiene permiso para exportar el archivo.",
  },
  title: {
    error: "Error",
    permission: "Fallo detectado",
  },
  limitExceeded: {
    title: "Atención",
    description: "Solo se exportarán los primeros {{limit}} registros. ¿Desea continuar?",
    subdescription: "Si necesita exportar una mayor cantidad de registros, utilice el Extractor de Datos a través de un Informe Personalizado.",
    cancel: "Cancelar",
    continue: "Continuar"
  }
};

const snkDataUnitMessages = {
  saveInfo: {
    clone: '¡Duplicación realizada!',
    insert: '¡Inclusión realizada!',
    update: '¡Modificación realizada!',
    updateMultiples: '¡Múltiples registros modificados con éxito!'
  },
  cancelInfo: {
    clone: '¡Duplicación descartada!',
    insert: '¡La inclusión ha sido descartada!',
    update: '¡La edición ha sido descartada!',
    updateMultiples: '¡La edición de múltiples registros ha sido descartada con éxito!'
  },
  confirm: {
    cancel: 'Cancelar',
    delete: 'Eliminar',
    updateMultipleConfirm: 'Confirmar edición',
    yes: 'Sí',
    no: 'No',
  },
  mainTab: 'Principal',
  removeInfo: '¡Registro eliminado con éxito!',
  cancelConfirmationTitle: 'Aviso',
  cancelConfirmation: 'Los cambios realizados serán descartados<br/><br/><b>¿Realmente desea cancelar?',
  removeConfirmationTitle: 'Aviso',
  removeConfirmation: '¿Realmente desea eliminar el registro actual?',
  multipleUpdateConfirmationTitle: 'Confirmar edición múltiple',
  multipleUpdateConfirmationMessage: 'La información de los campos a continuación ha sido modificada y se aplicará a {{size}} registros',
  forbidden: 'Sin permiso',
  forbiddenUpdate: 'No es posible realizar modificaciones. Verifique los permisos de acceso.',
  forbiddenInsert: 'No es posible incluir. Verifique los permisos de acceso.',
  forbiddenClone: 'No es posible duplicar. Verifique los permisos de acceso.',
  forbiddenRemove: 'No es posible eliminar. Verifique los permisos de acceso.',
  removeAllConfirmation: 'Los <strong>{{size}} registros seleccionados</strong> serán eliminados.<br/><br/><strong>¿Realmente desea continuar?</strong>',
  removeAllInfo: '¡Los {{size}} registros han sido eliminados con éxito!',
  fieldNameRequired: 'Es necesario informar el nombre de la columna.',
  selectedRecordsDeprecated: 'SnkDataUnit: El método `selectedRecords` ha sido descontinuado. Use el método `selectionInfo`.',
  selectedRecordsVirtualError: 'Error interno: Imposible obtener los registros seleccionados. La selección actual es virtual. Use el atributo `selectionInfo`.',
  main: 'Principal',
};

const snkEntityListMessages = {
  selected: "Seleccionados:"
};

const snkErrorHandlerMessages = {
  title: {
    promiseRejected: "Promesa rechazada",
    errorDetected: "Error detectado"
  },
  message: {
    undeterminedPromiseRejection: "Error interno: Una promesa fue rechazada sin una razón determinada.",
    cannotOpenHelp: "No es posible abrir la ayuda fuera del espacio de trabajo Sankhya",
    silentExceptionIgnored: "Excepción silenciosa ignorada"
  },
  errorCode: {
    label: "Código: "
  },
  error: {
    internal: "Error interno"
  }
};

const snkExporterMessages = {
  emailSenderTitle: "Enviar por correo electrónico",
  emailSenderBackButton: "Volver",
  emailSenderNextButton: "Siguiente",
  emailSenderCancelButton: "Cancelar",
  emailSenderSendButton: "Enviar",
  emailSenderOptStep_subtitle: "Primero, elija el formato del archivo",
  emailSenderOptStep_lblFormat: "Formato:",
  emailSenderOptStep_formatPDF: "PDF (.pdf)",
  emailSenderOptStep_formatXLS: "Hoja de cálculo (.xls)",
  emailSenderOptStep_export: "Exportar:",
  emailSenderOptStep_allData: "Toda la cuadrícula",
  emailSenderOptStep_currentPage: "Solo la página actual",
  emailSenderOptStep_someRecords: "{{SELECTION_COUNT}} filas seleccionadas",
  emailSenderOptStep_oneRecord: "Solo la fila seleccionada",
  emailSenderInfoStep_subtitle: "Información de correo electrónico",
  emailSenderInfoStep_sendTo: "Enviar a",
  emailSenderInfoStep_subject: "Asunto",
  emailSenderInfoStep_message: "Mensaje"
};

const snkFilterBarMessages = {
  addFilter: "Añadir filtro",
  pinFilter: "Fijar filtro",
  unpinFilter: "Desfijar filtro",
  removeFilter: "Eliminar filtro",
  cleanFilter: "Limpiar",
  applyFilter: "Aplicar",
  findFilter: "Buscar filtros...",
  findField: "Buscar filtros...",
  modalFindFilter: "Buscar filtro",
  emptyFiltersList: "No hay filtros disponibles",
  emptyAppliedFiltersList: "No hay filtros aplicados",
  customFilter: "Filtro personalizado",
  defaultFilter: "Filtro predeterminado",
  failToLoadConfig: "Error al buscar configuración de filtros",
  clearAllFilters: "Limpiar todos los filtros",
  successfullyCleaned: "¡Filtro limpiado con éxito!",
  activeFilter: "{{ACTIVE_FILTERS}} filtro aplicado",
  activeFilters: "{{ACTIVE_FILTERS}} filtros aplicados",
  noActiveFilters: "Ningún filtro aplicado",
  modalDefaultFilterTitle: "Filtro predeterminado",
  modalInfoTextEditDefault: "Use el diseño antiguo para editar su filtro predeterminado, pronto traeremos una nueva experiencia.",
  modalInfoTextCreateDefault: "Use el diseño antiguo para crear su filtro predeterminado, pronto traeremos una nueva experiencia.",
  modalPersonalizedFilterTitle: "Filtro personalizado",
  modalPersonalizedFilterSubTitle: "Gestione sus filtros",
  modalInfoTextCreateEditPersonalized: "Use el diseño antiguo para crear o editar filtros, pronto traeremos una nueva experiencia",
  modalInfoTextCreateFilter: "Crear filtro personalizado",
  modalInfoTextNoFilterRegister: "No tiene filtros registrados.",
  modalOkButtonLabel: "Aplicar",
  modalCancelButtonLabel: "Limpiar",
  binarySelectTooltip: "Mostrando registros",
  multiListToltip: "seleccionado(s)",
  onlyStartToltip: "A partir de",
  onlyEndToltip: "Hasta",
  fullPeriodTooltip: "Fecha de {{LABEL}}: {{START_LABEL}} hasta {{END_LABEL}}",
  labelStart: "Inicial",
  labelEnd: "Final",
  labelTo: "hasta",
  fullIntervalTooltip: "{{LABEL}}: {{START_LABEL}} hasta {{END_LABEL}}",
  filters: "Filtros",
  personalizedCount: "{{activeCount}} seleccionado(s)",
  filterItem: {
    updateFilterItemNotFound: "FilterItem no encontrado, no será actualizado.",
    addFilterItemExists: "FilterItem ya existe, no será añadido nuevamente.",
    removeFilterItemNotFound: "FilterItem no encontrado"
  },
  filterModal: {
    title: "Filtros",
    okButtonLabel: "Aplicar",
    cancelButtonLabel: "Limpiar todo",
    customFilters: "Filtros personalizados",
    quickFilters: "Filtros rápidos",
    clearModal: "Limpiar",
    defaultFilter: {
      title: "Filtro predeterminado",
      edit: "Editar filtro",
      remove: "Eliminar filtro",
      create: "Crear filtro predeterminado",
    },
    validations: {
      requiredFilter: "Filtro obligatorio",
      notFullFilled: {
        title: "Filtro parcialmente completado",
        message: "Por favor complete toda la información del filtro."
      },
      notSaved: {
        title: "Atención",
        message: "Los cambios realizados no se aplicarán.<br/><br/><b>¿Desea continuar de todos modos?</b>"
      }
    }
  },
};

const snkFilterFieldSearchMessages = {
  searchLabel: "Buscar campo",
  fieldLabel: "Campos de {{link}}",
  linkLabel: "Categorías de {{link}}",
  groupEmpty: "No hay categorías para selección",
  searchEmpty: "Ningún resultado encontrado"
};

const snkFilterListMessages = {
  showMore: "Mostrar más"
};

const snkFilterParamConfigMessages = {
  modalTitle: "Configuración de valor variable",
  labelSystemConfig: "Usar definiciones del sistema",
  labelUserConfig: "Usar definiciones personalizadas",
  labelInstance: "Categoría",
  labelField: "Campo",
  labelDescription: "Descripción (obligatorio) *",
  labelType: "Tipo (obligatorio) *",
  labelTypeValues: {
    date: "Fecha",
    text: "Texto",
    integer: "Número Entero",
    decimal: "Número con Decimal",
  },
  labelExpression: "Expresión",
  labelCancel: "Cancelar",
  labelSave: "Guardar"
};

const snkLayoutFormConfigMessages = {
  cascadeLayout: {
    label: "Diseño en cascada",
    description: "Todos los campos se organizarán en una única columna."
  },
  classicCascadeLayout: {
    label: "Diseño clásico en cascada",
    description: "Todos los campos se organizarán en una única columna con estilo clásico."
  },
  sideBySideLayout: {
    label: "Diseño lado a lado",
    description: "Todos los campos se dispondrán lado a lado, ajustándose automáticamente al ancho de la pantalla."
  },
  classicSideBySideLayout: {
    label: "Diseño clásico lado a lado",
    description: "Todos los campos se dispondrán lado a lado con estilo clásico, ajustándose automáticamente al ancho de la pantalla."
  }
};

const snkNumberingConfigMessages = {
  labelAutoNumbering: "Numeración automática",
  labelInitialNumber: "Número inicial"
};

const snkPersonalizedFilterMessages = {
  info: {
    titleEdit: "Editar filtro personalizado",
    titleAdd: "Crear filtro personalizado",
    titleCreateDefault: "Aplicar filtro predeterminado",
    titleEditDefault: "Editar filtro predeterminado",
    titleCollapsible: "Expresión a aplicar (generada por el asistente)",
    labelSearchField: "Buscar campo",
    labelOperator: "Operador",
    labelValueVarible: "Valor variable",
    titleTooltip: "Al activar un valor variable, es posible insertar un valor diferente cada vez que se aplica el filtro",
    labelAddNewExpression: "Añadir nueva línea de expresión",
    labelDeleteExpression: "Eliminar expresión",
    labelDeleteItem: "Eliminar elemento",
    labelDisabledAddGroupButton: "Los Filtros Personalizados tienen un límite de {{LIMIT_GROUP_LEVEL}} Grupos de Condiciones y Valores",
    labelDisabledAddExpressionButton: "Complete los campos obligatorios o indique valores variables en las expresiones del grupo antes de añadir más elementos",
    labelCancel: "Cancelar",
    labelSave: "Guardar",
    labelNameFilter: "Nombre del filtro",
    labelExpression: "Expresión",
    badgeVariable: "variable",
    noDataFound: "Ningún filtro encontrado",
    condition: "Condición",
    conditionAnd: "Y",
    conditionOr: "O",
    labelDefaultValue: "Valor",
    addGroup: "Añadir grupo",
    addField: "Añadir campo",
    applyExpression: "Expresión a aplicar:",
    tooltipDisabledAssistentMode: "Expresión no soportada por el asistente.",
    activeModeAdvanced: "Activar modo avanzado",
    activeModeAssistent: "Activar modo asistente",
    textInputDisabled: "Campo deshabilitado para filtros predeterminados",
    checkVariableDisabled: "El filtro predeterminado no puede ser variable.",
    deleteDefaultFilterConfirm: "¿Desea eliminar el <b>filtro predeterminado</b>?",
  },
  confirmExpression: {
    title: "Aviso",
    description: `La información de la condición será descartada.</br></br><b>¿Desea continuar?</b>`
  },
  confirmGroup: {
    title: "Aviso",
    description: `La información del Grupo y sus Condiciones serán descartadas.</br></br><b>¿Desea continuar?</b>`
  },
  confirmCancel: {
    title: "Aviso",
    description: `Los cambios realizados serán descartados.</br></br><b>¿Desea continuar?</b>`
  },
  confirmChangeModeAssistent: {
    title: "Aviso",
    description: `Al modificar la expresión, el modo asistente será deshabilitado.</br></br><b>¿Desea continuar?</b>`
  },
  confirmChangeModeAdvanced: {
    title: "Aviso",
    description: `Al volver al modo asistente sus cambios se perderán.</br></br><b>¿Desea continuar?</b>`
  },
  confirmSaveModeAdvanced: {
    title: "Aviso",
    description: `Al modificar la expresión, el modo asistente será deshabilitado.</br></br><b>¿Desea continuar?</b>`
  },
  operador: {
    firstLevel: "La selección se habilitará a partir de la adición de la segunda línea de reglas.",
    and: "Será verdadero si todas las condiciones se cumplen.",
    or: "Será verdadero si cualquiera de las condiciones se cumple."
  },
  error: {
    title: "Atención",
    description: "Hay al menos un campo obligatorio no completado."
  },
  errorValidation: {
    title: "Error en la expresión"
  },
  confirmSave: {
    title: "¡Filtro creado con éxito!"
  },
  confirmEdit: {
    title: "¡Filtro actualizado con éxito!"
  },
  deleteConfirm: {
    title: "Aviso",
    message: "¿Desea realmente eliminar el filtro '{{filterName}}'?"
  },
  listActions: {
    edit: "Editar",
    delete: "Eliminar"
  },
  footerActions: {
    clear: "Limpiar",
    create: "Crear filtro"
  },
  operands: {
    equal: "Igual (=)",
    different: "Diferente (<>)",
    like: "Conteniendo (LIKE)",
    in: "Contenido en (IN)",
    startWith: "Iniciado con (%?)",
    finishedWith: "Terminado con (?%)",
    null: "Vacío (NULL)",
    notNull: "No Vacío (NOT NULL)",
    larger: "Mayor que (>)",
    largerEqual: "Mayor o Igual que (>=)",
    smaller: "Menor que (<)",
    smallerEqual: "Menor o Igual que (<=)"
  }
};

const snkPesquisaMessages = {
  search: {
    label: "Buscar",
    button: "Buscar",
    clearButton: "Limpiar búsqueda",
    waitMessage: "Espere, buscando registros...",
    noResultsMessage: "No se encontraron registros",
    initialMessage: "Los resultados de su búsqueda aparecerán aquí...",
    resultsFoundSingular: "1 registro encontrado",
    resultsFoundPlural: "{{COUNT}} registros encontrados",
    limitMessage: "Esta búsqueda fue limitada, hay más resultados."
  },
  viewMode: {
    tableMode: "Modo cuadrícula",
    listMode: "Modo lista",
    treeMode: "Modo árbol jerárquico"
  },
  tree: {
    emptyMessage: "No se encontraron registros...",
    expandButton: "Expandir",
    collapseButton: "Contraer",
    errorTitle: "Error",
    nonAnalyticError: "Hay al menos un registro inválido seleccionado. Debe seleccionar elementos de tipo 'analítico'."
  }
};

const snkPrintSelectorMessages = {
  title: {
    warning: "Aviso",
    printerSelection: "Selección de impresora",
    remotePrintersTab: "Impresoras remotas",
    localPrintersTab: "Impresoras locales"
  },
  subtitle: {
    document: "Documento:",
    jobs: "Trabajos:"
  },
  message: {
    canceledPrint: "La impresión será cancelada. ¿Desea realmente continuar?",
    noPrinters: "No hay impresoras para selección",
    savePrinter: "Usar siempre esta selección"
  },
  button: {
    print: "Imprimir",
    cancel: "Cancelar",
    yes: "Sí",
    no: "No"
  }
};

const snkSimpleBarMessages = {
  backTitle: "Volver"
};

const snkSimpleCrudMessages = {
  findColumn: "Búsqueda de columnas (Ctrl+F)",
  findFields: "Búsqueda de campos (Ctrl+F)",
  formConfigUnavaliable: {
    title: "Aviso",
    message: 'La opción "Configurar formulario" estará disponible próximamente. Mientras tanto, acceda a la configuración del formulario a través de los diseños anteriores, HTML5 o Flex.'
  },
  keyboardShortcuts: {
    saveData: "Guarda los datos.",
    addRecord: "Agrega un nuevo registro.",
    removeRecord: "Elimina el registro seleccionado.",
    cancelAction: "Cancela una acción."
  }
};

const snkSimpleFormConfigMessages = {
  popup: {
    title: "Configurar formulario"
  },
  lists: {
    availableFields: "Campos disponibles",
    selectedFields: "Campos seleccionados",
    entityLabel: "campo",
    entityLabelPlural: "campos"
  },
  buttons: {
    restore: "Restaurar",
    cancel: "Cancelar",
    save: "Guardar"
  }
};

const snkTaskbarMessages = {
  titleUpdateMultiple: "Editar Múltiples",
  titleUpdate: "Editar",
  titlePrevious: "Anterior",
  titleNext: "Siguiente",
  titleRefresh: "Actualizar",
  titleClone: "Duplicar",
  titleRemove: "Eliminar",
  titleMoreOptions: "Más Opciones",
  titleInsert: "Registrar",
  titleCancel: "Cancelar",
  titleSave: "Guardar",
  titleGridMode: "Modo Cuadrícula",
  titleFormMode: "Modo Formulario",
  titleConfigurator: "Configuraciones",
  titleAttach: "Adjuntar",
  forbidden: "Permiso no concedido"
};

const snkImageInputMessages = {
  msgTipoImage: "Tipo de archivo inválido. Tipos aceptados: ",
  errorImageSize: "El tamaño del archivo excede el máximo permitido: ",
  defaultLabel: "Haga clic o arrastre para cargar una imagen",
  removeImage: "Eliminar imagen",
  imageAlt: "Vista previa de la imagen",
  imagePreview: "Vista previa de la imagen",
  uploadError: "Error al cargar el archivo",
  downloadError: "Error al descargar la imagen",
  errorTitle: "Error"
};

const snkGridMessages = {
  findColumn: 'Búsqueda de columnas (Ctrl+F)',
  cancelConfirmation: {
    title: 'Aviso',
    message: 'Los cambios realizados serán descartados<br/><br/><b>¿Realmente desea cancelar?</b>',
  },
  requiredFiltersNotFilled: {
    title: 'Error',
    message: 'Existen filtros obligatorios que no están completados.',
  },
};
const snkGridConfigMessages = {
  gridConfiguration: 'Configuración de la Cuadrícula',
  columnVisibilityOrder: 'Arrastre los elementos para definir el orden y visibilidad de las columnas de su cuadrícula.',
  sortingSequence: 'Secuencia de ordenación',
  findColumn: 'Localizar columna',
  cancel: 'Cancelar',
  reset: 'Restaurar',
  complete: 'Completar',
  columnsSelection: 'Selección de columnas',
  availableColumns: 'Columnas disponibles',
  selectedColumns: 'Columnas seleccionadas',
  dataOrdering: 'Ordenación de datos',
  emptyMensage: {
    left: 'Ninguna columna disponible',
    right: 'Ninguna columna seleccionada',
  },
  tab: {
    columns: 'Columnas',
    lineOrdering: 'Ordenación de las filas',
  },
  info: {
    successfullyConfigSaved: '¡Las configuraciones se han guardado con éxito!',
  },
  confirm: {
    cancel: 'Descartar',
    save: 'Guardar',
    alert: 'Aviso',
    msgCancel: 'Los cambios realizados serán descartados. ¿Desea guardar antes de salir?',
  },
  group: {
    visible: 'Visibles',
    hidden: 'Ocultas',
  },
};

const snkConfigOptionsMessages = {
  label: {
    nameField: "Nombre del Campo *",
    typeValueDefault: "Tipo de valor predeterminado *",
    valueDefault: "Valor Predeterminado",
    clearDuplicate: "Limpiar al Duplicar",
    requiredField: "Campo Obligatorio",
    protectedField: "Campo Protegido"
  },
  options: {
    valueFixed: "Valor Fijo",
    variable: "Variable"
  },
  validation: {
    requiredField: "Ingrese un valor para Nombre del Campo *"
  },
  fieldConfig: {
    title: "Configuración del campo",
    buttons: {
      cancel: "Cancelar",
      confirm: "Confirmar"
    }
  }
};
const snkFormConfigMessages = {
  title: "Configuración del formulario",
  goBackTitle: "Volver",
  applyConfig: "Aplicar configuración",
  availableFields: {
    title: "Campos disponibles",
    labelNoFields: "Ningún campo disponible",
    labelOneField: "1 campo disponible",
    labelAvailableFields: "Campos disponibles",
    labelSearchField: "Buscar campo"
  },
  form: {
    subTitleInfo: "¡Incluya estos campos en los grupos o déjelos separados en la parte superior del formulario!",
    labelDropField: "Arrastre y suelte un campo aquí",
    labelNewGroup: "Añadir nuevo grupo",
    mainArea: "Área principal",
    tabGeneral: "General",
    canNotEditCustomGuide: "No es posible editar pestañas de detalles y pestañas personalizadas",
    canNotEditDetailGuide: "Para realizar la configuración de una pantalla de detalles es necesario acceder a su pestaña",
    createNewGroup: "Crear nuevo grupo",
    newGroup: "Nuevo grupo",
    noGuideSelected: "Seleccione una pestaña y comience a configurar",
    newGuide: "Nueva pestaña"
  },
  buttons: {
    rename: "Renombrar"
  },
  configs: {
    buttonLabel: "Configuraciones",
    selectedConfig: "configuración seleccionada"
  },
  confirm: {
    title: "Aviso",
    deleteTab: "¿Realmente desea eliminar la pestaña",
    deleteGuide: "¿Desea realmente eliminar la guía <b>{0}</b>?",
    cancel: "Los cambios realizados serán descartados.<br/><br/><b>¿Desea continuar?</b>",
    exit: "Al salir los cambios serán descartados.<br/><br/><b>¿Realmente desea salir?</b>",
    apply: "¡La <b>{0}</b> reemplazará la configuración actual!<br/><br/><b>¿Desea continuar?</b>",
    group: "¡No es posible guardar las configuraciones con un grupo vacío!",
    labelCancel: "Cancelar",
    labelDelete: "Eliminar"
  },
  noGuideSelected: {
    title: "Atención",
    message: "¡Seleccione una guía para iniciar la configuración!"
  },
  canNotAddFieldToGuide: {
    title: "Atención",
    message: "¡No es posible agregar campos a pestañas de detalles o pestañas personalizadas!"
  },
  alert: {
    titleGroupExists: "Ya existe un grupo con título",
    titleGroupEditing: "Hay un <b>grupo<b/> en edición. <br/> Finalice la edición para guardar las configuraciones.",
    titleGuideExists: "Ya existe una guía con título",
    titleGuideEditing: "Hay una <b>guía<b/> en edición. <br/> Finalice la edición para guardar las configuraciones.",
    titleGuideReservedName: "Este título está reservado para configuraciones internas del sistema y no puede ser utilizado.",
    infoValidTitle: "Por favor, introduzca un título válido.",
    inTab: "en la pestaña"
  },
  info: {
    successfullyConfigSaved: "¡Las configuraciones se han guardado con éxito!",
    successfullyGuideDeleted: 'La guía "{0}" ha sido eliminada. Guarde para confirmar el cambio.'
  },
  actions: {
    cancel: "Cancelar",
    save: "Guardar"
  },
  errors: {
    failMakeGroupsDraggable: "Error al hacer que el contenedor de grupos sea arrastrable: ",
    failMakeFieldContainerDraggable: "Error al hacer que el grupo sea arrastrable: ",
    failFetchUserConfig: "Error al obtener las configuraciones de formulario definidas por el usuario."
  },
  guidesConfigurator: {
    title: "Pestañas",
    searchGuide: "Buscar pestaña",
    visibleGuides: "Pestañas visibles",
    hiddenGuides: "Pestañas ocultas",
    createNewGuide: "Crear nueva pestaña",
    noHiddenGuides: "No hay pestañas ocultas",
    noVisibleGuides: "No hay pestañas visibles",
    canNotDeleteCustomGuide: "No es posible eliminar pestañas de detalles o pestañas personalizadas",
    actions: {
      hide: "Ocultar",
      show: "Hacer visible",
      delete: "Eliminar"
    }
  }
};
const snkFieldConfigMessages = {
  titleRemove: "Eliminar",
  titleConfigurations: "Configuraciones",
  titleAdd: "Añadir",
  titleEdit: "Editar",
  titleAddToLayout: "Añadir al Diseño"
};
const snkTabConfigMessages = {
  labelRename: "Renombrar",
  labelHide: "Ocultar",
  labelShow: "Mostrar",
  labelDelete: "Eliminar"
};

const messageResourcePtBR = {
    snkApplication: snkApplicationMessages,
    snkDataUnit: snkDataUnitMessages,
    snkFormConfig: snkFormConfigMessages,
    snkConfigOptions: snkConfigOptionsMessages,
    snkTaskbar: snkTaskbarMessages,
    snkFieldConfig: snkFieldConfigMessages,
    snkFilterBar: snkFilterBarMessages,
    snkConfigurator: snkConfiguratorMessages,
    snkTabConfig: snkTabConfigMessages,
    crudUtils: crudUtilsMessages,
    snkGrid: snkGridMessages,
    snkGridConfig: snkGridConfigMessages,
    snkExporter: snkExporterMessages,
    snkDataExporter: snkDataExporterMessages,
    snkCrud: snkCrudMessages,
    snkSimpleCrud: snkSimpleCrudMessages,
    fileViewer: fileViewerMessages,
    snkFilterParamConfig: snkFilterParamConfigMessages,
    snkFilterFieldSearch: snkFilterFieldSearchMessages,
    snkSimpleBar: snkSimpleBarMessages,
    snkAttach: snkAttachMessages,
    snkImageInput: snkImageInputMessages,
    snkPersonalizedFilter: snkPersonalizedFilterMessages,
    snkEntityList: snkEntityListMessages,
    snkActionsButton: snkActionsButtonMessages,
    snkPrintSelector: snkPrintSelectorMessages,
    snkErrorHandler: snkErrorHandlerMessages,
    snkFilterList: snkFilterListMessages,
    snkLayoutFormConfig: snkLayoutFormConfigMessages,
    snkPesquisa: snkPesquisaMessages,
    snkSimpleFormConfig: snkSimpleFormConfigMessages,
    snkNumberingConfig: snkNumberingConfigMessages,
    dataUnitDataLoaderHelper: dataUnitDataLoaderHelperMessages,
    continuousInsertUtils: continuousInsertUtilsMessages,
    dataFetcher: dataFetcherMessages
};

class SnkMessageBuilder {
  constructor(domainName) {
    this._defaults = messageResourcePtBR$2;
    this._messageResourceEnUS = messageResourcePtBR$1;
    this._messageResourceEsES = messageResourcePtBR;
    this._currentOperation = OperationMap.CLEAN;
    this._domainName = domainName;
    this._application = ApplicationContext.getContextValue("__SNK__APPLICATION__");
    this._lang = LangUtils.getLanguage();
    this.loadAppMessages().then((msgs) => {
      this._appMessages = msgs;
    }, error => {
      console.info('O arquivo de mensagens personalizadas não foi encontrado no caminho /messages/appmessages', error);
    });
  }
  /**
   * Existem mensagens sensíveis a operação. Por exemplo, a mensagem
   * de inclusão pode ser diferente da mensagem de alteração do mesmo
   * recurso. Para isso "currentOperation" pode variar de acordo com
   * OperationMap.
   */
  set currentOperation(op) {
    this._currentOperation = op;
  }
  /**
   * Método usado para se obter mensagens, respeitando o padrão do sistema
   * ou as mensagens específicas de cada tela
   *
   * @param key Chave usada para obter mensagens. Deve-se usar o separador "."
   * alcançar diversos níveis.
   * @param params Quando a mensagem possui o padrão {{NOME}} as ocorrências
   * serão substituidas pelo respectivo valor do param.
   * @returns A mensagem formatada.
   */
  getMessage(key, params) {
    if (key == undefined)
      return undefined;
    var parts = key.split(".");
    let msg = this.resolveMessage(parts, this.getDomainMessages());
    if (msg == undefined) {
      msg = this.getMessagesDefaults(parts);
    }
    if (this.customMessageBuilder) {
      const result = this.customMessageBuilder(key, msg, params);
      msg = result === null || result === void 0 ? void 0 : result.message;
      params = result === null || result === void 0 ? void 0 : result.params;
    }
    return this.postProcess(msg, params);
  }
  /**
   * Retorna o idioma atual configurado na aplicação.
   *
   * @returns {string} O código do idioma atual (por exemplo: 'pt-BR', 'en-US', 'es-ES')
   */
  getLanguageApplication() {
    return this._lang;
  }
  getMessagesDefaults(parts) {
    switch (this._lang) {
      case LangUtils.ELanguages.EN_US:
        return this.resolveMessage(parts, this._messageResourceEnUS);
      case LangUtils.ELanguages.ES_ES:
        return this.resolveMessage(parts, this._messageResourceEsES);
      default:
        return this.resolveMessage(parts, this._defaults);
    }
  }
  getDomainMessages() {
    if (!this._appMessages)
      return undefined;
    if (!this._domainName) {
      return this._appMessages['Global'] || this._appMessages;
    }
    return this._appMessages[this._domainName];
  }
  resolveMessage(keys, object) {
    if (object == undefined) {
      return undefined;
    }
    const key = keys[0];
    const result = object[key];
    if (result) {
      if (this.isOperationSensitive(result)) {
        return result[this._currentOperation];
      }
      else {
        const isLeaf = keys.length === 1 ||
          result == undefined ||
          typeof result === "string";
        return isLeaf ? result : this.resolveMessage(keys.slice(1), result);
      }
    }
  }
  isOperationSensitive(value) {
    return value[OperationMap.CLONE] != undefined ||
      value[OperationMap.INSERT] != undefined ||
      value[OperationMap.UPDATE] != undefined ||
      value[OperationMap.CLEAN] != undefined;
  }
  postProcess(message, params) {
    if (message) {
      const propPattern = /(.*?)\{\{(.+?)\}\}/g;
      let processed = "";
      let tail = message;
      let result;
      while ((result = propPattern.exec(message)) !== null) {
        const [match, head, attribute] = result;
        const tailIndex = result.index + match.length;
        tail = tailIndex < message.length ? message.substring(tailIndex) : "";
        let replacement = params ? params[attribute] : undefined;
        if (replacement == undefined) {
          replacement = "";
        }
        processed += head + replacement;
      }
      return processed + tail;
    }
    else {
      return message;
    }
  }
  async loadAppMessages() {
    const messagesUrl = await this._application.getApplicationPath();
    const langSuffix = (this._lang !== LangUtils.ELanguages.PT_BR) ? `-${this._lang}` : "";
    const fileUrl = `${messagesUrl}/messages/appmessages${langSuffix}.js`;
    const response = await fetch(fileUrl);
    if (!response.ok) {
      throw new Error(`Não foi possível carregar as mensagens: ${response.status} ${response.statusText}`);
    }
    let scriptContent = await response.text();
    if (scriptContent.trim().startsWith('<!DOCTYPE') || scriptContent.trim().startsWith('<html')) {
      throw new Error('Não foi encontrado um arquivo de mensagens válido.');
    }
    scriptContent = scriptContent.replace(/export\s+default\s+/g, 'return ');
    const func = new Function(scriptContent);
    return func();
  }
}
var OperationMap;
(function (OperationMap) {
  OperationMap["CLONE"] = "clone";
  OperationMap["INSERT"] = "insert";
  OperationMap["UPDATE"] = "update";
  OperationMap["CLEAN"] = "clean";
  OperationMap["UPDATE_MULTIPLES"] = "updateMultiples";
})(OperationMap || (OperationMap = {}));

export { OperationMap as O, SnkMessageBuilder as S };
