diff options
-rw-r--r-- | Makefile | 16 | ||||
-rw-r--r-- | flake.nix | 60 | ||||
-rw-r--r-- | go.mod | 2 | ||||
-rw-r--r-- | modules/structs/repo.go | 3 | ||||
-rw-r--r-- | options/locale/locale_fr-FR.ini | 1 | ||||
-rw-r--r-- | options/locale/locale_ga-IE.ini | 1 | ||||
-rw-r--r-- | options/locale/locale_pt-PT.ini | 171 | ||||
-rw-r--r-- | options/locale/locale_zh-CN.ini | 101 | ||||
-rw-r--r-- | package-lock.json | 8 | ||||
-rw-r--r-- | package.json | 2 | ||||
-rw-r--r-- | routers/api/v1/repo/repo.go | 12 | ||||
-rw-r--r-- | stylelint.config.js | 3 | ||||
-rw-r--r-- | templates/repo/issue/view_content/conversation.tmpl | 2 | ||||
-rw-r--r-- | templates/swagger/v1_json.tmpl | 9 | ||||
-rw-r--r-- | tests/integration/api_repo_edit_test.go | 54 | ||||
-rw-r--r-- | web_src/css/features/colorpicker.css | 2 | ||||
-rw-r--r-- | web_src/css/repo.css | 2 |
17 files changed, 415 insertions, 34 deletions
@@ -48,6 +48,17 @@ ifeq ($(HAS_GO), yes) CGO_CFLAGS ?= $(shell $(GO) env CGO_CFLAGS) $(CGO_EXTRA_CFLAGS) endif +CGO_ENABLED ?= 0 +ifneq (,$(findstring sqlite,$(TAGS))$(findstring pam,$(TAGS))) + CGO_ENABLED = 1 +endif + +STATIC ?= +EXTLDFLAGS ?= +ifneq ($(STATIC),) + EXTLDFLAGS = -extldflags "-static" +endif + ifeq ($(GOOS),windows) IS_WINDOWS := yes else ifeq ($(patsubst Windows%,Windows,$(OS)),Windows) @@ -746,7 +757,10 @@ security-check: go run $(GOVULNCHECK_PACKAGE) -show color ./... $(EXECUTABLE): $(GO_SOURCES) $(TAGS_PREREQ) - CGO_CFLAGS="$(CGO_CFLAGS)" $(GO) build $(GOFLAGS) $(EXTRA_GOFLAGS) -tags '$(TAGS)' -ldflags '-s -w $(LDFLAGS)' -o $@ +ifneq ($(and $(STATIC),$(findstring pam,$(TAGS))),) + $(error pam support set via TAGS doesn't support static builds) +endif + CGO_ENABLED="$(CGO_ENABLED)" CGO_CFLAGS="$(CGO_CFLAGS)" $(GO) build $(GOFLAGS) $(EXTRA_GOFLAGS) -tags '$(TAGS)' -ldflags '-s -w $(EXTLDFLAGS) $(LDFLAGS)' -o $@ .PHONY: release release: frontend generate release-windows release-linux release-darwin release-freebsd release-copy release-compress vendor release-sources release-check @@ -11,33 +11,45 @@ pkgs = nixpkgs.legacyPackages.${system}; in { - devShells.default = pkgs.mkShell { - buildInputs = with pkgs; [ - # generic - git - git-lfs - gnumake - gnused - gnutar - gzip + devShells.default = + with pkgs; + let + # only bump toolchain versions here + go = go_1_24; + nodejs = nodejs_24; + python3 = python312; + in + pkgs.mkShell { + buildInputs = [ + # generic + git + git-lfs + gnumake + gnused + gnutar + gzip - # frontend - nodejs_22 + # frontend + nodejs - # linting - python312 - uv + # linting + python3 + uv - # backend - go_1_24 - gofumpt - sqlite - ]; - shellHook = '' - export GO="${pkgs.go_1_24}/bin/go" - export GOROOT="${pkgs.go_1_24}/share/go" - ''; - }; + # backend + go + glibc.static + gofumpt + sqlite + ]; + CFLAGS = "-I${glibc.static.dev}/include"; + LDFLAGS = "-L ${glibc.static}/lib"; + GO = "${go}/bin/go"; + GOROOT = "${go}/share/go"; + + TAGS = "sqlite sqlite_unlock_notify"; + STATIC = "true"; + }; } ); } @@ -1,6 +1,6 @@ module code.gitea.io/gitea -go 1.24.5 +go 1.24.6 // rfc5280 said: "The serial number is an integer assigned by the CA to each certificate." // But some CAs use negative serial number, just relax the check. related: diff --git a/modules/structs/repo.go b/modules/structs/repo.go index f2e11b1542..404718def0 100644 --- a/modules/structs/repo.go +++ b/modules/structs/repo.go @@ -84,6 +84,7 @@ type Repository struct { Updated time.Time `json:"updated_at"` ArchivedAt time.Time `json:"archived_at"` Permissions *Permission `json:"permissions,omitempty"` + HasCode bool `json:"has_code"` HasIssues bool `json:"has_issues"` InternalTracker *InternalTracker `json:"internal_tracker,omitempty"` ExternalTracker *ExternalTracker `json:"external_tracker,omitempty"` @@ -170,6 +171,8 @@ type EditRepoOption struct { Private *bool `json:"private,omitempty"` // either `true` to make this repository a template or `false` to make it a normal repository Template *bool `json:"template,omitempty"` + // either `true` to enable code for this repository or `false` to disable it. + HasCode *bool `json:"has_code,omitempty"` // either `true` to enable issues for this repository or `false` to disable them. HasIssues *bool `json:"has_issues,omitempty"` // set this structure to configure internal issue tracker diff --git a/options/locale/locale_fr-FR.ini b/options/locale/locale_fr-FR.ini index 6f0008af67..c9e074b659 100644 --- a/options/locale/locale_fr-FR.ini +++ b/options/locale/locale_fr-FR.ini @@ -1322,6 +1322,7 @@ commit_graph.color=Couleur commit.contained_in=Cette révision appartient à : commit.contained_in_default_branch=Cette révision appartient à la branche par défaut commit.load_referencing_branches_and_tags=Charger les branches et étiquettes référençant cette révision +commit.merged_in_pr=Cette révision a été fusionnée dans la demande d’ajout %s. blame=Annotations download_file=Télécharger le fichier normal_view=Vue normale diff --git a/options/locale/locale_ga-IE.ini b/options/locale/locale_ga-IE.ini index 08c8eafb38..cb0c2373ed 100644 --- a/options/locale/locale_ga-IE.ini +++ b/options/locale/locale_ga-IE.ini @@ -1322,6 +1322,7 @@ commit_graph.color=Dath commit.contained_in=Tá an tiomantas seo le fáil i: commit.contained_in_default_branch=Tá an tiomantas seo mar chuid den bhrainse réamhshocraithe commit.load_referencing_branches_and_tags=Luchtaigh brainsí agus clibeanna a thagraíonn an tiomantas +commit.merged_in_pr=Cuireadh an tiomantas seo le chéile san iarratas tarraingthe %s. blame=An milleán download_file=Íoslódáil comhad normal_view=Amharc Gnáth diff --git a/options/locale/locale_pt-PT.ini b/options/locale/locale_pt-PT.ini index 2b96ed5102..099d4a7816 100644 --- a/options/locale/locale_pt-PT.ini +++ b/options/locale/locale_pt-PT.ini @@ -44,6 +44,7 @@ webauthn_use_twofa=Usar um código de dois passos do seu telefone webauthn_error=Não foi possível ler a sua chave de segurança. webauthn_unsupported_browser=O seu navegador não oferece suporte ao WebAuthn. webauthn_error_unknown=Ocorreu um erro desconhecido. Tente novamente, por favor. +webauthn_error_insecure=WebAuthn apenas suporta conexões seguras. Para testar sobre HTTP, pode usar a origem "localhost" ou "127.0.0.1". webauthn_error_unable_to_process=O servidor não conseguiu processar o seu pedido. webauthn_error_duplicated=A chave de segurança não é permitida neste pedido. Certifique-se de que a chave não está já registada. webauthn_error_empty=Tem de definir um nome para esta chave. @@ -167,6 +168,7 @@ no_results_found=Não foram encontrados quaisquer resultados. internal_error_skipped=Ocorreu um erro interno mas foi ignorado: %s [search] +search=Pesquisar… type_tooltip=Tipo de pesquisa fuzzy=Aproximada fuzzy_tooltip=Incluir também os resultados que estejam próximos do termo de pesquisa @@ -176,10 +178,23 @@ regexp=Regexp regexp_tooltip=Incluir apenas os resultados que correspondam ao termo de pesquisa com expressões regulares exact=Fiel exact_tooltip=Incluir somente os resultados que correspondam rigorosamente ao termo de pesquisa +repo_kind=Pesquisar repositórios… +user_kind=Pesquisar utilizadores… +org_kind=Pesquisar organizações… +team_kind=Pesquisar equipas… +code_kind=Pesquisar código-fonte… code_search_unavailable=A pesquisa de código não está disponível, neste momento. Entre em contacto com o administrador. code_search_by_git_grep=Os resultados da pesquisa no código-fonte neste momento são fornecidos pelo "git grep". Esses resultados podem ser melhores se o administrador habilitar o indexador do repositório. +package_kind=Pesquisar pacotes… +project_kind=Pesquisar planeamentos… +branch_kind=Pesquisar ramos… +tag_kind=Pesquisar etiquetas… tag_tooltip=Pesquisar etiquetas correspondentes. Use '%' para corresponder a qualquer sequência de números. +commit_kind=Pesquisar cometimentos… +runner_kind=Pesquisar executores… no_results=Não foram encontrados resultados correspondentes. +issue_kind=Pesquisar questões… +pull_kind=Pesquisar puxadas… keyword_search_unavailable=Pesquisar por palavra-chave não está disponível, neste momento. Entre em contacto com o administrador. [aria] @@ -215,6 +230,8 @@ buttons.enable_monospace_font=Habilitar tipo de letra mono-espaçado buttons.disable_monospace_font=Desabilitar tipo de letra mono-espaçado [filter] +string.asc=A–Z +string.desc=Z–A [error] occurred=Ocorreu um erro @@ -235,6 +252,7 @@ license_desc=Vá buscar <a target="_blank" rel="noopener noreferrer" href="%[1]s [install] install=Instalação +installing_desc=Instalando agora, por favor aguarde… title=Configuração inicial docker_helper=Se correr o Gitea dentro do Docker, leia a <a target="_blank" rel="noopener noreferrer" href="%s">documentação</a> antes de alterar quaisquer configurações. require_db_desc=Gitea requer MySQL, PostgreSQL, MSSQL, SQLite3 ou TiDB (protocolo MySQL). @@ -251,10 +269,16 @@ path=Localização sqlite_helper=Localização do ficheiro da base de dados em SQLite3.<br>Insira um caminho absoluto se corre o Gitea como um serviço. reinstall_error=Está a tentar instalar numa base de dados do Gitea já existente reinstall_confirm_message=Reinstalar com uma base de dados do Gitea já existente pode causar múltiplos problemas. Na maioria dos casos deve usar o seu "app.ini" existente para correr o Gitea. Se souber o que está a fazer, confirme o seguinte: +reinstall_confirm_check_1=Os dados encriptados pela chave secreta (SECRET_KEY) no ficheiro app.ini poderão ser perdidos: os utilizadores poderão não ser capazes de iniciar a sessão com autenticação em dois passos (2FA) ou com chaves de utilização única (OTP) e as réplicas poderão deixar de funcionar adequadamente. Ao marcar esta opção estará a confirmar que o ficheiro app.ini vigente contém a SECRET_KEY certa. +reinstall_confirm_check_2=Os repositórios e as configurações poderão ter de voltar a ser sincronizados. Ao marcar esta opção estará a confirmar que vai voltar a sincronizar manualmente os automatismos para os repositórios e o ficheiro authorized_keys. Estará também a confirmar que vai assegurar que as configurações do repositório e das réplicas estão certas. reinstall_confirm_check_3=Você confirma que tem a certeza absoluta de que este Gitea está a correr com a localização certa do ficheiro app.ini e que tem a certeza de que tem de voltar a instalar. Você confirma que tomou conhecimento dos riscos acima descritos. err_empty_db_path=A localização da base de dados SQLite3 não pode estar vazia. no_admin_and_disable_registration=Não pode desabilitar a auto-inscrição de utilizadores sem criar uma conta de administrador. err_empty_admin_password=A senha do administrador não pode estar em branco. +err_empty_admin_email=O endereço de email do administrador não pode estar em branco. +err_admin_name_is_reserved=O nome de utilizador do administrador é inválido porque está reservado +err_admin_name_pattern_not_allowed=O nome de utilizador do administrador é inválido porque corresponde a um padrão reservado. +err_admin_name_is_invalid=O nome de utilizador do administrador é inválido general_title=Configurações gerais app_name=Título do sítio @@ -270,6 +294,7 @@ domain_helper=Domínio ou endereço do servidor. ssh_port=Porto do servidor SSH ssh_port_helper=O número do porto que o seu servidor SSH usa. Deixe em branco para desabilitar. http_port=Porto de escuta HTTP do Gitea +http_port_helper=O número do porto onde o servidor web do Gitea estará à escuta. app_url=URL base do Gitea app_url_helper=Endereço base para os URLs e notificações por email das clonagens por HTTP(S). log_root_path=Localização dos registos @@ -405,6 +430,8 @@ allow_password_change=Exigir que o utilizador mude a senha (recomendado) reset_password_mail_sent_prompt=Foi enviado um email de confirmação para <b>%s</b>. Verifique a sua caixa de entrada dentro de %s para completar o processo de recuperação. active_your_account=Ponha a sua conta em funcionamento account_activated=A conta foi posta em funcionamento +prohibit_login=Início de sessão proibido +prohibit_login_desc=A sua conta está proibida de iniciar sessão. Contacte o administrador. resent_limit_prompt=Já fez um pedido recentemente para enviar um email para pôr a conta em funcionamento. Espere 3 minutos e tente novamente. has_unconfirmed_mail=Olá %s, tem um endereço de email não confirmado (<b>%s</b>). Se não recebeu um email de confirmação ou precisa de o voltar a enviar, clique no botão abaixo. change_unconfirmed_mail_address=Se o seu endereço de email estiver errado, pode mudá-lo aqui e enviar um novo email de confirmação. @@ -425,6 +452,7 @@ use_scratch_code=Usar um código de recuperação twofa_scratch_used=Você usou o seu código de recuperação. Foi reencaminhado para a página de configurações da autenticação em dois passos para poder remover o registo do seu dispositivo ou gerar um novo código de recuperação. twofa_passcode_incorrect=A senha está errada. Se perdeu o seu dispositivo, use o código de recuperação para iniciar a sessão. twofa_scratch_token_incorrect=O código de recuperação está errado. +twofa_required=Tem de configurar a autenticação em dois passos para obter acesso aos repositórios ou então tentar iniciar a sessão novamente. login_userpass=Iniciar sessão login_openid=OpenID oauth_signup_tab=Fazer inscrição @@ -443,13 +471,17 @@ openid_connect_desc=O URI do OpenID escolhido é desconhecido. Associe-o a uma n openid_register_title=Criar uma conta nova openid_register_desc=O URI do OpenID escolhido é desconhecido. Associe-o a uma nova conta aqui. openid_signin_desc=Insira o seu URI OpenID. Por exemplo: alice.openid.exemplo.org or https://openid.exemplo.org/alice. +disable_forgot_password_mail=A recuperação de conta está desabilitada porque não foi definido um endereço de email. Entre em contacto com o administrador do sítio. +disable_forgot_password_mail_admin=A recuperação de conta só está disponível quando está configurado um endereço de email. email_domain_blacklisted=Não pode fazer um registo com o seu endereço de email. authorize_application=Autorizar aplicação authorize_redirect_notice=Irá ser reencaminhado para %s se autorizar esta aplicação. authorize_application_created_by=Esta aplicação foi criada por %s. +authorize_application_description=Se conceder o acesso, a aplicação terá privilégios para aceder e alterar toda a informação da sua conta, incluindo organizações e repositórios privados. authorize_application_with_scopes=Com âmbitos: %s authorize_title=Autorizar o acesso de "%s" à sua conta? authorization_failed=A autorização falhou +authorization_failed_desc=A autorização falhou porque encontrámos um pedido inválido. Entre em contacto com o responsável pela aplicação que tentou autorizar. sspi_auth_failed=Falhou a autenticação SSPI password_pwned=A senha que escolheu está numa <a target="_blank" rel="noopener noreferrer" href="%s">lista de senhas roubadas</a> anteriormente expostas em fugas de dados públicas. Tente novamente com uma senha diferente e considere também mudar esta senha nos outros sítios. password_pwned_err=Não foi possível completar o pedido ao HaveIBeenPwned @@ -513,6 +545,7 @@ release.download.targz=Código fonte (TAR.GZ) repo.transfer.subject_to=%s gostaria de transferir "%s" para %s repo.transfer.subject_to_you=%s gostaria de transferir "%s" para si repo.transfer.to_you=você +repo.transfer.body=Para o aceitar ou rejeitar, visite %s ou ignore-o, simplesmente. repo.collaborator.added.subject=%s adicionou você a %s repo.collaborator.added.text=Foi adicionado(a) como colaborador(a) do repositório: @@ -564,6 +597,7 @@ url_error=`"%s" não é um URL válido.` include_error=` tem que conter o texto "%s".` glob_pattern_error=` o padrão glob é inválido: %s.` regex_pattern_error=` o padrão regex é inválido: %s.` +username_error=` só pode conter caracteres alfanuméricos ('0-9','a-z','A-Z'), hífen ('-'), sublinhado ('_') e ponto ('.') Não pode começar nem terminar com caracteres não alfanuméricos e caracteres não alfanuméricos consecutivos também são proibidos.` invalid_group_team_map_error=` o mapeamento é inválido: %s` unknown_error=Erro desconhecido: captcha_incorrect=O código CAPTCHA está errado. @@ -578,14 +612,17 @@ username_has_not_been_changed=O nome de utilizador não foi modificado repo_name_been_taken=O nome do repositório já foi usado. repository_force_private=Forçar Privado está habilitado: repositórios privados não podem ser tornados públicos. repository_files_already_exist=Já existem ficheiros neste repositório. Contacte o administrador do sistema. +repository_files_already_exist.adopt=Já existem ficheiros neste repositório e só podem ser adoptados. repository_files_already_exist.delete=Já existem ficheiros neste repositório. Tem que os eliminar. repository_files_already_exist.adopt_or_delete=Já existem ficheiros neste repositório. Adopte-os ou elimine-os. visit_rate_limit=Limitação da taxa de visita remota. +2fa_auth_required=A visita remota requer autenticação em dois passos. org_name_been_taken=O nome da organização já foi tomado. team_name_been_taken=O nome da equipa já foi tomado. team_no_units_error=Permitir acesso a pelo menos uma secção do repositório. email_been_used=O endereço de email já está em uso. email_invalid=O endereço de email é inválido. +email_domain_is_not_allowed=O domínio do endereço de email do utilizador <b>%s</b> entra en conflito com o EMAIL_DOMAIN_ALLOWLIST ou com o EMAIL_DOMAIN_BLOCKLIST. Verifique se a operação estava prevista. openid_been_used=O endereço OpenID "%s" já está em uso. username_password_incorrect=O nome de utilizador ou a senha estão errados. password_complexity=A senha não passa nos requisitos de complexidade: @@ -610,8 +647,14 @@ invalid_ssh_key=Não é possível validar a sua chave SSH: %s invalid_gpg_key=Não é possível validar a sua chave GPG: %s invalid_ssh_principal=Protagonista inválido: %s must_use_public_key=A chave que você forneceu é privada. Não carregue a sua chave em lugar nenhum, em vez disso use a sua chave pública. +unable_verify_ssh_key=Não é possível validar a chave SSH. Verifique se tem erros. auth_failed=Falhou a autenticação: %v +still_own_repo=A sua conta possui um ou mais repositórios. Elimine-os ou transfira-os primeiro. +still_has_org=A sua conta é membro de uma ou mais organizações. Saia delas primeiro. +still_own_packages=A sua conta possui um ou mais pacotes. Elimine-os primeiro. +org_still_own_repo=Esta organização ainda possui um ou mais repositórios. Elimine-os ou transfira-os primeiro. +org_still_own_packages=Esta organização ainda possui um ou mais pacotes. Elimine-os primeiro. target_branch_not_exist=O ramo de destino não existe. target_ref_not_exist=A referência de destino não existe %s @@ -642,6 +685,7 @@ settings=Configurações do utilizador form.name_reserved=O nome de utilizador "%s" está reservado. form.name_pattern_not_allowed=O padrão "%s" não é permitido no nome de utilizador. +form.name_chars_not_allowed=O nome de utilizador "%s" contém caracteres inválidos. block.block=Bloquear block.block.user=Bloquear utilizador @@ -658,6 +702,7 @@ block.info_3=enviar-lhe notificações ao @mencionar o seu nome de utilizador block.info_4=convidá-lo/a para ser colaborador/a nos repositórios dele/dela block.info_5=juntar aos favoritos, derivar ou vigiar repositórios block.info_6=abrir e comentar questões ou pedidos de integração +block.info_7=reagir aos seus comentários em questões ou pedidos de integração block.user_to_block=Utilizador a bloquear block.note=Nota block.note.title=Nota opcional: @@ -708,6 +753,7 @@ cancel=Cancelar language=Idioma ui=Tema hidden_comment_types=Tipos de comentários ocultos +hidden_comment_types_description=Os tipos de comentário marcados aqui não serão mostrados nas páginas das questões. Marcar "Rótulo", por exemplo, remove todos os comentários "{utilizador} adicionou/removeu {rótulo}". hidden_comment_types.ref_tooltip=Comentários onde esta questão foi referenciada a partir de outra questão/cometimento/… hidden_comment_types.issue_ref_tooltip=Comentários onde o utilizador altera o ramo/etiqueta associado à questão comment_type_group_reference=Referência @@ -755,12 +801,15 @@ manage_themes=Escolher o tema padrão manage_openid=Gerir endereços OpenID email_desc=O seu endereço de email principal irá ser usado para notificações, recuperação de senha e, desde que não esteja oculto, operações Git baseados na web. theme_desc=Este será o seu tema padrão em todo o sítio. +theme_colorblindness_help=Suporte a temas para daltónicos +theme_colorblindness_prompt=O Gitea apenas tem alguns temas com suporte básico para daltónicos que têm apenas algumas cores definidas. O trabalho ainda está em andamento. Poderiam ser feitos mais melhoramentos se fossem definidas mais cores nos ficheiros CSS do tema. primary=Principal activated=Em uso requires_activation=Tem que ser habilitado primary_email=Tornar no principal activate_email=Enviar pedido de verificação activations_pending=Habilitações pendentes +can_not_add_email_activations_pending=Existe uma validação pendente. Tente de novo dentro de alguns minutos, se quiser adicionar um novo endereço de email. delete_email=Remover email_deletion=Remover endereço de email email_deletion_desc=Este endereço de email e informações relacionadas serão removidos da sua conta. Os cometimentos feitos no Git com este endereço de email permanecerão inalterados. Quer continuar? @@ -806,6 +855,7 @@ gpg_key_matched_identities_long=As identidades incorporadas nesta chave correspo gpg_key_verified=Chave validada gpg_key_verified_long=A chave foi validada com um código e pode ser usada para validar cometimentos que correspondam a qualquer dos endereços de email em uso por parte deste utilizador, para além das identidades correspondentes a esta chave. gpg_key_verify=Validar +gpg_invalid_token_signature=A chave GPG, assinatura ou código fornecidos não correspondem, ou então o código expirou. gpg_token_required=Tem que fornecer uma assinatura para o código abaixo gpg_token=Código gpg_token_help=Pode gerar uma assinatura usando o seguinte comando: @@ -815,6 +865,7 @@ verify_gpg_key_success=A chave GPG "%s" foi validada. ssh_key_verified=Chave validada ssh_key_verified_long=A chave foi validada com um código e pode ser usada para validar cometimentos que correspondam a qualquer dos endereços de email em uso por parte deste utilizador. ssh_key_verify=Validar +ssh_invalid_token_signature=A chave SSH, assinatura ou código fornecidos não correspondem, ou então o código expirou. ssh_token_required=Tem que fornecer uma assinatura para o código abaixo ssh_token=Código ssh_token_help=Pode gerar uma assinatura usando o seguinte comando: @@ -835,6 +886,7 @@ gpg_key_deletion=Remover chave GPG ssh_principal_deletion=Remover Protagonista de Certificado SSH ssh_key_deletion_desc=Remover uma chave SSH revoga o acesso dessa chave à sua conta. Quer continuar? gpg_key_deletion_desc=Remover uma chave GPG retira as validações feitas sobre os cometimentos assinados com ela. Quer continuar? +ssh_principal_deletion_desc=Remover um Protagonista de Certificado SSH revoga o acesso dele à sua conta. Quer continuar? ssh_key_deletion_success=A chave SSH foi removida. gpg_key_deletion_success=A chave GPG foi removida. ssh_principal_deletion_success=O protagonista foi removido. @@ -896,6 +948,7 @@ create_oauth2_application_button=Criar aplicação create_oauth2_application_success=Criou com sucesso uma nova aplicação OAuth2. update_oauth2_application_success=Modificou com sucesso a aplicação OAuth2. oauth2_application_name=Nome da aplicação +oauth2_confidential_client=Cliente confidencial. Escolha esta opção para aplicações que mantêm o segredo confidencial, tais como aplicações web. Não escolha esta opção para aplicações nativas, incluindo aplicações para computador e aplicações móveis. oauth2_skip_secondary_authorization=Saltar a autorização para clientes públicos depois de lhes ceder acesso uma vez. <strong>Pode representar um risco de segurança.</strong> oauth2_redirect_uris=URIs de reencaminhamento. Use uma linha por URI. save_application=Guardar @@ -910,8 +963,10 @@ oauth2_application_remove_description=A remoção de uma aplicação OAuth2 impe oauth2_application_locked=O Gitea pré-regista algumas aplicações OAuth2 no arranque, se forem habilitadas na configuração. Para evitar comportamentos inesperados, estas não podem ser editadas nem removidas. Consulte a documentação sobre o OAuth2 para obter mais informações. authorized_oauth2_applications=Aplicações OAuth2 autorizadas +authorized_oauth2_applications_description=Concedeu acesso à sua conta pessoal do Gitea a estas aplicações de terceiros. Revogue o acesso às aplicações que já não precisa. revoke_key=Revogar revoke_oauth2_grant=Revogar acesso +revoke_oauth2_grant_description=Revogar o acesso desta aplicação de terceiros impedi-la-á de aceder aos seus dados. Tem a certeza? revoke_oauth2_grant_success=Acesso revogado com sucesso. twofa_desc=Para proteger a sua conta contra o roubo de senhas, pode usar um telemóvel ou outro dispositivo para recerber um código de utilização única baseado no tempo ("TOTP"). @@ -921,6 +976,7 @@ twofa_not_enrolled=A autenticação em dois passos não está neste momento habi twofa_disable=Desabilitar autenticação em dois passos twofa_scratch_token_regenerate=Voltar a gerar o código de recuperação de utilização única twofa_scratch_token_regenerated=O seu código de recuperação de utilização única agora é %s. Guarde-o num lugar seguro, uma vez que nunca mais vai ser mostrado. +twofa_enroll=Habilitar autenticação em dois passos twofa_disable_note=Pode desabilitar a autenticação em dois passos, se for necessário. twofa_disable_desc=Desabilitar a autenticação em dois passos tornará a sua conta menos segura. Quer continuar? regenerate_scratch_token_desc=Se perdeu o seu código de recuperação ou já o usou para iniciar uma sessão, pode restaurá-lo aqui. @@ -936,6 +992,7 @@ webauthn_desc=Chaves de segurança são dispositivos de hardware contendo chaves webauthn_register_key=Adicionar chave de segurança webauthn_nickname=Apelido webauthn_delete_key=Remover chave de segurança +webauthn_delete_key_desc=Se remover uma chave de segurança, deixará de poder usá-la para iniciar a sessão. Quer continuar? webauthn_key_loss_warning=Se perder as suas chaves de segurança, perderá acesso à sua conta. webauthn_alternative_tip=Poderá querer configurar um método de autenticação adicional. @@ -1052,6 +1109,7 @@ mirror_address_protocol_invalid=O URL fornecido é inválido. Só se pode replic mirror_lfs=Armazenamento de Ficheiros Grandes (LFS) mirror_lfs_desc=Habilitar a réplica de dados LFS. mirror_lfs_endpoint=Destino LFS +mirror_lfs_endpoint_desc=A sincronização irá tentar usar o URL de clonagem para <a target="_blank" rel="noopener noreferrer" href="%s">determinar o servidor LFS</a>. Também pode especificar um destino personalizado se os dados do repositório LFS forem armazenados noutro lugar. mirror_last_synced=Última sincronização mirror_password_placeholder=(inalterada) mirror_password_blank_placeholder=(não definida) @@ -1064,6 +1122,7 @@ stars=Favoritos reactions_more=e mais %d unit_disabled=O administrador desabilitou esta secção do repositório. language_other=Outros +adopt_search=Insira o nome de utilizador para procurar repositórios adoptados… (deixe em branco para encontrar todos) adopt_preexisting_label=Adoptar ficheiros adopt_preexisting=Adoptar ficheiros pré-existentes adopt_preexisting_content=Criar repositório a partir de %s @@ -1105,6 +1164,8 @@ template.issue_labels=Rótulos das questões template.one_item=Tem que escolher pelo menos um item do modelo template.invalid=Tem que escolher um repositório modelo +archive.title=Este repositório está arquivado. Pode ver os seus ficheiros e cloná-lo. Não pode lançar questões nem fazer pedidos de integração nem fazer envios. +archive.title_date=Este repositório foi arquivado em %s. Pode ver os ficheiros e cloná-lo. Não pode abrir questões nem fazer pedidos de integração nem enviar cometimentos. archive.issue.nocomment=Este repositório está arquivado. Não pode comentar nas questões. archive.pull.nocomment=Este repositório está arquivado. Não pode comentar nos pedidos de integração. @@ -1121,6 +1182,7 @@ migrate_options_lfs=Migrar ficheiros LFS migrate_options_lfs_endpoint.label=Destino LFS migrate_options_lfs_endpoint.description=A migração irá tentar usar o seu controlo remoto do Git para <a target="_blank" rel="noopener noreferrer" href="%s">determinar o servidor LFS</a>. Também pode especificar um destino personalizado se os dados do repositório LFS forem armazenados noutro lugar. migrate_options_lfs_endpoint.description.local=Uma localização de servidor local também é suportada. +migrate_options_lfs_endpoint.placeholder=Se for deixado em branco, o destino será determinado a partir do URL do clone. migrate_items=Itens da migração migrate_items_wiki=Wiki migrate_items_milestones=Etapas @@ -1132,8 +1194,10 @@ migrate_items_releases=Lançamentos migrate_repo=Migrar o repositório migrate.clone_address=Migrar / clonar a partir do URL migrate.clone_address_desc=O URL de clonagem HTTP(S) ou Git de um repositório existente +migrate.github_token_desc=Pode colocar aqui um ou mais códigos, separados por vírgulas, para tornar mais rápida a migração, para compensar a limitação de velocidade da API do GitHub. AVISO: O abuso desta funcionalidade poderá violar a política do seu fornecedor de serviço e levar ao bloqueio da(s) sua(a) conta(s). migrate.clone_local_path=ou uma localização no servidor local migrate.permission_denied=Não está autorizado a importar repositórios locais. +migrate.permission_denied_blocked=Não pode importar de servidores não permitidos. Peça ao administrador para verificar as configurações ALLOWED_DOMAINS/ALLOW_LOCALNETWORKS/BLOCKED_DOMAINS. migrate.invalid_local_path=A localização local é inválida. Não existe ou não é uma pasta. migrate.invalid_lfs_endpoint=O destino LFS não é válido. migrate.failed=A migração falhou: %v @@ -1141,6 +1205,7 @@ migrate.migrate_items_options=É necessário um código de acesso para migrar it migrated_from=Migrado de <a href="%[1]s">%[2]s</a> migrated_from_fake=Migrado de %[1]s migrate.migrate=Migrar de %s +migrate.migrating=Migrando a partir de <b>%s</b>… migrate.migrating_failed=A migração de <b>%s</b> falhou. migrate.migrating_failed.error=Falhou a migração: %s migrate.migrating_failed_no_addr=A migração falhou. @@ -1189,6 +1254,7 @@ clone_this_repo=Clonar este repositório cite_this_repo=Citar este repositório create_new_repo_command=Criando um novo repositório na linha de comandos push_exist_repo=Enviando, pela linha de comandos, um repositório existente +empty_message=Este repositório não tem qualquer conteúdo. broken_message=Os dados Git subjacentes a este repositório não podem ser lidos. Contacte o administrador desta instância ou elimine este repositório. no_branch=Este repositório não tem quaisquer ramos. @@ -1207,6 +1273,7 @@ projects=Planeamentos packages=Pacotes actions=Operações labels=Rótulos +org_labels_desc=Rótulos ao nível da organização que podem ser usados em <strong>todos os repositórios</strong> desta organização org_labels_desc_manage=gerir milestone=Etapa @@ -1255,6 +1322,7 @@ commit_graph.color=Colorido commit.contained_in=Este cometimento está contido em: commit.contained_in_default_branch=Este cometimento é parte do ramo principal commit.load_referencing_branches_and_tags=Carregar ramos e etiquetas que referenciem este cometimento +commit.merged_in_pr=Este cometimento foi integrado dentro do pedido de integração %s. blame=Responsabilidade download_file=Descarregar ficheiro normal_view=Vista normal @@ -1303,13 +1371,17 @@ editor.new_branch_name_desc=Nome do novo ramo… editor.cancel=Cancelar editor.filename_cannot_be_empty=O nome do ficheiro não pode estar em branco. editor.filename_is_invalid=O nome do ficheiro é inválido: "%s". +editor.commit_email=Endereço de email do cometimento +editor.invalid_commit_email=O endereço de email do comentimento é inválido. editor.branch_does_not_exist=O ramo "%s" não existe neste repositório. editor.branch_already_exists=O ramo "%s" já existe neste repositório. editor.directory_is_a_file=O nome da pasta "%s" já é usado como um nome de ficheiro neste repositório. +editor.file_is_a_symlink=`"%s" é uma ligação simbólica. Ligações simbólicas não podem ser editadas no editor web.` editor.filename_is_a_directory=O nome de ficheiro "%s" já está a ser usado como um nome de pasta neste repositório. editor.file_modifying_no_longer_exists=O ficheiro que está a ser modificado, "%s", já não existe neste repositório. editor.file_changed_while_editing=O conteúdo do ficheiro mudou desde que começou a editar. <a target="_blank" rel="noopener noreferrer" href="%s">Clique aqui</a> para ver as modificações ou clique em <strong>Cometer novamente</strong> para escrever por cima. editor.file_already_exists=Já existe um ficheiro com o nome "%s" neste repositório. +editor.commit_id_not_matching=O ID do cometimento não corresponde ao ID de quando começou a editar. Faça o cometimento para um ramo de remendo (patch) e depois faça a integração. editor.push_out_of_date=O envio parece estar obsoleto. editor.commit_empty_file_header=Cometer um ficheiro vazio editor.commit_empty_file_text=O ficheiro que está prestes a cometer está vazio. Quer continuar? @@ -1335,6 +1407,7 @@ editor.fork_create_description=Não pode editar este repositório. Ao invés dis editor.fork_edit_description=Não pode editar este repositório. As modificações irão ser escritas na sua derivação <b>%s</b>, para que possa criar um pedido de integração. editor.fork_not_editable=Fez uma derivação deste repositório, mas a sua derivação não é editável. editor.fork_failed_to_push_branch=Falhou ao enviar o ramo %s para o seu repositório. +editor.fork_branch_exists=O ramo "%s" já existe na sua derivação. Escolha outro nome para o ramo. commits.desc=Navegar pelo histórico de modificações no código fonte. commits.commits=Cometimentos @@ -1436,6 +1509,7 @@ issues.new.clear_assignees=Retirar todos os encarregados issues.new.no_assignees=Sem encarregados issues.new.no_reviewers=Sem revisores issues.new.blocked_user=Não pode criar a questão porque foi bloqueado/a pelo/a proprietário/a do repositório. +issues.edit.already_changed=Não foi possível guardar as modificações da questão. O conteúdo parece ter sido modificado por outro utilizador, entretanto. Refresque a página e tente editar de novo para evitar sobrepor as modificações dele. issues.edit.blocked_user=Não pode editar o conteúdo porque foi bloqueado/a pelo/a remetente ou pelo/a proprietário/a do repositório. issues.choose.get_started=Começar issues.choose.open_external_link=Abrir @@ -1507,6 +1581,7 @@ issues.filter_type.reviewed_by_you=Revistos por si issues.filter_sort=Ordem issues.filter_sort.latest=Mais recentes issues.filter_sort.oldest=Mais antigas +issues.filter_sort.recentupdate=Modificadas recentemente issues.filter_sort.leastupdate=Modificadas há muito tempo issues.filter_sort.mostcomment=Mais comentadas issues.filter_sort.leastcomment=Menos comentadas @@ -1706,7 +1781,9 @@ issues.dependency.pr_closing_blockedby=O encerramento deste pedido de integraç issues.dependency.issue_closing_blockedby=O encerramento desta questão está bloqueado pelas seguintes questões issues.dependency.issue_close_blocks=Esta questão bloqueia o encerramento das seguintes questões issues.dependency.pr_close_blocks=Este pedido de integração bloqueia o encerramento das seguintes questões +issues.dependency.issue_close_blocked=Tem que encerrar todas as questões que bloqueiam esta questão antes de a poder encerrar. issues.dependency.issue_batch_close_blocked=Não é possível fechar em lote as questões que escolheu porque a questão #%d ainda tem dependências em aberto +issues.dependency.pr_close_blocked=Tem que encerrar todas as questões que bloqueiam este pedido de integração antes de poder proceder à integração. issues.dependency.blocks_short=Bloqueia issues.dependency.blocked_by_short=Depende de issues.dependency.remove_header=Remover dependência @@ -1717,11 +1794,13 @@ issues.dependency.add_error_same_issue=Não pode fazer uma questão depender de issues.dependency.add_error_dep_issue_not_exist=A questão dependente não existe. issues.dependency.add_error_dep_not_exist=A dependência não existe. issues.dependency.add_error_dep_exists=A dependência já existe. +issues.dependency.add_error_cannot_create_circular=Não pode criar uma dependência com duas questões em que cada uma bloqueia a outra. issues.dependency.add_error_dep_not_same_repo=Ambas as questões têm que estar no mesmo repositório. issues.review.self.approval=Não pode aprovar o seu próprio pedido de integração. issues.review.self.rejection=Não pode solicitar modificações sobre o seu próprio pedido de integração. issues.review.approve=aprovou estas modificações %s issues.review.comment=reviu %s +issues.review.dismissed=descartou a revisão de %s %s issues.review.dismissed_label=Descartada issues.review.left_comment=deixou um comentário issues.review.content.empty=Tem que deixar um comentário indicando a(s) modificação(ões) solicitada(s). @@ -1729,6 +1808,7 @@ issues.review.reject=modificações solicitadas %s issues.review.wait=foi solicitada para revisão %s issues.review.add_review_request=solicitou revisão de %s %s issues.review.remove_review_request=removeu a solicitação de revisão para %s %s +issues.review.remove_review_request_self=recusou rever %s issues.review.pending=Pendente issues.review.pending.tooltip=Este comentário não está visível para os outros utilizadores, neste momento. Para submeter os seus comentários pendentes, escolha "%s" → "%s/%s/%s" no topo da página. issues.review.review=Revisão @@ -1750,6 +1830,7 @@ issues.review.requested=Revisão pendente issues.review.rejected=Modificações solicitadas issues.review.stale=Modificada depois da aprovação issues.review.unofficial=Aprovação não oficial +issues.assignee.error=Nem todos os encarregados foram adicionados, devido a um erro inesperado. issues.reference_issue.body=Conteúdo issues.content_history.deleted=eliminado issues.content_history.edited=editado @@ -1766,6 +1847,7 @@ pulls.desc=Habilitar pedidos de integração e revisão de código-fonte. pulls.new=Novo pedido de integração pulls.new.blocked_user=Não pode criar o pedido de integração porque foi bloqueado/a pelo/a proprietário/a do repositório. pulls.new.must_collaborator=Tem de ser um/a colaborador/a para criar um pedido de integração. +pulls.edit.already_changed=Não foi possível guardar as modificações do pedido de integração. O conteúdo parece ter sido modificado por outro utilizador, entretanto. Refresque a página e tente editar de novo para evitar sobrepor as modificações dele. pulls.view=Ver pedido de integração pulls.compare_changes=Novo pedido de integração pulls.allow_edits_from_maintainers=Permitir edições por parte dos responsáveis @@ -1786,6 +1868,7 @@ pulls.show_all_commits=Mostrar todos os cometimentos pulls.show_changes_since_your_last_review=Mostrar modificações desde a sua última revisão pulls.showing_only_single_commit=Mostrando apenas as modificações do comentimento %[1]s pulls.showing_specified_commit_range=Mostrando apenas as modificações entre %[1]s..%[2]s +pulls.select_commit_hold_shift_for_range=Escolha o comentimento. Para escolher um intervalo, mantenha premido o shift enquanto clica. pulls.review_only_possible_for_full_diff=A revisão só é possível ao visualizar o diff completo pulls.filter_changes_by_commit=Filtrar por cometimento pulls.nothing_to_compare=Estes ramos são iguais. Não há necessidade de criar um pedido de integração. @@ -1814,6 +1897,7 @@ pulls.add_prefix=Adicione o prefixo <strong>%s</strong> pulls.remove_prefix=Remover o prefixo <strong>%s</strong> pulls.data_broken=Este pedido de integração está danificado devido à falta de informação da derivação. pulls.files_conflicted=Este pedido de integração contém modificações que entram em conflito com o ramo de destino. +pulls.is_checking=Verificando se existem conflitos na integração… pulls.is_ancestor=Este ramo já está incluído no ramo de destino. Não há nada a integrar. pulls.is_empty=As modificações feitas neste ramo já existem no ramo de destino. Este cometimento ficará vazio. pulls.required_status_check_failed=Algumas das verificações obrigatórias não foram bem sucedidas. @@ -1837,12 +1921,16 @@ pulls.reject_count_1=%d pedido de modificação pulls.reject_count_n=%d pedidos de modificação pulls.waiting_count_1=%d revisão pendente pulls.waiting_count_n=%d revisões pendentes +pulls.wrong_commit_id=ID do cometimento tem que ser um ID de cometimento no ramo de destino pulls.no_merge_desc=A integração constante neste pedido não pode ser executada porque todas as opções de integração do repositório estão desabilitadas. pulls.no_merge_helper=Habilite as opções de integração nas configurações do repositório ou faça a integração manualmente. pulls.no_merge_wip=A integração constante neste pedido não pode ser executada porque está marcada como sendo trabalho em andamento. +pulls.no_merge_not_ready=A integração constante neste pedido não pode ser executada. Verifique o estado da revisão e as verificações de estado. pulls.no_merge_access=Não tem autorização para executar a integração constante neste pedido. pulls.merge_pull_request=Criar um cometimento de integração +pulls.rebase_merge_pull_request=Mudar a base e avançar rapidamente +pulls.rebase_merge_commit_pull_request=Mudar a base e criar um cometimento de integração pulls.squash_merge_pull_request=Criar cometimento de compactação pulls.fast_forward_only_merge_pull_request=Avançar rapidamente apenas pulls.merge_manually=Integrar manualmente @@ -1850,10 +1938,17 @@ pulls.merge_commit_id=O ID de cometimento da integração pulls.require_signed_wont_sign=O ramo requer que os cometimentos sejam assinados mas esta integração não vai ser assinada pulls.invalid_merge_option=Não pode usar esta opção de integração neste pedido de integração. +pulls.merge_conflict=A integração falhou: Houve um conflito durante a integração. Dica: Tente uma estratégia diferente. pulls.merge_conflict_summary=Mensagem de erro +pulls.rebase_conflict=A integração falhou: Houve um conflito durante a mudança de base do cometimento %[1]s. Dica: Tente uma estratégia diferente. pulls.rebase_conflict_summary=Mensagem de erro +pulls.unrelated_histories=A integração falhou: O topo da integração e a base não partilham um histórico comum. Dica: Tente uma estratégia diferente. +pulls.merge_out_of_date=Falhou a integração: Enquanto gerava a integração, a base foi modificada. Dica: Tente de novo. +pulls.head_out_of_date=Falhou a integração: Enquanto gerava a integração, o topo foi modificado. Dica: Tente de novo. +pulls.has_merged=Falhou: A integração constante do pedido foi executada. Não pode integrar novamente nem modificar o ramo alvo. pulls.push_rejected=O envio falhou: O envio foi rejeitado. Reveja os Automatismos do Git neste repositório. pulls.push_rejected_summary=Mensagem completa de rejeição +pulls.push_rejected_no_message=O envio falhou: O envio foi rejeitado mas não houve qualquer mensagem remota. Reveja os Automatismos do Git para este repositório. pulls.open_unmerged_pull_exists=`Não pode executar uma operação de reabertura porque há um pedido de integração pendente (#%d) com propriedades idênticas.` pulls.status_checking=Algumas verificações estão pendentes pulls.status_checks_success=Todas as verificações foram bem sucedidas @@ -1879,6 +1974,7 @@ pulls.cmd_instruction_merge_title=Integrar pulls.cmd_instruction_merge_desc=Integrar as modificações e enviar para o Gitea. pulls.cmd_instruction_merge_warning=Aviso: Esta operação não pode executar pedidos de integração porque a opção "auto-identificar integração manual" não está habilitada. pulls.clear_merge_message=Apagar mensagem de integração +pulls.clear_merge_message_hint=Apagar a mensagem de integração apenas remove o conteúdo da mensagem de cometimento e mantém os rodapés gerados pelo git, tais como "Co-Autorado-Por…". pulls.auto_merge_button_when_succeed=(quando as verificações forem bem-sucedidas) pulls.auto_merge_when_succeed=Integrar automaticamente quando todas as verificações forem bem-sucedidas @@ -1944,6 +2040,7 @@ signing.wont_sign.nokey=Não existe qualquer chave disponível para assinar este signing.wont_sign.never=Os cometimentos nunca são assinados. signing.wont_sign.always=Os cometimentos são sempre assinados. signing.wont_sign.pubkey=O cometimento não será assinado porque não tem uma chave pública associada à sua conta. +signing.wont_sign.twofa=Tem que ter a autenticação em dois passos habilitada para ter cometimentos assinados. signing.wont_sign.parentsigned=O cometimento não pode ser assinado, uma vez que o anterior também não está. signing.wont_sign.basesigned=A integração não irá ser assinada, uma vez que o cometimento base não foi assinado. signing.wont_sign.headsigned=A integração não irá ser assinada, uma vez que o cometimento de topo não foi assinado. @@ -2057,11 +2154,13 @@ contributors.contribution_type.additions=Adições contributors.contribution_type.deletions=Eliminações settings=Configurações +settings.desc=Configurações é onde pode gerir as configurações do repositório. settings.options=Repositório settings.public_access=Acesso público settings.public_access_desc=Configurar as permissões de acesso público do visitante para substituir os valores predefinidos deste repositório. settings.public_access.docs.not_set=Não definido: nenhuma permissão extra de acesso público. As permissões do visitante seguem a visibilidade e as permissões de membro do repositório. settings.public_access.docs.anonymous_read=Leitura anónima: utilizadores sem sessão iniciada podem consultar a unidade. +settings.public_access.docs.everyone_read=Leitura pública: todos os utilizadores com sessão iniciada podem aceder à unidade com permissão de leitura. Permissão de leitura das unidades de questões / pedidos de integração também significa que os utilizadores podem criar novas questões / pedidos de integração. settings.public_access.docs.everyone_write=Escrita pública: Todos os utilizadores com sessão iniciada têm permissão de escrita na unidade. Apenas a unidade Wiki suporta esta permissão. settings.collaboration=Colaboradores settings.collaboration.admin=Administrador @@ -2079,6 +2178,7 @@ settings.mirror_settings.docs.disabled_pull_mirror.instructions=Configure o seu settings.mirror_settings.docs.disabled_push_mirror.instructions=Configure os seu planeamento para puxar, automaticamente, cometimentos, etiquetas e ramos a partir de outro repositório. settings.mirror_settings.docs.disabled_push_mirror.pull_mirror_warning=Neste momento isto só pode ser feito no menu "Nova migração". Para obter mais informação, consulte: settings.mirror_settings.docs.disabled_push_mirror.info=As réplicas foram desabilitadas pelo administrador deste sítio. +settings.mirror_settings.docs.no_new_mirrors=O seu repositório está a replicar modificações para, ou a partir de, outro repositório. Tenha em mente que neste momento não pode criar novas réplicas. settings.mirror_settings.docs.can_still_use=Embora não possa modificar réplicas existentes ou criar novas, ainda pode usar a sua réplica existente. settings.mirror_settings.docs.pull_mirror_instructions=Para configurar uma réplica de outro repositório, consulte settings.mirror_settings.docs.more_information_if_disabled=Pode aprender mais sobre réplicas de envios e de puxadas aqui: @@ -2153,6 +2253,7 @@ settings.admin_indexer_commit_sha=Último SHA indexado settings.admin_indexer_unindexed=Não indexado settings.reindex_button=Adicionar à fila de reindexação settings.reindex_requested=Reindexação solicitada +settings.admin_enable_close_issues_via_commit_in_any_branch=Fechar uma questão através de um cometimento feito num ramo que não seja o principal settings.danger_zone=Zona de perigo settings.new_owner_has_same_repo=O novo dono já tem um repositório com o mesmo nome. Por favor, escolha outro nome. settings.convert=Converter para um repositório normal @@ -2174,6 +2275,7 @@ settings.transfer_abort_invalid=Não pode cancelar a transferência de um reposi settings.transfer_abort_success=A transferência de repositório para %s foi cancelada com sucesso. settings.transfer_desc=Transferir este repositório para um utilizador ou para uma organização na qual você tenha direitos de administrador. settings.transfer_form_title=Insira o nome do repositório para confirmar: +settings.transfer_in_progress=Está a ser feita uma transferência. Cancele-a, por favor, se quiser transferir este repositório para outro utilizador. settings.transfer_notices_1=- Você perderá o acesso ao repositório se o transferir para um utilizador individual. settings.transfer_notices_2=- Você manterá o acesso ao repositório se o transferir para uma organização da qual você é (co-)proprietário(a). settings.transfer_notices_3=- Se o repositório for privado e for transferido para um utilizador individual, esta operação certifica que o utilizador tem pelo menos a permissão de leitura (e altera as permissões se for necessário). @@ -2188,9 +2290,13 @@ settings.trust_model.default=Modelo de confiança padrão settings.trust_model.default.desc=Usar o modelo de confiança padrão do repositório para esta instalação. settings.trust_model.collaborator=Colaborador settings.trust_model.collaborator.long=Colaborador: Confiar nas assinaturas dos colaboradores +settings.trust_model.collaborator.desc=Assinaturas válidas dos colaboradores deste repositório serão marcadas como "fiável", independentemente de corresponderem, ou não, ao autor do cometimento. Caso contrário, assinaturas válidas serão marcadas como "não fiável" se a assinatura corresponder ao autor do cometimento e "não corresponde", se não corresponder. settings.trust_model.committer=Autor do cometimento +settings.trust_model.committer.long=Autor do cometimento: Confiar nas assinaturas que correspondam aos autores dos cometimentos. Isto corresponde ao comportamento do GitHub e força a que os cometimentos assinados do Gitea tenham o Gitea como autor do cometimento. +settings.trust_model.committer.desc=Assinaturas válidas apenas serão marcadas como "fiável" se corresponderem ao autor do cometimento, caso contrário serão marcadas como "não corresponde". Isto irá forçar o Gitea a ser o autor do cometimento nos cometimentos assinados, ficando o autor real marcado como "Co-autorado-por:" e "Co-cometido-por:" no rodapé do cometimento. A chave padrão do Gitea tem que corresponder a um utilizador na base de dados. settings.trust_model.collaboratorcommitter=Colaborador + Autor do cometimento settings.trust_model.collaboratorcommitter.long=Colaborador + Autor do cometimento: Confiar nas assinaturas dos colaboradores que correspondam ao autor do cometimento +settings.trust_model.collaboratorcommitter.desc=Assinaturas válidas feitas por colaboradores deste repositório serão marcadas como "fiável" se corresponderem ao autor do cometimento. Caso contrário, assinaturas válidas serão marcadas como "não fiável" se a assinatura corresponder ao autor do cometimento e "não corresponde" se não corresponder. Isto irá forçar a que o Gitea seja marcado como sendo o autor do cometimento nos cometimentos assinados, ficando o autor real marcado como "Co-autorado-por:" e "Co-cometido-por:" no rodapé do cometimento. A chave padrão do Gitea tem que corresponder a um utilizador na base de dados. settings.wiki_delete=Eliminar dados do wiki settings.wiki_delete_desc=Eliminar os dados do repositório do wiki é permanente e não pode ser revertido. settings.wiki_delete_notices_1=- Isso excluirá e desabilitará permanentemente o wiki do repositório para %s. @@ -2199,6 +2305,7 @@ settings.wiki_deletion_success=Os dados do repositório do wiki foram eliminados settings.delete=Eliminar este repositório settings.delete_desc=Eliminar um repositório é permanente e não pode ser revertido. settings.delete_notices_1=- Esta operação <strong>NÃO PODERÁ</strong> ser revertida. +settings.delete_notices_2=- Esta operação eliminará permanentemente o repositório <strong>%s</strong>, incluindo código-fonte, questões, comentários, dados do wiki e configurações dos colaboradores. settings.delete_notices_fork_1=- Derivações deste repositório tornar-se-ão independentes, após a eliminação. settings.deletion_success=O repositório foi eliminado. settings.update_settings_success=As configurações do repositório foram modificadas. @@ -2220,6 +2327,8 @@ settings.team_not_in_organization=A equipa não está na mesma organização que settings.teams=Equipas settings.add_team=Adicionar equipa settings.add_team_duplicate=A equipa já tem o repositório +settings.add_team_success=A equipa agora tem acesso ao repositório. +settings.change_team_permission_tip=A permissão da equipa é definida na página de configurações da equipa e não pode ter modificações específicas de cada repositório settings.delete_team_tip=Esta equipa tem acesso a todos os repositórios e não pode ser removida settings.remove_team_success=O acesso da equipa ao repositório foi removido. settings.add_webhook=Adicionar automatismo web @@ -2484,6 +2593,7 @@ settings.archive.tagsettings_unavailable=As configurações sobre etiquetas não settings.archive.mirrors_unavailable=As réplicas não estão disponíveis se o repositório estiver arquivado. settings.unarchive.button=Desarquivar repositório settings.unarchive.header=Desarquivar este repositório +settings.unarchive.text=Desarquivar o repositório irá restaurar a capacidade de receber cometimentos e envios, assim como novas questões e pedidos de integração. settings.unarchive.success=O repositório foi desarquivado com sucesso. settings.unarchive.error=Ocorreu um erro enquanto decorria o processo de desarquivar o repositório. Veja os registos para obter mais detalhes. settings.update_avatar_success=O avatar do repositório foi modificado. @@ -2501,9 +2611,11 @@ settings.lfs_invalid_locking_path=Localização inválida: %s settings.lfs_invalid_lock_directory=Não foi possível bloquear a pasta: %s settings.lfs_lock_already_exists=Já existe um bloqueio: %s settings.lfs_lock=Bloquear +settings.lfs_lock_path=Localização do ficheiro a bloquear… settings.lfs_locks_no_locks=Sem bloqueios settings.lfs_lock_file_no_exist=O ficheiro bloqueado não existe no ramo principal settings.lfs_force_unlock=Forçar desbloqueio +settings.lfs_pointers.found=Encontrado(s) %d ponteiro(s) de blob — %d associado(a), %d desassociado(a) (%d ausente do armazenamento) settings.lfs_pointers.sha=SHA do blob settings.lfs_pointers.oid=OID settings.lfs_pointers.inRepo=No repositório @@ -2661,6 +2773,7 @@ branch.new_branch_from=`Criar um novo ramo a partir do ramo "%s"` branch.renamed=O ramo %s foi renomeado para %s. branch.rename_default_or_protected_branch_error=Só os administradores é que podem renomear o ramo principal ou ramos protegidos. branch.rename_protected_branch_failed=Este ramo está protegido por regras de salvaguarda baseadas em padrões glob. +branch.commits_divergence_from=Divergência nos cometimentos: %[1]d atrás e %[2]d à frente de %[3]s branch.commits_no_divergence=Idêntico ao ramo %[1]s tag.create_tag=Criar etiqueta %s @@ -2685,6 +2798,7 @@ error.csv.invalid_field_count=Não é possível apresentar este ficheiro porque error.broken_git_hook=Os automatismos git deste repositório parecem estar danificados. Consulte a <a target="_blank" rel="noreferrer" href="%s">documentação</a> sobre como os consertar e depois envie alguns cometimentos para refrescar o estado. [graphs] +component_loading=A carregar %s… component_loading_failed=Não foi possível carregar %s component_loading_info=Isto pode demorar um pouco… component_failed_to_load=Ocorreu um erro inesperado. @@ -2723,6 +2837,7 @@ form.create_org_not_allowed=Não tem permissão para criar uma organização. settings=Configurações settings.options=Organização settings.full_name=Nome completo +settings.email=Endereço de email de contacto settings.website=Sítio web settings.location=Localização settings.permission=Permissões @@ -2739,7 +2854,10 @@ settings.update_setting_success=As configurações da organização foram modifi settings.rename=Renomear organização settings.rename_desc=Mudar o nome da organização também irá mudar o URL da organização e libertar o nome antigo. +settings.rename_success=A organização %[1]s foi renomeada para %[2]s com sucesso. +settings.rename_no_change=O nome da organização não foi alterado. settings.rename_new_org_name=Novo nome da organização +settings.rename_failed=A renomeação da organização falhou por causa de um erro interno settings.rename_notices_1=Esta operação <strong>NÃO PODERÁ</strong> ser revertida. settings.rename_notices_2=O antigo nome, enquanto não for reivindicado, irá reencaminhar para o novo. @@ -2749,9 +2867,11 @@ settings.delete_account=Eliminar esta organização settings.delete_prompt=A organização será removida permanentemente. Essa operação <strong>NÃO PODERÁ</strong> ser revertida! settings.name_confirm=Insira o nome da organização para confirmar: settings.delete_notices_1=Esta operação <strong>NÃO PODERÁ</strong> ser revertida. +settings.delete_notices_2=Esta operação irá eliminar de forma permanente todos os <strong>repositórios</strong> de <strong>%s</strong>, incluindo código-fonte, questões, comentários, dados do wiki e configurações dos colaboradores. settings.delete_notices_3=Esta operação irá eliminar de forma permanente todos os <strong>pacotes</strong> de <strong>%s</strong>. settings.delete_notices_4=Esta operação irá eliminar de forma permanente todos os <strong>planeamentos</strong> de <strong>%s</strong>. settings.confirm_delete_account=Confirme a eliminação +settings.delete_failed=A eliminação da organização falhou por causa de um erro interno settings.delete_successful=A organização <b>%s</b> foi eliminada com sucesso. settings.hooks_desc=Adicionar automatismos web que serão despoletados para <strong>todos os repositórios</strong> desta organização. @@ -2808,6 +2928,7 @@ teams.remove_all_repos_title=Remover todos os repositórios da equipa teams.remove_all_repos_desc=Isto irá remover todos os repositórios da equipa. teams.add_all_repos_title=Adicionar todos os repositórios teams.add_all_repos_desc=Isto irá adicionar todos os repositórios da organização à equipa. +teams.add_nonexistent_repo=O repositório que está a tentar adicionar não existe. Crie-o primeiro. teams.add_duplicate_users=O utilizador já é um membro da equipa. teams.repos.none=Não há repositórios que possam ser acedidos por esta equipa. teams.members.none=Não há membros nesta equipa. @@ -2848,6 +2969,7 @@ repositories=Repositórios hooks=Automatismos web integrations=Integrações authentication=Fontes de autenticação +emails=Endereços de email do utilizador config=Configuração config_summary=Resumo config_settings=Configurações @@ -2879,8 +3001,11 @@ dashboard.cron.cancelled=Cron: %[1]s cancelado: %[3]s dashboard.cron.error=Erro no cron: %s: %[3]s dashboard.cron.finished=Cron: %[1]s concluído dashboard.delete_inactive_accounts=Eliminar todas as contas que não tenham sido habilitadas +dashboard.delete_inactive_accounts.started=Foi iniciada a eliminação de todas as contas que não foram habilitadas. dashboard.delete_repo_archives=Eliminar todos os arquivos dos repositórios (ZIP, TAR.GZ, etc) +dashboard.delete_repo_archives.started=Foi iniciada a tarefa de eliminação de todos os repositórios arquivados. dashboard.delete_missing_repos=Eliminar todos os repositórios que não tenham os seus ficheiros Git +dashboard.delete_missing_repos.started=Foi iniciada a tarefa de eliminação de todos os repositórios que não têm ficheiros git. dashboard.delete_generated_repository_avatars=Eliminar avatares gerados do repositório dashboard.sync_repo_branches=Sincronizar ramos perdidos de dados do git para bases de dados dashboard.sync_repo_tags=Sincronizar etiquetas dos dados do git para a base de dados @@ -2888,7 +3013,12 @@ dashboard.update_mirrors=Sincronizar réplicas dashboard.repo_health_check=Verificar a saúde de todos os repositórios dashboard.check_repo_stats=Verificar as estatísticas de todos os repositórios dashboard.archive_cleanup=Eliminar arquivos de repositórios antigos +dashboard.deleted_branches_cleanup=Limpar ramos eliminados dashboard.update_migration_poster_id=Sincronizar os IDs do remetente da migração +dashboard.git_gc_repos=Fazer a recolha do lixo em todos os repositórios +dashboard.resync_all_sshkeys=Sincronizar o ficheiro '.ssh/authorized_keys' com as chaves SSH do Gitea +dashboard.resync_all_sshprincipals=Modificar o ficheiro '.ssh/authorized_principals' com os protagonistas SSH do Gitea +dashboard.resync_all_hooks=Voltar a sincronizar automatismos de pré-acolhimento, modificação e pós-acolhimento de todos os repositórios dashboard.reinit_missing_repos=Reinicializar todos os repositórios Git em falta para os quais existam registos dashboard.sync_external_users=Sincronizar dados externos do utilizador dashboard.cleanup_hook_task_table=Limpar a tabela hook_task @@ -2924,8 +3054,10 @@ dashboard.total_gc_pause=Pausa total da recolha de lixo dashboard.last_gc_pause=Última pausa da recolha de lixo dashboard.gc_times=N.º de recolhas de lixo dashboard.delete_old_actions=Eliminar todo o trabalho antigo da base de dados +dashboard.delete_old_actions.started=Foi iniciado o processo de eliminação de todo o trabalho antigo da base de dados dashboard.update_checker=Verificador de novas versões dashboard.delete_old_system_notices=Eliminar todas as notificações do sistema antigas da base de dados +dashboard.gc_lfs=Recolher lixo dos meta-elementos LFS dashboard.stop_zombie_tasks=Parar tarefas zombie das operações dashboard.stop_endless_tasks=Parar tarefas intermináveis das operações dashboard.cancel_abandoned_jobs=Cancelar trabalhos abandonados das operações @@ -2949,6 +3081,7 @@ users.2fa=Autenticação em dois passos users.repos=Repos. users.created=Criada users.last_login=Último acesso +users.never_login=Nunca acedeu users.send_register_notify=Enviar notificação de registo de utilizador users.new_success=A conta de utilizador "%s" foi criada. users.edit=Editar @@ -2975,6 +3108,7 @@ users.still_own_repo=Este utilizador ainda possui um ou mais repositórios. Elim users.still_has_org=Este utilizador é membro de uma organização. Remova, primeiro, o utilizador de todas as organizações. users.purge=Eliminar utilizador users.purge_help=Eliminar o utilizador à força, juntamente com todos os seus repositórios, organizações e pacotes. Também serão eliminados todos os seus comentários. +users.still_own_packages=Este utilizador ainda possui um ou mais pacotes. Elimine esses pacotes primeiro. users.deletion_success=A conta de utilizador foi eliminada. users.reset_2fa=Reinicializar a autenticação em dois passos users.list_status_filter.menu_text=Filtro @@ -2994,7 +3128,11 @@ users.details=Detalhes do utilizador emails.email_manage_panel=Gestão de endereços de email do utilizador emails.primary=Principal emails.activated=Em uso +emails.filter_sort.email=Endereço de email +emails.filter_sort.email_reverse=Endereço de email (inverso) emails.filter_sort.name=Nome de utilizador +emails.filter_sort.name_reverse=Nome de utilizador (inverso) +emails.updated=Endereço de email modificado emails.not_updated=Falhou a modificação do endereço de email solicitado: %v emails.duplicate_active=Este endereço de email já está a ser usado por outro utilizador. emails.change_email_header=Modificar propriedades do email @@ -3002,6 +3140,7 @@ emails.change_email_text=Tem a certeza que quer modificar este endereço de emai emails.delete=Eliminar email emails.delete_desc=Tem a certeza que quer eliminar este endereço de email? emails.deletion_success=O endereço de email foi eliminado. +emails.delete_primary_email_error=Não pode eliminar o endereço de email principal. orgs.org_manage_panel=Gestão das organizações orgs.name=Nome @@ -3115,20 +3254,29 @@ auths.oauth2_required_claim_name_helper=Defina este nome para restringir o iníc auths.oauth2_required_claim_value=Valor de Reivindicação obrigatório auths.oauth2_required_claim_value_helper=Defina este valor para restringir o início de sessão desta fonte a utilizadores que tenham uma reivindicação com este nome e este valor auths.oauth2_group_claim_name=Reivindicar nome que fornece nomes de grupo para esta fonte. (Opcional) +auths.oauth2_full_name_claim_name=Nome completo reivindicado. (Opcional — se for definido, o nome completo do utilizador será sempre sincronizado com este reivindicado) auths.oauth2_ssh_public_key_claim_name=Nome reivindicado da chave pública SSH +auths.oauth2_admin_group=Valor da Reivindicação de Grupo para utilizadores administradores. (Opcional — exige a reivindicação de nome acima) +auths.oauth2_restricted_group=Valor da Reivindicação de Grupo para utilizadores restritos. (Opcional — exige a reivindicação de nome acima) +auths.oauth2_map_group_to_team=Mapear grupos reclamados em equipas da organização. (Opcional — exige a reivindicação de nome acima) auths.oauth2_map_group_to_team_removal=Remover utilizadores das equipas sincronizadas se esses utilizadores não pertencerem ao grupo correspondente. auths.enable_auto_register=Habilitar o registo automático auths.sspi_auto_create_users=Criar utilizadores automaticamente +auths.sspi_auto_create_users_helper=Permitir que o método de autenticação SSPI crie, automaticamente, novas contas para utilizadores que iniciam a sessão pela primeira vez auths.sspi_auto_activate_users=Habilitar utilizadores automaticamente auths.sspi_auto_activate_users_helper=Permitir que o método de autenticação SSPI habilite automaticamente os novos utilizadores auths.sspi_strip_domain_names=Remover nomes de domínio dos nomes de utilizador +auths.sspi_strip_domain_names_helper=Se esta opção estiver marcada, os nomes de domínio serão removidos dos nomes do início de sessão (ex.: "DOMÍNIO\utilizador" e "utilizador@exemplo.org" tornar-se-ão "utilizador", simplesmente). auths.sspi_separator_replacement=Separador a usar em vez de \, / e @ +auths.sspi_separator_replacement_helper=O caractere a ser usado para substituir os separadores de nomes de início de sessão de nível inferior (ex.: o \ em "DOMÍNIO\utilizador") e os nomes principais do utilizador (ex.: o @ em "utilizador@exemplo.org"). auths.sspi_default_language=Idioma predefinido do utilizador +auths.sspi_default_language_helper=Idioma predefinido para utilizadores criados automaticamente pelo método de autenticação SSPI. Deixe em branco se preferir que o idioma seja determinado automaticamente. auths.tips=Dicas auths.tips.oauth2.general=Autenticação OAuth2 auths.tips.oauth2.general.tip=Ao registar uma nova autenticação OAuth2, o URL da ligação de retorno ou do reencaminhamento deve ser: auths.tip.oauth2_provider=Fornecedor OAuth2 auths.tip.bitbucket=Registe um novo consumidor de OAuth em %s e adicione a permissão 'Account' - 'Read' +auths.tip.nextcloud=`Registe um novo consumidor OAuth na sua instância usando o seguinte menu "Configurações → Segurança → Cliente OAuth 2.0"` auths.tip.dropbox=Crie uma nova aplicação em %s auths.tip.facebook=`Registe uma nova aplicação em %s e adicione o produto "Facebook Login"` auths.tip.github=Registe uma nova aplicação OAuth em %s @@ -3238,6 +3386,7 @@ config.mailer_sendmail_path=Localização do sendmail config.mailer_sendmail_args=Argumentos extras para o sendmail config.mailer_sendmail_timeout=Tempo limite do Sendmail config.mailer_use_dummy=Fictício +config.test_email_placeholder=Endereço de email (ex.: teste@exemplo.com) config.send_test_mail=Enviar email de teste config.send_test_mail_submit=Enviar config.test_mail_failed=Falhou o envio de um email de teste para "%s": %v @@ -3326,6 +3475,7 @@ monitor.queue.numberinqueue=N.º na fila monitor.queue.review_add=Rever / Adicionar trabalhadores monitor.queue.settings.title=Configurações do agregado monitor.queue.settings.desc=Agregados crescem dinamicamente em resposta aos bloqueios da sua fila de trabalhadores. +monitor.queue.settings.maxnumberworkers=N.º máximo de trabalhadores monitor.queue.settings.maxnumberworkers.placeholder=De momento %[1]d monitor.queue.settings.maxnumberworkers.error=O número máximo de trabalhadores tem que ser um número monitor.queue.settings.submit=Modificar configurações @@ -3351,6 +3501,10 @@ notices.delete_success=As notificações do sistema foram eliminadas. self_check.no_problem_found=Nenhum problema encontrado até agora. self_check.startup_warnings=Alertas do arranque: self_check.database_collation_mismatch=Supor que a base de dados usa a colação: %s +self_check.database_collation_case_insensitive=A base de dados está a usar a colação %s, que é insensível à diferença entre maiúsculas e minúsculas. Embora o Gitea possa trabalhar com ela, pode haver alguns casos raros que não funcionem como esperado. +self_check.database_inconsistent_collation_columns=A base de dados está a usar a colação %s, mas estas colunas estão a usar colações diferentes. Isso poderá causar alguns problemas inesperados. +self_check.database_fix_mysql=Para utilizadores do MySQL/MariaDB, pode usar o comando "gitea doctor convert" para resolver os problemas de colação. Também pode resolver o problema manualmente com comandos SQL "ALTER ... COLLATE ...". +self_check.database_fix_mssql=Para utilizadores do MSSQL só pode resolver o problema manualmente com comandos SQL "ALTER ... COLLATE ...", por enquanto. self_check.location_origin_mismatch=O URL corrente (%[1]s) não corresponde ao URL visto pelo Gitea (%[2]s). Se estiver a usar um reverse proxy, certifique-se que os cabeçalhos "Host" e "X-Forwarded-Proto" estão bem definidos. [action] @@ -3434,6 +3588,8 @@ error.no_committer_account=Não existe qualquer conta ligada ao endereço de ema error.no_gpg_keys_found=Não foi encontrada uma chave conhecida para esta assinatura, na base de dados error.not_signed_commit=Não é um cometimento assinado error.failed_retrieval_gpg_keys=Falhou ao obter uma chave ligada à conta de quem cometeu +error.probable_bad_signature=AVISO! Embora exista uma chave com este ID na base de dados, ela não valida este cometimento! Este cometimento é SUSPEITO. +error.probable_bad_default_signature=AVISO! Embora a chave padrão tenha este ID, ela não valida este cometimento! Este cometimento é SUSPEITO. [units] unit=Unidade @@ -3472,6 +3628,7 @@ versions.view_all=Ver todas dependency.id=ID dependency.version=Versão search_in_external_registry=Procurar em %s +alpine.registry=Configure este registo adicionando o URL no seu ficheiro <code>/etc/apk/repositories</code>: alpine.registry.key=Descarregue a chave RSA pública do registo para dentro da pasta <code>/etc/apk/keys/</code> para verificar a assinatura do índice: alpine.registry.info=Escolha $branch e $repository da lista abaixo. alpine.install=Para instalar o pacote, execute o seguinte comando: @@ -3484,13 +3641,18 @@ arch.install=Sincronizar pacote com pacman: arch.repository=Informação do repositório arch.repository.repositories=Repositórios arch.repository.architectures=Arquitecturas +cargo.registry=Configure este registo no ficheiro de configuração do Cargo (por exemplo: <code>~/.cargo/config.toml</code>): cargo.install=Para instalar o pacote usando o Cargo, execute o seguinte comando: +chef.registry=Configure este registo no seu ficheiro <code>~/.chef/config.rb</code>: chef.install=Para instalar o pacote, execute o seguinte comando: +composer.registry=Configure este registo no seu ficheiro <code>~/.composer/config.json</code>: composer.install=Para instalar o pacote usando o Composer, execute o seguinte comando: composer.dependencies=Dependências composer.dependencies.development=Dependências de desenvolvimento conan.details.repository=Repositório +conan.registry=Configure este registo usando a linha de comandos: conan.install=Para instalar o pacote usando o Conan, execute o seguinte comando: +conda.registry=Configure este registo como um repositório Conda no seu ficheiro <code>.condarc</code>: conda.install=Para instalar o pacote usando o Conda, execute o seguinte comando: container.details.type=Tipo de imagem container.details.platform=Plataforma @@ -3502,7 +3664,9 @@ container.layers=Camadas de imagem container.labels=Rótulos container.labels.key=Chave container.labels.value=Valor +cran.registry=Configure este registo no seu ficheiro <code>Rprofile.site</code>: cran.install=Para instalar o pacote, execute o seguinte comando: +debian.registry=Configure este registo usando a linha de comandos: debian.registry.info=Escolha $distribution e $component da lista abaixo. debian.install=Para instalar o pacote, execute o seguinte comando: debian.repository=Informação do repositório @@ -3511,11 +3675,16 @@ debian.repository.components=Componentes debian.repository.architectures=Arquitecturas generic.download=Descarregar pacote usando a linha de comandos: go.install=Instale o pacote a partir da linha de comandos: +helm.registry=Configure este registo usando a linha de comandos: helm.install=Para instalar o pacote, execute o seguinte comando: +maven.registry=Configure este registo no seu ficheiro <code>pom.xml</code> do projecto: +maven.install=Para usar este pacote, inclua no bloco <code>dependencies</code> do ficheiro <code>pom.xml</code> o seguinte: maven.install2=Executar usando a linha de comandos: maven.download=Para descarregar a dependência, execute na linha de comandos: +nuget.registry=Configure este registo usando a linha de comandos: nuget.install=Para instalar o pacote usando NuGet, execute o seguinte comando: nuget.dependency.framework=Estrutura alvo +npm.registry=Configure este registo no seu ficheiro <code>.npmrc</code> do projecto: npm.install=Para instalar o pacote usando o npm, execute o seguinte comando: npm.install2=ou adicione-o ao ficheiro <code>package.json</code>: npm.dependencies=Dependências @@ -3527,6 +3696,7 @@ npm.details.tag=Etiqueta pub.install=Para instalar o pacote usando o Dart, execute o seguinte comando: pypi.requires=Requer Python pypi.install=Para instalar o pacote usando o pip, execute o seguinte comando: +rpm.registry=Configure este registo usando a linha de comandos: rpm.distros.redhat=em distribuições baseadas no RedHat rpm.distros.suse=em distribuições baseadas no SUSE rpm.install=Para instalar o pacote, execute o seguinte comando: @@ -3539,6 +3709,7 @@ rubygems.dependencies.runtime=Dependências do tempo de execução (runtime) rubygems.dependencies.development=Dependências de desenvolvimento rubygems.required.ruby=Requer a versão do Ruby rubygems.required.rubygems=Requer a versão do RubyGem +swift.registry=Configure este registo usando a linha de comandos: swift.install=Adicione o pacote no seu ficheiro <code>Package.swift</code>: swift.install2=e execute o seguinte comando: vagrant.install=Para adicionar uma máquina virtual Vagrant, execute o seguinte comando: diff --git a/options/locale/locale_zh-CN.ini b/options/locale/locale_zh-CN.ini index 01e35820a1..bad5af1dbe 100644 --- a/options/locale/locale_zh-CN.ini +++ b/options/locale/locale_zh-CN.ini @@ -44,6 +44,7 @@ webauthn_use_twofa=使用来自手机中的两步验证码 webauthn_error=无法读取安全密钥。 webauthn_unsupported_browser=您的浏览器目前不支持 WebAuthn。 webauthn_error_unknown=发生未知错误。请重试。 +webauthn_error_insecure=WebAuthn 仅支持安全连接。如果要在 HTTP 协议上进行测试,请使用 "localhost" 或 "127.0.0.1" 作为访问来源 webauthn_error_unable_to_process=服务器无法处理您的请求。 webauthn_error_duplicated=此安全密钥未被许可用于这个请求。请确保该密钥尚未注册。 webauthn_error_empty=您必须为此密钥设置一个名称。 @@ -116,6 +117,7 @@ files=文件 error=错误 error404=您正尝试访问的页面 <strong>不存在</strong> 或 <strong>您尚未被授权</strong> 查看该页面。 +error503=服务器无法完成您的请求,请稍后重试。 go_back=返回 invalid_data=无效数据: %v @@ -166,18 +168,33 @@ no_results_found=未找到结果 internal_error_skipped=发生内部错误,但已跳过: %s [search] +search=搜索... type_tooltip=搜索类型 fuzzy=模糊 +fuzzy_tooltip=包含近似匹配搜索词的结果 words=词 words_tooltip=仅包含匹配搜索词的结果 regexp=正则表达式 regexp_tooltip=仅包含匹配正则表达式搜索词的结果 exact=精确 exact_tooltip=仅包含精确匹配搜索词的结果 +repo_kind=搜索仓库... +user_kind=搜索用户... +org_kind=搜索组织... +team_kind=搜索团队... +code_kind=搜索代码... code_search_unavailable=代码搜索当前不可用。请与网站管理员联系。 code_search_by_git_grep=当前代码搜索结果由「git grep」提供。如果站点管理员启用仓库索引器,可能会有更好的结果。 +package_kind=搜索软件包... +project_kind=搜索项目... +branch_kind=搜索分支... +tag_kind=搜索Git标签... tag_tooltip=搜索匹配的标签。使用「%」来匹配任何序列的数字。 +commit_kind=搜索提交记录... +runner_kind=搜索运行器... no_results=未找到匹配结果 +issue_kind=搜索工单... +pull_kind=搜索合并请求... keyword_search_unavailable=按关键字搜索当前不可用。请联系站点管理员。 [aria] @@ -213,6 +230,8 @@ buttons.enable_monospace_font=启用等宽字体 buttons.disable_monospace_font=禁用等宽字体 [filter] +string.asc=A - Z +string.desc=Z - A [error] occurred=发生了一个错误 @@ -233,6 +252,7 @@ license_desc=所有的代码都开源在 <a target="_blank" rel="noopener norefe [install] install=安装页面 +installing_desc=正在安装,请稍候... title=初始配置 docker_helper=如果您正在使用 Docker 容器运行 Gitea,请务必先仔细阅读 <a target="_blank" rel="noopener noreferrer" href="%s">官方文档</a> 后再对本页面进行填写。 require_db_desc=Gitea 需要使用 MySQL、PostgreSQL、MSSQL、SQLite3 或 TiDB (MySQL协议) 等数据库 @@ -249,10 +269,16 @@ path=数据库文件路径 sqlite_helper=SQLite3 数据库的文件路径。<br>如果以服务的方式运行 Gitea,请输入绝对路径。 reinstall_error=您正在尝试安装到一个已经有 Gitea 数据的数据库中 reinstall_confirm_message=使用现有的 Gitea 数据库重新安装可能会导致多个问题。在大多数情况下,您应该使用您现有的「app.ini」来运行 Gitea。如果您知道自己在做什么,请确认以下内容: +reinstall_confirm_check_1=使用 app.ini 中 SECRET KEY 加密的数据可能会丢失:用户可能无法使用 2FA/OTP 登录,仓库镜像可能无法正常工作。勾选此框,表示您确认当前 app.ini 文件包含正确的 SECRET KEY。 +reinstall_confirm_check_2=代码仓库和设置可能需要重新同步。勾选此框,表示您确认将手动重新同步仓库和 SSH authorized_keys 的钩子。您确认您将确保代码仓库和镜像设置是正确的。 reinstall_confirm_check_3=您确认您绝对肯定这个 Gitea 在正确的 app.ini 位置上运行,而且您确定您必须重新安装。您确认您知晓上述风险。 err_empty_db_path=SQLite 数据库文件路径不能为空。 no_admin_and_disable_registration=您不能够在未创建管理员用户的情况下禁止注册。 err_empty_admin_password=管理员密码不能为空。 +err_empty_admin_email=管理员邮箱不能为空。 +err_admin_name_is_reserved=管理员用户名无效,用户名是保留的 +err_admin_name_pattern_not_allowed=管理员用户名无效,用户名是保留字 +err_admin_name_is_invalid=管理员用户名无效 general_title=一般设置 app_name=站点名称 @@ -268,6 +294,7 @@ domain_helper=服务器的域名或主机地址。 ssh_port=SSH 服务端口 ssh_port_helper=SSH 服务器的端口号,为空则禁用它。 http_port=HTTP 服务端口 +http_port_helper=Gitea Web 服务器将侦听的端口号。 app_url=基础URL app_url_helper=用于 HTTP (S) 克隆和邮件通知的基本地址。 log_root_path=日志路径 @@ -331,6 +358,7 @@ no_reply_address=隐藏邮件域 no_reply_address_helper=具有隐藏邮箱地址的用户的域名。例如,如果隐藏邮箱域名设置为「noreply.example.org」,那么用户名「joe」在 Git 中将显示为「joe@noreply.example.org」。 password_algorithm=密码哈希算法 invalid_password_algorithm=无效的密码哈希算法 +password_algorithm_helper=设置密码散列算法。算法有不同的要求和强度。 argon2 算法相当安全,但使用大量内存,因此可能不适合小型系统。 enable_update_checker=启用更新检查 enable_update_checker_helper=通过连接到 gitea.io 定期检查新版本发布。 env_config_keys=环境配置 @@ -402,6 +430,8 @@ allow_password_change=要求用户更改密码(推荐) reset_password_mail_sent_prompt=确认邮件已被发送到 <b>%s</b>。请您在 %s 内检查您的收件箱 ,完成密码重置流程。 active_your_account=激活您的帐户 account_activated=帐户已激活 +prohibit_login=禁止登录 +prohibit_login_desc=您的帐户被禁止登录,请与网站管理员联系。 resent_limit_prompt=您请求发送激活邮件过于频繁,请等待 3 分钟后再试! has_unconfirmed_mail=%s 您好,系统检测到您有一封发送至 <b>%s</b> 但未被确认的邮件。如果您未收到激活邮件,或需要重新发送,请单击下方的按钮。 change_unconfirmed_mail_address=如果您的注册邮箱地址不正确,您可以在此更改并重新发送新的确认邮件。 @@ -422,6 +452,7 @@ use_scratch_code=使用验证口令 twofa_scratch_used=您已经使用了您的验证口令。您将会转到两步验证设置页面以便移除您的注册设备或者重新生成新的验证口令。 twofa_passcode_incorrect=您的验证码不正确。如果您丢失了您的设备,请使用您的验证口令。 twofa_scratch_token_incorrect=您的验证口令不正确。 +twofa_required=您必须设置两步验证来访问仓库,或者尝试重新登录。 login_userpass=登录 login_openid=OpenID oauth_signup_tab=注册帐号 @@ -440,13 +471,17 @@ openid_connect_desc=所选的 OpenID URI 未知。在这里关联一个新帐户 openid_register_title=创建新帐户 openid_register_desc=所选的 OpenID URI 未知。在这里关联一个新帐户。 openid_signin_desc=输入您的OpenID地址。例如:alice.openid.example.org 或 https://openid.example.org/alice. +disable_forgot_password_mail=由于未设置邮箱,帐户恢复被禁用。 请联系您的站点管理员。 +disable_forgot_password_mail_admin=帐户恢复仅在设置邮箱后可用。 请设置邮箱以启用帐户恢复。 email_domain_blacklisted=您不能使用您的邮箱地址注册。 authorize_application=应用授权 authorize_redirect_notice=如果您授权此应用,您将会被重定向到 %s。 authorize_application_created_by=此应用由 %s 创建。 +authorize_application_description=如果您允许,它将能够读取和修改您的所有帐户信息,包括私人仓库和组织。 authorize_application_with_scopes=范围:%s authorize_title=授权 %s 访问您的帐户? authorization_failed=授权失败 +authorization_failed_desc=因为检测到无效请求,授权失败。请尝试联系您授权应用的管理员。 sspi_auth_failed=SSPI 认证失败 password_pwned=此密码出现在 <a target="_blank" rel="noopener noreferrer" href="%s">被盗密码</a> 列表上并且曾经被公开。 请使用另一个密码再试一次。 password_pwned_err=无法完成对 HaveIBeenPwned 的请求 @@ -472,6 +507,7 @@ activate_email.text=请在 <b>%s</b> 时间内,点击以下链接,以验证 register_notify=欢迎来到 %s register_notify.title=%[1]s,欢迎来到 %[2]s register_notify.text_1=这是您的 %s 注册确认邮件 ! +register_notify.text_2=您现在可以以用户名 %s 登录。 register_notify.text_3=如果此账户已为您创建,请先 <a href="%s">设置您的密码</a>。 reset_password=恢复您的账户 @@ -509,6 +545,7 @@ release.download.targz=源代码(TAR.GZ) repo.transfer.subject_to=%s 想要将「%s」转移给 %s repo.transfer.subject_to_you=%s 想要将「%s」转移给您 repo.transfer.to_you=您 +repo.transfer.body=访问 %s 以接受或拒绝转移,亦可忽略此邮件。 repo.collaborator.added.subject=%s 把您添加到了 %s repo.collaborator.added.text=您已被添加为仓库的协作者: @@ -560,6 +597,7 @@ url_error=`「%s」不是一个有效的 URL。` include_error=`必须包含子字符串「%s」。` glob_pattern_error=`匹配表达式无效:%s.` regex_pattern_error=`正则表达式无效:%s.` +username_error=`只能包含字母数字字符('0-9'、'a-z'、'A-Z')破折号('-')下划线('_')和点('.')。不能以非字母数字字符开头和结尾且不允许连续的非字母数字字符。` invalid_group_team_map_error=`映射无效: %s` unknown_error=未知错误: captcha_incorrect=验证码不正确。 @@ -574,14 +612,17 @@ username_has_not_been_changed=用户名未更改 repo_name_been_taken=仓库名称已使用。 repository_force_private=「强制私有」已启用:私有仓库不能被公开。 repository_files_already_exist=此仓库已存在文件。请联系系统管理员。 +repository_files_already_exist.adopt=此仓库已存在文件,只能被收录。 repository_files_already_exist.delete=此仓库已存在文件,必须先删除他们。 repository_files_already_exist.adopt_or_delete=此仓库已存在文件,要么删除他们,要么收录他们。 visit_rate_limit=远程访问达到速度限制。 +2fa_auth_required=远程访问需要两步验证。 org_name_been_taken=组织名称已使用。 team_name_been_taken=团队名称已使用。 team_no_units_error=至少选择一项仓库单元。 email_been_used=该邮箱地址已在使用中。 email_invalid=此邮箱地址无效。 +email_domain_is_not_allowed=用户 <b>%s</b> 与EMAIL_DOMAIN_ALLOWLIT 或 EMAIL_DOMAIN_BLOCKLIT 冲突。请确保您的操作是预期的。 openid_been_used=OpenID 地址「%s」已被使用。 username_password_incorrect=用户名或密码不正确。 password_complexity=密码未达到复杂程度要求: @@ -916,6 +957,7 @@ twofa_not_enrolled=您的账号未开启两步验证。 twofa_disable=禁用两步认证 twofa_scratch_token_regenerate=重新生成初始令牌 twofa_scratch_token_regenerated=您的初始令牌现在是 %s。将其存放在安全的地方,它将不会再次显示。 +twofa_enroll=启用两步验证 twofa_disable_note=如果需要, 可以禁用双因素身份验证。 twofa_disable_desc=关掉两步验证会使得您的账号不安全,继续执行? regenerate_scratch_token_desc=如果您丢失了您的恢复密钥或已经使用它登录, 您可以在这里重置它。 @@ -1128,6 +1170,7 @@ migrate.clone_address=从 URL 迁移/克隆 migrate.clone_address_desc=现有仓库的 HTTP(s) 或 Git "clone" URL migrate.clone_local_path=或服务器本地路径 migrate.permission_denied=您没有获得导入本地仓库的权限。 +migrate.permission_denied_blocked=您不能从不允许的主机导入,请询问管理员以检查 ALLOWED_DOMAINS/ALLOW_LOCALNETWORKS/BLOCKED_DOMAINS 设置。 migrate.invalid_local_path=本地路径无效。它不存在或不是一个目录。 migrate.invalid_lfs_endpoint=LFS 网址无效。 migrate.failed=迁移失败:%v @@ -1135,6 +1178,7 @@ migrate.migrate_items_options=需要访问令牌来迁移额外的内容 migrated_from=从 <a href="%[1]s">%[2]s</a> 迁移 migrated_from_fake=从 %[1]s 迁移成功 migrate.migrate=从 %s 迁移 +migrate.migrating=正在从 <b>%s</b> 迁移... migrate.migrating_failed=从 <b>%s</b> 迁移失败。 migrate.migrating_failed.error=迁移失败:%s migrate.migrating_failed_no_addr=迁移失败。 @@ -1183,7 +1227,9 @@ clone_this_repo=克隆当前仓库 cite_this_repo=引用此仓库 create_new_repo_command=从命令行创建一个新的仓库 push_exist_repo=从命令行推送已经创建的仓库 +empty_message=这个家伙很懒,什么都没有推送。 broken_message=无法读取此仓库下的 Git 数据。 联系此实例的管理员或删除此仓库。 +no_branch=该仓库没有任何分支。 code=代码 code.desc=查看源码、文件、提交和分支。 @@ -1200,6 +1246,7 @@ projects=项目 packages=软件包 actions=工作流 labels=标签 +org_labels_desc=组织级别的标签,可以被本组织下的 <strong>所有仓库</strong> 使用 org_labels_desc_manage=管理 milestone=里程碑 @@ -1248,6 +1295,7 @@ commit_graph.color=彩色 commit.contained_in=这个提交包含在: commit.contained_in_default_branch=此提交是默认分支的一部分 commit.load_referencing_branches_and_tags=加载引用该提交的分支和标签 +commit.merged_in_pr=此提交已合并在合并请求 %s 中。 blame=Blame download_file=下载文件 normal_view=普通视图 @@ -1296,6 +1344,8 @@ editor.new_branch_name_desc=新的分支名称... editor.cancel=取消 editor.filename_cannot_be_empty=文件名不能为空。 editor.filename_is_invalid=文件名无效:「%s」。 +editor.commit_email=提交邮箱地址 +editor.invalid_commit_email=提交的邮箱地址无效。 editor.branch_does_not_exist=此仓库中不存在名为「%s」的分支。 editor.branch_already_exists=此仓库已存在名为「%s」的分支。 editor.directory_is_a_file=目录名「%s」已作为文件名在此仓库中存在。 @@ -1713,6 +1763,7 @@ issues.review.self.approval=您不能批准您自己的合并请求。 issues.review.self.rejection=您不能请求对您自己的合并请求进行更改。 issues.review.approve=于 %s 批准此合并请求 issues.review.comment=评审于 %s +issues.review.dismissed=于 %[2]s 取消了 %[1]s 的评审 issues.review.dismissed_label=已取消 issues.review.left_comment=留下了一条评论 issues.review.content.empty=您需要留下一个注释,表明需要的更改。 @@ -1720,6 +1771,7 @@ issues.review.reject=请求变更 %s issues.review.wait=已请求 %s 审核 issues.review.add_review_request=于 %[2]s 请求 %[1]s 评审 issues.review.remove_review_request=取消对 %s 的评审请求 %s +issues.review.remove_review_request_self=拒绝审核 %s issues.review.pending=待定 issues.review.pending.tooltip=此评论目前对其他用户不可见。 若要提交您的待定评论,请在页面顶部选择 %s -> %s/%s/%s。 issues.review.review=评审 @@ -1777,9 +1829,11 @@ pulls.show_all_commits=显示所有提交 pulls.show_changes_since_your_last_review=显示自您上次审核以来的更改 pulls.showing_only_single_commit=仅显示提交 %[1]s 的更改 pulls.showing_specified_commit_range=仅显示 %[1]s..%[2]s 之间的更改 +pulls.select_commit_hold_shift_for_range=选择提交。按住 Shift + 单击选择一个范围 pulls.review_only_possible_for_full_diff=只有在查看全部差异时才能进行审核 pulls.filter_changes_by_commit=按提交筛选 pulls.nothing_to_compare=分支内容相同,无需创建合并请求。 +pulls.nothing_to_compare_have_tag=所选分支/标签相同。 pulls.nothing_to_compare_and_allow_empty_pr=这些分支是相等的,此合并请求将为空。 pulls.has_pull_request=这些分支之间的合并请求已存在: <a href="%[1]s">%[2]s#%[3]d</a> pulls.create=创建合并请求 @@ -1804,6 +1858,7 @@ pulls.add_prefix=添加 <strong>%s</strong> 前缀 pulls.remove_prefix=删除 <strong>%s</strong> 前缀 pulls.data_broken=此合并请求因为派生仓库信息缺失而中断。 pulls.files_conflicted=此合并请求有变更与目标分支冲突。 +pulls.is_checking=正在进行合并冲突检测 ... pulls.is_ancestor=此分支已经包含在目标分支中,没有什么可以合并。 pulls.is_empty=此分支上的更改已经在目标分支上。这将是一个空提交。 pulls.required_status_check_failed=一些必要的检查没有成功 @@ -1827,12 +1882,16 @@ pulls.reject_count_1=%d 变更请求 pulls.reject_count_n=%d 变更请求 pulls.waiting_count_1=%d 个正在等待审核 pulls.waiting_count_n=%d 个正在等待审核 +pulls.wrong_commit_id=提交 id 必须在目标分支上 pulls.no_merge_desc=由于未启用合并选项,此合并请求无法合并。 pulls.no_merge_helper=在仓库设置中启用合并选项或者手工合并请求。 pulls.no_merge_wip=这个合并请求无法合并,因为被标记为尚未完成的工作。 +pulls.no_merge_not_ready=此合并请求尚未准备好合并,请检查审核状态和状态检查。 pulls.no_merge_access=您无权合并此合并请求。 pulls.merge_pull_request=创建合并提交 +pulls.rebase_merge_pull_request=变基后快进 +pulls.rebase_merge_commit_pull_request=变基后创建合并提交 pulls.squash_merge_pull_request=创建压缩提交 pulls.fast_forward_only_merge_pull_request=仅快进 pulls.merge_manually=手动合并 @@ -2488,6 +2547,7 @@ settings.lfs_lock=锁定 settings.lfs_locks_no_locks=无锁定 settings.lfs_lock_file_no_exist=锁定的文件在默认分支中不存在 settings.lfs_force_unlock=强制解锁 +settings.lfs_pointers.found=找到 %d 个块指针 - %d 个关联, %d 个未关联(%d 个从仓库丢失) settings.lfs_pointers.sha=Blob SHA settings.lfs_pointers.oid=OID settings.lfs_pointers.inRepo=在仓库中 @@ -2669,6 +2729,7 @@ error.csv.invalid_field_count=无法渲染此文件,因为它在第 %d 行中 error.broken_git_hook=此仓库的 Git 钩子似乎已损坏。 请按照 <a target="_blank" rel="noreferrer" href="%s">文档</a> 来修复它们,然后推送一些提交来刷新状态。 [graphs] +component_loading=正在加载 %s... component_loading_failed=无法加载 %s component_loading_info=这可能需要一点时间… component_failed_to_load=意外的错误发生了。 @@ -2707,6 +2768,7 @@ form.create_org_not_allowed=此账号禁止创建组织 settings=组织设置 settings.options=组织 settings.full_name=组织全名 +settings.email=联系邮箱 settings.website=网站 settings.location=所在地区 settings.permission=权限 @@ -2723,7 +2785,10 @@ settings.update_setting_success=组织设置已更新。 settings.rename=修改组织名称 settings.rename_desc=更改组织名称同时会更改组织的 URL 地址并释放旧的名称。 +settings.rename_success=组织 %[1]s 已成功重命名为 %[2]s。 +settings.rename_no_change=组织名称没有变更。 settings.rename_new_org_name=新组织名称 +settings.rename_failed=由于内部错误,重命名组织失败 settings.rename_notices_1=此操作 <strong>无法</strong> 被回滚。 settings.rename_notices_2=在被人使用前,旧名称将会被重定向。 @@ -2733,9 +2798,11 @@ settings.delete_account=删除当前组织 settings.delete_prompt=删除操作会永久清除该组织的信息,并且 <strong>无法</strong> 恢复! settings.name_confirm=输入组织名称以确认: settings.delete_notices_1=此操作 <strong>无法</strong> 被回滚。 +settings.delete_notices_2=此操作将永久删除 <strong>%s</strong> 的所有<strong>仓库</strong>,包括 Git 数据、 工单、评论、百科和协作者的操作权限。 settings.delete_notices_3=此操作将永久删除 <strong>%s</strong> 的所有 <strong>软件包</strong>。 settings.delete_notices_4=此操作将永久删除 <strong>%s</strong> 的所有 <strong>项目</strong>。 settings.confirm_delete_account=确认删除组织 +settings.delete_failed=由于内部错误,删除组织失败 settings.delete_successful=组织 <b>%s</b> 已成功删除。 settings.hooks_desc=在此处添加的 Web 钩子将会应用到该组织下的 <strong>所有仓库</strong>。 @@ -2792,6 +2859,7 @@ teams.remove_all_repos_title=移除所有团队仓库 teams.remove_all_repos_desc=这将从团队中移除所有仓库。 teams.add_all_repos_title=添加所有仓库 teams.add_all_repos_desc=这将把组织的所有仓库添加到团队。 +teams.add_nonexistent_repo=您尝试添加的仓库不存在,请先创建它。 teams.add_duplicate_users=用户已经是团队成员。 teams.repos.none=此团队无法访问任何仓库。 teams.members.none=团队中没有成员。 @@ -2832,6 +2900,7 @@ repositories=仓库管理 hooks=Web 钩子 integrations=集成 authentication=认证源 +emails=用户邮箱 config=应用配置 config_summary=摘要 config_settings=设置 @@ -2863,8 +2932,11 @@ dashboard.cron.cancelled=计划任务:%[1]s 已取消:%[3]s dashboard.cron.error=计划任务错误: %s: %[3]s dashboard.cron.finished=计划任务:%[1]s 已完成 dashboard.delete_inactive_accounts=删除所有未激活的帐户 +dashboard.delete_inactive_accounts.started=删除所有未激活的账号任务已启动。 dashboard.delete_repo_archives=删除所有仓库的存档(ZIP、TAR、GZ等) +dashboard.delete_repo_archives.started=删除所有仓库存档任务已启动。 dashboard.delete_missing_repos=删除所有丢失 Git 文件的仓库 +dashboard.delete_missing_repos.started=删除所有丢失 Git 文件的仓库任务已启动。 dashboard.delete_generated_repository_avatars=删除生成的仓库头像 dashboard.sync_repo_branches=将缺少的分支从 Git 数据同步到数据库 dashboard.sync_repo_tags=从 Git 数据同步标签到数据库 @@ -2872,10 +2944,15 @@ dashboard.update_mirrors=更新镜像仓库 dashboard.repo_health_check=健康检查所有仓库 dashboard.check_repo_stats=检查所有仓库统计 dashboard.archive_cleanup=删除旧的仓库存档 +dashboard.deleted_branches_cleanup=清理已删除的分支 dashboard.update_migration_poster_id=更新迁移的发表者ID +dashboard.git_gc_repos=对仓库进行垃圾回收 +dashboard.resync_all_sshkeys=使用 Gitea 的 SSH 密钥更新「.ssh/authorized_keys」文件。 +dashboard.resync_all_sshprincipals=使用 Gitea 的 SSH 规则更新「.ssh/authorized_principals」文件。 dashboard.reinit_missing_repos=重新初始化所有丢失的 Git 仓库存在的记录 dashboard.sync_external_users=同步外部用户数据 dashboard.cleanup_hook_task_table=清理 hook_task 表 +dashboard.cleanup_packages=清理过期的软件包 dashboard.cleanup_actions=清理过期的工作流资源 dashboard.server_uptime=服务运行时间 dashboard.current_goroutine=当前 Goroutines 数量 @@ -2907,8 +2984,10 @@ dashboard.total_gc_pause=GC 暂停时间总量 dashboard.last_gc_pause=上次 GC 暂停时间 dashboard.gc_times=GC 执行次数 dashboard.delete_old_actions=从数据库中删除所有旧工作流记录 +dashboard.delete_old_actions.started=已开始从数据库中删除所有旧工作流记录。 dashboard.update_checker=更新检查器 dashboard.delete_old_system_notices=从数据库中删除所有旧系统通知 +dashboard.gc_lfs=垃圾回收 LFS 元数据 dashboard.stop_zombie_tasks=停止僵尸工作流任务 dashboard.stop_endless_tasks=停止无限循环的工作流任务 dashboard.cancel_abandoned_jobs=取消已放弃的工作流任务 @@ -2932,6 +3011,7 @@ users.2fa=两步验证 users.repos=仓库数 users.created=创建时间 users.last_login=上次登录 +users.never_login=从未登录 users.send_register_notify=发送注册通知 users.new_success=用户账户「%s」已创建。 users.edit=修改 @@ -2958,6 +3038,7 @@ users.still_own_repo=此用户仍然拥有一个或多个仓库。必须首先 users.still_has_org=此用户是组织的成员。必须先从组织中删除用户。 users.purge=清理用户 users.purge_help=强制删除用户和用户拥有的任何仓库、组织和软件包。所有评论也将删除。 +users.still_own_packages=此用户仍然拥有一个或多个软件包,请先删除这些软件包。 users.deletion_success=用户帐户已删除。 users.reset_2fa=重置两步验证 users.list_status_filter.menu_text=过滤 @@ -2977,7 +3058,11 @@ users.details=用户详细信息 emails.email_manage_panel=邮件管理 emails.primary=主要的 emails.activated=已激活 +emails.filter_sort.email=邮箱 +emails.filter_sort.email_reverse=邮箱(倒序) emails.filter_sort.name=用户名 +emails.filter_sort.name_reverse=用户名(倒序) +emails.updated=邮箱已更新 emails.not_updated=无法更新请求的邮箱地址:%v emails.duplicate_active=此邮箱地址已被另一个用户激活使用。 emails.change_email_header=更新邮箱属性 @@ -2985,6 +3070,7 @@ emails.change_email_text=您确定要更新该邮箱地址吗? emails.delete=删除邮箱 emails.delete_desc=您确定要删除该邮箱地址? emails.deletion_success=邮箱地址已删除。 +emails.delete_primary_email_error=您不能删除主邮箱。 orgs.org_manage_panel=组织管理 orgs.name=名称 @@ -3098,7 +3184,11 @@ auths.oauth2_required_claim_name_helper=设置此名称,只有具有此名称 auths.oauth2_required_claim_value=必须填写 Claim 声明的值 auths.oauth2_required_claim_value_helper=设置此值,只有拥有对应的声明(Claim)的名称和值的用户才被允许从此源登录 auths.oauth2_group_claim_name=用于提供用户组名称的 Claim 声明名称。(可选) +auths.oauth2_full_name_claim_name=全名声明名称。(可选,如果设置,用户的全名将始终与此声明同步) auths.oauth2_ssh_public_key_claim_name=SSH 公钥声明名称 +auths.oauth2_admin_group=管理员用户组的 Claim 声明值。(可选 - 需要上面的声明名称) +auths.oauth2_restricted_group=受限用户组的 Claim 声明值。(可选 - 需要上面的声明名称) +auths.oauth2_map_group_to_team=映射声明的组到组织团队。(可选 - 要求在上面填写声明的名字) auths.oauth2_map_group_to_team_removal=如果用户不属于相应的组,从已同步团队中移除用户 auths.enable_auto_register=允许用户自动注册 auths.sspi_auto_create_users=自动创建用户 @@ -3112,6 +3202,7 @@ auths.tips.oauth2.general=OAuth2 认证 auths.tips.oauth2.general.tip=当注册新的 OAuth2 身份验证时,回调/重定向 URL 应该是: auths.tip.oauth2_provider=OAuth2 提供程序 auths.tip.bitbucket=在 %s 注册新的 OAuth 使用者同时添加权限「账号」-「读取」 +auths.tip.nextcloud=使用下面的菜单「设置 -> 安全 -> OAuth 2.0 客户端」在您的实例上注册一个新的 OAuth 客户端 auths.tip.dropbox=在 %s 上创建一个新的应用程序 auths.tip.facebook=在 %s 注册一个新的应用,并添加产品「Facebook 登录」 auths.tip.github=在 %s 注册一个 OAuth 应用程序 @@ -3221,6 +3312,7 @@ config.mailer_sendmail_path=Sendmail 路径 config.mailer_sendmail_args=Sendmail 的额外参数 config.mailer_sendmail_timeout=Sendmail 超时 config.mailer_use_dummy=Dummy +config.test_email_placeholder=电子邮箱(例如,test@example.com) config.send_test_mail=发送测试邮件 config.send_test_mail_submit=发送 config.test_mail_failed=发送测试邮件至「%s」失败:%v @@ -3294,6 +3386,7 @@ monitor.start=开始时间 monitor.execute_time=执行时长 monitor.last_execution_result=结果 monitor.process.cancel=中止进程 +monitor.process.cancel_desc=中止一个进程可能导致数据丢失 monitor.process.children=子进程 monitor.queues=队列 @@ -3308,6 +3401,7 @@ monitor.queue.numberinqueue=队列中的数量 monitor.queue.review_add=查看 / 添加工作者 monitor.queue.settings.title=池设置 monitor.queue.settings.desc=因为工作者队列阻塞,池正在动态扩展。 +monitor.queue.settings.maxnumberworkers=最大工作者数量 monitor.queue.settings.maxnumberworkers.placeholder=当前 %[1]d monitor.queue.settings.maxnumberworkers.error=最大工作者数必须是数字 monitor.queue.settings.submit=更新设置 @@ -3333,6 +3427,10 @@ notices.delete_success=系统通知已删除。 self_check.no_problem_found=尚未发现问题。 self_check.startup_warnings=启动警告: self_check.database_collation_mismatch=期望数据库使用的校验方式:%s +self_check.database_collation_case_insensitive=数据库正在使用一个校验 %s,这是一个不敏感的校验。虽然 Gitea 可以与它合作,但可能有一些罕见的情况不如预期的那样起作用。 +self_check.database_inconsistent_collation_columns=数据库正在使用 %s 的排序规则,但是这些列使用了不匹配的排序规则。这可能会造成一些意外问题。 +self_check.database_fix_mysql=对于 MySQL/MariaDB 用户,您可以使用「gitea doctor convert」命令来解决校验问题。 或者您也可以通过「ALTER ... COLLATE ...」这样的 SQL 来手动解决这个问题。 +self_check.database_fix_mssql=对于 MSSQL 用户,您现在只能通过「ALTER ... COLLATE ...」SQL 手动解决这个问题。 self_check.location_origin_mismatch=当前 URL(%[1]s)与 Gitea 的 URL(%[2]s)不匹配 。 如果您正在使用反向代理,请确保设置正确的「Host」和「X-Forwarded-Proto」标头。 [action] @@ -3485,6 +3583,7 @@ container.labels=标签 container.labels.key=键 container.labels.value=值 cran.install=要安装软件包,请运行以下命令: +debian.registry=从命令行设置此注册中心: debian.registry.info=从下面的列表中选择 $distribution 和 $component。 debian.install=要安装软件包,请运行以下命令: debian.repository=仓库信息 @@ -3493,6 +3592,7 @@ debian.repository.components=组件 debian.repository.architectures=架构 generic.download=从命令行下载软件包: go.install=通过命令行安装软件包: +helm.registry=从命令行设置此注册中心: helm.install=要安装包,请运行以下命令: maven.install2=通过命令行运行: maven.download=要下载依赖项,请通过命令行运行: @@ -3631,6 +3731,7 @@ runners.delete_runner=删除此运行器 runners.delete_runner_success=运行器删除成功 runners.delete_runner_failed=运行器删除失败 runners.delete_runner_header=确认要删除此运行器 +runners.delete_runner_notice=如果一个任务正在运行在此运行器上,它将被终止并标记为失败。它可能会打断正在构建的工作流。 runners.none=无可用运行器 runners.status.unspecified=未知 runners.status.idle=空闲 diff --git a/package-lock.json b/package-lock.json index 0cee3699a8..7d67cfa83a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -103,7 +103,7 @@ "material-icon-theme": "5.24.0", "nolyfill": "1.0.44", "postcss-html": "1.8.0", - "stylelint": "16.23.0", + "stylelint": "16.23.1", "stylelint-config-recommended": "17.0.0", "stylelint-declaration-block-no-ignored-properties": "2.8.0", "stylelint-declaration-strict-value": "1.10.11", @@ -12263,9 +12263,9 @@ "license": "ISC" }, "node_modules/stylelint": { - "version": "16.23.0", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.23.0.tgz", - "integrity": "sha512-69T5aS2LUY306ekt1Q1oaSPwz/jaG9HjyMix3UMrai1iEbuOafBe2Dh8xlyczrxFAy89qcKyZWWtc42XLx3Bbw==", + "version": "16.23.1", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.23.1.tgz", + "integrity": "sha512-dNvDTsKV1U2YtiUDfe9d2gp902veFeo3ecCWdGlmLm2WFrAV0+L5LoOj/qHSBABQwMsZPJwfC4bf39mQm1S5zw==", "dev": true, "funding": [ { diff --git a/package.json b/package.json index 8d12276d27..8109c40eb0 100644 --- a/package.json +++ b/package.json @@ -102,7 +102,7 @@ "material-icon-theme": "5.24.0", "nolyfill": "1.0.44", "postcss-html": "1.8.0", - "stylelint": "16.23.0", + "stylelint": "16.23.1", "stylelint-config-recommended": "17.0.0", "stylelint-declaration-block-no-ignored-properties": "2.8.0", "stylelint-declaration-strict-value": "1.10.11", diff --git a/routers/api/v1/repo/repo.go b/routers/api/v1/repo/repo.go index 7b3858ccb1..e69b7729a0 100644 --- a/routers/api/v1/repo/repo.go +++ b/routers/api/v1/repo/repo.go @@ -869,6 +869,18 @@ func updateRepoUnits(ctx *context.APIContext, opts api.EditRepoOption) error { } } + if opts.HasCode != nil && !unit_model.TypeCode.UnitGlobalDisabled() { + if *opts.HasCode { + units = append(units, repo_model.RepoUnit{ + RepoID: repo.ID, + Type: unit_model.TypeCode, + Config: &repo_model.UnitConfig{}, + }) + } else { + deleteUnitTypes = append(deleteUnitTypes, unit_model.TypeCode) + } + } + if opts.HasPullRequests != nil && !unit_model.TypePullRequests.UnitGlobalDisabled() { if *opts.HasPullRequests { // We do allow setting individual PR settings through the API, so diff --git a/stylelint.config.js b/stylelint.config.js index c57c1fd3a3..bd11307b53 100644 --- a/stylelint.config.js +++ b/stylelint.config.js @@ -10,6 +10,9 @@ const cssVarFiles = [ export default defineConfig({ extends: 'stylelint-config-recommended', + reportUnscopedDisables: true, + reportNeedlessDisables: true, + reportInvalidScopeDisables: true, plugins: [ 'stylelint-declaration-strict-value', 'stylelint-declaration-block-no-ignored-properties', diff --git a/templates/repo/issue/view_content/conversation.tmpl b/templates/repo/issue/view_content/conversation.tmpl index 07051d5ec0..189b9d6259 100644 --- a/templates/repo/issue/view_content/conversation.tmpl +++ b/templates/repo/issue/view_content/conversation.tmpl @@ -15,7 +15,7 @@ </span> {{end}} </div> - <div> + <div class="tw-flex tw-items-center"> {{if or $invalid $resolved}} <button id="show-outdated-{{$comment.ID}}" data-comment="{{$comment.ID}}" class="{{if not $resolved}}tw-hidden{{end}} btn tiny show-outdated"> {{svg "octicon-unfold" 16 "tw-mr-2"}} diff --git a/templates/swagger/v1_json.tmpl b/templates/swagger/v1_json.tmpl index 35c743dcd4..749d86901d 100644 --- a/templates/swagger/v1_json.tmpl +++ b/templates/swagger/v1_json.tmpl @@ -24333,6 +24333,11 @@ "type": "boolean", "x-go-name": "HasActions" }, + "has_code": { + "description": "either `true` to enable code for this repository or `false` to disable it.", + "type": "boolean", + "x-go-name": "HasCode" + }, "has_issues": { "description": "either `true` to enable issues for this repository or `false` to disable them.", "type": "boolean", @@ -27375,6 +27380,10 @@ "type": "boolean", "x-go-name": "HasActions" }, + "has_code": { + "type": "boolean", + "x-go-name": "HasCode" + }, "has_issues": { "type": "boolean", "x-go-name": "HasIssues" diff --git a/tests/integration/api_repo_edit_test.go b/tests/integration/api_repo_edit_test.go index e228da26e9..7fe59c0d09 100644 --- a/tests/integration/api_repo_edit_test.go +++ b/tests/integration/api_repo_edit_test.go @@ -76,12 +76,36 @@ func getRepoEditOptionFromRepo(repo *repo_model.Repository) *api.EditRepoOption allowFastForwardOnly = config.AllowFastForwardOnly } archived := repo.IsArchived + hasProjects := false + var projectsMode *string + if unit, err := repo.GetUnit(db.DefaultContext, unit_model.TypeProjects); err == nil && unit != nil { + hasProjects = true + pm := string(unit.ProjectsConfig().ProjectsMode) + projectsMode = &pm + } + hasCode := repo.UnitEnabled(db.DefaultContext, unit_model.TypeCode) + hasPackages := repo.UnitEnabled(db.DefaultContext, unit_model.TypePackages) + hasReleases := repo.UnitEnabled(db.DefaultContext, unit_model.TypeReleases) + hasActions := false + if unit, err := repo.GetUnit(db.DefaultContext, unit_model.TypeActions); err == nil && unit != nil { + hasActions = true + // TODO: expose action config of repo to api + // actionsConfig = &api.RepoActionsConfig{ + // DisabledWorkflows: unit.ActionsConfig().DisabledWorkflows, + // } + } return &api.EditRepoOption{ Name: &name, Description: &description, Website: &website, Private: &private, HasIssues: &hasIssues, + HasProjects: &hasProjects, + ProjectsMode: projectsMode, + HasCode: &hasCode, + HasPackages: &hasPackages, + HasReleases: &hasReleases, + HasActions: &hasActions, ExternalTracker: externalTracker, InternalTracker: internalTracker, HasWiki: &hasWiki, @@ -108,6 +132,11 @@ func getNewRepoEditOption(opts *api.EditRepoOption) *api.EditRepoOption { private := !*opts.Private hasIssues := !*opts.HasIssues hasWiki := !*opts.HasWiki + hasProjects := !*opts.HasProjects + hasCode := !*opts.HasCode + hasPackages := !*opts.HasPackages + hasReleases := !*opts.HasReleases + hasActions := !*opts.HasActions defaultBranch := "master" hasPullRequests := !*opts.HasPullRequests ignoreWhitespaceConflicts := !*opts.IgnoreWhitespaceConflicts @@ -125,6 +154,11 @@ func getNewRepoEditOption(opts *api.EditRepoOption) *api.EditRepoOption { DefaultBranch: &defaultBranch, HasIssues: &hasIssues, HasWiki: &hasWiki, + HasProjects: &hasProjects, + HasCode: &hasCode, + HasPackages: &hasPackages, + HasReleases: &hasReleases, + HasActions: &hasActions, HasPullRequests: &hasPullRequests, IgnoreWhitespaceConflicts: &ignoreWhitespaceConflicts, AllowMerge: &allowMerge, @@ -156,6 +190,11 @@ func TestAPIRepoEdit(t *testing.T) { // Test editing a repo1 which user2 owns, changing name and many properties origRepoEditOption := getRepoEditOptionFromRepo(repo1) + assert.True(t, *origRepoEditOption.HasCode) + assert.True(t, *origRepoEditOption.HasPackages) + assert.True(t, *origRepoEditOption.HasProjects) + assert.True(t, *origRepoEditOption.HasReleases) + assert.True(t, *origRepoEditOption.HasActions) repoEditOption := getNewRepoEditOption(origRepoEditOption) req := NewRequestWithJSON(t, "PATCH", fmt.Sprintf("/api/v1/repos/%s/%s", user2.Name, repo1.Name), &repoEditOption). AddTokenAuth(token2) @@ -177,6 +216,11 @@ func TestAPIRepoEdit(t *testing.T) { assert.Equal(t, *repoEditOption.Archived, *repo1editedOption.Archived) assert.Equal(t, *repoEditOption.Private, *repo1editedOption.Private) assert.Equal(t, *repoEditOption.HasWiki, *repo1editedOption.HasWiki) + assert.Equal(t, *repoEditOption.HasCode, *repo1editedOption.HasCode) + assert.Equal(t, *repoEditOption.HasPackages, *repo1editedOption.HasPackages) + assert.Equal(t, *repoEditOption.HasProjects, *repo1editedOption.HasProjects) + assert.Equal(t, *repoEditOption.HasReleases, *repo1editedOption.HasReleases) + assert.Equal(t, *repoEditOption.HasActions, *repo1editedOption.HasActions) // Test editing repo1 to use internal issue and wiki (default) *repoEditOption.HasIssues = true @@ -224,6 +268,11 @@ func TestAPIRepoEdit(t *testing.T) { assert.Equal(t, *repo1editedOption.ExternalTracker, *repoEditOption.ExternalTracker) assert.True(t, *repo1editedOption.HasWiki) assert.Equal(t, *repo1editedOption.ExternalWiki, *repoEditOption.ExternalWiki) + assert.False(t, *repo1editedOption.HasCode) + assert.False(t, *repo1editedOption.HasPackages) + assert.False(t, *repo1editedOption.HasProjects) + assert.False(t, *repo1editedOption.HasReleases) + assert.False(t, *repo1editedOption.HasActions) repoEditOption.ExternalTracker.ExternalTrackerStyle = "regexp" repoEditOption.ExternalTracker.ExternalTrackerRegexpPattern = `(\d+)` @@ -272,6 +321,11 @@ func TestAPIRepoEdit(t *testing.T) { assert.NotNil(t, *repo1editedOption.ExternalTracker) assert.True(t, *repo1editedOption.HasWiki) assert.NotNil(t, *repo1editedOption.ExternalWiki) + assert.False(t, *repo1editedOption.HasCode) + assert.False(t, *repo1editedOption.HasPackages) + assert.False(t, *repo1editedOption.HasProjects) + assert.False(t, *repo1editedOption.HasReleases) + assert.False(t, *repo1editedOption.HasActions) // reset repo in db req = NewRequestWithJSON(t, "PATCH", fmt.Sprintf("/api/v1/repos/%s/%s", user2.Name, *repoEditOption.Name), &origRepoEditOption). diff --git a/web_src/css/features/colorpicker.css b/web_src/css/features/colorpicker.css index 4c517e6348..a353532f4e 100644 --- a/web_src/css/features/colorpicker.css +++ b/web_src/css/features/colorpicker.css @@ -15,7 +15,7 @@ top: 50%; transform: translateY(-50%); border-radius: 2px; - background: repeating-linear-gradient(45deg, #aaa 25%, transparent 25%, transparent 75%, #aaa 75%, #aaa), repeating-linear-gradient(45deg, #aaa 25%, #fff 25%, #fff 75%, #aaa 75%, #aaa); /* stylelint-disable-line scale-unlimited/declaration-strict-value */ + background: repeating-linear-gradient(45deg, #aaa 25%, transparent 25%, transparent 75%, #aaa 75%, #aaa), repeating-linear-gradient(45deg, #aaa 25%, #fff 25%, #fff 75%, #aaa 75%, #aaa); background-position: 0 0, 4px 4px; background-size: 8px 8px; } diff --git a/web_src/css/repo.css b/web_src/css/repo.css index 14db7d07e6..5238e3a2e5 100644 --- a/web_src/css/repo.css +++ b/web_src/css/repo.css @@ -1672,7 +1672,7 @@ tbody.commit-list { .diff-file-header .file-link { max-width: fit-content; display: -webkit-box; - -webkit-box-orient: vertical; /* stylelint-disable property-no-deprecated -- https://github.com/stylelint/stylelint/issues/8698 */ + -webkit-box-orient: vertical; -webkit-line-clamp: 2; overflow: hidden; overflow-wrap: anywhere; |