Compare commits

...

10 Commits

Author SHA1 Message Date
Jimmy Praet fcc11253ac
Add archived label for code search results in archived repo's (#17817)
* Add archived label for code search results in archived repo's

* Remove trailing whitespace

Co-authored-by: Lauris BH <lauris@nix.lv>
2021-11-26 16:49:31 +08:00
Lunny Xiao 371ebce252
Fix database inconsistent when admin change user email (#17549) 2021-11-25 20:56:16 -05:00
GiteaBot f23851f690 [skip ci] Updated translations via Crowdin 2021-11-26 00:25:09 +00:00
Lunny Xiao 6c21961462
org settings -> webhook/labels/deletion should also active the menu (#17809) 2021-11-25 23:15:58 +08:00
KN4CK3R e8f1f09132
Fixed org styles. (#17807)
Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
2021-11-25 21:05:04 +08:00
wxiaoguang edd37e9d4a
Fix org webchatwork webhook (#17810) 2021-11-25 04:25:25 -05:00
ThetaDev af901a4ca9
Detect dark theme via css variable (#17800)
* detect dark theme via css variable
* minor refactor, add documentation

If your custom theme is considered a dark theme, set the global css variable `--is-dark-theme` to `true`.
This allows gitea to adjust the Monaco code editor's theme accordingly.
2021-11-25 15:14:48 +08:00
qwerty287 e0f81b4ef4
Allow forks to org if you can create repos (#17783) 2021-11-25 13:03:03 +08:00
Gusted 4b4997c73e
Use correct user on releases (#17806)
- Use the provided `doer` instead of `rel.Publisher`. The code will also
run on edited releases and deleted ones, which isn't necessary done by
`rel.Publisher`.

Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
2021-11-25 12:17:16 +08:00
GiteaBot 4f99697888 [skip ci] Updated translations via Crowdin 2021-11-25 00:25:19 +00:00
23 changed files with 429 additions and 287 deletions

View File

@ -337,6 +337,9 @@ Community themes are listed in [gitea/awesome-gitea#themes](https://gitea.com/gi
The `arc-green` theme source can be found [here](https://github.com/go-gitea/gitea/blob/main/web_src/less/themes/theme-arc-green.less).
If your custom theme is considered a dark theme, set the global css variable `--is-dark-theme` to `true`.
This allows gitea to adjust the Monaco code editor's theme accordingly.
## Customizing fonts
Fonts can be customized using CSS variables:

View File

@ -766,7 +766,7 @@ func CanUserForkRepo(user *user_model.User, repo *Repository) (bool, error) {
if repo.OwnerID != user.ID && !HasForkedRepo(user.ID, repo.ID) {
return true, nil
}
ownedOrgs, err := GetOwnedOrgsByUserID(user.ID)
ownedOrgs, err := GetOrgsCanCreateRepoByUserID(user.ID)
if err != nil {
return false, err
}

View File

@ -796,18 +796,48 @@ func validateUser(u *User) error {
return ValidateEmail(u.Email)
}
func updateUser(e db.Engine, u *User) error {
func updateUser(ctx context.Context, u *User, changePrimaryEmail bool) error {
if err := validateUser(u); err != nil {
return err
}
e := db.GetEngine(ctx)
if changePrimaryEmail {
var emailAddress EmailAddress
has, err := e.Where("lower_email=?", strings.ToLower(u.Email)).Get(&emailAddress)
if err != nil {
return err
}
if !has {
// 1. Update old primary email
if _, err = e.Where("uid=? AND is_primary=?", u.ID, true).Cols("is_primary").Update(&EmailAddress{
IsPrimary: false,
}); err != nil {
return err
}
emailAddress.Email = u.Email
emailAddress.UID = u.ID
emailAddress.IsActivated = true
emailAddress.IsPrimary = true
if _, err := e.Insert(&emailAddress); err != nil {
return err
}
} else if _, err := e.ID(emailAddress).Cols("is_primary").Update(&EmailAddress{
IsPrimary: true,
}); err != nil {
return err
}
}
_, err := e.ID(u.ID).AllCols().Update(u)
return err
}
// UpdateUser updates user's information.
func UpdateUser(u *User) error {
return updateUser(db.GetEngine(db.DefaultContext), u)
func UpdateUser(u *User, emailChanged bool) error {
return updateUser(db.DefaultContext, u, emailChanged)
}
// UpdateUserCols update user according special columns
@ -836,14 +866,13 @@ func UpdateUserSetting(u *User) (err error) {
return err
}
defer committer.Close()
sess := db.GetEngine(ctx)
if !u.IsOrganization() {
if err = checkDupEmail(sess, u); err != nil {
if err = checkDupEmail(db.GetEngine(ctx), u); err != nil {
return err
}
}
if err = updateUser(sess, u); err != nil {
if err = updateUser(ctx, u, false); err != nil {
return err
}
return committer.Commit()

View File

@ -273,19 +273,19 @@ func TestUpdateUser(t *testing.T) {
user := unittest.AssertExistsAndLoadBean(t, &User{ID: 2}).(*User)
user.KeepActivityPrivate = true
assert.NoError(t, UpdateUser(user))
assert.NoError(t, UpdateUser(user, false))
user = unittest.AssertExistsAndLoadBean(t, &User{ID: 2}).(*User)
assert.True(t, user.KeepActivityPrivate)
setting.Service.AllowedUserVisibilityModesSlice = []bool{true, false, false}
user.KeepActivityPrivate = false
user.Visibility = structs.VisibleTypePrivate
assert.Error(t, UpdateUser(user))
assert.Error(t, UpdateUser(user, false))
user = unittest.AssertExistsAndLoadBean(t, &User{ID: 2}).(*User)
assert.True(t, user.KeepActivityPrivate)
user.Email = "no mail@mail.org"
assert.Error(t, UpdateUser(user))
assert.Error(t, UpdateUser(user, true))
}
func TestNewUserRedirect(t *testing.T) {

View File

@ -769,12 +769,12 @@ func sendReleaseHook(doer *user_model.User, rel *models.Release, action api.Hook
return
}
mode, _ := models.AccessLevel(rel.Publisher, rel.Repo)
mode, _ := models.AccessLevel(doer, rel.Repo)
if err := webhook_services.PrepareWebhooks(rel.Repo, webhook.HookEventRelease, &api.ReleasePayload{
Action: action,
Release: convert.ToRelease(rel),
Repository: convert.ToRepo(rel.Repo, mode),
Sender: convert.ToUser(rel.Publisher, nil),
Sender: convert.ToUser(doer, nil),
}); err != nil {
log.Error("PrepareWebhooks: %v", err)
}

View File

@ -899,6 +899,7 @@ migrate.clone_address_desc=既存リポジトリの、HTTP(S)またはGit形式
migrate.github_token_desc=Github APIはレート制限がありますが、移行をより速くするため、ここにカンマ区切りで複数のトークンを入力することができます。 警告: この機能を悪用すると、サービスプロバイダのポリシーに違反し、アカウントがブロックされる可能性があります。
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
@ -945,6 +946,7 @@ clone_this_repo=このリポジトリのクローンを作成
create_new_repo_command=コマンドラインから新しいリポジトリを作成
push_exist_repo=コマンドラインから既存のリポジトリをプッシュ
empty_message=このリポジトリの中には何もありません。
broken_message=このリポジトリの基礎となる git のデータを読み取れません。このインスタンスの管理者に相談するか、このリポジトリを削除してください。
code=コード
code.desc=ソースコード、ファイル、コミット、ブランチにアクセス。
@ -1170,6 +1172,9 @@ issues.add_assignee_at=`を <b>%[1]s</b> が担当者に指名 %[2]s`
issues.remove_assignee_at=`を <b>%[1]s</b> が担当から解除 %[2]s`
issues.remove_self_assignment=`が自身を担当から解除 %s`
issues.change_title_at=`がタイトルを <b><strike>%[1]s</strike></b> から <b>%[2]s</b> に変更 %[3]s`
issues.change_ref_at=`が参照を <b><strike>%s</strike></b> から <b>%s</b> に変更 %s`
issues.remove_ref_at=`が参照 <b>%s</b> を削除 %s`
issues.add_ref_at=`が参照 <b>%s</b> を追加 %s`
issues.delete_branch_at=`がブランチ <b>%[1]s</b> を削除 %[2]s`
issues.open_tab=%d件 オープン中
issues.close_tab=%d件 クローズ済
@ -2038,6 +2043,7 @@ diff.file_suppressed=ファイル差分が大きすぎるため省略します
diff.file_suppressed_line_too_long=長すぎる行があるためファイル差分は表示されません
diff.too_many_files=変更されたファイルが多すぎるため、一部のファイルは表示されません
diff.show_more=さらに表示
diff.load=差分を読み込み
diff.generated=generated
diff.vendored=vendored
diff.comment.placeholder=コメントを残す

View File

@ -898,6 +898,7 @@ migrate.clone_address_desc=O URL de clonagem HTTP(S) ou Git de um repositório e
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 conta.
migrate.clone_local_path=ou um caminho 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, por favor peça ao administrador para verificar as configurações ALLOWED_DOMAINS/ALLOW_LOCALNETWORKS/BLOCKED_DOMAINS.
migrate.invalid_local_path=O caminho local é inválido. 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
@ -944,6 +945,7 @@ clone_this_repo=Clonar 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 contém 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.
code=Código
code.desc=Aceder ao código fonte, ficheiros, cometimentos e ramos.
@ -2034,6 +2036,7 @@ diff.file_suppressed=A apresentação das diferenças no ficheiro foi suprimida
diff.file_suppressed_line_too_long=A apresentação das diferenças entre ficheiros foi suprimida porque há linhas demasiado longas
diff.too_many_files=Alguns ficheiros não foram mostrados porque foram modificados demasiados ficheiros neste diff
diff.show_more=Mostrar mais
diff.load=Carregar diff
diff.comment.placeholder=Deixar um comentário
diff.comment.markdown_info=A formatação com markdown é suportada.
diff.comment.add_single_comment=Adicionar um único comentário

View File

@ -72,7 +72,7 @@ collaborative=Совместные
forks=Форки
activities=Активность
pull_requests=Pull Request'ы
pull_requests=Запросы на слияние
issues=Задачи
milestones=Этапы
@ -85,6 +85,11 @@ remove=Удалить
remove_all=Удалить все
edit=Изменить
copy=Скопировать
copy_url=Копировать URL
copy_branch=Скопировать имя ветки
copy_success=Скопировано!
copy_error=Ошибка при копировании
write=Редактирование
preview=Предпросмотр
@ -94,7 +99,7 @@ step1=Шаг 1:
step2=Шаг 2:
error=Ошибка
error404=Страница, которую вы пытаетесь открыть, либо <strong>не существует</strong>, либо <strong>вы не авторизованы</strong> для ее просмотра.
error404=Страница, которую вы пытаетесь открыть, либо <strong>не существует</strong>, либо <strong>недостаточно прав</strong> для ее просмотра.
never=Никогда
@ -128,7 +133,7 @@ password=Пароль
db_name=Имя базы данных
db_helper=Для пользователей MySQL: пожалуйста, используйте движок InnoDB, и если вы используете "utf8mb4" - ваша версия InnoDB должна быть старше 5.6 .
db_schema=Схема
db_schema_helper=Оставьте пустым для базы данных по умолчанию ("public").
db_schema_helper=Оставьте пустым для значения по умолчанию ("public").
ssl_mode=SSL
charset=Кодировка
path=Путь
@ -144,12 +149,14 @@ err_admin_name_is_invalid=Неверное имя администратора
general_title=Основные настройки
app_name=Название сайта
app_name_helper=Здесь вы можете ввести название своей компании.
repo_path=Путь корня репозитория
repo_path_helper=Все удалённые Git репозитории будут сохранены в этот каталог.
repo_path=Путь до корня репозитория
repo_path_helper=Все удалённые Git репозитории будут сохранены в эту директорию.
lfs_path=Корневой путь Git LFS
lfs_path_helper=В этой папке будут храниться файлы Git LFS. Оставьте пустым, чтобы отключить LFS.
lfs_path_helper=В этой директории будут храниться файлы Git LFS. Оставьте пустым, чтобы отключить LFS.
run_user=Запуск от имени пользователя
run_user_helper=Введите имя пользователя операционной системы, под которым работает Gitea. Обратите внимание, что этот пользователь должен иметь доступ к корневому пути репозиториев.
domain=Домен сервера
domain_helper=Домен или адрес хоста для сервера.
ssh_port=Порт SSH сервера
ssh_port_helper=Номер порта, который использует SSH сервер. Оставьте пустым, чтобы отключить SSH.
http_port=Gitea HTTP порт
@ -176,11 +183,11 @@ disable_gravatar_popup=Отключить Gravatar и сторонние ист
federated_avatar_lookup=Включить федеративные аватары
federated_avatar_lookup_popup=Включите поиск федеративного аватара для использования службы с открытым исходным кодом на основе libravatar.
disable_registration=Отключить самостоятельную регистрацию
disable_registration_popup=Запретить самостоятельную регистрацию. Только администраторы смогут создавать новые учетные записи пользователей.
disable_registration_popup=Отключить самостоятельную регистрацию. Только администраторы смогут создавать новые учетные записи пользователей.
allow_only_external_registration_popup=Разрешить регистрацию только через сторонние сервисы
openid_signin=Включение входа через OpenID
openid_signin_popup=Включение входа через OpenID.
openid_signup=Включить саморегистрацию OpenID
openid_signin=Включить вход через OpenID
openid_signin_popup=Включить вход через OpenID.
openid_signup=Включить регистрацию через OpenID
openid_signup_popup=Включить саморегистрацию OpenID.
enable_captcha=Включить CAPTCHA при регистрации
enable_captcha_popup=Запрашивать капчу при регистрации пользователя.
@ -195,18 +202,18 @@ admin_email=Адрес эл. почты
install_btn_confirm=Установить Gitea
test_git_failed=Не удалось проверить 'git' команду: %v
sqlite3_not_available=Эта версия Gitea не поддерживает SQLite3. Пожалуйста, загрузите официальную бинарную версию из %s (не 'go build' версия).
invalid_db_setting=Недопустимые параметры настройки базы данных: %v
invalid_db_setting=Некорректные настройки базы данных: %v
invalid_repo_path=Недопустимый путь к корню репозитория: %v
run_user_not_match=Текущий пользователь не является пользователем для запуска: %s -> %s
save_config_failed=Не удалось сохранить конфигурацию: %v
invalid_admin_setting=Указан недопустимый параметр учетной записи администратора: %v
invalid_admin_setting=Некорректные настройки учётной записи администратора: %v
install_success=Добро пожаловать! Благодарим вас за выбор Gitea, пользуйтесь с удовольствием!
invalid_log_root_path=Недопустимый путь для логов: %v
default_keep_email_private=Скрывать адреса электронной почты по умолчанию
default_keep_email_private_popup=Скрывать адреса электронной почты новых учетных записей по умолчанию.
default_allow_create_organization=Разрешить создание организаций по умолчанию
default_allow_create_organization_popup=Разрешить новым учетным записям пользователей создавать организации по умолчанию.
default_enable_timetracking=Включение отслеживания времени по умолчанию
default_enable_timetracking=Включить отслеживание времени по умолчанию
default_enable_timetracking_popup=Включить отслеживание времени для новых репозиториев по умолчанию.
no_reply_address=Скрытый почтовый домен
no_reply_address_helper=Доменное имя для пользователей со скрытым адресом электронной почты. Например, имя пользователя 'joe' будет зарегистрировано в Git как 'joe@noreply.example.org' если скрытый домен электронной почты установлен как 'noreply.example.org'.
@ -226,6 +233,7 @@ view_home=Показать %s
search_repos=Поиск репозитория…
filter=Другие фильтры
filter_by_team_repositories=Фильтровать по репозиториям команды
feed_of=Лента "%s"
show_archived=Архивировано
show_both_archived_unarchived=Показаны архивированные и разархивированные
@ -261,7 +269,7 @@ social_register_helper_msg=Уже есть аккаунт? Свяжите его
disable_register_prompt=Извините, возможность регистрации отключена. Пожалуйста, свяжитесь с администратором сайта.
disable_register_mail=Подтверждение регистрации по электронной почте отключено.
remember_me=Запомнить это устройство
forgot_password_title=Забыл пароль
forgot_password_title=Восстановить пароль
forgot_password=Забыли пароль?
sign_up_now=Нужен аккаунт? Зарегистрируйтесь.
sign_up_successful=Учётная запись была успешно создана.
@ -279,10 +287,10 @@ resend_mail=Нажмите здесь, чтобы переотправить а
email_not_associate=Этот адрес электронной почты не связан ни с одной учетной записью.
send_reset_mail=Отправить письмо для восстановления аккаунта
reset_password=Восстановление аккаунта
invalid_code=Этот код подтверждения недействителен или истек.
invalid_code=Код подтверждения недействителен или истёк.
reset_password_helper=Восстановить аккаунт
reset_password_wrong_user=Вы вошли как %s, но ссылка для восстановления аккаунта %s
password_too_short=Длина пароля не может быть меньше, чем %d символов.
password_too_short=Пароль не может быть короче %d символов.
non_local_account=Нелокальные аккаунты не могут изменить пароль через Gitea.
verify=Проверить
scratch_code=Одноразовый пароль
@ -344,26 +352,26 @@ reset_password.text=Пожалуйста, перейдите по ссылке,
register_success=Регистрация прошла успешно
issue_assigned.pull=@%[1]s назначил вам запрос на слияние %[2]s в репозитории %[3]s.
issue_assigned.issue=@%[1]s назначил вам задачу %[2]s в репозитории %[3]s.
issue_assigned.pull=@%[1]s назначил(а) вам запрос на слияние %[2]s в репозитории %[3]s.
issue_assigned.issue=@%[1]s назначил(а) вам задачу %[2]s в репозитории %[3]s.
issue.x_mentioned_you=<b>@%s</b> упомянул вас:
issue.action.force_push=<b>%[1]s</b> форсировал отправку изменений <b>%[2]s</b> с %[3]s до %[4]s.
issue.action.push_1=<b>@%[1]s</b> отправил %[3]d изменение %[2]s
issue.action.push_n=<b>@%[1]s</b> отправил %[3]d изменений %[2]s
issue.action.close=<b>@%[1]s</b> закрыты #%[2]d.
issue.action.reopen=<b>@%[1]s</b> переоткрыты #%[2]d.
issue.action.merge=<b>@%[1]s</b> слиты #%[2]d в %[3]s.
issue.action.approve=<b>@%[1]s</b> одобрил этот запрос на слияние.
issue.action.reject=<b>@%[1]s</b> запросил изменения в этом запросе на слияние.
issue.action.review=<b>@%[1]s</b> прокомментировал этот запрос на слияние.
issue.action.review_dismissed=<b>@%[1]s</b> отклонил последний отзыв с %[2]s для этого запроса на слияние.
issue.action.ready_for_review=<b>@%[1]s</b> отметил этот запрос на слияние как готовый к рассмотрению.
issue.action.new=<b>@%[1]s</b> создал #%[2]d.
issue.x_mentioned_you=<b>@%s</b> упомянул(а) вас:
issue.action.force_push=<b>%[1]s</b> форсировал(а) отправку изменений <b>%[2]s</b> с %[3]s до %[4]s.
issue.action.push_1=<b>@%[1]s</b> отправил(а) %[3]d изменение в %[2]s
issue.action.push_n=<b>@%[1]s</b> отправил(а) %[3]d изменений в %[2]s
issue.action.close=<b>@%[1]s</b> закрыл(а) #%[2]d.
issue.action.reopen=<b>@%[1]s</b> переоткрыл(а) #%[2]d.
issue.action.merge=<b>@%[1]s</b> слил(а) #%[2]d в %[3]s.
issue.action.approve=<b>@%[1]s</b> одобрил(а) этот запрос на слияние.
issue.action.reject=<b>@%[1]s</b> запросил(а) изменения в этом запросе на слияние.
issue.action.review=<b>@%[1]s</b> прокомментировал(а) этот запрос на слияние.
issue.action.review_dismissed=<b>@%[1]s</b> отклонил(а) последний отзыв с %[2]s для этого запроса на слияние.
issue.action.ready_for_review=<b>@%[1]s</b> отметил(а) этот запрос на слияние как готовый к рассмотрению.
issue.action.new=<b>@%[1]s</b> создал(а) #%[2]d.
issue.in_tree_path=В %s:
release.new.subject=%s в %s выпущено
release.new.text=<b>@%[1]s</b> выпустил релиз %[2]s в %[3]s
release.new.text=<b>@%[1]s</b> выпустил(а) релиз %[2]s в %[3]s
release.title=Название: %s
release.note=Примечание:
release.downloads=Загрузки:
@ -411,9 +419,9 @@ alpha_dash_error=` должен содержать только буквенно
alpha_dash_dot_error=` должен содержать только буквенно-цифровые символы, тире ('-'), подчеркивания ('_') и точки ('.').`
git_ref_name_error=` должно быть правильным ссылочным именем Git.`
size_error=` должен быть размер %s.`
min_size_error=«должен содержать по крайней мере %s символов.»
min_size_error=` должен содержать по крайней мере %s символов.`
max_size_error=` должен содержать максимум %s символов.`
email_error=`не является адресом электронной почты.`
email_error=` не является адресом электронной почты.`
url_error=` не является допустимым URL-адресом.`
include_error=` должен содержать '%s'.`
glob_pattern_error=` неверный glob шаблон: %s.`
@ -445,9 +453,9 @@ password_uppercase_one=Как минимум один заглавный сим
password_digit_one=По крайней мере одна цифра
password_special_one=По крайней мере один специальный символ (знаки пунктуации, скобки, кавычки и т. д.)
enterred_invalid_repo_name=Введённое вами название репозитория неверно.
enterred_invalid_org_name=Введенное вам название организации некоррктно.
enterred_invalid_owner_name=Имя нового владельца недоступно.
enterred_invalid_password=Введенный пароль неверный.
enterred_invalid_org_name=Введённое вам название организации некорректно.
enterred_invalid_owner_name=Имя нового владельца некорректно.
enterred_invalid_password=Введённый пароль неверен.
user_not_exist=Пользователь не существует.
team_not_exist=Команда не существует.
last_org_owner=Вы не можете удалить последнего пользователя из команды 'Владельцы'. Для организации должен быть хотя бы один владелец.
@ -456,14 +464,14 @@ cannot_add_org_to_team=Организацию нельзя добавить в
invalid_ssh_key=Не удается проверить SSH ключ: %s
invalid_gpg_key=Не удается проверить GPG ключ: %s
invalid_ssh_principal=Неверный участник: %s
unable_verify_ssh_key=Не удается проверить ключ SSH; дважды проверьте его на наличие ошибок.
unable_verify_ssh_key=Не удаётся проверить ключ SSH; перепроверьте его на наличие ошибок.
auth_failed=Ошибка аутентификации: %v
still_own_repo=Ваша учетная запись владеет одним или несколькими репозиториями; удалите или перенесите их в первую очередь.
still_has_org=Ваша учетная запись является членом одной или нескольких организаций; выйдите из них в первую очередь.
still_own_repo=Ваша учётная запись владеет одним или несколькими репозиториями; сначала удалите или перенесите их.
still_has_org=Ваша учётная запись является членом одной или нескольких организаций; сначала выйдите из них.
org_still_own_repo=Эта организация по-прежнему владеет одним или несколькими репозиториями; сначала удалите или перенесите их.
target_branch_not_exist=Целевая ветка не существует
target_branch_not_exist=Целевая ветка не существует.
[user]
change_avatar=Изменить свой аватар…
@ -488,11 +496,12 @@ form.name_chars_not_allowed=Имя пользователя '%s' содержи
[settings]
profile=Профиль
account=Аккаунт
appearance=Внешний вид
password=Пароль
security=Безопасность
avatar=Аватар
ssh_gpg_keys=SSH / GPG ключи
social=Учетные записи в соцсетях
social=Учётные записи в соцсетях
applications=Приложения
orgs=Управление организациями
repos=Репозитории
@ -512,11 +521,13 @@ website=Веб-сайт
location=Местоположение
update_theme=Обновить тему
update_profile=Обновить профиль
update_language=Обновить язык
update_language_not_found=Язык '%s' недоступен.
update_profile_success=Ваш профиль успешно обновлен.
update_language_success=Язык обновлён.
update_profile_success=Ваш профиль успешно обновлён.
change_username=Ваше имя пользователя было изменено.
change_username_prompt=Примечание: изменения имени пользователя также изменяют URL-адрес учетной записи.
change_username_redirect_prompt=Старое имя пользователя будет перенаправлено до тех пор, пока оно не будет введено.
change_username_prompt=Примечание: изменения имени пользователя также изменяют URL-адрес учётной записи.
change_username_redirect_prompt=Старое имя пользователя будет перенаправлять на новое до тех пор, пока его не займут.
continue=Далее
cancel=Отмена
language=Язык
@ -534,6 +545,7 @@ delete_current_avatar=Удалить текущий аватар
uploaded_avatar_not_a_image=Загружаемый файл не является изображением.
uploaded_avatar_is_too_big=Загруженный файл превысил максимальный размер.
update_avatar_success=Ваш аватар был изменен.
update_user_avatar_success=Аватар пользователя обновлён.
change_password=Обновить пароль
old_password=Текущий пароль
@ -793,7 +805,7 @@ trust_model_helper_collaborator_committer=Соавтор+Коммитер: До
trust_model_helper_default=По умолчанию: используйте модель доверия по умолчанию для этой установки
create_repo=Создать репозиторий
default_branch=Ветка по умолчанию
default_branch_helper=Ветка по умолчанию является базовой веткой для pull request'ов и коммитов кода.
default_branch_helper=Ветка по умолчанию является базовой веткой для запросов на слияние и коммитов кода.
mirror_prune=Очистить
mirror_prune_desc=Удаление устаревших отслеживаемых ссылок
mirror_interval=Интервал зеркалирования (допустимые единицы измерения 'h', 'm', 's'). Значение 0 отключает синхронизацию.
@ -844,7 +856,7 @@ desc.internal_template=Внутренний шаблон
desc.archived=Архивировано
template.items=Элементы шаблона
template.git_content=Содержимое Git (Ветвь По Умолчанию)
template.git_content=Содержимое Git (ветвь по умолчанию)
template.git_hooks=Git hook'и
template.git_hooks_tooltip=В настоящее время вы не можете изменить или удалить Git hook'и после добавления. Выберите, только если вы доверяете репозиторию шаблона.
template.webhooks=Веб-хуки
@ -854,12 +866,12 @@ template.issue_labels=Метки задач
template.one_item=Необходимо выбрать хотя бы один элемент шаблона
template.invalid=Необходимо выбрать хранилище шаблонов
archive.title=Это архивный репозиторий. Вы можете его клонировать или просматривать файлы, но не вносить изменения или открывать задачи/запросы на слияние.
archive.title=Это репозиторий в архиве. Вы можете его клонировать или просматривать файлы, но не вносить изменения или открывать задачи/запросы на слияние.
archive.issue.nocomment=Этот репозиторий в архиве. Вы не можете комментировать задачи.
archive.pull.nocomment=Это архивный репозиторий. Вы не можете комментировать запросы на слияние.
archive.pull.nocomment=Это репозиторий в архиве. Вы не можете комментировать запросы на слияние.
form.reach_limit_of_creation_1=Вы уже достигли вашего лимита в %d репозитории.
form.reach_limit_of_creation_n=Вы уже достигли ваш предел %d репозиториев.
form.reach_limit_of_creation_1=Достигнуто ограничение на количество репозиториев: %d.
form.reach_limit_of_creation_n=Достигнуто ограничение на количество репозиториев: %d.
form.name_reserved=Название репозитория '%s' зарезервировано.
form.name_pattern_not_allowed=Шаблон имени репозитория '%s' не допускается.
@ -870,8 +882,8 @@ migrate_options_mirror_helper=Этот репозиторий будет <span c
migrate_options_mirror_disabled=Администратор вашего сайта отключил новые зеркала.
migrate_options_lfs=Перенос LFS файлов
migrate_options_lfs_endpoint.label=LFS Endpoint
migrate_options_lfs_endpoint.description=Миграция попытается использовать ваш Git удаленно, чтобы <a target="_blank" rel="noopener noreferrer" href="%s">определить сервер LFS</a>. Вы также можете указать пользовательскую конечную точку, если данные хранится где-то в хранилище.
migrate_options_lfs_endpoint.description.local=Поддерживается также путь на локальном сервере.
migrate_options_lfs_endpoint.description=Миграция попытается использовать ваш Git удаленно, чтобы <a target="_blank" rel="noopener noreferrer" href="%s">определить сервер LFS</a>. Вы также можете указать пользовательскую конечную точку, если данные хранятся в другом месте.
migrate_options_lfs_endpoint.description.local=Также поддерживается путь на локальном сервере.
migrate_options_lfs_endpoint.placeholder=Оставьте пустым для получения из клонируемого URL
migrate_items=Элементы миграции
migrate_items_wiki=Вики
@ -884,36 +896,39 @@ migrate_items_releases=Релизы
migrate_repo=Перенос репозитория
migrate.clone_address=Перенос / Клонирование по URL
migrate.clone_address_desc=Это может быть HTTP/HTTPS/GIT адрес или локальный путь существующего репозитория на сервере.
migrate.clone_local_path=или путь к локальному серверу
migrate.clone_local_path=или локальный путь на сервере
migrate.permission_denied=У вас нет прав на импорт локальных репозиториев.
migrate.invalid_local_path=Недопустимый локальный путь. Возможно он не существует или не является папкой.
migrate.permission_denied_blocked=Вы не можете импортировать с запрещённых хостов, пожалуйста, попросите администратора проверить настройки ALLOWED_DOMAINS/ALLOW_LOCALNETWORKS/BLOCKED_DOMAINS.
migrate.invalid_local_path=Недопустимый локальный путь. Возможно он не существует или не является директорией.
migrate.invalid_lfs_endpoint=Конечная точка LFS недействительна.
migrate.failed=Миграция не удалась: %v
migrate.migrate_items_options=Токен доступа необходим для миграции дополнительных элементов
migrated_from=Перенесено с <a href="%[1]s">%[2]s</a>
migrated_from_fake=Перенесено с %[1]s
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=Миграция не удалась.
migrate.github.description=Перенести данные с github.com или других экземпляров GitHub Enterprise Server.
migrate.git.description=Перенести только репозиторий из любого Git сервиса.
migrate.gitlab.description=Перенести данные с gitlab.com или других экземпляров GitLab.
migrate.gitea.description=Перенести данные с gitea.com или других экземпляров Gitea.
migrate.gogs.description=Перенести данные с notabug.org или других экземпляров Gogs.
migrate.onedev.description=Перенести данные с code.onedev.io или других экземпляров OneDev.
migrate.gitbucket.description=Перенести данные из экземпляров GitBucket.
migrate.migrating_git=Перенос Git данных
migrate.migrating_topics=Миграция тем
migrate.migrating_milestones=Миграция этапов
migrate.migrating_labels=Миграция меток
migrate.migrating_releases=Миграция релизов
migrate.migrating_issues=Миграция Замечаний
migrate.migrating_pulls=Миграция Pull Request
migrate.migrating_issues=Миграция задач
migrate.migrating_pulls=Миграция запросов на слияние
mirror_from=зеркало из
forked_from=форкнуто от
generated_from=создано из
fork_from_self=Вы не можете форкнуть репозиторий, так как вы уже его владелец.
fork_from_self=Вы не можете форкнуть ваш собственный репозиторий.
fork_guest_user=Войдите, чтобы форкнуть репозиторий.
watch_guest_user=Войдите, чтобы следить за этим репозиторием.
star_guest_user=Войдите, чтобы добавить в избранное этот репозиторий.
@ -941,10 +956,10 @@ find_tag=Найти тег
branches=Ветки
tags=Теги
issues=Задачи
pulls=Pull Request'ы
pulls=Запросы на слияние
project_board=Проекты
labels=Метки
org_labels_desc=Метки уровня организации, которые можно использовать с <strong>всеми репозиториями</strong> в этой организации
org_labels_desc=Метки уровня организации, которые можно использовать с <strong>всеми репозиториями< / strong> в этой организации
org_labels_desc_manage=управлять
milestones=Этапы
@ -954,6 +969,7 @@ release=Релиз
releases=Релизы
tag=Тег
released_this=выпустил(-а) это
file.title=%s в %s
file_raw=Исходник
file_history=История
file_view_source=Просмотреть исходный код
@ -961,15 +977,18 @@ file_view_rendered=Просмотр отрендеренного
file_view_raw=Посмотреть исходник
file_permalink=Постоянная ссылка
file_too_large=Этот файл слишком большой, поэтому он не может быть отображён.
file_copy_permalink=Копировать постоянную ссылку
video_not_supported_in_browser=Ваш браузер не поддерживает HTML5 'video' тэг.
audio_not_supported_in_browser=Ваш браузер не поддерживает HTML5 'audio' тэг.
stored_lfs=Хранится Git LFS
symbolic_link=Символическая ссылка
commit_graph=Граф коммитов
commit_graph.select=Выбрать ветку
commit_graph.hide_pr_refs=Скрыть Pull Requests
commit_graph.hide_pr_refs=Скрыть запросы на слияние
commit_graph.monochrome=Моно
commit_graph.color=Цвет
blame=Вина
download_file=Скачать файл
normal_view=Обычный вид
line=строка
lines=строки
@ -988,10 +1007,10 @@ editor.delete_this_file=Удалить файл
editor.must_have_write_access=Вам необходимо иметь права на запись, чтобы вносить или предлагать изменения этого файла.
editor.file_delete_success=Файл '%s' удалён.
editor.name_your_file=Назовите свой файл…
editor.filename_help=Чтобы добавить каталог, просто наберите название и нажмите /. Чтобы удалить каталог, перейдите к началу поля и нажмите клавишу backspace.
editor.filename_help=Чтобы добавить директорию, введите название и нажмите '/'. Чтобы удалить, перейдите к началу поля и нажмите клавишу backspace.
editor.or=или
editor.cancel_lower=Отменить
editor.commit_signed_changes=Подписанные изменения
editor.commit_signed_changes=Зафиксировать подписанные изменения
editor.commit_changes=Сохранить правки
editor.add_tmpl=Добавить '<filename>'
editor.add=Создал(а) '%s'
@ -1000,7 +1019,7 @@ editor.delete=Удалить '%s'
editor.commit_message_desc=Добавьте необязательное расширенное описание…
editor.signoff_desc=Добавить Signed-off-by коммитом в конце сообщения журнала коммитов.
editor.commit_directly_to_this_branch=Сделайте коммит прямо в ветку <strong class="branch-name">%s</strong>.
editor.create_new_branch=Создайте <strong>новую ветку</strong> для этого коммита, и сделайте Pull Request.
editor.create_new_branch=Создайте <strong>новую ветку</strong> для этого коммита, и сделайте запрос на слияние.
editor.create_new_branch_np=Создать <strong>новую ветку</strong> для этого коммита.
editor.propose_file_change=Предложить изменение файла
editor.new_branch_name_desc=Новое название ветки…
@ -1008,23 +1027,23 @@ editor.cancel=Отмена
editor.filename_cannot_be_empty=Имя файла не может быть пустым.
editor.filename_is_invalid=Недопустимое имя файла: '%s'.
editor.branch_does_not_exist=Ветка '%s' отсутствует в этом репозитории.
editor.branch_already_exists=Ветка «%s» уже существует в этом репозитории.
editor.directory_is_a_file=Имя каталога '%s' уже используется в качестве имени файла в этом репозитории.
editor.branch_already_exists=Ветка '%s' уже существует в этом репозитории.
editor.directory_is_a_file=Имя директории '%s' уже используется в качестве имени файла в этом репозитории.
editor.file_is_a_symlink='%s' является символической ссылкой. Символические ссылки нельзя редактировать в веб-редакторе
editor.filename_is_a_directory=Имя файла '%s' уже используется в качестве имени каталога в этом репозитории.
editor.filename_is_a_directory=Имя файла '%s' уже используется в качестве имени директории в этом репозитории.
editor.file_editing_no_longer_exists=Редактируемый файл '%s' больше не существует в этом репозитории.
editor.file_deleting_no_longer_exists=Удаляемый файл '%s' больше не существует в этом репозитории.
editor.file_changed_while_editing=Содержимое файла изменилось с момента начала редактирования. <a target="_blank" rel="noopener noreferrer" href="%s">Нажмите здесь</a>, чтобы увидеть, что было изменено, или <strong>Зафиксировать изменения снова</strong>, чтобы заменить их.
editor.file_already_exists=Файл с именем '%s' уже существует в репозитории.
editor.commit_empty_file_header=Закоммитить пустой файл
editor.commit_empty_file_text=Файл, который в коммите, пуст. Продолжить?
editor.commit_empty_file_text=Файл, который вы собираетесь зафиксировать, пуст. Продолжить?
editor.no_changes_to_show=Нет изменений.
editor.fail_to_update_file=Ошибка обновления/создания файла '%s'.
editor.fail_to_update_file_summary=Ошибка:
editor.push_rejected_no_message=Сервер отклонил изменение без сообщения. Пожалуйста, проверьте githooks.
editor.push_rejected=Изменение отклонено сервером. Пожалуйста, проверьте гит-хуки.
editor.push_rejected_summary=Ошибка отказа полностью:
editor.add_subdir=Добавить каталог
editor.add_subdir=Добавить директорию
editor.unable_to_upload_files=Не удалось загрузить файлы в '%s' из-за ошибки: %v
editor.upload_file_is_locked=Файл '%s' заблокирован %s.
editor.upload_files_to_dir=Загрузил(а) файлы в '%s'
@ -1061,7 +1080,7 @@ projects.description_placeholder=Описание
projects.create=Создать проект
projects.title=Заголовок
projects.new=Новый проект
projects.new_subheader=Координация, отслеживание и обновление работы в одном месте, так что проекты остаются прозрачными и по графику.
projects.new_subheader=Координируйте, отслеживайте и обновляйте работу в одном месте, так что проекты остаются прозрачными и в графике.
projects.create_success=Проект '%s' был создан.
projects.deletion=Удалить проект
projects.deletion_desc=Удаление проекта приведёт к его удалению из всех связанных задач. Продолжить?
@ -1085,6 +1104,7 @@ projects.board.set_default=Установить по умолчанию
projects.board.set_default_desc=Установить эту доску по умолчанию для неклассифицированных задач и pull-ов
projects.board.delete=Удалить доску
projects.board.deletion_desc=Удаление доски проектов перемещает все связанные задачи в 'Без категории'. Продолжить?
projects.board.color=Цвет
projects.open=Открыть
projects.close=Закрыть
@ -1099,7 +1119,7 @@ issues.new.title_empty=Заголовок не может быть пустым
issues.new.labels=Метки
issues.new.add_labels_title=Применить метки
issues.new.no_label=Нет меток
issues.new.clear_labels=Отчистить метки
issues.new.clear_labels=Очистить метки
issues.new.projects=Проекты
issues.new.add_project_title=Задать проект
issues.new.clear_projects=Очистить проекты
@ -1139,19 +1159,22 @@ issues.remove_label=удалён %s с меткой %s
issues.remove_labels=удалён %s с метками %s
issues.add_remove_labels=добавлен %s и удалён %s с метками %s
issues.add_milestone_at=`добавил(а) к этапу <b>%s</b> %s`
issues.add_project_at=`добавил в <b>%s</b> проект %s`
issues.change_milestone_at=`поменял целевой этап с <b>%s</b> на <b>%s</b> %s`
issues.change_project_at=`изменил проект с <b>%s</b> на <b>%s</b> %s`
issues.remove_milestone_at=`удалил из этапа <b>%s</b> %s`
issues.remove_project_at=`удалил это из проекта <b>%s</b> %s`
issues.add_project_at=`добавил(а) в <b>%s</b> проект %s`
issues.change_milestone_at=`поменял(а) целевой этап с <b>%s</b> на <b>%s</b> %s`
issues.change_project_at=`изменил(а) проект с <b>%s</b> на <b>%s</b> %s`
issues.remove_milestone_at=`удалил(а) из этапа <b>%s</b> %s`
issues.remove_project_at=`удалил(а) это из проекта <b>%s</b> %s`
issues.deleted_milestone=`(удалено)`
issues.deleted_project=`(удалено)`
issues.self_assign_at=`самоназначился %s`
issues.self_assign_at=`назначил(а) на себя %s`
issues.add_assignee_at=`был(а) назначен(а) <b>%s</b> %s`
issues.remove_assignee_at=`был снят с назначения <b>%s</b> %s`
issues.remove_self_assignment=`убрал их назначение %s`
issues.change_title_at=`изменил заголовок с <b><strike>%s</strike></b> на <b>%s</b> %s`
issues.delete_branch_at=`удалена ветка <b>%s</b> %s`
issues.remove_self_assignment=`убрал(а) их назначение %s`
issues.change_title_at=`изменил(а) заголовок с <b><strike>%s</strike></b> на <b>%s</b> %s`
issues.change_ref_at=`изменил(а) ссылку с <b><strike>%s</strike></b> на <b>%s</b> %s`
issues.remove_ref_at=`убрал(а) ссылку <b>%s</b> %s`
issues.add_ref_at=`добавил(а) ссылку <b>%s</b> %s`
issues.delete_branch_at=`удалил(а) ветку <b>%s</b> %s`
issues.open_tab=%d открыто(ы)
issues.close_tab=%d закрыто(ы)
issues.filter_label=Метка
@ -1198,17 +1221,17 @@ issues.next=Следующая
issues.open_title=Открыто
issues.closed_title=Закрыто
issues.num_comments=комментариев: %d
issues.commented_at=`прокомментировал <a href="#%s"> %s</a>`
issues.commented_at=`прокомментировал(а) <a href="#%s"> %s</a>`
issues.delete_comment_confirm=Вы уверены, что хотите удалить этот комментарий?
issues.context.copy_link=Копировать ссылку
issues.context.quote_reply=Цитировать ответ
issues.context.reference_issue=Ссылка в новой проблеме
issues.context.reference_issue=Ссылка в новой задаче
issues.context.edit=Редактировать
issues.context.delete=Удалить
issues.no_content=Пока нет содержимого.
issues.close_issue=Закрыть
issues.pull_merged_at=`Объединил коммит <a class="ui sha" href="%[1]s"><code>%[2]s</code></a> в <b>%[3]s</b> %[4]s`
issues.manually_pull_merged_at=`%[4]s вручную объединил коммит <a class="ui sha" href="%[1]s"><code>%[2]s</code></a> в <b>%[3]s</b>`
issues.pull_merged_at=`объединил(а) коммит <a class="ui sha" href="%[1]s"><code>%[2]s</code></a> в <b>%[3]s</b> %[4]s`
issues.manually_pull_merged_at=`%[4]s вручную объединил(а) коммит <a class="ui sha" href="%[1]s"><code>%[2]s</code></a> в <b>%[3]s</b>`
issues.close_comment_issue=Прокомментировать и закрыть
issues.reopen_issue=Открыть снова
issues.reopen_comment_issue=Прокомментировать и открыть снова
@ -1217,9 +1240,9 @@ issues.closed_at=`закрыл(а) эту задачу <a id="%[1]s" href="#%[1]
issues.reopened_at=`переоткрыл(а) эту проблему <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.commit_ref_at=`упомянул эту задачу в коммите <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_issue_from=`<a href="%[3]s">ссылка на эту проблему %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_pull_from=`<a href="%[3]s">ссылается на этот Pull Request %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_closing_from=`<a href="%[3]s">ссылается на Pull Request %[4]s, который закроет эту задачу</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_reopening_from=`<a href="%[3]s">ссылается на Pull Request %[4]s, который вновь откроет эту задачу</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_pull_from=`<a href="%[3]s">ссылается на этот запрос на слияние %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_closing_from=`<a href="%[3]s">ссылается на запрос на слияние %[4], который закроет эту задачу</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_reopening_from=`<a href="%[3]s">ссылается на запрос на слияние %[4]s, который вновь откроет эту задачу</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_closed_from=`<a href="%[3]s">закрыл этот запрос %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_reopened_from=`<a href="%[3]s">переоткрыл эту задачу %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_from=`из %[1]s`
@ -1323,7 +1346,7 @@ issues.dependency.remove=Удалить
issues.dependency.remove_info=Удалить эту зависимость
issues.dependency.added_dependency=`добавить новую зависимость %s`
issues.dependency.removed_dependency=`убрал зависимость %s`
issues.dependency.pr_closing_blockedby=Закрытие этого Pull Request'а блокируется следующими задачами
issues.dependency.pr_closing_blockedby=Закрытие этого запроса на слияние блокируется следующими задачами
issues.dependency.issue_closing_blockedby=Закрытие этой задачи блокируется следующими задачами
issues.dependency.issue_close_blocks=Эта задача блокирует закрытие следующих задач
issues.dependency.pr_close_blocks=Этот запрос на слияние блокирует закрытие следующих задач
@ -1334,21 +1357,21 @@ issues.dependency.blocked_by_short=Зависит от
issues.dependency.remove_header=Удалить зависимость
issues.dependency.issue_remove_text=Это приведет к удалению зависимости от этой задачи. Продолжить?
issues.dependency.pr_remove_text=Это приведёт к удалению зависимости от этого запроса на слияние. Продолжить?
issues.dependency.setting=Включение зависимостей для проблем и запросов на слияние
issues.dependency.setting=Включение зависимостей для задач и запросов на слияние
issues.dependency.add_error_same_issue=Вы не можете заставить задачу зависеть от самой себя.
issues.dependency.add_error_dep_issue_not_exist=Зависимая задача не существует.
issues.dependency.add_error_dep_not_exist=Зависимости не существует.
issues.dependency.add_error_dep_exists=Зависимость уже существует.
issues.dependency.add_error_cannot_create_circular=Вы не можете создать зависимость с двумя задачами, блокирующими друг друга.
issues.dependency.add_error_dep_not_same_repo=Обе задачи должны находиться в одном репозитории.
issues.review.self.approval=Вы не можете одобрить собственный Pull Request.
issues.review.self.rejection=Невозможно запрашивать изменения своего Pull Request'а.
issues.review.self.approval=Вы не можете одобрить собственный запрос на слияние.
issues.review.self.rejection=Невозможно запрашивать изменения своего запроса на слияние.
issues.review.approve=одобрил(а) эти изменения %s
issues.review.comment=рассмотрел(а) изменения %s
issues.review.dismissed=отклонен отзыв %s %s
issues.review.dismissed_label=Отклонено
issues.review.left_comment=оставил комментарий
issues.review.content.empty=Запрашивая изменения, вы обязаны оставить комментарий с пояснением своих пожеланий относительно Pull Request'а.
issues.review.content.empty=Запрашивая изменения, вы обязаны оставить комментарий с пояснением своих пожеланий относительно запроса на слияние.
issues.review.reject=запросил(а) изменения %s
issues.review.wait=был запрошен для отзыва %s
issues.review.add_review_request=запросил отзыв от %s %s
@ -1367,54 +1390,63 @@ issues.review.un_resolve_conversation=Незавершённый разгово
issues.review.resolved_by=пометить этот разговор как разрешённый
issues.assignee.error=Не все назначения были добавлены из-за непредвиденной ошибки.
issues.reference_issue.body=Тело
issues.content_history.deleted=удалено
issues.content_history.edited=отредактировано
issues.content_history.created=создано
issues.content_history.delete_from_history=Удалить из истории
issues.content_history.delete_from_history_confirm=Удалить из истории?
issues.content_history.options=Настройки
compare.compare_base=Основа
compare.compare_head=сравнить
pulls.desc=Включить запросы на слияние и проверки кода.
pulls.new=Новый Pull Request
pulls.compare_changes=Новый Pull Request
pulls.new=Новый запрос на слияние
pulls.compare_changes=Новый запрос на слияние
pulls.compare_changes_desc=Сравнить две ветки и создать запрос на слияние для изменений.
pulls.compare_base=родительская ветка
pulls.compare_compare=взять из
pulls.switch_comparison_type=Переключить тип сравнения
pulls.switch_head_and_base=Поменять исходную и целевую ветки местами
pulls.filter_branch=Фильтр по ветке
pulls.no_results=Результатов не найдено.
pulls.nothing_to_compare=Нечего сравнивать, родительская и текущая ветка одинаковые.
pulls.nothing_to_compare_and_allow_empty_pr=Ветки идентичны. Этот PR будет пустым.
pulls.create=Создать Pull Request
pulls.has_pull_request=`Запрос на слияние этих веток уже существует: <a href="%[1]s">%[2]s#%[3]d</a>`
pulls.create=Создать запрос на слияние
pulls.title_desc=хочет смерджить %[1]d коммит(ов) из <code>%[2]s</code> в <code id="branch_target">%[3]s</code>
pulls.merged_title_desc=слито %[1]d коммит(ов) из <code>%[2]s</code> в <code>%[3]s</code> %[4]s
pulls.change_target_branch_at=`изменил целевую ветку с <b>%s</b> на <b>%s</b> %s`
pulls.tab_conversation=Обсуждение
pulls.tab_commits=Коммиты
pulls.tab_files=Изменённые файлы
pulls.reopen_to_merge=Пожалуйста, переоткройте этот Pull Request для выполнения слияния.
pulls.reopen_to_merge=Пожалуйста, переоткройте этот запрос на слияние для выполнения слияния.
pulls.cant_reopen_deleted_branch=Этот запрос на слияние не может быть открыт заново, потому что ветка была удалена.
pulls.merged=Слито
pulls.merged_as=Pull Request был объединен как <a rel="nofollow" class="ui sha" href="%[1]s"><code>%[2]s</code></a>.
pulls.merged_as=Запрос на слияние был объединен как <a rel="nofollow" class="ui sha" href="%[1]s"><code>%[2]s</code></a>.
pulls.manually_merged=Слито вручную
pulls.manually_merged_as=Pull request был объединён вручную, как <a rel="nofollow" class="ui sha" href="%[1]s"><code>%[2]s</code></a>.
pulls.is_closed=Слияние этого запроса успешно завершено.
pulls.manually_merged_as=Запрос на слияние был объединён вручную, как <a rel="nofollow" class="ui sha" href="%[1]s"><code>%[2]s</code></a>.
pulls.is_closed=Запрос на слияние был закрыт.
pulls.has_merged=Слияние этого запроса успешно завершено.
pulls.title_wip_desc=`<a href="#">Добавьте <strong>%s</strong> в начало заголовка</a> для защиты от случайного досрочного принятия Pull Request'а.`
pulls.title_wip_desc=`<a href="#">Добавьте <strong>%s</strong> в начало заголовка</a> для защиты от случайного досрочного принятия запроса на слияние
pulls.cannot_merge_work_in_progress=Этот запрос на слияние помечен как в процессе работы.
pulls.still_in_progress=Всё ещё в процессе?
pulls.add_prefix=Добавить <strong>%s</strong> префикс
pulls.remove_prefix=Удалить <strong>%s</strong> префикс
pulls.data_broken=Содержимое этого запроса было нарушено вследствие удаления информации форка.
pulls.files_conflicted=Этот Pull Request имеет изменения, конфликтующие с целевой веткой.
pulls.files_conflicted=Этот запрос на слияние имеет изменения конфликтующие с целевой веткой.
pulls.is_checking=Продолжается проверка конфликтов, пожалуйста обновите страницу несколько позже.
pulls.is_empty=Ветвь идентична с целевой.
pulls.required_status_check_failed=Некоторые необходимые проверки не были пройдены.
pulls.required_status_check_missing=Отсутствуют некоторые обязательные проверки.
pulls.required_status_check_administrator=Как администратор, вы все равно можете ержить этот PR.
pulls.blocked_by_approvals=Этому Pull Request'у не хватает одобрений. Получено %d из %d одобрений.
pulls.required_status_check_administrator=Как администратор, вы все равно можете принять этот запрос на слияние.
pulls.blocked_by_approvals=Этому запросу на слияние не хватает одобрений. Получено %d из %d одобрений.
pulls.blocked_by_rejection=Официальным проверяющим были запрошены изменения для этого запроса на слияние.
pulls.blocked_by_official_review_requests=Этот Pull Request содержит официальные запросы на проверку.
pulls.blocked_by_outdated_branch=Этот Pull Request заблокирован, потому что он устарел.
pulls.blocked_by_changed_protected_files_1=Этот Pull Request заблокирован, потому что он изменяет защищенный файл:
pulls.blocked_by_changed_protected_files_n=Этот Pull Request заблокирован, потому что он изменяет защищенные файлы:
pulls.can_auto_merge_desc=Этот Pull Request может быть объединён автоматически.
pulls.blocked_by_official_review_requests=Этот запрос на слияние содержит официальные запросы на проверку.
pulls.blocked_by_outdated_branch=Этот запрос на слияние заблокирован, потому что он устарел.
pulls.blocked_by_changed_protected_files_1=Этот запрос на слияние заблокирован, потому что он изменяет защищенный файл:
pulls.blocked_by_changed_protected_files_n=Этот запрос на слияние заблокирован, потому что он изменяет защищенные файлы:
pulls.can_auto_merge_desc=Этот запрос на слияние может быть объединён автоматически.
pulls.cannot_auto_merge_desc=Этот запрос на слияние не может быть объединён автоматически.
pulls.cannot_auto_merge_helper=Пожалуйста, совершите слияние вручную для урегулирования конфликтов.
pulls.num_conflicting_files_1=%d конфликтующий файл
@ -1427,19 +1459,19 @@ pulls.waiting_count_1=%d ожидает проверки
pulls.waiting_count_n=%d ожидающих отзывов
pulls.wrong_commit_id=id фиксации должен быть идентификатором фиксации в целевой ветке
pulls.no_merge_desc=Pull Request не может быть принят, так как отключены все настройки слияния.
pulls.no_merge_helper=Включите опции слияния в настройках репозитория или совершите слияние Pull Request'а вручную.
pulls.no_merge_wip=Данный Pull Request не может быть принят, поскольку он помечен как находящийся в разработке.
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=Выпольнить Rebase, а затем fast-forward слияние
pulls.rebase_merge_commit_pull_request=Выпольнить rebase, а затем создать коммит слияния
pulls.rebase_merge_pull_request=Выполнить Rebase, а затем fast-forward слияние
pulls.rebase_merge_commit_pull_request=Выполнить rebase, а затем создать коммит слияния
pulls.squash_merge_pull_request=Создать объединенный (squash) коммит
pulls.merge_manually=Слито вручную
pulls.merge_commit_id=ID коммита слияния
pulls.require_signed_wont_sign=Данная ветка ожидает подписанные коммиты, однако слияние не будет подписано
pulls.invalid_merge_option=Этот параметр слияния нельзя использовать для этого Pull Request'а.
pulls.invalid_merge_option=Этот параметр слияния нельзя использовать для этого запроса на слияние.
pulls.merge_conflict=Слияние не удалось: Произошел конфликт во время слияния. Совет: попробуйте другую стратегию
pulls.merge_conflict_summary=Сообщение об ошибке
pulls.rebase_conflict=Слияние не удалось: Произошел конфликт во время слияния: %[1]s. Совет: попробуйте другую стратегию
@ -1552,16 +1584,16 @@ activity.period.quarterly=3 месяца
activity.period.semiyearly=6 месяцев
activity.period.yearly=1 год
activity.overview=Обзор
activity.active_prs_count_1=<strong>%d</strong> Активный Pull Request
activity.active_prs_count_n=<strong>%d</strong> Активных Pull Request'ов
activity.merged_prs_count_1=Принятый Pull Request
activity.merged_prs_count_n=Принятых Pull Request'ов
activity.opened_prs_count_1=Новый Pull Request
activity.opened_prs_count_n=Новых Pull Request'ов
activity.active_prs_count_1=<strong>%d</strong> активный запросов на слияние
activity.active_prs_count_n=<strong>%d</strong> активных запросов на слияние
activity.merged_prs_count_1=Принятый запрос на слияние
activity.merged_prs_count_n=Принятых запросов на слияние
activity.opened_prs_count_1=Новый запрос на слияние
activity.opened_prs_count_n=Новых запросов на слияние
activity.title.user_1=%d пользователь
activity.title.user_n=%d пользователей
activity.title.prs_1=%d Pull Request
activity.title.prs_n=%d Pull Request'ов
activity.title.prs_1=%d запрос на слияние
activity.title.prs_n=%d запросов на слияние
activity.title.prs_merged_by=%s приняты %s
activity.title.prs_opened_by=%s предложены %s
activity.merged_prs_label=Принято
@ -1580,7 +1612,7 @@ activity.new_issues_count_n=Новых задач
activity.new_issue_label=Открытые
activity.title.unresolved_conv_1=%d Незавершённое обсуждение
activity.title.unresolved_conv_n=%d Незавершённых обсуждений
activity.unresolved_conv_desc=Список всех старых тикетов и Pull Request'ов с недавней активностью, но ещё не закрытых либо принятых.
activity.unresolved_conv_desc=Список задач и запросов на слияние с недавней активностью, но ещё не закрытых либо принятых.
activity.unresolved_conv_label=Открытые
activity.title.releases_1=%d релиз
activity.title.releases_n=%d релизов
@ -1666,7 +1698,7 @@ settings.tracker_issue_style.alphanumeric=Буквенноцифровой
settings.tracker_url_format_desc=Вы можете использовать шаблоны <code>{user}</code>, <code>{repo}</code> и <code>{index}</code> для имени пользователя, репозитория и номера задачи.
settings.enable_timetracker=Включить отслеживание времени
settings.allow_only_contributors_to_track_time=Учитывать только участников разработки в подсчёте времени
settings.pulls_desc=Включить публичные запросы на слияние
settings.pulls_desc=Включить запросы на слияние
settings.pulls.ignore_whitespace=Игнорировать незначащие изменения (пробелы, табуляция) при проверке на конфликты слияния
settings.pulls.allow_merge_commits=Разрешить коммиты слияния
settings.pulls.allow_rebase_merge=Разрешить rebase-слияние
@ -1674,7 +1706,7 @@ settings.pulls.allow_rebase_merge_commit=Разрешить rebase с явным
settings.pulls.allow_squash_commits=Разрешить объединять коммиты перед слиянием (squash)
settings.pulls.allow_manual_merge=Пометить PR как слитый вручную
settings.pulls.enable_autodetect_manual_merge=Включить автоопределение ручного слияния (Примечание: в некоторых особых случаях могут возникнуть ошибки)
settings.pulls.default_delete_branch_after_merge=Удалить ветку Pull Request после слияния по умолчанию
settings.pulls.default_delete_branch_after_merge=Удалить ветку запроса после его слияния по умолчанию
settings.projects_desc=Включить проекты репозитория
settings.admin_settings=Настройки администратора
settings.admin_enable_health_check=Выполнять проверки целостности этого репозитория (git fsck)
@ -1779,6 +1811,7 @@ settings.content_type=Тип содержимого
settings.secret=Секретный ключ
settings.slack_username=Имя пользователя
settings.slack_icon_url=URL иконки
settings.slack_color=Цвет
settings.discord_username=Имя пользователя
settings.discord_icon_url=URL иконки
settings.event_desc=На какие события этот веб-хук должен срабатывать?
@ -1810,19 +1843,19 @@ settings.event_issue_milestone_desc=Этап или этап выполнени
settings.event_issue_comment=Комментарии в задаче
settings.event_issue_comment_desc=Комментарий создан, изменён или удалён.
settings.event_header_pull_request=События запроса на слияние
settings.event_pull_request=Pull Request
settings.event_pull_request=Запрос на слияние
settings.event_pull_request_desc=Запрос на слияние открыт, закрыт, переоткрыт или отредактирован.
settings.event_pull_request_assign=Запроса на слияние назначен
settings.event_pull_request_assign_desc=Запрос на получение назначен или не назначен.
settings.event_pull_request_label=Pull Request отмечен
settings.event_pull_request_label_desc=Метки Pull Request'а обновлены или очищены.
settings.event_pull_request_milestone=Этап Pull Request завершен
settings.event_pull_request_milestone_desc=Этап Pull request или промежуточный шаг.
settings.event_pull_request_comment=Комментарий Pull Request
settings.event_pull_request_comment_desc=Pull request создан, отредактирован или удалён.
settings.event_pull_request_review=Pull Request рассмотрен
settings.event_pull_request_assign_desc=Запрос на слияние назначен или не назначен.
settings.event_pull_request_label=Запрос на слияние отмечен
settings.event_pull_request_label_desc=Метки запроса на слияние обновлены или очищены.
settings.event_pull_request_milestone=Этап запроса на слияние завершен
settings.event_pull_request_milestone_desc=Этап запроса на слияние или промежуточный шаг.
settings.event_pull_request_comment=Комментарий запроса на слияние
settings.event_pull_request_comment_desc=Комментарий запроса на слияние создан, отредактирован или удалён.
settings.event_pull_request_review=Запрос на слияние рассмотрен
settings.event_pull_request_review_desc=Запрос на слияние утвержден, отклонён или оставлен комментарий.
settings.event_pull_request_sync=Синхронизация Pull Request
settings.event_pull_request_sync=Синхронизация запроса на слияние
settings.event_pull_request_sync_desc=Запрос на слияние синхронизирован.
settings.branch_filter=Фильтр веток
settings.branch_filter_desc=Белый список ветвей для событий Push, создания ветвей и удаления ветвей, указанных в виде глоб-шаблона. Если пустой или <code>*</code>, то все событий для всех ветвей будут зарегистрированы. Перейдите по ссылке <a href="https://godoc.org/github.com/gobwas/glob#Compile">github.com/gobwas/glob</a> на документацию по синтаксису. Примеры: <code>master</code>, <code>{master,release*}</code>.
@ -1878,21 +1911,21 @@ settings.protect_whitelist_users=Пользователи, которые мог
settings.protect_whitelist_search_users=Поиск пользователей…
settings.protect_whitelist_teams=Команды, члены которых могут делать push в эту ветку:
settings.protect_whitelist_search_teams=Поиск команд…
settings.protect_merge_whitelist_committers=Ограничить право на принятие Pull Request'ов в эту ветку списком
settings.protect_merge_whitelist_committers_desc=Вы можете добавлять пользователей или целые команды в "белый" список этой ветки. Только присутствующие в списке смогут принимать Pull Request'ы. В противном случае любой с правами на запись в репозиторий будет обладать такой возможностью.
settings.protect_merge_whitelist_users=Пользователи с правом на принятие Pull Request'ов в эту ветку:
settings.protect_merge_whitelist_teams=Команды, члены которых обладают правом на принятие Pull Request'ов в эту ветку:
settings.protect_merge_whitelist_committers=Ограничить право на слияние белым списком
settings.protect_merge_whitelist_committers_desc=Вы можете добавлять пользователей или целые команды в "белый" список этой ветки. Только присутствующие в списке смогут принимать запросы на слияние. В противном случае любой с правами на запись в репозиторий будет обладать такой возможностью.
settings.protect_merge_whitelist_users=Пользователи с правом на слияние:
settings.protect_merge_whitelist_teams=Команды, члены которых обладают правом на слияние:
settings.protect_check_status_contexts=Включить проверку статуса
settings.protect_check_status_contexts_desc=Требуется пройти проверку состояния перед слиянием. Выберите, какие проверки состояния должны быть пройдены, прежде чем ветви можно будет объединить в ветвь, соответствующую этому правилу. Если этот параметр включен, коммиты сначала должны быть перемещены в другую ветвь, а затем объединены или перемещены непосредственно в ветвь, соответствующую этому правилу, после прохождения проверки состояния. Если контексты не выбраны, то последняя фиксация должна быть успешной независимо от контекста.
settings.protect_check_status_contexts_list=Проверки состояния за последнюю неделю для этого репозитория
settings.protect_required_approvals=Необходимые одобрения:
settings.protect_required_approvals_desc=Разрешить объединение Pull Request'а только с достаточным количеством положительных отзывов.
settings.protect_required_approvals_desc=Разрешить принятие запроса на слияние только с достаточным количеством положительных отзывов.
settings.protect_approvals_whitelist_enabled=Ограничить утверждения белым списком пользователей или команд
settings.protect_approvals_whitelist_enabled_desc=Только отзывы пользователей или команд из белого списка будут засчитаны до требуемых утверждений. Белый список без одобрения отзывов от всех, у кого есть количество прав на запись, к требуемым утверждениям.
settings.protect_approvals_whitelist_users=Рецензенты в белом списке:
settings.protect_approvals_whitelist_teams=Команды в белом списке для рецензирования:
settings.dismiss_stale_approvals=Отклонить устаревшие разрешения
settings.dismiss_stale_approvals_desc=Когда новые коммиты, изменяющие содержимое Pull Request'а, отправляются в ветку, старые разрешения будут отклонены.
settings.dismiss_stale_approvals_desc=Когда новые коммиты, изменяющие содержимое запроса на слияние, отправляются в ветку, старые разрешения будут отклонены.
settings.require_signed_commits=Требовать подписанные коммиты
settings.require_signed_commits_desc=Отклонить push'ы в эту ветку, если они не подписаны или не проверены.
settings.protect_protected_file_patterns=Защищённые шаблоны файлов (разделённые через '\;'):
@ -1909,9 +1942,9 @@ settings.block_rejected_reviews=Блокировка слияния по отк
settings.block_rejected_reviews_desc=Слияние будет не возможным, если будут запрошены официальными рецензентами изменения, даже если имеется достаточное количество одобрений.
settings.block_on_official_review_requests=Блокировать слияние при запросах на официальное рассмотрение
settings.block_on_official_review_requests_desc=Слияние невозможно, если не имеется достаточное количество одобрений официальных представителей.
settings.block_outdated_branch=Блокировать слияние, если pull request устарел
settings.block_outdated_branch=Блокировать слияние, если запрос на слияние устарел
settings.block_outdated_branch_desc=Слияние будет невозможно, если головная ветвь находится позади базовой ветви.
settings.default_branch_desc=Главная ветка является "базовой" для вашего репозитория, на которую по умолчанию направлены все Pull Request'ы и которая является лицом вашего репозитория. Первое, что увидит посетитель — это содержимое главной ветки. Выберите её из уже существующих:
settings.default_branch_desc=Главная ветка является "базовой" для вашего репозитория, на которую по умолчанию направлены все запросы на слияние и которая является лицом вашего репозитория. Первое, что увидит посетитель — это содержимое главной ветки. Выберите её из уже существующих:
settings.default_merge_style_desc=Стиль слияния по умолчанию:
settings.choose_branch=Выберите ветку…
settings.no_protected_branch=Нет защищённых веток.
@ -1935,7 +1968,7 @@ settings.matrix.access_token=Токен доступа
settings.matrix.message_type=Тип сообщения
settings.archive.button=Архивировать репозиторий
settings.archive.header=Архивировать этот репозиторий
settings.archive.text=Архивация репозитория переведёт его в режим read-only. Он будет скрыт из панели управления, создания задач, pull-request'ов на слияние, или создание коммитов будут запрещены.
settings.archive.text=Архивация репозитория переведёт его в режим только чтение. Он будет скрыт из панели управления, создания задач, запросы на слияние, или создание коммитов будут запрещены.
settings.archive.success=Репозиторий был успешно архивирован.
settings.archive.error=Ошибка при попытке архивировать репозиторий. Смотрите логи для получения подробностей.
settings.archive.error_ismirror=Вы не можете поместить зеркалируемый репозиторий в архив.
@ -1972,6 +2005,8 @@ settings.lfs_pointers.inRepo=В репозитории
settings.lfs_pointers.exists=Существуют в хранилище
settings.lfs_pointers.accessible=Доступно для пользователя
settings.lfs_pointers.associateAccessible=Связать доступные %d OID
settings.rename_branch_failed_exist=Невозможно переименовать ветку, потому что целевая ветка %s уже существует.
settings.rename_branch_failed_not_exist=Невозможно переименовать ветку %s, потому что она не существует.
settings.rename_branch_success=Ветка %s была успешно переименована в %s.
settings.rename_branch_from=старое название ветки
settings.rename_branch_to=новое название ветки
@ -2005,6 +2040,9 @@ diff.file_image_height=Высота
diff.file_byte_size=Размер
diff.file_suppressed=Разница между файлами не показана из-за своего большого размера
diff.file_suppressed_line_too_long=Различия файлов скрыты, потому что одна или несколько строк слишком длинны
diff.too_many_files=Некоторые файлы не были показаны из-за слишком большого количества измененных файлов
diff.show_more=Показать больше
diff.load=Загрузить разницу
diff.generated=сгенерированный
diff.vendored=поставляемый
diff.comment.placeholder=Оставить комментарий
@ -2349,6 +2387,18 @@ users.still_own_repo=На вашем аккаунте все еще остает
users.still_has_org=Эта учетная запись все еще является членом одной или более организаций. Для продолжения, покиньте или удалите организации.
users.deletion_success=Учётная запись успешно удалена.
users.reset_2fa=Сброс 2FA
users.list_status_filter.menu_text=Фильтр
users.list_status_filter.reset=Сбросить
users.list_status_filter.is_active=Активный
users.list_status_filter.not_active=Неактивный
users.list_status_filter.is_admin=Администратор
users.list_status_filter.not_admin=Не администратор
users.list_status_filter.is_restricted=Ограничено
users.list_status_filter.not_restricted=Не ограничено
users.list_status_filter.is_prohibit_login=Запретить вход
users.list_status_filter.not_prohibit_login=Разрешить вход
users.list_status_filter.is_2fa_enabled=2FA включено
users.list_status_filter.not_2fa_enabled=2FA отключено
emails.email_manage_panel=Управление эл. почтой пользователя
emails.primary=Первичный
@ -2414,6 +2464,7 @@ auths.attribute_name=Атрибут First Name
auths.attribute_surname=Атрибут Surname
auths.attribute_mail=Атрибут электронной почты
auths.attribute_ssh_public_key=Атрибут Открытый SSH ключ
auths.attribute_avatar=Характеристики аватара
auths.attributes_in_bind=Извлекать атрибуты в контексте Bind DN
auths.allow_deactivate_all=Разрешить пустой результат поиска для отключения всех пользователей
auths.use_paged_search=Использовать постраничный поиск
@ -2501,6 +2552,7 @@ config.app_ver=Версия Gitea
config.app_url=Базовый URL-адрес Gitea
config.custom_conf=Путь к файлу конфигурации
config.custom_file_root_path=Пользовательский путь до папки с файлами
config.domain=Домен сервера
config.offline_mode=Локальный режим
config.disable_router_log=Отключение журнала маршрутизатора
config.run_user=Запуск от имени пользователя
@ -2516,6 +2568,7 @@ config.reverse_auth_user=Имя пользователя для авториза
config.ssh_config=Конфигурация SSH
config.ssh_enabled=SSH включён
config.ssh_start_builtin_server=Использовать встроенный сервер
config.ssh_domain=Домен SSH сервера
config.ssh_port=Порт
config.ssh_listen_port=Прослушиваемый порт
config.ssh_root_path=Корневой путь
@ -2712,14 +2765,34 @@ notices.delete_success=Уведомления системы были удале
[action]
create_repo=создал(а) репозиторий <a href="%s"> %s</a>
rename_repo=переименовал(а) репозиторий из <code>%[1]s</code> на <a href="%[2]s">%[3]s</a>
commit_repo=отправил(а) изменения в <a href="%[2]s">%[3]s</a> в <a href="%[1]s">%[4]s</a>
create_issue=`открыл(а) задачу <a href="%[1]s">%[3]s#%[2]s</a>`
close_issue=`закрыл(а) задачу <a href="%[1]s">%[3]s#%[2]s</a>`
reopen_issue=`переоткрыл(а) задачу <a href="%[1]s">%[3]s#%[2]s</a>`
create_pull_request=`создал(а) запрос на слияние <a href="%[1]s">%[3]s#%[2]s</a>`
close_pull_request=`закрыл(а) запрос на слияние <a href="%[1]s">%[3]s#%[2]s</a>`
reopen_pull_request=`переоткрыл(а) запрос на слияние <a href="%[1]s">%[3]s#%[2]s</a>`
comment_issue=`прокомментировал(а) задачу <a href="%[1]s">%[3]s#%[2]s</a>`
comment_pull=`прокомментировал(а) запрос на слияние <a href="%[1]s">%[3]s#%[2]s</a>`
merge_pull_request=`принял(а) запрос на слияние <a href="%[1]s">%[3]s#%[2]s</a>`
transfer_repo=передал(а) репозиторий <code>%s</code> <a href="%s">%s</a>
push_tag=создал(а) тег <a href="%[2]s">%[3]s</a> в <a href="%[1]s">%[4]s</a>
delete_tag=удалил(а) тэг %[2]s из <a href="%[1]s">%[3]s</a>
delete_branch=удалил(а) ветку %[2]s из <a href="%[1]s">%[3]s</a>
compare_branch=Сравнить
compare_commits=Сравнить %d коммитов
compare_commits_general=Сравнить коммиты
mirror_sync_push=синхронизировал(а) коммиты <a href="%[2]s">%[3]s</a> в <a href="%[1]s">%[4]s</a> из зеркала
mirror_sync_create=синхронизировал(а) новую ссылку <a href="%[2]s">%[3]s</a> в <a href="%[1]s">%[4]s</a> из зеркала
mirror_sync_delete=синхронизированные и удаленные ссылки <code>%[2]s</code> на <a href="%[1]s">%[3]s</a> из зеркала
approve_pull_request=`утвердил(а) задачу <a href="%[1]s">%[3]s#%[2]s</a>`
reject_pull_request=`предложил(а) изменения для <a href="%[1]s">%[3]s#%[2]s</a>`
publish_release=`выпустил(а) <a href="%[2]s"> "%[4]s" </a> в <a href="%[1]s">%[3]s</a>`
review_dismissed=`отклонил(а) отзыв от <b>%[4]s</b> для <a href="%[1]s">%[3]s#%[2]s</a>`
review_dismissed_reason=Причина:
create_branch=создал(а) ветку <a href="%[2]s">%[3]s</a> в <a href="%[1]s">%[4]s</a>
starred_repo=добавил(а) <a href="%[1]s">%[2]s</a> в избранное
watched_repo=начала(а) наблюдение за <a href="%[1]s">%[2]s</a>
[tool]
ago=%s назад

View File

@ -760,7 +760,7 @@ visibility.private_tooltip=仅对组织成员可见
[repo]
new_repo_helper=仓库包含所有项目文件,包括修订历史。已经在别处有了吗? <a href="%s">迁移代码库</a>
owner=拥有者
owner_helper=由于最大存储库数量限制,一些组织可能不会显示在下拉列表中。
owner_helper=由于最大库数量限制,一些组织可能不会显示在下拉列表中。
repo_name=仓库名称
repo_name_helper=好的仓库名称应当使用简短、有意义和独特的关键字。
repo_size=仓库大小
@ -1661,7 +1661,7 @@ settings.hooks=Web 钩子
settings.githooks=管理 Git 钩子
settings.basic_settings=基本设置
settings.mirror_settings=镜像设置
settings.mirror_settings.docs=将你的项目设置成自动从其它仓库推送或拉取变更。分支、标签以及提交将会自动同步。<a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/repo-mirror/">如何镜像存储库?</a>
settings.mirror_settings.docs=将你的项目设置成自动从其它仓库推送或拉取变更。分支、标签以及提交将会自动同步。<a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/repo-mirror/">如何镜像库?</a>
settings.mirror_settings.mirrored_repository=镜像库
settings.mirror_settings.direction=方向
settings.mirror_settings.direction.pull=拉取

View File

@ -9,6 +9,7 @@ import (
"errors"
"fmt"
"net/http"
"strings"
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/models/db"
@ -203,12 +204,21 @@ func EditUser(ctx *context.APIContext) {
if form.FullName != nil {
u.FullName = *form.FullName
}
var emailChanged bool
if form.Email != nil {
u.Email = *form.Email
if len(u.Email) == 0 {
email := strings.TrimSpace(*form.Email)
if len(email) == 0 {
ctx.Error(http.StatusUnprocessableEntity, "", fmt.Errorf("email is not allowed to be empty string"))
return
}
if err := user_model.ValidateEmail(email); err != nil {
ctx.InternalServerError(err)
return
}
emailChanged = !strings.EqualFold(u.Email, email)
u.Email = email
}
if form.Website != nil {
u.Website = *form.Website
@ -247,7 +257,7 @@ func EditUser(ctx *context.APIContext) {
u.IsRestricted = *form.Restricted
}
if err := user_model.UpdateUser(u); err != nil {
if err := user_model.UpdateUser(u, emailChanged); err != nil {
if user_model.IsErrEmailAlreadyUsed(err) || user_model.IsErrEmailInvalid(err) {
ctx.Error(http.StatusUnprocessableEntity, "", err)
} else {

View File

@ -74,7 +74,7 @@ func UpdateUserSettings(ctx *context.APIContext) {
ctx.User.KeepActivityPrivate = *form.HideActivity
}
if err := user_model.UpdateUser(ctx.User); err != nil {
if err := user_model.UpdateUser(ctx.User, false); err != nil {
ctx.InternalServerError(err)
return
}

View File

@ -298,6 +298,13 @@ func EditUserPost(ctx *context.Context) {
ctx.RenderWithErr(errMsg, tplUserNew, &form)
return
}
if err := user_model.ValidateEmail(form.Email); err != nil {
ctx.Data["Err_Email"] = true
ctx.RenderWithErr(ctx.Tr("form.email_error"), tplUserNew, &form)
return
}
if u.Salt, err = user_model.GetUserSalt(); err != nil {
ctx.ServerError("UpdateUser", err)
return
@ -332,6 +339,7 @@ func EditUserPost(ctx *context.Context) {
u.LoginName = form.LoginName
u.FullName = form.FullName
emailChanged := !strings.EqualFold(u.Email, form.Email)
u.Email = form.Email
u.Website = form.Website
u.Location = form.Location
@ -352,7 +360,7 @@ func EditUserPost(ctx *context.Context) {
u.ProhibitLogin = form.ProhibitLogin
}
if err := user_model.UpdateUser(u); err != nil {
if err := user_model.UpdateUser(u, emailChanged); err != nil {
if user_model.IsErrEmailAlreadyUsed(err) {
ctx.Data["Err_Email"] = true
ctx.RenderWithErr(ctx.Tr("form.email_been_used"), tplUserEdit, &form)

View File

@ -34,6 +34,7 @@ func NewLabel(ctx *context.Context) {
form := web.GetForm(ctx).(*forms.CreateLabelForm)
ctx.Data["Title"] = ctx.Tr("repo.labels")
ctx.Data["PageIsLabels"] = true
ctx.Data["PageIsOrgSettings"] = true
if ctx.HasError() {
ctx.Flash.Error(ctx.Data["ErrorMsg"].(string))

View File

@ -39,6 +39,7 @@ const (
// Settings render the main settings page
func Settings(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("org.settings")
ctx.Data["PageIsOrgSettings"] = true
ctx.Data["PageIsSettingsOptions"] = true
ctx.Data["CurrentVisibility"] = ctx.Org.Organization.Visibility
ctx.Data["RepoAdminChangeTeamAccess"] = ctx.Org.Organization.RepoAdminChangeTeamAccess
@ -49,6 +50,7 @@ func Settings(ctx *context.Context) {
func SettingsPost(ctx *context.Context) {
form := web.GetForm(ctx).(*forms.UpdateOrgSettingForm)
ctx.Data["Title"] = ctx.Tr("org.settings")
ctx.Data["PageIsOrgSettings"] = true
ctx.Data["PageIsSettingsOptions"] = true
ctx.Data["CurrentVisibility"] = ctx.Org.Organization.Visibility
@ -102,7 +104,7 @@ func SettingsPost(ctx *context.Context) {
visibilityChanged := form.Visibility != org.Visibility
org.Visibility = form.Visibility
if err := user_model.UpdateUser(org.AsUser()); err != nil {
if err := user_model.UpdateUser(org.AsUser(), false); err != nil {
ctx.ServerError("UpdateUser", err)
return
}
@ -159,6 +161,7 @@ func SettingsDeleteAvatar(ctx *context.Context) {
// SettingsDelete response for deleting an organization
func SettingsDelete(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("org.settings")
ctx.Data["PageIsOrgSettings"] = true
ctx.Data["PageIsSettingsDelete"] = true
if ctx.Req.Method == "POST" {
@ -188,6 +191,7 @@ func SettingsDelete(ctx *context.Context) {
// Webhooks render webhook list page
func Webhooks(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("org.settings")
ctx.Data["PageIsOrgSettings"] = true
ctx.Data["PageIsSettingsHooks"] = true
ctx.Data["BaseLink"] = ctx.Org.OrgLink + "/settings/hooks"
ctx.Data["BaseLinkNew"] = ctx.Org.OrgLink + "/settings/hooks"
@ -219,6 +223,7 @@ func DeleteWebhook(ctx *context.Context) {
// Labels render organization labels page
func Labels(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("repo.labels")
ctx.Data["PageIsOrgSettings"] = true
ctx.Data["PageIsOrgSettingsLabels"] = true
ctx.Data["RequireTribute"] = true
ctx.Data["LabelTemplates"] = models.LabelTemplates

View File

@ -113,9 +113,9 @@ func getForkRepository(ctx *context.Context) *models.Repository {
ctx.Data["ForkRepo"] = forkRepo
ownedOrgs, err := models.GetOwnedOrgsByUserID(ctx.User.ID)
ownedOrgs, err := models.GetOrgsCanCreateRepoByUserID(ctx.User.ID)
if err != nil {
ctx.ServerError("GetOwnedOrgsByUserID", err)
ctx.ServerError("GetOrgsCanCreateRepoByUserID", err)
return nil
}
var orgs []*models.Organization
@ -216,13 +216,13 @@ func ForkPost(ctx *context.Context) {
}
}
// Check ownership of organization.
// Check if user is allowed to create repo's on the organization.
if ctxUser.IsOrganization() {
isOwner, err := models.OrgFromUser(ctxUser).IsOwnedBy(ctx.User.ID)
isAllowedToFork, err := models.OrgFromUser(ctxUser).CanCreateOrgRepo(ctx.User.ID)
if err != nil {
ctx.ServerError("IsOwnedBy", err)
ctx.ServerError("CanCreateOrgRepo", err)
return
} else if !isOwner {
} else if !isAllowedToFork {
ctx.Error(http.StatusForbidden)
return
}

View File

@ -554,6 +554,7 @@ func RegisterRoutes(m *web.Route) {
m.Post("/matrix/new", bindIgnErr(forms.NewMatrixHookForm{}), repo.MatrixHooksNewPost)
m.Post("/msteams/new", bindIgnErr(forms.NewMSTeamsHookForm{}), repo.MSTeamsHooksNewPost)
m.Post("/feishu/new", bindIgnErr(forms.NewFeishuHookForm{}), repo.FeishuHooksNewPost)
m.Post("/wechatwork/new", bindIgnErr(forms.NewWechatWorkHookForm{}), repo.WechatworkHooksNewPost)
m.Get("/{id}", repo.WebHooksEdit)
m.Post("/gitea/{id}", bindIgnErr(forms.NewWebhookForm{}), repo.WebHooksEditPost)
m.Post("/gogs/{id}", bindIgnErr(forms.NewGogshookForm{}), repo.GogsHooksEditPost)
@ -564,6 +565,7 @@ func RegisterRoutes(m *web.Route) {
m.Post("/matrix/{id}", bindIgnErr(forms.NewMatrixHookForm{}), repo.MatrixHooksEditPost)
m.Post("/msteams/{id}", bindIgnErr(forms.NewMSTeamsHookForm{}), repo.MSTeamsHooksEditPost)
m.Post("/feishu/{id}", bindIgnErr(forms.NewFeishuHookForm{}), repo.FeishuHooksEditPost)
m.Post("/wechatwork/{id}", bindIgnErr(forms.NewWechatWorkHookForm{}), repo.WechatworkHooksEditPost)
}, webhooksEnabled)
m.Group("/labels", func() {

View File

@ -37,7 +37,13 @@
{{$repo := (index $.RepoMaps .RepoID)}}
<div class="diff-file-box diff-box file-content non-diff-file-content repo-search-result">
<h4 class="ui top attached normal header">
<span class="file"><a rel="nofollow" href="{{$repo.HTMLURL}}">{{$repo.FullName}}</a> - {{.Filename}}</span>
<span class="file">
<a rel="nofollow" href="{{$repo.HTMLURL}}">{{$repo.FullName}}</a>
{{if $repo.IsArchived}}
<span class="ui basic label">{{$.i18n.Tr "repo.desc.archived"}}</span>
{{end}}
- {{.Filename}}
</span>
<a class="ui basic tiny button" rel="nofollow" href="{{$repo.HTMLURL}}/src/commit/{{$result.CommitID | PathEscape}}/{{.Filename | PathEscapeSegments}}">{{$.i18n.Tr "repo.diff.view_file"}}</a>
</h4>
<div class="ui attached table segment">

View File

@ -20,7 +20,7 @@
{{if .IsOrganizationOwner}}
<div class="right menu">
<a class="{{if .PageIsSettingsOptions}}active{{end}} item" href="{{.OrgLink}}/settings">
<a class="{{if .PageIsOrgSettings}}active{{end}} item" href="{{.OrgLink}}/settings">
{{svg "octicon-tools"}} {{.i18n.Tr "repo.settings"}}
</a>
</div>

View File

@ -1,5 +1,5 @@
<div class="four wide column">
<div class="ui vertical menu">
<div class="ui fluid vertical menu">
<div class="header item">{{.i18n.Tr "org.settings"}}</div>
<a class="{{if .PageIsSettingsOptions}}active{{end}} item" href="{{.OrgLink}}/settings">
{{.i18n.Tr "org.settings.options"}}

View File

@ -1,115 +1,117 @@
{{template "base/head" .}}
<div class="page-content organization new team">
{{template "org/header" .}}
<div class="ui middle very relaxed page grid">
<div class="column">
<form class="ui form" action="{{if .PageIsOrgTeamsNew}}{{.OrgLink}}/teams/new{{else}}{{.OrgLink}}/teams/{{.Team.LowerName | PathEscape}}/edit{{end}}" data-delete-url="{{.OrgLink}}/teams/{{.Team.LowerName | PathEscape}}/delete" method="post">
{{.CsrfTokenHtml}}
<h3 class="ui top attached header">
{{if .PageIsOrgTeamsNew}}{{.i18n.Tr "org.create_new_team"}}{{else}}{{.i18n.Tr "org.teams.settings"}}{{end}}
</h3>
<div class="ui attached segment">
{{template "base/alert" .}}
<div class="required field {{if .Err_TeamName}}error{{end}}">
<label for="team_name">{{.i18n.Tr "org.team_name"}}</label>
{{if eq .Team.LowerName "owners"}}
<input type="hidden" name="team_name" value="{{.Team.Name}}">
<div class="ui container">
<div class="ui grid">
<div class="column">
<form class="ui form" action="{{if .PageIsOrgTeamsNew}}{{.OrgLink}}/teams/new{{else}}{{.OrgLink}}/teams/{{.Team.LowerName | PathEscape}}/edit{{end}}" data-delete-url="{{.OrgLink}}/teams/{{.Team.LowerName | PathEscape}}/delete" method="post">
{{.CsrfTokenHtml}}
<h3 class="ui top attached header">
{{if .PageIsOrgTeamsNew}}{{.i18n.Tr "org.create_new_team"}}{{else}}{{.i18n.Tr "org.teams.settings"}}{{end}}
</h3>
<div class="ui attached segment">
{{template "base/alert" .}}
<div class="required field {{if .Err_TeamName}}error{{end}}">
<label for="team_name">{{.i18n.Tr "org.team_name"}}</label>
{{if eq .Team.LowerName "owners"}}
<input type="hidden" name="team_name" value="{{.Team.Name}}">
{{end}}
<input id="team_name" name="team_name" value="{{.Team.Name}}" required {{if eq .Team.LowerName "owners"}}disabled{{end}} autofocus>
<span class="help">{{.i18n.Tr "org.team_name_helper"}}</span>
</div>
<div class="field {{if .Err_Description}}error{{end}}">
<label for="description">{{.i18n.Tr "org.team_desc"}}</label>
<input id="description" name="description" value="{{.Team.Description}}">
<span class="help">{{.i18n.Tr "org.team_desc_helper"}}</span>
</div>
{{if not (eq .Team.LowerName "owners")}}
<div class="grouped field">
<label>{{.i18n.Tr "org.team_access_desc"}}</label>
<br>
<div class="field">
<div class="ui radio checkbox">
<input type="radio" name="repo_access" value="specific" {{if not .Team.IncludesAllRepositories}}checked{{end}}>
<label>{{.i18n.Tr "org.teams.specific_repositories"}}</label>
<span class="help">{{.i18n.Tr "org.teams.specific_repositories_helper" | Str2html}}</span>
</div>
</div>
<div class="field">
<div class="ui radio checkbox">
<input type="radio" name="repo_access" value="all" {{if .Team.IncludesAllRepositories}}checked{{end}}>
<label>{{.i18n.Tr "org.teams.all_repositories"}}</label>
<span class="help">{{.i18n.Tr "org.teams.all_repositories_helper" | Str2html}}</span>
</div>
</div>
<div class="field">
<div class="ui checkbox">
<label for="can_create_org_repo">{{.i18n.Tr "org.teams.can_create_org_repo"}}</label>
<input id="can_create_org_repo" name="can_create_org_repo" type="checkbox" {{if .Team.CanCreateOrgRepo}}checked{{end}}>
<span class="help">{{.i18n.Tr "org.teams.can_create_org_repo_helper"}}</span>
</div>
</div>
</div>
<div class="grouped field">
<label>{{.i18n.Tr "org.team_permission_desc"}}</label>
<br>
<div class="field">
<div class="ui radio checkbox">
<input type="radio" name="permission" value="read" {{if or .PageIsOrgTeamsNew (eq .Team.Authorize 1)}}checked{{end}}>
<label>{{.i18n.Tr "org.teams.read_access"}}</label>
<span class="help">{{.i18n.Tr "org.teams.read_access_helper"}}</span>
</div>
</div>
<div class="field">
<div class="ui radio checkbox">
<input type="radio" name="permission" value="write" {{if eq .Team.Authorize 2}}checked{{end}}>
<label>{{.i18n.Tr "org.teams.write_access"}}</label>
<span class="help">{{.i18n.Tr "org.teams.write_access_helper"}}</span>
</div>
</div>
<div class="field">
<div class="ui radio checkbox">
<input type="radio" name="permission" value="admin" {{if eq .Team.Authorize 3}}checked{{end}}>
<label>{{.i18n.Tr "org.teams.admin_access"}}</label>
<span class="help">{{.i18n.Tr "org.teams.admin_access_helper"}}</span>
</div>
</div>
</div>
<div class="ui divider"></div>
<div class="team-units required grouped field"{{if eq .Team.Authorize 3}} style="display: none"{{end}}>
<label>{{.i18n.Tr "org.team_unit_desc"}}</label>
<br>
{{range $t, $unit := $.Units}}
{{if $unit.Type.UnitGlobalDisabled}}
<div class="field tooltip" data-content="{{$.i18n.Tr "repo.unit_disabled"}}">
{{else}}
<div class="field">
{{end}}
<div class="ui toggle checkbox">
<input type="checkbox" class="hidden" name="units" value="{{$unit.Type.Value}}"{{if or (eq $.Team.ID 0) ($.Team.UnitEnabled $unit.Type)}} checked{{end}}>
<label>{{$.i18n.Tr $unit.NameKey}}{{if $unit.Type.UnitGlobalDisabled}} {{$.i18n.Tr "org.team_unit_disabled"}}{{end}}</label>
<span class="help">{{$.i18n.Tr $unit.DescKey}}</span>
</div>
</div>
{{end}}
</div>
<div class="ui divider"></div>
{{end}}
<input id="team_name" name="team_name" value="{{.Team.Name}}" required {{if eq .Team.LowerName "owners"}}disabled{{end}} autofocus>
<span class="help">{{.i18n.Tr "org.team_name_helper"}}</span>
</div>
<div class="field {{if .Err_Description}}error{{end}}">
<label for="description">{{.i18n.Tr "org.team_desc"}}</label>
<input id="description" name="description" value="{{.Team.Description}}">
<span class="help">{{.i18n.Tr "org.team_desc_helper"}}</span>
</div>
{{if not (eq .Team.LowerName "owners")}}
<div class="grouped field">
<label>{{.i18n.Tr "org.team_access_desc"}}</label>
<br>
<div class="field">
<div class="ui radio checkbox">
<input type="radio" name="repo_access" value="specific" {{if not .Team.IncludesAllRepositories}}checked{{end}}>
<label>{{.i18n.Tr "org.teams.specific_repositories"}}</label>
<span class="help">{{.i18n.Tr "org.teams.specific_repositories_helper" | Str2html}}</span>
</div>
</div>
<div class="field">
<div class="ui radio checkbox">
<input type="radio" name="repo_access" value="all" {{if .Team.IncludesAllRepositories}}checked{{end}}>
<label>{{.i18n.Tr "org.teams.all_repositories"}}</label>
<span class="help">{{.i18n.Tr "org.teams.all_repositories_helper" | Str2html}}</span>
</div>
</div>
<div class="field">
<div class="ui checkbox">
<label for="can_create_org_repo">{{.i18n.Tr "org.teams.can_create_org_repo"}}</label>
<input id="can_create_org_repo" name="can_create_org_repo" type="checkbox" {{if .Team.CanCreateOrgRepo}}checked{{end}}>
<span class="help">{{.i18n.Tr "org.teams.can_create_org_repo_helper"}}</span>
</div>
</div>
</div>
<div class="grouped field">
<label>{{.i18n.Tr "org.team_permission_desc"}}</label>
<br>
<div class="field">
<div class="ui radio checkbox">
<input type="radio" name="permission" value="read" {{if or .PageIsOrgTeamsNew (eq .Team.Authorize 1)}}checked{{end}}>
<label>{{.i18n.Tr "org.teams.read_access"}}</label>
<span class="help">{{.i18n.Tr "org.teams.read_access_helper"}}</span>
</div>
</div>
<div class="field">
<div class="ui radio checkbox">
<input type="radio" name="permission" value="write" {{if eq .Team.Authorize 2}}checked{{end}}>
<label>{{.i18n.Tr "org.teams.write_access"}}</label>
<span class="help">{{.i18n.Tr "org.teams.write_access_helper"}}</span>
</div>
</div>
<div class="field">
<div class="ui radio checkbox">
<input type="radio" name="permission" value="admin" {{if eq .Team.Authorize 3}}checked{{end}}>
<label>{{.i18n.Tr "org.teams.admin_access"}}</label>
<span class="help">{{.i18n.Tr "org.teams.admin_access_helper"}}</span>
</div>
</div>
</div>
<div class="ui divider"></div>
<div class="team-units required grouped field"{{if eq .Team.Authorize 3}} style="display: none"{{end}}>
<label>{{.i18n.Tr "org.team_unit_desc"}}</label>
<br>
{{range $t, $unit := $.Units}}
{{if $unit.Type.UnitGlobalDisabled}}
<div class="field tooltip" data-content="{{$.i18n.Tr "repo.unit_disabled"}}">
<div class="field">
{{if .PageIsOrgTeamsNew}}
<button class="ui green button">{{.i18n.Tr "org.create_team"}}</button>
<a class="ui button" href="{{.OrgLink}}/teams">{{.i18n.Tr "cancel"}}</a>
{{else}}
<div class="field">
{{end}}
<div class="ui toggle checkbox">
<input type="checkbox" class="hidden" name="units" value="{{$unit.Type.Value}}"{{if or (eq $.Team.ID 0) ($.Team.UnitEnabled $unit.Type)}} checked{{end}}>
<label>{{$.i18n.Tr $unit.NameKey}}{{if $unit.Type.UnitGlobalDisabled}} {{$.i18n.Tr "org.team_unit_disabled"}}{{end}}</label>
<span class="help">{{$.i18n.Tr $unit.DescKey}}</span>
</div>
</div>
<button class="ui green button">{{.i18n.Tr "org.teams.update_settings"}}</button>
{{if not (eq .Team.LowerName "owners")}}
<button class="ui red button delete-button" data-url="{{.OrgLink}}/teams/{{.team_name | PathEscape}}/delete">{{.i18n.Tr "org.teams.delete_team"}}</button>
{{end}}
{{end}}
</div>
<div class="ui divider"></div>
{{end}}
<div class="field">
{{if .PageIsOrgTeamsNew}}
<button class="ui green button">{{.i18n.Tr "org.create_team"}}</button>
<a class="ui button" href="{{.OrgLink}}/teams">{{.i18n.Tr "cancel"}}</a>
{{else}}
<button class="ui green button">{{.i18n.Tr "org.teams.update_settings"}}</button>
{{if not (eq .Team.LowerName "owners")}}
<button class="ui red button delete-button" data-url="{{.OrgLink}}/teams/{{.team_name | PathEscape}}/delete">{{.i18n.Tr "org.teams.delete_team"}}</button>
{{end}}
{{end}}
</div>
</div>
</form>
</form>
</div>
</div>
</div>
</div>

View File

@ -26,13 +26,8 @@ export function isObject(obj) {
// returns whether a dark theme is enabled
export function isDarkTheme() {
if (document.documentElement.classList.contains('theme-auto')) {
return window.matchMedia('(prefers-color-scheme: dark)').matches;
}
if (document.documentElement.classList.contains('theme-arc-green')) {
return true;
}
return false;
const style = window.getComputedStyle(document.documentElement);
return style.getPropertyValue('--is-dark-theme').trim().toLowerCase() === 'true';
}
// removes duplicate elements in an array

View File

@ -2575,8 +2575,6 @@
.settings {
.content {
margin-top: 2px;
> .header,
.segment {
box-shadow: 0 1px 2px 0 var(--color-box-header);

View File

@ -1,6 +1,7 @@
@import "../chroma/dark.less";
:root {
--is-dark-theme: true;
--color-primary: #87ab63;
--color-primary-dark-1: #93b373;
--color-primary-dark-2: #9fbc82;