forgejo/discussions
49
43

Moving the Forgejo translations to weblate #104

Closed
opened 2024年01月20日 20:14:57 +01:00 by earl-warren · 39 comments

The Forgejo translations being trapped in a proprietary service would be a blocker in the event of a hard fork. Late 2022 the strategy for localization was to:

  • have a script to patch the existing translations where relevant
  • add new strings and resolve conflicts weekly (those are not translated at all)

It worked fine until now, the overhead and problems were close to non-existent. Nobody knew Forgejo and establishing a translation team would have been difficult then but things are different now. There are significantly more people aware of what Forgejo is and willing to help. @Werenter recently started to work on it and got inspiration from @delvh previous work.

TODO:

The Forgejo translations being trapped in a proprietary service would be a [blocker in the event of a hard fork](https://codeberg.org/forgejo/governance/issues/58). Late 2022 the [strategy for localization](https://codeberg.org/forgejo/discussions/issues/4) was to: * have a script to patch the existing translations where relevant * add new strings and resolve conflicts weekly (those are not translated at all) It worked fine until now, the overhead and problems were close to non-existent. Nobody knew Forgejo and establishing a translation team would have been difficult then but things are different now. There are significantly more people aware of what Forgejo is and willing to help. @Werenter recently [started to work on it](https://codeberg.org/forgejo/forgejo/pulls/2044) and got inspiration from @delvh previous work. TODO: - [x] create a translation team - [x] propose a localization team https://codeberg.org/forgejo/governance/issues/61 - [x] create a translation https://matrix.to/#/#forgejo-localization:matrix.org - [x] add the chatroom to the Forgejo space - [x] agreement finalized for the localization team https://codeberg.org/forgejo/governance/issues/61 - [x] draft of the documentation of the localization team https://codeberg.org/forgejo/governance/pulls/62 - [x] document the localization team https://codeberg.org/forgejo/governance/pulls/62 - [x] recruit translators to be reviewers vetting translations - [x] 21 January 2024 [call for participation in the development chatroom](https://matrix.to/#/!zpNKWqkiEOyljSMQDK:matrix.org/$J5eGFvwazdBJ5GeWxrAy8CB7DRNUY45qwT_yxHHu5Fg?via=schinas.net&via=matrix.org&via=aria-net.org) - [x] update the website with [a link encouraging invovlement](https://codeberg.org/forgejo/website/pulls/407) - [x] initial translation team candidates - Arabic @oatbiscuits - Dutch @Gusted - French @dachary - Russian @0eoc @Werenter - Hungarian @algernon - Greek @n0toose - German @fnetX - Ukranian @nykula - [x] [document the l10n workflow](https://forgejo.org/docs/v1.21/developer/localization/) (see [the PR](https://codeberg.org/forgejo/docs/pulls/381)) - [x] make Forgejo translation files authoritative ([see the pull request](https://codeberg.org/forgejo/forgejo/pulls/2197)) - [x] modify build/merge-forgejo-locales.go to produce a minimal diff - [x] collect all changes to options/locale/locale_en-US.ini from the feature branches - [x] cherry pick changes from https://codeberg.org/forgejo/forgejo-translation / https://translate.codeberg.org/projects/forgejo/forgejo-test/ - [x] add `[common]` to the beginning of all files. It will be treated as no section and is a requirement for weblate which would otherwise be confused by the absence of section (see also the [content duplication bug]( https://github.com/WeblateOrg/weblate/issues/10831)) - [x] add support for `[common]` in addition to `[DEFAULT]` in Forgejo ```diff diff --git a/modules/translation/i18n/localestore.go b/modules/translation/i18n/localestore.go index f5a951a79f..5fc992794e 100644 --- a/modules/translation/i18n/localestore.go +++ b/modules/translation/i18n/localestore.go @@ -54,7 +54,7 @@ func (store *localeStore) AddLocaleByIni(langName, langDesc string, source, more for _, section := range iniFile.Sections() { for _, key := range section.Keys() { var trKey string - if section.Name() == "" || section.Name() == "DEFAULT" { + if section.Name() == "" || section.Name() == "DEFAULT" || section.Name() == "common" { trKey = key.Name() } else { trKey = section.Name() + "." + key.Name() ``` - [x] [commit to https://codeberg.org/forgejo/forgejo/src/branch/forgejo-development](https://codeberg.org/forgejo/forgejo/pulls/2197) - [x] 28 January cleanup - [x] resolve conflict in `[GITEA] notifies admins on new user registration` - [x]remove the forgejo-i18n branch - [x] merge`frogejo-development` into `forgejo` - [x] reconfigure https://translate.codeberg.org/settings/forgejo/forgejo/#vcs to use https://codeberg.org/forgejo/forgejo and the forgejo branch - [x] reset https://translate.codeberg.org/projects/forgejo/forgejo/#repository ![image](/attachments/8e94c353-4594-4726-840a-c7f195cc2896) - (hard fork only) run build/crowdin-to-weblate.sh when cherry-picking - [x] create a forgejo weblate project - [x] https://translate.codeberg.org/projects/forgejo/ - [x] to enforce the [desired workflow](https://docs.weblate.org/en/latest/workflows.html#dedicated-reviewers) the "Enable reviews" button must be set in https://translate.codeberg.org/settings/forgejo/#workflow - [x] Add a banner so people do not start translating during the transition phase ![image](/attachments/2b01968a-315d-4e8a-b77e-e5554d8e82a5) - [x] select "Gitea via pull request" strategy, which relies on weblate being configured server side to [open pull requests](https://docs.weblate.org/en/weblate-5.3.1/vcs.html#vcs-gitea) - [x] create a localization group ![image](/attachments/a35c94a5-efc2-4119-8d8b-9459242675e5) - [x] invite localization team members to the "localization" group - [x] [approve all existing strings](https://translate.codeberg.org/projects/forgejo/forgejo/#bulk-edit), thus preventing them from being modified by random users. ![image](/attachments/2792f90a-e95f-484a-acf4-bc0a2444fb0e) - [x] adding weblate translations to Forgejo is done manually by a member of the team merging the weblate pull request ![image](/attachments/4a8edd51-578c-4b60-a629-851eb96be236) ## Related issues / PRs / branches * https://codeberg.org/forgejo/forgejo/src/branch/forgejo-i18n * https://codeberg.org/forgejo/forgejo/issues/8 * https://codeberg.org/forgejo/discussions/issues/4 * https://codeberg.org/forgejo/meta/issues/72 * https://codeberg.org/forgejo/forgejo/issues/388 * https://codeberg.org/Werenter/forgejo-translation/issues/2 * https://codeberg.org/forgejo/forgejo/pulls/2044

@fnetX FYI

@fnetX FYI

I'll start with creating a repository at https://forgejo.octopuce.forgejo.org/ which is an instance behind a VPN. It will pull from weblate and be trusted with a token to push a commit to https://codeberg.org/forgejo/forgejo/. It should to be this way to safeguard the token that has write access to the Forgejo repository, in the same way as the private key to sign the releases.

I'll start with creating a repository at https://forgejo.octopuce.forgejo.org/ which is an instance behind a VPN. It will pull from weblate and be trusted with a token to push a commit to https://codeberg.org/forgejo/forgejo/. It should to be this way to safeguard the token that has write access to the Forgejo repository, in the same way as the private key to sign the releases.

@Werenter do you think better to move https://codeberg.org/Werenter/forgejo-translation to https://codeberg.org/forgejo/forgejo-translation or to create a repository from scratch?

I would appreciate if you could share the admin rights of https://translate.codeberg.org/projects/forgejo so I can experiment with it.

@Werenter do you think better to move https://codeberg.org/Werenter/forgejo-translation to https://codeberg.org/forgejo/forgejo-translation or to create a repository from scratch? I would appreciate if you could share the admin rights of https://translate.codeberg.org/projects/forgejo so I can experiment with it.

Could weblate be configured to read https://codeberg.org/forgejo/forgejo/src/branch/main/options/locale/locale_en-US.ini and write to https://codeberg.org/forgejo/forgejo-translation? Or should both be in the same repository?

Could weblate be configured to read https://codeberg.org/forgejo/forgejo/src/branch/main/options/locale/locale_en-US.ini and write to https://codeberg.org/forgejo/forgejo-translation? Or should both be in the same repository?
  1. I think that better to begin from scratch.
  2. A have gave you admin access.
  3. About files: Weblate can use different URLS for writing and reading, but I dont sure about it will work. You can experiment.

@earl-warren

1. I think that better to begin from scratch. 2. A have gave you admin access. 3. About files: Weblate can use different URLS for writing and reading, but I dont sure about it will work. You can experiment. @earl-warren

@0eoc would you like to participate in bootstrapping the Forgejo translation team?

@0eoc would you like to participate in bootstrapping the Forgejo translation team?

@Werenter are you positive that you granted me admin rights? Here is what I see at the moment:

image

@Werenter are you positive that you granted me admin rights? Here is what I see at the moment: ![image](/attachments/baaaccde-19cf-47a7-aca1-bd502a9c7359)
165 KiB
  1. I think that better to begin from scratch.

I will do that 👍

  1. About files: Weblate can use different URLS for writing and reading, but I dont sure about it will work. You can experiment.

That's good news, I'll do as you suggest.

> 1. I think that better to begin from scratch. I will do that 👍 > 3. About files: Weblate can use different URLS for writing and reading, but I dont sure about it will work. You can experiment. That's good news, I'll do as you suggest.

@Werenter are you positive that you granted me admin rights? Here is what I see at the moment:

Nevermind... I failed to see the invitation in the mail. It looks more admin like now 😁

image

> @Werenter are you positive that you granted me admin rights? Here is what I see at the moment: Nevermind... I failed to see the invitation in the mail. It looks more admin like now 😁 ![image](/attachments/8bb8f8fa-489c-4513-bc16-6d50ab27233d)
Owner
Copy link

would you like to participate in bootstrapping the Forgejo translation team?

@earl-warren yes. I postponed adding my application message by a bit until more organizational information is available on this. But I would like to apply as member/maintainer for Russian localization. I can provide more information on my motivation if necessarily.

I guess we'll also need a matrix room for this team?

> would you like to participate in bootstrapping the Forgejo translation team? @earl-warren yes. I postponed adding my application message by a bit until more organizational information is available on this. But I would like to apply as member/maintainer for Russian localization. I can provide more information on my motivation if necessarily. I guess we'll also need a matrix room for this team?
![изображение](/attachments/5982150d-fb3b-4810-8ddd-d43b30da64ed) @earl-warren

I have changed group permissions, try again

I have changed group permissions, try again

would you like to participate in bootstrapping the Forgejo translation team?

@earl-warren yes. I postponed adding my application message by a bit until more organizational information is available on this. But I would like to apply as member/maintainer for Russian localization. I can provide more information on my motivation if necessarily.

🎉 Since this is the bootstrap phase there is a chicken and egg problem. I think it is fine to create the team informally first and that members formally apply once the bootstrap is done, after the fact. Let's not add friction from the start.

I guess we'll also need a matrix room for this team?

Good idea. Would you like to create one? It will be added to the Forgejo space. I updated the checklist with this.

> > would you like to participate in bootstrapping the Forgejo translation team? > > @earl-warren yes. I postponed adding my application message by a bit until more organizational information is available on this. But I would like to apply as member/maintainer for Russian localization. I can provide more information on my motivation if necessarily. 🎉 Since this is the bootstrap phase there is a chicken and egg problem. I think it is fine to create the team informally first and that members formally apply once the bootstrap is done, after the fact. Let's not add friction from the start. > I guess we'll also need a matrix room for this team? Good idea. Would you like to create one? It will be added to the Forgejo space. I updated the checklist with this.
Owner
Copy link

I have created #forgejo-localization:matrix.org. Tried to make its texts look more less consistent with other room in Forgejo space.

I have created `#forgejo-localization:matrix.org`. Tried to make its texts look more less consistent with other room in Forgejo space.

@Werenter I assumed you would be willing to be part of the initial translation team (in the description of this issue) and added you to Russian translations. Did I overstep or are you ok with this?

@Werenter I assumed you would be willing to be part of the initial translation team (in the description of this issue) and added you to Russian translations. Did I overstep or are you ok with this?

@Werenter I assumed you would be willing to be part of the initial translation team (in the description of this issue) and added you to Russian translations. Did I overstep or are you ok with this?

Yes, I can be translator. I'm using the Forgejo and I think that translations that I can make will improve my experience with it. :)

> @Werenter I assumed you would be willing to be part of the initial translation team (in the description of this issue) and added you to Russian translations. Did I overstep or are you ok with this? Yes, I can be translator. I'm using the Forgejo and I think that translations that I can make will improve my experience with it. :)

Pull request for review so translations in the forgejo-development branch are authoritative and can be used as an input for weblate. The translations found in a Forgejo release were created by:

  • the files from Crowdin
  • a script patching them at build time
  • untranslated strings added by Forgejo fixes and features

After this PR is merged, they will be just plain files. It will conflict significantly more with Gitea changes but also open the way for using translations found in weblate.

Pull request [for review](https://codeberg.org/forgejo/forgejo/pulls/2197) so translations in the forgejo-development branch are authoritative and can be used as an input for weblate. The translations found in a Forgejo release were created by: * the files from Crowdin * a script patching them at build time * untranslated strings added by Forgejo fixes and features After this PR is merged, they will be just plain files. It will conflict significantly more with Gitea changes but also open the way for using translations found in weblate.

@b1nar10 you added Galician translations to a test repository that was only meant for testing. It should have been locked to avoid that but it would be a waste if you work was lost. Here is a diff for safekeeping so you can copy/paste and re-do that faster later on. Sorry for the inconvenience 😊

modified gitea_gl.ini
@@ -2,4 +2,89 @@
 
 
 [common]
-home = Inicio
\ No newline at end of file
+home = Inicio
+language = Linguaxe
+passcode = Contrasinal
+webauthn_error_timeout = Alcanzouse o Tempo de Espera antes de que se Puidese Ler a Túa chave. Volve Cargar esta Páxina e Téntao de Novo.
+cancel = Cancelar
+webauthn_sign_in = Preme o Botón da Túa Chave de Seguranza. Se a Túa Chave de Seguranza non ten ningún botón, insírela de novo.
+captcha = CAPTCHA
+disabled = Desactivado
+sign_in = Rexístrate
+activities = Actividades
+copy_content = Copiar Contido
+collaborative = Colaborativo
+view = Ver
+your_settings = Configuración
+mirrors = Espellos
+explore = Explorar
+webauthn_error_unknown = Produciuse un Erro Descoñecido. Téntao de novo.
+webauthn_reload = Recarga
+twofa = Autenticación de Dous Factores
+account_settings = Axustes da Conta
+version = Versión
+copy_success = Copiado!
+help = Axuda
+copy_type_unsupported = Este Tipo de Ficheiro non se Pode Copiar
+webauthn_error_empty = Debes Definir un Nome para esta Chave.
+sign_in_or = ou
+webauthn_use_twofa = Usa un Código de Dous Factores do teu Teléfono
+edit = Editar
+page = Páxina
+forks = Forks
+link_account = Ligar Conta
+rerun_all = Volve Executar Todos os Traballos
+your_profile = Perfil
+copy_hash = Copiar Hash
+sign_out = Pechar Sesión
+settings = Configuración
+locked = Pechado
+dashboard = Panel de Control
+logo = Logo
+copy_url = Copiar URL
+admin_panel = Administración do Sitio
+copy_error = Erro na Copia
+new_mirror = Novo Espello
+re_type = Confirme o Contrasinal
+webauthn_unsupported_browser = Actualmente o Teu Navegador non Admite WebAuthn.
+copy = Copiar
+enabled = Activado
+rerun = Volve Executar
+new_org = Nova Organización
+milestones = Fitos
+webauthn_error_insecure = WebAuthn só admite conexións seguras. Para probar a través de HTTP, pode usar a orixe "localhost" ou "127.0.0.1"
+new_project = Novo Proxecto
+your_starred = Destacado
+all = Todos
+copy_branch = Copiar o Nome da Rama
+sources = Fontes
+notifications = Notificacións
+pull_requests = Pull Requests
+repository = Repositorio
+webauthn_error = Non se Puido Ler a Túa Chave de Seguranza.
+add_all = Engadir Todo
+new_fork = Novo Repositorio Fork
+new_project_column = Nova Columna
+add = Engadir
+active_stopwatch = Active Time Tracker
+organization = Organización
+new_migrate = Nova Migración
+save = Gardar
+sign_in_with_provider = Inicia sesión con %s
+ok = OK
+manage_org = Xestionar Organizacións
+new_repo = Novo Repositorio
+webauthn_error_unable_to_process = O servidor non Puido Procesar a Túa Solicitude.
+register = Rexístrate
+mirror = Espello
+access_token = Token de acceso
+webauthn_insert_key = Insira a Túa Chave de Seguranza
+password = Contrasinal
+webauthn_error_duplicated = A chave de Seguranza non está Permitida para esta Solicitude. Asegúrate de que a Chave non Estea Rexistrada.
+template = Modelo
+webauthn_press_button = Preme o Botón da Túa Chave de Seguranza...
+sign_up = Rexístrate
+twofa_scratch = Código Scratch de Dous Factores
+issues = Problemas
+powered_by = Desenvolvido por %s
+retry = Volve Tentar
@b1nar10 you added Galician translations to a [test repository](https://translate.codeberg.org/projects/forgejo/forgejo-test) that was only meant for testing. It should have been locked to avoid that but it would be a waste if you work was lost. Here is a diff for safekeeping so you can copy/paste and re-do that faster later on. Sorry for the inconvenience 😊 ```diff modified gitea_gl.ini @@ -2,4 +2,89 @@ [common] -home = Inicio \ No newline at end of file +home = Inicio +language = Linguaxe +passcode = Contrasinal +webauthn_error_timeout = Alcanzouse o Tempo de Espera antes de que se Puidese Ler a Túa chave. Volve Cargar esta Páxina e Téntao de Novo. +cancel = Cancelar +webauthn_sign_in = Preme o Botón da Túa Chave de Seguranza. Se a Túa Chave de Seguranza non ten ningún botón, insírela de novo. +captcha = CAPTCHA +disabled = Desactivado +sign_in = Rexístrate +activities = Actividades +copy_content = Copiar Contido +collaborative = Colaborativo +view = Ver +your_settings = Configuración +mirrors = Espellos +explore = Explorar +webauthn_error_unknown = Produciuse un Erro Descoñecido. Téntao de novo. +webauthn_reload = Recarga +twofa = Autenticación de Dous Factores +account_settings = Axustes da Conta +version = Versión +copy_success = Copiado! +help = Axuda +copy_type_unsupported = Este Tipo de Ficheiro non se Pode Copiar +webauthn_error_empty = Debes Definir un Nome para esta Chave. +sign_in_or = ou +webauthn_use_twofa = Usa un Código de Dous Factores do teu Teléfono +edit = Editar +page = Páxina +forks = Forks +link_account = Ligar Conta +rerun_all = Volve Executar Todos os Traballos +your_profile = Perfil +copy_hash = Copiar Hash +sign_out = Pechar Sesión +settings = Configuración +locked = Pechado +dashboard = Panel de Control +logo = Logo +copy_url = Copiar URL +admin_panel = Administración do Sitio +copy_error = Erro na Copia +new_mirror = Novo Espello +re_type = Confirme o Contrasinal +webauthn_unsupported_browser = Actualmente o Teu Navegador non Admite WebAuthn. +copy = Copiar +enabled = Activado +rerun = Volve Executar +new_org = Nova Organización +milestones = Fitos +webauthn_error_insecure = WebAuthn só admite conexións seguras. Para probar a través de HTTP, pode usar a orixe "localhost" ou "127.0.0.1" +new_project = Novo Proxecto +your_starred = Destacado +all = Todos +copy_branch = Copiar o Nome da Rama +sources = Fontes +notifications = Notificacións +pull_requests = Pull Requests +repository = Repositorio +webauthn_error = Non se Puido Ler a Túa Chave de Seguranza. +add_all = Engadir Todo +new_fork = Novo Repositorio Fork +new_project_column = Nova Columna +add = Engadir +active_stopwatch = Active Time Tracker +organization = Organización +new_migrate = Nova Migración +save = Gardar +sign_in_with_provider = Inicia sesión con %s +ok = OK +manage_org = Xestionar Organizacións +new_repo = Novo Repositorio +webauthn_error_unable_to_process = O servidor non Puido Procesar a Túa Solicitude. +register = Rexístrate +mirror = Espello +access_token = Token de acceso +webauthn_insert_key = Insira a Túa Chave de Seguranza +password = Contrasinal +webauthn_error_duplicated = A chave de Seguranza non está Permitida para esta Solicitude. Asegúrate de que a Chave non Estea Rexistrada. +template = Modelo +webauthn_press_button = Preme o Botón da Túa Chave de Seguranza... +sign_up = Rexístrate +twofa_scratch = Código Scratch de Dous Factores +issues = Problemas +powered_by = Desenvolvido por %s +retry = Volve Tentar ```

@Werenter @0eoc for the record, the following translations from the test repository did not apply for whatever reason and were not cherry-picked. The rest of them have been cherry-picked at forgejo/forgejo@4a6d40373f

--- locale_ru-RU.ini
+++ locale_ru-RU.ini
@@ -1,4 +1,4 @@
-[_]
+[common]
 home=Главная
 dashboard=Панель управления
 explore=Обзор
@@ -296,7 +296,7 @@ default_allow_create_organization=Разрешить создание орган
 default_allow_create_organization_popup=Разрешить новым учётным записям пользователей создавать организации по умолчанию.
 default_enable_timetracking=Включить отслеживание времени по умолчанию
 default_enable_timetracking_popup=Включить отслеживание времени для новых репозиториев по умолчанию.
-allow_dots_in_usernames = Разрешить точки в именах пользовтелей. Не влияет на уже существующие аккаунты.
+allow_dots_in_usernames = Разрешить точки в именах пользователей. Это не повлияет на уже созданные учётные записи.
 no_reply_address=Скрытый почтовый домен
 no_reply_address_helper=Доменное имя для пользователей со скрытым адресом электронной почты. Например, имя пользователя 'joe' будет зарегистрировано в Git как 'joe@noreply.example.org' если скрытый домен электронной почты установлен как 'noreply.example.org'.
 password_algorithm=Алгоритм хеширования пароля
@@ -367,29 +367,29 @@ remember_me=Запомнить это устройство
 remember_me.compromised=Токен входа больше не действителен, что может указывать на угон аккаунта. Вам стоит проверить аккаунт на предмет необычных действий.
 forgot_password_title=Восстановить пароль
 forgot_password=Забыли пароль?
-sign_up_now=Нужен аккаунт? Зарегистрируйтесь.
+sign_up_now=Нужна учётная запись? Зарегистрируйтесь.
 sign_up_successful=Учётная запись успешно создана. Добро пожаловать!
 confirmation_mail_sent_prompt=Новое письмо для подтверждения направлено на <b>%s</b>. Пожалуйста, проверьте ваш почтовый ящик в течение %s для завершения регистрации.
 must_change_password=Обновить пароль
 allow_password_change=Требовать смену пароля пользователем (рекомендуется)
-reset_password_mail_sent_prompt=Письмо с подтверждением отправлено на <b>%s</b>. Пожалуйста, проверьте входящую почту в течение %s, чтобы завершить процесс восстановления аккаунта.
-active_your_account=Активируйте свой аккаунт
+reset_password_mail_sent_prompt=Письмо с подтверждением отправлено на <b>%s</b>. Пожалуйста, проверьте входящую почту в течение %s, чтобы завершить процесс восстановления учётной записи.
+active_your_account=Активируйте свою учётную запись
 account_activated=Учётная запись активирована
 prohibit_login=Вход запрещён
 prohibit_login_desc=Вход в вашу учётную запись запрещен, пожалуйста, свяжитесь с администратором сайта.
 resent_limit_prompt=Извините, вы уже запросили активацию по электронной почте недавно. Пожалуйста, подождите 3 минуты, а затем повторите попытку.
 has_unconfirmed_mail=Здравствуйте, %s! У вас есть неподтвержденный адрес электронной почты (<b>%s</b>). Если вам не приходило письмо с подтверждением или нужно выслать новое письмо, нажмите на кнопку ниже.
-change_unconfirmed_email_summary = Измените адрес электронной почты для активации аккаунта.
+change_unconfirmed_email_summary = Измените адрес эл. почты для активации учётной записи.
 change_unconfirmed_email = Если вы указали неверный адрес электронной почты при регистрации, вы можете его изменить ниже, и письмо для активации будет отправлено на новый адрес.
 change_unconfirmed_email_error = Не удаётся изменить адрес электронной почты: %v
-resend_mail=Нажмите здесь, чтобы переотправить письмо для активации аккаунта
+resend_mail=Нажмите здесь, чтобы отправить письмо для активации ещё раз
 email_not_associate=Этот адрес электронной почты не связан ни с одной учётной записью.
-send_reset_mail=Отправить письмо для восстановления аккаунта
-reset_password=Восстановление аккаунта
+send_reset_mail=Отправить письмо для восстановления учётной записи
+reset_password=Восстановление учётной записи
 invalid_code=Код подтверждения недействителен или истёк.
 invalid_code_forgot_password=Ваш код подтверждения недействителен или истек. Нажмите <a href="%s">здесь</a> для начала новой сессии.
 invalid_password=Ваш пароль не совпадает с паролем, который был использован для создания учётной записи.
-reset_password_helper=Восстановить аккаунт
+reset_password_helper=Восстановить учётную запись
 reset_password_wrong_user=Вы вошли как %s, но ссылка для восстановления учётной записи предназначена для %s
 password_too_short=Пароль не может быть короче %d символов.
 non_local_account=Нелокальные аккаунты не могут изменить пароль через Gitea.
@@ -893,19 +893,19 @@ scan_this_image=Отсканируйте это изображение ваши
 or_enter_secret=Или введите кодовое слово: %s
 then_enter_passcode=И введите пароль, показанный в приложении:
 passcode_invalid=Неверный пароль. попробуйте снова.
-twofa_enrolled=Для вашего аккаунта была включена двухфакторная аутентификация. Сохраните ваш scratch-токен (%s), он будет показан только один раз!
+twofa_enrolled=Для вашего аккаунта была включена двухфакторная аутентификация. Сохраните ваш одноразовый ключ восстановления (%s) в безопасном месте, так как он больше не будет показан.
 twofa_failed_get_secret=Не удалось получить ключ.
 
 webauthn_desc=Ключи безопасности - это аппаратные устройства, содержащие криптографические ключи. Они могут использоваться для двухфакторной аутентификации. Ключи безопасности должны поддерживать стандарт <a rel="noreferrer" target="_blank" href="https://w3c.github.io/webauthn/#webauthn-authenticator">WebAuthn Authenticator</a>.
 webauthn_register_key=Добавить ключ безопасности
 webauthn_nickname=Имя пользователя
 webauthn_delete_key=Удалить ключ безопасности
-webauthn_delete_key_desc=Если вы удалите ключ безопасности, вы больше не сможете войти с его помощью. Продолжить?
+webauthn_delete_key_desc=Если удалить ключ безопасности, его больше не выйдет использовать для входа. Продолжить?
 
 manage_account_links=Управление привязанными аккаунтами
-manage_account_links_desc=Эти внешние аккаунты привязаны к вашему аккаунту Gitea.
-account_links_not_available=В настоящее время нет внешних аккаунтов, привязанных к вашему аккаунту Gitea.
-link_account=Привязать аккаунт
+manage_account_links_desc=Эти внешние аккаунты привязаны ко вашему аккаунту Gitea.
+account_links_not_available=Сейчас к вашей учётной записи Gitea не привязаны сторонние учётные записи.
+link_account=Привязать учётную запись
 remove_account_link=Удалить привязанный аккаунт
 remove_account_link_desc=Удаление привязанной учётной записи отменит её доступ к вашей учётной записи Gitea. Продолжить?
 remove_account_link_success=Привязанная учётная запись удалена.
@@ -937,6 +937,17 @@ visibility.private_tooltip=Виден только членам организа
 can_not_add_email_activations_pending = Активация еще не завершена, повторите попытку через несколько минут, если хотите добавить новый адрес электронной почты.
 keep_email_private_popup = Это позволит скрыть ваш адрес электронной почты в вашем профиле, а также при создании запроса на слияние или редактировании файла с помощью веб-интерфейса. Уже выложенные коммиты не будут изменены. Используйте %s в коммитах, чтобы связать их с вашим аккаунтом.
 oauth2_confidential_client = Конфиденциальный клиент. Используйте для клиентов, которые хранят секрет в тайне, например веб-приложения. Не используйте для нативных приложений, включая десктопные и мобильные приложения.
+blocked_users_none = Вы не блокировали каких-либо пользователей.
+blocked_since = Заблокирован с %s
+oauth2_client_secret_hint = Секрет не будет показан после того, как вы покинете или обновите страницу. Убедитесь, что вы его надёжно сохранили.
+twofa_scratch_token_regenerated = Ваш одноразовый ключ восстановления: %s. Сохраните его в надёжном месте. Больше он показан не будет.
+hooks.desc = Добавьте веб-хуки, которые будут срабатывать во <strong>всех</strong> ваших репозиториях.
+webauthn_key_loss_warning = При утере ключей безопасности вы утратите доступ к учётной записи.
+user_block_success = Пользователь заблокирован.
+oauth2_application_locked = Gitea предварительно регистрирует некоторые приложения OAuth2 при запуске, если это включено в конфигурации. Для избежания неожиданного поведения их нельзя удалять или редактировать. Ознакомиться с подробностями можно в документации OAuth2.
+twofa_recovery_tip = При утере устройства вы сможете восстановить доступ к учётной записи, использовав одноразовый ключ восстановления.
+webauthn_alternative_tip = Возможно, стоит настроить дополнительный метод аутентификации.
+user_unblock_success = Пользователь разблокирован.
 
 [repo]
 owner=Владелец
@@ -1710,13 +1721,13 @@ pulls.add_prefix=Добавить <strong>%s</strong> префикс
 pulls.remove_prefix=Удалить <strong>%s</strong> префикс
 pulls.data_broken=Содержимое этого запроса было нарушено вследствие удаления информации форка.
 pulls.files_conflicted=Этот запрос на слияние имеет изменения конфликтующие с целевой веткой.
-pulls.is_checking=Продолжается проверка конфликтов, пожалуйста обновите страницу несколько позже.
-pulls.is_ancestor=Эта ветка уже включена в целевую ветку. Сливать нечего.
-pulls.is_empty=Изменения из этой ветки уже есть в целевой ветке. Это будет пустой коммит.
+pulls.is_checking="Продолжается проверка конфликтов. Повторите попытку позже."
+pulls.is_ancestor="Эта ветка уже включена в целевую ветку. Сливать нечего."
+pulls.is_empty="Изменения из этой ветки уже есть в целевой ветке. Это будет пустой коммит."
 pulls.required_status_check_failed=Некоторые необходимые проверки не были пройдены.
 pulls.required_status_check_missing=Отсутствуют некоторые обязательные проверки.
 pulls.required_status_check_administrator=Как администратор, вы все равно можете принять этот запрос на слияние.
-pulls.blocked_by_rejection=Официальный рецензент запросил изменения к этому запросу на слияние.
+pulls.blocked_by_rejection="Официальный рецензент запросил изменения к этому запросу на слияние."
 pulls.can_auto_merge_desc=Этот запрос на слияние может быть объединён автоматически.
 pulls.cannot_auto_merge_desc=Этот запрос на слияние не может быть объединён автоматически.
 pulls.cannot_auto_merge_helper=Пожалуйста, совершите слияние вручную для урегулирования конфликтов.
@Werenter @0eoc for the record, the following translations from the test repository did not apply for whatever reason and were not cherry-picked. The rest of them have been cherry-picked at https://codeberg.org/forgejo/forgejo/commit/4a6d40373f8e2a9b5b364a4a6ea9d6004c909f35 ```diff --- locale_ru-RU.ini +++ locale_ru-RU.ini @@ -1,4 +1,4 @@ -[_] +[common] home=Главная dashboard=Панель управления explore=Обзор @@ -296,7 +296,7 @@ default_allow_create_organization=Разрешить создание орган default_allow_create_organization_popup=Разрешить новым учётным записям пользователей создавать организации по умолчанию. default_enable_timetracking=Включить отслеживание времени по умолчанию default_enable_timetracking_popup=Включить отслеживание времени для новых репозиториев по умолчанию. -allow_dots_in_usernames = Разрешить точки в именах пользовтелей. Не влияет на уже существующие аккаунты. +allow_dots_in_usernames = Разрешить точки в именах пользователей. Это не повлияет на уже созданные учётные записи. no_reply_address=Скрытый почтовый домен no_reply_address_helper=Доменное имя для пользователей со скрытым адресом электронной почты. Например, имя пользователя 'joe' будет зарегистрировано в Git как 'joe@noreply.example.org' если скрытый домен электронной почты установлен как 'noreply.example.org'. password_algorithm=Алгоритм хеширования пароля @@ -367,29 +367,29 @@ remember_me=Запомнить это устройство remember_me.compromised=Токен входа больше не действителен, что может указывать на угон аккаунта. Вам стоит проверить аккаунт на предмет необычных действий. forgot_password_title=Восстановить пароль forgot_password=Забыли пароль? -sign_up_now=Нужен аккаунт? Зарегистрируйтесь. +sign_up_now=Нужна учётная запись? Зарегистрируйтесь. sign_up_successful=Учётная запись успешно создана. Добро пожаловать! confirmation_mail_sent_prompt=Новое письмо для подтверждения направлено на <b>%s</b>. Пожалуйста, проверьте ваш почтовый ящик в течение %s для завершения регистрации. must_change_password=Обновить пароль allow_password_change=Требовать смену пароля пользователем (рекомендуется) -reset_password_mail_sent_prompt=Письмо с подтверждением отправлено на <b>%s</b>. Пожалуйста, проверьте входящую почту в течение %s, чтобы завершить процесс восстановления аккаунта. -active_your_account=Активируйте свой аккаунт +reset_password_mail_sent_prompt=Письмо с подтверждением отправлено на <b>%s</b>. Пожалуйста, проверьте входящую почту в течение %s, чтобы завершить процесс восстановления учётной записи. +active_your_account=Активируйте свою учётную запись account_activated=Учётная запись активирована prohibit_login=Вход запрещён prohibit_login_desc=Вход в вашу учётную запись запрещен, пожалуйста, свяжитесь с администратором сайта. resent_limit_prompt=Извините, вы уже запросили активацию по электронной почте недавно. Пожалуйста, подождите 3 минуты, а затем повторите попытку. has_unconfirmed_mail=Здравствуйте, %s! У вас есть неподтвержденный адрес электронной почты (<b>%s</b>). Если вам не приходило письмо с подтверждением или нужно выслать новое письмо, нажмите на кнопку ниже. -change_unconfirmed_email_summary = Измените адрес электронной почты для активации аккаунта. +change_unconfirmed_email_summary = Измените адрес эл. почты для активации учётной записи. change_unconfirmed_email = Если вы указали неверный адрес электронной почты при регистрации, вы можете его изменить ниже, и письмо для активации будет отправлено на новый адрес. change_unconfirmed_email_error = Не удаётся изменить адрес электронной почты: %v -resend_mail=Нажмите здесь, чтобы переотправить письмо для активации аккаунта +resend_mail=Нажмите здесь, чтобы отправить письмо для активации ещё раз email_not_associate=Этот адрес электронной почты не связан ни с одной учётной записью. -send_reset_mail=Отправить письмо для восстановления аккаунта -reset_password=Восстановление аккаунта +send_reset_mail=Отправить письмо для восстановления учётной записи +reset_password=Восстановление учётной записи invalid_code=Код подтверждения недействителен или истёк. invalid_code_forgot_password=Ваш код подтверждения недействителен или истек. Нажмите <a href="%s">здесь</a> для начала новой сессии. invalid_password=Ваш пароль не совпадает с паролем, который был использован для создания учётной записи. -reset_password_helper=Восстановить аккаунт +reset_password_helper=Восстановить учётную запись reset_password_wrong_user=Вы вошли как %s, но ссылка для восстановления учётной записи предназначена для %s password_too_short=Пароль не может быть короче %d символов. non_local_account=Нелокальные аккаунты не могут изменить пароль через Gitea. @@ -893,19 +893,19 @@ scan_this_image=Отсканируйте это изображение ваши or_enter_secret=Или введите кодовое слово: %s then_enter_passcode=И введите пароль, показанный в приложении: passcode_invalid=Неверный пароль. попробуйте снова. -twofa_enrolled=Для вашего аккаунта была включена двухфакторная аутентификация. Сохраните ваш scratch-токен (%s), он будет показан только один раз! +twofa_enrolled=Для вашего аккаунта была включена двухфакторная аутентификация. Сохраните ваш одноразовый ключ восстановления (%s) в безопасном месте, так как он больше не будет показан. twofa_failed_get_secret=Не удалось получить ключ. webauthn_desc=Ключи безопасности - это аппаратные устройства, содержащие криптографические ключи. Они могут использоваться для двухфакторной аутентификации. Ключи безопасности должны поддерживать стандарт <a rel="noreferrer" target="_blank" href="https://w3c.github.io/webauthn/#webauthn-authenticator">WebAuthn Authenticator</a>. webauthn_register_key=Добавить ключ безопасности webauthn_nickname=Имя пользователя webauthn_delete_key=Удалить ключ безопасности -webauthn_delete_key_desc=Если вы удалите ключ безопасности, вы больше не сможете войти с его помощью. Продолжить? +webauthn_delete_key_desc=Если удалить ключ безопасности, его больше не выйдет использовать для входа. Продолжить? manage_account_links=Управление привязанными аккаунтами -manage_account_links_desc=Эти внешние аккаунты привязаны к вашему аккаунту Gitea. -account_links_not_available=В настоящее время нет внешних аккаунтов, привязанных к вашему аккаунту Gitea. -link_account=Привязать аккаунт +manage_account_links_desc=Эти внешние аккаунты привязаны ко вашему аккаунту Gitea. +account_links_not_available=Сейчас к вашей учётной записи Gitea не привязаны сторонние учётные записи. +link_account=Привязать учётную запись remove_account_link=Удалить привязанный аккаунт remove_account_link_desc=Удаление привязанной учётной записи отменит её доступ к вашей учётной записи Gitea. Продолжить? remove_account_link_success=Привязанная учётная запись удалена. @@ -937,6 +937,17 @@ visibility.private_tooltip=Виден только членам организа can_not_add_email_activations_pending = Активация еще не завершена, повторите попытку через несколько минут, если хотите добавить новый адрес электронной почты. keep_email_private_popup = Это позволит скрыть ваш адрес электронной почты в вашем профиле, а также при создании запроса на слияние или редактировании файла с помощью веб-интерфейса. Уже выложенные коммиты не будут изменены. Используйте %s в коммитах, чтобы связать их с вашим аккаунтом. oauth2_confidential_client = Конфиденциальный клиент. Используйте для клиентов, которые хранят секрет в тайне, например веб-приложения. Не используйте для нативных приложений, включая десктопные и мобильные приложения. +blocked_users_none = Вы не блокировали каких-либо пользователей. +blocked_since = Заблокирован с %s +oauth2_client_secret_hint = Секрет не будет показан после того, как вы покинете или обновите страницу. Убедитесь, что вы его надёжно сохранили. +twofa_scratch_token_regenerated = Ваш одноразовый ключ восстановления: %s. Сохраните его в надёжном месте. Больше он показан не будет. +hooks.desc = Добавьте веб-хуки, которые будут срабатывать во <strong>всех</strong> ваших репозиториях. +webauthn_key_loss_warning = При утере ключей безопасности вы утратите доступ к учётной записи. +user_block_success = Пользователь заблокирован. +oauth2_application_locked = Gitea предварительно регистрирует некоторые приложения OAuth2 при запуске, если это включено в конфигурации. Для избежания неожиданного поведения их нельзя удалять или редактировать. Ознакомиться с подробностями можно в документации OAuth2. +twofa_recovery_tip = При утере устройства вы сможете восстановить доступ к учётной записи, использовав одноразовый ключ восстановления. +webauthn_alternative_tip = Возможно, стоит настроить дополнительный метод аутентификации. +user_unblock_success = Пользователь разблокирован. [repo] owner=Владелец @@ -1710,13 +1721,13 @@ pulls.add_prefix=Добавить <strong>%s</strong> префикс pulls.remove_prefix=Удалить <strong>%s</strong> префикс pulls.data_broken=Содержимое этого запроса было нарушено вследствие удаления информации форка. pulls.files_conflicted=Этот запрос на слияние имеет изменения конфликтующие с целевой веткой. -pulls.is_checking=Продолжается проверка конфликтов, пожалуйста обновите страницу несколько позже. -pulls.is_ancestor=Эта ветка уже включена в целевую ветку. Сливать нечего. -pulls.is_empty=Изменения из этой ветки уже есть в целевой ветке. Это будет пустой коммит. +pulls.is_checking="Продолжается проверка конфликтов. Повторите попытку позже." +pulls.is_ancestor="Эта ветка уже включена в целевую ветку. Сливать нечего." +pulls.is_empty="Изменения из этой ветки уже есть в целевой ветке. Это будет пустой коммит." pulls.required_status_check_failed=Некоторые необходимые проверки не были пройдены. pulls.required_status_check_missing=Отсутствуют некоторые обязательные проверки. pulls.required_status_check_administrator=Как администратор, вы все равно можете принять этот запрос на слияние. -pulls.blocked_by_rejection=Официальный рецензент запросил изменения к этому запросу на слияние. +pulls.blocked_by_rejection="Официальный рецензент запросил изменения к этому запросу на слияние." pulls.can_auto_merge_desc=Этот запрос на слияние может быть объединён автоматически. pulls.cannot_auto_merge_desc=Этот запрос на слияние не может быть объединён автоматически. pulls.cannot_auto_merge_helper=Пожалуйста, совершите слияние вручную для урегулирования конфликтов. ```

I'll start with creating a repository at https://forgejo.octopuce.forgejo.org/ which is an instance behind a VPN. It will pull from weblate and be trusted with a token to push a commit to https://codeberg.org/forgejo/forgejo/. It should to be this way to safeguard the token that has write access to the Forgejo repository, in the same way as the private key to sign the releases.

This would complicate things, manually merging weblate pull requests will do.

> I'll start with creating a repository at https://forgejo.octopuce.forgejo.org/ which is an instance behind a VPN. It will pull from weblate and be trusted with a token to push a commit to https://codeberg.org/forgejo/forgejo/. It should to be this way to safeguard the token that has write access to the Forgejo repository, in the same way as the private key to sign the releases. This would complicate things, manually merging weblate pull requests will do.

Despite the [DEFAULT] section being present, its content is duplicated in every other section. I'm retracing @Werenter steps here, my bad. They tried [DEFAULT], [main] and [_] before switching to [common] which appears to be working fine.

The relevant weblate issue is: https://github.com/WeblateOrg/weblate/issues/9702 to which a comment was added asking for help.

Since the issue filed by @delvh is about a different problem, I created a new one https://github.com/WeblateOrg/weblate/issues/10831

Despite the `[DEFAULT]` section being present, its content is duplicated in every other section. I'm [retracing @Werenter steps here, my bad](https://codeberg.org/Werenter/forgejo-translation/issues/2#issuecomment-1408747). They tried `[DEFAULT]`, `[main]` and `[_]` before switching to `[common]` which appears to be working fine. The relevant weblate issue is: https://github.com/WeblateOrg/weblate/issues/9702 to which a [comment](https://github.com/WeblateOrg/weblate/issues/9702#issuecomment-1902765830) was added asking for help. Since the issue filed by @delvh is about a different problem, I created a new one https://github.com/WeblateOrg/weblate/issues/10831

The [common] section is implemented as an alternative to the default section in the Forgejo parser to be weblate friendly. This is verified to produce minimal changes, as @Werenter experienced before.

image

The `[common]` section is [implemented as an alternative](https://codeberg.org/forgejo/forgejo/commit/c040c046eebfd83db78af59eb98512c61c180883) to the default section in the Forgejo parser to be weblate friendly. This is verified to produce minimal changes, as @Werenter experienced before. ![image](/attachments/f9b5c3f5-9837-4bca-b9af-a84d0a712e24)

@0eoc proposed a localization guide, forgejo/docs#381. The checklist was updated.

@0eoc proposed a localization guide, https://codeberg.org/forgejo/docs/pulls/381. The checklist was updated.
Owner
Copy link

As indicated in the Matrix chatroom, I am available to maintain the German translations until someone else wants to.

As indicated in the Matrix chatroom, I am available to maintain the German translations until someone else wants to.

As indicated in the Matrix chatroom, I am available to maintain the German translations until someone else wants to.

You're in.

> As indicated in the Matrix chatroom, I am available to maintain the German translations until someone else wants to. You're in.

The pull request was merged and will replace the i18n development branch tomorrow.

The [pull request](https://codeberg.org/forgejo/forgejo/pulls/2197) was merged and will replace the i18n development branch tomorrow.

I propose to create a localization team which has all the permissions over all the languages, except administrative permissions. Not so much because of a trust problem (at this point everyone is trusted ultimately and there is no real consequence because nothing exists yet anyway). But because accidents happen when working with an account that can destroy the entire project by accident (or part of it).

So there would just be two teams: admin (they need to be extra careful not to destroy anything) and localization (they just need to be careful that the translations are in good shape and do not have to worry about destroying things).

I went ahead and created a proposed localization team with all permissions except dangerous ones (I think?).

image

I propose to create a localization team which has all the permissions over all the languages, except administrative permissions. Not so much because of a trust problem (at this point everyone is trusted ultimately and there is no real consequence because nothing exists yet anyway). But because accidents happen when working with an account that can destroy the entire project by accident (or part of it). So there would just be two teams: admin (they need to be extra careful not to destroy anything) and localization (they just need to be careful that the translations are in good shape and do not have to worry about destroying things). I went ahead and created a proposed `localization` team with [all permissions](https://docs.weblate.org/en/latest/admin/access.html) except dangerous ones (I think?). ![image](/attachments/33f0ca7f-5352-4d52-b016-7af2f9462c16)

Translations are unlocked and I added a banner so people know to not start anything real just yet.

image

Translations are unlocked and I added a banner so people know to not start anything real just yet. ![image](/attachments/ca884505-9f91-4e54-ab10-85d184648782)

To enforce the desired workflow https://docs.weblate.org/en/latest/workflows.html#dedicated-reviewers the "Enable reviews" button must be set in https://translate.codeberg.org/settings/forgejo/#workflow

image

And unprivileged translators are not allowed to translate Approved strings

image

To enforce the desired workflow https://docs.weblate.org/en/latest/workflows.html#dedicated-reviewers the "Enable reviews" button must be set in https://translate.codeberg.org/settings/forgejo/#workflow ![image](/attachments/95d79aa9-3627-400c-b54b-e665c6f8c34e) And unprivileged translators are not allowed to translate Approved strings ![image](/attachments/34f5ea8d-a0b6-4fff-897f-75c8cb3589d1)

By forking Forgejo and associating my fork (earl-warren/forgejo) to the translation project, how that the translations are set to use the actual forgejo project forgejo/forgejo, they can't land because the fork is not where it is supposed to be.

@Gusted @fnetX could you please delete https://codeberg.org/translate/forgejo ? So that it can be re-created to be a fork of https://codeberg.org/forgejo/forgejo instead.

By forking Forgejo and associating my fork (earl-warren/forgejo) to the translation project, how that the translations are set to use the actual forgejo project forgejo/forgejo, they can't land because the fork is not where it is supposed to be. @Gusted @fnetX could you please delete https://codeberg.org/translate/forgejo ? So that it can be re-created to be a fork of https://codeberg.org/forgejo/forgejo instead.

I propose to create a localization team which has all the permissions over all the languages, except administrative permissions. Not so much because of a trust problem (at this point everyone is trusted ultimately and there is no real consequence because nothing exists yet anyway). But because accidents happen when working with an account that can destroy the entire project by accident (or part of it).

So there would just be two teams: admin (they need to be extra careful not to destroy anything) and localization (they just need to be careful that the translations are in good shape and do not have to worry about destroying things).

I went ahead and created a proposed localization team with all permissions except dangerous ones (I think?).

image

The "Manage repository" permission was removed.

image

> I propose to create a localization team which has all the permissions over all the languages, except administrative permissions. Not so much because of a trust problem (at this point everyone is trusted ultimately and there is no real consequence because nothing exists yet anyway). But because accidents happen when working with an account that can destroy the entire project by accident (or part of it). > > So there would just be two teams: admin (they need to be extra careful not to destroy anything) and localization (they just need to be careful that the translations are in good shape and do not have to worry about destroying things). > > I went ahead and created a proposed `localization` team with [all permissions](https://docs.weblate.org/en/latest/admin/access.html) except dangerous ones (I think?). > > ![image](/attachments/33f0ca7f-5352-4d52-b016-7af2f9462c16) > The "Manage repository" permission was removed. ![image](/attachments/6a4e639a-afae-472f-9731-fb12fa3a42c1)

First rebase of the translations at forgejo/forgejo#2245

First rebase of the translations at https://codeberg.org/forgejo/forgejo/pulls/2245

I propose to approve all existing strings, thus preventing them from being modified by random users.

image

https://translate.codeberg.org/projects/forgejo/forgejo/#bulk-edit

There are pros and cons to doing that pro: there is no need to worry about random edits of the existing strings. cons: fixing the existing strings can only be done by team members and random users can only suggest modifications.

I propose to approve all existing strings, thus preventing them from being modified by random users. ![image](/attachments/2792f90a-e95f-484a-acf4-bc0a2444fb0e) https://translate.codeberg.org/projects/forgejo/forgejo/#bulk-edit There are pros and cons to doing that pro: there is no need to worry about random edits of the existing strings. cons: fixing the existing strings can only be done by team members and random users can only suggest modifications.

A bug happened (server error) on weblate and was reported to the maintainers of translate.codeberg.org.

A bug happened (server error) on weblate and [was reported to the maintainers of translate.codeberg.org](https://matrix.to/#/!KYugiRoBoYIuUcyScE:bubu1.eu/$uJTxO3-vpEwfe4TKD1V3MTj6VOzRdWiKA0Un13RYiWk?via=bubu1.eu&via=matrix.org&via=tchncs.de).

All translations are now in the default branch of the main https://codeberg.org/forgejo/forgejo repository and next.forgejo.org runs with the translations from weblate.

Good bye Crowdin.

All translations are now in the default branch of the main https://codeberg.org/forgejo/forgejo repository and next.forgejo.org runs with the translations from weblate. Good bye Crowdin.

@earl-warren, about translations teams. Can I make reviews? Now Weblate's interface looks like I am simple translator, no reviewer.

@earl-warren, about translations teams. Can I make reviews? Now Weblate's interface looks like I am simple translator, no reviewer.

@Werenter sure! I may have changed your permissions, they are back now. You should have an invitation now, sorry for this mistake.

Could you then formally apply to be on the team, same as everyone else (I think?) did at https://codeberg.org/forgejo/governance/issues

@Werenter sure! I may have changed your permissions, they are back now. You should have an invitation now, sorry for this mistake. Could you then [formally apply](https://forgejo.org/docs/v1.21/developer/localization/) to be on the team, same as everyone else (I think?) did at https://codeberg.org/forgejo/governance/issues

Could you then formally apply to be on the team, same as everyone else (I think?) did at https://codeberg.org/forgejo/governance/issues

Ok, I will do it soon.

> Could you then formally apply to be on the team, same as everyone else (I think?) did at https://codeberg.org/forgejo/governance/issues Ok, I will do it soon.

(削除) I am interesting in helping out with the Brazilian Portuguese (pt_BR) translation. I have previous translation experience (and I was also trying to make the translation be more natural in Gitea's crowdin). (削除ここまで)

EDIT: just found the application page

~~I am interesting in helping out with the Brazilian Portuguese (`pt_BR`) translation. I have previous translation experience (and I was also trying to make the translation be more natural in Gitea's crowdin).~~ EDIT: just found the application page
Sign in to join this conversation.
No Branch/Tag specified
No results found.
No results found.
Labels
Clear labels
User research - Accessibility
Requires input about accessibility features, likely involves user testing.
User research - Blocked
Do not pick as-is! We are happy if you can help, but please coordinate with ongoing redesign in this area.
User research - Community
Community features, such as discovering other people's work or otherwise feeling welcome on a Forgejo instance.
User research - Config (instance)
Instance-wide configuration, authentication and other admin-only needs.
User research - Errors
How to deal with errors in the application and write helpful error messages.
User research - Filters
How filter and search is being worked with.
User research - Future backlog
The issue might be inspiring for future design work.
User research - Git workflow
AGit, fork-based and new Git workflow, PR creation etc
User research - Labels
Active research about Labels
User research - Moderation
Moderation Featuers for Admins are undergoing active User Research
User research - Needs input
Use this label to let the User Research team know their input is requested.
User research - Notifications/Dashboard
Research on how users should know what to do next.
User research - Rendering
Text rendering, markup languages etc
User research - Repo creation
Active research about the New Repo dialog.
User research - Repo units
The repo sections, disabling them and the "Add more" button.
User research - Security
User research - Settings (in-app)
How to structure in-app settings in the future?
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
5 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Reference
forgejo/discussions#104
Reference in a new issue
forgejo/discussions
No description provided.
Delete branch "%!s()"

Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?