Upgrade to 4.0.3

This commit is contained in:
Bastian Allgeier
2024-01-10 11:32:26 +01:00
parent 270ffc1119
commit 5c44c8fcfd
16 changed files with 614 additions and 590 deletions

View File

@@ -3,7 +3,7 @@
"description": "The Kirby core",
"license": "proprietary",
"type": "kirby-cms",
"version": "4.0.2",
"version": "4.0.3",
"keywords": [
"kirby",
"cms",

4
kirby/composer.lock generated
View File

@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "b3bdc15cebd0ff800fa453afa8a4751c",
"content-hash": "977754e23aeb4791a5c4f60c6e18ddc6",
"packages": [
{
"name": "christian-riesen/base32",
@@ -1125,5 +1125,5 @@
"platform-overrides": {
"php": "8.1.0"
},
"plugin-api-version": "2.6.0"
"plugin-api-version": "2.3.0"
}

View File

@@ -98,7 +98,7 @@
"error.file.changeName.empty": "Bitte gib einen Namen an",
"error.file.changeName.permission": "Du darfst den Dateinamen von \"{filename}\" nicht ändern",
"error.file.changeTemplate.invalid": "Die Vorlage für die Datei \"{id}\" kann nicht zu \"{template}\" geändert werden (gültig: \"{blueprints}\")",
"error.file.changeTemplate.permission": "Du kannst die Voralge für die Datei \"{id}\" nicht ändern",
"error.file.changeTemplate.permission": "Du kannst die Vorlage für die Datei \"{id}\" nicht ändern",
"error.file.duplicate": "Eine Datei mit dem Dateinamen \"{filename}\" besteht bereits",
"error.file.extension.forbidden": "Verbotene Dateiendung \"{extension}\"",

View File

@@ -535,7 +535,7 @@
"page.changeStatus.select": "Seleziona un nuovo stato",
"page.changeTemplate": "Cambia template",
"page.changeTemplate.notice": "Changing the page's template will remove content for fields that don't match in type. Use with caution.",
"page.create": "Create as {status}",
"page.create": "Crea come \"{status}\"",
"page.delete.confirm": "Sei sicuro di voler eliminare questa pagina?",
"page.delete.confirm.subpages": "<strong>Questa pagina ha sottopagine</strong>. <br>Anche tutte le sottopagine verranno eliminate.",
"page.delete.confirm.title": "Inserisci il titolo della pagina per confermare",

View File

@@ -3,7 +3,7 @@
"account.delete": "Deletar sua conta",
"account.delete.confirm": "Deseja realmente deletar sua conta? Você sairá do site imediatamente. Sua conta não poderá ser recuperada. ",
"activate": "Activate",
"activate": "Ativar",
"add": "Adicionar",
"alpha": "Alpha",
"author": "Autor",
@@ -12,17 +12,17 @@
"cancel": "Cancelar",
"change": "Alterar",
"close": "Fechar",
"changes": "Changes",
"changes": "Alterações",
"confirm": "Salvar",
"collapse": "Colapsar",
"collapse.all": "Colapsar todos",
"color": "Color",
"coordinates": "Coordinates",
"color": "Cor",
"coordinates": "Coordenadas",
"copy": "Copiar",
"copy.all": "Copiar todos",
"copy.success": "{count} copied!",
"copy.success": "{count} copiados!",
"create": "Criar",
"custom": "Custom",
"custom": "Personalizado",
"date": "Data",
"date.select": "Selecione uma data",
@@ -41,20 +41,20 @@
"delete": "Deletar",
"delete.all": "Deletar todos",
"dialog.fields.empty": "This dialog has no fields",
"dialog.fields.empty": "Esta caixa de diálogo não tem campos",
"dialog.files.empty": "Nenhum arquivo para selecionar",
"dialog.pages.empty": "Nenhuma página para selecionar",
"dialog.text.empty": "This dialog does not define any text",
"dialog.text.empty": "Esta caixa de diálogo não define nenhum texto",
"dialog.users.empty": "Nenhum usuário para selecionar",
"dimensions": "Dimensões",
"disable": "Disable",
"disable": "Desativar",
"disabled": "Desativado",
"discard": "Descartar",
"drawer.fields.empty": "This drawer has no fields",
"drawer.fields.empty": "Esta janela não tem campos",
"domain": "Domain",
"domain": "Domínio",
"download": "Baixar",
"duplicate": "Duplicar",
@@ -63,13 +63,13 @@
"email": "Email",
"email.placeholder": "mail@exemplo.com",
"enter": "Enter",
"entries": "Entries",
"entry": "Entry",
"enter": "Insira",
"entries": "Registos",
"entry": "Registo",
"environment": "Ambiente",
"error": "Error",
"error": "Erro",
"error.access.code": "Código inválido",
"error.access.login": "Código de acesso inválido",
"error.access.panel": "Você não tem permissão para acessar o painel",
@@ -86,19 +86,19 @@
"error.blocks.max.singular": "Você não deve adicionar mais do que um bloco",
"error.blocks.min.plural": "Você deve adicionar pelo menos {min} blocos",
"error.blocks.min.singular": "Você deve adicionar pelo menos um bloco",
"error.blocks.validation": "There's an error on the \"{field}\" field in block {index} using the \"{fieldset}\" block type",
"error.blocks.validation": "Há um erro no campo \"{field}\" no bloco {index} a usar o tipo de bloco \"{fieldset}\"",
"error.cache.type.invalid": "Invalid cache type \"{type}\"",
"error.cache.type.invalid": "Tipo de cache \"{type}\" inválido",
"error.email.preset.notFound": "Pré-configuração de email \"{name}\" não foi encontrada",
"error.field.converter.invalid": "Conversor \"{converter}\" inválido",
"error.field.type.missing": "Field \"{ name }\": The field type \"{ type }\" does not exist",
"error.field.type.missing": "Campo \"{name}\": O tipo de campo \"{type}\" não existe",
"error.file.changeName.empty": "O nome não deve ficar em branco",
"error.file.changeName.permission": "Você não tem permissão para alterar o nome de \"{filename}\"",
"error.file.changeTemplate.invalid": "The template for the file \"{id}\" cannot be changed to \"{template}\" (valid: \"{blueprints}\")",
"error.file.changeTemplate.permission": "You are not allowed to change the template for the file \"{id}\"",
"error.file.changeTemplate.invalid": "O template para o ficheiro \"{id}\" não pode ser alterado para \"{template}\" (válido: \"{blueprints}\")",
"error.file.changeTemplate.permission": "Não tem permissão para alterar o template do ficheiro \"{id}\"",
"error.file.duplicate": "Um arquivo com o nome \"{filename}\" já existe",
"error.file.extension.forbidden": "Extensão \"{extension}\" não permitida",
@@ -114,7 +114,7 @@
"error.file.minheight": "A altura da imagem deve ser pelo menos {height} pixels",
"error.file.minsize": "O arquivo é pequeno demais",
"error.file.minwidth": "A largura da imagem deve ser pelo menos {width} pixels",
"error.file.name.unique": "The filename must be unique",
"error.file.name.unique": "O nome do ficheiro deve ser único",
"error.file.name.missing": "O nome do arquivo não pode ficar em branco",
"error.file.notFound": "Arquivo \"{filename}\" não encontrado",
"error.file.orientation": "A orientação da imagem deve ser “{orientation}”",
@@ -130,23 +130,23 @@
"error.language.name": "Por favor entre um nome válido para o idioma",
"error.language.notFound": "O idioma não foi encontrado",
"error.layout.validation.block": "There's an error on the \"{field}\" field in block {blockIndex} using the \"{fieldset}\" block type in layout {layoutIndex}",
"error.layout.validation.block": "Há um erro no campo \"{field}\" no bloco {blockIndex} a usar o tipo de bloco \"{fieldset}\" no layout {layoutIndex}",
"error.layout.validation.settings": "Há um erro na configuração do layout {index}",
"error.license.domain": "The domain for the license is missing",
"error.license.domain": "O domínio da licença está em falta",
"error.license.email": "Digite um endereço de email válido",
"error.license.format": "Please enter a valid license code",
"error.license.format": "Por favor insira um código de licença válido",
"error.license.verification": "A licensa não pôde ser verificada",
"error.login.totp.confirm.invalid": "Código inválido",
"error.login.totp.confirm.missing": "Please enter the current code",
"error.login.totp.confirm.missing": "Por favor insira o código atual",
"error.object.validation": "Theres an error in the \"{label}\" field:\n{message}",
"error.object.validation": "Há um erro no campo \"{label}\":\n{message}",
"error.offline": "O painel está offline no momento",
"error.page.changeSlug.permission": "Você não tem permissão para alterar o anexo de URL de \"{slug}\"",
"error.page.changeSlug.reserved": "The path of top-level pages must not start with \"{path}\"",
"error.page.changeSlug.reserved": "O caminho das páginas de nível superior não deve começar com \"{path}\"",
"error.page.changeStatus.incomplete": "A página possui erros e não pode ser salva",
"error.page.changeStatus.permission": "O estado desta página não pode ser alterado",
"error.page.changeStatus.toDraft.invalid": "A página \"{slug}\" não pode ser convertida para rascunho",
@@ -162,12 +162,12 @@
"error.page.draft.duplicate": "Uma página rascunho com um anexo de URL \"{slug}\" já existe",
"error.page.duplicate": "Uma página com o anexo de URL \"{slug}\" já existe",
"error.page.duplicate.permission": "Você não tem permissão para duplicar “{slug}”",
"error.page.move.ancestor": "The page cannot be moved into itself",
"error.page.move.directory": "The page directory cannot be moved",
"error.page.move.duplicate": "A sub page with the URL appendix \"{slug}\" already exists",
"error.page.move.notFound": "The moved page could not be found",
"error.page.move.permission": "You are not allowed to move \"{slug}\"",
"error.page.move.template": "The \"{template}\" template is not accepted as a subpage of \"{parent}\"",
"error.page.move.ancestor": "A página não pode ser movida para dentro dela mesma",
"error.page.move.directory": "A pasta da página não pode ser movida",
"error.page.move.duplicate": "Uma subpágina com o segmento de URL \"{slug}\" existe",
"error.page.move.notFound": "A página movida não foi encontrada",
"error.page.move.permission": "Não tem permissão para mover \"{slug}\"",
"error.page.move.template": "O template \"{template}\" não é aceite como subpágina de \"{parent}\"",
"error.page.notFound": "Página \"{slug}\" não encontrada",
"error.page.num.invalid": "Digite um número de ordenação válido. Este número não pode ser negativo.",
"error.page.slug.invalid": "Por favor entre um anexo de URL válido ",
@@ -194,11 +194,11 @@
"error.site.changeTitle.permission": "Você não tem permissão para alterar o título do site",
"error.site.update.permission": "Você não tem permissão para atualizar o site",
"error.structure.validation": "There's an error on the \"{field}\" field in row {index}",
"error.structure.validation": "Existe um erro no campo \"{field}\" na linha {index}",
"error.template.default.notFound": "O tema padrão não existe",
"error.unexpected": "An unexpected error occurred! Enable debug mode for more info: https://getkirby.com/docs/reference/system/options/debug",
"error.unexpected": "Ocorreu um erro inesperado! Ative o modo de debug para obter mais informações: https://getkirby.com/docs/reference/system/options/debug",
"error.user.changeEmail.permission": "Você não tem permissão para alterar o email do usuário \"{name}\"",
"error.user.changeLanguage.permission": "Você não tem permissão para alterar o idioma do usuário \"{name}\"",
@@ -216,7 +216,7 @@
"error.user.email.invalid": "Digite um endereço de email válido",
"error.user.language.invalid": "Digite um idioma válido",
"error.user.notFound": "Usuário \"{name}\" não encontrado",
"error.user.password.excessive": "Please enter a valid password. Passwords must not be longer than 1000 characters.",
"error.user.password.excessive": "Por favor insira uma palavra-passe válida. As palavras-passe não devem ter mais do que 1000 caracteres.",
"error.user.password.invalid": "Digite uma senha válida. Sua senha deve ter pelo menos 8 caracteres.",
"error.user.password.notSame": "As senhas não combinam",
"error.user.password.undefined": "O usuário não possui uma senha",
@@ -228,10 +228,10 @@
"error.validation.accepted": "Por favor, confirme",
"error.validation.alpha": "Por favor, use apenas caracteres entre a-z",
"error.validation.alphanum": "Por favor, use apenas caracteres entre a-z ou 0-9",
"error.validation.anchor": "Please enter a correct link anchor",
"error.validation.anchor": "Por favor insira uma âncora de link correta",
"error.validation.between": "Digite um valor entre \"{min}\" e \"{max}\"",
"error.validation.boolean": "Por favor, confirme ou rejeite",
"error.validation.color": "Please enter a valid color in the {format} format",
"error.validation.color": "Por favor, insira uma cor válida no formato {format}",
"error.validation.contains": "Digite um valor que contenha \"{needle}\"",
"error.validation.date": "Escolha uma data válida",
"error.validation.date.after": "Por favor entre uma data depois de {date}",
@@ -246,7 +246,7 @@
"error.validation.integer": "Digite um número inteiro válido",
"error.validation.ip": "Digite um endereço de IP válido",
"error.validation.less": "Digite um valor menor que {max}",
"error.validation.linkType": "The link type is not allowed",
"error.validation.linkType": "O tipo de link não é permitido",
"error.validation.match": "O valor não combina com o padrão esperado",
"error.validation.max": "Digite um valor igual ou menor que {max}",
"error.validation.maxlength": "Digite um valor curto. (no máximo {max} caracteres)",
@@ -263,18 +263,18 @@
"error.validation.same": "Por favor, digite \"{other}\"",
"error.validation.size": "O tamanho do valor deve ser \"{size}\"",
"error.validation.startswith": "O valor deve começar com \"{start}\"",
"error.validation.tel": "Please enter an unformatted phone number",
"error.validation.tel": "Por favor, insira um número de telefone não formatado",
"error.validation.time": "Digite um horário válido",
"error.validation.time.after": "Por favor entre um horário depois de {time}",
"error.validation.time.before": "Por favor entre um horário antes de {time}",
"error.validation.time.between": "Por favor entre um horário entre {min} e {max}",
"error.validation.uuid": "Please enter a valid UUID",
"error.validation.uuid": "Por favor, insira um UUID válido",
"error.validation.url": "Digite uma URL válida",
"expand": "Expandir",
"expand.all": "Expandir todos",
"field.invalid": "The field is invalid",
"field.invalid": "O campo é inválido",
"field.required": "Este campo é obrigatório ",
"field.blocks.changeType": "Mudar tipo",
"field.blocks.code.name": "Código",
@@ -284,9 +284,9 @@
"field.blocks.delete.confirm.all": "Deseja realmente deletar todos os blocos?",
"field.blocks.delete.confirm.selected": "Deseja realmente deletar os blocos selecionados?",
"field.blocks.empty": "Nenhum bloco",
"field.blocks.fieldsets.empty": "No fieldsets yet",
"field.blocks.fieldsets.empty": "Ainda não há tipos de blocos",
"field.blocks.fieldsets.label": "Por favor selecione um tipo de bloco …",
"field.blocks.fieldsets.paste": "Press <kbd>{{ shortcut }}</kbd> to import layouts/blocks from your clipboard <small>Only those allowed in the current field will get inserted.</small>",
"field.blocks.fieldsets.paste": "Pressione <kbd>{{ shortcut }}</kbd> para importar layouts/blocks da sua área de transferência <small>Só serão inseridos aqueles permitidos no campo atual.</small>",
"field.blocks.gallery.name": "Galeria",
"field.blocks.gallery.images.empty": "Nenhuma imagem",
"field.blocks.gallery.images.label": "Imagens",
@@ -299,8 +299,8 @@
"field.blocks.image.crop": "Cortar",
"field.blocks.image.link": "Link",
"field.blocks.image.location": "Localização ",
"field.blocks.image.location.internal": "This website",
"field.blocks.image.location.external": "External source",
"field.blocks.image.location.internal": "Este website",
"field.blocks.image.location.external": "Fonte externa",
"field.blocks.image.name": "Imagem",
"field.blocks.image.placeholder": "Selecionar uma imagem",
"field.blocks.image.ratio": "Proporção ",
@@ -325,43 +325,43 @@
"field.files.empty": "Nenhum arquivo selecionado",
"field.layout.change": "Change layout",
"field.layout.change": "Alterar layout",
"field.layout.delete": "Deletar layout",
"field.layout.delete.confirm": "Deseja realmente deletar este layout?",
"field.layout.delete.confirm.all": "Do you really want to delete all layouts?",
"field.layout.delete.confirm.all": "Tem a certeza que pretende remover todos os layouts?",
"field.layout.empty": "Nenhuma linha",
"field.layout.select": "Selecionar um layout",
"field.object.empty": "No information yet",
"field.object.empty": "Nenhuma informação ainda",
"field.pages.empty": "Nenhuma página selecionada",
"field.structure.delete.confirm": "Deseja realmente deletar esta linha?",
"field.structure.delete.confirm.all": "Do you really want to delete all entries?",
"field.structure.delete.confirm.all": "Tem a certeza que pretende eliminar todos os registos?",
"field.structure.empty": "Nenhum registro",
"field.users.empty": "Nenhum usuário selecionado",
"fields.empty": "No fields yet",
"fields.empty": "Nenhum campo ainda",
"file": "File",
"file": "Ficheiro",
"file.blueprint": "Este arquivo não tem planta. Você pode definir sua planta em <strong>/site/blueprints/files/{blueprint}.yml</strong>",
"file.changeTemplate": "Alterar tema",
"file.changeTemplate.notice": "Changing the file's template will remove content for fields that don't match in type. If the new template defines certain rules, e.g. image dimensions, those will also be applied irreversibly. Use with caution.",
"file.changeTemplate.notice": "Alterar o template do ficheiro irá remover o conteúdo dos campos que não correspondem ao mesmo tipo. Se o novo template definir certas regras, por exemplo dimensões de imagem, estas também serão aplicadas irreversivelmente. Use com cuidado.",
"file.delete.confirm": "Deseja realmente deletar <br> <strong>{filename}</strong>?",
"file.focus.placeholder": "Set focal point",
"file.focus.reset": "Remove focal point",
"file.focus.title": "Focus",
"file.focus.placeholder": "Definir ponto de foco",
"file.focus.reset": "Remover ponto de foco",
"file.focus.title": "Foco",
"file.sort": "Mudar posição",
"files": "Arquivos",
"files.empty": "Nenhum arquivo",
"filter": "Filter",
"filter": "Filtro",
"hide": "Ocultar",
"hour": "Hora",
"hue": "Hue",
"hue": "Tonalidade",
"import": "Importar",
"info": "Info",
"insert": "Inserir",
@@ -396,16 +396,16 @@
"language.locale": "String de localização do PHP",
"language.locale.warning": "Você está usando uma configuração de local customizada. Por favor modifique a configuração no arquivo do idioma em /site/languages",
"language.name": "Nome",
"language.secondary": "Secondary language",
"language.settings": "Language settings",
"language.secondary": "Idioma secundário",
"language.settings": "Configurações de idioma",
"language.updated": "Idioma atualizado",
"language.variables": "Language variables",
"language.variables.empty": "No translations yet",
"language.variables": "Variáveis de idioma",
"language.variables.empty": "Nenhuma tradução ainda",
"language.variable.delete.confirm": "Do you really want to delete the variable for {key}?",
"language.variable.key": "Key",
"language.variable.notFound": "The variable could not be found",
"language.variable.value": "Value",
"language.variable.delete.confirm": "Tem a certeza que pretende eliminar a variável {key}?",
"language.variable.key": "Chave",
"language.variable.notFound": "A variável não foi encontrada",
"language.variable.value": "Valor",
"languages": "Idiomas",
"languages.default": "Idioma padrão",
@@ -414,31 +414,31 @@
"languages.secondary.empty": "Nenhum idioma secundário",
"license": "Licen\u00e7a do Kirby ",
"license.activate": "Activate it now",
"license.activate.label": "Please activate your license",
"license.activate.domain": "Your license will be activated for <strong>{host}</strong>.",
"license.activate.local": "You are about to activate your Kirby license for your local domain <strong>{host}</strong>. If this site will be deployed to a public domain, please activate it there instead. If {host} is the domain you want to use your license for, please continue.",
"license.activated": "Activated",
"license.activate": "Ativar agora",
"license.activate.label": "Por favor, ative a sua licença",
"license.activate.domain": "A sua licença será irá ser ativada para <strong>{host}</strong>.",
"license.activate.local": "Está prestes a ativar a sua licença Kirby no domínio local {host}. Se este site vai ser alojado num domínio público, por favor ative-o lá. Se o domínio {host} é o o que deseja para usar a sua licença, por favor continue.",
"license.activated": "Ativado",
"license.buy": "Comprar licença",
"license.code": "Código",
"license.code.help": "You received your license code after the purchase via email. Please copy and paste it here.",
"license.code.help": "Recebeu o seu código de licença por e-mail após a compra. Por favor, copie e cole aqui.",
"license.code.label": "Por favor, digite o código da sua licença",
"license.status.active.info": "Includes new major versions until {date}",
"license.status.active.label": "Valid license",
"license.status.demo.info": "This is a demo installation",
"license.status.demo.label": "Demo",
"license.status.inactive.info": "Renew license to update to new major versions",
"license.status.inactive.label": "No new major versions",
"license.status.legacy.bubble": "Ready to renew your license?",
"license.status.legacy.info": "Your license does not cover this version",
"license.status.legacy.label": "Please renew your license",
"license.status.missing.bubble": "Ready to launch your site?",
"license.status.missing.info": "No valid license",
"license.status.missing.label": "Please activate your license",
"license.manage": "Manage your licenses",
"license.purchased": "Purchased",
"license.status.active.info": "Inclui novas versões principais até {date}",
"license.status.active.label": "Licença válida",
"license.status.demo.info": "Esta é uma instalação de demonstração",
"license.status.demo.label": "Demonstração",
"license.status.inactive.info": "Renove a licença para atualizar para novas versões principais",
"license.status.inactive.label": "Nenhuma versão principal nova",
"license.status.legacy.bubble": "Pronto para renovar a sua licença?",
"license.status.legacy.info": "A sua licença não abrange esta versão",
"license.status.legacy.label": "Por favor, renove a sua licença",
"license.status.missing.bubble": "Pronto para lançar o seu site?",
"license.status.missing.info": "Nenhuma licença válida",
"license.status.missing.label": "Por favor, ative a sua licença",
"license.manage": "Gerir as suas licenças",
"license.purchased": "Compradas",
"license.success": "Obrigado por apoiar o Kirby",
"license.unregistered.label": "Unregistered",
"license.unregistered.label": "Não registadas",
"link": "Link",
"link.text": "Texto do link",
@@ -447,10 +447,10 @@
"lock.unsaved": "Mudanças não salvas",
"lock.unsaved.empty": "Não há mais mudanças não salvas",
"lock.isLocked": "Unsaved changes by {email}",
"lock.isLocked": "Alterações não guardadas de {email}",
"lock.unlock": "Destrancar",
"lock.unlock.submit": "Unlock and overwrite unsaved changes by <strong>{email}</strong>",
"lock.isUnlocked": "Was unlocked by another user",
"lock.unlock.submit": "Desbloqueie e substitua alterações não guardadas de <strong>{email}</strong>",
"lock.isUnlocked": "Foi desbloqueado por outro utilizador",
"login": "Entrar",
"login.code.label.login": "Código de acesso",
@@ -458,7 +458,7 @@
"login.code.placeholder.email": "000 0000",
"login.code.placeholder.totp": "000000",
"login.code.text.email": "Se seu endereço de email está registrado, o código requisitado será mandado por email.",
"login.code.text.totp": "Please enter the onetime code from your authenticator app.",
"login.code.text.totp": "Por favor, insira o código único da sua aplicação de autenticação.",
"login.email.login.body": "Oi, {user.nameOrEmail},\n\nVocê recentemente pediu um código de acesso ao painel administrativo do site {site}.\nO seguinte código será válido por {timeout} minutos:\n\n{code}\n\nSe você não pediu este código de acesso, por favor ignore esta mensagem, ou contate seu Administrador de Sistemas se você tiver dúvidas.\nPor questões de segurança, por favor NÃO compartilhe esta mensagem.",
"login.email.login.subject": "Seu código de acesso",
"login.email.password-reset.body": "Oi, {user.nameOrEmail},\n\nVocê recentemente pediu um código de redefinição de senha, para o painel administrativo do site {site}.\nO seguinte código de redefinição de senha será válido por {timeout} minutos:\n\n{code}\n\nSe você não pediu este código, por favor ignore esta mensagem, ou contate seu Administrador de Sistemas se você tiver dúvidas.\nPor questões de segurança, por favor NÃO compartilhe esta mensagem.",
@@ -469,24 +469,24 @@
"login.toggleText.code.email-password": "Entrar com senha",
"login.toggleText.password-reset.email": "Esqueceu sua senha?",
"login.toggleText.password-reset.email-password": "← Voltar à entrada",
"login.totp.enable.option": "Set up onetime codes",
"login.totp.enable.intro": "Authenticator apps can generate onetime codes that are used as a second factor when signing into your account.",
"login.totp.enable.qr.label": "1. Scan this QR code",
"login.totp.enable.qr.help": "Unable to scan? Add the setup key <code>{secret}</code> manually to your authenticator app.",
"login.totp.enable.confirm.headline": "2. Confirm with generated code",
"login.totp.enable.confirm.text": "Your app generates a new onetime code every 30 seconds. Enter the current code to complete the setup:",
"login.totp.enable.confirm.label": "Current code",
"login.totp.enable.confirm.help": "After this setup, we will ask you for a onetime code every time you log in.",
"login.totp.enable.success": "Onetime codes enabled",
"login.totp.disable.option": "Disable onetime codes",
"login.totp.disable.label": "Enter your password to disable onetime codes",
"login.totp.disable.help": "In the future, a different second factor like a login code sent via email will be requested when you log in. You can always set up onetime codes again later.",
"login.totp.disable.admin": "<p>This will disable onetime codes for <strong>{user}</strong>.</p><p>In the future, a different second factor like a login code sent via email will be requested when they log in. {user} can set up onetime codes again after their next login.</p>",
"login.totp.disable.success": "Onetime codes disabled",
"login.totp.enable.option": "Configurar códigos únicos",
"login.totp.enable.intro": "As aplicações de autenticação podem gerar códigos únicos que são utilizados como um segundo fator ao iniciar a sessão na sua conta.",
"login.totp.enable.qr.label": "1. Leia este código QR",
"login.totp.enable.qr.help": "Não consegue ler o código? Adicione a chave de configuração <code>{secret}</code> manualmente à sua aplicação de autenticação.",
"login.totp.enable.confirm.headline": "2. Confirme com o código gerado",
"login.totp.enable.confirm.text": "A sua aplicação gera um novo código único a cada 30 segundos. Insira o código atual para concluir a configuração:",
"login.totp.enable.confirm.label": "Código atual",
"login.totp.enable.confirm.help": "Após esta configuração, iremos solicitar um código único sempre que iniciar a sessão.",
"login.totp.enable.success": "Códigos únicos ativados",
"login.totp.disable.option": "Desativar códigos únicos",
"login.totp.disable.label": "Insira a sua palavra-passe para desativar códigos únicos",
"login.totp.disable.help": "No futuro, um segundo fator diferente, como um código de início de sessão enviado por e-mail, será solicitado quando iniciar a sessão. Poderá configurar códigos únicos novamente mais tarde.",
"login.totp.disable.admin": "Isto irá desactivar os códigos únicos para {user}. No futuro, um segundo fator diferente, como um código de início de sessão enviado por e-mail, será solicitado quando eles iniciarem a sessão. {user} poderá configurar códigos únicos novamente após o próximo início de sessão.",
"login.totp.disable.success": "Códigos únicos desativados",
"logout": "Sair",
"merge": "Merge",
"merge": "Unir",
"menu": "Menu",
"meridiem": "AM/PM",
"mime": "Tipo de mídia",
@@ -507,19 +507,19 @@
"months.september": "Setembro",
"more": "Mais",
"move": "Move",
"move": "Mover",
"name": "Nome",
"next": "Próximo",
"night": "Night",
"night": "Noite",
"no": "não",
"off": "não",
"on": "sim",
"open": "Abrir",
"open.newWindow": "Abrir em nova janela",
"option": "Option",
"option": "Opção",
"options": "Opções",
"options.none": "Nenhuma opção",
"options.all": "Show all {count} options",
"options.all": "Mostrar todas as {count} opções",
"orientation": "Orientação",
"orientation.landscape": "Paisagem",
@@ -534,15 +534,15 @@
"page.changeStatus.position": "Selecione uma posição",
"page.changeStatus.select": "Selecione um novo estado",
"page.changeTemplate": "Alterar tema",
"page.changeTemplate.notice": "Changing the page's template will remove content for fields that don't match in type. Use with caution.",
"page.create": "Create as {status}",
"page.changeTemplate.notice": "Alterar o template da página irá remover o conteúdo dos campos que não correspondem ao mesmo tipo. Use com cuidado.",
"page.create": "Criar como {status}",
"page.delete.confirm": "Deseja realmente deletar <strong>{title}</strong>?",
"page.delete.confirm.subpages": "<strong>Esta página possui subpáginas</strong>. <br>Todas as subpáginas serão excluídas também.",
"page.delete.confirm.title": "Digite o título da página para confirmar",
"page.duplicate.appendix": "Copiar",
"page.duplicate.files": "Copiar arquivos",
"page.duplicate.pages": "Copiar páginas",
"page.move": "Move page",
"page.move": "Mover página",
"page.sort": "Mudar posição",
"page.status": "Estado",
"page.status.draft": "Rascunho",
@@ -563,7 +563,7 @@
"password": "Senha",
"paste": "Colar",
"paste.after": "Colar após",
"paste.success": "{count} pasted!",
"paste.success": "{count} colados!",
"pixel": "Pixel",
"plugin": "Plugin",
"plugins": "Plugins",
@@ -571,9 +571,9 @@
"preview": "Visualizar",
"remove": "Remover",
"rename": "Renomear",
"renew": "Renew",
"renew": "Renovar",
"replace": "Substituir",
"replace.with": "Replace with",
"replace.with": "Substituir por",
"retry": "Tentar novamente",
"revert": "Descartar",
"revert.confirm": "Deseja realmente <strong>deletar todas as mudanças não salvas</strong>?",
@@ -590,13 +590,13 @@
"save": "Salvar",
"search": "Buscar",
"search.min": "Digite {min} caracteres para fazer uma busca",
"search.all": "Show all {count} results",
"search.all": "Mostrar todos os {count} resultados",
"search.results.none": "Nenhum resultado",
"section.invalid": "The section is invalid",
"section.invalid": "A secção é inválida",
"section.required": "Esta seção é obrigatória",
"security": "Security",
"security": "Segurança",
"select": "Selecionar",
"server": "Servidor",
"settings": "Configurações",
@@ -605,40 +605,40 @@
"size": "Tamanho",
"slug": "Anexo de URL",
"sort": "Ordenar",
"sort.drag": "Drag to sort …",
"split": "Split",
"sort.drag": "Arraste para ordenar ...",
"split": "Dividir",
"stats.empty": "No reports",
"stats.empty": "Nenhum relatório",
"status": "Estado",
"system.issues.content": "The content folder seems to be exposed",
"system.issues.eol.kirby": "Your installed Kirby version has reached end-of-life and will not receive further security updates",
"system.issues.eol.plugin": "Your installed version of the { plugin } plugin is has reached end-of-life and will not receive further security updates",
"system.issues.eol.php": "Your installed PHP release { release } has reached end-of-life and will not receive further security updates",
"system.issues.debug": "Debugging must be turned off in production",
"system.issues.git": "The .git folder seems to be exposed",
"system.issues.https": "We recommend HTTPS for all your sites",
"system.issues.kirby": "The kirby folder seems to be exposed",
"system.issues.site": "The site folder seems to be exposed",
"system.issues.vulnerability.kirby": "Your installation might be affected by the following vulnerability ({ severity } severity): { description }",
"system.issues.vulnerability.plugin": "Your installation might be affected by the following vulnerability in the { plugin } plugin ({ severity } severity): { description }",
"system.updateStatus": "Update status",
"system.updateStatus.error": "Could not check for updates",
"system.updateStatus.not-vulnerable": "No known vulnerabilities",
"system.updateStatus.security-update": "Free security update { version } available",
"system.updateStatus.security-upgrade": "Upgrade { version } with security fixes available",
"system.updateStatus.unreleased": "Unreleased version",
"system.updateStatus.up-to-date": "Up to date",
"system.updateStatus.update": "Free update { version } available",
"system.updateStatus.upgrade": "Upgrade { version } available",
"system.issues.content": "A pasta \"content\" parece não estar protegida",
"system.issues.eol.kirby": "A versão instalada do Kirby chegou ao fim da sua vida útil e não irá receber mais atualizações de segurança",
"system.issues.eol.plugin": "A versão instalada do plugin {plugin} chegou ao fim da sua vida útil e não irá receber mais atualizações de segurança",
"system.issues.eol.php": "A versão instalada {release} de PHP chegou ao fim da sua vida útil e não irá receber mais atualizações de segurança",
"system.issues.debug": "O modo debug deve ser desativado em produção",
"system.issues.git": "A pasta \".git\" parece não estar protegida",
"system.issues.https": "Nós recomendamos HTTPS para todos os seus sites",
"system.issues.kirby": "A pasta \"kirby\" parece não estar protegida",
"system.issues.site": "A pasta \"site\" parece não estar protegida",
"system.issues.vulnerability.kirby": "A sua instalação poderá ser afetada pela seguinte vulnerabilidade ({ severity } gravidade): { description }",
"system.issues.vulnerability.plugin": "A sua instalação poderá ser afetada pela seguinte vulnerabilidade no plugin { plugin } ({ severity } gravidade): { description }",
"system.updateStatus": "Atualizar estado",
"system.updateStatus.error": "Não foi possível verificar se havia atualizações",
"system.updateStatus.not-vulnerable": "Nenhuma vulnerabilidade conhecida",
"system.updateStatus.security-update": "Atualização de segurança gratuita { version } disponível",
"system.updateStatus.security-upgrade": "Atualização { version } com correções de segurança disponível",
"system.updateStatus.unreleased": "Versão não lançada",
"system.updateStatus.up-to-date": "Atualizado",
"system.updateStatus.update": "Atualização gratuita { version } disponível",
"system.updateStatus.upgrade": "Atualização { version } disponível",
"tel": "Phone",
"tel.placeholder": "+49123456789",
"tel": "Telefone",
"tel.placeholder": "+351 123456789",
"template": "Tema",
"title": "Título",
"today": "Hoje",
"toolbar.button.clear": "Clear formatting",
"toolbar.button.clear": "Limpar formatação",
"toolbar.button.code": "Código",
"toolbar.button.bold": "Negrito",
"toolbar.button.email": "Email",
@@ -656,8 +656,8 @@
"toolbar.button.link": "Link",
"toolbar.button.paragraph": "Parágrafo",
"toolbar.button.strike": "Riscado",
"toolbar.button.sub": "Subscript",
"toolbar.button.sup": "Superscript",
"toolbar.button.sub": "Subscrito",
"toolbar.button.sup": "Sobrescrito",
"toolbar.button.ol": "Lista ordenada",
"toolbar.button.underline": "Sublinhado",
"toolbar.button.ul": "Lista não-ordenada",
@@ -667,7 +667,7 @@
"translation.name": "Português do Brasil",
"translation.locale": "pt_BR",
"type": "Type",
"type": "Tipo",
"upload": "Enviar",
"upload.error.cantMove": "O arquivo carregado não pôde ser movido",
@@ -704,9 +704,9 @@
"users": "Usuários",
"version": "Vers\u00e3o do Kirby",
"version.current": "Current version",
"version.latest": "Latest version",
"versionInformation": "Version information",
"version.current": "Versão atual",
"version.latest": "Versão mais recente",
"versionInformation": "Informação da versão",
"view.account": "Sua conta",
"view.installation": "Instala\u00e7\u00e3o",

File diff suppressed because it is too large Load Diff

View File

@@ -135,7 +135,7 @@
"error.license.domain": "Lisans için alan adı eksik",
"error.license.email": "Lütfen geçerli bir e-posta adresi girin",
"error.license.format": "Please enter a valid license code",
"error.license.format": "Lütfen geçerli bir lisans anahtarı girin",
"error.license.verification": "Lisans doğrulanamadı",
"error.login.totp.confirm.invalid": "Geçersiz kod",
@@ -425,7 +425,7 @@
"license.code.label": "Lütfen lisans kodunu giriniz",
"license.status.active.info": "{date} tarihine kadar yeni ana sürümleri içerir",
"license.status.active.label": "Geçerli lisans",
"license.status.demo.info": "This is a demo installation",
"license.status.demo.info": "Bu bir demo kurulumudur",
"license.status.demo.label": "Demo",
"license.status.inactive.info": "Yeni ana sürümlere güncellemek için lisansı yenileyin",
"license.status.inactive.label": "Yeni ana sürüm yok",

View File

@@ -437,8 +437,6 @@ class App
/**
* Calls a page controller by name
* and with the given arguments
*
* @internal
*/
public function controller(
string $name,

View File

@@ -391,7 +391,7 @@ class License
*/
public function save(): bool
{
if ($this->status() !== LicenseStatus::Active) {
if ($this->status()->activatable() !== true) {
throw new InvalidArgumentException([
'key' => 'license.verification'
]);

View File

@@ -43,6 +43,22 @@ enum LicenseStatus: string
*/
case Missing = 'missing';
/**
* Checks if the license can be saved when it
* was entered in the activation dialog;
* renewable licenses are accepted as well
* to allow renewal from the Panel
*/
public function activatable(): bool
{
return match ($this) {
static::Active,
static::Inactive,
static::Legacy => true,
default => false
};
}
/**
* Returns the dialog according to the status
*/
@@ -95,7 +111,7 @@ enum LicenseStatus: string
public function renewable(): bool
{
return match ($this) {
static::Demo => false,
static::Demo,
static::Active => false,
default => true
};

View File

@@ -753,6 +753,10 @@ class Environment
return true;
}
if (Str::endsWith($host, '.ddev.site') === true) {
return true;
}
// collect all possible visitor ips
$ips = [
$this->get('REMOTE_ADDR'),

View File

@@ -186,7 +186,7 @@ class Url
$uri->slash = false;
$url = $base ? $uri->base() : $uri->toString();
$url = str_replace('www.', '', $url);
$url = str_replace('www.', '', $url ?? '');
return Str::short($url, $length, $rep);
}

0
kirby/vendor/bin/yaml-lint vendored Executable file → Normal file
View File

View File

@@ -45,34 +45,35 @@ class ClassLoader
/** @var \Closure(string):void */
private static $includeFile;
/** @var string|null */
/** @var ?string */
private $vendorDir;
// PSR-4
/**
* @var array<string, array<string, int>>
* @var array[]
* @psalm-var array<string, array<string, int>>
*/
private $prefixLengthsPsr4 = array();
/**
* @var array<string, list<string>>
* @var array[]
* @psalm-var array<string, array<int, string>>
*/
private $prefixDirsPsr4 = array();
/**
* @var list<string>
* @var array[]
* @psalm-var array<string, string>
*/
private $fallbackDirsPsr4 = array();
// PSR-0
/**
* List of PSR-0 prefixes
*
* Structured as array('F (first letter)' => array('Foo\Bar (full prefix)' => array('path', 'path2')))
*
* @var array<string, array<string, list<string>>>
* @var array[]
* @psalm-var array<string, array<string, string[]>>
*/
private $prefixesPsr0 = array();
/**
* @var list<string>
* @var array[]
* @psalm-var array<string, string>
*/
private $fallbackDirsPsr0 = array();
@@ -80,7 +81,8 @@ class ClassLoader
private $useIncludePath = false;
/**
* @var array<string, string>
* @var string[]
* @psalm-var array<string, string>
*/
private $classMap = array();
@@ -88,20 +90,21 @@ class ClassLoader
private $classMapAuthoritative = false;
/**
* @var array<string, bool>
* @var bool[]
* @psalm-var array<string, bool>
*/
private $missingClasses = array();
/** @var string|null */
/** @var ?string */
private $apcuPrefix;
/**
* @var array<string, self>
* @var self[]
*/
private static $registeredLoaders = array();
/**
* @param string|null $vendorDir
* @param ?string $vendorDir
*/
public function __construct($vendorDir = null)
{
@@ -110,7 +113,7 @@ class ClassLoader
}
/**
* @return array<string, list<string>>
* @return string[]
*/
public function getPrefixes()
{
@@ -122,7 +125,8 @@ class ClassLoader
}
/**
* @return array<string, list<string>>
* @return array[]
* @psalm-return array<string, array<int, string>>
*/
public function getPrefixesPsr4()
{
@@ -130,7 +134,8 @@ class ClassLoader
}
/**
* @return list<string>
* @return array[]
* @psalm-return array<string, string>
*/
public function getFallbackDirs()
{
@@ -138,7 +143,8 @@ class ClassLoader
}
/**
* @return list<string>
* @return array[]
* @psalm-return array<string, string>
*/
public function getFallbackDirsPsr4()
{
@@ -146,7 +152,8 @@ class ClassLoader
}
/**
* @return array<string, string> Array of classname => path
* @return string[] Array of classname => path
* @psalm-return array<string, string>
*/
public function getClassMap()
{
@@ -154,7 +161,8 @@ class ClassLoader
}
/**
* @param array<string, string> $classMap Class to filename map
* @param string[] $classMap Class to filename map
* @psalm-param array<string, string> $classMap
*
* @return void
*/
@@ -172,24 +180,23 @@ class ClassLoader
* appending or prepending to the ones previously set for this prefix.
*
* @param string $prefix The prefix
* @param list<string>|string $paths The PSR-0 root directories
* @param string[]|string $paths The PSR-0 root directories
* @param bool $prepend Whether to prepend the directories
*
* @return void
*/
public function add($prefix, $paths, $prepend = false)
{
$paths = (array) $paths;
if (!$prefix) {
if ($prepend) {
$this->fallbackDirsPsr0 = array_merge(
$paths,
(array) $paths,
$this->fallbackDirsPsr0
);
} else {
$this->fallbackDirsPsr0 = array_merge(
$this->fallbackDirsPsr0,
$paths
(array) $paths
);
}
@@ -198,19 +205,19 @@ class ClassLoader
$first = $prefix[0];
if (!isset($this->prefixesPsr0[$first][$prefix])) {
$this->prefixesPsr0[$first][$prefix] = $paths;
$this->prefixesPsr0[$first][$prefix] = (array) $paths;
return;
}
if ($prepend) {
$this->prefixesPsr0[$first][$prefix] = array_merge(
$paths,
(array) $paths,
$this->prefixesPsr0[$first][$prefix]
);
} else {
$this->prefixesPsr0[$first][$prefix] = array_merge(
$this->prefixesPsr0[$first][$prefix],
$paths
(array) $paths
);
}
}
@@ -220,7 +227,7 @@ class ClassLoader
* appending or prepending to the ones previously set for this namespace.
*
* @param string $prefix The prefix/namespace, with trailing '\\'
* @param list<string>|string $paths The PSR-4 base directories
* @param string[]|string $paths The PSR-4 base directories
* @param bool $prepend Whether to prepend the directories
*
* @throws \InvalidArgumentException
@@ -229,18 +236,17 @@ class ClassLoader
*/
public function addPsr4($prefix, $paths, $prepend = false)
{
$paths = (array) $paths;
if (!$prefix) {
// Register directories for the root namespace.
if ($prepend) {
$this->fallbackDirsPsr4 = array_merge(
$paths,
(array) $paths,
$this->fallbackDirsPsr4
);
} else {
$this->fallbackDirsPsr4 = array_merge(
$this->fallbackDirsPsr4,
$paths
(array) $paths
);
}
} elseif (!isset($this->prefixDirsPsr4[$prefix])) {
@@ -250,18 +256,18 @@ class ClassLoader
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
}
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
$this->prefixDirsPsr4[$prefix] = $paths;
$this->prefixDirsPsr4[$prefix] = (array) $paths;
} elseif ($prepend) {
// Prepend directories for an already registered namespace.
$this->prefixDirsPsr4[$prefix] = array_merge(
$paths,
(array) $paths,
$this->prefixDirsPsr4[$prefix]
);
} else {
// Append directories for an already registered namespace.
$this->prefixDirsPsr4[$prefix] = array_merge(
$this->prefixDirsPsr4[$prefix],
$paths
(array) $paths
);
}
}
@@ -271,7 +277,7 @@ class ClassLoader
* replacing any others previously set for this prefix.
*
* @param string $prefix The prefix
* @param list<string>|string $paths The PSR-0 base directories
* @param string[]|string $paths The PSR-0 base directories
*
* @return void
*/
@@ -289,7 +295,7 @@ class ClassLoader
* replacing any others previously set for this namespace.
*
* @param string $prefix The prefix/namespace, with trailing '\\'
* @param list<string>|string $paths The PSR-4 base directories
* @param string[]|string $paths The PSR-4 base directories
*
* @throws \InvalidArgumentException
*
@@ -475,9 +481,9 @@ class ClassLoader
}
/**
* Returns the currently registered loaders keyed by their corresponding vendor directories.
* Returns the currently registered loaders indexed by their corresponding vendor directories.
*
* @return array<string, self>
* @return self[]
*/
public static function getRegisteredLoaders()
{

View File

@@ -1,8 +1,8 @@
<?php return array(
'root' => array(
'name' => 'getkirby/cms',
'pretty_version' => '4.0.2',
'version' => '4.0.2.0',
'pretty_version' => '4.0.3',
'version' => '4.0.3.0',
'reference' => NULL,
'type' => 'kirby-cms',
'install_path' => __DIR__ . '/../../',
@@ -47,8 +47,8 @@
'dev_requirement' => false,
),
'getkirby/cms' => array(
'pretty_version' => '4.0.2',
'version' => '4.0.2.0',
'pretty_version' => '4.0.3',
'version' => '4.0.3.0',
'reference' => NULL,
'type' => 'kirby-cms',
'install_path' => __DIR__ . '/../../',

0
kirby/vendor/symfony/yaml/Resources/bin/yaml-lint vendored Executable file → Normal file
View File