Compare commits

...

3 Commits

Author SHA1 Message Date
GiteaBot
a1dfffd723 [skip ci] Updated translations via Crowdin 2023-12-27 00:23:45 +00:00
wxiaoguang
d68b9237bf
Use known issue IID to generate new PR index number when migrating from GitLab (#28616)
Fix #13884
2023-12-26 17:57:25 +00:00
Volodymyr Stelmashchuk
0e9c988373
Update repo-mirror.en-us.md (#28612)
Add small changes to the doc. The workflow scope require for push code
to github mirror in case the project use the github action compatibility
ui.
2023-12-27 00:36:11 +08:00
5 changed files with 95 additions and 13 deletions

View File

@ -58,7 +58,7 @@ The repository now gets mirrored periodically to the remote repository. You can
To set up a mirror from Gitea to GitHub, you need to follow these steps: To set up a mirror from Gitea to GitHub, you need to follow these steps:
1. Create a [GitHub personal access token](https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token) with the *public_repo* box checked. 1. Create a [GitHub personal access token](https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token) with the *public_repo* box checked. Also check the **workflow** checkbox in case your repo using act for continuous integration.
2. Create a repository with that name on GitHub. Unlike Gitea, GitHub does not support creating repositories by pushing to the remote. You can also use an existing remote repo if it has the same commit history as your Gitea repo. 2. Create a repository with that name on GitHub. Unlike Gitea, GitHub does not support creating repositories by pushing to the remote. You can also use an existing remote repo if it has the same commit history as your Gitea repo.
3. In the settings of your Gitea repo, fill in the **Git Remote Repository URL**: `https://github.com/<your_github_group>/<your_github_project>.git`. 3. In the settings of your Gitea repo, fill in the **Git Remote Repository URL**: `https://github.com/<your_github_group>/<your_github_project>.git`.
4. Fill in the **Authorization** fields with your GitHub username and the personal access token as **Password**. 4. Fill in the **Authorization** fields with your GitHub username and the personal access token as **Password**.

View File

@ -3514,6 +3514,7 @@ runs.commit=Révision
runs.scheduled=Planifié runs.scheduled=Planifié
runs.pushed_by=soumis par runs.pushed_by=soumis par
runs.invalid_workflow_helper=La configuration du flux de travail est invalide. Veuillez vérifier votre fichier %s. runs.invalid_workflow_helper=La configuration du flux de travail est invalide. Veuillez vérifier votre fichier %s.
runs.no_matching_online_runner_helper=Aucun exécuteur en ligne correspondant au libellé %s
runs.actor=Acteur runs.actor=Acteur
runs.status=Statut runs.status=Statut
runs.actors_no_select=Tous les acteurs runs.actors_no_select=Tous les acteurs

View File

@ -359,6 +359,7 @@ disable_register_prompt=Извините, возможность регистр
disable_register_mail=Подтверждение регистрации по электронной почте отключено. disable_register_mail=Подтверждение регистрации по электронной почте отключено.
manual_activation_only=Обратитесь к администратору сайта для завершения активации. manual_activation_only=Обратитесь к администратору сайта для завершения активации.
remember_me=Запомнить это устройство remember_me=Запомнить это устройство
remember_me.compromised=Токен входа более не действителен, что может указывать на компрометацию учётной записи. Пожалуйста, проверьте свою учётную запись на необычные действия.
forgot_password_title=Восстановить пароль forgot_password_title=Восстановить пароль
forgot_password=Забыли пароль? forgot_password=Забыли пароль?
sign_up_now=Нужен аккаунт? Зарегистрируйтесь. sign_up_now=Нужен аккаунт? Зарегистрируйтесь.
@ -704,6 +705,7 @@ requires_activation=Требуется активация
primary_email=Сделать основным primary_email=Сделать основным
activate_email=Отправить активацию activate_email=Отправить активацию
activations_pending=Ожидает активации activations_pending=Ожидает активации
can_not_add_email_activations_pending=Ожидается активация. Если хотите добавить новый почтовый ящик, попробуйте еще раз через несколько минут.
delete_email=Удалить delete_email=Удалить
email_deletion=Удалить адрес электронной почты email_deletion=Удалить адрес электронной почты
email_deletion_desc=Адрес электронной почты и вся связанная с ним информация будет удалена из вашего аккаунта. Коммиты, сделанные от имени этого адреса электронной почты, не будут изменены. Продолжить? email_deletion_desc=Адрес электронной почты и вся связанная с ним информация будет удалена из вашего аккаунта. Коммиты, сделанные от имени этого адреса электронной почты, не будут изменены. Продолжить?
@ -845,6 +847,7 @@ oauth2_client_id=ID клиента
oauth2_client_secret=Клиентский ключ oauth2_client_secret=Клиентский ключ
oauth2_regenerate_secret=Сгенерировать новый ключ oauth2_regenerate_secret=Сгенерировать новый ключ
oauth2_regenerate_secret_hint=Потеряли свой ключ? oauth2_regenerate_secret_hint=Потеряли свой ключ?
oauth2_client_secret_hint=Пожалуйста, сохраните секрет, так как после закрытия или обновления страницы он больше не будет показан.
oauth2_application_edit=Изменить oauth2_application_edit=Изменить
oauth2_application_create_description=Приложения OAuth2 предоставляет стороннему приложению доступ к учётным записям пользователей данного сервиса. oauth2_application_create_description=Приложения OAuth2 предоставляет стороннему приложению доступ к учётным записям пользователей данного сервиса.
oauth2_application_remove_description=Удаление приложения OAuth2 приведёт к отмене его доступа к авторизованным учётным записям пользователей в данном экземпляре. Продолжить? oauth2_application_remove_description=Удаление приложения OAuth2 приведёт к отмене его доступа к авторизованным учётным записям пользователей в данном экземпляре. Продолжить?
@ -857,6 +860,7 @@ revoke_oauth2_grant_description=Отзыв доступа у этого стор
revoke_oauth2_grant_success=Доступ был успешно отозван. revoke_oauth2_grant_success=Доступ был успешно отозван.
twofa_desc=Двухфакторная аутентификация повышает уровень безопасности вашей учётной записи. twofa_desc=Двухфакторная аутентификация повышает уровень безопасности вашей учётной записи.
twofa_recovery_tip=В случае утраты устройства можно использовать одноразовый ключ восстановления для получения доступа к учётной записи.
twofa_is_enrolled=Ваша учётная запись в настоящее время <strong>использует</strong> двухфакторную аутентификацию. twofa_is_enrolled=Ваша учётная запись в настоящее время <strong>использует</strong> двухфакторную аутентификацию.
twofa_not_enrolled=Ваша учётная запись в настоящее время не использует двухфакторную аутентификацию. twofa_not_enrolled=Ваша учётная запись в настоящее время не использует двухфакторную аутентификацию.
twofa_disable=Отключить двухфакторную аутентификацию twofa_disable=Отключить двухфакторную аутентификацию
@ -878,6 +882,7 @@ webauthn_register_key=Добавить ключ безопасности
webauthn_nickname=Имя пользователя webauthn_nickname=Имя пользователя
webauthn_delete_key=Удалить ключ безопасности webauthn_delete_key=Удалить ключ безопасности
webauthn_delete_key_desc=Если вы удалите ключ безопасности, вы больше не сможете войти с его помощью. Продолжить? webauthn_delete_key_desc=Если вы удалите ключ безопасности, вы больше не сможете войти с его помощью. Продолжить?
webauthn_key_loss_warning=В случае утраты ключей безопасности вы потеряете доступ к учётной записи.
manage_account_links=Управление привязанными аккаунтами manage_account_links=Управление привязанными аккаунтами
manage_account_links_desc=Эти внешние аккаунты привязаны к вашему аккаунту Gitea. manage_account_links_desc=Эти внешние аккаунты привязаны к вашему аккаунту Gitea.
@ -999,6 +1004,8 @@ delete_preexisting_success=Удалены непринятые файлы в %s
blame_prior=Показать авторство предшествующих изменений blame_prior=Показать авторство предшествующих изменений
author_search_tooltip=Показывает максимум 30 пользователей author_search_tooltip=Показывает максимум 30 пользователей
tree_path_not_found_commit=Путь %[1]s не существует в коммите %[2]s
tree_path_not_found_branch=Путь %[1]s не существует в ветке %[2]s
transfer.accept=Принять трансфер transfer.accept=Принять трансфер
transfer.accept_desc=Переместить в «%s» transfer.accept_desc=Переместить в «%s»
@ -1140,6 +1147,8 @@ file_view_rendered=Просмотр отрендеренного
file_view_raw=Посмотреть исходник file_view_raw=Посмотреть исходник
file_permalink=Постоянная ссылка file_permalink=Постоянная ссылка
file_too_large=Этот файл слишком большой, поэтому он не может быть отображён. file_too_large=Этот файл слишком большой, поэтому он не может быть отображён.
invisible_runes_header=`Этот файл содержит невидимые символы Юникода`
ambiguous_runes_header=`Этот файл содержит неоднозначные символы Юникода`
invisible_runes_line=`В этой строке есть невидимые символы Юникода` invisible_runes_line=`В этой строке есть невидимые символы Юникода`
ambiguous_runes_line=`В этой строке есть неоднозначные символы Юникода` ambiguous_runes_line=`В этой строке есть неоднозначные символы Юникода`
ambiguous_character=`%[1]c [U+%04[1]X] можно спутать с %[2]c [U+%04[2]X]` ambiguous_character=`%[1]c [U+%04[1]X] можно спутать с %[2]c [U+%04[2]X]`
@ -1414,6 +1423,7 @@ issues.filter_sort.moststars=Больше звезд
issues.filter_sort.feweststars=Меньше звезд issues.filter_sort.feweststars=Меньше звезд
issues.filter_sort.mostforks=Больше форков issues.filter_sort.mostforks=Больше форков
issues.filter_sort.fewestforks=Меньше форков issues.filter_sort.fewestforks=Меньше форков
issues.keyword_search_unavailable=В настоящее время поиск по ключевым словам недоступен. Обратитесь к администратору сайта.
issues.action_open=Открыть issues.action_open=Открыть
issues.action_close=Закрыть issues.action_close=Закрыть
issues.action_label=Метка issues.action_label=Метка
@ -1462,9 +1472,15 @@ issues.ref_closed_from=`<a href="%[3]s">закрыл этот запрос %[4]s
issues.ref_reopened_from=`<a href="%[3]s">переоткрыл эту задачу %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>` issues.ref_reopened_from=`<a href="%[3]s">переоткрыл эту задачу %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_from=`из %[1]s` issues.ref_from=`из %[1]s`
issues.author=Автор issues.author=Автор
issues.author_helper=Этот пользователь является автором.
issues.role.owner=Владелец issues.role.owner=Владелец
issues.role.owner_helper=Этот пользователь является владельцем репозитория.
issues.role.member=Участник issues.role.member=Участник
issues.role.member_helper=Этот пользователь является членом организации, владеющей этим репозиторием.
issues.role.collaborator=Соавтор issues.role.collaborator=Соавтор
issues.role.collaborator_helper=Этот пользователь был приглашен сотрудничать в репозитории.
issues.role.first_time_contributor=Новый участник
issues.role.first_time_contributor_helper=Это первый вклад пользователя в репозиторий.
issues.role.contributor=Участник issues.role.contributor=Участник
issues.re_request_review=Повторить запрос на отзыв issues.re_request_review=Повторить запрос на отзыв
issues.is_stale=Со времени этого обзора в этот PR были внесены некоторые изменения issues.is_stale=Со времени этого обзора в этот PR были внесены некоторые изменения
@ -1481,6 +1497,8 @@ issues.label_description=Описание метки
issues.label_color=Цвет метки issues.label_color=Цвет метки
issues.label_exclusive=Эксклюзивный issues.label_exclusive=Эксклюзивный
issues.label_archive=Метка архива issues.label_archive=Метка архива
issues.label_archived_filter=Показать архивированные метки
issues.label_archive_tooltip=Архивированные метки исключаются по умолчанию из подсказок при поиске по метке.
issues.label_exclusive_desc=Назовите метку <code>область/элемент</code>, чтобы сделать ее взаимоисключающей с другими метками <code>область/</code>. issues.label_exclusive_desc=Назовите метку <code>область/элемент</code>, чтобы сделать ее взаимоисключающей с другими метками <code>область/</code>.
issues.label_exclusive_warning=Любые метки с конфликтующей областью будут удалены при редактировании меток задачи или запроса на слияние. issues.label_exclusive_warning=Любые метки с конфликтующей областью будут удалены при редактировании меток задачи или запроса на слияние.
issues.label_count=%d меток issues.label_count=%d меток
@ -1535,6 +1553,7 @@ issues.tracking_already_started=`Вы уже начали отслеживать
issues.stop_tracking=Остановить таймер issues.stop_tracking=Остановить таймер
issues.stop_tracking_history=`перестал(а) работать %s` issues.stop_tracking_history=`перестал(а) работать %s`
issues.cancel_tracking=Отмена issues.cancel_tracking=Отмена
issues.cancel_tracking_history=`отменил(а) отслеживание времени %s`
issues.add_time=Вручную добавить время issues.add_time=Вручную добавить время
issues.del_time=Удалить этот журнал времени issues.del_time=Удалить этот журнал времени
issues.add_time_short=Добавить время issues.add_time_short=Добавить время
@ -1690,6 +1709,7 @@ pulls.is_empty=Изменения из этой ветки уже есть в ц
pulls.required_status_check_failed=Некоторые необходимые проверки не были пройдены. pulls.required_status_check_failed=Некоторые необходимые проверки не были пройдены.
pulls.required_status_check_missing=Отсутствуют некоторые обязательные проверки. pulls.required_status_check_missing=Отсутствуют некоторые обязательные проверки.
pulls.required_status_check_administrator=Как администратор, вы все равно можете принять этот запрос на слияние. pulls.required_status_check_administrator=Как администратор, вы все равно можете принять этот запрос на слияние.
pulls.blocked_by_approvals=Этот запрос на слияние пока не имеет достаточного количества одобрений. Получено %d из %d одобрений.
pulls.blocked_by_rejection=Официальный рецензент запросил изменения к этому запросу на слияние. pulls.blocked_by_rejection=Официальный рецензент запросил изменения к этому запросу на слияние.
pulls.can_auto_merge_desc=Этот запрос на слияние может быть объединён автоматически. pulls.can_auto_merge_desc=Этот запрос на слияние может быть объединён автоматически.
pulls.cannot_auto_merge_desc=Этот запрос на слияние не может быть объединён автоматически. pulls.cannot_auto_merge_desc=Этот запрос на слияние не может быть объединён автоматически.
@ -1736,6 +1756,8 @@ pulls.status_checks_failure=Некоторые проверки не удали
pulls.status_checks_error=Некоторые проверки сообщили об ошибках pulls.status_checks_error=Некоторые проверки сообщили об ошибках
pulls.status_checks_requested=Требуется pulls.status_checks_requested=Требуется
pulls.status_checks_details=Информация pulls.status_checks_details=Информация
pulls.status_checks_hide_all=Скрыть все проверки
pulls.status_checks_show_all=Показать все проверки
pulls.update_branch=Обновить ветку посредством слияния pulls.update_branch=Обновить ветку посредством слияния
pulls.update_branch_rebase=Обновить ветку через rebase pulls.update_branch_rebase=Обновить ветку через rebase
pulls.update_branch_success=Обновление ветки выполнено успешно pulls.update_branch_success=Обновление ветки выполнено успешно
@ -1744,6 +1766,9 @@ pulls.outdated_with_base_branch=Эта ветка отстает от базов
pulls.close=Закрыть запрос на слияние pulls.close=Закрыть запрос на слияние
pulls.closed_at=`закрыл этот запрос на слияние <a id="%[1]s" href="#%[1]s">%[2]s</a>` pulls.closed_at=`закрыл этот запрос на слияние <a id="%[1]s" href="#%[1]s">%[2]s</a>`
pulls.reopened_at=`переоткрыл этот запрос на слияние <a id="%[1]s" href="#%[1]s">%[2]s</a>` pulls.reopened_at=`переоткрыл этот запрос на слияние <a id="%[1]s" href="#%[1]s">%[2]s</a>`
pulls.cmd_instruction_hint=`Просмотреть <a class="show-instruction">инструкции для командной строки</a>.`
pulls.cmd_instruction_merge_title=Слить
pulls.cmd_instruction_merge_desc=Слить изменения и обновить в Gitea.
pulls.clear_merge_message=Очистить сообщение о слиянии pulls.clear_merge_message=Очистить сообщение о слиянии
pulls.clear_merge_message_hint=Очистка сообщения о слиянии удалит только содержимое сообщения коммита, но сохранит сгенерированные git добавки, такие как "Co-Authored-By …". pulls.clear_merge_message_hint=Очистка сообщения о слиянии удалит только содержимое сообщения коммита, но сохранит сгенерированные git добавки, такие как "Co-Authored-By …".
@ -1787,6 +1812,8 @@ milestones.edit_success=Этап «%s» обновлён.
milestones.deletion=Удалить этап milestones.deletion=Удалить этап
milestones.deletion_desc=Удаление этапа приведет к его удалению из всех связанных задач. Продолжить? milestones.deletion_desc=Удаление этапа приведет к его удалению из всех связанных задач. Продолжить?
milestones.deletion_success=Этап успешно удалён. milestones.deletion_success=Этап успешно удалён.
milestones.filter_sort.earliest_due_data=По возрастанию даты завершения
milestones.filter_sort.latest_due_date=По убыванию даты завершения
milestones.filter_sort.least_complete=Менее полное milestones.filter_sort.least_complete=Менее полное
milestones.filter_sort.most_complete=Более полное milestones.filter_sort.most_complete=Более полное
milestones.filter_sort.most_issues=Большинство задач milestones.filter_sort.most_issues=Большинство задач
@ -1797,7 +1824,9 @@ signing.wont_sign.never=Коммиты никогда не подписываю
signing.wont_sign.always=Коммиты всегда подписываются. signing.wont_sign.always=Коммиты всегда подписываются.
signing.wont_sign.pubkey=Этот коммит не будет подписан, поскольку к вашей учётной записи не привязано публичного ключа. signing.wont_sign.pubkey=Этот коммит не будет подписан, поскольку к вашей учётной записи не привязано публичного ключа.
signing.wont_sign.twofa=Для подписания коммитов у вас должна быть включена двухфакторная аутентификация. signing.wont_sign.twofa=Для подписания коммитов у вас должна быть включена двухфакторная аутентификация.
signing.wont_sign.parentsigned=Этот коммит не будет подписан, так как родительский коммит не подписан.
signing.wont_sign.basesigned=Слияние не будет подписано, так как базовый коммит не подписан. signing.wont_sign.basesigned=Слияние не будет подписано, так как базовый коммит не подписан.
signing.wont_sign.headsigned=Слияние не будет подписано, так как головной коммит не подписан.
signing.wont_sign.commitssigned=Слияние не будет подписано, так как все связанные коммиты не подписаны. signing.wont_sign.commitssigned=Слияние не будет подписано, так как все связанные коммиты не подписаны.
signing.wont_sign.approved=Слияние не будет подписано, так как запрос на слияние не одобрен. signing.wont_sign.approved=Слияние не будет подписано, так как запрос на слияние не одобрен.
signing.wont_sign.not_signed_in=Вы не вошли в систему. signing.wont_sign.not_signed_in=Вы не вошли в систему.
@ -1829,7 +1858,7 @@ wiki.page_already_exists=Страница вики с таким именем у
wiki.reserved_page=Имя страницы вики «%s» зарезервировано. wiki.reserved_page=Имя страницы вики «%s» зарезервировано.
wiki.pages=Страницы wiki.pages=Страницы
wiki.last_updated=Последнее обновление %s wiki.last_updated=Последнее обновление %s
wiki.page_name_desc=Введите имя страницы вики. Некоторые специальные имена: 'Главна', '_Sidebar' и '_Footer'. wiki.page_name_desc=Введите имя страницы вики. Некоторые специальные имена: 'Home', '_Sidebar' и '_Footer'.
activity=Активность activity=Активность
activity.period.filter_label=Период: activity.period.filter_label=Период:
@ -1943,6 +1972,7 @@ settings.mirror_settings.push_mirror.add=Добавить Push-зеркало
settings.mirror_settings.push_mirror.edit_sync_time=Изменить интервал синхронизации зеркала settings.mirror_settings.push_mirror.edit_sync_time=Изменить интервал синхронизации зеркала
settings.sync_mirror=Синхронизировать settings.sync_mirror=Синхронизировать
settings.push_mirror_sync_in_progress=Идёт отправка изменений в удалённый репозиторий %s.
settings.site=Сайт settings.site=Сайт
settings.update_settings=Обновить настройки settings.update_settings=Обновить настройки
settings.update_mirror_settings=Обновить настройки зеркала settings.update_mirror_settings=Обновить настройки зеркала
@ -2009,6 +2039,7 @@ settings.transfer.rejected=Трансфер репозитория отменё
settings.transfer.success=Трансфер репозитория успешно выполнен. settings.transfer.success=Трансфер репозитория успешно выполнен.
settings.transfer_abort=Отменить трансфер settings.transfer_abort=Отменить трансфер
settings.transfer_abort_invalid=Невозможно отменить трансфер несуществующего репозитория. settings.transfer_abort_invalid=Невозможно отменить трансфер несуществующего репозитория.
settings.transfer_abort_success=Передача репозитория %s успешно отменена.
settings.transfer_desc=Передать репозиторий другому пользователю или организации где у вас есть права администратора. settings.transfer_desc=Передать репозиторий другому пользователю или организации где у вас есть права администратора.
settings.transfer_form_title=Введите сопутствующую информацию для подтверждения операции: settings.transfer_form_title=Введите сопутствующую информацию для подтверждения операции:
settings.transfer_in_progress=Трансфер в процессе выполнения. Отмените его, если желаете выполнить трансфер другому пользователю. settings.transfer_in_progress=Трансфер в процессе выполнения. Отмените его, если желаете выполнить трансфер другому пользователю.
@ -2240,6 +2271,7 @@ settings.dismiss_stale_approvals_desc=Когда новые коммиты, из
settings.require_signed_commits=Требовать подписанные коммиты settings.require_signed_commits=Требовать подписанные коммиты
settings.require_signed_commits_desc=Отклонить отправку изменений в эту ветку, если они не подписаны или не проверяемы. settings.require_signed_commits_desc=Отклонить отправку изменений в эту ветку, если они не подписаны или не проверяемы.
settings.protect_branch_name_pattern=Шаблон имени для защищённых веток settings.protect_branch_name_pattern=Шаблон имени для защищённых веток
settings.protect_branch_name_pattern_desc=Шаблоны имён защищённых веток. О синтаксисе шаблонов читайте в <a href="https://github.com/gobwas/glob">документации</a>. Примеры: main, release/**
settings.protect_patterns=Шаблоны settings.protect_patterns=Шаблоны
settings.protect_protected_file_patterns=Шаблоны защищённых файлов (разделённые точкой с запятой ';'): settings.protect_protected_file_patterns=Шаблоны защищённых файлов (разделённые точкой с запятой ';'):
settings.protect_protected_file_patterns_desc=Защищенные файлы нельзя изменить напрямую, даже если пользователь имеет право добавлять, редактировать или удалять файлы в этой ветке. Можно указать несколько шаблонов, разделяя их точкой с запятой (';'). О синтаксисе шаблонов читайте в документации <a href='https://godoc.org/github.com/gobwas/glob#Compile'>github.com/gobwas/glob</a>. Примеры: <code>.drone.yml</code>, <code>/docs/**/*.txt</code>. settings.protect_protected_file_patterns_desc=Защищенные файлы нельзя изменить напрямую, даже если пользователь имеет право добавлять, редактировать или удалять файлы в этой ветке. Можно указать несколько шаблонов, разделяя их точкой с запятой (';'). О синтаксисе шаблонов читайте в документации <a href='https://godoc.org/github.com/gobwas/glob#Compile'>github.com/gobwas/glob</a>. Примеры: <code>.drone.yml</code>, <code>/docs/**/*.txt</code>.
@ -2451,6 +2483,7 @@ branch.default_deletion_failed=Ветка «%s» является веткой
branch.restore=Восстановить ветку «%s» branch.restore=Восстановить ветку «%s»
branch.download=Скачать ветку «%s» branch.download=Скачать ветку «%s»
branch.rename=Переименовать ветку «%s» branch.rename=Переименовать ветку «%s»
branch.search=Поиск ветки
branch.included_desc=Эта ветка является частью ветки по умолчанию branch.included_desc=Эта ветка является частью ветки по умолчанию
branch.included=Включено branch.included=Включено
branch.create_new_branch=Создать ветку из ветви: branch.create_new_branch=Создать ветку из ветви:
@ -2473,6 +2506,7 @@ tag.create_success=Тег «%s» создан.
topic.manage_topics=Редактировать тематические метки topic.manage_topics=Редактировать тематические метки
topic.done=Сохранить topic.done=Сохранить
topic.count_prompt=Нельзя выбрать более 25 тем topic.count_prompt=Нельзя выбрать более 25 тем
topic.format_prompt=Темы должны начинаться с буквы или цифры и могут содержать дефисы («-») и точки («.»). Длина темы не должна превышать 35 символов. Все буквы должны быть строчными.
find_file.go_to_file=Перейти к файлу find_file.go_to_file=Перейти к файлу
find_file.no_matching=Совпадающих файлов не найдено find_file.no_matching=Совпадающих файлов не найдено
@ -2600,11 +2634,13 @@ teams.all_repositories_helper=Команда имеет доступ ко все
teams.all_repositories_read_permission_desc=Эта команда предоставляет <strong>прочтено</strong> доступ к <strong>всем репозиториям</strong>: участники могут просматривать и клонировать репозитории. teams.all_repositories_read_permission_desc=Эта команда предоставляет <strong>прочтено</strong> доступ к <strong>всем репозиториям</strong>: участники могут просматривать и клонировать репозитории.
teams.all_repositories_write_permission_desc=Эта команда предоставляет <strong>Написать</strong> доступ к <strong>всем репозиториям</strong>: участники могут читать и выполнять push в репозитории. teams.all_repositories_write_permission_desc=Эта команда предоставляет <strong>Написать</strong> доступ к <strong>всем репозиториям</strong>: участники могут читать и выполнять push в репозитории.
teams.all_repositories_admin_permission_desc=Эта команда предоставляет <strong>администратору</strong> доступ к <strong>всем репозиториям</strong>: участники могут читать, отправлять сообщения и добавлять соавторов в репозитории. teams.all_repositories_admin_permission_desc=Эта команда предоставляет <strong>администратору</strong> доступ к <strong>всем репозиториям</strong>: участники могут читать, отправлять сообщения и добавлять соавторов в репозитории.
teams.invite.title=Вас пригласили присоединиться к команде <strong>%s</strong> организации <strong>%s</strong>.
teams.invite.by=Приглашен(а) %s teams.invite.by=Приглашен(а) %s
teams.invite.description=Нажмите на кнопку ниже, чтобы присоединиться к команде. teams.invite.description=Нажмите на кнопку ниже, чтобы присоединиться к команде.
[admin] [admin]
dashboard=Панель dashboard=Панель
identity_access=Идентификация и доступ
users=Пользователи users=Пользователи
organizations=Организации organizations=Организации
repositories=Репозитории repositories=Репозитории
@ -2697,6 +2733,7 @@ dashboard.gc_lfs=Выполнить сборку мусора метаобъек
dashboard.stop_zombie_tasks=Остановить задания-зомби dashboard.stop_zombie_tasks=Остановить задания-зомби
dashboard.stop_endless_tasks=Остановить бесконечные задания dashboard.stop_endless_tasks=Остановить бесконечные задания
dashboard.cancel_abandoned_jobs=Отменить брошенные задания dashboard.cancel_abandoned_jobs=Отменить брошенные задания
dashboard.start_schedule_tasks=Запустить запланированные задания
users.user_manage_panel=Панель управления пользователями users.user_manage_panel=Панель управления пользователями
users.new_account=Создать новый аккаунт users.new_account=Создать новый аккаунт
@ -2766,6 +2803,7 @@ emails.updated=Email обновлён
emails.not_updated=Не удалось обновить запрошенный адрес электронной почты: %v emails.not_updated=Не удалось обновить запрошенный адрес электронной почты: %v
emails.duplicate_active=Этот адрес электронной почты уже активирован для другого пользователя. emails.duplicate_active=Этот адрес электронной почты уже активирован для другого пользователя.
emails.change_email_header=Обновить свойства электронной почты emails.change_email_header=Обновить свойства электронной почты
emails.change_email_text=Вы уверены, что хотите обновить этот адрес электронной почты?
orgs.org_manage_panel=Управление организациями orgs.org_manage_panel=Управление организациями
orgs.name=Название orgs.name=Название
@ -2790,6 +2828,7 @@ packages.package_manage_panel=Управление пакетами
packages.total_size=Общий размер: %s packages.total_size=Общий размер: %s
packages.unreferenced_size=Размер по ссылке: %s packages.unreferenced_size=Размер по ссылке: %s
packages.cleanup=Очистить устаревшие данные packages.cleanup=Очистить устаревшие данные
packages.cleanup.success=Очистка устаревших данных успешно завершена
packages.owner=Владелец packages.owner=Владелец
packages.creator=Автор packages.creator=Автор
packages.name=Наименование packages.name=Наименование
@ -3086,6 +3125,7 @@ monitor.queue.name=Имя
monitor.queue.type=Тип monitor.queue.type=Тип
monitor.queue.exemplar=Тип образца monitor.queue.exemplar=Тип образца
monitor.queue.numberworkers=Количество рабочих monitor.queue.numberworkers=Количество рабочих
monitor.queue.activeworkers=Активные рабочие
monitor.queue.maxnumberworkers=Максимальное количество рабочих monitor.queue.maxnumberworkers=Максимальное количество рабочих
monitor.queue.numberinqueue=Позиция в очереди monitor.queue.numberinqueue=Позиция в очереди
monitor.queue.settings.title=Настройки пула monitor.queue.settings.title=Настройки пула
@ -3411,16 +3451,23 @@ runners.status.idle=Простаивает
runners.status.active=Активный runners.status.active=Активный
runners.status.offline=Недоступен runners.status.offline=Недоступен
runners.version=Версия runners.version=Версия
runners.reset_registration_token=Сброс регистрационного токена
runners.reset_registration_token_success=Токен регистрации раннера успешно сброшен runners.reset_registration_token_success=Токен регистрации раннера успешно сброшен
runs.all_workflows=Все рабочие потоки runs.all_workflows=Все рабочие потоки
runs.commit=коммит runs.commit=коммит
runs.scheduled=Запланировано
runs.pushed_by=отправлено runs.pushed_by=отправлено
runs.invalid_workflow_helper=Файл конфигурации рабочего потока некорректен. Пожалуйста, проверьте конфигурационный файл: %s runs.invalid_workflow_helper=Файл конфигурации рабочего потока некорректен. Пожалуйста, проверьте конфигурационный файл: %s
runs.actor=Актор runs.actor=Актор
runs.status=Статус runs.status=Статус
runs.actors_no_select=Все акторы runs.actors_no_select=Все акторы
runs.no_results=Ничего не найдено.
runs.no_workflows=Пока нет рабочих процессов.
runs.no_workflows.quick_start=Не знаете, как начать использовать Действия Gitea? Читайте <a target="_blank" rel="noopener noreferrer" href="%s">руководство по быстрому старту</a>.
runs.no_workflows.documentation=Чтобы узнать больше о Действиях Gitea, читайте <a target="_blank" rel="noopener noreferrer" href="%s">документацию</a>.
runs.no_runs=Рабочий поток ещё не запускался. runs.no_runs=Рабочий поток ещё не запускался.
runs.empty_commit_message=(пустое сообщение коммита)
workflow.disable=Выключить рабочий поток workflow.disable=Выключить рабочий поток
workflow.disable_success=Рабочий поток «%s» успешно выключен. workflow.disable_success=Рабочий поток «%s» успешно выключен.

View File

@ -55,6 +55,23 @@ func (f *GitlabDownloaderFactory) GitServiceType() structs.GitServiceType {
return structs.GitlabService return structs.GitlabService
} }
type gitlabIIDResolver struct {
maxIssueIID int64
frozen bool
}
func (r *gitlabIIDResolver) recordIssueIID(issueIID int) {
if r.frozen {
panic("cannot record issue IID after pull request IID generation has started")
}
r.maxIssueIID = max(r.maxIssueIID, int64(issueIID))
}
func (r *gitlabIIDResolver) generatePullRequestNumber(mrIID int) int64 {
r.frozen = true
return r.maxIssueIID + int64(mrIID)
}
// GitlabDownloader implements a Downloader interface to get repository information // GitlabDownloader implements a Downloader interface to get repository information
// from gitlab via go-gitlab // from gitlab via go-gitlab
// - issueCount is incremented in GetIssues() to ensure PR and Issue numbers do not overlap, // - issueCount is incremented in GetIssues() to ensure PR and Issue numbers do not overlap,
@ -66,7 +83,7 @@ type GitlabDownloader struct {
baseURL string baseURL string
repoID int repoID int
repoName string repoName string
issueCount int64 iidResolver gitlabIIDResolver
maxPerPage int maxPerPage int
} }
@ -450,8 +467,8 @@ func (g *GitlabDownloader) GetIssues(page, perPage int) ([]*base.Issue, bool, er
Context: gitlabIssueContext{IsMergeRequest: false}, Context: gitlabIssueContext{IsMergeRequest: false},
}) })
// increment issueCount, to be used in GetPullRequests() // record the issue IID, to be used in GetPullRequests()
g.issueCount++ g.iidResolver.recordIssueIID(issue.IID)
} }
return allIssues, len(issues) < perPage, nil return allIssues, len(issues) < perPage, nil
@ -607,8 +624,8 @@ func (g *GitlabDownloader) GetPullRequests(page, perPage int) ([]*base.PullReque
awardPage++ awardPage++
} }
// Add the PR ID to the Issue Count because PR and Issues share ID space in Gitea // Generate new PR Numbers by the known Issue Numbers, because they share the same number space in Gitea, but they are independent in Gitlab
newPRNumber := g.issueCount + int64(pr.IID) newPRNumber := g.iidResolver.generatePullRequestNumber(pr.IID)
allPRs = append(allPRs, &base.PullRequest{ allPRs = append(allPRs, &base.PullRequest{
Title: pr.Title, Title: pr.Title,

View File

@ -516,3 +516,20 @@ func TestAwardsToReactions(t *testing.T) {
}, },
}, reactions) }, reactions)
} }
func TestGitlabIIDResolver(t *testing.T) {
r := gitlabIIDResolver{}
r.recordIssueIID(1)
r.recordIssueIID(2)
r.recordIssueIID(3)
r.recordIssueIID(2)
assert.EqualValues(t, 4, r.generatePullRequestNumber(1))
assert.EqualValues(t, 13, r.generatePullRequestNumber(10))
assert.Panics(t, func() {
r := gitlabIIDResolver{}
r.recordIssueIID(1)
assert.EqualValues(t, 2, r.generatePullRequestNumber(1))
r.recordIssueIID(3) // the generation procedure has been started, it shouldn't accept any new issue IID, so it panics
})
}