diff --git a/docs/content/usage/actions/act-runner.zh-cn.md b/docs/content/usage/actions/act-runner.zh-cn.md
index f1404bf0b4db4..11b69960f78af 100644
--- a/docs/content/usage/actions/act-runner.zh-cn.md
+++ b/docs/content/usage/actions/act-runner.zh-cn.md
@@ -208,12 +208,12 @@ services:
```yaml
cache:
-enabled: true
-dir: ""
-# 使用步骤 1. 获取的 LAN IP
-host: "192.168.8.17"
-# 使用步骤 2. 获取的端口号
-port: 8088
+ enabled: true
+ dir: ""
+ # 使用步骤 1. 获取的 LAN IP
+ host: "192.168.8.17"
+ # 使用步骤 2. 获取的端口号
+ port: 8088
```
- 4.启动容器时, 将 Cache 端口映射至主机。
diff --git a/models/db/iterate.go b/models/db/iterate.go
index fc8c78d83ea36..e1caefa72b8bf 100644
--- a/models/db/iterate.go
+++ b/models/db/iterate.go
@@ -17,22 +17,27 @@ func Iterate[Bean any](ctx context.Context, cond builder.Cond, f func(ctx contex
batchSize := setting.Database.IterateBufferSize
sess := GetEngine(ctx)
for {
- beans := make([]*Bean, 0, batchSize)
- if cond != nil {
- sess = sess.Where(cond)
- }
- if err := sess.Limit(batchSize, start).Find(&beans); err != nil {
- return err
- }
- if len(beans) == 0 {
- return nil
- }
- start += len(beans)
-
- for _, bean := range beans {
- if err := f(ctx, bean); err != nil {
+ select {
+ case <-ctx.Done():
+ return ctx.Err()
+ default:
+ beans := make([]*Bean, 0, batchSize)
+ if cond != nil {
+ sess = sess.Where(cond)
+ }
+ if err := sess.Limit(batchSize, start).Find(&beans); err != nil {
return err
}
+ if len(beans) == 0 {
+ return nil
+ }
+ start += len(beans)
+
+ for _, bean := range beans {
+ if err := f(ctx, bean); err != nil {
+ return err
+ }
+ }
}
}
}
diff --git a/models/issues/comment.go b/models/issues/comment.go
index 901958dc5d5fe..8e06838f73a32 100644
--- a/models/issues/comment.go
+++ b/models/issues/comment.go
@@ -349,7 +349,7 @@ func (c *Comment) LoadPoster(ctx context.Context) (err error) {
c.Poster, err = user_model.GetPossibleUserByID(ctx, c.PosterID)
if err != nil {
if user_model.IsErrUserNotExist(err) {
- c.PosterID = -1
+ c.PosterID = user_model.GhostUserID
c.Poster = user_model.NewGhostUser()
} else {
log.Error("getUserByID[%d]: %v", c.ID, err)
diff --git a/models/issues/issue.go b/models/issues/issue.go
index 6d9c8727b33f0..8655b9de3fe42 100644
--- a/models/issues/issue.go
+++ b/models/issues/issue.go
@@ -219,7 +219,7 @@ func (issue *Issue) LoadPoster(ctx context.Context) (err error) {
if issue.Poster == nil && issue.PosterID != 0 {
issue.Poster, err = user_model.GetPossibleUserByID(ctx, issue.PosterID)
if err != nil {
- issue.PosterID = -1
+ issue.PosterID = user_model.GhostUserID
issue.Poster = user_model.NewGhostUser()
if !user_model.IsErrUserNotExist(err) {
return fmt.Errorf("getUserByID.(poster) [%d]: %w", issue.PosterID, err)
diff --git a/models/issues/issue_project.go b/models/issues/issue_project.go
index 7906c3eace723..cc7ffb356a6ca 100644
--- a/models/issues/issue_project.go
+++ b/models/issues/issue_project.go
@@ -51,7 +51,7 @@ func (issue *Issue) ProjectBoardID(ctx context.Context) int64 {
func LoadIssuesFromBoard(ctx context.Context, b *project_model.Board) (IssueList, error) {
issueList := make(IssueList, 0, 10)
- if b.ID != 0 {
+ if b.ID > 0 {
issues, err := Issues(ctx, &IssuesOptions{
ProjectBoardID: b.ID,
ProjectID: b.ProjectID,
@@ -65,7 +65,7 @@ func LoadIssuesFromBoard(ctx context.Context, b *project_model.Board) (IssueList
if b.Default {
issues, err := Issues(ctx, &IssuesOptions{
- ProjectBoardID: -1, // Issues without ProjectBoardID
+ ProjectBoardID: db.NoConditionID,
ProjectID: b.ProjectID,
SortType: "project-column-sorting",
})
@@ -150,30 +150,3 @@ func addUpdateIssueProject(ctx context.Context, issue *Issue, doer *user_model.U
ProjectID: newProjectID,
})
}
-
-// MoveIssueAcrossProjectBoards move a card from one board to another
-func MoveIssueAcrossProjectBoards(ctx context.Context, issue *Issue, board *project_model.Board) error {
- ctx, committer, err := db.TxContext(ctx)
- if err != nil {
- return err
- }
- defer committer.Close()
- sess := db.GetEngine(ctx)
-
- var pis project_model.ProjectIssue
- has, err := sess.Where("issue_id=?", issue.ID).Get(&pis)
- if err != nil {
- return err
- }
-
- if !has {
- return fmt.Errorf("issue has to be added to a project first")
- }
-
- pis.ProjectBoardID = board.ID
- if _, err := sess.ID(pis.ID).Cols("project_board_id").Update(&pis); err != nil {
- return err
- }
-
- return committer.Commit()
-}
diff --git a/models/issues/issue_search.go b/models/issues/issue_search.go
index 3e878ff1e7a09..9b6bf117b1f84 100644
--- a/models/issues/issue_search.go
+++ b/models/issues/issue_search.go
@@ -180,6 +180,17 @@ func applyProjectCondition(sess *xorm.Session, opts *IssuesOptions) *xorm.Sessio
return sess
}
+func applyProjectBoardCondition(sess *xorm.Session, opts *IssuesOptions) *xorm.Session {
+ // opts.ProjectBoardID == 0 means all project boards,
+ // do not need to apply any condition
+ if opts.ProjectBoardID > 0 {
+ sess.In("issue.id", builder.Select("issue_id").From("project_issue").Where(builder.Eq{"project_board_id": opts.ProjectBoardID}))
+ } else if opts.ProjectBoardID == db.NoConditionID {
+ sess.In("issue.id", builder.Select("issue_id").From("project_issue").Where(builder.Neq{"project_board_id": 0}))
+ }
+ return sess
+}
+
func applyRepoConditions(sess *xorm.Session, opts *IssuesOptions) *xorm.Session {
if len(opts.RepoIDs) == 1 {
opts.RepoCond = builder.Eq{"issue.repo_id": opts.RepoIDs[0]}
@@ -240,13 +251,7 @@ func applyConditions(sess *xorm.Session, opts *IssuesOptions) *xorm.Session {
applyProjectCondition(sess, opts)
- if opts.ProjectBoardID != 0 {
- if opts.ProjectBoardID > 0 {
- sess.In("issue.id", builder.Select("issue_id").From("project_issue").Where(builder.Eq{"project_board_id": opts.ProjectBoardID}))
- } else {
- sess.In("issue.id", builder.Select("issue_id").From("project_issue").Where(builder.Eq{"project_board_id": 0}))
- }
- }
+ applyProjectBoardCondition(sess, opts)
switch opts.IsPull {
case util.OptionalBoolTrue:
diff --git a/models/issues/pull.go b/models/issues/pull.go
index 971ce049c3112..2379c61976635 100644
--- a/models/issues/pull.go
+++ b/models/issues/pull.go
@@ -272,7 +272,7 @@ func (pr *PullRequest) LoadAttributes(ctx context.Context) (err error) {
if pr.HasMerged && pr.Merger == nil {
pr.Merger, err = user_model.GetUserByID(ctx, pr.MergerID)
if user_model.IsErrUserNotExist(err) {
- pr.MergerID = -1
+ pr.MergerID = user_model.GhostUserID
pr.Merger = user_model.NewGhostUser()
} else if err != nil {
return fmt.Errorf("getUserByID [%d]: %w", pr.MergerID, err)
diff --git a/models/user/avatar.go b/models/user/avatar.go
index 8c9abecbea9cb..c6937d7b51f76 100644
--- a/models/user/avatar.go
+++ b/models/user/avatar.go
@@ -58,8 +58,7 @@ func GenerateRandomAvatar(ctx context.Context, u *User) error {
// AvatarLinkWithSize returns a link to the user's avatar with size. size <= 0 means default size
func (u *User) AvatarLinkWithSize(ctx context.Context, size int) string {
- if u.ID == -1 {
- // ghost user
+ if u.IsGhost() {
return avatars.DefaultAvatarLink()
}
diff --git a/models/user/user.go b/models/user/user.go
index 5e88077ee122e..b02d4eaddf565 100644
--- a/models/user/user.go
+++ b/models/user/user.go
@@ -933,7 +933,7 @@ func GetUserByIDs(ctx context.Context, ids []int64) ([]*User, error) {
// GetPossibleUserByID returns the user if id > 0 or return system usrs if id < 0
func GetPossibleUserByID(ctx context.Context, id int64) (*User, error) {
switch id {
- case -1:
+ case GhostUserID:
return NewGhostUser(), nil
case ActionsUserID:
return NewActionsUser(), nil
@@ -949,7 +949,7 @@ func GetPossibleUserByIDs(ctx context.Context, ids []int64) ([]*User, error) {
uniqueIDs := container.SetOf(ids...)
users := make([]*User, 0, len(ids))
_ = uniqueIDs.Remove(0)
- if uniqueIDs.Remove(-1) {
+ if uniqueIDs.Remove(GhostUserID) {
users = append(users, NewGhostUser())
}
if uniqueIDs.Remove(ActionsUserID) {
diff --git a/models/user/user_system.go b/models/user/user_system.go
index f54f4e3ffb5bb..612cdb2caef26 100644
--- a/models/user/user_system.go
+++ b/models/user/user_system.go
@@ -9,12 +9,18 @@ import (
"code.gitea.io/gitea/modules/structs"
)
+const (
+ GhostUserID = -1
+ GhostUserName = "Ghost"
+ GhostUserLowerName = "ghost"
+)
+
// NewGhostUser creates and returns a fake user for someone has deleted their account.
func NewGhostUser() *User {
return &User{
- ID: -1,
- Name: "Ghost",
- LowerName: "ghost",
+ ID: GhostUserID,
+ Name: GhostUserName,
+ LowerName: GhostUserLowerName,
}
}
@@ -23,13 +29,13 @@ func (u *User) IsGhost() bool {
if u == nil {
return false
}
- return u.ID == -1 && u.Name == "Ghost"
+ return u.ID == GhostUserID && u.Name == GhostUserName
}
// NewReplaceUser creates and returns a fake user for external user
func NewReplaceUser(name string) *User {
return &User{
- ID: -1,
+ ID: 0,
Name: name,
LowerName: strings.ToLower(name),
}
diff --git a/modules/doctor/repository.go b/modules/doctor/repository.go
index aa3f064ddd84c..d69ba2048bb2e 100644
--- a/modules/doctor/repository.go
+++ b/modules/doctor/repository.go
@@ -37,24 +37,29 @@ func deleteOrphanedRepos(ctx context.Context) (int64, error) {
adminUser := &user_model.User{IsAdmin: true}
for {
- var ids []int64
- if err := e.Table("`repository`").
- Join("LEFT", "`user`", "repository.owner_id=user.id").
- Where(builder.IsNull{"`user`.id"}).
- Select("`repository`.id").Limit(batchSize).Find(&ids); err != nil {
- return deleted, err
- }
+ select {
+ case <-ctx.Done():
+ return deleted, ctx.Err()
+ default:
+ var ids []int64
+ if err := e.Table("`repository`").
+ Join("LEFT", "`user`", "repository.owner_id=user.id").
+ Where(builder.IsNull{"`user`.id"}).
+ Select("`repository`.id").Limit(batchSize).Find(&ids); err != nil {
+ return deleted, err
+ }
- // if we don't get ids we have deleted them all
- if len(ids) == 0 {
- return deleted, nil
- }
+ // if we don't get ids we have deleted them all
+ if len(ids) == 0 {
+ return deleted, nil
+ }
- for _, id := range ids {
- if err := repo_service.DeleteRepositoryDirectly(ctx, adminUser, id, true); err != nil {
- return deleted, err
+ for _, id := range ids {
+ if err := repo_service.DeleteRepositoryDirectly(ctx, adminUser, id, true); err != nil {
+ return deleted, err
+ }
+ deleted++
}
- deleted++
}
}
}
diff --git a/modules/indexer/issues/db/options.go b/modules/indexer/issues/db/options.go
index 4d3fa44ca6cf7..e149066494f52 100644
--- a/modules/indexer/issues/db/options.go
+++ b/modules/indexer/issues/db/options.go
@@ -96,7 +96,6 @@ func ToDBOptions(ctx context.Context, options *internal.SearchOptions) (*issue_m
}
if len(options.IncludedLabelIDs) == 0 && len(options.IncludedAnyLabelIDs) > 0 {
- _ = ctx // issue_model.GetLabelsByIDs should be called with ctx, this line can be removed when it's done.
labels, err := issue_model.GetLabelsByIDs(ctx, options.IncludedAnyLabelIDs, "name")
if err != nil {
return nil, fmt.Errorf("GetLabelsByIDs: %v", err)
diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini
index 84c457e9e848b..b0c21816ae936 100644
--- a/options/locale/locale_en-US.ini
+++ b/options/locale/locale_en-US.ini
@@ -91,6 +91,7 @@ remove = Remove
remove_all = Remove All
remove_label_str = Remove item "%s"
edit = Edit
+view = View
enabled = Enabled
disabled = Disabled
@@ -355,7 +356,6 @@ code_last_indexed_at = Last indexed %s
relevant_repositories_tooltip = Repositories that are forks or that have no topic, no icon, and no description are hidden.
relevant_repositories = Only relevant repositories are being shown, show unfiltered results.
-
[auth]
create_new_account = Register Account
register_helper_msg = Already have an account? Sign in now!
@@ -858,7 +858,7 @@ oauth2_client_secret_hint = The secret will not be shown again after you leave o
oauth2_application_edit = Edit
oauth2_application_create_description = OAuth2 applications gives your third-party application access to user accounts on this instance.
oauth2_application_remove_description = Removing an OAuth2 application will prevent it from accessing authorized user accounts on this instance. Continue?
-oauth2_application_locked = Gitea pre-registers some OAuth2 applications on startup if enabled in config. To prevent unexpected bahavior, these can neither be edited nor removed. Please refer to the OAuth2 documentation for more information.
+oauth2_application_locked = Gitea pre-registers some OAuth2 applications on startup if enabled in config. To prevent unexpected behavior, these can neither be edited nor removed. Please refer to the OAuth2 documentation for more information.
authorized_oauth2_applications = Authorized OAuth2 Applications
authorized_oauth2_applications_description = You have granted access to your personal Gitea account to these third party applications. Please revoke access for applications you no longer need.
@@ -926,7 +926,7 @@ visibility.private = Private
visibility.private_tooltip = Visible only to members of organizations you have joined
[repo]
-new_repo_helper = A repository contains all project files, including revision history. Already hosting one elsewhere? Migrate repository.
+new_repo_helper = A repository contains all project files, including revision history. Already hosting one elsewhere? Migrate repository.
owner = Owner
owner_helper = Some organizations may not show up in the dropdown due to a maximum repository count limit.
repo_name = Repository Name
@@ -1023,9 +1023,9 @@ tree_path_not_found_branch = Path %[1]s doesn't exist in branch %[2]s
tree_path_not_found_tag = Path %[1]s doesn't exist in tag %[2]s
transfer.accept = Accept Transfer
-transfer.accept_desc = Transfer to "%s"
+transfer.accept_desc = Transfer to "%s"
transfer.reject = Reject Transfer
-transfer.reject_desc = Cancel transfer to "%s"
+transfer.reject_desc = Cancel transfer to "%s"
transfer.no_permission_to_accept = You do not have permission to accept this transfer.
transfer.no_permission_to_reject = You do not have permission to reject this transfer.
@@ -1159,7 +1159,7 @@ releases = Releases
tag = Tag
released_this = released this
tagged_this = tagged this
-file.title = %s at %s
+file.title = %s at %s
file_raw = Raw
file_history = History
file_view_source = View Source
@@ -2507,7 +2507,6 @@ release.releases_for = Releases for %s
release.tags_for = Tags for %s
branch.name = Branch Name
-branch.search = Search branches
branch.already_exists = A branch named "%s" already exists.
branch.delete_head = Delete
branch.delete = Delete Branch "%s"
@@ -3174,8 +3173,8 @@ monitor.start = Start Time
monitor.execute_time = Execution Time
monitor.last_execution_result = Result
monitor.process.cancel = Cancel process
-monitor.process.cancel_desc = Cancelling a process may cause data loss
-monitor.process.cancel_notices = Cancel: %s?
+monitor.process.cancel_desc = Cancelling a process may cause data loss
+monitor.process.cancel_notices = Cancel: %s?
monitor.process.children = Children
monitor.queues = Queues
@@ -3239,7 +3238,7 @@ mirror_sync_create = synced new reference %[3]s to %[3]s from mirror
approve_pull_request = `approved %[3]s#%[2]s`
reject_pull_request = `suggested changes for %[3]s#%[2]s`
-publish_release = `released "%[4]s" at %[3]s`
+publish_release = `released "%[4]s" at %[3]s`
review_dismissed = `dismissed review from %[4]s for %[3]s#%[2]s`
review_dismissed_reason = Reason:
create_branch = created branch %[3]s in %[4]s
@@ -3565,7 +3564,7 @@ type-3.display_name = Organization Project
[git.filemode]
changed_filemode = %[1]s → %[2]s
-# Ordered by git filemode value, ascending. E.g. directory has "040000", normal file has "100644", …
+; Ordered by git filemode value, ascending. E.g. directory has "040000", normal file has "100644", …
directory = Directory
normal_file = Normal file
executable_file = Executable file
diff --git a/options/locale/locale_es-ES.ini b/options/locale/locale_es-ES.ini
index 5654d30cec0b5..9eb9e856cef14 100644
--- a/options/locale/locale_es-ES.ini
+++ b/options/locale/locale_es-ES.ini
@@ -1012,12 +1012,20 @@ delete_preexisting=Eliminar archivos preexistentes
delete_preexisting_content=Eliminar archivos en %s
delete_preexisting_success=Eliminó archivos no adoptados en %s
blame_prior=Ver la culpa antes de este cambio
+blame.ignore_revs=Ignorando revisiones en .git-blame-ignore-revs. Haga clic aquí para saltar y para a la vista normal.
+blame.ignore_revs.failed=No se pudieron ignorar las revisiones en .git-blame-ignore-revs.
+author_search_tooltip=Muestra un máximo de 30 usuarios
+tree_path_not_found_commit=La ruta %[1]s no existe en el commit %[2]s
+tree_path_not_found_branch=La ruta %[1]s no existe en la rama %[2]s
+tree_path_not_found_tag=La ruta %[1]s no existe en la etiqueta %[2]s
transfer.accept=Aceptar transferencia
transfer.accept_desc=`Transferir a "%s"`
transfer.reject=Rechazar transferencia
transfer.reject_desc=`Cancelar transferencia a "%s"`
+transfer.no_permission_to_accept=No tienes permiso para aceptar esta transferencia.
+transfer.no_permission_to_reject=No tienes permiso para rechazar esta transferencia.
desc.private=Privado
desc.public=Público
@@ -1038,11 +1046,15 @@ template.issue_labels=Etiquetas de incidencia
template.one_item=Debe seleccionar al menos un elemento de plantilla
template.invalid=Debe seleccionar una plantilla de repositorio
+archive.title=Este repositorio está archivado. Usted puede ver los archivos y clonarlos, pero no puede hace push o abrir incidencias o pull requests.
+archive.title_date=Este repositorio ha sido archivado en %s. Puedes ver archivos y clonarlo, pero no puedes hacer push o abrir incidencias o pull request.
archive.issue.nocomment=Este repositorio está archivado. No se puede comentar en las incidencias.
archive.pull.nocomment=Este repositorio está archivado. No se puede comentar en los pull requests.
form.reach_limit_of_creation_1=Ya han alcanzado su límite de %d repositorios.
form.reach_limit_of_creation_n=Ya han alcanzado su límite de repositorios de %d.
+form.name_reserved=El nombre del repositorio "%s" está reservado.
+form.name_pattern_not_allowed=El patrón "%s" no está permitido en un nombre de repositorio.
need_auth=Autorización
migrate_options=Opciones de migración
@@ -1052,6 +1064,7 @@ migrate_options_lfs=Migrar archivos LFS
migrate_options_lfs_endpoint.label=Punto final de LFS
migrate_options_lfs_endpoint.description=Migración intentará usar su mando Git para determinar el servidor LFS. También puede especificar un punto final personalizado si los datos LFS del repositorio se almacenan en otro lugar.
migrate_options_lfs_endpoint.description.local=También se admite una ruta del servidor local.
+migrate_options_lfs_endpoint.placeholder=Si se deja en blanco, el punto final se derivará de la URL de clonación
migrate_items=Objetos de migración
migrate_items_wiki=Wiki
migrate_items_milestones=Hitos
@@ -1067,6 +1080,7 @@ migrate.github_token_desc=Puedes poner uno o más tokens con comas separadas aqu
migrate.clone_local_path=o una ruta local del servidor
migrate.permission_denied=No te está permitido importar repositorios locales.
migrate.permission_denied_blocked=No puede importar desde hosts no permitidos, por favor pida al administrador que marque ALLOWED_DOMAINS/ALLOW_LOCALNETWORKS/BLOCKED_DOMAINS configuración.
+migrate.invalid_local_path=La ruta local no es válida. No existe o no es un directorio.
migrate.invalid_lfs_endpoint=El punto final de LFS no es válido.
migrate.failed=Migración fallida: %v
migrate.migrate_items_options=Un token de acceso es necesario para migrar elementos adicionales
@@ -1075,6 +1089,7 @@ migrated_from_fake=Migrado desde %[1]s
migrate.migrate=Migrar desde %s
migrate.migrating=Migrando desde %s...
migrate.migrating_failed=La migración desde %s ha fallado.
+migrate.migrating_failed.error=Error al migrar: %s
migrate.migrating_failed_no_addr=Migración fallida.
migrate.github.description=Migrar datos desde github.com u otra instancia de GitHub.
migrate.git.description=Migrar un repositorio sólo desde cualquier servicio Git.
@@ -1091,6 +1106,8 @@ migrate.migrating_labels=Migrando etiquetas
migrate.migrating_releases=Migrando Lanzamientos
migrate.migrating_issues=Migrando incidencias
migrate.migrating_pulls=Migrando Pull Requests
+migrate.cancel_migrating_title=Cancelar la migración
+migrate.cancel_migrating_confirm=¿Quiere cancelar esta migración?
mirror_from=réplica de
forked_from=forkeado de
@@ -1105,10 +1122,12 @@ unstar=Eliminar de favoritos
star=Destacar
fork=Fork
download_archive=Descargar repositorio
+more_operations=Más operaciones
no_desc=Sin descripción
quick_guide=Guía rápida
clone_this_repo=Clonar este repositorio
+cite_this_repo=Citar este repositorio
create_new_repo_command=Crear un nuevo repositorio desde línea de comandos
push_exist_repo=Hacer push de un repositorio existente desde línea de comandos
empty_message=Este repositorio no contiene ningún contenido.
@@ -1139,6 +1158,7 @@ release=Lanzamiento
releases=Lanzamientos
tag=Etiqueta
released_this=publicó esto
+tagged_this=etiquetó esto
file.title=%s de %s
file_raw=Original
file_history=Histórico
@@ -1147,6 +1167,10 @@ file_view_rendered=Ver procesado
file_view_raw=Ver original
file_permalink=Enlace permanente
file_too_large=El archivo es demasiado grande para ser mostrado.
+invisible_runes_header=`Este archivo contiene caracteres Unicode invisibles`
+invisible_runes_description=`Este archivo contiene caracteres Unicode invisibles que son indistinguibles para los humanos, pero que pueden ser procesados de forma diferente por un ordenador. Si crees que esto es intencional, puedes ignorar esta advertencia. Usa el botón de Escape para revelarlos.`
+ambiguous_runes_header=`Este archivo contiene caracteres Unicode ambiguos`
+ambiguous_runes_description=`Este archivo contiene caracteres Unicode que pueden confundirse con otros caracteres. Si crees que esto es intencional, puedes ignorar esta advertencia. Usa el botón de Escape para revelarlos.`
invisible_runes_line=`Esta línea tiene caracteres unicode invisibles`
ambiguous_runes_line=`Esta línea tiene caracteres unicode ambiguos`
ambiguous_character=`%[1]c [U+%04[1]X] es confusable con %[2]c [U+%04[2]X]`
@@ -1159,16 +1183,21 @@ video_not_supported_in_browser=Su navegador no soporta el tag video de HTML5.
audio_not_supported_in_browser=Su navegador no soporta el tag audio de HTML5.
stored_lfs=Almacenados con Git LFS
symbolic_link=Enlace simbólico
+executable_file=Archivo Ejecutable
commit_graph=Gráfico de commits
commit_graph.select=Seleccionar ramas
commit_graph.hide_pr_refs=Ocultar Pull Requests
commit_graph.monochrome=Mono
commit_graph.color=Color
+commit.contained_in=Este commit está contenido en:
+commit.contained_in_default_branch=Este commit es parte de la rama por defecto
+commit.load_referencing_branches_and_tags=Cargar ramas y etiquetas referenciando este commit
blame=Blame
download_file=Descargar archivo
normal_view=Vista normal
line=línea
lines=líneas
+from_comment=(comentario)
editor.add_file=Añadir archivo
editor.new_file=Nuevo Archivo
@@ -1183,6 +1212,7 @@ editor.must_be_on_a_branch=Debes estar en una rama para hacer o proponer cambios
editor.fork_before_edit=Debes hacer fork a este repositorio para hacer o proponer cambios a este archivo.
editor.delete_this_file=Eliminar archivo
editor.must_have_write_access=Debes tener permisos de escritura para hacer o proponer cambios a este archivo.
+editor.file_delete_success=El archivo "%s" ha sido eliminado.
editor.name_your_file=Nombre su archivo…
editor.filename_help=Añade un directorio escribiendo su nombre seguido de una barra ('/'). Para eliminar un directorio, presione la tecla de retroceso al comienzo del campo de entrada.
editor.or=o
@@ -1190,8 +1220,12 @@ editor.cancel_lower=Cancelar
editor.commit_signed_changes=Crear commit firmado de los cambios
editor.commit_changes=Crear commit de los cambios
editor.add_tmpl=Añadir ''
+editor.add=Añadir %s
+editor.update=Actualizar %s
+editor.delete=Eliminar %s
editor.patch=Aplicar parche
editor.patching=Parcheando:
+editor.fail_to_apply_patch=`No se puede aplicar el parche "%s"`
editor.new_patch=Nuevo parche
editor.commit_message_desc=Añadir una descripción extendida opcional…
editor.signoff_desc=Añadir un trailer firmado por el committer al final del mensaje de registro de confirmación.
@@ -1199,18 +1233,33 @@ editor.commit_directly_to_this_branch=Hacer commit directamente en la rama nueva rama para este commit y hacer un pull request.
editor.create_new_branch_np=Crear una nueva rama para este commit.
editor.propose_file_change=Proponer cambio de archivo
+editor.new_branch_name=Nombra la nueva rama para este commit
editor.new_branch_name_desc=Nombre de la rama nueva…
editor.cancel=Cancelar
editor.filename_cannot_be_empty=El nombre del archivo no puede estar vacío.
+editor.filename_is_invalid=El nombre de archivo no es válido: "%s".
+editor.branch_does_not_exist=La rama "%s" no existe en este repositorio.
+editor.branch_already_exists=La rama "%s" ya existe en este repositorio.
+editor.directory_is_a_file=Nombre del directorio "%s" ya se utiliza como nombre de archivo en este repositorio.
+editor.file_is_a_symlink=`"%s" es un enlace simbólico. Los enlaces simbólicos no se pueden editar en el editor web`
+editor.filename_is_a_directory=Nombre de archivo "%s" ya se utiliza como nombre de directorio en este repositorio.
+editor.file_editing_no_longer_exists=El archivo que se está editando, "%s", ya no existe en este repositorio.
+editor.file_deleting_no_longer_exists=El archivo que se está eliminando, "%s", ya no existe en este repositorio.
editor.file_changed_while_editing=Desde que comenzó a editar, el contenido del archivo ha sido cambiado. Haga clic aquí para ver qué ha cambiado o presione confirmar de nuevo para sobrescribir los cambios.
+editor.file_already_exists=Ya existe un archivo llamado "%s" en este repositorio.
editor.commit_empty_file_header=Commit un archivo vacío
editor.commit_empty_file_text=El archivo que estás tratando de commit está vacío. ¿Proceder?
editor.no_changes_to_show=No existen cambios para mostrar.
+editor.fail_to_update_file=Error al actualizar/crear el archivo "%s".
editor.fail_to_update_file_summary=Mensaje de error
editor.push_rejected_no_message=El cambio fue rechazado por el servidor sin un mensaje. Por favor, compruebe Git Hooks.
editor.push_rejected=El cambio fue rechazado por el servidor. Por favor, comprueba los Git Hooks.
editor.push_rejected_summary=Mensaje completo de rechazo
editor.add_subdir=Añadir un directorio…
+editor.unable_to_upload_files=Error al subir los archivos a "%s" con error: %v
+editor.upload_file_is_locked=El archivo "%s" está bloqueado por %s.
+editor.upload_files_to_dir=`Subir archivos a "%s"`
+editor.cannot_commit_to_protected_branch=No se puede hacer commit a la rama protegida "%s".
editor.no_commit_to_branch=No se puede hacer commit directamente a la rama porque:
editor.user_no_push_to_branch=El usuario no puede hacer push a la rama
editor.require_signed_commit=Esta rama requiere un commit firmado
@@ -1496,6 +1545,7 @@ issues.unsubscribe=Desuscribirse
issues.unpin_issue=Desanclar incidencia
issues.max_pinned=No puedes anclar más incidencias
issues.pin_comment=anclado este %s
+issues.unpin_comment=desanclado este %s
issues.lock=Bloquear conversación
issues.unlock=Desbloquear conversación
issues.lock.unknown_reason=No se puede bloquear una incidencia con una razón desconocida.
@@ -1527,6 +1577,7 @@ issues.tracking_already_started=`¡Ya has iniciado el seguimiento de tiempo en <
issues.stop_tracking=Detener temporizador
issues.stop_tracking_history=`dejó de trabajar %s`
issues.cancel_tracking=Descartar
+issues.cancel_tracking_history=`canceló el seguimiento de tiempo %s`
issues.add_time=Añadir tiempo gastado manualmente
issues.del_time=Eliminar este registro de tiempo
issues.add_time_short=Añadir tiempo gastado
@@ -1550,6 +1601,7 @@ issues.due_date_form=aaaa-mm-dd
issues.due_date_form_add=Añadir fecha de vencimiento
issues.due_date_form_edit=Editar
issues.due_date_form_remove=Eliminar
+issues.due_date_not_writer=Necesita acceso de escritura a este repositorio para actualizar la fecha límite de de una incidencia.
issues.due_date_not_set=Sin fecha de vencimiento.
issues.due_date_added=añadió la fecha de vencimiento %s %s
issues.due_date_modified=modificó la fecha de vencimiento de %[2]s a %[1]s %[3]s
@@ -1559,6 +1611,9 @@ issues.due_date_invalid=La fecha de vencimiento es inválida o está fuera de ra
issues.dependency.title=Dependencias
issues.dependency.issue_no_dependencies=No se han establecido dependencias.
issues.dependency.pr_no_dependencies=No se han establecido dependencias.
+issues.dependency.no_permission_1=No tienes permiso para leer la dependencia %d
+issues.dependency.no_permission_n=No tienes permiso para leer las dependencias %d
+issues.dependency.no_permission.can_remove=No tienes permiso para leer esta dependencia, pero puedes eliminarla
issues.dependency.add=Añadir dependencia…
issues.dependency.cancel=Cancelar
issues.dependency.remove=Eliminar
@@ -1570,6 +1625,7 @@ issues.dependency.issue_closing_blockedby=Cerrando esta incidencia esta bloquead
issues.dependency.issue_close_blocks=Esta incidencia bloquea el cierre de las siguientes incidencias
issues.dependency.pr_close_blocks=Este pull request bloquea el cierre de las siguientes incidencias
issues.dependency.issue_close_blocked=Necesita cerrar todos las incidencias que bloquean esta incidencia antes de que se puede cerrar.
+issues.dependency.issue_batch_close_blocked=No se pueden cerrar por lotes las incidencias que has seleccionado, ya que la incidencia #%d todavía tiene dependencias abiertas
issues.dependency.pr_close_blocked=Necesita cerrar todos las incidencias que bloquean este pull request antes de poder fusionarse.
issues.dependency.blocks_short=Bloquea
issues.dependency.blocked_by_short=Depende de
@@ -1597,9 +1653,13 @@ issues.review.add_review_request=solicitud de revisión de %s %s
issues.review.remove_review_request=solicitud de revisión eliminada para %s %s
issues.review.remove_review_request_self=rechazó revisar %s
issues.review.pending=Pendiente
+issues.review.pending.tooltip=Este comentario no es visible actualmente para otros usuarios. Para enviar sus comentarios pendientes, seleccione "%s" -> "%s/%s/%s" en la parte superior de la página.
issues.review.review=Revisar
issues.review.reviewers=Revisores
issues.review.outdated=Obsoleto
+issues.review.outdated_description=El contenido ha cambiado desde que se hizo este comentario
+issues.review.option.show_outdated_comments=Mostrar comentarios desactualizados
+issues.review.option.hide_outdated_comments=Ocultar comentarios desactualizados
issues.review.show_outdated=Mostrar obsoletos
issues.review.hide_outdated=Ocultar obsoletos
issues.review.show_resolved=Mostrar resueltos
@@ -1631,12 +1691,21 @@ pulls.compare_changes_desc=Seleccione la rama en la que se fusiona y la rama a r
pulls.has_viewed_file=Visto
pulls.has_changed_since_last_review=Cambiado desde tu última revisión
pulls.viewed_files_label=%[1]d / %[2]d archivos vistos
+pulls.expand_files=Expandir todos los archivos
+pulls.collapse_files=Contraer todos los archivos
pulls.compare_base=fusionar en
pulls.compare_compare=recuperar de
pulls.switch_comparison_type=Cambiar tipo de comparación
pulls.switch_head_and_base=Intercambiar cabeza y base
pulls.filter_branch=Filtrar rama
pulls.no_results=Sin resultados.
+pulls.show_all_commits=Mostrar todos los commits
+pulls.show_changes_since_your_last_review=Mostrar cambios desde tu última revisión
+pulls.showing_only_single_commit=Mostrando solo los cambios del commit %[1]s
+pulls.showing_specified_commit_range=Mostrando solo cambios entre %[1]s..%[2]s
+pulls.select_commit_hold_shift_for_range=Seleccionar commit. Mantener pulsado shift + clic para seleccionar un rango
+pulls.review_only_possible_for_full_diff=La revisión solo es posible cuando se ve la diff completa
+pulls.filter_changes_by_commit=Filtrar por commit
pulls.nothing_to_compare=Estas ramas son iguales. No hay necesidad para crear un pull request.
pulls.nothing_to_compare_and_allow_empty_pr=Estas ramas son iguales. Este PR estará vacío.
pulls.has_pull_request=`Ya existe un pull request entre estas ramas: %[2]s#%[3]d`
@@ -1650,7 +1719,10 @@ pulls.tab_files=Archivos modificados
pulls.reopen_to_merge=Vuelva a abrir este Pull Request para realizar una fusión.
pulls.cant_reopen_deleted_branch=Este pull request no se puede reabrir porque la rama fue eliminada.
pulls.merged=Fusionado
+pulls.merged_success=Se fusionó y cerró la solicitud de incorporación correctamente
+pulls.closed=Se cerró la solicitud de incorporación
pulls.manually_merged=Fusionado manualmente
+pulls.merged_info_text=Ahora se puede eliminar la rama %s.
pulls.is_closed=El pull request ha sido cerrado.
pulls.title_wip_desc=`Comience el título con %s para prevenir que el pull request se fusione accidentalmente.`
pulls.cannot_merge_work_in_progress=Este pull request está marcado como un trabajo en curso.
@@ -1665,6 +1737,12 @@ pulls.is_empty=Los cambios en esta rama ya están en la rama de destino. Esto se
pulls.required_status_check_failed=Algunos controles requeridos no han tenido éxito.
pulls.required_status_check_missing=Faltan algunos controles necesarios.
pulls.required_status_check_administrator=Como administrador, aún puede fusionar este Pull Request.
+pulls.blocked_by_approvals=Esta pull request aún no tiene suficientes aprobaciones. %d de %d aprobaciones concedidas.
+pulls.blocked_by_rejection=Este pull request tiene cambios solicitados por un revisor oficial.
+pulls.blocked_by_official_review_requests=Esta pull request tiene solicitudes de revisión oficiales.
+pulls.blocked_by_outdated_branch=Esta pull request está bloqueada porque está desactualizada.
+pulls.blocked_by_changed_protected_files_1=Esta pull request está bloqueada porque cambia un archivo protegido:
+pulls.blocked_by_changed_protected_files_n=Esta pull request está bloqueada porque cambia archivos protegidos:
pulls.can_auto_merge_desc=Este Pull Request puede ser fusionado automáticamente.
pulls.cannot_auto_merge_desc=Este pull request no se puede combinar automáticamente debido a conflictos.
pulls.cannot_auto_merge_helper=Combinar manualmente para resolver los conflictos.
@@ -1699,6 +1777,7 @@ pulls.rebase_conflict_summary=Mensaje de error
pulls.unrelated_histories=Fusionar Fallidos: El jefe de fusión y la base no comparten un historial común. Pista: Prueba una estrategia diferente
pulls.merge_out_of_date=Fusión fallida: Mientras se generaba la fusión, la base fue actualizada. Pista: Inténtelo de nuevo.
pulls.head_out_of_date=Fusión fallida: Mientras se generaba la fusión, la cabeza fue actualizada. Pista: Inténtelo de nuevo.
+pulls.has_merged=Error: La pull request ha sido fusionada, no puedes fusionarla de nuevo ni cambiar la rama objetivo.
pulls.push_rejected=Fusión fallida: El push fue rechazado. Revise los Git Hooks para este repositorio.
pulls.push_rejected_summary=Mensaje completo de rechazo
pulls.push_rejected_no_message=Fusión fallida: El push fue rechazado pero no hubo mensaje remoto.
Revise los Git Hooks para este repositorio
@@ -1715,11 +1794,14 @@ pulls.update_branch_rebase=Actualizar rama por cambio de base
pulls.update_branch_success=La actualización de la rama ha finalizado correctamente
pulls.update_not_allowed=No tiene permisos para actualizar esta rama
pulls.outdated_with_base_branch=Esta rama está desactualizada con la rama base
+pulls.close=Cerrar Pull Request
pulls.closed_at=`cerró este pull request %[2]s`
pulls.reopened_at=`reabrió este pull request %[2]s`
pulls.merge_instruction_hint=`También puede ver instrucciones de línea de comandos.`
pulls.merge_instruction_step1_desc=Desde el repositorio de su proyecto, revisa una nueva rama y prueba los cambios.
pulls.merge_instruction_step2_desc=Combine los cambios y actualice en Gitea.
+pulls.clear_merge_message=Borrar mensaje de fusión
+pulls.clear_merge_message_hint=Limpiar el mensaje de fusión solo eliminará el contenido del mensaje de commit y mantendrá frases generadas como "Co-Autorizado por …".
pulls.auto_merge_button_when_succeed=(cuando las comprobaciones tengan éxito)
pulls.auto_merge_when_succeed=Fusionar automática cuando todas las comprobaciones tengan éxito
@@ -1736,13 +1818,17 @@ pulls.auto_merge_canceled_schedule_comment=`canceló la fusión automática de e
pulls.delete.title=¿Borrar este pull request?
pulls.delete.text=¿Realmente quieres eliminar esta pull request? (Esto eliminará permanentemente todo el contenido. Considera cerrarlo si simplemente deseas archivarlo)
+pulls.recently_pushed_new_branches=Has realizado push en la rama %[1]s %[2]s
+pull.deleted_branch=(eliminado):%s
milestones.new=Nuevo hito
milestones.closed=Cerrada %s
+milestones.update_ago=Actualizado %s
milestones.no_due_date=Sin fecha límite
milestones.open=Abrir
milestones.close=Cerrar
+milestones.new_subheader=Los hitos pueden ayudarle a organizar los problemas y monitorizar su progreso.
milestones.completeness=%d%% Completado
milestones.create=Crear hito
milestones.title=Título
@@ -1750,18 +1836,31 @@ milestones.desc=Descripción
milestones.due_date=Fecha límite (opcional)
milestones.clear=Limpiar
milestones.invalid_due_date_format=El formato de fecha de vencimiento debe ser 'AAAA-mm-dd'.
+milestones.create_success=Se ha creado el hito "%s".
milestones.edit=Editar Milestone
milestones.edit_subheader=Los hitos organizan los problemas y siguen el progreso.
milestones.cancel=Cancelar
milestones.modify=Actualizar hito
+milestones.edit_success=Se ha actualizado el hito "%s".
milestones.deletion=Eliminar hito
milestones.deletion_desc=Eliminando un hito lo elimina de todos los problemas relacionados. ¿Continuar?
milestones.deletion_success=El hito se ha eliminado.
+milestones.filter_sort.earliest_due_data=Fecha de vencimiento más temprana
+milestones.filter_sort.latest_due_date=Fecha de vencimiento más lejana
milestones.filter_sort.least_complete=Menos completa
milestones.filter_sort.most_complete=Más completa
milestones.filter_sort.most_issues=Mayoría de los problemas
milestones.filter_sort.least_issues=Menos problemas
+signing.will_sign=Este commit se firmará con la clave "%s".
+signing.wont_sign.error=Hubo un error mientras se comprobaba si la confirmación podía ser firmada.
+signing.wont_sign.nokey=No hay ninguna clave disponible para firmar este commit.
+signing.wont_sign.never=Nunca se firman los commits.
+signing.wont_sign.always=Siempre se firman los commits.
+signing.wont_sign.pubkey=El commit no se firmará porque no tiene una clave pública asociada a su cuenta.
+signing.wont_sign.twofa=Debe tener habilitada la autenticación de doble factor para tener los commits firmados.
+signing.wont_sign.parentsigned=El commit no será firmado ya que el commit padre no está firmado.
+signing.wont_sign.basesigned=La fusión no se firmará ya que el commit base no está firmado.
signing.wont_sign.headsigned=La fusión no se firmará ya que el commit principal no está firmado.
signing.wont_sign.commitssigned=La fusión no se firmará ya que todos los commits asociados no están firmados.
signing.wont_sign.approved=La fusión no se firmará ya que el PR no está aprobado.
@@ -2212,8 +2311,17 @@ settings.dismiss_stale_approvals_desc=Cuando los nuevos commits que cambien el c
settings.require_signed_commits=Requiere commits firmados
settings.require_signed_commits_desc=Rechazar push en esta rama si los commits no están firmados o no son verificables.
settings.protect_branch_name_pattern=Patrón de nombre de la rama protegida
+settings.protect_branch_name_pattern_desc=Patrones de nombre de rama protegidos. Consulte la documentación para la sintaxis de patrones. Ejemplos: principal, lanzamiento/**
+settings.protect_patterns=Patrones
+settings.protect_protected_file_patterns=Patrones de archivos protegidos (separados con punto y coma ';'):
+settings.protect_protected_file_patterns_desc=No está permitido cambiar archivos directamente incluso si el usuario tiene permiso para agregar, editar o borrar archivos en esta rama. Múltiples patrones pueden separarse usando punto y coma (';'). Refvisa la documentación de github.com/gobwas/glob para la sintaxis de patrones. Ejemplos: .drone.yml
, /docs/**/*.txt
.
+settings.protect_unprotected_file_patterns=Patrones de archivos sin protección (separados con punto y coma ';'):
+settings.protect_unprotected_file_patterns_desc=Los archivos sin protección se pueden cambiar directamente si el usuario tiene acceso de escritura, evitando la restricción push. Múltiples patrones pueden separarse usando punto y coma (';'). Vea la documentación de github.com/gobwas/glob para la sintaxis de patrones. Ejemplos: .drone.yml
, /docs/**/*.txt
.
settings.add_protected_branch=Activar protección
settings.delete_protected_branch=Desactivar protección
+settings.update_protect_branch_success=Se ha actualizado la protección de la rama para la regla "%s".
+settings.remove_protected_branch_success=Se ha eliminado la protección de la rama para la regla "%s".
+settings.remove_protected_branch_failed=Error al eliminar la regla de protección de rama "%s".
settings.protected_branch_deletion=Desactivar protección de rama
settings.protected_branch_deletion_desc=Desactivar la protección de la rama permite a los usuarios con permiso de escritura hacer push a la rama. ¿Continuar?
settings.block_rejected_reviews=Bloquear fusión en las revisión rechazadas
@@ -2223,10 +2331,13 @@ settings.block_on_official_review_requests_desc=Fusionar no será posible cuando
settings.block_outdated_branch=Bloquear fusión si la pull request está desactualizada
settings.block_outdated_branch_desc=La fusión no será posible cuando la rama principal esté detrás de la rama base.
settings.default_branch_desc=Seleccione una rama de repositorio por defecto para los pull request y los commits:
+settings.merge_style_desc=Estilos de fusión
settings.default_merge_style_desc=Estilo de fusión por defecto para pull requests:
settings.choose_branch=Elija una rama…
settings.no_protected_branch=No hay ramas protegidas.
settings.edit_protected_branch=Editar
+settings.protected_branch_required_rule_name=Nombre de regla requerido
+settings.protected_branch_duplicate_rule_name=Nombre de regla duplicado
settings.protected_branch_required_approvals_min=Las aprobaciones necesarias no pueden ser negativas.
settings.tags=Etiquetas
settings.tags.protection=Protección de etiquetas
@@ -2237,18 +2348,26 @@ settings.tags.protection.allowed.teams=Equipos permitidos
settings.tags.protection.allowed.noone=Ningún
settings.tags.protection.create=Proteger Etiqueta
settings.tags.protection.none=No hay etiquetas protegidas.
+settings.tags.protection.pattern.description=Puede usar un solo nombre, un patrón de glob o expresión regular para que coincida con varias etiquetas. Lea más en la guía de etiquetas protegidas.
settings.bot_token=Token del Bot
settings.chat_id=ID Chat
+settings.thread_id=ID del hilo
settings.matrix.homeserver_url=URL de Homeserver
settings.matrix.room_id=ID de sala
settings.matrix.message_type=Tipo de mensaje
settings.archive.button=Archivar Repositorio
settings.archive.header=Archivar este repositorio
+settings.archive.text=Archivar el repositorio lo hará de sólo lectura. Se ocultará del tablero. Nadie (¡ni siquiera tú!) será capaz de hacer nuevos commits, o abrir nuevas incidencias o pull requests.
settings.archive.success=El repositorio ha sido archivado exitosamente.
settings.archive.error=Ha ocurrido un error al intentar archivar el repositorio. Vea el registro para más detalles.
settings.archive.error_ismirror=No puede archivar un repositorio replicado.
settings.archive.branchsettings_unavailable=Los ajustes de rama no están disponibles si el repositorio está archivado.
settings.archive.tagsettings_unavailable=Los ajustes de las etiquetas no están disponibles si el repositorio está archivado.
+settings.unarchive.button=Desarchivar repositorio
+settings.unarchive.header=Desarchivar este repositorio
+settings.unarchive.text=La desarchivación del repositorio restablecerá su capacidad de recibir commits y pushes, así como nuevas incidencias y pull requests.
+settings.unarchive.success=El repositorio se ha desarchivado correctamente.
+settings.unarchive.error=Ocurrió un error mientras se trataba de des-archivar el repositorio. Revisa el registro para más detalles.
settings.update_avatar_success=El avatar del repositorio ha sido actualizado.
settings.lfs=LFS
settings.lfs_filelist=No hay archivos LFS almacenados en este repositorio
@@ -2315,6 +2434,7 @@ diff.show_more=Ver más
diff.load=Cargar Diff
diff.generated=generado
diff.vendored=vendido
+diff.comment.add_line_comment=Añadir comentario en línea
diff.comment.placeholder=Deja un comentario
diff.comment.markdown_info=Es posible estilizar con markdown.
diff.comment.add_single_comment=Añadir solo comentario
@@ -2326,13 +2446,17 @@ diff.review.header=Enviar revisión
diff.review.placeholder=Comentario de revisión
diff.review.comment=Comentario
diff.review.approve=Aprobar
+diff.review.self_reject=Los autores del pull request no pueden solicitar cambios
diff.review.reject=Solicitud de cambios
+diff.review.self_approve=Los autores del pull request no pueden aprobarlo
diff.committed_by=cometido por
diff.protected=Protegido
diff.image.side_by_side=Lado a lado
diff.image.swipe=Deslizar
diff.image.overlay=Superposición
diff.has_escaped=Esta línea tiene caracteres Unicode ocultos
+diff.show_file_tree=Mostrar árbol de archivos
+diff.hide_file_tree=Ocultar árbol de archivos
releases.desc=Seguir las versiones y descargas del proyecto.
release.releases=Lanzamientos
@@ -2346,12 +2470,18 @@ release.compare=Comparar
release.edit=editar
release.ahead.commits=%d commits
release.ahead.target=a %s desde esta versión
+tag.ahead.target=a %s desde esta etiqueta
release.source_code=Código Fuente
release.new_subheader=Los lanzamientos organizan las versiones de proyectos.
release.edit_subheader=Los lanzamientos organizan las versiones de proyectos.
release.tag_name=Nombre de la etiqueta
release.target=Destino
release.tag_helper=Escoge una etiqueta existente o crea una nueva.
+release.tag_helper_new=Nueva etiqueta. Esta etiqueta se creará desde el destino.
+release.tag_helper_existing=Etiqueta actual.
+release.title=Título de lanzamiento
+release.title_empty=El título no puede estar vacío.
+release.message=Describe esta versión
release.prerelease_desc=Marcar como Pre-Lanzamiento
release.prerelease_helper=Marcar este lanzamiento como no es adecuada para usar en producción.
release.cancel=Cancelar
@@ -2361,6 +2491,7 @@ release.edit_release=Actualizar Lanzamiento
release.delete_release=Eliminar Lanzamiento
release.delete_tag=Eliminar Etiqueta
release.deletion=Eliminar Lanzamiento
+release.deletion_desc=Eliminar un lanzamiento sólo lo elimina de Gitea. No afectará la etiqueta Git, el contenido de su repositorio o su historial. ¿Continuar?
release.deletion_success=El lanzamiento ha sido eliminado.
release.deletion_tag_desc=Eliminará esta etiqueta del repositorio. El contenido del repositorio y el historial permanecerán sin cambios. ¿Continuar?
release.deletion_tag_success=La etiqueta ha sido eliminada.
@@ -2372,12 +2503,30 @@ release.downloads=Descargas
release.download_count=Descargas: %s
release.add_tag_msg=Utilice el título y el contenido de la liberación como mensaje de etiqueta.
release.add_tag=Crear solo etiqueta
+release.releases_for=Lanzamientos para %s
+release.tags_for=Etiquetas para %s
branch.name=Nombre de la rama
+branch.search=Buscar rama
+branch.already_exists=Una rama llamada "%s" ya existe.
branch.delete_head=Eliminar
+branch.delete=`Eliminar rama "%s "`
branch.delete_html=Eliminar rama
+branch.delete_desc=Eliminar una rama es permanente. Aunque la rama eliminada puede continuar existiendo durante un corto tiempo antes de que sea eliminada, en la mayoría de los casos NO PUEDE deshacerse. ¿Continuar?
+branch.deletion_success=La rama "%s" ha sido eliminada.
+branch.deletion_failed=Error al eliminar la rama "%s".
+branch.delete_branch_has_new_commits=La rama "%s" no se puede eliminar porque se han añadido nuevos commits después de la fusión.
branch.create_branch=Crear rama %s
+branch.create_from=`de "%s"`
+branch.create_success=La rama "%s" ha sido creada.
+branch.branch_already_exists=La rama "%s" ya existe en este repositorio.
+branch.branch_name_conflict=El nombre de la rama "%s" entra en conflicto con la rama existente "%s".
+branch.tag_collision=La rama "%s" no se puede crear como una etiqueta con el mismo nombre ya existe en el repositorio.
branch.deleted_by=Eliminada por %s
+branch.restore_success=La rama "%s" ha sido restaurada.
+branch.restore_failed=Error al restaurar la rama "%s".
+branch.protected_deletion_failed=La rama "%s" está protegida. No se puede eliminar.
+branch.default_deletion_failed=La rama "%s" es la rama por defecto. No se puede eliminar.
branch.restore=`Restaurar rama "%s"`
branch.download=`Descargar rama "%s"`
branch.rename=`Renombrar rama "%s"`
@@ -2869,6 +3018,7 @@ auths.deletion_success=El origen de autenticación ha sido eliminado.
auths.login_source_exist=La fuente de autenticación "%s" ya existe.
auths.login_source_of_type_exist=Ya existe un origen de autenticación de este tipo.
auths.unable_to_initialize_openid=No se puede inicializar el proveedor de OpenID Connect: %s
+auths.invalid_openIdConnectAutoDiscoveryURL=URL de auto descubrimiento no válida (esta debe ser una URL válida comenzando con http:// o https://)
config.server_config=Configuración del servidor
config.app_name=Título del sitio
@@ -2882,6 +3032,7 @@ config.disable_router_log=Deshabilitar Log del Router
config.run_user=Ejecutar como usuario
config.run_mode=Modo de ejecución
config.git_version=Versión de Git
+config.app_data_path=Ruta de datos de Gitea
config.repo_root_path=Ruta del Repositorio
config.lfs_root_path=Ruta raíz de LFS
config.log_file_root_path=Ruta de ficheros de registro
@@ -2957,6 +3108,9 @@ config.mailer_sendmail_timeout=Tiempo de espera de Sendmail
config.mailer_use_dummy=Dummy
config.test_email_placeholder=Correo electrónico (ej. test@ejemplo.com)
config.send_test_mail=Enviar prueba de correo
+config.send_test_mail_submit=Enviar
+config.test_mail_failed=Fallo al enviar un correo electrónico de prueba a "%s": %v
+config.test_mail_sent=Se ha enviado un correo electrónico de prueba a "%s".
config.oauth_config=Configuración OAuth
config.oauth_enabled=Activado
@@ -2994,12 +3148,15 @@ config.git_pull_timeout=Tiempo de espera de operación de pull
config.git_gc_timeout=Tiempo de espera de operación de GC
config.log_config=Configuración del Log
+config.logger_name_fmt=Registro: %s
config.disabled_logger=Desactivado
config.access_log_mode=Modo de registro del Acceso
+config.access_log_template=Plantilla de registro de acceso
config.xorm_log_sql=Registrar SQL
config.set_setting_failed=Error al configurar %s
+monitor.stats=Estadísticas
monitor.cron=Tareas de Cron
monitor.name=Nombre
@@ -3009,6 +3166,8 @@ monitor.previous=Anterior
monitor.execute_times=Ejecuciones
monitor.process=Procesos en ejecución
monitor.stacktrace=Rastros de pila
+monitor.processes_count=%d procesos
+monitor.download_diagnosis_report=Descargar informe de diagnóstico
monitor.desc=Descripción
monitor.start=Hora de Inicio
monitor.execute_time=Tiempo de ejecución
@@ -3024,14 +3183,19 @@ monitor.queue.name=Nombre
monitor.queue.type=Tipo
monitor.queue.exemplar=Ejemplo
monitor.queue.numberworkers=Número de trabajadores
+monitor.queue.activeworkers=Trabajadores activos
monitor.queue.maxnumberworkers=Número máximo de trabajadores
monitor.queue.numberinqueue=Número en cola
+monitor.queue.review_add=Revisar / Añadir Trabajadores
monitor.queue.settings.title=Ajustes del grupo
+monitor.queue.settings.desc=Los grupos de trabajadores crecen dinámicamente en respuesta al bloqueo de cola de sus trabajadores.
monitor.queue.settings.maxnumberworkers=Número máximo de trabajadores
monitor.queue.settings.maxnumberworkers.placeholder=Actualmente %[1]d
monitor.queue.settings.maxnumberworkers.error=El número máximo de trabajadores debe ser un número
monitor.queue.settings.submit=Actualizar ajustes
monitor.queue.settings.changed=Ajustes actualizados
+monitor.queue.settings.remove_all_items=Eliminar todo
+monitor.queue.settings.remove_all_items_done=Todos los elementos en la cola han sido eliminados.
notices.system_notice_list=Notificaciones del Sistema
notices.view_detail_header=Ver detalles de notificación
@@ -3141,7 +3305,9 @@ error.unit_not_allowed=No tiene permisos para acceder a esta sección del reposi
title=Paquetes
desc=Administrar paquetes del repositorio.
empty=Todavía no hay paquetes.
+empty.documentation=Para más información sobre el registro de paquetes, consulte la documentación.
empty.repo=¿Has subido un paquete, pero no se muestra aquí? Ve a la configuración del paquete y añade el link a este repositorio.
+registry.documentation=Para obtener más información sobre el registro %s, consulte la documentación.
filter.type=Tipo
filter.type.all=Todo
filter.no_result=El filtro no produjo ningún resultado.
@@ -3157,15 +3323,27 @@ keywords=Palabras clave
details=Detalles
details.author=Autoría
details.project_site=Sitio del proyecto
+details.repository_site=Sitio del repositorio
+details.documentation_site=Sitio de documentación
details.license=Licencia
assets=Activos
versions=Versiones
versions.view_all=Ver todo
dependency.id=Id.
dependency.version=Versión
+alpine.registry=Configura este registro agregando la url en tu archivo ./apk/repositories
:
+alpine.registry.key=Descargue la clave RSA pública del registro en la carpeta ./apk/keys/
para verificar la firma del índice:
+alpine.registry.info=Seleccione $branch y $repository de la siguiente lista.
alpine.install=Para instalar el paquete, ejecute el siguiente comando:
+alpine.repository=Información del repositorio
alpine.repository.branches=Ramas
alpine.repository.repositories=Repositorios
+alpine.repository.architectures=Arquitecturas
+cargo.registry=Configurar este registro en el archivo de configuración de Cargo (por ejemplo ~/.cargo/config.toml
):
+cargo.install=Para instalar el paquete usando Cargo, ejecute el siguiente comando:
+cargo.details.repository_site=Sitio del repositorio
+cargo.details.documentation_site=Sitio de documentación
+chef.registry=Configura este registro en tu archivo ~/.chef/config.rb
:
chef.install=Para instalar el paquete, ejecute el siguiente comando:
composer.registry=Configura este registro en el archivo ~/.composer/config.json
:
composer.install=Para instalar el paquete usando Composer, ejecute el siguiente comando:
@@ -3174,6 +3352,10 @@ composer.dependencies.development=Dependencias de desarrollo
conan.details.repository=Repositorio
conan.registry=Configurar este registro desde la línea de comandos:
conan.install=Para instalar el paquete usando Conan, ejecuta el siguiente comando:
+conda.registry=Configura este registro como un repositorio Conda en tu archivo .condarc
:
+conda.install=Para instalar el paquete usando Conda, ejecute el siguiente comando:
+conda.details.repository_site=Sitio del repositorio
+conda.details.documentation_site=Sitio de documentación
container.details.type=Tipo de imagen
container.details.platform=Plataforma
container.pull=Arrastra la imagen desde la línea de comandos:
@@ -3183,10 +3365,17 @@ container.layers=Capas de imagen
container.labels=Etiquetas
container.labels.key=Clave
container.labels.value=Valor
+cran.registry=Configurar este registro en su archivo Rprofile.site
:
cran.install=Para instalar el paquete, ejecute el siguiente comando:
debian.registry=Configurar este registro desde la línea de comandos:
+debian.registry.info=Seleccione $distribution y $component de la siguiente lista.
debian.install=Para instalar el paquete, ejecute el siguiente comando:
+debian.repository=Información del repositorio
+debian.repository.distributions=Distribuciones
+debian.repository.components=Componentes
+debian.repository.architectures=Arquitecturas
generic.download=Descargar paquete desde la línea de comandos:
+go.install=Instalar el paquete desde la línea de comandos:
helm.registry=Configurar este registro desde la línea de comandos:
helm.install=Para instalar el paquete, ejecute el siguiente comando:
maven.registry=Configure este registro en su proyecto pom.xml
archivo:
@@ -3208,6 +3397,8 @@ pub.install=Para instalar el paquete usando Dart, ejecute el siguiente comando:
pypi.requires=Requiere Python
pypi.install=Para instalar el paquete usando pip, ejecute el siguiente comando:
rpm.registry=Configurar este registro desde la línea de comandos:
+rpm.distros.redhat=en distribuciones basadas en RedHat
+rpm.distros.suse=en distribuciones basadas en SUSE
rpm.install=Para instalar el paquete, ejecute el siguiente comando:
rubygems.install=Para instalar el paquete usando gem, ejecute el siguiente comando:
rubygems.install2=o añádelo al archivo Gemfile:
@@ -3216,6 +3407,8 @@ rubygems.dependencies.development=Dependencias de desarrollo
rubygems.required.ruby=Requiere versión Ruby
rubygems.required.rubygems=Requiere la versión de RubyGem
swift.registry=Configurar este registro desde la línea de comandos:
+swift.install=Añade el paquete en tu archivo Package.swift
:
+swift.install2=y ejecuta el siguiente comando:
vagrant.install=Para añadir un paquete Vagrant, ejecuta el siguiente comando:
settings.link=Vincular este paquete a un repositorio
settings.link.description=Si enlaza un paquete con un repositorio, el paquete se enumera en la lista de paquetes del repositorio.
@@ -3228,6 +3421,12 @@ settings.delete.description=La eliminación de un paquete es permanente y no se
settings.delete.notice=Está a punto de eliminar %s (%s). Esta operación es irreversible, ¿está seguro?
settings.delete.success=Se ha eliminado el paquete.
settings.delete.error=No se pudo eliminar el paquete.
+owner.settings.cargo.title=Índice del registro Cargo
+owner.settings.cargo.initialize=Inicializar índice
+owner.settings.cargo.initialize.description=Se necesita un repositorio Git de índice especial para usar el registro de Cargo. Usar esta opción (re)creará el repositorio y lo configurará automáticamente.
+owner.settings.cargo.initialize.error=Fallo al inicializar el índice de Cargo: %v
+owner.settings.cargo.initialize.success=El índice de Cargo se ha creado correctamente.
+owner.settings.cargo.rebuild=Reconstruir índice
owner.settings.cargo.rebuild.description=Reconstruir puede ser útil si el índice no se sincroniza con los paquetes de Cargo almacenados.
owner.settings.cargo.rebuild.error=Fallo al reconstruir el índice de Cargo: %v
owner.settings.cargo.rebuild.success=El índice de Cargo se ha reconstruido correctamente.
@@ -3294,19 +3493,68 @@ runners.name=Nombre
runners.owner_type=Tipo
runners.description=Descripción
runners.labels=Etiquetas
+runners.last_online=Última hora en línea
+runners.runner_title=Nodo
+runners.task_list=Tareas recientes en este nodo
+runners.task_list.no_tasks=Todavía no hay tarea.
runners.task_list.run=Ejecutar
runners.task_list.status=Estado
runners.task_list.repository=Repositorio
runners.task_list.commit=Commit
+runners.task_list.done_at=Hecho en
+runners.edit_runner=Editar nodo
+runners.update_runner=Actualizar cambios
+runners.update_runner_success=Nodo actualizado correctamente
+runners.update_runner_failed=Fallo al actualizar el nodo
+runners.delete_runner=Eliminar este nodo
+runners.delete_runner_success=Nodo eliminado con éxito
+runners.delete_runner_failed=Fallo al eliminar el nodo
+runners.delete_runner_header=Confirma para eliminar el nodo
+runners.delete_runner_notice=Si una tarea se está ejecutando en este nodo, se terminará y marcará como fallida. Puede romper el flujo de trabajo en curso.
+runners.none=No hay nodos disponibles
runners.status.unspecified=Desconocido
+runners.status.idle=Inactivo
runners.status.active=Activo
+runners.status.offline=Desconectado
runners.version=Versión
+runners.reset_registration_token=Restablecer token de registro
+runners.reset_registration_token_success=Se ha restablecido correctamente el token de registro del nodo
+runs.all_workflows=Todos los flujos de trabajo
runs.commit=Commit
+runs.scheduled=Programado
+runs.pushed_by=push enviado por
+runs.invalid_workflow_helper=El archivo de configuración del trabajo no es válido. Revisa tu archivo de configuración: %s
+runs.no_matching_runner_helper=No hay nodo coincidente: %s
+runs.actor=Actor
runs.status=Estado
-
-
-
+runs.actors_no_select=Todos los actores
+runs.status_no_select=Todo el estado
+runs.no_results=No hay resultados coincidentes.
+runs.no_runs=El flujo de trabajo no tiene ejecuciones todavía.
+
+workflow.disable=Desactivar fllujo de trabajo
+workflow.disable_success=Flujo de trabajo '%s' deshabilitado correctamente.
+workflow.enable=Activar flujo de trabajo
+workflow.enable_success=Flujo de trabajo '%s' habilitado con éxito.
+workflow.disabled=El flujo de trabajo está deshabilitado.
+
+need_approval_desc=Necesita aprobación para ejecutar flujos de trabajo para el pull request del fork.
+
+variables=Variables
+variables.management=Gestión de variables
+variables.creation=Añadir variable
+variables.none=Aún no hay variables.
+variables.deletion=Eliminar variable
+variables.deletion.description=Eliminar una variable es permanente y no se puede deshacer. ¿Continuar?
+variables.description=Las variables se pasarán a ciertas acciones y no se podrán leer de otro modo.
+variables.id_not_exist=Variable con id %d no existe.
+variables.edit=Editar variable
+variables.deletion.failed=No se pudo eliminar la variable.
+variables.deletion.success=La variable ha sido eliminada.
+variables.creation.failed=No se pudo agregar la variable.
+variables.creation.success=La variable "%s" ha sido añadida.
+variables.update.failed=Error al editar la variable.
variables.update.success=La variable ha sido editada.
[projects]
diff --git a/routers/api/v1/api.go b/routers/api/v1/api.go
index 8d8373f0aa1a5..53ae8c4d016a0 100644
--- a/routers/api/v1/api.go
+++ b/routers/api/v1/api.go
@@ -1444,10 +1444,10 @@ func Routes() *web.Route {
Delete(reqToken(), reqOrgMembership(), org.ConcealMember)
})
m.Group("/teams", func() {
- m.Get("", reqToken(), org.ListTeams)
- m.Post("", reqToken(), reqOrgOwnership(), bind(api.CreateTeamOption{}), org.CreateTeam)
- m.Get("/search", reqToken(), org.SearchTeam)
- }, reqOrgMembership())
+ m.Get("", org.ListTeams)
+ m.Post("", reqOrgOwnership(), bind(api.CreateTeamOption{}), org.CreateTeam)
+ m.Get("/search", org.SearchTeam)
+ }, reqToken(), reqOrgMembership())
m.Group("/labels", func() {
m.Get("", org.ListLabels)
m.Post("", reqToken(), reqOrgOwnership(), bind(api.CreateLabelOption{}), org.CreateLabel)
diff --git a/routers/web/user/avatar.go b/routers/web/user/avatar.go
index 01df2fd294bc6..772cc38bea027 100644
--- a/routers/web/user/avatar.go
+++ b/routers/web/user/avatar.go
@@ -27,7 +27,7 @@ func AvatarByUserName(ctx *context.Context) {
size := int(ctx.ParamsInt64(":size"))
var user *user_model.User
- if strings.ToLower(userName) != "ghost" {
+ if strings.ToLower(userName) != user_model.GhostUserLowerName {
var err error
if user, err = user_model.GetUserByName(ctx, userName); err != nil {
if user_model.IsErrUserNotExist(err) {
diff --git a/services/task/migrate.go b/services/task/migrate.go
index 475fa7a61b537..9cef77a6c8983 100644
--- a/services/task/migrate.go
+++ b/services/task/migrate.go
@@ -42,13 +42,11 @@ func handleCreateError(owner *user_model.User, err error) error {
}
func runMigrateTask(ctx context.Context, t *admin_model.Task) (err error) {
- defer func() {
+ defer func(ctx context.Context) {
if e := recover(); e != nil {
err = fmt.Errorf("PANIC whilst trying to do migrate task: %v", e)
log.Critical("PANIC during runMigrateTask[%d] by DoerID[%d] to RepoID[%d] for OwnerID[%d]: %v\nStacktrace: %v", t.ID, t.DoerID, t.RepoID, t.OwnerID, e, log.Stack(2))
}
- // fixme: Because ctx is canceled here, so the db.DefaultContext is needed.
- ctx := db.DefaultContext
if err == nil {
err = admin_model.FinishMigrateTask(ctx, t)
if err == nil {
@@ -69,7 +67,7 @@ func runMigrateTask(ctx context.Context, t *admin_model.Task) (err error) {
}
// then, do not delete the repository, otherwise the users won't be able to see the last error
- }()
+ }(graceful.GetManager().ShutdownContext()) // even if the parent ctx is canceled, this defer-function still needs to update the task record in database
if err = t.LoadRepo(ctx); err != nil {
return err
diff --git a/templates/org/team/teams.tmpl b/templates/org/team/teams.tmpl
index 6b16da9d113f6..9723294fd6bcf 100644
--- a/templates/org/team/teams.tmpl
+++ b/templates/org/team/teams.tmpl
@@ -16,6 +16,7 @@