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", "description": "The Kirby core",
"license": "proprietary", "license": "proprietary",
"type": "kirby-cms", "type": "kirby-cms",
"version": "4.0.2", "version": "4.0.3",
"keywords": [ "keywords": [
"kirby", "kirby",
"cms", "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", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "b3bdc15cebd0ff800fa453afa8a4751c", "content-hash": "977754e23aeb4791a5c4f60c6e18ddc6",
"packages": [ "packages": [
{ {
"name": "christian-riesen/base32", "name": "christian-riesen/base32",
@@ -1125,5 +1125,5 @@
"platform-overrides": { "platform-overrides": {
"php": "8.1.0" "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.empty": "Bitte gib einen Namen an",
"error.file.changeName.permission": "Du darfst den Dateinamen von \"{filename}\" nicht ändern", "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.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.duplicate": "Eine Datei mit dem Dateinamen \"{filename}\" besteht bereits",
"error.file.extension.forbidden": "Verbotene Dateiendung \"{extension}\"", "error.file.extension.forbidden": "Verbotene Dateiendung \"{extension}\"",

View File

@@ -535,7 +535,7 @@
"page.changeStatus.select": "Seleziona un nuovo stato", "page.changeStatus.select": "Seleziona un nuovo stato",
"page.changeTemplate": "Cambia template", "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.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": "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.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", "page.delete.confirm.title": "Inserisci il titolo della pagina per confermare",

View File

@@ -3,7 +3,7 @@
"account.delete": "Deletar sua conta", "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. ", "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", "add": "Adicionar",
"alpha": "Alpha", "alpha": "Alpha",
"author": "Autor", "author": "Autor",
@@ -12,17 +12,17 @@
"cancel": "Cancelar", "cancel": "Cancelar",
"change": "Alterar", "change": "Alterar",
"close": "Fechar", "close": "Fechar",
"changes": "Changes", "changes": "Alterações",
"confirm": "Salvar", "confirm": "Salvar",
"collapse": "Colapsar", "collapse": "Colapsar",
"collapse.all": "Colapsar todos", "collapse.all": "Colapsar todos",
"color": "Color", "color": "Cor",
"coordinates": "Coordinates", "coordinates": "Coordenadas",
"copy": "Copiar", "copy": "Copiar",
"copy.all": "Copiar todos", "copy.all": "Copiar todos",
"copy.success": "{count} copied!", "copy.success": "{count} copiados!",
"create": "Criar", "create": "Criar",
"custom": "Custom", "custom": "Personalizado",
"date": "Data", "date": "Data",
"date.select": "Selecione uma data", "date.select": "Selecione uma data",
@@ -41,20 +41,20 @@
"delete": "Deletar", "delete": "Deletar",
"delete.all": "Deletar todos", "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.files.empty": "Nenhum arquivo para selecionar",
"dialog.pages.empty": "Nenhuma página 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", "dialog.users.empty": "Nenhum usuário para selecionar",
"dimensions": "Dimensões", "dimensions": "Dimensões",
"disable": "Disable", "disable": "Desativar",
"disabled": "Desativado", "disabled": "Desativado",
"discard": "Descartar", "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", "download": "Baixar",
"duplicate": "Duplicar", "duplicate": "Duplicar",
@@ -63,13 +63,13 @@
"email": "Email", "email": "Email",
"email.placeholder": "mail@exemplo.com", "email.placeholder": "mail@exemplo.com",
"enter": "Enter", "enter": "Insira",
"entries": "Entries", "entries": "Registos",
"entry": "Entry", "entry": "Registo",
"environment": "Ambiente", "environment": "Ambiente",
"error": "Error", "error": "Erro",
"error.access.code": "Código inválido", "error.access.code": "Código inválido",
"error.access.login": "Código de acesso inválido", "error.access.login": "Código de acesso inválido",
"error.access.panel": "Você não tem permissão para acessar o painel", "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.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.plural": "Você deve adicionar pelo menos {min} blocos",
"error.blocks.min.singular": "Você deve adicionar pelo menos um bloco", "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.email.preset.notFound": "Pré-configuração de email \"{name}\" não foi encontrada",
"error.field.converter.invalid": "Conversor \"{converter}\" inválido", "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.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.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.invalid": "O template para o ficheiro \"{id}\" não pode ser alterado para \"{template}\" (válido: \"{blueprints}\")",
"error.file.changeTemplate.permission": "You are not allowed to change the template for the file \"{id}\"", "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.duplicate": "Um arquivo com o nome \"{filename}\" já existe",
"error.file.extension.forbidden": "Extensão \"{extension}\" não permitida", "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.minheight": "A altura da imagem deve ser pelo menos {height} pixels",
"error.file.minsize": "O arquivo é pequeno demais", "error.file.minsize": "O arquivo é pequeno demais",
"error.file.minwidth": "A largura da imagem deve ser pelo menos {width} pixels", "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.name.missing": "O nome do arquivo não pode ficar em branco",
"error.file.notFound": "Arquivo \"{filename}\" não encontrado", "error.file.notFound": "Arquivo \"{filename}\" não encontrado",
"error.file.orientation": "A orientação da imagem deve ser “{orientation}”", "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.name": "Por favor entre um nome válido para o idioma",
"error.language.notFound": "O idioma não foi encontrado", "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.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.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.license.verification": "A licensa não pôde ser verificada",
"error.login.totp.confirm.invalid": "Código inválido", "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.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.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.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.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", "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.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": "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.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.ancestor": "A página não pode ser movida para dentro dela mesma",
"error.page.move.directory": "The page directory cannot be moved", "error.page.move.directory": "A pasta da página não pode ser movida",
"error.page.move.duplicate": "A sub page with the URL appendix \"{slug}\" already exists", "error.page.move.duplicate": "Uma subpágina com o segmento de URL \"{slug}\" existe",
"error.page.move.notFound": "The moved page could not be found", "error.page.move.notFound": "A página movida não foi encontrada",
"error.page.move.permission": "You are not allowed to move \"{slug}\"", "error.page.move.permission": "Não tem permissão para mover \"{slug}\"",
"error.page.move.template": "The \"{template}\" template is not accepted as a subpage of \"{parent}\"", "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.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.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 ", "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.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.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.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.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}\"", "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.email.invalid": "Digite um endereço de email válido",
"error.user.language.invalid": "Digite um idioma válido", "error.user.language.invalid": "Digite um idioma válido",
"error.user.notFound": "Usuário \"{name}\" não encontrado", "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.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.notSame": "As senhas não combinam",
"error.user.password.undefined": "O usuário não possui uma senha", "error.user.password.undefined": "O usuário não possui uma senha",
@@ -228,10 +228,10 @@
"error.validation.accepted": "Por favor, confirme", "error.validation.accepted": "Por favor, confirme",
"error.validation.alpha": "Por favor, use apenas caracteres entre a-z", "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.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.between": "Digite um valor entre \"{min}\" e \"{max}\"",
"error.validation.boolean": "Por favor, confirme ou rejeite", "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.contains": "Digite um valor que contenha \"{needle}\"",
"error.validation.date": "Escolha uma data válida", "error.validation.date": "Escolha uma data válida",
"error.validation.date.after": "Por favor entre uma data depois de {date}", "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.integer": "Digite um número inteiro válido",
"error.validation.ip": "Digite um endereço de IP válido", "error.validation.ip": "Digite um endereço de IP válido",
"error.validation.less": "Digite um valor menor que {max}", "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.match": "O valor não combina com o padrão esperado",
"error.validation.max": "Digite um valor igual ou menor que {max}", "error.validation.max": "Digite um valor igual ou menor que {max}",
"error.validation.maxlength": "Digite um valor curto. (no máximo {max} caracteres)", "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.same": "Por favor, digite \"{other}\"",
"error.validation.size": "O tamanho do valor deve ser \"{size}\"", "error.validation.size": "O tamanho do valor deve ser \"{size}\"",
"error.validation.startswith": "O valor deve começar com \"{start}\"", "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": "Digite um horário válido",
"error.validation.time.after": "Por favor entre um horário depois de {time}", "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.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.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", "error.validation.url": "Digite uma URL válida",
"expand": "Expandir", "expand": "Expandir",
"expand.all": "Expandir todos", "expand.all": "Expandir todos",
"field.invalid": "The field is invalid", "field.invalid": "O campo é inválido",
"field.required": "Este campo é obrigatório ", "field.required": "Este campo é obrigatório ",
"field.blocks.changeType": "Mudar tipo", "field.blocks.changeType": "Mudar tipo",
"field.blocks.code.name": "Código", "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.all": "Deseja realmente deletar todos os blocos?",
"field.blocks.delete.confirm.selected": "Deseja realmente deletar os blocos selecionados?", "field.blocks.delete.confirm.selected": "Deseja realmente deletar os blocos selecionados?",
"field.blocks.empty": "Nenhum bloco", "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.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.name": "Galeria",
"field.blocks.gallery.images.empty": "Nenhuma imagem", "field.blocks.gallery.images.empty": "Nenhuma imagem",
"field.blocks.gallery.images.label": "Imagens", "field.blocks.gallery.images.label": "Imagens",
@@ -299,8 +299,8 @@
"field.blocks.image.crop": "Cortar", "field.blocks.image.crop": "Cortar",
"field.blocks.image.link": "Link", "field.blocks.image.link": "Link",
"field.blocks.image.location": "Localização ", "field.blocks.image.location": "Localização ",
"field.blocks.image.location.internal": "This website", "field.blocks.image.location.internal": "Este website",
"field.blocks.image.location.external": "External source", "field.blocks.image.location.external": "Fonte externa",
"field.blocks.image.name": "Imagem", "field.blocks.image.name": "Imagem",
"field.blocks.image.placeholder": "Selecionar uma imagem", "field.blocks.image.placeholder": "Selecionar uma imagem",
"field.blocks.image.ratio": "Proporção ", "field.blocks.image.ratio": "Proporção ",
@@ -325,43 +325,43 @@
"field.files.empty": "Nenhum arquivo selecionado", "field.files.empty": "Nenhum arquivo selecionado",
"field.layout.change": "Change layout", "field.layout.change": "Alterar layout",
"field.layout.delete": "Deletar layout", "field.layout.delete": "Deletar layout",
"field.layout.delete.confirm": "Deseja realmente deletar este 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.empty": "Nenhuma linha",
"field.layout.select": "Selecionar um layout", "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.pages.empty": "Nenhuma página selecionada",
"field.structure.delete.confirm": "Deseja realmente deletar esta linha?", "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.structure.empty": "Nenhum registro",
"field.users.empty": "Nenhum usuário selecionado", "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.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": "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.delete.confirm": "Deseja realmente deletar <br> <strong>{filename}</strong>?",
"file.focus.placeholder": "Set focal point", "file.focus.placeholder": "Definir ponto de foco",
"file.focus.reset": "Remove focal point", "file.focus.reset": "Remover ponto de foco",
"file.focus.title": "Focus", "file.focus.title": "Foco",
"file.sort": "Mudar posição", "file.sort": "Mudar posição",
"files": "Arquivos", "files": "Arquivos",
"files.empty": "Nenhum arquivo", "files.empty": "Nenhum arquivo",
"filter": "Filter", "filter": "Filtro",
"hide": "Ocultar", "hide": "Ocultar",
"hour": "Hora", "hour": "Hora",
"hue": "Hue", "hue": "Tonalidade",
"import": "Importar", "import": "Importar",
"info": "Info", "info": "Info",
"insert": "Inserir", "insert": "Inserir",
@@ -396,16 +396,16 @@
"language.locale": "String de localização do PHP", "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.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.name": "Nome",
"language.secondary": "Secondary language", "language.secondary": "Idioma secundário",
"language.settings": "Language settings", "language.settings": "Configurações de idioma",
"language.updated": "Idioma atualizado", "language.updated": "Idioma atualizado",
"language.variables": "Language variables", "language.variables": "Variáveis de idioma",
"language.variables.empty": "No translations yet", "language.variables.empty": "Nenhuma tradução ainda",
"language.variable.delete.confirm": "Do you really want to delete the variable for {key}?", "language.variable.delete.confirm": "Tem a certeza que pretende eliminar a variável {key}?",
"language.variable.key": "Key", "language.variable.key": "Chave",
"language.variable.notFound": "The variable could not be found", "language.variable.notFound": "A variável não foi encontrada",
"language.variable.value": "Value", "language.variable.value": "Valor",
"languages": "Idiomas", "languages": "Idiomas",
"languages.default": "Idioma padrão", "languages.default": "Idioma padrão",
@@ -414,31 +414,31 @@
"languages.secondary.empty": "Nenhum idioma secundário", "languages.secondary.empty": "Nenhum idioma secundário",
"license": "Licen\u00e7a do Kirby ", "license": "Licen\u00e7a do Kirby ",
"license.activate": "Activate it now", "license.activate": "Ativar agora",
"license.activate.label": "Please activate your license", "license.activate.label": "Por favor, ative a sua licença",
"license.activate.domain": "Your license will be activated for <strong>{host}</strong>.", "license.activate.domain": "A sua licença será irá ser ativada para <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.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": "Activated", "license.activated": "Ativado",
"license.buy": "Comprar licença", "license.buy": "Comprar licença",
"license.code": "Código", "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.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.info": "Inclui novas versões principais até {date}",
"license.status.active.label": "Valid license", "license.status.active.label": "Licença válida",
"license.status.demo.info": "This is a demo installation", "license.status.demo.info": "Esta é uma instalação de demonstração",
"license.status.demo.label": "Demo", "license.status.demo.label": "Demonstração",
"license.status.inactive.info": "Renew license to update to new major versions", "license.status.inactive.info": "Renove a licença para atualizar para novas versões principais",
"license.status.inactive.label": "No new major versions", "license.status.inactive.label": "Nenhuma versão principal nova",
"license.status.legacy.bubble": "Ready to renew your license?", "license.status.legacy.bubble": "Pronto para renovar a sua licença?",
"license.status.legacy.info": "Your license does not cover this version", "license.status.legacy.info": "A sua licença não abrange esta versão",
"license.status.legacy.label": "Please renew your license", "license.status.legacy.label": "Por favor, renove a sua licença",
"license.status.missing.bubble": "Ready to launch your site?", "license.status.missing.bubble": "Pronto para lançar o seu site?",
"license.status.missing.info": "No valid license", "license.status.missing.info": "Nenhuma licença válida",
"license.status.missing.label": "Please activate your license", "license.status.missing.label": "Por favor, ative a sua licença",
"license.manage": "Manage your licenses", "license.manage": "Gerir as suas licenças",
"license.purchased": "Purchased", "license.purchased": "Compradas",
"license.success": "Obrigado por apoiar o Kirby", "license.success": "Obrigado por apoiar o Kirby",
"license.unregistered.label": "Unregistered", "license.unregistered.label": "Não registadas",
"link": "Link", "link": "Link",
"link.text": "Texto do link", "link.text": "Texto do link",
@@ -447,10 +447,10 @@
"lock.unsaved": "Mudanças não salvas", "lock.unsaved": "Mudanças não salvas",
"lock.unsaved.empty": "Não há mais 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": "Destrancar",
"lock.unlock.submit": "Unlock and overwrite unsaved changes by <strong>{email}</strong>", "lock.unlock.submit": "Desbloqueie e substitua alterações não guardadas de <strong>{email}</strong>",
"lock.isUnlocked": "Was unlocked by another user", "lock.isUnlocked": "Foi desbloqueado por outro utilizador",
"login": "Entrar", "login": "Entrar",
"login.code.label.login": "Código de acesso", "login.code.label.login": "Código de acesso",
@@ -458,7 +458,7 @@
"login.code.placeholder.email": "000 0000", "login.code.placeholder.email": "000 0000",
"login.code.placeholder.totp": "000000", "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.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.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.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.", "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.code.email-password": "Entrar com senha",
"login.toggleText.password-reset.email": "Esqueceu sua senha?", "login.toggleText.password-reset.email": "Esqueceu sua senha?",
"login.toggleText.password-reset.email-password": "← Voltar à entrada", "login.toggleText.password-reset.email-password": "← Voltar à entrada",
"login.totp.enable.option": "Set up onetime codes", "login.totp.enable.option": "Configurar códigos únicos",
"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.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. Scan this QR code", "login.totp.enable.qr.label": "1. Leia este código QR",
"login.totp.enable.qr.help": "Unable to scan? Add the setup key <code>{secret}</code> manually to your authenticator app.", "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. Confirm with generated code", "login.totp.enable.confirm.headline": "2. Confirme com o código gerado",
"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.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": "Current code", "login.totp.enable.confirm.label": "Código atual",
"login.totp.enable.confirm.help": "After this setup, we will ask you for a onetime code every time you log in.", "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": "Onetime codes enabled", "login.totp.enable.success": "Códigos únicos ativados",
"login.totp.disable.option": "Disable onetime codes", "login.totp.disable.option": "Desativar códigos únicos",
"login.totp.disable.label": "Enter your password to disable onetime codes", "login.totp.disable.label": "Insira a sua palavra-passe para desativar códigos únicos",
"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.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": "<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.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": "Onetime codes disabled", "login.totp.disable.success": "Códigos únicos desativados",
"logout": "Sair", "logout": "Sair",
"merge": "Merge", "merge": "Unir",
"menu": "Menu", "menu": "Menu",
"meridiem": "AM/PM", "meridiem": "AM/PM",
"mime": "Tipo de mídia", "mime": "Tipo de mídia",
@@ -507,19 +507,19 @@
"months.september": "Setembro", "months.september": "Setembro",
"more": "Mais", "more": "Mais",
"move": "Move", "move": "Mover",
"name": "Nome", "name": "Nome",
"next": "Próximo", "next": "Próximo",
"night": "Night", "night": "Noite",
"no": "não", "no": "não",
"off": "não", "off": "não",
"on": "sim", "on": "sim",
"open": "Abrir", "open": "Abrir",
"open.newWindow": "Abrir em nova janela", "open.newWindow": "Abrir em nova janela",
"option": "Option", "option": "Opção",
"options": "Opções", "options": "Opções",
"options.none": "Nenhuma opção", "options.none": "Nenhuma opção",
"options.all": "Show all {count} options", "options.all": "Mostrar todas as {count} opções",
"orientation": "Orientação", "orientation": "Orientação",
"orientation.landscape": "Paisagem", "orientation.landscape": "Paisagem",
@@ -534,15 +534,15 @@
"page.changeStatus.position": "Selecione uma posição", "page.changeStatus.position": "Selecione uma posição",
"page.changeStatus.select": "Selecione um novo estado", "page.changeStatus.select": "Selecione um novo estado",
"page.changeTemplate": "Alterar tema", "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.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": "Create as {status}", "page.create": "Criar como {status}",
"page.delete.confirm": "Deseja realmente deletar <strong>{title}</strong>?", "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.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.delete.confirm.title": "Digite o título da página para confirmar",
"page.duplicate.appendix": "Copiar", "page.duplicate.appendix": "Copiar",
"page.duplicate.files": "Copiar arquivos", "page.duplicate.files": "Copiar arquivos",
"page.duplicate.pages": "Copiar páginas", "page.duplicate.pages": "Copiar páginas",
"page.move": "Move page", "page.move": "Mover página",
"page.sort": "Mudar posição", "page.sort": "Mudar posição",
"page.status": "Estado", "page.status": "Estado",
"page.status.draft": "Rascunho", "page.status.draft": "Rascunho",
@@ -563,7 +563,7 @@
"password": "Senha", "password": "Senha",
"paste": "Colar", "paste": "Colar",
"paste.after": "Colar após", "paste.after": "Colar após",
"paste.success": "{count} pasted!", "paste.success": "{count} colados!",
"pixel": "Pixel", "pixel": "Pixel",
"plugin": "Plugin", "plugin": "Plugin",
"plugins": "Plugins", "plugins": "Plugins",
@@ -571,9 +571,9 @@
"preview": "Visualizar", "preview": "Visualizar",
"remove": "Remover", "remove": "Remover",
"rename": "Renomear", "rename": "Renomear",
"renew": "Renew", "renew": "Renovar",
"replace": "Substituir", "replace": "Substituir",
"replace.with": "Replace with", "replace.with": "Substituir por",
"retry": "Tentar novamente", "retry": "Tentar novamente",
"revert": "Descartar", "revert": "Descartar",
"revert.confirm": "Deseja realmente <strong>deletar todas as mudanças não salvas</strong>?", "revert.confirm": "Deseja realmente <strong>deletar todas as mudanças não salvas</strong>?",
@@ -590,13 +590,13 @@
"save": "Salvar", "save": "Salvar",
"search": "Buscar", "search": "Buscar",
"search.min": "Digite {min} caracteres para fazer uma busca", "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", "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", "section.required": "Esta seção é obrigatória",
"security": "Security", "security": "Segurança",
"select": "Selecionar", "select": "Selecionar",
"server": "Servidor", "server": "Servidor",
"settings": "Configurações", "settings": "Configurações",
@@ -605,40 +605,40 @@
"size": "Tamanho", "size": "Tamanho",
"slug": "Anexo de URL", "slug": "Anexo de URL",
"sort": "Ordenar", "sort": "Ordenar",
"sort.drag": "Drag to sort …", "sort.drag": "Arraste para ordenar ...",
"split": "Split", "split": "Dividir",
"stats.empty": "No reports", "stats.empty": "Nenhum relatório",
"status": "Estado", "status": "Estado",
"system.issues.content": "The content folder seems to be exposed", "system.issues.content": "A pasta \"content\" parece não estar protegida",
"system.issues.eol.kirby": "Your installed Kirby version has reached end-of-life and will not receive further security updates", "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": "Your installed version of the { plugin } plugin is has reached end-of-life and will not receive further security updates", "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": "Your installed PHP release { release } has reached end-of-life and will not receive further security updates", "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": "Debugging must be turned off in production", "system.issues.debug": "O modo debug deve ser desativado em produção",
"system.issues.git": "The .git folder seems to be exposed", "system.issues.git": "A pasta \".git\" parece não estar protegida",
"system.issues.https": "We recommend HTTPS for all your sites", "system.issues.https": "Nós recomendamos HTTPS para todos os seus sites",
"system.issues.kirby": "The kirby folder seems to be exposed", "system.issues.kirby": "A pasta \"kirby\" parece não estar protegida",
"system.issues.site": "The site folder seems to be exposed", "system.issues.site": "A pasta \"site\" parece não estar protegida",
"system.issues.vulnerability.kirby": "Your installation might be affected by the following vulnerability ({ severity } severity): { description }", "system.issues.vulnerability.kirby": "A sua instalação poderá ser afetada pela seguinte vulnerabilidade ({ severity } gravidade): { description }",
"system.issues.vulnerability.plugin": "Your installation might be affected by the following vulnerability in the { plugin } plugin ({ severity } severity): { description }", "system.issues.vulnerability.plugin": "A sua instalação poderá ser afetada pela seguinte vulnerabilidade no plugin { plugin } ({ severity } gravidade): { description }",
"system.updateStatus": "Update status", "system.updateStatus": "Atualizar estado",
"system.updateStatus.error": "Could not check for updates", "system.updateStatus.error": "Não foi possível verificar se havia atualizações",
"system.updateStatus.not-vulnerable": "No known vulnerabilities", "system.updateStatus.not-vulnerable": "Nenhuma vulnerabilidade conhecida",
"system.updateStatus.security-update": "Free security update { version } available", "system.updateStatus.security-update": "Atualização de segurança gratuita { version } disponível",
"system.updateStatus.security-upgrade": "Upgrade { version } with security fixes available", "system.updateStatus.security-upgrade": "Atualização { version } com correções de segurança disponível",
"system.updateStatus.unreleased": "Unreleased version", "system.updateStatus.unreleased": "Versão não lançada",
"system.updateStatus.up-to-date": "Up to date", "system.updateStatus.up-to-date": "Atualizado",
"system.updateStatus.update": "Free update { version } available", "system.updateStatus.update": "Atualização gratuita { version } disponível",
"system.updateStatus.upgrade": "Upgrade { version } available", "system.updateStatus.upgrade": "Atualização { version } disponível",
"tel": "Phone", "tel": "Telefone",
"tel.placeholder": "+49123456789", "tel.placeholder": "+351 123456789",
"template": "Tema", "template": "Tema",
"title": "Título", "title": "Título",
"today": "Hoje", "today": "Hoje",
"toolbar.button.clear": "Clear formatting", "toolbar.button.clear": "Limpar formatação",
"toolbar.button.code": "Código", "toolbar.button.code": "Código",
"toolbar.button.bold": "Negrito", "toolbar.button.bold": "Negrito",
"toolbar.button.email": "Email", "toolbar.button.email": "Email",
@@ -656,8 +656,8 @@
"toolbar.button.link": "Link", "toolbar.button.link": "Link",
"toolbar.button.paragraph": "Parágrafo", "toolbar.button.paragraph": "Parágrafo",
"toolbar.button.strike": "Riscado", "toolbar.button.strike": "Riscado",
"toolbar.button.sub": "Subscript", "toolbar.button.sub": "Subscrito",
"toolbar.button.sup": "Superscript", "toolbar.button.sup": "Sobrescrito",
"toolbar.button.ol": "Lista ordenada", "toolbar.button.ol": "Lista ordenada",
"toolbar.button.underline": "Sublinhado", "toolbar.button.underline": "Sublinhado",
"toolbar.button.ul": "Lista não-ordenada", "toolbar.button.ul": "Lista não-ordenada",
@@ -667,7 +667,7 @@
"translation.name": "Português do Brasil", "translation.name": "Português do Brasil",
"translation.locale": "pt_BR", "translation.locale": "pt_BR",
"type": "Type", "type": "Tipo",
"upload": "Enviar", "upload": "Enviar",
"upload.error.cantMove": "O arquivo carregado não pôde ser movido", "upload.error.cantMove": "O arquivo carregado não pôde ser movido",
@@ -704,9 +704,9 @@
"users": "Usuários", "users": "Usuários",
"version": "Vers\u00e3o do Kirby", "version": "Vers\u00e3o do Kirby",
"version.current": "Current version", "version.current": "Versão atual",
"version.latest": "Latest version", "version.latest": "Versão mais recente",
"versionInformation": "Version information", "versionInformation": "Informação da versão",
"view.account": "Sua conta", "view.account": "Sua conta",
"view.installation": "Instala\u00e7\u00e3o", "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.domain": "Lisans için alan adı eksik",
"error.license.email": "Lütfen geçerli bir e-posta adresi girin", "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.license.verification": "Lisans doğrulanamadı",
"error.login.totp.confirm.invalid": "Geçersiz kod", "error.login.totp.confirm.invalid": "Geçersiz kod",
@@ -425,7 +425,7 @@
"license.code.label": "Lütfen lisans kodunu giriniz", "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.info": "{date} tarihine kadar yeni ana sürümleri içerir",
"license.status.active.label": "Geçerli lisans", "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.demo.label": "Demo",
"license.status.inactive.info": "Yeni ana sürümlere güncellemek için lisansı yenileyin", "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", "license.status.inactive.label": "Yeni ana sürüm yok",

View File

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

View File

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

View File

@@ -43,6 +43,22 @@ enum LicenseStatus: string
*/ */
case Missing = 'missing'; 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 * Returns the dialog according to the status
*/ */
@@ -95,7 +111,7 @@ enum LicenseStatus: string
public function renewable(): bool public function renewable(): bool
{ {
return match ($this) { return match ($this) {
static::Demo => false, static::Demo,
static::Active => false, static::Active => false,
default => true default => true
}; };

View File

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

View File

@@ -186,7 +186,7 @@ class Url
$uri->slash = false; $uri->slash = false;
$url = $base ? $uri->base() : $uri->toString(); $url = $base ? $uri->base() : $uri->toString();
$url = str_replace('www.', '', $url); $url = str_replace('www.', '', $url ?? '');
return Str::short($url, $length, $rep); 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 */ /** @var \Closure(string):void */
private static $includeFile; private static $includeFile;
/** @var string|null */ /** @var ?string */
private $vendorDir; private $vendorDir;
// PSR-4 // PSR-4
/** /**
* @var array<string, array<string, int>> * @var array[]
* @psalm-var array<string, array<string, int>>
*/ */
private $prefixLengthsPsr4 = array(); private $prefixLengthsPsr4 = array();
/** /**
* @var array<string, list<string>> * @var array[]
* @psalm-var array<string, array<int, string>>
*/ */
private $prefixDirsPsr4 = array(); private $prefixDirsPsr4 = array();
/** /**
* @var list<string> * @var array[]
* @psalm-var array<string, string>
*/ */
private $fallbackDirsPsr4 = array(); private $fallbackDirsPsr4 = array();
// PSR-0 // PSR-0
/** /**
* List of PSR-0 prefixes * @var array[]
* * @psalm-var array<string, array<string, string[]>>
* Structured as array('F (first letter)' => array('Foo\Bar (full prefix)' => array('path', 'path2')))
*
* @var array<string, array<string, list<string>>>
*/ */
private $prefixesPsr0 = array(); private $prefixesPsr0 = array();
/** /**
* @var list<string> * @var array[]
* @psalm-var array<string, string>
*/ */
private $fallbackDirsPsr0 = array(); private $fallbackDirsPsr0 = array();
@@ -80,7 +81,8 @@ class ClassLoader
private $useIncludePath = false; private $useIncludePath = false;
/** /**
* @var array<string, string> * @var string[]
* @psalm-var array<string, string>
*/ */
private $classMap = array(); private $classMap = array();
@@ -88,20 +90,21 @@ class ClassLoader
private $classMapAuthoritative = false; private $classMapAuthoritative = false;
/** /**
* @var array<string, bool> * @var bool[]
* @psalm-var array<string, bool>
*/ */
private $missingClasses = array(); private $missingClasses = array();
/** @var string|null */ /** @var ?string */
private $apcuPrefix; private $apcuPrefix;
/** /**
* @var array<string, self> * @var self[]
*/ */
private static $registeredLoaders = array(); private static $registeredLoaders = array();
/** /**
* @param string|null $vendorDir * @param ?string $vendorDir
*/ */
public function __construct($vendorDir = null) public function __construct($vendorDir = null)
{ {
@@ -110,7 +113,7 @@ class ClassLoader
} }
/** /**
* @return array<string, list<string>> * @return string[]
*/ */
public function getPrefixes() 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() public function getPrefixesPsr4()
{ {
@@ -130,7 +134,8 @@ class ClassLoader
} }
/** /**
* @return list<string> * @return array[]
* @psalm-return array<string, string>
*/ */
public function getFallbackDirs() public function getFallbackDirs()
{ {
@@ -138,7 +143,8 @@ class ClassLoader
} }
/** /**
* @return list<string> * @return array[]
* @psalm-return array<string, string>
*/ */
public function getFallbackDirsPsr4() 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() 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 * @return void
*/ */
@@ -172,24 +180,23 @@ class ClassLoader
* appending or prepending to the ones previously set for this prefix. * appending or prepending to the ones previously set for this prefix.
* *
* @param string $prefix The 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 * @param bool $prepend Whether to prepend the directories
* *
* @return void * @return void
*/ */
public function add($prefix, $paths, $prepend = false) public function add($prefix, $paths, $prepend = false)
{ {
$paths = (array) $paths;
if (!$prefix) { if (!$prefix) {
if ($prepend) { if ($prepend) {
$this->fallbackDirsPsr0 = array_merge( $this->fallbackDirsPsr0 = array_merge(
$paths, (array) $paths,
$this->fallbackDirsPsr0 $this->fallbackDirsPsr0
); );
} else { } else {
$this->fallbackDirsPsr0 = array_merge( $this->fallbackDirsPsr0 = array_merge(
$this->fallbackDirsPsr0, $this->fallbackDirsPsr0,
$paths (array) $paths
); );
} }
@@ -198,19 +205,19 @@ class ClassLoader
$first = $prefix[0]; $first = $prefix[0];
if (!isset($this->prefixesPsr0[$first][$prefix])) { if (!isset($this->prefixesPsr0[$first][$prefix])) {
$this->prefixesPsr0[$first][$prefix] = $paths; $this->prefixesPsr0[$first][$prefix] = (array) $paths;
return; return;
} }
if ($prepend) { if ($prepend) {
$this->prefixesPsr0[$first][$prefix] = array_merge( $this->prefixesPsr0[$first][$prefix] = array_merge(
$paths, (array) $paths,
$this->prefixesPsr0[$first][$prefix] $this->prefixesPsr0[$first][$prefix]
); );
} else { } else {
$this->prefixesPsr0[$first][$prefix] = array_merge( $this->prefixesPsr0[$first][$prefix] = array_merge(
$this->prefixesPsr0[$first][$prefix], $this->prefixesPsr0[$first][$prefix],
$paths (array) $paths
); );
} }
} }
@@ -220,7 +227,7 @@ class ClassLoader
* appending or prepending to the ones previously set for this namespace. * appending or prepending to the ones previously set for this namespace.
* *
* @param string $prefix The prefix/namespace, with trailing '\\' * @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 * @param bool $prepend Whether to prepend the directories
* *
* @throws \InvalidArgumentException * @throws \InvalidArgumentException
@@ -229,18 +236,17 @@ class ClassLoader
*/ */
public function addPsr4($prefix, $paths, $prepend = false) public function addPsr4($prefix, $paths, $prepend = false)
{ {
$paths = (array) $paths;
if (!$prefix) { if (!$prefix) {
// Register directories for the root namespace. // Register directories for the root namespace.
if ($prepend) { if ($prepend) {
$this->fallbackDirsPsr4 = array_merge( $this->fallbackDirsPsr4 = array_merge(
$paths, (array) $paths,
$this->fallbackDirsPsr4 $this->fallbackDirsPsr4
); );
} else { } else {
$this->fallbackDirsPsr4 = array_merge( $this->fallbackDirsPsr4 = array_merge(
$this->fallbackDirsPsr4, $this->fallbackDirsPsr4,
$paths (array) $paths
); );
} }
} elseif (!isset($this->prefixDirsPsr4[$prefix])) { } 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."); throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
} }
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
$this->prefixDirsPsr4[$prefix] = $paths; $this->prefixDirsPsr4[$prefix] = (array) $paths;
} elseif ($prepend) { } elseif ($prepend) {
// Prepend directories for an already registered namespace. // Prepend directories for an already registered namespace.
$this->prefixDirsPsr4[$prefix] = array_merge( $this->prefixDirsPsr4[$prefix] = array_merge(
$paths, (array) $paths,
$this->prefixDirsPsr4[$prefix] $this->prefixDirsPsr4[$prefix]
); );
} else { } else {
// Append directories for an already registered namespace. // Append directories for an already registered namespace.
$this->prefixDirsPsr4[$prefix] = array_merge( $this->prefixDirsPsr4[$prefix] = array_merge(
$this->prefixDirsPsr4[$prefix], $this->prefixDirsPsr4[$prefix],
$paths (array) $paths
); );
} }
} }
@@ -271,7 +277,7 @@ class ClassLoader
* replacing any others previously set for this prefix. * replacing any others previously set for this prefix.
* *
* @param string $prefix The 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 * @return void
*/ */
@@ -289,7 +295,7 @@ class ClassLoader
* replacing any others previously set for this namespace. * replacing any others previously set for this namespace.
* *
* @param string $prefix The prefix/namespace, with trailing '\\' * @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 * @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() public static function getRegisteredLoaders()
{ {

View File

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

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