diff options
-rw-r--r-- | .devcontainer/devcontainer.json | 2 | ||||
-rw-r--r-- | .github/workflows/pull-compliance.yml | 8 | ||||
-rw-r--r-- | .github/workflows/pull-e2e-tests.yml | 2 | ||||
-rw-r--r-- | .github/workflows/release-nightly.yml | 2 | ||||
-rw-r--r-- | .github/workflows/release-tag-rc.yml | 2 | ||||
-rw-r--r-- | .github/workflows/release-tag-version.yml | 2 | ||||
-rw-r--r-- | options/locale/locale_ga-IE.ini | 1 | ||||
-rw-r--r-- | options/locale/locale_uk-UA.ini | 486 | ||||
-rw-r--r-- | options/locale/locale_zh-CN.ini | 150 | ||||
-rw-r--r-- | package-lock.json | 2 | ||||
-rw-r--r-- | package.json | 2 | ||||
-rw-r--r-- | routers/web/repo/view_file.go | 74 | ||||
-rw-r--r-- | services/context/repo.go | 5 |
13 files changed, 373 insertions, 365 deletions
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/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..e89a299b56 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=<strong>Потрібна допомога?</strong> Дивіться гід на GitHub з <a href="%s"> генерації ключів SSH</a> або виправлення <a href="%s">типових неполадок SSH</a>. -gpg_helper=<strong> Потрібна допомога? </strong> Перегляньте посібник GitHub <a href="%s"> про GPG </a>. -add_new_key=Додати SSH ключ -add_new_gpg_key=Додати GPG ключ +ssh_desc=Ці публічні ключі SSH пов'язані з вашим обліковим записом. Відповідні приватні ключі надають повний доступ до ваших сховищ. +principal_desc=Ці ідентифікатори сертифікатів SSH прив'язані до вашого облікового запису і надають повний доступ до ваших сховищ. +gpg_desc=Ці публічні ключі GPG пов'язані з вашим обліковим записом. Зберігайте свої приватні ключі в безпеці, оскільки вони дозволяють підтверджувати коміти. +ssh_helper=<strong>Потрібна допомога?</strong> Ознайомтеся з інструкцією GitHub щодо <a href="%s">створення власних ключів SSH</a> або виправлення <a href="%s">типових неполадок SSH.</a> +gpg_helper=<strong>Потрібна допомога?</strong> Перегляньте посібник GitHub <a href="%s">про GPG</a>. +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=Назва програми <strong>%s</strong> вже використовується. Будь ласка, використайте нову. 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=Ваш обліковий запис на даний час <strong>використовує</strong> двофакторну автентифікацію. -twofa_not_enrolled=Ваш обліковий запис наразі не використовує двофакторну автентифікаціїю. +twofa_is_enrolled=Ваш обліковий запис наразі <strong>використовує</strong> двофакторну автентифікацію. +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=Ця операція остаточно видалить обліковий запис користувача. Це <strong>НЕ МОЖЛИВО</strong> відмінити. -delete_with_all_comments=Ваш обліковий запис молодший за %s днів. Щоб уникнути коментарів-привидів, всі запити/PR коментрарі будуть видалені з ним. -confirm_delete_account=Підтвердження видалення -delete_account_title=Видалити цей обліковий запис +delete_account=Видалити обліковий запис +delete_prompt=Ця операція остаточно видалить ваш обліковий запис. Її <strong>НЕ МОЖЛИВО</strong> скасувати. +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=Потрібна допомога у клонуванні? Відвідайте сторінку <a target="_blank" rel="noopener" href="%s">Допомога</a>. 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=Ліцензія регулює те, що інші можуть і не можуть робити з вашим кодом. Не впевнені, що саме підходить для вашого проєкту? Дивіться <a target="_blank" rel="noopener noreferrer" href="%s">Виберіть ліцензію.</a> +license_helper=Обрати файл ліцензії. +license_helper_desc=Ліцензія визначає, що інші можуть робити з вашим кодом, а що ні. Не впевнені, яка підходить для вашого проєкту? Дивіться <a target="_blank" rel="noopener noreferrer" href="%s">Вибір ліцензії.</a> 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 для клону щоб <a target="_blank" rel="noopener noreferrer" href="%s">визначити LFS-сервер</a>. Ви також можете вказати кінцеву точку користувача, якщо дані репозиторію LFS зберігаються в іншому місці. +mirror_lfs_endpoint_desc=Синхронізація спробує використати URL-адресу клону для <a target="_blank" rel="noopener noreferrer" href="%s">визначення сервера LFS</a>. Ви також можете вказати власну кінцеву точку, якщо дані 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 віддалено, щоб <a target="_blank" rel="noopener noreferrer" href="%s">визначати LFS сервер</a>. Ви також можете вказати свою кінцеву точку, якщо дані репозиторію LFS зберігаються в іншому місці. -migrate_options_lfs_endpoint.description.local=Також підтримуються шляхи на локальному сервері. -migrate_items=Деталі міграції +migrate_options_lfs_endpoint.description=Міграція спробує використати ваш Git віддалено, щоб <a target="_blank" rel="noopener noreferrer" href="%s">визначати сервер LFS</a>. Ви також можете вказати власну кінцеву точку, якщо дані сховища 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=Перенесено з <a href="%[1]s">%[2]s</a> migrated_from_fake=Перенесено з %[1]s -migrate.migrate=Міграція з %s +migrate.migrate=Мігрувати з %s migrate.migrating=Міграція із <b>%s</b>... migrate.migrating_failed=Міграція із <b>%s</b> не вдалася. migrate.migrating_failed.error=Не вдалося перенести: %s migrate.migrating_failed_no_addr=Міграція не вдалася. -migrate.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=Зробіть коміт прямо в гілку <strong class="branch-name">%s</strong>. +editor.signoff_desc=Додати «Підписано комітером» в кінці повідомлення коміту. +editor.commit_directly_to_this_branch=Зробити коміт безпосередньо в гілку <strong class="branch-name">%s</strong>. editor.create_new_branch=Створити <strong>нову гілку</strong> для цього коміту та відкрити запит на злиття. editor.create_new_branch_np=Створити <strong>нову гілку</strong> для цього коміту. 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=Зміст файлу змінився з моменту початку редагування. <a target="_blank" rel="noopener" href="%s"> Натисніть тут </a>, щоб переглянути що було змінено, або <strong>закомітьте зміни ще раз</strong>, щоб переписати їх. 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 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=直接提交至 <strong class="branch-name">%s</strong> 分支。 editor.create_new_branch=为此提交创建一个 <strong>新的分支</strong> 并发起合并请求。 editor.create_new_branch_np=为此提交创建 <strong>新分支</strong>。 -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=`于 <a id="%[1]s" href="#%[1]s">%[2]s</a> 关闭此工单` @@ -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=命名标签为 <code>scope/item</code> 以使其与其他以 <code>scope/</code> 开头的标签互斥。 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=<strong>%d%%</strong> 已完成 @@ -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=<strong>%d</strong> 个合并请求 activity.active_prs_count_n=<strong>%d</strong> 个合并请求 -activity.merged_prs_count_1=合并请求 -activity.merged_prs_count_n=合并请求 -activity.opened_prs_count_1=新合并请求 -activity.opened_prs_count_n=新合并请求 +activity.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=第一个被捕获的组将取代 <code>{index}</code>。 settings.tracker_url_format_desc=使用占位符 <code>{user}</code>, <code>{repo}</code> 和 <code>{index}</code> 作为用户名、仓库名和工单索引。 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 模式匹配指定。若为空或 <code>*</code>,则将报告所有分支的事件。语法文档见 <a href="%[1]s">%[2]s</a>。示例:<code>master</code>,<code>{master,release*}</code>。 +settings.branch_filter_desc=推送、创建,删除分支事件的分支白名单,使用 glob 表达式匹配指定。若为空或 <code>*</code>,则会报告所有分支的事件。语法文档见 <a href="%[1]s">%[2]s</a>。示例:<code>master</code>,<code>{master,release*}</code>。 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=分支保护的名称匹配规则。语法请参阅 <a href="%s">文档</a> 。如:main, release/** -settings.protect_patterns=规则 -settings.protect_protected_file_patterns=受保护的文件模式(使用分号 ';' 分隔): -settings.protect_protected_file_patterns_desc=即使用户有权添加、编辑或删除此分支中的文件,也不允许直接更改受保护的文件。 可以使用分号 (';') 分隔多个模式。 见<a href='%[1]s'>%[2]s</a>文档了解模式语法。例如: <code>.drone.yml</code>, <code>/docs/**/*.txt</code> -settings.protect_unprotected_file_patterns=不受保护的文件模式(使用分号 ';' 分隔): -settings.protect_unprotected_file_patterns_desc=如果用户有写权限,则允许直接更改的不受保护的文件,以绕过推送限制。可以使用分号分隔多个模式 (';')。 见 <a href='%[1]s'>%[2]s</a> 文档了解模式语法。例如: <code>.drone.yml</code>, <code>/docs/**/*.txt</code> +settings.protect_branch_name_pattern=受保护的分支名称表达式 +settings.protect_branch_name_pattern_desc=分支保护的名称匹配表达式。语法请参阅 <a href="%s">文档</a> 。如:main, release/** +settings.protect_patterns=表达式 +settings.protect_protected_file_patterns=受保护的文件表达式(使用分号「;」分隔): +settings.protect_protected_file_patterns_desc=即使用户有权添加、编辑或删除此分支中的文件,也不允许直接更改受保护的文件。 可以使用分号「;」分隔多个表达式。 见<a href='%[1]s'>%[2]s</a>文档了解表达式语法。例如: <code>.drone.yml</code>, <code>/docs/**/*.txt</code>。 +settings.protect_unprotected_file_patterns=不受保护的文件表达式(使用分号「;」分隔): +settings.protect_unprotected_file_patterns_desc=如果用户有写权限,则允许直接更改的不受保护的文件,以绕过推送限制。可以使用分号分隔多个表达式「;」。 见 <a href='%[1]s'>%[2]s</a> 文档了解表达式语法。例如: <code>.drone.yml</code>, <code>/docs/**/*.txt</code>。 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 模式匹配或正则表达式来匹配多个标签。了解详情请访问 <a target="_blank" rel="noopener" href="%s">保护 Git 标签指南</a>。 +settings.tags.protection.create=保护标签 +settings.tags.protection.none=没有受保护的标签。 +settings.tags.protection.pattern.description=您可以使用单个名称或 glob 表达式匹配或正则表达式来匹配多个标签。了解详情请访问 <a target="_blank" rel="noopener" href="%s">保护标签指南</a>。 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=重命名仓库 <code>%[1]s</code> 为 <a href="%[2]s">%[3]s</a> commit_repo=推送到了仓库 <a href="%[1]s">%[4]s</a> 的 <a href="%[2]s">%[3]s</a> 分支 create_issue=`创建了工单 <a href="%[1]s">%[3]s#%[2]s</a>` close_issue=`关闭了工单 <a href="%[1]s">%[3]s#%[2]s</a>` -reopen_issue=`重新开启了工单 <a href="%[1]s">%[3]s#%[2]s</a>` +reopen_issue=`重新打开了工单 <a href="%[1]s">%[3]s#%[2]s</a>` create_pull_request=`创建了合并请求 <a href="%[1]s">%[3]s#%[2]s</a>` close_pull_request=`关闭了合并请求 <a href="%[1]s">%[3]s#%[2]s</a>` -reopen_pull_request=`重新开启了合并请求 <a href="%[1]s">%[3]s#%[2]s</a>` +reopen_pull_request=`重新打开了合并请求 <a href="%[1]s">%[3]s#%[2]s</a>` comment_issue=`评论了工单 <a href="%[1]s">%[3]s#%[2]s</a>` comment_pull=`评论了合并请求 <a href="%[1]s">%[3]s#%[2]s</a>` merge_pull_request=`合并了合并请求 <a href="%[1]s">%[3]s#%[2]s</a>` @@ -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/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() { + 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") - } else if !ctx.Repo.CanWriteToBranch(ctx, ctx.Doer, ctx.Repo.BranchName) { + 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, |