mirror of https://github.com/Squidex/squidex.git
82 changed files with 5296 additions and 936 deletions
File diff suppressed because it is too large
@ -0,0 +1,6 @@ |
|||
{ |
|||
"name": "i18n", |
|||
"lockfileVersion": 3, |
|||
"requires": true, |
|||
"packages": {} |
|||
} |
|||
@ -0,0 +1,399 @@ |
|||
{ |
|||
"annotations_AbsoluteUrl": "O campo {name|lower} deve ser uma URL absoluta.", |
|||
"annotations_Compare": "O campo {name|lower} deve ser o mesmo que {1.}.", |
|||
"annotations_EmailAddress": "O campo {name|lower} não é um endereço de e-mail válido.", |
|||
"annotations_Range": "O campo {name|lower} deve estar entre {min} e {max}.", |
|||
"annotations_RegularExpression": "O campo não é.", |
|||
"annotations_Required": "O campo {name|lower} é necessário.", |
|||
"annotations_StringLength": "O campo '{name|lower}' deve ser um texto com tamanho máximo de {max}.", |
|||
"annotations_StringLengthMinimum": "O campo '{name|lower}' deve ser um texto com tamanho mínimo de {min} e no máximo de {max}.", |
|||
"apps.clients.idAlreadyExists": "Um cliente com o mesmo id já existe.", |
|||
"apps.contributors.cannotChangeYourself": "Você não pode mudar seu próprio papel.", |
|||
"apps.contributors.maxReached": "Alcançou o tamanho máximo de colaboradors disponiveis para o seu plano.", |
|||
"apps.contributors.onlyOneOwner": "Não é possível remover o unico dono.", |
|||
"apps.languages.fallbackNotFound": "App não tem uma língua de reserva '{fallback}'.", |
|||
"apps.languages.languageAlreadyAdded": "Linguagem foi adicionada.", |
|||
"apps.languages.masterLanguageNoFallbacks": "A linguagem principal não pode ter linguagens de reserva.", |
|||
"apps.languages.masterLanguageNotOptional": "A linguagem principal não pode ser feita opcional.", |
|||
"apps.languages.masterLanguageNotRemovable": "A linguagem principal não pode ser removida.", |
|||
"apps.maximumTotalReached": "Você não pode criar mais aplicativos. Entre em contato com o suporte para remover essa restrição da sua conta.", |
|||
"apps.nameAlreadyExists": "Já existe uma app com esse nome.", |
|||
"apps.notImage": "Ficheiro não é uma imagem", |
|||
"apps.plans.assignedToTeam": "Plano é gerido por uma equipa.", |
|||
"apps.plans.notFound": "Um plano com este id não existe.", |
|||
"apps.plans.notPlanOwner": "Plano só pode ser alterado pelo utilizador que configurou inicialmente.", |
|||
"apps.roles.defaultRoleNotRemovable": "Não pode remover o grupo pré definido.", |
|||
"apps.roles.defaultRoleNotUpdateable": "Não pode alterar o grupo pré definido.", |
|||
"apps.roles.nameAlreadyExists": "Um grupo com o mesmo nome já existe.", |
|||
"apps.roles.usedRoleByClientsNotRemovable": "Não pode remover grupo quando tem um cliente associado.", |
|||
"apps.roles.usedRoleByContributorsNotRemovable": "Nãopode remover o grupo quando tem um colaborador associado.", |
|||
"apps.transfer.planAssigned": "A inscrição deve ser cancelada antes que o aplicativo possa ser transferido.", |
|||
"apps.transfer.teamNotFound": "A equipa não existe.", |
|||
"assets.folderNotFound": "A pasta de ficheiros não existe.", |
|||
"assets.folderRecursion": "Não é possível adicionar pasta à sua própria criança.", |
|||
"assets.maxSizeReached": "Você alcançou o tamanho máximo de ficheiros.", |
|||
"assets.referenced": "Os ficheiros são referenciados por um conteúdo e não podem ser excluídos.", |
|||
"backups.alreadyRunning": "Já se encontra um processo de backup em processamento.", |
|||
"backups.maxReached": "Não pode ter mais de {max} backups.", |
|||
"backups.restoreRunning": "Um processamento de restauro já se encontra a correr.", |
|||
"comments.noPermissions": "Só pode aceder as suas notificações.", |
|||
"comments.notUserComment": "Comentário foi criado por outro utilizador.", |
|||
"common.action": "Acção", |
|||
"common.aspectHeight": "Altura aspecto", |
|||
"common.aspectWidth": "Largura aspecto", |
|||
"common.calculatedDefaultValue": "Calculado o valor por defeito", |
|||
"common.clientd": "ID do cliente", |
|||
"common.clientId": "ID do cliente", |
|||
"common.clientSecret": "Segredo do cliente", |
|||
"common.contentType": "Tipo conteúdo", |
|||
"common.contributorId": "ID or email do colaborador", |
|||
"common.critical": "Critico", |
|||
"common.data": "Data", |
|||
"common.defaultValue": "Valor por defeito", |
|||
"common.displayName": "Nome apresentação", |
|||
"common.documentation": "Documentação", |
|||
"common.editor": "Editor", |
|||
"common.email": "Email", |
|||
"common.errorNoPermission": "Você não tem a permissão necessária.", |
|||
"common.field": "Campo", |
|||
"common.fieldIds": "IDs de campo", |
|||
"common.fieldName": "Nome do campo", |
|||
"common.file": "Ficheiro", |
|||
"common.folderName": "Nome da pasta", |
|||
"common.fullTextNotSupported": "Cláusula de busca de consulta não suportada.", |
|||
"common.httpContentTypeNotDefined": "O tipo de conteúdo do ficheiro não está definido.", |
|||
"common.httpFileNameNotDefined": "O nome do ficheiro não é definido.", |
|||
"common.httpInvalidRequest": "O modelo não é válido.", |
|||
"common.httpInvalidRequestFormat": "Pedido corpo tem um formato inválido.", |
|||
"common.httpOnlyAsUser": "Não permitido para clientes.", |
|||
"common.httpValidationError": "Erros de validação", |
|||
"common.initialStep": "Passo Inicial", |
|||
"common.jsError": "Erro ao executar script javascript: {message}", |
|||
"common.jsNotAllowed": "Script proibiu a operação.", |
|||
"common.jsParseError": "Erro ao executar script javascript com erro de sintaxe: {message}", |
|||
"common.jsRejected": "Script rejeitou a operação.", |
|||
"common.language": "Código da língua", |
|||
"common.login": "Entrar", |
|||
"common.logout": "Sair", |
|||
"common.maxCharacters": "Caracteres máximos", |
|||
"common.maxHeight": "Altura Máx", |
|||
"common.maxItems": "Items Máx", |
|||
"common.maxLength": "Comprimento Máx", |
|||
"common.maxSize": "Tamanho Máx", |
|||
"common.maxValue": "Valor Máx", |
|||
"common.maxWidth": "Largura Máx", |
|||
"common.maxWords": "Palavras Máx", |
|||
"common.minCharacters": "Min characters", |
|||
"common.minHeight": "Altura Min", |
|||
"common.minItems": "Items Min", |
|||
"common.minLength": "Comprimento Min", |
|||
"common.minSize": "Tamanho Min", |
|||
"common.minValue": "Valor Min", |
|||
"common.minWidth": "Largura Min", |
|||
"common.minWords": "Palavras Min", |
|||
"common.name": "Nome", |
|||
"common.notFoundValue": "- não encontrado -", |
|||
"common.numDays": "Num dias", |
|||
"common.odataFailure": "Falha ao analisar consulta: {message}, para a consulta: {odata}", |
|||
"common.odataFilterNotValid": "OData $filter clausula é inválida: {message}", |
|||
"common.odataNotSupported": "OData operação não é suportada pela consulta: {odata}", |
|||
"common.odataSearchNotValid": "OData $search clausula é invalida: {message}", |
|||
"common.oldPassword": "Password antiga", |
|||
"common.other": "Outro", |
|||
"common.partitioning": "Particionamento", |
|||
"common.password": "Password", |
|||
"common.passwordConfirm": "Confirmar", |
|||
"common.pattern": "Padrão", |
|||
"common.permissions": "Permissões", |
|||
"common.planId": "ID Plano", |
|||
"common.previewUrls": "pre-visualizar URLs", |
|||
"common.product": "Squidex Headless CMS", |
|||
"common.properties": "Propriedades", |
|||
"common.property": "Propriedade", |
|||
"common.readonlyMode": "App está em modo de leitura de momento.", |
|||
"common.remove": "Remover", |
|||
"common.resultTooLarge": "Resultado é muito grande para poder ser retornado. Use o parametro $take para reduzir o numero de items.", |
|||
"common.role": "Grupo", |
|||
"common.save": "Gravar", |
|||
"common.schemaId": "ID Esquema", |
|||
"common.signup": "Registar", |
|||
"common.success": "Sucesso", |
|||
"common.text": "Texto", |
|||
"common.trigger": "Gatilho", |
|||
"common.warning": "Aviso", |
|||
"common.workflow": "Fluxo de trabalho", |
|||
"common.workflowStep": "Passo", |
|||
"common.workflowTransition": "Trancisão", |
|||
"contents.bulkInsertQueryNotUnique": "Mais do que um conteúdo corresponde à consulta.", |
|||
"contents.componentNotCreatable": "O conteúdo do componente não pode ser criado.", |
|||
"contents.draftNotCreateForUnpublished": "Só pode criar uma nova ver~sao quando o conteúdo estiver publicado.", |
|||
"contents.draftToDeleteNotFound": "Não existe nada para remover.", |
|||
"contents.invalidAllQuery": "Os IDs ou o intervalo de programação devem ser definidos.", |
|||
"contents.invalidArrayOfObjects": "Json type inválido, esperado uma lista of objectos.", |
|||
"contents.invalidArrayOfStrings": "Json type inválido, esperado uma lista de textos.", |
|||
"contents.invalidBoolean": "Json type inválido, esperado um booleano.", |
|||
"contents.invalidComponentNoObject": "Json object inválido, esperado um object com campo 'schemaId'.", |
|||
"contents.invalidComponentNoType": "Componente inválido. Nenhum campo 'schemaId' encontrado.", |
|||
"contents.invalidComponentUnknownSchema": "Componente inválido. Esquema não encontrado.", |
|||
"contents.invalidGeolocation": "Json type inválido, esperado object de latitude/longitude.", |
|||
"contents.invalidGeolocationLatitude": "Latitude deve estár entre -90 e 90.", |
|||
"contents.invalidGeolocationLongitude": "Longitude deve estár entre -180 e 180.", |
|||
"contents.invalidNumber": "Json type inválido, esperado número.", |
|||
"contents.invalidString": "Json type inválido, esperado texto.", |
|||
"contents.listReferences": "{count} Referencia(s)", |
|||
"contents.referenced": "O conteúdo é referenciado por outro conteúdo e não pode ser removido ou não publicado.", |
|||
"contents.schemaNotPublished": "Esquema não está publicada.", |
|||
"contents.singletonNotChangeable": "Conteúdo único não pode ser actualizado.", |
|||
"contents.singletonNotCreatable": "Conteúdo único não pode ser criado.", |
|||
"contents.singletonNotDeletable": "Conteúdo único não pode ser removido.", |
|||
"contents.statusNotValid": "Status não está definido no fluxo de trabalho.", |
|||
"contents.statusTransitionNotAllowed": "Não foi possível alterar o estado {oldStatus} para {newStatus}.", |
|||
"contents.validation.aspectRatio": "Deve ter a proporção {width}:{height}.", |
|||
"contents.validation.assetNotFound": "Id {id} não encontrado.", |
|||
"contents.validation.assetType": "Não pertence ao tipo permitido: {type}.", |
|||
"contents.validation.between": "Deve ter entre {min} e {max}.", |
|||
"contents.validation.characterCount": "Deve ter exatamente {count} caractere(es).", |
|||
"contents.validation.charactersBetween": "Deve ter entre {min} e {max} caractere(es).", |
|||
"contents.validation.duplicates": "Não pode ter duplicados.", |
|||
"contents.validation.error": "Validação falhou com um erro interno.", |
|||
"contents.validation.exactValue": "Deve ter exatamente {value}.", |
|||
"contents.validation.extension": "Extensão não é permitida.", |
|||
"contents.validation.invalid": "Valor inválido.", |
|||
"contents.validation.itemCount": "Deve ter exatamente {count} item(s).", |
|||
"contents.validation.itemCountBetween": "Deve ter exatamente {min} e {max} item(s).", |
|||
"contents.validation.max": "Deve ser igual ou menor que {max}.", |
|||
"contents.validation.maxCharacters": "Não pode ter mais que {max} caracter(s).", |
|||
"contents.validation.maximumHeight": "Altura {height}px deve ser menos que {max}px.", |
|||
"contents.validation.maximumSize": "Tamanho {size} deve ser menos que {max}.", |
|||
"contents.validation.maximumWidth": "Largura {width}px deve ser menos que {max}px.", |
|||
"contents.validation.maxItems": "Não pode ter mais que {max} item(s).", |
|||
"contents.validation.maxLength": "Não pode ter mais que {max} caracter(s).", |
|||
"contents.validation.maxWords": "Não pode ter mais que {max} palavras(s).", |
|||
"contents.validation.min": "Deve ser maior ou igual que {min}.", |
|||
"contents.validation.minimumHeight": "Altura {height}px deve ser maior que {min}px.", |
|||
"contents.validation.minimumSize": "Tamanho of {size} deve ser maior que {min}.", |
|||
"contents.validation.minimumWidth": "Largura {width}px deve ser maior que {min}px.", |
|||
"contents.validation.minItems": "Deve ter no mínimo {min} item(s).", |
|||
"contents.validation.minLength": "Deve ter no mínimo {min} caracter(s).", |
|||
"contents.validation.minNormalCharacters": "Deve ter no mínimo {min} caracter(s).", |
|||
"contents.validation.minWords": "Deve ter no mínimo {min} word(s).", |
|||
"contents.validation.mustBeEmpty": "Value must not be defined.", |
|||
"contents.validation.normalCharacterCount": "Deve ter exactamente {count} caracter(s).", |
|||
"contents.validation.normalCharactersBetween": "Deve ter entre {min} e {max} caracter(s).", |
|||
"contents.validation.notAllowed": "Valor não é permitido.", |
|||
"contents.validation.pattern": "Deve seguir o padrão.", |
|||
"contents.validation.referenceNotFound": "Referencia '{id}' não encontrada.", |
|||
"contents.validation.referenceToInvalidSchema": "Referencia '{id}' com esquema inválido.", |
|||
"contents.validation.regexTooSlow": "Regex demasiado lento.", |
|||
"contents.validation.required": "Campo obrigatório.", |
|||
"contents.validation.unique": "Já existe um conteúdo com o mesmo valor.", |
|||
"contents.validation.uniqueObjectValues": "Não pode conter items com campos duplicados '{field}'.", |
|||
"contents.validation.unknownField": "{fieldType} não conhecido.", |
|||
"contents.validation.wordCount": "Deve ter exatamente {count} palavra(s).", |
|||
"contents.validation.wordsBetween": "Deve ter entre {min} e {max} palavra(s).", |
|||
"contents.workflowErrorUpdate": "O fluxo de trabalho não permite actualizar o estado {status}", |
|||
"dotnet_identity_DefaultEror": "Um erro desconhecido ocorreu.", |
|||
"dotnet_identity_DuplicateEmail": "Email já existe.", |
|||
"dotnet_identity_DuplicateUserName": "Email já está registado noutro utilizador. Pode actualizar o seu login externo para a sua conta se for a sua página de perfil.", |
|||
"dotnet_identity_InvalidEmail": "Email é inválido.", |
|||
"dotnet_identity_InvalidUserName": "Nome de utilizador '{0}' é invlálido, só pode conter letras ou digitos.", |
|||
"dotnet_identity_LoginAlreadyAssociated": "Um utilizador com este login já existe.", |
|||
"dotnet_identity_PasswordMismatch": "Password incorrecta.", |
|||
"dotnet_identity_PasswordRequiresDigit": "Passwords devem ter um digito ('0'-'9').", |
|||
"dotnet_identity_PasswordRequiresLower": "Passwords devem ter um letra minusculo ('a'-'z').", |
|||
"dotnet_identity_PasswordRequiresNonAlphanumeric": "Passwords devem ter um caracter não alfa numerico.", |
|||
"dotnet_identity_PasswordRequiresUniqueChars": "Passwords deve ter no mínimo {0} caracteres diferentes.", |
|||
"dotnet_identity_PasswordRequiresUpper": "Passwords devem ter um caracter maiusculo ('A'-'Z').", |
|||
"dotnet_identity_PasswordTooShort": "Passwords é muito curta.", |
|||
"dotnet_identity_PwnedError": "Esta password já apareceu numa violação de dados e não deve ser usada. Se já usou antes nalgum lado, por favor altere!", |
|||
"dotnet_identity_UserLockedOut": "User está bloqueado.", |
|||
"exceptions.domainObjectConflict": "Entidade ({id}) já existe.", |
|||
"exceptions.domainObjectDeleted": "Entidade ({id}) foi removida.", |
|||
"exceptions.domainObjectNotFound": "Entidade ({id}) não existe.", |
|||
"exceptions.domainObjectVersion": "Entidade ({id}) versão {expectedVersion} não encontrada, mas sim {currentVersion}.", |
|||
"history.apps.assetScriptsConfigured": "Scripts de ficheiros actualizados", |
|||
"history.apps.clientAdded": "cliente {[Id]} adicionado na app", |
|||
"history.apps.clientRevoked": "cliente {[Id]} revogado ", |
|||
"history.apps.clientUpdated": "cliente {[Id]} actualizado", |
|||
"history.apps.contributoreAssigned": "associado {user:[Contributor]} a {[Role]}", |
|||
"history.apps.contributoreRemoved": "removido {user:[Contributor]} da app", |
|||
"history.apps.created": "app criada.", |
|||
"history.apps.imageRemoved": "imagem da app removida", |
|||
"history.apps.imageUploaded": "carregada nova imagem da app", |
|||
"history.apps.languagedAdded": "adicionada língua {[Language]}", |
|||
"history.apps.languagedRemoved": "removida língua {[Language]}", |
|||
"history.apps.languagedSetToMaster": "alterada a língua principal para {[Language]}", |
|||
"history.apps.languagedUpdated": "actualizada língua {[Language]}", |
|||
"history.apps.planChanged": "alterado o plano para {[Plan]}", |
|||
"history.apps.planReset": "plano redifinido", |
|||
"history.apps.roleAdded": "adicionado grupo {[Name]}", |
|||
"history.apps.roleDeleted": "removido grupo {[Name]}", |
|||
"history.apps.roleUpdated": "actualizado grupo {[Name]}", |
|||
"history.apps.settingsUpdated": "Configurações UI actualizadas", |
|||
"history.apps.transfered": "actualizada app ao cliente", |
|||
"history.apps.updated": "actualizadas configurações gerais", |
|||
"history.apps.workflowAdded": "adicionado fluxo de trabalho {[Name]}.", |
|||
"history.apps.workflowDeleted": "fluxo de trabalho removido.", |
|||
"history.apps.workflowUpdated": "fluxo de trabalho actualizado.", |
|||
"history.assets.replaced": "ficheiro substituido.", |
|||
"history.assets.updated": "ficheiro actualizado.", |
|||
"history.assets.uploaded": "ficheiro carregado.", |
|||
"history.contents.created": "conteúdo criado {[Schema]}.", |
|||
"history.contents.deleted": "conteúdo removido {[Schema]}.", |
|||
"history.contents.draftCreated": "creado novo rascunho.", |
|||
"history.contents.draftDeleted": "removido rascunho.", |
|||
"history.contents.scheduleCompleted": "marcada alteração de estado de {[Schema]} para {[Status]}.", |
|||
"history.contents.scheduleFailed": "erro ao marcar alteração de estado para conteúdo {[Schema]}.", |
|||
"history.contents.updated": "conteúdo {[Schema]} actualizado.", |
|||
"history.schemas.created": "esquema {[Name]} criado.", |
|||
"history.schemas.deleted": "esquema {[Name]} removido.", |
|||
"history.schemas.fieldAdded": "adicionado campo {[Field]} no esquema {[Name]}.", |
|||
"history.schemas.fieldDeleted": "removido campo {[Field]} do esquema {[Name]}.", |
|||
"history.schemas.fieldDisabled": "desabilitado campo {[Field]} no esquema {[Name]}.", |
|||
"history.schemas.fieldHidden": "tem campo {[Field]} escondido no esquema {[Name]}.", |
|||
"history.schemas.fieldLocked": "campo {[Field]} bloqueado no esquema {[Name]}.", |
|||
"history.schemas.fieldShown": "mostar campo {[Field]} no esquema {[Name]}.", |
|||
"history.schemas.fieldsReordered": "re-ordenar campos no esquema {[Name]}.", |
|||
"history.schemas.fieldUpdated": "campo {[Field]} actualizado no esquema {[Name]}.", |
|||
"history.schemas.published": "esquema publicado {[Name]}.", |
|||
"history.schemas.scriptsConfigured": "configurado script no esquema {[Name]}.", |
|||
"history.schemas.unpublished": "despublicado esquema {[Name]}.", |
|||
"history.schemas.updated": "esquema {[Name]} actualizado.", |
|||
"history.statusChanged": "alterado estado {[Schema]} para {[Status]}.", |
|||
"history.teams.contributoreAssigned": "associado {user:[Contributor]} ao {[Role]}.", |
|||
"history.teams.contributoreRemoved": "removido {user:[Contributor]} da equipa.", |
|||
"history.teams.created": "foi criada a equipa {[Name]}.", |
|||
"history.teams.planChanged": "alterado plano para {[Plan]}.", |
|||
"history.teams.planReset": "plano redifinido.", |
|||
"history.teams.updated": "actualizadas configurações gerais e renomeado para {[Name]}.", |
|||
"login.githubPrivateEmail": "O seu Email é privado no Github. Altere para publico no Github e tente novamente.", |
|||
"rules.ruleAlreadyRunning": "Outra regra já se encontra a correr.", |
|||
"schemas.dateTimeCalculatedDefaultAndDefaultError": "Valor por defeito calculado e valor por defeito não podem ser usado em conjunto.", |
|||
"schemas.duplicateFieldName": "Campo '{field}' foi adicionado em duplicado.", |
|||
"schemas.fieldCannotBeUIField": "Campo não pode ser um campo UI.", |
|||
"schemas.fieldIsLocked": "Campo do esquema está bloqueado.", |
|||
"schemas.fieldNameAlreadyExists": "Um campo com o mesmo nome já existe.", |
|||
"schemas.fieldNotInSchema": "CAmpo não é parte do esquema.", |
|||
"schemas.fieldsNotCovered": "Ids do campo não cobrem todos os campos.", |
|||
"schemas.nameAlreadyExists": "Um esquema com o mesmo nome já existe.", |
|||
"schemas.noPermission": "Não tem permissões para este esquema.", |
|||
"schemas.notFoundId": "Esquema {id} não existe.", |
|||
"schemas.number.inlineEditorError": "Não é permitido alteração em linha no Radio editor.", |
|||
"schemas.onlyArraysHaveNested": "So campos lista podem ter campos aninhados.", |
|||
"schemas.onylArraysInRoot": "Campo aninhado não pode ser lista de campos.", |
|||
"schemas.references.resolveError": "Só pode resolver uma referencia quando MaxItems é 1.", |
|||
"schemas.string.inlineEditorError": "Alteração em linha só é permitida em dropdowns, slugs e input fields.", |
|||
"schemas.stringEditorsNeedAllowedValuesError": "Radio buttons ou listas dropdown precisam de campos disponiveis.", |
|||
"schemas.tags.editorNeedsAllowedValues": "Checkboxes ou listas dropdown precisam de campos disponiveis.", |
|||
"schemas.uiFieldCannotBeDisabled": "Campo UI não pode ser desabilitado.", |
|||
"schemas.uiFieldCannotBeEnabled": "Campo UI não pode ser habilitado.", |
|||
"schemas.uiFieldCannotBeHidden": "Campo UI não pode ser escondido.", |
|||
"schemas.uiFieldCannotBeShown": "Campo UI não pode ser mostrado.", |
|||
"search.contentResult": "{name} conteúdos", |
|||
"search.contentsResult": "{name} conteúdos", |
|||
"search.schemaResult": "{name} Esquema", |
|||
"setup.createUser.button": "Criado utilizador", |
|||
"setup.createUser.confirmPassword": "Confirmar", |
|||
"setup.createUser.failure": "Nem autenticação por password or usando um provedor externo como o Google está configurado. Por favor verifique as suas configurações e logs.", |
|||
"setup.createUser.headline": "Administrator", |
|||
"setup.createUser.headlineCreate": "Criar administrador", |
|||
"setup.createUser.loginHint": "Configurou pelo menos um provedor de autenticação externo como o Google. Faça o login novamente para tornar-se administrador.", |
|||
"setup.createUser.loginLink": "Ir para login.", |
|||
"setup.createUser.separator": "OU", |
|||
"setup.headline": "Instalação", |
|||
"setup.hint": "Está a ver este ecrã porque não existe ainda nenhum utilizador. Depois de criar um utilizador, este setup fica desabilitado.", |
|||
"setup.madeBy": "Orgulhosamente feito por", |
|||
"setup.madeByCopyright": "Sebastian Stehle e Contribuintes, 2016-2022", |
|||
"setup.ruleAppCreation.warningAdmins": "Com a sua configuração, apenas administradores podem criar novas apps. Se pretende alterar, altere esta variavel de sistema <code>UI__ONLYADMINSCANCREATEAPPS=false</code>.", |
|||
"setup.ruleAppCreation.warningAll": "Com a sua configuração, qualquer utilizador pode criar apps. Se pretende alterar, altere esta variavel de sistema <code>UI__ONLYADMINSCANCREATEAPPS=true</code>.", |
|||
"setup.ruleFolder.warning": "Está a usar <strong>armazenamento de ficheiros</strong> onde todos ficheiros são gravados no sistema de ficheiros local. Por favor lembrar incluir a pasta de ficheiros dentro da sua estratégia de backup e mapear para um volume, se estiver a usar docker.", |
|||
"setup.ruleFtp.warning": "Está a usar <strong>armazenamento de ficheiros com FTP</strong>. Não é recomendado usar este tipo devido a problemas de performance.", |
|||
"setup.ruleHttps.failure": "Não está a aceder a este site via https. Se este aviso não está correcto então Squidex não pode detectar o modo https, provavelmente a sua instância está por tras de uma reverse proxy como nginx. Confirme que http headers are forwarded properly, via the <code>X-Forwarded-*</code> headers.", |
|||
"setup.ruleHttps.success": "Parabéns, está aceder Squidex por detrás de uma conexão segura (https).", |
|||
"setup.rules.headline": "Lista de verificação do sistema", |
|||
"setup.ruleTeamCreation.warningAdmins": "Com a sua configuração, apenas administradores podem criar novas equipas. Se pretende alterar, altere esta variavel de sistema <code>UI__ONLYADMINSCANCREATETEAMS=false</code>.", |
|||
"setup.ruleTeamCreation.warningAll": "Com a sua configuração, qualquer utilizador pode criar equipas. Se pretende alterar, altere esta variavel de sistema <code>UI__ONLYADMINSCANCREATETEAMS=true</code>.", |
|||
"setup.ruleUrl.failure": "Deve aceder ao Squidex so atraves de um URL canónico e configurar este URL na variavel de ambiente <code>URLS__BASEURL</code>. A base de URL actual <code>{actual}</code> não coincide com <code>{configured}</code>. Esta variavel deve apontar para um URL publico onde a sua instancia Squidex está disponível.", |
|||
"setup.ruleUrl.success": "Parabéns, a variavel de ambiente <code>URLS__BASEURL</code> environment está configurada correctamente. Esta variavel deve apontar para um URL publico no qual a sua instância de Suidex está disponível.", |
|||
"setup.title": "Instalação", |
|||
"users.accessDenied.text": "Operação não permitida, a sua conta pode estár bloqueada.", |
|||
"users.accessDenied.title": "Accesso bloqueado", |
|||
"users.consent.agree": "Eu concordo!", |
|||
"users.consent.cookiesHeadline": "Cookies & Analytics", |
|||
"users.consent.cookiesText": "<p> Entendo e concordo que o Squidex usa cookies para garantir que você obtenha a melhor experiência em nossa plataforma e para armazenar seu status de login.. </p><p> Entendo e concordo que o Squidex integrou o Google Analytics (com a função de anonimizador). O Google Analytics é um serviço de análise da web para coletar e analisar dados sobre o comportamento dos utilizadors. </p><p> Eu aceito as <a href=\"{privacyUrl}\" target=\"_blank\" rel=\"noopener\">politicas privadas</a>.</p>", |
|||
"users.consent.emailHeadline": "E-Mailsa automáticos (opcional)", |
|||
"users.consent.emailText": "Entendo e concordo que o Squidex envia e-mails para me informar sobre novos ficheiros, alterações de última hora e tempos de inatividade.", |
|||
"users.consent.headline": "Nós precisamos do seu consentimento", |
|||
"users.consent.needed": "Voçê deve dar o seu consentimento.", |
|||
"users.consent.piiHeadline": "Informação pessoal", |
|||
"users.consent.piiText": "Entendo e concordo que o Squidex coleta as seguintes informações privadas que são recuperadas de provedores de autenticação externos, como Google, Microsoft ou Github. <ul class=\"personal-information\"> <li> Informações pessoais básicas (nome, sobrenome e foto) são fornecidas a todos os outros utilizadors para que possam adicioná-lo ao seu espaço de trabalho. </li><li> A qualquer momento, você tem a opção de alterar essas informações para anonimizar sua conta. </li><li> Sua conta de utilizador tem um identificador exclusivo e, para todas as suas alterações, rastreamos que você fez essas alterações e forneceu essas informações a outros utilizadors. </li></ul>", |
|||
"users.consent.title": "Consentimento", |
|||
"users.deleteYourselfError": "Não pode remover a si proprio.", |
|||
"users.error.headline": "Operação falhada", |
|||
"users.error.text": "Pedimos desculpa mas aconteceu algo de errado.", |
|||
"users.error.title": "Erro", |
|||
"users.errorHappened": "Ocorreu uma exceção inesperada.", |
|||
"users.lockedOutText": "Sua conta está bloqueada, entre em contato com o administrador.", |
|||
"users.lockedOutTitle": "Conta bloqueada", |
|||
"users.lockYourselfError": "Você não pode se trancar.", |
|||
"users.login.askAdmin": "", |
|||
"users.login.emailPlaceholder": "Introduzir Email", |
|||
"users.login.error": "Email ou password incorrecta", |
|||
"users.login.loginWith": "{action} com <strong>{provider}</strong>", |
|||
"users.login.noAccountLoginAction": "Carregue aqui para entrar", |
|||
"users.login.noAccountLoginQuestion": "Já registado?", |
|||
"users.login.noAccountSignupAction": "Carregue aqui para registar", |
|||
"users.login.noAccountSignupQuestion": "Sem conta?", |
|||
"users.login.passwordPlaceholder": "Introduzir Password", |
|||
"users.login.separator": "OU", |
|||
"users.logout.headline": "Desconectado!", |
|||
"users.logout.text": "!Por favor feche a janela.", |
|||
"users.logout.title": "Sair", |
|||
"users.noEmailAddress": "Não podemos obter o endereço de e-mail do provedor de autenticação.", |
|||
"users.profile.addLoginDone": "Login adicionado com sucesso.", |
|||
"users.profile.changePassword": "Alterar Password", |
|||
"users.profile.changePasswordDone": "Password alterada com sucesso.", |
|||
"users.profile.clientHint": "Use as credenciais do cliente para acessar a API com suas informações de perfil e permissões", |
|||
"users.profile.clientTitle": "cliente", |
|||
"users.profile.confirmPassword": "Confirmar", |
|||
"users.profile.generateClient": "Gerar", |
|||
"users.profile.generateClientDone": "Segredo do cliente gerado com sucesso.", |
|||
"users.profile.headline": "Editar perfil", |
|||
"users.profile.hideProfile": "Não mostre o seu perfil a outros", |
|||
"users.profile.loginsTitle": "Logins", |
|||
"users.profile.passwordTitle": "Password", |
|||
"users.profile.pii": "Informação pessoal", |
|||
"users.profile.propertiesHint": "Use propriedades personalizadas para regras e scripts.", |
|||
"users.profile.propertiesTitle": "Properiedades", |
|||
"users.profile.propertyAdd": "Adicionar propriedade", |
|||
"users.profile.removeLoginDone": "Provedor de login removido com sucesso.", |
|||
"users.profile.setPassword": "Set Password", |
|||
"users.profile.setPasswordDone": "Password configurada com sucesso.", |
|||
"users.profile.title": "Perfil", |
|||
"users.profile.updateProfileDone": "Conta atualizada com sucesso.", |
|||
"users.profile.updatePropertiesDone": "Conta atualizada com sucesso.", |
|||
"users.profile.uploadPicture": "Carregar foto", |
|||
"users.profile.uploadPictureDone": "Foto carregada com sucesso.", |
|||
"users.unlockYourselfError": "Você não pode desbloquear a si mesmo.", |
|||
"users.userLocked": "O usuário não tem permissão para fazer login.", |
|||
"users.userNotFound": "Não foi possível encontrar o utilizador.", |
|||
"validation.between": "{property|upper} deve estar entre {min} e {max}.", |
|||
"validation.greaterEqualsThan": "{property|upper} deve ser maior ou igual {other|lower}.", |
|||
"validation.greaterThan": "{property|upper} deve ser maior que {other|lower}.", |
|||
"validation.javascriptProperty": "{property|upper} não é um nome de propriedade Javascript.", |
|||
"validation.lessEqualsThan": "{property|upper} deve ser menor ou igual {other|lower}.", |
|||
"validation.lessThan": "{property|upper} deve ser menor que {other|lower}.", |
|||
"validation.notAnImage": "A imagem não é uma imagem válida.", |
|||
"validation.notAnValidSvg": "O SVG é malicioso e contém tags de script.", |
|||
"validation.onlyOneFile": "Só pode carregar um ficheiro.", |
|||
"validation.required": "{property|upper} é obrigatório.", |
|||
"validation.requiredBoth": "Se {property1|lower} ou {property2|lower} são utilizador ambos têm de ser definidos.", |
|||
"validation.requiredValue": "O valor deve ser definido.", |
|||
"validation.slug": "{property|upper} não é um slug válido.", |
|||
"validation.valid": "{property|upper} não é um valor válido.", |
|||
"workflows.overlap": "Múltiplos fluxos de trabalho cobrem todos os esquemas.", |
|||
"workflows.publishedIsInitial": "A etapa inicial não pode ser a etapa publicada.", |
|||
"workflows.publishedNotDefined": "O fluxo de trabalho deve ter uma etapa publicada.", |
|||
"workflows.publishedStepNotFound": "A transição tem um destino inválido.", |
|||
"workflows.schemaOverlap": "O esquema '{schema}' é coberto por vários fluxos de trabalho." |
|||
} |
|||
File diff suppressed because it is too large
File diff suppressed because it is too large
@ -0,0 +1,195 @@ |
|||
// ==========================================================================
|
|||
// Squidex Headless CMS
|
|||
// ==========================================================================
|
|||
// Copyright (c) Squidex UG (haftungsbeschraenkt)
|
|||
// All rights reserved. Licensed under the MIT license.
|
|||
// ==========================================================================
|
|||
|
|||
using Squidex.ClientLibrary; |
|||
using Squidex.ClientLibrary.Management; |
|||
|
|||
#pragma warning disable SA1507 // Code should not contain multiple blank lines in a row
|
|||
|
|||
namespace TestSuite.ApiTests; |
|||
|
|||
public sealed class GraphQLFixture : ContentFixture |
|||
{ |
|||
public sealed class DynamicEntity : Content<object> |
|||
{ |
|||
} |
|||
|
|||
public override async Task InitializeAsync() |
|||
{ |
|||
await base.InitializeAsync(); |
|||
|
|||
await CreateSchemasAsync(); |
|||
await CreateContentsAsync(); |
|||
} |
|||
|
|||
private async Task CreateSchemasAsync() |
|||
{ |
|||
async Task<string> CreateSchemaAsync(CreateSchemaDto request) |
|||
{ |
|||
try |
|||
{ |
|||
var response = await Schemas.PostSchemaAsync(AppName, request); |
|||
|
|||
return response.Id; |
|||
} |
|||
catch (SquidexManagementException ex) |
|||
{ |
|||
if (ex.StatusCode != 400) |
|||
{ |
|||
throw; |
|||
} |
|||
|
|||
var schema = await Schemas.GetSchemaAsync(AppName, request.Name); |
|||
|
|||
return schema.Id; |
|||
} |
|||
} |
|||
|
|||
// STEP 1: Create cities schema.
|
|||
var createCitiesRequest = new CreateSchemaDto |
|||
{ |
|||
Name = "cities", |
|||
Fields = new List<UpsertSchemaFieldDto> |
|||
{ |
|||
new UpsertSchemaFieldDto |
|||
{ |
|||
Name = "name", |
|||
Properties = new StringFieldPropertiesDto() |
|||
} |
|||
}, |
|||
IsPublished = true |
|||
}; |
|||
|
|||
var citiesId = await CreateSchemaAsync(createCitiesRequest); |
|||
|
|||
|
|||
// STEP 2: Create states schema.
|
|||
var createStatesRequest = new CreateSchemaDto |
|||
{ |
|||
Name = "states", |
|||
Fields = new List<UpsertSchemaFieldDto> |
|||
{ |
|||
new UpsertSchemaFieldDto |
|||
{ |
|||
Name = "name", |
|||
Properties = new StringFieldPropertiesDto() |
|||
}, |
|||
new UpsertSchemaFieldDto |
|||
{ |
|||
Name = "cities", |
|||
Properties = new ReferencesFieldPropertiesDto |
|||
{ |
|||
SchemaIds = new List<string> { citiesId } |
|||
} |
|||
} |
|||
}, |
|||
IsPublished = true |
|||
}; |
|||
|
|||
var statesId = await CreateSchemaAsync(createStatesRequest); |
|||
|
|||
|
|||
// STEP 3: Create countries schema.
|
|||
var createCountriesRequest = new CreateSchemaDto |
|||
{ |
|||
Name = "countries", |
|||
Fields = new List<UpsertSchemaFieldDto> |
|||
{ |
|||
new UpsertSchemaFieldDto |
|||
{ |
|||
Name = "name", |
|||
Properties = new StringFieldPropertiesDto() |
|||
}, |
|||
new UpsertSchemaFieldDto |
|||
{ |
|||
Name = "states", |
|||
Properties = new ReferencesFieldPropertiesDto |
|||
{ |
|||
SchemaIds = new List<string> { statesId } |
|||
} |
|||
} |
|||
}, |
|||
IsPublished = true |
|||
}; |
|||
|
|||
await CreateSchemaAsync(createCountriesRequest); |
|||
} |
|||
|
|||
private async Task CreateContentsAsync() |
|||
{ |
|||
var countriesClient = ClientManager.CreateContentsClient<DynamicEntity, object>("countries"); |
|||
var countriesResponse = await countriesClient.GetAsync(); |
|||
|
|||
if (countriesResponse.Total > 0) |
|||
{ |
|||
return; |
|||
} |
|||
|
|||
async Task<string> CreateCityAsync(string name) |
|||
{ |
|||
var citySAData = new |
|||
{ |
|||
name = new |
|||
{ |
|||
iv = name |
|||
} |
|||
}; |
|||
|
|||
var citiesClient = ClientManager.CreateContentsClient<DynamicEntity, object>("cities"); |
|||
|
|||
var city = await citiesClient.CreateAsync(citySAData, ContentCreateOptions.AsPublish); |
|||
|
|||
return city.Id; |
|||
} |
|||
|
|||
async Task<string> CreateStateAsync(string name, string cityId) |
|||
{ |
|||
var citySAData = new |
|||
{ |
|||
name = new |
|||
{ |
|||
iv = name |
|||
}, |
|||
cities = new |
|||
{ |
|||
iv = new[] { cityId } |
|||
} |
|||
}; |
|||
|
|||
var statesClient = ClientManager.CreateContentsClient<DynamicEntity, object>("states"); |
|||
|
|||
var state = await statesClient.CreateAsync(citySAData, ContentCreateOptions.AsPublish); |
|||
|
|||
return state.Id; |
|||
} |
|||
|
|||
// STEP 1: Create state 1
|
|||
var sachsenCapital = await CreateCityAsync("Leipzig"); |
|||
var sachstenState = await CreateStateAsync("Sachsen", sachsenCapital); |
|||
|
|||
|
|||
// STEP 1: Create state 2
|
|||
var badenWCapital = await CreateCityAsync("Stuttgart"); |
|||
var badenWState = await CreateStateAsync("Baden Württemberg", badenWCapital); |
|||
|
|||
|
|||
// STEP 3: Create country
|
|||
var countryData = new |
|||
{ |
|||
name = new |
|||
{ |
|||
iv = "Germany" |
|||
}, |
|||
states = new |
|||
{ |
|||
iv = new[] { sachstenState, badenWState } |
|||
} |
|||
}; |
|||
|
|||
await countriesClient.CreateAsync(countryData, ContentCreateOptions.AsPublish); |
|||
} |
|||
} |
|||
@ -0,0 +1,144 @@ |
|||
// ==========================================================================
|
|||
// Squidex Headless CMS
|
|||
// ==========================================================================
|
|||
// Copyright (c) Squidex UG (haftungsbeschraenkt)
|
|||
// All rights reserved. Licensed under the MIT license.
|
|||
// ==========================================================================
|
|||
|
|||
using System; |
|||
using System.Reactive.Linq; |
|||
using GraphQL; |
|||
using GraphQL.Client.Http; |
|||
using GraphQL.Client.Serializer.Newtonsoft; |
|||
using Squidex.ClientLibrary; |
|||
using Squidex.ClientLibrary.Management; |
|||
using TestSuite.Model; |
|||
|
|||
namespace TestSuite.ApiTests; |
|||
|
|||
#pragma warning disable SA1300 // Element should begin with upper-case letter
|
|||
#pragma warning disable SA1507 // Code should not contain multiple blank lines in a row
|
|||
|
|||
public class GraphQLSubscriptionTests : IClassFixture<ContentFixture> |
|||
{ |
|||
public ContentFixture _ { get; set; } |
|||
|
|||
public GraphQLSubscriptionTests(ContentFixture fixture) |
|||
{ |
|||
_ = fixture; |
|||
} |
|||
|
|||
private sealed class ContentChangesResult |
|||
{ |
|||
public ContentChanges ContentChanges { get; set; } |
|||
} |
|||
|
|||
private sealed class ContentChanges |
|||
{ |
|||
public string Id { get; set; } |
|||
} |
|||
|
|||
private sealed class AssetChangesResult |
|||
{ |
|||
public AssetChanges AssetChanges { get; set; } |
|||
} |
|||
|
|||
private sealed class AssetChanges |
|||
{ |
|||
public string Id { get; set; } |
|||
} |
|||
|
|||
[Fact] |
|||
public async Task Should_listen_to_content_changes() |
|||
{ |
|||
var client = await CreateClient(); |
|||
|
|||
|
|||
// STEP 1: Subscribe to changes.
|
|||
var contentChanges = new GraphQLRequest |
|||
{ |
|||
Query = @"
|
|||
subscription { |
|||
contentChanges { |
|||
id |
|||
} |
|||
}"
|
|||
}; |
|||
|
|||
var contentId = Guid.NewGuid().ToString(); |
|||
|
|||
var subscriptionStream |
|||
= client.CreateSubscriptionStream<ContentChangesResult>(contentChanges); |
|||
|
|||
var publishedContent = |
|||
subscriptionStream.Where(x => x.Data.ContentChanges.Id == contentId).Timeout(TimeSpan.FromSeconds(30)) |
|||
.FirstOrDefaultAsync(); |
|||
|
|||
|
|||
// STEP 2: Create Content.
|
|||
await _.Contents.CreateAsync(new TestEntityData(), new ContentCreateOptions { Id = contentId }); |
|||
|
|||
|
|||
// STEP 3: Wait for publication.
|
|||
var publishedResult = await publishedContent; |
|||
|
|||
Assert.Equal(contentId, publishedResult.Data.ContentChanges.Id); |
|||
} |
|||
|
|||
[Fact] |
|||
public async Task Should_listen_to_asset_changes() |
|||
{ |
|||
var client = await CreateClient(); |
|||
|
|||
|
|||
// STEP 1: Subscribe to changes.
|
|||
var assetChanges = new GraphQLRequest |
|||
{ |
|||
Query = @"
|
|||
subscription { |
|||
assetChanges { |
|||
id |
|||
} |
|||
}"
|
|||
}; |
|||
|
|||
var assetId = Guid.NewGuid().ToString(); |
|||
|
|||
var subscriptionStream |
|||
= client.CreateSubscriptionStream<AssetChangesResult>(assetChanges); |
|||
|
|||
var publishedAsset = |
|||
subscriptionStream.Where(x => x.Data.AssetChanges.Id == assetId).Timeout(TimeSpan.FromSeconds(30)) |
|||
.FirstOrDefaultAsync(); |
|||
|
|||
|
|||
// STEP 2: Create asset.
|
|||
var fileParameter = FileParameter.FromPath("Assets/SampleVideo_1280x720_1mb.mp4"); |
|||
|
|||
await using (fileParameter.Data) |
|||
{ |
|||
await _.Assets.UploadAssetAsync(_.AppName, fileParameter, new AssetUploadOptions { Id = assetId }); |
|||
} |
|||
|
|||
// STEP 3: Wait for publication.
|
|||
var publishedResult = await publishedAsset; |
|||
|
|||
Assert.Equal(assetId, publishedResult.Data.AssetChanges.Id); |
|||
} |
|||
|
|||
private async Task<GraphQLHttpClient> CreateClient() |
|||
{ |
|||
var accessToken = await _.ClientManager.Options.Authenticator.GetBearerTokenAsync(_.AppName, default); |
|||
|
|||
var options = new GraphQLHttpClientOptions |
|||
{ |
|||
EndPoint = new Uri(_.ClientManager.GenerateUrl($"/api/content/{_.AppName}/graphql?access_token={accessToken}")) |
|||
}; |
|||
|
|||
var client = new GraphQLHttpClient(options, new NewtonsoftJsonSerializer()); |
|||
|
|||
await client.InitializeWebsocketConnection(); |
|||
|
|||
return client; |
|||
} |
|||
} |
|||
@ -0,0 +1,44 @@ |
|||
// ==========================================================================
|
|||
// Squidex Headless CMS
|
|||
// ==========================================================================
|
|||
// Copyright (c) Squidex UG (haftungsbeschraenkt)
|
|||
// All rights reserved. Licensed under the MIT license.
|
|||
// ==========================================================================
|
|||
|
|||
#pragma warning disable MA0048 // File name must match type name
|
|||
|
|||
namespace TestSuite.Model; |
|||
|
|||
public sealed class Country |
|||
{ |
|||
public CountryData Data { get; set; } |
|||
} |
|||
|
|||
public sealed class CountryData |
|||
{ |
|||
public string Name { get; set; } |
|||
|
|||
public List<State> States { get; set; } |
|||
} |
|||
|
|||
public sealed class State |
|||
{ |
|||
public StateData Data { get; set; } |
|||
} |
|||
|
|||
public sealed class StateData |
|||
{ |
|||
public string Name { get; set; } |
|||
|
|||
public List<City> Cities { get; set; } |
|||
} |
|||
|
|||
public sealed class City |
|||
{ |
|||
public CityData Data { get; set; } |
|||
} |
|||
|
|||
public sealed class CityData |
|||
{ |
|||
public string Name { get; set; } |
|||
} |
|||
@ -1,11 +1,20 @@ |
|||
<div #container> |
|||
<div #inner [class.fullscreen]="snapshot.isFullscreen"> |
|||
<iframe #iframe scrolling="no" width="100%" [style.height]="0" [attr.src]="computedUrl | sqxSafeResourceUrl"></iframe> |
|||
<div #inner [class.fullscreen]="snapshot.isFullscreen" [class.expanded]="isExpanded"> |
|||
<iframe #iframe [scrolling]="!isExpanded ? 'no' : 'yes'" width="100%" [style.height]="0" [attr.src]="computedUrl | sqxSafeResourceUrl"></iframe> |
|||
</div> |
|||
</div> |
|||
|
|||
<ng-container *sqxModal="assetsDialog"> |
|||
<sqx-assets-selector |
|||
<sqx-asset-selector |
|||
(select)="pickAssets($event)"> |
|||
</sqx-assets-selector> |
|||
</sqx-asset-selector> |
|||
</ng-container> |
|||
|
|||
<ng-container *sqxModal="contentsDialog"> |
|||
<sqx-content-selector |
|||
(select)="pickContents($event)" |
|||
[language]="language" |
|||
[languages]="languages" |
|||
[schemaNames]="contentsSchemas"> |
|||
</sqx-content-selector> |
|||
</ng-container> |
|||
|
|||
File diff suppressed because it is too large
Loading…
Reference in new issue