Ciągła lokalizacja

Istnieje infrastruktura, dzięki której Twoje tłumaczenie ściśle odpowiada rozwojowi. W ten sposób tłumacze mogą pracować nad tłumaczeniami przez cały czas, zamiast pracować nad ogromną ilością nowego tekstu tuż przed wydaniem.

Zobacz także

Integracja z Weblate describes basic ways to integrate your development with Weblate.

To jest proces:

  1. Developers make changes and push them to the VCS repository.

  2. Optionally the translation files are updated (this depends on the file format, see Why does Weblate still show old translation strings when I’ve updated the template?).

  3. Weblate pulls changes from the VCS repository, see Aktualizacja repozytoriów.

  4. Once Weblate detects changes in translations, translators are notified based on their subscription settings.

  5. Translators submit translations using the Weblate web interface, or upload offline changes.

  6. Once the translators are finished, Weblate commits the changes to the local repository (see Leniwe zatwierdzenia) and pushes them back if it has permissions to do so (see Wypychanie zmian z Weblate).

digraph translations { graph [fontname = "sans-serif", fontsize=10]; node [fontname = "sans-serif", fontsize=10, margin=0.1, height=0]; edge [fontname = "sans-serif", fontsize=10]; "Developers" [shape=box, fillcolor="#144d3f", fontcolor=white, style=filled]; "Translators" [shape=box, fillcolor="#144d3f", fontcolor=white, style=filled]; "Developers" -> "VCS repository" [label=" 1. Push "]; "VCS repository" -> "VCS repository" [label=" 2. Updating translations ", style=dotted]; "VCS repository" -> "Weblate" [label=" 3. Pull "]; "Weblate" -> "Translators" [label=" 4. Notification "]; "Translators" -> "Weblate" [label=" 5. Translate "]; "Weblate" -> "VCS repository" [label=" 6. Push "]; }

Aktualizacja repozytoriów

You should set up some way of updating backend repositories from their source.

  • Use „Zaczepy” powiadomień to integrate with most of common code hosting services

  • Manually trigger update either in the repository management or using API or Klient Weblate

  • Enable AUTO_UPDATE to automatically update all components on your Weblate instance

  • Execute updategit (with selection of project or –all to update all)

Whenever Weblate updates the repository, the post-update addons will be triggered, see Dodatki.

Unikanie konfliktów scalania

The merge conflicts from Weblate arise when same file was changed both in Weblate and outside it. There are two approaches to deal with that - avoid edits outside Weblate or integrate Weblate into your updating process, so that it flushes changes prior to updating the files outside Weblate.

The first approach is easy with monolingual files - you can add new strings within Weblate and leave whole editing of the files there. For bilingual files, there is usually some kind of message extraction process to generate translatable files from the source code. In some cases this can be split into two parts - one for the extraction generates template (for example gettext POT is generated using xgettext) and then further process merges it into actual translations (the gettext PO files are updated using msgmerge). You can perform the second step within Weblate and it will make sure that all pending changes are included prior to this operation.

The second approach can be achieved by using API to force Weblate to push all pending changes and lock the translation while you are doing changes on your side.

The script for doing updates can look like this:

# Lock Weblate translation
wlc lock
# Push changes from Weblate to upstream repository
wlc push
# Pull changes from upstream repository to your local copy
git pull
# Update translation files, this example is for Django
./manage.py makemessages --keep-pot -a
git commit -m 'Locale updates' -- locale
# Push changes to upstream repository
git push
# Tell Weblate to pull changes (not needed if Weblate follows your repo
# automatically)
wlc pull
# Unlock translations
wlc unlock

If you have multiple components sharing same repository, you need to lock them all separately:

wlc lock foo/bar
wlc lock foo/baz
wlc lock foo/baj

Informacja

The example uses Klient Weblate, which needs configuration (API keys) to be able to control Weblate remotely. You can also achieve this using any HTTP client instead of wlc, e.g. curl, see API.

Automatyczne otrzymywanie zmian z GitHub

Weblate comes with native support for GitHub.

If you are using Hosted Weblate, the recommended approach is to install the Weblate app, that way you will get the correct setup without having to set much up. It can also be used for pushing changes back.

To receive notifications on every push to a GitHub repository, add the Weblate Webhook in the repository settings (Webhooks) as shown on the image below:

../_images/github-settings.png

For the payload URL, append /hooks/github/ to your Weblate URL, for example for the Hosted Weblate service, this is https://hosted.weblate.org/hooks/github/.

You can leave other values at default settings (Weblate can handle both content types and consumes just the push event).

Automatyczne otrzymywanie zmian z Bitbucket

Weblate has support for Bitbucket webhooks, add a webhook which triggers upon repository push, with destination to /hooks/bitbucket/ URL on your Weblate installation (for example https://hosted.weblate.org/hooks/bitbucket/).

../_images/bitbucket-settings.png

Automatyczne otrzymywanie zmian z GitHub

Weblate has support for GitLab hooks, add a project webhook with destination to /hooks/gitlab/ URL on your Weblate installation (for example https://hosted.weblate.org/hooks/gitlab/).

Automatyczne odbieranie zmian Pagure

Nowe w wersji 3.3.

Weblate has support for Pagure hooks, add a webhook with destination to /hooks/pagure/ URL on your Weblate installation (for example https://hosted.weblate.org/hooks/pagure/). This can be done in Activate Web-hooks under Project options:

../_images/pagure-webhook.png

Automatically receiving changes from Azure Repos

Nowe w wersji 3.8.

Weblate has support for Azure Repos web hooks, add a webhook for Code pushed event with destination to /hooks/azure/ URL on your Weblate installation (for example https://hosted.weblate.org/hooks/azure/). This can be done in Service hooks under Project settings.

Automatically receiving changes from Gitea Repos

Nowe w wersji 3.9.

Weblate has support for Gitea webhooks, add a Gitea Webhook for Push events event with destination to /hooks/gitea/ URL on your Weblate installation (for example https://hosted.weblate.org/hooks/gitea/). This can be done in Webhooks under repository Settings.

Automatically receiving changes from Gitee Repos

Nowe w wersji 3.9.

Weblate has support for Gitee webhooks, add a WebHook for Push event with destination to /hooks/gitee/ URL on your Weblate installation (for example https://hosted.weblate.org/hooks/gitee/). This can be done in WebHooks under repository Management.

Automatyczna aktualizacja repozytoriów co noc

Weblate automatically fetches remote repositories nightly to improve performance when merging changes later. You can optionally turn this into doing nightly merges as well, by enabling AUTO_UPDATE.

Wypychanie zmian z Weblate

Each translation component can have a push URL set up (see URL repozytorium dla push), and in that case Weblate will be able to push change to the remote repository. Weblate can be also be configured to automatically push changes on every commit (this is default, see Prześlij po zatwierdzeniu zmian). If you do not want changes to be pushed automatically, you can do that manually under Repository maintenance or using API via wlc push.

The push options differ based on the Integracja kontroli wersji used, more details are found in that chapter.

In case you do not want direct pushes by Weblate, there is support for GitHub, GitLab, Pagure pull requests or Gerrit reviews, you can activate these by choosing GitHub, GitLab, Gerrit or Pagure as System kontroli wersji in Konfiguracja komponentu.

Overall, following options are available with Git, GitHub and GitLab:

Pożądana konfiguracja

System kontroli wersji

URL repozytorium dla push

Gałąź Push

Bez wypychania zmian

Git

pusto

pusto

Wypychaj bezpośrednio

Git

SSH URL

pusto

Wypychanie do oddzielnej gałęzi

Git

SSH URL

Nazwa gałęzi

Żądanie ściągnięcia GitHub z forka

GitHub

pusto

pusto

Żądanie ściągnięcia GitHub z gałęzi

GitHub

SSH URL 1

Nazwa gałęzi

Żądanie scalenia GitLab z forka

GitLab

pusto

pusto

GitLab merge request from branch

GitLab

SSH URL 1

Nazwa gałęzi

Pagure merge request from fork

Pagure

pusto

pusto

Pagure merge request from branch

Pagure

SSH URL 1

Nazwa gałęzi

1(1,2,3)

Can be empty in case Repozytorium kodu źródłowego supports pushing.

Informacja

You can also enable automatic pushing of changes after Weblate commits, this can be done in Prześlij po zatwierdzeniu zmian.

Zobacz także

See Dostęp do repozytoriów for setting up SSH keys, and Leniwe zatwierdzenia for info about when Weblate decides to commit changes.

Chronione gałęzie

If you are using Weblate on protected branch, you can configure it to use pull requests and perform actual review on the translations (what might be problematic for languages you do not know). An alternative approach is to waive this limitation for the Weblate push user.

For example on GitHub this can be done in the repository configuration:

../_images/github-protected.png

Scalanie lub odbudowa bazy

By default, Weblate merges the upstream repository into its own. This is the safest way in case you also access the underlying repository by other means. In case you don’t need this, you can enable rebasing of changes on upstream, which will produce a history with fewer merge commits.

Informacja

Rebasing can cause you trouble in case of complicated merges, so carefully consider whether or not you want to enable them.

Interakcja z innymi

Weblate makes it easy to interact with others using its API.

Zobacz także

API

Leniwe zatwierdzenia

The behaviour of Weblate is to group commits from the same author into one commit if possible. This greatly reduces the number of commits, however you might need to explicitly tell it to do the commits in case you want to get the VCS repository in sync, e.g. for merge (this is by default allowed for the Managers group, see Kontrola dostępu).

The changes in this mode are committed once any of the following conditions are fulfilled:

Podpowiedź

Commits are created for every component. So in case you have many components you will still see lot of commits. You might utilize Zatwierdzenie Squash Git addon in that case.

If you want to commit changes more frequently and without checking of age, you can schedule a regular task to perform a commit:

CELERY_BEAT_SCHEDULE = {
    # Unconditionally commit all changes every 2 minutes
    "commit": {
        "task": "weblate.trans.tasks.commit_pending",
        # Ommiting hours will honor per component settings,
        # otherwise components with no changes older than this
        # won't be committed
        "kwargs": {"hours": 0},
        # How frequently to execute the job in seconds
        "schedule": 120,
    }
}

Przetwarzanie repozytorium za pomocą skryptów

The way to customize how Weblate interacts with the repository is Dodatki. Consult Wykonywanie skryptów z dodatku for info on how to execute external scripts through addons.

Zachowanie takich samych tłumaczeń między komponentami

Once you have multiple translation components, you might want to ensure that the same strings have same translation. This can be achieved at several levels.

Propagacja tłumaczeń

With translation propagation enabled (what is the default, see Konfiguracja komponentu), all new translations are automatically done in all components with matching strings. Such translations are properly credited to currently translating user in all components.

Informacja

The translation propagation requires the key to be match for monolingual translation formats, so keep that in mind when creating translation keys.

Kontrola spójności

The Niespójność check fires whenever the strings are different. You can utilize this to review such differences manually and choose the right translation.

Tłumaczenie automatyczne

Automatic translation based on different components can be way to synchronize the translations across components. You can either trigger it manually (see Tłumaczenie automatyczne) or make it run automatically on repository update using addon (see Tłumaczenie automatyczne).