diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json
index ab30e1789d..4128f1466f 100644
--- a/.devcontainer/devcontainer.json
+++ b/.devcontainer/devcontainer.json
@@ -4,7 +4,7 @@
"features": {
// installs nodejs into container
"ghcr.io/devcontainers/features/node:1": {
- "version": "20"
+ "version": "lts"
},
"ghcr.io/devcontainers/features/git-lfs:1.2.2": {},
"ghcr.io/devcontainers-contrib/features/poetry:2": {},
diff --git a/.github/workflows/pull-compliance.yml b/.github/workflows/pull-compliance.yml
index 64090d6490..f6720bf2f6 100644
--- a/.github/workflows/pull-compliance.yml
+++ b/.github/workflows/pull-compliance.yml
@@ -37,7 +37,7 @@ jobs:
python-version: "3.12"
- uses: actions/setup-node@v4
with:
- node-version: 22
+ node-version: 24
cache: npm
cache-dependency-path: package-lock.json
- run: pip install poetry
@@ -66,7 +66,7 @@ jobs:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
- node-version: 22
+ node-version: 24
cache: npm
cache-dependency-path: package-lock.json
- run: make deps-frontend
@@ -137,7 +137,7 @@ jobs:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
- node-version: 22
+ node-version: 24
cache: npm
cache-dependency-path: package-lock.json
- run: make deps-frontend
@@ -186,7 +186,7 @@ jobs:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
- node-version: 22
+ node-version: 24
cache: npm
cache-dependency-path: package-lock.json
- run: make deps-frontend
diff --git a/.github/workflows/pull-e2e-tests.yml b/.github/workflows/pull-e2e-tests.yml
index 87e931117c..cc3fbd9c34 100644
--- a/.github/workflows/pull-e2e-tests.yml
+++ b/.github/workflows/pull-e2e-tests.yml
@@ -25,7 +25,7 @@ jobs:
check-latest: true
- uses: actions/setup-node@v4
with:
- node-version: 22
+ node-version: 24
cache: npm
cache-dependency-path: package-lock.json
- run: make deps-frontend frontend deps-backend
diff --git a/.github/workflows/release-nightly.yml b/.github/workflows/release-nightly.yml
index 2558a16a71..c2cc14f771 100644
--- a/.github/workflows/release-nightly.yml
+++ b/.github/workflows/release-nightly.yml
@@ -22,7 +22,7 @@ jobs:
check-latest: true
- uses: actions/setup-node@v4
with:
- node-version: 22
+ node-version: 24
cache: npm
cache-dependency-path: package-lock.json
- run: make deps-frontend deps-backend
diff --git a/.github/workflows/release-tag-rc.yml b/.github/workflows/release-tag-rc.yml
index 37b3ff57d2..c9c15c31a0 100644
--- a/.github/workflows/release-tag-rc.yml
+++ b/.github/workflows/release-tag-rc.yml
@@ -23,7 +23,7 @@ jobs:
check-latest: true
- uses: actions/setup-node@v4
with:
- node-version: 22
+ node-version: 24
cache: npm
cache-dependency-path: package-lock.json
- run: make deps-frontend deps-backend
diff --git a/.github/workflows/release-tag-version.yml b/.github/workflows/release-tag-version.yml
index 4250623da0..ae717c7cec 100644
--- a/.github/workflows/release-tag-version.yml
+++ b/.github/workflows/release-tag-version.yml
@@ -27,7 +27,7 @@ jobs:
check-latest: true
- uses: actions/setup-node@v4
with:
- node-version: 22
+ node-version: 24
cache: npm
cache-dependency-path: package-lock.json
- run: make deps-frontend deps-backend
diff --git a/cmd/serv.go b/cmd/serv.go
index e4434450d6..8c6001e727 100644
--- a/cmd/serv.go
+++ b/cmd/serv.go
@@ -212,7 +212,7 @@ func runServ(ctx context.Context, c *cli.Command) error {
if git.DefaultFeatures().SupportProcReceive {
// for AGit Flow
if cmd == "ssh_info" {
- fmt.Print(`{"type":"gitea","version":1}`)
+ fmt.Print(`{"type":"agit","version":1}`)
return nil
}
}
diff --git a/options/locale/locale_ga-IE.ini b/options/locale/locale_ga-IE.ini
index 79df1d26d0..3804339585 100644
--- a/options/locale/locale_ga-IE.ini
+++ b/options/locale/locale_ga-IE.ini
@@ -1652,6 +1652,7 @@ issues.save=Sábháil
issues.label_title=Ainm
issues.label_description=Cur síos
issues.label_color=Dath
+issues.label_color_invalid=Dath neamhbhailí
issues.label_exclusive=Eisiach
issues.label_archive=Lipéad Cartlann
issues.label_archived_filter=Taispeáin lipéid cartlainne
diff --git a/options/locale/locale_uk-UA.ini b/options/locale/locale_uk-UA.ini
index 6ab4d7800c..68f5e42d47 100644
--- a/options/locale/locale_uk-UA.ini
+++ b/options/locale/locale_uk-UA.ini
@@ -520,58 +520,58 @@ Content=Зміст
SSPISeparatorReplacement=Розділювач
SSPIDefaultLanguage=Типова мова
-require_error=` не може бути пустим.`
-alpha_dash_error=` повинен містити тільки літерно-цифрові символи, дефіс ('-') та підкреслення ('_'). `
-alpha_dash_dot_error=` повинен містити тільки літерно-цифрові символи, дефіс ('-') , підкреслення ('_') та точки ('.'). `
-git_ref_name_error=` повинен бути правильним посилальним ім'ям Git.`
+require_error=` не може бути порожнім.`
+alpha_dash_error=` повинен містити тільки алфавітно-цифрові символи, дефіс ('-') та підкреслення ('_').`
+alpha_dash_dot_error=` повинен містити тільки алфавітно-цифрові символи, дефіс ('-'), підкреслення ('_') та крапку ('.').`
+git_ref_name_error=` повинен бути правильно сформованим ім'ям-посиланням на Git.`
size_error=` повинен бути розмір %s.`
-min_size_error=` повинен бути принаймні %s символів.`
-max_size_error=` повинен бути не більш як %s символів.`
-email_error=` не є адресою електронної пошти.`
+min_size_error=` має містити принаймні %s символів.`
+max_size_error=` має містити не більше %s символів.`
+email_error=` не є дійсною адресою електронної пошти.`
url_error=`"%s" не є дійсною URL-адресою.`
include_error=` повинен містити підрядок "%s".`
-glob_pattern_error=` неприпустимий шаблон glob: %s.`
-regex_pattern_error=` неприпустимий шаблон regex: %s.`
+glob_pattern_error=` недійсний шаблон glob: %s.`
+regex_pattern_error=` недійсний шаблон регулярного виразу: %s.`
unknown_error=Невідома помилка:
captcha_incorrect=Код CAPTCHA неправильний.
-password_not_match=Паролі не співпадають.
-lang_select_error=Оберіть мову з переліку.
+password_not_match=Паролі не збігаються.
+lang_select_error=Оберіть мову зі списку.
-username_been_taken=Ім'я користувача вже зайнято.
-username_change_not_local_user=Нелокальні користувачі не можуть змінити своє ім'я користувача.
+username_been_taken=Ім'я користувача вже зайняте.
+username_change_not_local_user=Нелокальні користувачі не можуть змінювати своє ім'я користувача.
username_has_not_been_changed=Ім'я користувача не змінено
-repo_name_been_taken=Ім'я репозіторію вже використовується.
-repository_files_already_exist=Файли вже існують для цього репозитарію. Зверніться до системного адміністратора.
-repository_files_already_exist.adopt=Файли вже існують для цього репозиторію і можуть бути лише прийняті.
-repository_files_already_exist.delete=Файли вже існують для цього сховища. Ви повинні видалити їх.
-repository_files_already_exist.adopt_or_delete=Файли вже існують для цього репозиторію. Їх можливо прийняти або видалити.
-visit_rate_limit=Обмеження швидкості віддаленого доступу.
-2fa_auth_required=Для віддаленого доступу необхідна двуфакторна аутентифікація.
-org_name_been_taken=Назва організації вже зайнято.
-team_name_been_taken=Назва команди вже зайнято.
-team_no_units_error=Дозволити доступ до принаймні одного розділу репозитарію.
-email_been_used=Ця електронна адреса вже використовується.
-email_invalid=Адреса електронної пошти помилкова.
+repo_name_been_taken=Назва сховища вже використовується.
+repository_files_already_exist=Для цього сховища вже існують файли. Зверніться до системного адміністратора.
+repository_files_already_exist.adopt=Для цього сховища вже існують файли, і їх можна лише прийняти.
+repository_files_already_exist.delete=Для цього сховища вже існують файли. Ви повинні видалити їх.
+repository_files_already_exist.adopt_or_delete=Для цього сховища вже існують файли. Прийміть їх або видаліть.
+visit_rate_limit=Віддалений доступ відхилено у зв'язку з обмеженням кількості спроб.
+2fa_auth_required=Для віддаленого доступу необхідна двофакторна автентифікація.
+org_name_been_taken=Назва організації вже зайнята.
+team_name_been_taken=Назва команди вже зайнята.
+team_no_units_error=Дозволити доступ до принаймні одного розділу сховища.
+email_been_used=Адреса електронної пошти вже використовується.
+email_invalid=Адреса електронної пошти недійсна.
openid_been_used=Адреса OpenID '%s' вже використовується.
username_password_incorrect=Неправильне ім'я користувача або пароль.
-password_complexity=Пароль не відповідає вимогам до складності:
-password_lowercase_one=Принаймні одна буква в нижньому регістрі
-password_uppercase_one=Принаймні одна буква в верхньому регістрі
+password_complexity=Пароль не відповідає вимогам складності:
+password_lowercase_one=Принаймні один символ нижнього регістру
+password_uppercase_one=Принаймні один символ верхнього регістру
password_digit_one=Принаймні одна цифра
-password_special_one=Принаймні один спеціальний символ (пунктуація, дужки, лапки тощо)
-enterred_invalid_repo_name=Невірно введено ім'я репозиторію.
-enterred_invalid_org_name=Невірно введено ім'я організації.
-enterred_invalid_owner_name=Ім'я нового власника не є дійсним.
-enterred_invalid_password=Введений вами пароль некоректний.
+password_special_one=Принаймні один спеціальний символ (розділові знаки, дужки, лапки тощо)
+enterred_invalid_repo_name=Ви ввели неправильну назву сховища.
+enterred_invalid_org_name=Ви ввели неправильну назву організації.
+enterred_invalid_owner_name=Ім'я нового власника недійсне.
+enterred_invalid_password=Ви ввели неправильний пароль.
unset_password=Користувач не встановив пароль.
-user_not_exist=Даний користувач не існує.
+user_not_exist=Користувач не існує.
team_not_exist=Команда не існує.
-last_org_owner=Ви не можете видалити останнього користувача з команди 'власники'. У кожній команді має бути принаймні один власник.
+last_org_owner=Ви не можете видалити останнього користувача з групи 'власників'. В організації має бути принаймні один власник.
cannot_add_org_to_team=Організацію неможливо додати як учасника команди.
-invalid_ssh_key=Неможливо перевірити ваш SSH ключ: %s
-invalid_gpg_key=Неможливо перевірити ваш GPG ключ: %s
-invalid_ssh_principal=Некоректний відповідальний: %s
+invalid_ssh_key=Не вдається перевірити ключ SSH: %s
+invalid_gpg_key=Не вдається перевірити ключ GPG: %s
+invalid_ssh_principal=Невірна ідентичність: %s
auth_failed=Помилка автентифікації: %v
@@ -581,21 +581,20 @@ target_ref_not_exist=Цільове посилання не існує %s
admin_cannot_delete_self=Ви не можете видалити себе, допоки ви адміністратор. Будь ласка, спочатку видаліть права адміністратора.
[user]
-change_avatar=Змінити свій аватар…
-repositories=Репозиторії
+change_avatar=Змінити аватар…
+repositories=Сховища
activity=Публічна активність
-followers=Читачі
+followers=Послідовники
show_more=Показати більше
-starred=Обрані Репозиторії
-watched=Відстежувані репозиторії
+starred=Обрані сховища
+watched=Відстежувані сховища
code=Код
-projects=Проєкт
+projects=Проєкти
overview=Огляд
-following=Читає
-follow=Підписатися
-unfollow=Відписатися
+follow=Стежити
+unfollow=Не стежити
user_bio=Біографія
-disabled_public_activity=Цей користувач вимкнув публічний показ діяльності.
+disabled_public_activity=Цей користувач вимкнув публічну видимість активності.
show_on_map=Показати це місце на карті
settings=Налаштування користувача
@@ -625,7 +624,7 @@ appearance=Зовнішній вигляд
password=Пароль
security=Безпека
avatar=Аватар
-ssh_gpg_keys=SSH / GPG ключі
+ssh_gpg_keys=Ключі SSH / GPG
social=Соціальні облікові записи
applications=Додатки
orgs=Керування організаціями
@@ -644,7 +643,7 @@ update_profile=Оновити профіль
update_language=Оновити мову
update_language_success=Мову оновлено.
update_profile_success=Профіль успішно оновлено.
-change_username=Ваше Ім'я кристувача було змінено.
+change_username=Ваше ім'я користувача змінено.
continue=Продовжити
cancel=Відмінити
language=Мова
@@ -670,13 +669,13 @@ keep_activity_private_popup=Показувати вашу активність
lookup_avatar_by_mail=Знайти Аватар за адресою електронної пошти
federated_avatar_lookup=Знайти зовнішній аватар
-enable_custom_avatar=Увімкнути користувацькі аватари
-choose_new_avatar=Оберіть новий аватар
+enable_custom_avatar=Увімкнути користувацький аватар
+choose_new_avatar=Обрати новий аватар
update_avatar=Оновити аватар
delete_current_avatar=Видалити поточний аватар
uploaded_avatar_not_a_image=Завантажений файл не є зображенням.
uploaded_avatar_is_too_big=Розмір завантаженого файлу (%d KiB) перевищує максимальний розмір (%d KiB).
-update_avatar_success=Ваш аватар був змінений.
+update_avatar_success=Ваш аватар оновлено.
update_user_avatar_success=Аватар користувача оновлено.
cropper_prompt=Ви можете відредагувати зображення перед збереженням. Відредаговане зображення буде збережено як PNG.
@@ -685,64 +684,64 @@ old_password=Поточний пароль
new_password=Новий пароль
retype_new_password=Підтвердити новий пароль
password_incorrect=Поточний пароль неправильний.
-change_password_success=Ваш пароль був оновлений. Тепер увійдіть в систему, використовуючи новий пароль.
-password_change_disabled=Нелокальні акаунти не можуть змінити пароль через Gitea.
+change_password_success=Ваш пароль оновлено. Відтепер входьте в систему, використовуючи новий пароль.
+password_change_disabled=Нелокальні користувачі не можуть оновити свій пароль через вебінтерфейс Gitea.
emails=Адреса електронної пошти
-manage_emails=Керування адресами ел. пошти
-manage_themes=Виберіть тему за замовчуванням
-manage_openid=Керування OpenID
+manage_emails=Керування адресами електронної пошти
+manage_themes=Обрати типову тему
+manage_openid=Керування адресами OpenID
theme_desc=Ця тема буде типовою для всього сайту.
primary=Основний
activated=Активовано
requires_activation=Потрібна активація
-primary_email=Зробити основним
+primary_email=Зробити основною
activate_email=Надіслати активацію
-activations_pending=Активації в очікуванні
+activations_pending=Очікування активації
delete_email=Видалити
email_deletion=Видалити адресу електронної пошти
-email_deletion_desc=Електронна адреса та пов'язана з нею інформація буде видалена з вашого облікового запису. Git коміти, здійснені через цю електронну адресу, залишиться без змін. Продовжити?
-email_deletion_success=Адресу електронної пошти було видалено.
+email_deletion_desc=Адреса електронної пошти та пов'язана з нею інформація буде видалена з вашого облікового запису. Коміти Git, здійснені через цю адресу електронну пошту, залишиться без змін. Продовжити?
+email_deletion_success=Адресу електронної пошти видалено.
theme_update_success=Тему оновлено.
-theme_update_error=Вибрана тема не існує.
+theme_update_error=Обрана тема не існує.
openid_deletion=Видалити адресу OpenID
-openid_deletion_desc=Видалення цієї OpenID-адреси з вашого облікового запису забороняє вам входити з ним. Продовжити?
-openid_deletion_success=Адреса OpenID була видалена.
+openid_deletion_desc=Видалення цієї адреси OpenID не дозволить вам увійти за нею. Продовжити?
+openid_deletion_success=Адресу OpenID видалено.
add_new_email=Додати нову адресу електронної пошти
add_new_openid=Додати новий OpenID URI
add_email=Додати адресу електронної пошти
add_openid=Додати OpenID URI
add_email_success=Додано нову адресу електронної пошти.
-email_preference_set_success=Налаштування електронної пошти успішно встановлені.
-add_openid_success=Нова адреса OpenID була додана.
+email_preference_set_success=Налаштування електронної пошти успішно встановлено.
+add_openid_success=Додано нову адресу OpenID.
keep_email_private=Приховати адресу електронної пошти
-openid_desc=OpenID дозволяє делегувати аутентифікацію зовнішньому постачальнику послуг.
+openid_desc=OpenID дозволяє делегувати автентифікацію зовнішньому постачальнику послуг.
-manage_ssh_keys=Керувати SSH ключами
-manage_ssh_principals=Управління SSH сертифікатами користувачів
-manage_gpg_keys=Керувати GPG ключами
+manage_ssh_keys=Керувати ключами SSH
+manage_ssh_principals=Керування ідентичностями сертифікатів SSH
+manage_gpg_keys=Керувати ключами SSH
add_key=Додати ключ
-ssh_desc=Ці відкриті SSH-ключі пов'язані з вашим обліковим записом. Відповідні приватні ключі дозволяють отримати повний доступ до ваших репозиторіїв.
-principal_desc=Ці настройки SSH сертифікатів вказані у вашому обліковому записі та надають повний доступ до ваших репозиторіїв.
-gpg_desc=Ці публічні ключі GPG пов'язані з вашим обліковим записом. Тримайте свої приватні ключі в безпеці, оскільки вони дозволяють здійснювати перевірку комітів.
-ssh_helper=Потрібна допомога? Дивіться гід на GitHub з генерації ключів SSH або виправлення типових неполадок SSH.
-gpg_helper= Потрібна допомога? Перегляньте посібник GitHub про GPG .
-add_new_key=Додати SSH ключ
-add_new_gpg_key=Додати GPG ключ
+ssh_desc=Ці публічні ключі SSH пов'язані з вашим обліковим записом. Відповідні приватні ключі надають повний доступ до ваших сховищ.
+principal_desc=Ці ідентифікатори сертифікатів SSH прив'язані до вашого облікового запису і надають повний доступ до ваших сховищ.
+gpg_desc=Ці публічні ключі GPG пов'язані з вашим обліковим записом. Зберігайте свої приватні ключі в безпеці, оскільки вони дозволяють підтверджувати коміти.
+ssh_helper=Потрібна допомога? Ознайомтеся з інструкцією GitHub щодо створення власних ключів SSH або виправлення типових неполадок SSH.
+gpg_helper=Потрібна допомога? Перегляньте посібник GitHub про GPG.
+add_new_key=Додати ключ SSH
+add_new_gpg_key=Додати ключ GPG
key_content_ssh_placeholder=Починається з 'ssh-ed25519', 'ssh-rsa', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com', або 'sk-ssh-ed25519@openssh.com'
key_content_gpg_placeholder=Починається з '-----BEGIN PGP PUBLIC KEY BLOCK-----'
-add_new_principal=Додати користувача
-ssh_key_been_used=Цей SSH ключ вже був додано до сервера.
+add_new_principal=Додати ідентичність
+ssh_key_been_used=Цей ключ SSH вже було додано до сервера.
ssh_key_name_used=Ключ SSH з таким ім'ям вже існує у вашому обліковому записі.
-ssh_principal_been_used=Цей користувач вже був доданий на сервер.
+ssh_principal_been_used=Цю ідентичність вже було додано до сервера.
gpg_key_id_used=Публічний ключ GPG з таким самим ідентифікатором вже існує.
-gpg_no_key_email_found=Цей ключ GPG не відповідає жодній активованій поштовій адресі, яка пов'язана з вашим обліковим записом. Його все рівно можна додати, якщо ви підпишете наданий токен.
-gpg_key_matched_identities=Відповідні отримувачі:
-gpg_key_matched_identities_long=Вбудовані ідентифікатори цього ключа збігаються з наступними активованими адресами електронної пошти вказаного користувача. Коміти, які відповідають цим адресам, можуть бути підтверджені цим ключем.
+gpg_no_key_email_found=Цей ключ GPG не відповідає жодній активованій адресі електронної пошти, пов'язаній з вашим обліковим записом. Його все одно можна додати, якщо ви підпишете наданий токен.
+gpg_key_matched_identities=Відповідні ідентичності:
+gpg_key_matched_identities_long=Вбудовані ідентифікатори цього ключа збігаються з наступними активованими адресами електронної пошти цього користувача. За допомогою цього ключа можна перевіряти коміти, що відповідають цим адресам електронної пошти.
gpg_key_verified=Перевірений ключ
-gpg_key_verified_long=Ключ перевірений за допомогою токена і може бути використано для підтвердження комітів, які відповідають будь-якій з активованих адрес електронної пошти для цього користувача, на додачу до будь-яких відповідних ідентифікацій для цього ключа.
+gpg_key_verified_long=Ключ був перевірений токеном і може бути використаний для перевірки комітів, що відповідають будь-яким активованим адресам електронної пошти для цього користувача, а також будь-яких ідентифікаторів, що відповідають цьому ключу.
gpg_key_verify=Підтвердити
-gpg_invalid_token_signature=Наданий ключ GPG, підпис і токен не співпадають або токен застарів.
+gpg_invalid_token_signature=Надані ключ GPG, підпис і токен не збігаються або токен застарілий.
gpg_token_required=Вам потрібно надати підпис для нижчевказаного токена
gpg_token=Токен
gpg_token_help=Ви можете створити підпис за допомогою:
@@ -750,128 +749,128 @@ gpg_token_signature=Текстовий (armored) підпис GPG
key_signature_gpg_placeholder=`Починається з "-----BEGIN PGP SIGNATURE-----"`
verify_gpg_key_success=Ключ GPG '%s' перевірено.
ssh_key_verified=Перевірений ключ
-ssh_key_verify=Підтвердити
+ssh_key_verify=Перевірити
ssh_token_required=Вам потрібно надати підпис для нижчевказаного токена
ssh_token=Токен
ssh_token_help=Ви можете створити підпис за допомогою:
verify_ssh_key_success=Ключ SSH '%s' перевірено.
subkeys=Підключі
-key_id=ID ключа
-key_name=Ім'я ключа
+key_id=Ідентифікатор ключа
+key_name=Назва ключа
key_content=Зміст
principal_content=Зміст
-add_key_success=SSH ключ '%s' додано.
-add_gpg_key_success=GPG ключ '%s' додано.
+add_key_success=Ключ SSH '%s' додано.
+add_gpg_key_success=Ключ GPG '%s' додано.
delete_key=Видалити
-ssh_key_deletion=Видалити SSH ключ
-gpg_key_deletion=Видалити GPG ключ
-ssh_principal_deletion=Видалити SSH сертифікат користувача
+ssh_key_deletion=Видалити ключ SSH
+gpg_key_deletion=Видалити ключ GPG
+ssh_principal_deletion=Видалити ідентичність сертифікату SSH
ssh_key_deletion_desc=Видалення ключа SSH скасовує доступ до вашого облікового запису. Продовжити?
-gpg_key_deletion_desc=Видалення GPG ключа скасовує перевірку підписаних ним комітів. Продовжити?
-ssh_principal_deletion_desc=Видалення ключа SSH скасовує доступ до вашого облікового запису. Продовжити?
-ssh_key_deletion_success=SSH ключ був видалений.
-gpg_key_deletion_success=GPG було видалено.
-ssh_principal_deletion_success=Користувача видалено.
+gpg_key_deletion_desc=Видалення ключа GPG скасовує перевірку підписаних ним комітів. Продовжити?
+ssh_principal_deletion_desc=Видалення ідентичності сертифіката SSH скасовує доступ до вашого облікового запису. Продовжити?
+ssh_key_deletion_success=Ключ SSH видалено.
+gpg_key_deletion_success=Ключ GPG видалено.
+ssh_principal_deletion_success=Ідентичність видалено.
added_on=Додано %s
valid_until_date=Дійсно до %s
valid_forever=Дійсний завжди
-last_used=Останнє використання
-no_activity=Жодної діяльності
-can_read_info=Читати
-can_write_info=Написати
-key_state_desc=Цей ключ використовувався в останні 7 днів
-token_state_desc=Цей токен використовувався в останні 7 днів
-principal_state_desc=Участник був на сайті в останні 7 днів
+last_used=Востаннє використано
+no_activity=Нещодавня активність відсутня
+can_read_info=Читання
+can_write_info=Запис
+key_state_desc=Цей ключ використовувався протягом останніх 7 днів
+token_state_desc=Цей токен використовувався протягом останніх 7 днів
+principal_state_desc=Ця ідентичність використовувалася протягом останніх 7 днів
show_openid=Показати у профілю
-hide_openid=Не показувати у профілі
+hide_openid=Приховати з профілю
ssh_disabled=SSH вимкнено
ssh_signonly=SSH наразі вимкнено, тому ці ключі використовуються лише для перевірки підпису комітів.
-ssh_externally_managed=Цей ключ SSH має зовнішнє управління для цього користувача
-manage_social=Керувати зв'язаними обліковими записами соціальних мереж
+ssh_externally_managed=Цей ключ SSH керується ззовні для цього користувача
+manage_social=Керувати пов'язаними обліковими записами соціальних мереж
unbind=Від'єднати
-manage_access_token=Керування токенами доступу
-generate_new_token=Згенерувати новий токен
-tokens_desc=Ці токени надають доступ до вашого облікового запису за допомогою Gitea API.
-token_name=Ім'я токену
+manage_access_token=Керувати токенами доступу
+generate_new_token=Створити новий токен
+tokens_desc=Ці токени надають доступ до вашого облікового запису за допомогою API Gitea.
+token_name=Назва токену
generate_token=Згенерувати токен
-generate_token_success=Ваш новий токен був створений. Скопіюйте його зараз, оскільки він не буде показаний знову.
+generate_token_success=Ваш новий токен створено. Скопіюйте його зараз, оскільки він не буде показаний знову.
generate_token_name_duplicate=Назва програми %s вже використовується. Будь ласка, використайте нову.
delete_token=Видалити
access_token_deletion=Видалити токен доступу
access_token_deletion_cancel_action=Відмінити
access_token_deletion_confirm_action=Видалити
-delete_token_success=Токен був знищений. Програми, що використовують його, більше не мають доступу до вашого облікового запису.
+delete_token_success=Токен знищено. Додатки, що використовують його, більше не мають доступу до вашого облікового запису.
permissions_access_all=Всі (загальнодоступні, приватні та з обмеженим доступом)
permission_not_set=Не встановлено
permission_no_access=Немає доступу
permission_read=Прочитані
permission_write=Читання і запис
permission_anonymous_read=Анонімне читання
-permission_everyone_read=Усі читають
-permission_everyone_write=Усі пишуть
+permission_everyone_read=Читання для всіх
+permission_everyone_write=Запис для всіх
permissions_list=Дозволи:
-manage_oauth2_applications=Керування програмами OAuth2
-edit_oauth2_application=Редагувати програму OAuth2
-oauth2_applications_desc=Програми OAuth2 дають можливість вашим стороннім програмам надійно аутентифікувати користувачів у цьому екземплярі Gitea.
-remove_oauth2_application=Видалити програму OAuth2
-remove_oauth2_application_desc=Видалення програми OAuth2 скасовує доступ до всіх підписаних маркерів доступу. Продовжити?
-remove_oauth2_application_success=Програму видалено.
-create_oauth2_application=Створити нову програму OAuth2
-create_oauth2_application_button=Створити програму
+manage_oauth2_applications=Керування додатками OAuth2
+edit_oauth2_application=Редагувати додаток OAuth2
+oauth2_applications_desc=Додатки OAuth2 дозволяють вашому сторонньому додатку безпечно автентифікувати користувачів у цьому екземплярі Gitea.
+remove_oauth2_application=Видалити додаток OAuth2
+remove_oauth2_application_desc=Видалення додатка OAuth2 скасує доступ до всіх підписаних токенів доступу. Продовжити?
+remove_oauth2_application_success=Додаток видалено.
+create_oauth2_application=Створити новий додаток OAuth2
+create_oauth2_application_button=Створити додаток
create_oauth2_application_success=Ви успішно створили новий додаток OAuth2.
update_oauth2_application_success=Ви успішно оновили додаток OAuth2.
-oauth2_application_name=Назва програми
+oauth2_application_name=Назва додатка
save_application=Зберегти
-oauth2_client_id=ID Клієнта
+oauth2_client_id=Ідентифікатор клієнта
oauth2_client_secret=Ключ клієнта
oauth2_regenerate_secret=Відновити ключ
-oauth2_regenerate_secret_hint=Ви втратили свій ключ?
+oauth2_regenerate_secret_hint=Втратили ключ?
oauth2_application_edit=Редагувати
oauth2_application_create_description=Програми OAuth2 надають вашим стороннім програмам доступ до облікових записів користувачів у цьому екземплярі.
authorized_oauth2_applications=Авторизовані програми OAuth2
revoke_key=Відкликати
revoke_oauth2_grant=Скасувати доступ
-revoke_oauth2_grant_description=Скасування доступу для цієї програми третьої сторони не дозволить їй отримувати доступ до ваших даних. Ви впевнені?
+revoke_oauth2_grant_description=Скасування доступу для цього стороннього додатка не дозволить йому отримувати доступ до ваших даних. Ви впевнені?
-twofa_is_enrolled=Ваш обліковий запис на даний час використовує двофакторну автентифікацію.
-twofa_not_enrolled=Ваш обліковий запис наразі не використовує двофакторну автентифікаціїю.
+twofa_is_enrolled=Ваш обліковий запис наразі використовує двофакторну автентифікацію.
+twofa_not_enrolled=Ваш обліковий запис наразі не використовує двофакторну автентифікацію.
twofa_disable=Вимкнути двофакторну автентифікацію
twofa_enroll=Увімкнути двофакторну автентифікацію
-twofa_disable_note=При необхідності можна відключити двофакторну автентифікацію.
+twofa_disable_note=За потреби ви можете вимкнути двофакторну автентифікацію.
twofa_disable_desc=Вимкнення двофакторної автентифікації зробить ваш обліковий запис менш безпечним. Продовжити?
-twofa_disabled=Двофакторна автентифікація вимкнена.
-scan_this_image=Проскануйте це зображення вашим додатком для двуфакторної автентифікації:
-or_enter_secret=Або введіть секрет: %s
+twofa_disabled=Двофакторну автентифікацію вимкнено.
+scan_this_image=Відскануйте це зображення вашим додатком для двофакторної автентифікації:
+or_enter_secret=Або введіть код: %s
then_enter_passcode=І введіть пароль, який відображається в додатку:
passcode_invalid=Некоректний пароль. Спробуй ще раз.
-twofa_failed_get_secret=Не вдалося отримати секрет.
+twofa_failed_get_secret=Не вдалося отримати код.
-manage_account_links=Керування обліковими записами
-manage_account_links_desc=Ці зовнішні акаунти прив'язані до вашого аккаунту Gitea.
+manage_account_links=Керування прив'язаними обліковими записами
+manage_account_links_desc=Ці зовнішні облікові записи прив'язані до вашого облікового запису Gitea.
account_links_not_available=Наразі немає зовнішніх облікових записів, пов'язаних із вашим обліковим записом Gitea.
link_account=Прив'язати обліковий запис
-remove_account_link=Видалити облікові записи
+remove_account_link=Видалити обліковий запис
remove_account_link_desc=Видалення пов'язаного облікового запису відкликає його доступ до вашого облікового запису Gitea. Продовжити?
-remove_account_link_success=Зв'язаний обліковий запис видалено.
+remove_account_link_success=Прив'язаний обліковий запис видалено.
-orgs_none=Ви не є учасником будь-якої організації.
+orgs_none=Ви не є членом організації.
-delete_account=Видалити ваш обліковий запис
-delete_prompt=Ця операція остаточно видалить обліковий запис користувача. Це НЕ МОЖЛИВО відмінити.
-delete_with_all_comments=Ваш обліковий запис молодший за %s днів. Щоб уникнути коментарів-привидів, всі запити/PR коментрарі будуть видалені з ним.
-confirm_delete_account=Підтвердження видалення
-delete_account_title=Видалити цей обліковий запис
+delete_account=Видалити обліковий запис
+delete_prompt=Ця операція остаточно видалить ваш обліковий запис. Її НЕ МОЖЛИВО скасувати.
+delete_with_all_comments=Ваш обліковий запис молодший за %s днів. Щоб уникнути коментарів-привидів, усі ваші коментарі будуть видалені разом з ним.
+confirm_delete_account=Підтвердити видалення
+delete_account_title=Видалити обліковий запис
delete_account_desc=Ви впевнені, що хочете остаточно видалити цей обліковий запис?
-email_notifications.enable=Увімкнути сповіщення email
-email_notifications.onmention=Повідомлення email тільки коли згадують
-email_notifications.disable=Вимкнути email сповіщення
-email_notifications.submit=Налаштувати параметри email
+email_notifications.enable=Увімкнути сповіщення електронною поштою
+email_notifications.onmention=Повідомляти електронною поштою коли згадують
+email_notifications.disable=Вимкнути сповіщення електронною поштою
+email_notifications.submit=Налаштувати параметри електронної пошти
email_notifications.andyourown=І ваші власні повідомлення
visibility=Видимість користувача
@@ -881,22 +880,22 @@ visibility.private=Приватний
[repo]
owner=Власник
-owner_helper=Деякі організації можуть не відображатися у випадаючому списку через максимальну кількість репозиторііїв.
-repo_name=Назва репозиторію
-repo_size=Розмір репозиторію
+owner_helper=Деякі організації можуть не відображатися у списку через обмеження на максимальну кількість сховищ.
+repo_name=Назва сховища
+repo_size=Розмір сховища
template=Шаблон
-template_select=Оберіть шаблон.
-template_helper=Зробити репозиторій шаблоном
-template_description=Шаблонні репозиторії дозволяють користувачам генерувати нові репозиторії із такою ж структурою директорій, файлами та додатковими налаштуваннями.
+template_select=Обрати шаблон.
+template_helper=Зробити сховище шаблоном
+template_description=Шаблонні сховища дозволяють користувачам створювати нові сховища з такою ж структурою каталогів, файлами та додатковими налаштуваннями.
visibility=Видимість
-visibility_description=Тільки власник або члени організації які мають віповідні права, зможуть побачити.
+visibility_description=Тільки власник або члени організації, якщо вони мають дозвіл, зможуть його побачити.
visibility_helper=Зробити сховище приватним
visibility_helper_forced=Адміністратор вашого сайту налаштував параметри: всі нові репозиторії будуть приватними.
visibility_fork_helper=(Ці зміни вплинуть на всі форки.)
clone_helper=Потрібна допомога у клонуванні? Відвідайте сторінку Допомога.
fork_repo=Форкнути репозиторій
fork_from=Форк з
-fork_visibility_helper=Неможливо змінити видимість форкнутого репозиторію.
+fork_visibility_helper=Неможливо змінити видимість розгалуженого сховища.
all_branches=Усі гілки
view_all_branches=Переглянути всі гілки
use_template=Застосувати цей шаблон
@@ -904,64 +903,64 @@ open_with_editor=Відкрити в %s
download_zip=Завантажити ZIP
download_tar=Завантажити TAR.GZ
download_bundle=Завантажити BUNDLE
-generate_repo=Згенерувати репозиторій
-generate_from=Генерувати з
+generate_repo=Створити сховище
+generate_from=Створити з
repo_desc=Опис
-repo_desc_helper=Введіть короткий опис (опціонально)
+repo_desc_helper=Введіть короткий опис (необов'язково)
repo_no_desc=Немає опису
repo_lang=Мови
-repo_gitignore_helper=Виберіть шаблон .gitignore.
-repo_gitignore_helper_desc=Оберіть з списку мовних шаблонів файли, які не будуть відстежуватись. Типові артефакти, які генеруються за допомогою інструментів побудови кожної мови, за замовчуванням включені до .gitignor.
+repo_gitignore_helper=Обрати шаблон .gitignore.
+repo_gitignore_helper_desc=Оберіть з списку мовних шаблонів файли, які не слід відстежувати. Типові артефакти, що генеруються інструментами збірки кожної мови, за замовчуванням включені до .gitignor.
issue_labels=Мітки задачі
-issue_labels_helper=Вибрати мітку для задачі.
+issue_labels_helper=Виберіть набір міток задачі.
license=Ліцензія
-license_helper=Виберіть ліцензійний файл.
-license_helper_desc=Ліцензія регулює те, що інші можуть і не можуть робити з вашим кодом. Не впевнені, що саме підходить для вашого проєкту? Дивіться Виберіть ліцензію.
+license_helper=Обрати файл ліцензії.
+license_helper_desc=Ліцензія визначає, що інші можуть робити з вашим кодом, а що ні. Не впевнені, яка підходить для вашого проєкту? Дивіться Вибір ліцензії.
multiple_licenses=Кілька ліцензій
object_format=Формат об'єкту
readme=README
readme_helper=Виберіть шаблон README.
-readme_helper_desc=Це місце, де ви можете написати повний опис вашого проєкту.
-auto_init=Ініціалізувати репозиторій (Додає .gitignore, LICENSE та README)
+readme_helper_desc=Тут ви можете повністю описати ваш проєкт.
+auto_init=Ініціалізувати сховище (додає файли .gitignore, ліцензію та README)
trust_model_helper=Виберіть модель довіри для підтвердження підпису. Можливі варіанти:
-trust_model_helper_collaborator=Співавтор: підписи довіри від співавторів
-trust_model_helper_committer=Учасник: довірені підписи участників
-trust_model_helper_collaborator_committer=Співавтор+Комітер: довірчі підписи від співавторів, які відповідають комітеру
-trust_model_helper_default=За замовчуванням: використовувати стандартну модель довіри для цієї установки
-create_repo=Створити репозиторій
+trust_model_helper_collaborator=Співавтор: довіряти підписам співавторів
+trust_model_helper_committer=Комітер: довіряти підписам, які відповідають комітерам
+trust_model_helper_collaborator_committer=Співавтор+Комітер: довіряти підписам співавторів, які відповідають комітеру
+trust_model_helper_default=Типово: використовувати стандартну модель довіри для цієї установки
+create_repo=Створити сховище
default_branch=Головна гілка
default_branch_label=типово
-default_branch_helper=Гілка за замовчуванням є базовою гілкою для запитів на злиття та комітів коду.
+default_branch_helper=Типова гілка є базовою гілкою для запитів на злиття та комітів.
mirror_prune=Очистити
-mirror_prune_desc=Видалення застарілих посилань які ви відслідковуєте
-mirror_interval_invalid=Інтервал дзеркалювання є неприпустимим.
+mirror_prune_desc=Видалити застарілі посилання на віддалені відстеження
+mirror_interval_invalid=Інтервал дзеркалювання недійсний.
mirror_sync=синхронізовано
mirror_sync_on_commit=Синхронізувати, коли надсилаються коміти
-mirror_address=Клонування з URL-адреси
-mirror_address_desc=Помістіть будь-які необхідні облікові дані у розділі Авторизація.
-mirror_lfs=Склад великих файлів (LFS)
-mirror_lfs_desc=Активувати дзеркальне відображення даних LFS.
+mirror_address=Клонувати з URL-адреси
+mirror_address_desc=Введіть необхідні облікові дані в розділі Авторизація.
+mirror_lfs=Сховище великих файлів (LFS)
+mirror_lfs_desc=Активувати дзеркалювання даних LFS.
mirror_lfs_endpoint=Кінцева точка LFS
-mirror_lfs_endpoint_desc=Синхронізація спробує використовувати url для клону щоб визначити LFS-сервер. Ви також можете вказати кінцеву точку користувача, якщо дані репозиторію LFS зберігаються в іншому місці.
+mirror_lfs_endpoint_desc=Синхронізація спробує використати URL-адресу клону для визначення сервера LFS. Ви також можете вказати власну кінцеву точку, якщо дані LFS сховища зберігаються в іншому місці.
mirror_last_synced=Остання синхронізація
mirror_password_placeholder=(без змін)
-mirror_password_blank_placeholder=(відключено)
+mirror_password_blank_placeholder=(Не встановлено)
mirror_password_help=Змініть ім'я користувача, щоб видалити збережений пароль.
watchers=Спостерігачі
-stargazers=Зацікавлені
+stargazers=Шанувальники
stars_remove_warning=Це видалить усі зірки з цього сховища.
forks=Форки
stars=Зірки
-reactions_more=додати %d більше
-unit_disabled=Адміністратор сайту вимкнув цей розділ репозиторію.
+reactions_more=і ще %d
+unit_disabled=Адміністратор сайту вимкнув цей розділ сховища.
language_other=Інші
-adopt_search=Введіть ім'я користувача для пошуку неприйнятних репозиторіїв... (залиште порожнім, щоб знайти всі)
-adopt_preexisting_label=Прийняті файли
-adopt_preexisting=Прийняти вже існуючі файли
-adopt_preexisting_content=Створити репозиторій з %s
-adopt_preexisting_success=Прийняти файли та створити репозиторій з %s
+adopt_search=Введіть ім'я користувача для пошуку неприйнятих сховищ... (залиште порожнім, щоб знайти всі)
+adopt_preexisting_label=Прийняти файли
+adopt_preexisting=Прийняти попередньо створені файли
+adopt_preexisting_content=Створити сховище з %s
+adopt_preexisting_success=Прийняти файли та створити сховище з %s
delete_preexisting_label=Видалити
-delete_preexisting=Видалити існуючі файли
+delete_preexisting=Видалити попередньо створені файли
delete_preexisting_content=Видалити файли з %s
delete_preexisting_success=Видалено неприйняті файли в %s
blame_prior=Переглянути анотацію, що передує цій зміні
@@ -969,9 +968,9 @@ user_search_tooltip=Показує не більше 30 користувачів
tree_path_not_found=Шлях %[1]s не існує в %[2]s
-transfer.accept=Дозволити трансфер
+transfer.accept=Дозволити переміщення
transfer.accept_desc=`Перемістити до "%s"`
-transfer.reject=Відхилити трансфер
+transfer.reject=Відхилити переміщення
transfer.reject_desc=`Скасувати переміщення до "%s"`
desc.private=Приватний
@@ -979,34 +978,34 @@ desc.public=Публічний
desc.public_access=Публічний доступ
desc.template=Шаблон
desc.internal=Внутрішній
-desc.archived=Архівний
+desc.archived=Архівований
desc.sha256=SHA256
template.items=Елементи шаблону
template.git_content=Вміст Git (типова гілка)
-template.git_hooks=Перехоплювачі Git
-template.webhooks=Webhook'и
+template.git_hooks=Хуки Git
+template.webhooks=Веб-хуки
template.topics=Теми
template.avatar=Аватар
template.issue_labels=Мітки задачі
template.one_item=Слід обрати хоча б один елемент шаблону
-template.invalid=Слід обрати шаблонний репозиторій
+template.invalid=Слід обрати шаблонне сховище
-archive.issue.nocomment=Цей репозиторій архівовано. Ви не можете коментувати задачі.
-archive.pull.nocomment=Це архівний репозитарій. Ви не можете коментувати пулл-реквести.
+archive.issue.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 сховищ.
need_auth=Авторизація
migrate_options=Параметри міграції
migrate_service=Сервіс міграції
migrate_options_mirror_helper=Це сховище буде дзеркалом
-migrate_options_lfs=Перенесення LFS файлів
+migrate_options_lfs=Перенесення файлів LFS
migrate_options_lfs_endpoint.label=Кінцева точка LFS
-migrate_options_lfs_endpoint.description=Міграція буде намагатися використовувати ваш Git віддалено, щоб визначати LFS сервер. Ви також можете вказати свою кінцеву точку, якщо дані репозиторію LFS зберігаються в іншому місці.
-migrate_options_lfs_endpoint.description.local=Також підтримуються шляхи на локальному сервері.
-migrate_items=Деталі міграції
+migrate_options_lfs_endpoint.description=Міграція спробує використати ваш Git віддалено, щоб визначати сервер LFS. Ви також можете вказати власну кінцеву точку, якщо дані сховища LFS зберігаються в іншому місці.
+migrate_options_lfs_endpoint.description.local=Також підтримується шлях до локального сервера.
+migrate_items=Елементи міграції
migrate_items_wiki=Вікі
migrate_items_milestones=Етапи
migrate_items_labels=Мітки
@@ -1016,21 +1015,21 @@ migrate_items_merge_requests=Запити на злиття
migrate_items_releases=Релізи
migrate_repo=Перенести репозиторій
migrate.clone_address=Міграція / клонувати з URL-адреси
-migrate.clone_address_desc=URL-адреса HTTP(S) або Git "clone" існуючого репозиторія
+migrate.clone_address_desc=URL-адреса HTTP(S) або Git "clone" існуючого сховища
migrate.clone_local_path=або шлях до локального серверу
migrate.permission_denied=Вам не дозволено імпортувати локальні репозиторії.
migrate.permission_denied_blocked=Ви не можете імпортувати з заборонених вузлів, будь ласка, попросіть адміністратора перевірити налаштування ALLOWED_DOMAINS/ALLOW_LOCALNETWORKS/BLOCKED_DOMAINS.
-migrate.invalid_lfs_endpoint=Помилкова кінцева точка LFS.
+migrate.invalid_lfs_endpoint=Кінцева точка LFS недійсна.
migrate.failed=Міграція не вдалася: %v
migrate.migrate_items_options=Для перенесення додаткових елементів потрібен токен доступу
migrated_from=Перенесено з %[2]s
migrated_from_fake=Перенесено з %[1]s
-migrate.migrate=Міграція з %s
+migrate.migrate=Мігрувати з %s
migrate.migrating=Міграція із %s...
migrate.migrating_failed=Міграція із %s не вдалася.
migrate.migrating_failed.error=Не вдалося перенести: %s
migrate.migrating_failed_no_addr=Міграція не вдалася.
-migrate.git.description=Перенесення лише репозиторію з будь-якої служби Git.
+migrate.git.description=Перенести сховище з будь-якого сервісу Git'у.
migrate.gitlab.description=Перенести дані з gitlab.com та інших екземплярів GitLab.
migrate.gitea.description=Перенести дані з gitea.com та інших екземплярів Gitea.
migrate.gogs.description=Перенести дані з notabug.org та інших екземплярів Gogs.
@@ -1051,12 +1050,12 @@ migrating_status=Cтатус міграції
mirror_from=дзеркало
forked_from=форк від
generated_from=згенеровано з
-fork_from_self=Ви не можете форкнути репозиторій, так як ви його власник.
+fork_from_self=Ви не можете форкнути власне сховище.
fork_guest_user=Увійдіть, щоб зробити форк репозитарію.
watch_guest_user=Увійдіть, щоб слідкувати за цим репозиторієм.
star_guest_user=Увійдіть, щоб додати в обране цей репозиторій.
unwatch=Не стежити
-watch=Слідкувати
+watch=Стежити
unstar=Видалити із обраних
star=В обрані
fork=Форк
@@ -1068,7 +1067,7 @@ clone_this_repo=Кнонувати цей репозиторій
cite_this_repo=Послатися на це сховище
create_new_repo_command=Створити новий репозиторій з командного рядка
push_exist_repo=Опублікувати існуючий репозиторій з командного рядка
-empty_message=Цей репозиторій порожній.
+empty_message=Це сховище порожнє.
code=Код
code.desc=Доступ до коду, файлів, комітів та гілок.
@@ -1088,20 +1087,19 @@ org_labels_desc=Мітки рівня організації можуть вик
org_labels_desc_manage=керувати
milestone=Етап
-milestones=Етап
+milestones=Етапи
commits=Коміти
commit=Коміт
release=Реліз
releases=Релізи
tag=Тег
-released_this=випущені релізи
+released_this=випустив(-ла)
file_raw=Неформатований
file_history=Історія
file_view_source=Переглянути вихідний код
-file_view_rendered=Переглянути відрендерено
file_view_raw=Перегляд Raw
file_permalink=Постійне посилання
-file_too_large=Цей файл завеликий щоб бути показаним.
+file_too_large=Файл занадто великий для відображення.
file_is_empty=Файл порожній.
code_preview_line_from_to=Рядки від %[1]d до %[2]d в %[3]s
code_preview_line_in=Рядок %[1]d в %[2]s
@@ -1120,10 +1118,10 @@ generated=Створено
commit_graph=Графік комітів
commit_graph.select=Виберіть гілки
commit_graph.hide_pr_refs=Приховати запити на злиття
-commit_graph.monochrome=Монохром
+commit_graph.monochrome=Монохромний
commit_graph.color=Колір
commit.contained_in=Цей коміт міститься в:
-blame=Звинувачення
+blame=Анотація
download_file=Завантажити файл
normal_view=Звичайний вигляд
line=рядок
@@ -1133,41 +1131,40 @@ from_comment=(коментар)
editor.add_file=Додати файл
editor.new_file=Новий файл
editor.upload_file=Завантажити файл
-editor.edit_file=Редагування файлу
+editor.edit_file=Редагувати файл
editor.preview_changes=Попередній перегляд змін
editor.cannot_edit_lfs_files=Файли LFS не можна редагувати в веб-інтерфейсі.
editor.cannot_edit_non_text_files=Бінарні файли не можливо редагувати у веб-інтерфейсі.
editor.edit_this_file=Редагувати файл
editor.this_file_locked=Файл заблоковано
-editor.must_be_on_a_branch=Ви повинні бути у гілці щоб зробити, або запропонувати зміни до цього файлу.
-editor.fork_before_edit=Необхідно зробити форк цього репозиторій, щоб внести або запропонувати зміни в цей файл.
+editor.must_be_on_a_branch=Ви повинні бути у гілці щоб робити або пропонувати зміни до цього файлу.
+editor.fork_before_edit=Необхідно зробити форк цього сховища, щоб внести або запропонувати зміни в цей файл.
editor.delete_this_file=Видалити файл
editor.must_have_write_access=Ви повинні мати доступ на запис щоб запропонувати зміни до цього файлу.
editor.file_delete_success=Файл "%s" видалено.
-editor.name_your_file=Дайте назву файлу…
-editor.filename_help=Щоб додати каталог, наберіть його назву, а потім - косу риску ('/'). Щоб видалити каталог, перейдіть до початку поля і натисніть backspace.
+editor.name_your_file=Назвіть файл…
+editor.filename_help=Щоб додати каталог, наберіть його назву, а потім - прямий слеш ('/'). Щоб видалити каталог, перейдіть до початку поля і натисніть видалити ліворуч.
editor.or=або
editor.cancel_lower=Скасувати
editor.commit_signed_changes=Внести підписані зміни
-editor.commit_changes=Закомітити зміни
editor.add_tmpl=Додати '{filename}'
editor.add=Додати %s
editor.update=Оновити %s
editor.delete=Видалити %s
editor.commit_message_desc=Додати необов'язковий розширений опис…
-editor.signoff_desc=Додатиь Signed-off-by комітом в конці повідомлення журналу комітів.
-editor.commit_directly_to_this_branch=Зробіть коміт прямо в гілку %s.
+editor.signoff_desc=Додати «Підписано комітером» в кінці повідомлення коміту.
+editor.commit_directly_to_this_branch=Зробити коміт безпосередньо в гілку %s.
editor.create_new_branch=Створити нову гілку для цього коміту та відкрити запит на злиття.
editor.create_new_branch_np=Створити нову гілку для цього коміту.
editor.propose_file_change=Запропонувати зміну файлу
-editor.new_branch_name_desc=Ім'я нової гілки…
+editor.new_branch_name_desc=Назва нової гілки…
editor.cancel=Відмінити
-editor.filename_cannot_be_empty=Ім'я файлу не може бути порожнім.
+editor.filename_cannot_be_empty=Назва файлу не може бути порожньою.
editor.invalid_commit_email=Адреса електронної пошти для коміту недійсна.
editor.file_changed_while_editing=Зміст файлу змінився з моменту початку редагування. Натисніть тут , щоб переглянути що було змінено, або закомітьте зміни ще раз, щоб переписати їх.
editor.commit_empty_file_header=Закомітити порожній файл
-editor.commit_empty_file_text=Файл, в комміті порожній. Продовжити?
-editor.no_changes_to_show=Нема змін для показу.
+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=Зміну відхилено сервером без повідомлення. Будь ласка, перевірте Git-хуки.
@@ -1177,7 +1174,6 @@ editor.add_subdir=Додати каталог…
editor.upload_file_is_locked=Файл "%s" заблоковано %s.
editor.upload_files_to_dir=`Завантажити файли до "%s"`
editor.no_commit_to_branch=Не вдалося внести коміт безпосередньо до гілки, тому що:
-editor.user_no_push_to_branch=Користувач не може здійснити пуш до гілки
editor.require_signed_commit=Гілка вимагає підписаного коміту
commits.desc=Переглянути історію зміни коду.
@@ -1188,11 +1184,11 @@ commits.search_all=Усі гілки
commits.author=Автор
commits.message=Повідомлення
commits.date=Дата
-commits.older=Давніше
-commits.newer=Новіше
+commits.older=Старіші
+commits.newer=Новіші
commits.signed_by=Підписано
commits.signed_by_untrusted_user=Підписаний недовіреним користувачем
-commits.signed_by_untrusted_user_unmatched=Підписаний недовіреним користувачем, який не відповідає комітеру
+commits.signed_by_untrusted_user_unmatched=Підписано недовіреним користувачем, який не відповідає комітеру
commits.gpg_key_id=Ідентифікатор GPG ключа
commits.ssh_key_fingerprint=Відбиток ключа SSH
commits.view_file_diff=Переглянути зміни до цього файлу в цьому коміті
@@ -1212,20 +1208,20 @@ projects.description_placeholder=Опис
projects.create=Створити проєкт
projects.title=Назва
projects.new=Новий проєкт
-projects.new_subheader=Координуйте, відстежуйте та оновлюйте інформацію про виконувану роботу в одному місці, аби проєкти залишалися прозорими та за розкладом.
+projects.new_subheader=Координуйте, відстежуйте та оновлюйте свою роботу в одному місці, щоб проєкти залишалися прозорими та виконувалися за графіком.
projects.create_success=Проєкт "%s" створено.
projects.deletion=Видалити проєкт
projects.deletion_desc=Видалення проєкту видаляє його з усіх пов'язаних задач. Продовжити?
projects.deletion_success=Проєкт видалено.
-projects.edit=Редагувати проєкти
+projects.edit=Редагувати проєкт
projects.edit_subheader=Проєкти організовують задачі та відстежують прогрес.
-projects.modify=Оновити проєкт
+projects.modify=Редагувати проєкт
projects.edit_success=Проєкт "%s" оновлено.
projects.type.none=Відсутній
projects.type.basic_kanban=Спрощений канбан
projects.type.bug_triage=Сортування помилок
projects.template.desc=Шаблон проєкту
-projects.template.desc_helper=Оберіть шаблон проєкту, аби почати
+projects.template.desc_helper=Оберіть шаблон проєкту, щоб розпочати роботу
projects.column.edit=Редагувати стовпець
projects.column.edit_title=Назва
projects.column.new_title=Назва
@@ -1236,7 +1232,7 @@ projects.column.delete=Видалити стовпець
projects.column.color=Колір
projects.open=Відкрити
projects.close=Закрити
-projects.card_type.desc=Попередній перегляд карток
+projects.card_type.desc=Попередні перегляди картки
projects.card_type.images_and_text=Зображення і текст
projects.card_type.text_only=Лише текст
@@ -1249,7 +1245,7 @@ issues.filter_reviewers=Фільтр рецензентів
issues.filter_no_results=Немає результатів
issues.filter_no_results_placeholder=Спробуйте налаштувати свої фільтри пошуку.
issues.new=Нова задача
-issues.new.title_empty=Заголовок не може бути пустим
+issues.new.title_empty=Заголовок не може бути порожнім
issues.new.labels=Мітки
issues.new.no_label=Без мітки
issues.new.clear_labels=Очистити мітки
@@ -1260,16 +1256,16 @@ issues.new.open_projects=Відкриті проєкти
issues.new.closed_projects=Закриті проєкти
issues.new.no_items=Немає елементів
issues.new.milestone=Етап
-issues.new.no_milestone=Етап відсутній
+issues.new.no_milestone=Етапи відсутні
issues.new.clear_milestone=Очистити етап
issues.new.assignees=Виконавці
issues.new.clear_assignees=Прибрати виконавців
-issues.new.no_assignees=Немає виконавця
+issues.new.no_assignees=Немає виконавців
issues.new.no_reviewers=Немає рецензентів
-issues.choose.get_started=Початок роботи
+issues.choose.get_started=Розпочати
issues.choose.open_external_link=Відкрити
issues.choose.blank=Типово
-issues.choose.blank_about=Створити задачу із шаблону за замовчуванням.
+issues.choose.blank_about=Створити задачу із стандартного шаблону.
issues.choose.ignore_invalid_templates=Недійсні шаблони проігноровано
issues.choose.invalid_templates=Знайдено %v недійсний(х) шаблон(ів)
issues.choose.invalid_config=Конфігурація задачі містить помилки:
@@ -1282,7 +1278,7 @@ issues.create_label=Створити мітку
issues.label_templates.title=Завантажити визначений набір міток
issues.label_templates.info=Ще немає міток. Натисніть 'Нова мітка' або використовуйте попередньо визначений набір міток:
issues.label_templates.helper=Оберіть набір міток
-issues.label_templates.use=Використовувати набір міток
+issues.label_templates.use=Використати набір міток
issues.add_label=додано %s з міткою %s
issues.add_labels=додано %s з мітками %s
issues.remove_label=видалено %s з міткою %s
@@ -1330,14 +1326,14 @@ issues.filter_type.reviewed_by_you=Перевірено вами
issues.filter_sort=Сортувати
issues.filter_sort.latest=Найновіші
issues.filter_sort.oldest=Найстаріші
-issues.filter_sort.recentupdate=Нещодавно оновлено
+issues.filter_sort.recentupdate=Нещодавно оновлені
issues.filter_sort.leastupdate=Найдавніше оновлені
issues.filter_sort.mostcomment=Найбільш коментовані
issues.filter_sort.leastcomment=Найменш коментовані
-issues.filter_sort.nearduedate=Найновіша дата
-issues.filter_sort.farduedate=Найстаріша дата
-issues.filter_sort.moststars=Найбільш обраних
-issues.filter_sort.feweststars=Найменш обраних
+issues.filter_sort.nearduedate=Найближчий термін
+issues.filter_sort.farduedate=Найвіддаленіший термін
+issues.filter_sort.moststars=Найбільш фаворизовані
+issues.filter_sort.feweststars=Найменш фаворизовані
issues.filter_sort.mostforks=Найбільше форків
issues.filter_sort.fewestforks=Найменше форків
issues.action_open=Відкрити
@@ -1348,7 +1344,7 @@ issues.action_milestone_no_select=Етап відсутній
issues.action_assignee=Виконавець
issues.action_assignee_no_select=Немає виконавця
issues.opened_by=%[1]s відкрито %[3]s
-issues.opened_by_fake=відкрито %[1]s користувачем %[2]s
+issues.opened_by_fake=%[1]s відкрито користувачем %[2]s
issues.previous=Попередній
issues.next=Далі
issues.open_title=Відкрито
@@ -1363,15 +1359,13 @@ issues.context.reference_issue=Посилання в новій задачі
issues.context.edit=Редагувати
issues.context.delete=Видалити
issues.reopen_issue=Відкрити знову
-issues.reopen_comment_issue=Прокоментувати та відкрити знову
+issues.reopen_comment_issue=Повторно відкрити з коментарем
issues.create_comment=Коментар
-issues.closed_at=`закрив цю задачу %[2]s`
-issues.reopened_at=`повторно відкрив цю задачу %[2]s`
+issues.closed_at=`закрив(ла) цю задачу %[2]s`
+issues.reopened_at=`повторно відкрив(ла) цю задачу %[2]s`
issues.commit_ref_at=`згадано цю задачу в коміті %[2]s`
-issues.ref_issue_from=`посилання на цю задачу %[4]s %[2]s`
issues.ref_pull_from=`послався на цей запит злиття %[4]s %[2]s`
issues.ref_closing_from=`згадав запит на злиття %[4]s, які закриють цю задачу %[2]s`
-issues.ref_reopening_from=`згадав запит на злиття %[4]s, які повторно відкриють цю задачу %[2]s`
issues.ref_closed_from=`закрив цю задачу %[4]s %[2]s`
issues.ref_reopened_from=`повторно відкрито цю задачу %[4]s %[2]s`
issues.ref_from=`із %[1]s`
@@ -1383,15 +1377,15 @@ issues.re_request_review=Повторно попросити рецензію
issues.is_stale=З часу останньої перевірки в цей PR було внесено деякі зміни
issues.remove_request_review=Видалити запит рецензування
issues.remove_request_review_block=Неможливо видалити запит рецензування
-issues.dismiss_review=Відхилити рецензiю
-issues.dismiss_review_warning=Ви впевнені, що хочете відхилити цей відгук?
-issues.sign_in_require_desc=Підпишіться щоб приєднатися до обговорення.
+issues.dismiss_review=Відхилити рецензію
+issues.dismiss_review_warning=Ви впевнені, що хочете відхилити рецензію?
+issues.sign_in_require_desc=Увійдіть, щоб приєднатися до розмови.
issues.edit=Редагувати
issues.cancel=Відмінити
issues.save=Зберегти
issues.label_title=Назва мітки
issues.label_description=Опис мітки
-issues.label_color=Колір мітки
+issues.label_color=Колір
issues.label_exclusive_order=Порядок сортування
issues.label_count=%d міток
issues.label_open_issues=%d відкритих задач
@@ -1400,9 +1394,9 @@ issues.label_delete=Видалити
issues.label_modify=Редагувати мітку
issues.label_deletion=Видалити мітку
issues.label_deletion_desc=Видалення мітки видаляє її з усіх задач. Продовжити?
-issues.label_deletion_success=Мітку було видалено.
+issues.label_deletion_success=Мітку видалено.
issues.label.filter_sort.alphabetically=За алфавітом
-issues.label.filter_sort.reverse_alphabetically=З кінця алфавіту
+issues.label.filter_sort.reverse_alphabetically=У зворотному алфавітному порядку
issues.label.filter_sort.by_size=Найменший розмір
issues.label.filter_sort.reverse_by_size=Найбільший розмір
issues.num_participants=%d учасників
@@ -1412,17 +1406,17 @@ issues.subscribe=Підписатися
issues.unsubscribe=Відписатися
issues.unpin=Відкріпити
issues.max_pinned=Ви не можете прикріпити більше задач
-issues.lock=Блокування обговорення
-issues.unlock=Розблокування обговорення
-issues.lock_duplicate=Задача не може бути заблокованим двічі.
+issues.lock=Блокувати обговорення
+issues.unlock=Розблокувати обговорення
+issues.lock_duplicate=Обговорення задачі не може бути заблоковано двічі.
issues.unlock_error=Не можливо розблокувати задачу, яка не заблокована.
issues.lock_with_reason=заблоковано як %s та обмежене обговорення для співавторів %s
issues.lock_no_reason=заблоковано та обмежене обговорення для співавторів %s
-issues.unlock_comment=розблоковане обговорення %s
+issues.unlock_comment=розблокував(ла) обговорення %s
issues.lock_confirm=Заблокувати
issues.unlock_confirm=Розблокувати
issues.lock.notice_1=- Інші користувачі не можуть додавати нові коментарі до цієї задачі.
-issues.lock.notice_2=- Ви й інші співавтори, які мають доступ до цього репозиторію, можете залишати коментарі, які інші можуть бачити.
+issues.lock.notice_2=- Ви та інші співавтори, які мають доступ до цього сховища, все ще можете залишати коментарі, які можуть бачити інші.
issues.lock.notice_3=- Ви завжди зможете розблокувати цю задачу в майбутньому.
issues.unlock.notice_1=- Кожен зможе прокоментувати цю задачу ще раз.
issues.unlock.notice_2=- Ви завжди зможете заблокувати цю задачу в майбутньому.
@@ -1451,13 +1445,13 @@ issues.add_time_sum_to_small=Час не введено.
issues.time_spent_total=Загальний витрачений час
issues.time_spent_from_all_authors=`Загальний витрачений час: %s`
-issues.due_date=Дата завершення
-issues.invalid_due_date_format=Дата закінчення має бути в форматі 'ррр-мм-дд'.
-issues.error_modifying_due_date=Не вдалося змінити дату завершення.
+issues.due_date=Строк виконання
+issues.invalid_due_date_format=Формат строку виконання повинен бути 'рррр-мм-дд'.
+issues.error_modifying_due_date=Не вдалося змінити термін виконання.
issues.error_removing_due_date=Не вдалося видалити дату завершення.
issues.push_commit_1=додав %d коміт %s
issues.push_commits_n=додав %d коміти(-ів) %s
-issues.force_push_codes=`примусово залито %[1]s з %[2]s
до %[4]s
%[6]s`
+issues.force_push_codes=`примусово надіслано %[1]s з %[2]s
до %[4]s
%[6]s`
issues.force_push_compare=Порівняти
issues.due_date_form=рррр-мм-дд
issues.due_date_form_add=Додати дату завершення
@@ -1467,7 +1461,7 @@ issues.due_date_not_set=Термін виконання не встановле
issues.due_date_added=додав(ла) дату завершення %s %s
issues.due_date_remove=видалив(ла) дату завершення %s %s
issues.due_date_overdue=Прострочено
-issues.due_date_invalid=Термін дії не дійсний або знаходиться за межами допустимого діапазону. Будь ласка використовуйте формат 'yyyy-mm-dd'.
+issues.due_date_invalid=Термін дії не дійсний або знаходиться за межами діапазону. Будь ласка, використовуйте формат 'рррр-мм-дд'.
issues.dependency.title=Залежності
issues.dependency.issue_no_dependencies=Залежностей не встановлено.
issues.dependency.pr_no_dependencies=Залежностей не встановлено.
@@ -1481,33 +1475,33 @@ issues.dependency.remove_info=Видалити цю залежність
issues.dependency.added_dependency=`додав нову залежність %s`
issues.dependency.removed_dependency=`видалив залежність %s`
issues.dependency.pr_closing_blockedby=Закриття цього запиту злиття заблоковано наступними задачами
-issues.dependency.issue_closing_blockedby=Закриття цієї задачи заблоковано наступними задачами
-issues.dependency.issue_close_blocks=Ця задача блокує закриття залежних задач
+issues.dependency.issue_closing_blockedby=Закриття цієї задачі заблоковано наступними задачами
+issues.dependency.issue_close_blocks=Ця задача блокує закриття наступних задач
issues.dependency.pr_close_blocks=Цей запит на злиття блокує закриття залежних задач
-issues.dependency.issue_close_blocked=Вам потрібно закрити всі задачі, що блокують цю задачу, перед її закриттям.
+issues.dependency.issue_close_blocked=Перш ніж закрити це завдання, вам потрібно закрити всі завдання, що блокують його.
issues.dependency.pr_close_blocked=Вам потрібно закрити всі задачі, що блокують цей запит, перед його злиттям.
issues.dependency.blocks_short=Блоки
issues.dependency.blocked_by_short=Залежить від
issues.dependency.remove_header=Видалити залежність
issues.dependency.issue_remove_text=Це призведе до видалення залежності з цієї задачі. Продовжити?
-issues.dependency.pr_remove_text=Це призведе до видалення залежності з цього пулл-реквесту. Продовжити?
+issues.dependency.pr_remove_text=Це вилучить залежність з цього запиту на злиття. Продовжити?
issues.dependency.setting=Увімкнути залежності для задач та запитів на злиття
issues.dependency.add_error_same_issue=Ви не можете зробити задачу залежною від себе.
-issues.dependency.add_error_dep_issue_not_exist=Залежність для задачі не існує.
+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=Ви не можете схвалити власний пулл-реквест.
+issues.review.self.approval=Ви не можете затвердити власний запит на злиття.
issues.review.self.rejection=Ви не можете надіслати запит на зміну на власний пулл-реквест.
-issues.review.approve=зміни затверджено %s
+issues.review.approve=затвердив(ла) ці зміни %s
issues.review.comment=рецензовано %s
-issues.review.dismissed=відхилено відгук %s %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.wait=запросили на рецензію %s
issues.review.add_review_request=попросив рецензію від %s %s
issues.review.remove_review_request=видалив запит на рецензію до %s %s
issues.review.remove_review_request_self=відмовився рецензувати %s
@@ -1535,7 +1529,7 @@ 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=Налаштування
+issues.content_history.options=Параметри
issues.reference_link=Посилання: %s
compare.compare_base=основа
@@ -1550,8 +1544,7 @@ pulls.has_viewed_file=Переглядів
pulls.expand_files=Розгорнути всі файли
pulls.collapse_files=Згорнути всі файли
pulls.compare_base=злити в
-pulls.compare_compare=pull з
-pulls.switch_comparison_type=Перемкнути вигляд порівняння
+pulls.switch_comparison_type=Перемкнути тип порівняння
pulls.switch_head_and_base=Поміняти місцями основну та базову гілку
pulls.filter_branch=Фільтр по гілці
pulls.show_all_commits=Показати всі коміти
@@ -1565,71 +1558,69 @@ pulls.change_target_branch_at=`змінена цільова гілка з %s
pulls.tab_conversation=Обговорення
pulls.tab_commits=Коміти
pulls.tab_files=Змінені файли
-pulls.reopen_to_merge=Будь ласка перевідкрийте цей запит щоб здіснити операцію злиття.
+pulls.reopen_to_merge=Будь ласка, заново відкрийте цей запит щоб виконати злиття.
pulls.cant_reopen_deleted_branch=Цей запит не можна повторно відкрити, оскільки гілку видалено.
pulls.merged=Злито
pulls.closed=Запит на злиття закрито
pulls.manually_merged=Ручне злиття
pulls.merged_info_text=Гілку %s тепер можна видалити.
-pulls.is_closed=Запит на злиття було закрито.
-pulls.title_wip_desc=`Почніть заголовок з %s щоб запобігти випадковому злиттю запитів.`
-pulls.cannot_merge_work_in_progress=Цей пулл-реквест позначений як прийнятий в опрацювання.
-pulls.still_in_progress=Все ще в процесі?
+pulls.is_closed=Запит на злиття закрито.
+pulls.title_wip_desc=`Почніть заголовок з %s щоб запобігти випадковому об'єднанню.`
+pulls.cannot_merge_work_in_progress=Цей запит на злиття позначено як незавершений.
+pulls.still_in_progress=Ще не закінчено?
pulls.add_prefix=Додати префікс %s
pulls.remove_prefix=Видалити префікс %s
-pulls.data_broken=Зміст цього запиту було порушено внаслідок видалення інформації Форком. Цей запит тягнеться через відсутність інформації про вилучення.
-pulls.files_conflicted=Цей запит має зміни, що конфліктують з цільовою гілкою.
-pulls.is_checking=Перевірка конфліктів злиття ...
+pulls.data_broken=Збій цього запиту на злиття через відсутність інформації про форк.
+pulls.files_conflicted=Цей запит на злиття має зміни, що конфліктують з цільовою гілкою.
+pulls.is_checking=Перевірка конфліктів об'єднання (merge) ...
pulls.required_status_check_failed=Деякі необхідні перевірки виконані з помилками.
pulls.required_status_check_missing=Декілька з необхідних перевірок відсутні.
pulls.required_status_check_administrator=Як адміністратор ви все одно можете об'єднати цей запит на злиття.
-pulls.can_auto_merge_desc=Цей запит можна об'єднати автоматично.
-pulls.cannot_auto_merge_desc=Цей запит на злиття не може бути злитий автоматично через конфлікти.
-pulls.cannot_auto_merge_helper=Злийте вручну для вирішення конфліктів.
-pulls.num_conflicting_files_1=%d конфліктуючий файл
-pulls.num_conflicting_files_n=%d конфліктуючі файли
+pulls.can_auto_merge_desc=Цей запит на злиття можна об'єднати автоматично.
+pulls.cannot_auto_merge_desc=Цей запит на злиття не може бути об'єднано автоматично через конфлікти.
+pulls.cannot_auto_merge_helper=Об'єднайте вручну для вирішення конфліктів.
+pulls.num_conflicting_files_1=%d конфліктний файл
+pulls.num_conflicting_files_n=%d конфліктних файлів
pulls.approve_count_1=%d схвалення
pulls.approve_count_n=%d схвалень
pulls.reject_count_1=%d запит на зміну
-pulls.reject_count_n=%d запити на зміну
-pulls.waiting_count_1=очікується %d рецензія
+pulls.reject_count_n=%d запитів на зміну
+pulls.waiting_count_1=очікується %d рецензій
pulls.waiting_count_n=очікується %d рецензії(й)
-pulls.wrong_commit_id=id коміту повинен бути id коміту в цільовій гілці
+pulls.wrong_commit_id=ідентифікатор коміту повинен бути ідентифікатором коміту в цільовій гілці
-pulls.no_merge_desc=Цей запити на злиття неможливо злити, оскільки всі параметри об'єднання репозиторія вимкнено.
-pulls.no_merge_helper=Увімкніть параметри злиття в налаштуваннях репозиторія або злийте запити на злиття вручну.
-pulls.no_merge_wip=Цей пулл-реквест не можливо об'єднати, тому-що він вже виконується.
-pulls.no_merge_not_ready=Цей запит не готовий до злиття, перевірте статус рецензіювання і статус перевірки.
-pulls.no_merge_access=Ви не авторизовані, щоб виконати цей запит на злиття.
-pulls.merge_pull_request=Створити коміт зі злиттям
+pulls.no_merge_desc=Цей запит на злиття неможливо об'єднати, оскільки всі параметри об'єднання сховищ вимкнено.
+pulls.no_merge_helper=Увімкніть параметри об'єднання в налаштуваннях сховища або об'єднайте запит на злиття вручну.
+pulls.no_merge_wip=Цей запит на злиття неможливо об'єднаний, оскільки він позначений як незавершений.
+pulls.no_merge_not_ready=Цей запит на злиття ще не готовий до об'єднання, перевірте статуси рецензіювання та перевірки.
+pulls.no_merge_access=Ви не авторизовані об'єднувати цей запит на злиття.
+pulls.merge_pull_request=Створити коміт об'єднання
pulls.rebase_merge_pull_request=Перебазувати, а потім виконати злиття перемотуванням
-pulls.rebase_merge_commit_pull_request=Перебазувати, а потім створити коміт злиття
+pulls.rebase_merge_commit_pull_request=Перебазувати, а потім створити коміт об'єднання
pulls.squash_merge_pull_request=Створити зварений (squash) коміт
pulls.merge_manually=Об’єднано вручну
-pulls.merge_commit_id=ID коміту злиття
-pulls.require_signed_wont_sign=Гілка вимагає підписаних комітів, але це злиття не буде підписано
+pulls.merge_commit_id=Ідентифікатор коміту об’єднання
+pulls.require_signed_wont_sign=Гілка вимагає підписаних комітів, але це об'єднання не буде підписано
-pulls.invalid_merge_option=Цей параметр злиття не можна використовувати для цього Pull Request'а.
-pulls.merge_conflict=Злиття не вдалося: Був конфлікт при злиття. Підказка: спробуйте іншу стратегію
+pulls.invalid_merge_option=Цей параметр об'єднання не можна використовувати для цього запиту на злиття.
+pulls.merge_conflict=Об'єднання не вдалося: Під час злиття виник конфлікт. Підказка: Спробуйте іншу стратегію
pulls.merge_conflict_summary=Помилка
-pulls.rebase_conflict=Злиття не вдалося: відбувся конфлікт під час злиття: %[1]s. Підказка: спробуйте іншу стратегію
+pulls.rebase_conflict=Об'єднання не вдалося: відбувся конфлікт під час перебазування коміту: %[1]s. Підказка: спробуйте іншу стратегію
pulls.rebase_conflict_summary=Помилка
-pulls.unrelated_histories=Помилка злиття: head та base злиття не мають спільної історії. Підказка: спробуйте іншу стратегію
-pulls.merge_out_of_date=Помилка злиття: base було оновлено, поки відбувалося злиття. Підказка: спробуйте знову.
pulls.push_rejected_summary=Повне повідомлення про відмову
-pulls.open_unmerged_pull_exists=`Ви не можете знову відкрити, оскільки вже існує запит на злиття (%d) з того ж репозиторія з тією ж інформацією про злиття і в очікуванні.`
-pulls.status_checking=Деякі перевірки знаходяться на розгляді
+pulls.open_unmerged_pull_exists=`Ви не можете повторно відкрити цей запит на злиття, оскільки вже існує один (#%d) з ідентичними властивостями.`
+pulls.status_checking=Деякі перевірки ще не завершені
pulls.status_checks_success=Всі перевірки були успішними
pulls.status_checks_warning=Декілька перевірок завершилися з попередженнями
-pulls.status_checks_failure=Декілька перевірок не були успішними
+pulls.status_checks_failure=Деякі перевірки не спрацювали
pulls.status_checks_error=Декілька перевірок завершилися з помилками
pulls.status_checks_requested=Обов'язково
pulls.status_checks_details=Подробиці
pulls.status_checks_hide_all=Приховати всі перевірки
pulls.status_checks_show_all=Показати всі перевірки
-pulls.update_branch=Оновити гілку шляхом злиття
+pulls.update_branch=Оновити гілку шляхом об'єднання
pulls.update_branch_rebase=Оновити гілку перебазуванням
-pulls.update_branch_success=Оновлення гілки пройшло успішно
+pulls.update_branch_success=Оновлення гілки успішне
pulls.update_not_allowed=Ви не можете оновити гілку
pulls.outdated_with_base_branch=Ця гілка застаріла відносно базової гілки
pulls.close=Закрити запит на злиття
@@ -1638,13 +1629,13 @@ pulls.reopened_at=`повторно відкрив цей запит на зли
pulls.cmd_instruction_hint=Переглянути інструкції командного рядка
pulls.cmd_instruction_merge_title=Об'єднати
pulls.cmd_instruction_merge_desc=Об'єднати зміни і оновити на Gitea.
-pulls.clear_merge_message=Очистити повідомлення про злиття
+pulls.clear_merge_message=Очистити повідомлення про об'єднання
pulls.auto_merge_button_when_succeed=(Якщо перевірки успішні)
-pulls.auto_merge_when_succeed=Автоматичне злиття після успішного завершення всіх перевірок
+pulls.auto_merge_when_succeed=Автоматичне об'єднання після успішного завершення всіх перевірок
-pulls.auto_merge_cancel_schedule=Скасувати автоматичне злиття
-pulls.auto_merge_not_scheduled=Автоматичне злиття цього запиту не заплановано.
+pulls.auto_merge_cancel_schedule=Скасувати автоматичне об'єднання
+pulls.auto_merge_not_scheduled=Цей запит на злиття не планується об'єднувати автоматично.
pulls.delete.title=Видалити цей запит на злиття?
@@ -1665,23 +1656,23 @@ milestones.completeness=%d%% завершено
milestones.create=Створити етап
milestones.title=Заголовок
milestones.desc=Опис
-milestones.due_date=Дата завершення (опціонально)
+milestones.due_date=Дата завершення (необов’язково)
milestones.clear=Очистити
milestones.invalid_due_date_format=Дата завершення має бути в форматі 'рррр-мм-дд'.
milestones.create_success=Етап "%s" створено.
milestones.edit=Редагувати етап
-milestones.edit_subheader=Створюйте етапи для організації ваших задач.
+milestones.edit_subheader=Етапи впорядковують задачі та відстежують прогрес.
milestones.cancel=Відмінити
milestones.modify=Оновити етап
milestones.edit_success=Етап '%s' оновлено.
milestones.deletion=Видалити етап
-milestones.deletion_desc=Видалення етапу призведе до його видалення з усіх пов'язаних задач. Продовжити?
-milestones.deletion_success=Етап успішно видалено.
+milestones.deletion_desc=Видалення етапу видаляє його з усіх пов'язаних з ним задач. Продовжити?
+milestones.deletion_success=Етап видалено.
milestones.filter_sort.name=Назва
milestones.filter_sort.earliest_due_data=Найраніший строк
milestones.filter_sort.latest_due_date=Останній строк
-milestones.filter_sort.most_issues=Найбільш задач
-milestones.filter_sort.least_issues=Найменш задач
+milestones.filter_sort.most_issues=Найбільше задач
+milestones.filter_sort.least_issues=Найменше задач
signing.will_sign=Цей коміт буде підписано ключем "%s".
signing.wont_sign.nokey=Немає ключа для підписання цього коміту.
@@ -1693,8 +1684,8 @@ ext_wiki.desc=Посилання на зовнішню вікі.
wiki=Вікі
wiki.welcome=Ласкаво просимо до Вікі.
-wiki.welcome_desc=Wiki дозволяє писати та ділитися документацією з співавторами.
-wiki.desc=Пишіть та обмінюйтеся документацією із співавторами.
+wiki.welcome_desc=Wiki дозволяє писати та ділитися документацією зі співавторами.
+wiki.desc=Пишіть та обмінюйтеся документацією зі співавторами.
wiki.create_first_page=Створити першу сторінку
wiki.page=Сторінка
wiki.filter_page=Фільтр сторінок
@@ -1711,7 +1702,7 @@ wiki.wiki_page_revisions=Ревізії вікі сторінок
wiki.back_to_wiki=Повернутись на сторінку Вікі
wiki.delete_page_button=Видалити сторінку
wiki.delete_page_notice_1=Видалення вікі-сторінки "%s" не може бути скасовано. Продовжити?
-wiki.page_already_exists=Вікі-сторінка з таким самим ім'ям вже існує.
+wiki.page_already_exists=Сторінка Вікі з такою назвою вже існує.
wiki.reserved_page=Назва сторінки вікі "%s" зарезервована.
wiki.pages=Сторінки
wiki.last_updated=Останні оновлення %s
@@ -1729,25 +1720,25 @@ activity.period.quarterly=3 місяці
activity.period.semiyearly=6 місяців
activity.period.yearly=1 рік
activity.overview=Огляд
-activity.active_prs_count_1=%d Активний запити на злиття
+activity.active_prs_count_1=%d Активний запит на злиття
activity.active_prs_count_n=%d Активні запити на злиття
-activity.merged_prs_count_1=Злитий запит на злиття
-activity.merged_prs_count_n=Злиті запити на злиття
+activity.merged_prs_count_1=Об'єднаний запит на злиття
+activity.merged_prs_count_n=Об'єднані запити на злиття
activity.opened_prs_count_1=Запропонований запит на злиття
-activity.opened_prs_count_n=Запропонованих запитів на злиття
+activity.opened_prs_count_n=Запропоновані запити на злиття
activity.title.user_1=%d користувачем
activity.title.user_n=%d користувачами
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=Злито
+activity.merged_prs_label=Об'єднано
activity.opened_prs_label=Запропоновано
activity.active_issues_count_1=%d Активна задача
activity.active_issues_count_n=%d Активні задачі
activity.closed_issues_count_1=Закрита задача
activity.closed_issues_count_n=Закриті задачі
-activity.title.issues_1=%d Задач
+activity.title.issues_1=%d Задача
activity.title.issues_n=%d Задач
activity.title.issues_closed_from=%s закрито %s
activity.title.issues_created_by=%s створена(і) %s
@@ -1757,30 +1748,30 @@ 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 Релізів
activity.title.releases_published_by=%s опубліковано %s
activity.published_release_label=Опубліковано
-activity.no_git_activity=У цей період не було здійснено жодних дій.
-activity.git_stats_exclude_merges=Не враховуючи злиття,
+activity.no_git_activity=За цей період не було жодної активності комітів.
+activity.git_stats_exclude_merges=Не враховуючи об'єднання,
activity.git_stats_author_1=%d автор
activity.git_stats_author_n=%d автори
-activity.git_stats_pushed_1=відправлено
-activity.git_stats_pushed_n=відправлено
+activity.git_stats_pushed_1=відправив(ла)
+activity.git_stats_pushed_n=відправили
activity.git_stats_commit_1=%d коміт
-activity.git_stats_commit_n=%d коміти
+activity.git_stats_commit_n=%d комітів
activity.git_stats_push_to_branch=в %s та
activity.git_stats_push_to_all_branches=до всіх гілок.
activity.git_stats_on_default_branch=На %s,
activity.git_stats_file_1=%d файл
-activity.git_stats_file_n=%d файли
-activity.git_stats_files_changed_1=змінено
+activity.git_stats_file_n=%d файлів
+activity.git_stats_files_changed_1=змінив(ла)
activity.git_stats_files_changed_n=змінено
activity.git_stats_additions=і були
activity.git_stats_addition_1=%d добавка
-activity.git_stats_addition_n=%d добавки
+activity.git_stats_addition_n=%d додатків
activity.git_stats_and_deletions=та
activity.git_stats_deletion_1=%d видалений
activity.git_stats_deletion_n=%d видалені
@@ -1790,13 +1781,13 @@ contributors.contribution_type.commits=Коміти
contributors.contribution_type.deletions=Видалення
settings=Налаштування
-settings.desc=У налаштуваннях ви можете змінювати різні параметри цього репозиторія
-settings.options=Репозиторій
+settings.desc=У налаштуваннях ви можете керувати параметрами сховища
+settings.options=Сховище
settings.public_access=Публічний доступ
settings.collaboration=Співавтори
settings.collaboration.admin=Адміністратор
settings.collaboration.write=Запис
-settings.collaboration.read=Читати
+settings.collaboration.read=Читання
settings.collaboration.owner=Власник
settings.collaboration.undefined=Не визначено
settings.hooks=Веб-хуки
@@ -1804,49 +1795,46 @@ settings.githooks=Git хуки
settings.basic_settings=Базові налаштування
settings.mirror_settings=Налаштування дзеркала
settings.mirror_settings.docs.doc_link_title=Як віддзеркалити сховища?
-settings.mirror_settings.mirrored_repository=Віддзеркалений репозиторій
+settings.mirror_settings.mirrored_repository=Віддзеркалене сховища
settings.mirror_settings.direction=Напрямок
settings.mirror_settings.direction.pull=Pull
settings.mirror_settings.direction.push=Push
settings.mirror_settings.last_update=Останнє оновлення
-settings.mirror_settings.push_mirror.none=Не налаштовано дзеркало push
-settings.mirror_settings.push_mirror.remote_url=URL віддаленого репозитарія git
-settings.mirror_settings.push_mirror.add=Додати Push дзеркало
+settings.mirror_settings.push_mirror.remote_url=URL віддаленого сховища Git
settings.sync_mirror=Синхронізувати зараз
settings.site=Веб-сайт
settings.update_settings=Оновити налаштування
settings.update_mirror_settings=Оновити параметри дзеркала
settings.branches.switch_default_branch=Змінити типову гілку
-settings.branches.update_default_branch=Оновити гілку за замовчуванням
+settings.branches.update_default_branch=Оновити типову гілку
settings.branches.add_new_rule=Додати нове правило
-settings.advanced_settings=Додаткові налаштування
-settings.wiki_desc=Увімкнути репозиторії Вікі
-settings.use_internal_wiki=Використовувати вбудовані Вікі
-settings.use_external_wiki=Використовувати зовнішні Вікі
+settings.advanced_settings=Розширені налаштування
+settings.wiki_desc=Увімкнути Вікі сховища
+settings.use_internal_wiki=Використовувати вбудовану Вікі
+settings.use_external_wiki=Використовувати зовнішню Вікі
settings.external_wiki_url=URL зовнішньої вікі
-settings.external_wiki_url_error=Зовнішня URL-адреса wiki не є допустимою URL-адресою.
-settings.external_wiki_url_desc=Відвідувачі будуть перенаправлені на URL-адресу, коли вони клацають по вкладці.
+settings.external_wiki_url_error=Зовнішня URL-адреса Вікі є недійсною.
+settings.external_wiki_url_desc=Відвідувачі перенаправляються на URL-адресу зовнішньої вікі при натисканні вкладки.
settings.issues_desc=Увімкнути відстеження задач в репозиторію
settings.use_internal_issue_tracker=Використовувати вбудовану систему відстеження задач
settings.use_external_issue_tracker=Використовувати зовнішню систему обліку задач
settings.external_tracker_url=URL зовнішньої системи відстеження задач
-settings.external_tracker_url_error=URL зовнішнього баг-трекера не є допустимою URL-адресою.
-settings.external_tracker_url_desc=Відвідувачі перенаправляються на зовнішню URL-адресу, коли натискають вкладку 'Задачі'.
+settings.external_tracker_url_error=URL-адреса зовнішнього трекера задач є недійсною.
+settings.external_tracker_url_desc=Відвідувачі перенаправляються на URL-адресу зовнішнього трекера задач при натисканні на вкладку.
settings.tracker_url_format=Формат URL зовнішнього трекера задач
-settings.tracker_url_format_error=Неправильний формат URL-адреси зовнішнього баг-трекера.
-settings.tracker_issue_style=Формат номеру для зовнішньої системи обліку задач
+settings.tracker_url_format_error=Формат URL-адреси зовнішнього трекера проблем недійсний.
settings.tracker_issue_style.numeric=Цифровий
-settings.tracker_issue_style.alphanumeric=Буквено-цифровий
+settings.tracker_issue_style.alphanumeric=Алфавітно-цифровий
settings.tracker_issue_style.regexp=Регулярний вираз
settings.tracker_issue_style.regexp_pattern=Шаблон регулярного виразу
settings.tracker_issue_style.regexp_pattern_desc=Першу захоплену групу буде використано замість {index}
.
settings.tracker_url_format_desc=Використовуйте шаблони {user}
, {repo}
та {index}
для імені користувача, репозиторію та номеру задічі.
settings.enable_timetracker=Увімкнути відстеження часу
-settings.allow_only_contributors_to_track_time=Враховувати тільки учасників розробки в підрахунку часу
+settings.allow_only_contributors_to_track_time=Лише відстежувати час співавторів
settings.pulls_desc=Увімкнути запити на злиття в репозиторій
settings.pulls.ignore_whitespace=Ігнорувати пробіл у конфліктах
-settings.pulls.enable_autodetect_manual_merge=Увімкнути автовизначення ручного злиття (Примітка: у деяких особливий випадках можуть виникнуть помилки)
+settings.pulls.enable_autodetect_manual_merge=Увімкнути автоматичне визначення ручного об'єднання (Примітка: у деяких особливих випадках можуть виникати помилкові оцінки)
settings.pulls.default_delete_branch_after_merge=Видаляти гілку запиту злиття, коли його прийнято
settings.releases_desc=Увімкнути релізи сховища
settings.projects_desc=Увімкнути проєкти
@@ -1854,7 +1842,7 @@ settings.projects_mode_repo=Тільки проєкти сховища
settings.projects_mode_owner=Тільки проєкти користувачів або організацій
settings.projects_mode_all=Всі проєкти
settings.admin_settings=Налаштування адміністратора
-settings.admin_enable_health_check=Включити перевірки працездатності репозиторію (git fsck)
+settings.admin_enable_health_check=Увімкнути перевірку стану сховища (git fsck)
settings.admin_code_indexer=Індексатор коду
settings.admin_stats_indexer=Індексатор статистики коду
settings.admin_indexer_commit_sha=Останній індексований SHA
@@ -1863,8 +1851,8 @@ settings.reindex_button=Додати до черги на реіндексаці
settings.reindex_requested=Запит на реіндексацію
settings.admin_enable_close_issues_via_commit_in_any_branch=Закрити задачу за допомогою коміта, зробленого не в головній гілці
settings.danger_zone=Небезпечна зона
-settings.new_owner_has_same_repo=Новий власник вже має репозиторій з такою назвою. Будь ласка, виберіть інше ім'я.
-settings.convert=Перетворити на звичайний репозиторій
+settings.new_owner_has_same_repo=Новий власник вже має сховище з такою назвою. Будь ласка, виберіть іншу назву.
+settings.convert=Перетворити на звичайне сховище
settings.convert_desc=Ви можете сконвертувати це дзеркало у звичайний репозиторій. Це не може бути скасовано.
settings.convert_notices_1=Ця операція перетворить дзеркало у звичайний репозиторій і не може бути скасована.
settings.convert_confirm=Перетворити репозиторій
diff --git a/options/locale/locale_zh-CN.ini b/options/locale/locale_zh-CN.ini
index 1a07c2f4c0..989802b9db 100644
--- a/options/locale/locale_zh-CN.ini
+++ b/options/locale/locale_zh-CN.ini
@@ -262,7 +262,7 @@ host=数据库主机
user=用户名
password=数据库用户密码
db_name=数据库名称
-db_schema=Schema
+db_schema=架构
db_schema_helper=留空则数据库中默认值为("public")。
ssl_mode=SSL
path=数据库文件路径
@@ -752,7 +752,7 @@ cancel=取消操作
language=界面语言
ui=主题
hidden_comment_types=隐藏的评论类型
-hidden_comment_types_description=此处选中的注释类型不会显示在工单页面中。比如,勾选「标签」删除所有「{user} 添加/删除的 {label}」注释。
+hidden_comment_types_description=此处选中的注释类型不会显示在工单页面中。比如,勾选「标记」删除所有「{user} 添加/删除的 {label}」注释。
hidden_comment_types.ref_tooltip=注释此问题在何处被提及过,如另一个问题、代码提交等
hidden_comment_types.issue_ref_tooltip=注释用户在何处更改了与此问题相关联的分支/标签
comment_type_group_reference=引用
@@ -1066,10 +1066,10 @@ download_tar=下载 TAR.GZ
download_bundle=下载 BUNDLE
generate_repo=生成仓库
generate_from=生成自
-repo_desc=仓库描述
+repo_desc=描述
repo_desc_helper=输入简要描述 (可选)
repo_no_desc=无详细信息
-repo_lang=编程语言
+repo_lang=语言
repo_gitignore_helper=选择 .gitignore 模板。
repo_gitignore_helper_desc=从常见语言的模板列表中选择忽略跟踪的文件。默认情况下,由开发或构建工具生成的特殊文件都包含在 .gitignore 中。
issue_labels=工单标签
@@ -1161,15 +1161,15 @@ template.issue_labels=工单标签
template.one_item=必须至少选择一个模板项
template.invalid=必须选择一个模板仓库
-archive.title=该仓库已被归档。您可以查看文件和克隆它,但不能推送、创建工单或合并请求。
-archive.title_date=该仓库已于 %s 归档。您可以查看文件或克隆它,但不能推送、创建工单或合并请求。
+archive.title=该仓库已被归档。您可以查看文件和克隆它,但不能推送、打开工单或合并请求。
+archive.title_date=该仓库已于 %s 归档。您可以查看文件或克隆它,但不能推送、打开工单或合并请求。
archive.issue.nocomment=此仓库已存档,您不能在此工单添加评论。
archive.pull.nocomment=此仓库已存档,您不能在此合并请求添加评论。
form.reach_limit_of_creation_1=您已经达到了 %d 仓库的上限。
form.reach_limit_of_creation_n=您已经达到了 %d 个仓库的上限。
form.name_reserved=仓库名称 %s 是保留的。
-form.name_pattern_not_allowed=仓库名称中不允许使用 %s 格式。
+form.name_pattern_not_allowed=仓库名中不允许使用「%s」格式。
need_auth=授权
migrate_options=迁移选项
@@ -1261,7 +1261,7 @@ branch=分支
tree=目录树
clear_ref=`清除当前引用`
filter_branch_and_tag=过滤分支或标签
-find_tag=查找 Git 标签
+find_tag=查找标签
branches=分支列表
tags=标签列表
issues=工单
@@ -1279,7 +1279,7 @@ commits=提交
commit=提交
release=发布
releases=发布
-tag=Git 标签
+tag=标签
released_this=发布
tagged_this=已标记
file.title=%s 位于 %s
@@ -1336,7 +1336,7 @@ editor.cannot_edit_non_text_files=网页不能编辑二进制文件。
editor.edit_this_file=编辑文件
editor.this_file_locked=文件已锁定
editor.must_be_on_a_branch=您必须在某个分支上才能对此文件进行修改操作。
-editor.fork_before_edit=您必须在派生这个仓库才能对此文件进行修改操作
+editor.fork_before_edit=您必须派生这个仓库才能对此文件进行修改操作。
editor.delete_this_file=删除文件
editor.must_have_write_access=您必须具有写权限才能对此文件进行修改操作。
editor.file_delete_success=文件「%s」已删除。
@@ -1359,7 +1359,7 @@ editor.signoff_desc=在提交日志消息末尾添加签署人信息。
editor.commit_directly_to_this_branch=直接提交至 %s 分支。
editor.create_new_branch=为此提交创建一个 新的分支 并发起合并请求。
editor.create_new_branch_np=为此提交创建 新分支。
-editor.propose_file_change=提议文件更改
+editor.propose_file_change=建议文件更改
editor.new_branch_name=为这次提交的新分支命名
editor.new_branch_name_desc=新的分支名称...
editor.cancel=取消
@@ -1613,8 +1613,8 @@ issues.close=关闭工单
issues.comment_pull_merged_at=已合并提交 %[1]s 到 %[2]s %[3]s
issues.comment_manually_pull_merged_at=手动合并提交 %[1]s 到 %[2]s %[3]s
issues.close_comment_issue=评论并关闭
-issues.reopen_issue=重新开启
-issues.reopen_comment_issue=评论并重新开启
+issues.reopen_issue=重新打开
+issues.reopen_comment_issue=评论并重新打开
issues.create_comment=评论
issues.comment.blocked_user=无法创建或编辑评论,因为您已被仓库所有者或工单创建者屏蔽。
issues.closed_at=`于 %[2]s 关闭此工单`
@@ -1650,19 +1650,19 @@ issues.edit=编辑
issues.cancel=取消
issues.save=保存
issues.label_title=标签名称
-issues.label_description=标签描述
-issues.label_color=标签颜色
+issues.label_description=描述
+issues.label_color=颜色
issues.label_color_invalid=无效的颜色
-issues.label_exclusive=互斥标签
+issues.label_exclusive=互斥
issues.label_archive=归档标签
-issues.label_archived_filter=显示存档标签
-issues.label_archive_tooltip=在标签搜索时,默认情况下存档标签将被排除在外。
+issues.label_archived_filter=显示已归档标签
+issues.label_archive_tooltip=在标签搜索时,默认情况下已归档标签将被排除在外。
issues.label_exclusive_desc=命名标签为 scope/item
以使其与其他以 scope/
开头的标签互斥。
issues.label_exclusive_warning=在编辑工单或合并请求的标签时,任何冲突的范围标签都将被删除。
issues.label_exclusive_order=排序顺序
issues.label_exclusive_order_tooltip=在同一个范围内的互斥标签将按照这个数字进行排序
issues.label_count=%d 个标签
-issues.label_open_issues=%d 个开启的工单
+issues.label_open_issues=%d 个已打开工单/合并请求
issues.label_edit=编辑
issues.label_delete=删除
issues.label_modify=编辑标签
@@ -1993,7 +1993,7 @@ milestones.new=新的里程碑
milestones.closed=于 %s关闭
milestones.update_ago=已更新 %s
milestones.no_due_date=暂无截止日期
-milestones.open=开启
+milestones.open=打开
milestones.close=关闭
milestones.new_subheader=里程碑可以帮助您组织工单并跟踪其进度。
milestones.completeness=%d%% 已完成
@@ -2068,22 +2068,22 @@ activity=活动
activity.navbar.pulse=活动
activity.navbar.code_frequency=代码频率
activity.navbar.contributors=贡献者
-activity.navbar.recent_commits=最近的提交
+activity.navbar.recent_commits=最近提交
activity.period.filter_label=周期:
activity.period.daily=1 天
activity.period.halfweekly=3 天
-activity.period.weekly=1周
-activity.period.monthly=1 个月
-activity.period.quarterly=3个月
-activity.period.semiyearly=6 个月
-activity.period.yearly=1年
+activity.period.weekly=1 周
+activity.period.monthly=1 月
+activity.period.quarterly=3 月
+activity.period.semiyearly=6 月
+activity.period.yearly=1 年
activity.overview=概览
activity.active_prs_count_1=%d 个合并请求
activity.active_prs_count_n=%d 个合并请求
-activity.merged_prs_count_1=合并请求
-activity.merged_prs_count_n=合并请求
-activity.opened_prs_count_1=新合并请求
-activity.opened_prs_count_n=新合并请求
+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 个合并请求
@@ -2101,8 +2101,8 @@ activity.title.issues_n=%d 张工单
activity.title.issues_closed_from=%s 从 %s 关闭
activity.title.issues_created_by=%[2]s 创建了 %[1]s
activity.closed_issue_label=已关闭
-activity.new_issues_count_1=创建工单
-activity.new_issues_count_n=创建工单
+activity.new_issues_count_1=已打开的工单
+activity.new_issues_count_n=已打开的工单
activity.new_issue_label=打开的
activity.title.unresolved_conv_1=%d 未解决的会话
activity.title.unresolved_conv_n=%d 未解决的会话
@@ -2113,11 +2113,11 @@ activity.title.releases_n=%d 个发布
activity.title.releases_published_by=%[2]s 发布了 %[1]s
activity.published_release_label=已发布
activity.no_git_activity=在此期间没有任何提交活动。
-activity.git_stats_exclude_merges=排除合并,
+activity.git_stats_exclude_merges=排除合并后,
activity.git_stats_author_1=%d 位作者
activity.git_stats_author_n=%d 位作者
-activity.git_stats_pushed_1=已经推送
-activity.git_stats_pushed_n=已经推送
+activity.git_stats_pushed_1=已推送
+activity.git_stats_pushed_n=已推送
activity.git_stats_commit_1=%d 次提交
activity.git_stats_commit_n=%d 次提交
activity.git_stats_push_to_branch=到 %s 和
@@ -2125,14 +2125,14 @@ activity.git_stats_push_to_all_branches=到所有分支。
activity.git_stats_on_default_branch=在 %s 上,
activity.git_stats_file_1=%d 个文件
activity.git_stats_file_n=%d 个文件
-activity.git_stats_files_changed_1=已经改变
-activity.git_stats_files_changed_n=已经改变
-activity.git_stats_additions=而且
-activity.git_stats_addition_1=新增 %d 行
-activity.git_stats_addition_n=新增 %d 行
+activity.git_stats_files_changed_1=已修改
+activity.git_stats_files_changed_n=已修改
+activity.git_stats_additions=并且已有
+activity.git_stats_addition_1=%d 行新增
+activity.git_stats_addition_n=%d 行新增
activity.git_stats_and_deletions=和
-activity.git_stats_deletion_1=删除 %d 行
-activity.git_stats_deletion_n=删除 %d 行
+activity.git_stats_deletion_1=%d 行删除
+activity.git_stats_deletion_n=%d 行删除
contributors.contribution_type.filter_label=贡献类型:
contributors.contribution_type.commits=提交
@@ -2211,7 +2211,7 @@ settings.tracker_issue_style=外部工单管理系统的编号格式
settings.tracker_issue_style.numeric=纯数字形式
settings.tracker_issue_style.alphanumeric=英文字母数字组合形式
settings.tracker_issue_style.regexp=正则表达式
-settings.tracker_issue_style.regexp_pattern=正则表达式模式
+settings.tracker_issue_style.regexp_pattern=正则表达式
settings.tracker_issue_style.regexp_pattern_desc=第一个被捕获的组将取代 {index}
。
settings.tracker_url_format_desc=使用占位符 {user}
, {repo}
和 {index}
作为用户名、仓库名和工单索引。
settings.enable_timetracker=启用时间跟踪
@@ -2221,7 +2221,7 @@ settings.pulls.ignore_whitespace=忽略空白冲突
settings.pulls.enable_autodetect_manual_merge=启用自动检测手动合并 (注意:在某些特殊情况下可能发生错误判断)
settings.pulls.allow_rebase_update=允许通过变基更新合并请求分支
settings.pulls.default_delete_branch_after_merge=默认合并后删除合并请求分支
-settings.pulls.default_allow_edits_from_maintainers=默认开启允许维护者编辑
+settings.pulls.default_allow_edits_from_maintainers=默认允许维护者编辑
settings.releases_desc=启用仓库发布
settings.packages_desc=启用仓库软件包注册中心
settings.projects_desc=启用项目
@@ -2386,7 +2386,7 @@ 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=合并请求已贴上标签
+settings.event_pull_request_label=合并请求增删标签
settings.event_pull_request_label_desc=合并请求的标签已更新或清除。
settings.event_pull_request_milestone=合并请求已记录于里程碑中
settings.event_pull_request_milestone_desc=合并请求已记录或取消记录于里程碑中。
@@ -2406,7 +2406,7 @@ settings.event_workflow_job_desc=Gitea 工作流队列中、等待中、正在
settings.event_package=软件包
settings.event_package_desc=软件包在仓库中已创建或删除。
settings.branch_filter=分支过滤
-settings.branch_filter_desc=推送、创建,删除分支事件的分支白名单,使用 glob 模式匹配指定。若为空或 *
,则将报告所有分支的事件。语法文档见 %[2]s。示例:master
,{master,release*}
。
+settings.branch_filter_desc=推送、创建,删除分支事件的分支白名单,使用 glob 表达式匹配指定。若为空或 *
,则会报告所有分支的事件。语法文档见 %[2]s。示例:master
,{master,release*}
。
settings.authorization_header=授权标头
settings.authorization_header_desc=当存在时将被作为授权标头包含在内。例如: %s。
settings.active=激活
@@ -2486,13 +2486,13 @@ settings.protect_merge_whitelist_committers_desc=仅允许白名单用户或团
settings.protect_merge_whitelist_users=合并白名单用户:
settings.protect_merge_whitelist_teams=合并白名单团队:
settings.protect_check_status_contexts=启用状态检查
-settings.protect_status_check_patterns=状态检查模式:
-settings.protect_status_check_patterns_desc=输入模式,指定哪些状态检查必须通过,才能将分支合并到符合此规则的分支中去。每一行指定一个模式,模式不能为空。
+settings.protect_status_check_patterns=状态检查表达式:
+settings.protect_status_check_patterns_desc=输入表达式以指定在分支合并到匹配此规则的分支之前必须通过哪些状态检查。每一行指定一个表达式且表达式不能为空。
settings.protect_check_status_contexts_desc=要求状态检查通过才能合并。如果启用,提交必须先推送到另一个分支,然后再合并或推送到匹配这些保护规则的分支。如果没有选择具体的状态检查上下文,则所有的状态检查都通过才能合并。
settings.protect_check_status_contexts_list=此仓库上周进行过的状态检查
settings.protect_status_check_matched=匹配
-settings.protect_invalid_status_check_pattern=无效的状态检查规则:「%s」。
-settings.protect_no_valid_status_check_patterns=没有有效的状态检查规则。
+settings.protect_invalid_status_check_pattern=无效的状态检查表达式:「%s」。
+settings.protect_no_valid_status_check_patterns=没有有效的状态检查表达式。
settings.protect_required_approvals=所需的批准:
settings.protect_required_approvals_desc=只允许合并有足够审核的合并请求。要求的审核必须来自白名单或者有权限的用户或团队。
settings.protect_approvals_whitelist_enabled=仅列入白名单的用户或团队才可批准
@@ -2505,13 +2505,13 @@ settings.ignore_stale_approvals=忽略过期批准
settings.ignore_stale_approvals_desc=对旧提交(过期审核)的批准将不计入 PR 的批准数。如果过期审查已被驳回,则与此无关。
settings.require_signed_commits=需要签名提交
settings.require_signed_commits_desc=拒绝推送未签名或无法验证的提交到分支
-settings.protect_branch_name_pattern=受保护的分支名称模式
-settings.protect_branch_name_pattern_desc=分支保护的名称匹配规则。语法请参阅 文档 。如:main, release/**
-settings.protect_patterns=规则
-settings.protect_protected_file_patterns=受保护的文件模式(使用分号 ';' 分隔):
-settings.protect_protected_file_patterns_desc=即使用户有权添加、编辑或删除此分支中的文件,也不允许直接更改受保护的文件。 可以使用分号 (';') 分隔多个模式。 见%[2]s文档了解模式语法。例如: .drone.yml
, /docs/**/*.txt
-settings.protect_unprotected_file_patterns=不受保护的文件模式(使用分号 ';' 分隔):
-settings.protect_unprotected_file_patterns_desc=如果用户有写权限,则允许直接更改的不受保护的文件,以绕过推送限制。可以使用分号分隔多个模式 (';')。 见 %[2]s 文档了解模式语法。例如: .drone.yml
, /docs/**/*.txt
+settings.protect_branch_name_pattern=受保护的分支名称表达式
+settings.protect_branch_name_pattern_desc=分支保护的名称匹配表达式。语法请参阅 文档 。如:main, release/**
+settings.protect_patterns=表达式
+settings.protect_protected_file_patterns=受保护的文件表达式(使用分号「;」分隔):
+settings.protect_protected_file_patterns_desc=即使用户有权添加、编辑或删除此分支中的文件,也不允许直接更改受保护的文件。 可以使用分号「;」分隔多个表达式。 见%[2]s文档了解表达式语法。例如: .drone.yml
, /docs/**/*.txt
。
+settings.protect_unprotected_file_patterns=不受保护的文件表达式(使用分号「;」分隔):
+settings.protect_unprotected_file_patterns_desc=如果用户有写权限,则允许直接更改的不受保护的文件,以绕过推送限制。可以使用分号分隔多个表达式「;」。 见 %[2]s 文档了解表达式语法。例如: .drone.yml
, /docs/**/*.txt
。
settings.add_protected_branch=启用保护
settings.delete_protected_branch=禁用保护
settings.update_protect_branch_success=分支保护规则「%s」更新成功。
@@ -2537,15 +2537,15 @@ settings.protected_branch_required_rule_name=必须填写规则名称
settings.protected_branch_duplicate_rule_name=规则名称已存在
settings.protected_branch_required_approvals_min=所需的审批数不能为负数。
settings.tags=标签
-settings.tags.protection=Git 标签保护
-settings.tags.protection.pattern=Git 标签表达式
+settings.tags.protection=标签保护
+settings.tags.protection.pattern=标签表达式
settings.tags.protection.allowed=允许列表
settings.tags.protection.allowed.users=允许的账号
settings.tags.protection.allowed.teams=允许的团队
settings.tags.protection.allowed.noone=无
-settings.tags.protection.create=保护 Git 标签
-settings.tags.protection.none=没有受保护的 Git 标签。
-settings.tags.protection.pattern.description=您可以使用单个名称或 glob 模式匹配或正则表达式来匹配多个标签。了解详情请访问 保护 Git 标签指南。
+settings.tags.protection.create=保护标签
+settings.tags.protection.none=没有受保护的标签。
+settings.tags.protection.pattern.description=您可以使用单个名称或 glob 表达式匹配或正则表达式来匹配多个标签。了解详情请访问 保护标签指南。
settings.bot_token=Bot 令牌
settings.chat_id=聊天 ID
settings.thread_id=线程 ID
@@ -2571,7 +2571,7 @@ settings.archive.success=仓库已成功归档。
settings.archive.error=仓库在归档时出现异常。请通过日志获取详细信息。
settings.archive.error_ismirror=请不要对镜像仓库归档,谢谢!
settings.archive.branchsettings_unavailable=已归档仓库无法进行分支设置。
-settings.archive.tagsettings_unavailable=已归档仓库的 Git 标签设置不可用。
+settings.archive.tagsettings_unavailable=已归档仓库的标签设置不可用。
settings.archive.mirrors_unavailable=如果仓库已归档,镜像将不可用。
settings.unarchive.button=撤销仓库归档
settings.unarchive.header=撤销此仓库归档
@@ -2672,7 +2672,7 @@ diff.submodule_updated=子模块 %[1]s 已更新:%[2]s
releases.desc=跟踪项目版本和下载。
release.releases=发布
release.detail=发布详情
-release.tags=Git 标签
+release.tags=标签
release.new_release=发布新版
release.draft=草稿
release.prerelease=预发布
@@ -2701,16 +2701,16 @@ release.publish=发布版本
release.save_draft=保存草稿
release.edit_release=保存此次发布
release.delete_release=删除发布
-release.delete_tag=删除 Git 标签
+release.delete_tag=删除标签
release.deletion=删除发布
-release.deletion_desc=删除版本发布只会从 Gitea 中移除。这不会影响 Git 的标签以及您仓库的内容和历史。是否继续?
+release.deletion_desc=删除发布只会从 Gitea 中移除发布。这不会影响 Git 的标签以及您仓库的内容和历史。是否继续?
release.deletion_success=该发布已删除。
-release.deletion_tag_desc=将从仓库中删除此 Git 标签。仓库内容和历史记录保持不变。继续吗?
-release.deletion_tag_success=该 Git 标签已删除。
+release.deletion_tag_desc=将从仓库中删除此标签。仓库内容和历史记录保持不变。继续吗?
+release.deletion_tag_success=该标签已删除。
release.tag_name_already_exist=使用此标签名称的发布已经存在。
release.tag_name_invalid=标签名称无效。
-release.tag_name_protected=Git 标签名称已受保护。
-release.tag_already_exist=此 Git 标签名称已存在。
+release.tag_name_protected=标签名已受保护。
+release.tag_already_exist=此标签名已存在。
release.downloads=下载附件
release.download_count=下载:%s
release.add_tag_msg=使用发布的标题和内容作为标签消息。
@@ -2809,7 +2809,7 @@ team_unit_desc=允许访问仓库单元
team_unit_disabled=(已禁用)
form.name_reserved=组织名称「%s」是保留的。
-form.name_pattern_not_allowed=仓库名称中不允许使用「%s」。
+form.name_pattern_not_allowed=组织名中不允许使用「%s」格式。
form.create_org_not_allowed=此账号禁止创建组织
settings=组织设置
@@ -3305,7 +3305,7 @@ config.db_type=类型
config.db_host=主机
config.db_name=数据库名称
config.db_user=用户名
-config.db_schema=架构模式
+config.db_schema=架构
config.db_ssl_mode=SSL
config.db_path=数据库路径
@@ -3476,10 +3476,10 @@ rename_repo=重命名仓库 %[1]s
为 %[3]s
commit_repo=推送到了仓库 %[4]s 的 %[3]s 分支
create_issue=`创建了工单 %[3]s#%[2]s`
close_issue=`关闭了工单 %[3]s#%[2]s`
-reopen_issue=`重新开启了工单 %[3]s#%[2]s`
+reopen_issue=`重新打开了工单 %[3]s#%[2]s`
create_pull_request=`创建了合并请求 %[3]s#%[2]s`
close_pull_request=`关闭了合并请求 %[3]s#%[2]s`
-reopen_pull_request=`重新开启了合并请求 %[3]s#%[2]s`
+reopen_pull_request=`重新打开了合并请求 %[3]s#%[2]s`
comment_issue=`评论了工单 %[3]s#%[2]s`
comment_pull=`评论了合并请求 %[3]s#%[2]s`
merge_pull_request=`合并了合并请求 %[3]s#%[2]s`
@@ -3704,7 +3704,7 @@ owner.settings.cleanuprules.preview=清理规则预览
owner.settings.cleanuprules.preview.overview=%d 个软件包计划被删除。
owner.settings.cleanuprules.preview.none=清理规则与任何软件包都不匹配。
owner.settings.cleanuprules.enabled=启用
-owner.settings.cleanuprules.pattern_full_match=应用规则到完整软件包名称
+owner.settings.cleanuprules.pattern_full_match=应用表达式到完整软件包名称
owner.settings.cleanuprules.keep.title=与这些规则相匹配的版本即使与下面的删除规则相匹配,也将予以保留。
owner.settings.cleanuprules.keep.count=保留最新的
owner.settings.cleanuprules.keep.count.1=每个软件包1个版本
diff --git a/package-lock.json b/package-lock.json
index 8a2f3e0db7..59ce5b33e0 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -117,7 +117,7 @@
"vue-tsc": "2.2.10"
},
"engines": {
- "node": ">= 18.0.0"
+ "node": ">= 20.0.0"
}
},
"node_modules/@alloc/quick-lru": {
diff --git a/package.json b/package.json
index 96ade30f37..4faf34900a 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"type": "module",
"engines": {
- "node": ">= 18.0.0"
+ "node": ">= 20.0.0"
},
"dependencies": {
"@citation-js/core": "0.7.18",
diff --git a/routers/api/packages/container/container.go b/routers/api/packages/container/container.go
index 53f1f130f8..2316657498 100644
--- a/routers/api/packages/container/container.go
+++ b/routers/api/packages/container/container.go
@@ -313,13 +313,12 @@ func InitiateUploadBlob(ctx *context.Context) {
setResponseHeaders(ctx.Resp, &containerHeaders{
Location: fmt.Sprintf("/v2/%s/%s/blobs/uploads/%s", ctx.Package.Owner.LowerName, image, upload.ID),
- Range: "0-0",
UploadUUID: upload.ID,
Status: http.StatusAccepted,
})
}
-// https://docs.docker.com/registry/spec/api/#get-blob-upload
+// https://github.com/opencontainers/distribution-spec/blob/main/spec.md#pushing-a-blob-in-chunks
func GetUploadBlob(ctx *context.Context) {
uuid := ctx.PathParam("uuid")
@@ -333,13 +332,18 @@ func GetUploadBlob(ctx *context.Context) {
return
}
- setResponseHeaders(ctx.Resp, &containerHeaders{
- Range: fmt.Sprintf("0-%d", upload.BytesReceived),
+ // FIXME: undefined behavior when the uploaded content is empty: https://github.com/opencontainers/distribution-spec/issues/578
+ respHeaders := &containerHeaders{
UploadUUID: upload.ID,
Status: http.StatusNoContent,
- })
+ }
+ if upload.BytesReceived > 0 {
+ respHeaders.Range = fmt.Sprintf("0-%d", upload.BytesReceived-1)
+ }
+ setResponseHeaders(ctx.Resp, respHeaders)
}
+// https://github.com/opencontainers/distribution-spec/blob/main/spec.md#single-post
// https://github.com/opencontainers/distribution-spec/blob/main/spec.md#pushing-a-blob-in-chunks
func UploadBlob(ctx *context.Context) {
image := ctx.PathParam("image")
@@ -377,12 +381,15 @@ func UploadBlob(ctx *context.Context) {
return
}
- setResponseHeaders(ctx.Resp, &containerHeaders{
+ respHeaders := &containerHeaders{
Location: fmt.Sprintf("/v2/%s/%s/blobs/uploads/%s", ctx.Package.Owner.LowerName, image, uploader.ID),
- Range: fmt.Sprintf("0-%d", uploader.Size()-1),
UploadUUID: uploader.ID,
Status: http.StatusAccepted,
- })
+ }
+ if contentRange != "" {
+ respHeaders.Range = fmt.Sprintf("0-%d", uploader.Size()-1)
+ }
+ setResponseHeaders(ctx.Resp, respHeaders)
}
// https://github.com/opencontainers/distribution-spec/blob/main/spec.md#pushing-a-blob-in-chunks
diff --git a/routers/web/misc/misc.go b/routers/web/misc/misc.go
index d42afafe9e..59b97c1717 100644
--- a/routers/web/misc/misc.go
+++ b/routers/web/misc/misc.go
@@ -20,7 +20,7 @@ func SSHInfo(rw http.ResponseWriter, req *http.Request) {
return
}
rw.Header().Set("content-type", "text/json;charset=UTF-8")
- _, err := rw.Write([]byte(`{"type":"gitea","version":1}`))
+ _, err := rw.Write([]byte(`{"type":"agit","version":1}`))
if err != nil {
log.Error("fail to write result: err: %v", err)
rw.WriteHeader(http.StatusInternalServerError)
diff --git a/routers/web/repo/view_file.go b/routers/web/repo/view_file.go
index 3df6051975..f43433fb0d 100644
--- a/routers/web/repo/view_file.go
+++ b/routers/web/repo/view_file.go
@@ -140,13 +140,6 @@ func prepareToRenderFile(ctx *context.Context, entry *git.TreeEntry) {
ctx.Data["LFSLockHint"] = ctx.Tr("repo.editor.this_file_locked")
}
- // Assume file is not editable first.
- if fInfo.isLFSFile {
- ctx.Data["EditFileTooltip"] = ctx.Tr("repo.editor.cannot_edit_lfs_files")
- } else if !isRepresentableAsText {
- ctx.Data["EditFileTooltip"] = ctx.Tr("repo.editor.cannot_edit_non_text_files")
- }
-
// read all needed attributes which will be used later
// there should be no performance different between reading 2 or 4 here
attrsMap, err := attribute.CheckAttributes(ctx, ctx.Repo.GitRepo, ctx.Repo.CommitID, attribute.CheckAttributeOpts{
@@ -243,21 +236,6 @@ func prepareToRenderFile(ctx *context.Context, entry *git.TreeEntry) {
ctx.Data["FileContent"] = fileContent
ctx.Data["LineEscapeStatus"] = statuses
}
- if !fInfo.isLFSFile {
- if ctx.Repo.CanEnableEditor(ctx, ctx.Doer) {
- if lfsLock != nil && lfsLock.OwnerID != ctx.Doer.ID {
- ctx.Data["CanEditFile"] = false
- ctx.Data["EditFileTooltip"] = ctx.Tr("repo.editor.this_file_locked")
- } else {
- ctx.Data["CanEditFile"] = true
- ctx.Data["EditFileTooltip"] = ctx.Tr("repo.editor.edit_this_file")
- }
- } else if !ctx.Repo.RefFullName.IsBranch() {
- ctx.Data["EditFileTooltip"] = ctx.Tr("repo.editor.must_be_on_a_branch")
- } else if !ctx.Repo.CanWriteToBranch(ctx, ctx.Doer, ctx.Repo.BranchName) {
- ctx.Data["EditFileTooltip"] = ctx.Tr("repo.editor.fork_before_edit")
- }
- }
case fInfo.st.IsPDF():
ctx.Data["IsPDFFile"] = true
@@ -307,17 +285,49 @@ func prepareToRenderFile(ctx *context.Context, entry *git.TreeEntry) {
}
}
- if ctx.Repo.CanEnableEditor(ctx, ctx.Doer) {
- if lfsLock != nil && lfsLock.OwnerID != ctx.Doer.ID {
- ctx.Data["CanDeleteFile"] = false
- ctx.Data["DeleteFileTooltip"] = ctx.Tr("repo.editor.this_file_locked")
- } else {
- ctx.Data["CanDeleteFile"] = true
- ctx.Data["DeleteFileTooltip"] = ctx.Tr("repo.editor.delete_this_file")
- }
- } else if !ctx.Repo.RefFullName.IsBranch() {
- ctx.Data["DeleteFileTooltip"] = ctx.Tr("repo.editor.must_be_on_a_branch")
- } else if !ctx.Repo.CanWriteToBranch(ctx, ctx.Doer, ctx.Repo.BranchName) {
- ctx.Data["DeleteFileTooltip"] = ctx.Tr("repo.editor.must_have_write_access")
- }
+ prepareToRenderButtons(ctx, fInfo.isLFSFile, isRepresentableAsText, lfsLock)
+}
+
+func prepareToRenderButtons(ctx *context.Context, isLFSFile, isRepresentableAsText bool, lfsLock *git_model.LFSLock) {
+ // archived or mirror repository, the buttons should not be shown
+ if ctx.Repo.Repository.IsArchived || !ctx.Repo.Repository.CanEnableEditor() {
+ return
+ }
+
+ // The buttons should not be shown if it's not a branch
+ if !ctx.Repo.RefFullName.IsBranch() {
+ ctx.Data["EditFileTooltip"] = ctx.Tr("repo.editor.must_be_on_a_branch")
+ ctx.Data["DeleteFileTooltip"] = ctx.Tr("repo.editor.must_be_on_a_branch")
+ return
+ }
+
+ if isLFSFile {
+ ctx.Data["EditFileTooltip"] = ctx.Tr("repo.editor.cannot_edit_lfs_files")
+ } else if !isRepresentableAsText {
+ ctx.Data["EditFileTooltip"] = ctx.Tr("repo.editor.cannot_edit_non_text_files")
+ }
+
+ if !ctx.Repo.CanWriteToBranch(ctx, ctx.Doer, ctx.Repo.BranchName) {
+ if !isLFSFile { // lfs file cannot be edited after fork
+ ctx.Data["EditFileTooltip"] = ctx.Tr("repo.editor.fork_before_edit")
+ }
+ ctx.Data["DeleteFileTooltip"] = ctx.Tr("repo.editor.must_have_write_access")
+ return
+ }
+
+ // it's a lfs file and the user is not the owner of the lock
+ if lfsLock != nil && lfsLock.OwnerID != ctx.Doer.ID {
+ ctx.Data["CanEditFile"] = false
+ ctx.Data["EditFileTooltip"] = ctx.Tr("repo.editor.this_file_locked")
+ ctx.Data["CanDeleteFile"] = false
+ ctx.Data["DeleteFileTooltip"] = ctx.Tr("repo.editor.this_file_locked")
+ return
+ }
+
+ if !isLFSFile { // lfs file cannot be edited
+ ctx.Data["CanEditFile"] = true
+ ctx.Data["EditFileTooltip"] = ctx.Tr("repo.editor.edit_this_file")
+ }
+ ctx.Data["CanDeleteFile"] = true
+ ctx.Data["DeleteFileTooltip"] = ctx.Tr("repo.editor.delete_this_file")
}
diff --git a/services/context/repo.go b/services/context/repo.go
index dafa398dc8..32d54c88ff 100644
--- a/services/context/repo.go
+++ b/services/context/repo.go
@@ -123,7 +123,8 @@ func (r *Repository) CanCommitToBranch(ctx context.Context, doer *user_model.Use
sign, keyID, _, err := asymkey_service.SignCRUDAction(ctx, r.Repository.RepoPath(), doer, r.Repository.RepoPath(), git.BranchPrefix+r.BranchName)
- canCommit := r.CanEnableEditor(ctx, doer) && userCanPush
+ canEnableEditor := r.CanEnableEditor(ctx, doer)
+ canCommit := canEnableEditor && userCanPush
if requireSigned {
canCommit = canCommit && sign
}
@@ -139,7 +140,7 @@ func (r *Repository) CanCommitToBranch(ctx context.Context, doer *user_model.Use
return CanCommitToBranchResults{
CanCommitToBranch: canCommit,
- EditorEnabled: r.CanEnableEditor(ctx, doer),
+ EditorEnabled: canEnableEditor,
UserCanPush: userCanPush,
RequireSigned: requireSigned,
WillSign: sign,
diff --git a/tests/integration/api_packages_container_test.go b/tests/integration/api_packages_container_test.go
index 9cdd84d5ee..773a9cb8ef 100644
--- a/tests/integration/api_packages_container_test.go
+++ b/tests/integration/api_packages_container_test.go
@@ -311,7 +311,7 @@ func TestPackageContainer(t *testing.T) {
resp = MakeRequest(t, req, http.StatusNoContent)
assert.Equal(t, uuid, resp.Header().Get("Docker-Upload-Uuid"))
- assert.Equal(t, fmt.Sprintf("0-%d", len(blobContent)), resp.Header().Get("Range"))
+ assert.Equal(t, contentRange, resp.Header().Get("Range"))
pbu, err = packages_model.GetBlobUploadByID(db.DefaultContext, uuid)
assert.NoError(t, err)
@@ -342,7 +342,8 @@ func TestPackageContainer(t *testing.T) {
resp = MakeRequest(t, req, http.StatusNoContent)
assert.Equal(t, uuid, resp.Header().Get("Docker-Upload-Uuid"))
- assert.Equal(t, "0-0", resp.Header().Get("Range"))
+ // FIXME: undefined behavior when the uploaded content is empty: https://github.com/opencontainers/distribution-spec/issues/578
+ assert.Nil(t, resp.Header().Values("Range"))
req = NewRequest(t, "DELETE", setting.AppURL+uploadURL[1:]).
AddTokenAuth(userToken)
diff --git a/web_src/fomantic/build/components/dropdown.js b/web_src/fomantic/build/components/dropdown.js
index 9d0e07b33b..85530c7991 100644
--- a/web_src/fomantic/build/components/dropdown.js
+++ b/web_src/fomantic/build/components/dropdown.js
@@ -525,6 +525,7 @@ $.fn.dropdown = function(parameters) {
return true;
}
if(settings.onShow.call(element) !== false) {
+ settings.onAfterFiltered.call(element); // GITEA-PATCH: callback to correctly handle the filtered items
module.animate.show(function() {
if( module.can.click() ) {
module.bind.intent();
diff --git a/web_src/js/features/common-fetch-action.ts b/web_src/js/features/common-fetch-action.ts
index 2da481e521..a4a69540a8 100644
--- a/web_src/js/features/common-fetch-action.ts
+++ b/web_src/js/features/common-fetch-action.ts
@@ -56,8 +56,12 @@ async function fetchActionDoRequest(actionElem: HTMLElement, url: string, opt: R
actionElem.classList.remove('is-loading', 'loading-icon-2px');
}
-async function formFetchAction(formEl: HTMLFormElement, e: SubmitEvent) {
+async function onFormFetchActionSubmit(formEl: HTMLFormElement, e: SubmitEvent) {
e.preventDefault();
+ await submitFormFetchAction(formEl, submitEventSubmitter(e));
+}
+
+export async function submitFormFetchAction(formEl: HTMLFormElement, formSubmitter?: HTMLElement) {
if (formEl.classList.contains('is-loading')) return;
formEl.classList.add('is-loading');
@@ -68,7 +72,6 @@ async function formFetchAction(formEl: HTMLFormElement, e: SubmitEvent) {
const formMethod = formEl.getAttribute('method') || 'get';
const formActionUrl = formEl.getAttribute('action');
const formData = new FormData(formEl);
- const formSubmitter = submitEventSubmitter(e);
const [submitterName, submitterValue] = [formSubmitter?.getAttribute('name'), formSubmitter?.getAttribute('value')];
if (submitterName) {
formData.append(submitterName, submitterValue || '');
@@ -96,7 +99,7 @@ async function formFetchAction(formEl: HTMLFormElement, e: SubmitEvent) {
await fetchActionDoRequest(formEl, reqUrl, reqOpt);
}
-async function linkAction(el: HTMLElement, e: Event) {
+async function onLinkActionClick(el: HTMLElement, e: Event) {
// A "link-action" can post AJAX request to its "data-url"
// Then the browser is redirected to: the "redirect" in response, or "data-redirect" attribute, or current URL by reloading.
// If the "link-action" has "data-modal-confirm" attribute, a confirm modal dialog will be shown before taking action.
@@ -126,6 +129,6 @@ async function linkAction(el: HTMLElement, e: Event) {
}
export function initGlobalFetchAction() {
- addDelegatedEventListener(document, 'submit', '.form-fetch-action', formFetchAction);
- addDelegatedEventListener(document, 'click', '.link-action', linkAction);
+ addDelegatedEventListener(document, 'submit', '.form-fetch-action', onFormFetchActionSubmit);
+ addDelegatedEventListener(document, 'click', '.link-action', onLinkActionClick);
}
diff --git a/web_src/js/features/comp/LabelEdit.ts b/web_src/js/features/comp/LabelEdit.ts
index a5bb750cdb..141c5eecfe 100644
--- a/web_src/js/features/comp/LabelEdit.ts
+++ b/web_src/js/features/comp/LabelEdit.ts
@@ -1,5 +1,6 @@
import {toggleElem} from '../../utils/dom.ts';
import {fomanticQuery} from '../../modules/fomantic/base.ts';
+import {submitFormFetchAction} from '../common-fetch-action.ts';
function nameHasScope(name: string): boolean {
return /.*[^/]\/[^/].*/.test(name);
@@ -70,7 +71,7 @@ export function initCompLabelEdit(pageSelector: string) {
form.reportValidity();
return false;
}
- form.dispatchEvent(new Event('submit', {bubbles: true}));
+ submitFormFetchAction(form);
},
}).modal('show');
};