Lokalisasi berkelanjutan

Tersedia infrastruktur yang memastikan terjemahan Anda mengikuti perkembangan secara saksama. Dengan demikian, penerjemah dapat mengerjakan terjemahan secara berkelanjutan, alih-alih mengerjakan sejumlah besar teks baru tepat sebelum dirilis.

Lihat juga

Integrasi dengan Weblate describes basic ways to integrate your development with Weblate. Code hosting integrations lists provider-specific setup steps for common code hosting sites.

Ini prosesnya:

  1. Pengembang membuat perubahan dan mengirimkannya ke repositori VCS.

  2. Secara opsional, berkas terjemahan diperbarui, lihat Memperkenalkan string baru.

  3. Weblate menarik perubahan dari repositori VCS, mengurai berkas terjemahan dan memperbarui basis datanya, lihat Memperbarui repositori.

  4. Penerjemah mengirimkan terjemahan menggunakan antarmuka web Weblate, atau mengunggah perubahan secara luring.

  5. Setelah penerjemah selesai, Weblate melakukan perubahan ke repositori lokal (lihat Komit malas).

  6. Changes are pushed back to the upstream repository (see Mendorong perubahan dari Weblate).

digraph translations { graph [fontname = "sans-serif", fontsize=10, ranksep=0.6, newrank=true]; node [fontname = "sans-serif", fontsize=10, margin=0.15]; edge [fontname = "sans-serif", fontsize=10]; subgraph cluster_codehosting { rank=same; graph [color=lightgrey, label="Upstream code hosting", style=filled ]; "VCS repository" [shape=cylinder]; } subgraph cluster_weblate { rank=same; graph [color=lightgrey, label="Weblate", style=filled ]; repo [label="Weblate repository", shape=cylinder]; database [label=Database, shape=cylinder]; } "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" -> repo [label=" 3. Pull "]; repo -> database [label=" 3. Parse translations "]; "database" -> repo [label=" 5. Commit changes "]; "Translators" -> "database" [label=" 4. Translate "]; "repo" -> "VCS repository" [label=" 6. Push repository "]; }

Petunjuk

Pengehosan kode hulu tidak diperlukan, Anda dapat menggunakan Weblate dengan Berkas lokal di mana hanya ada repositori di dalam Weblate.

Memperbarui repositori

Anda harus menyiapkan beberapa cara untuk memperbarui repositori backend dari sumbernya.

Jika Weblate memperbarui repositori, pengaya pasca-pembaruan akan dipicu, lihat Pengaya.

Menghindari konflik penggabungan

Konflik penggabungan dari Weblate muncul ketika berkas yang sama diubah baik di dalam maupun di luar Weblate. Tergantung situasinya, ada beberapa pendekatan yang mungkin dapat membantu:

Menghindari konflik penggabungan dengan mengubah berkas terjemahan hanya di Weblate

Menghindari penyuntingan di luar Weblate mudah dilakukan dengan berkas ekabahasa — Anda dapat menambahkan string baru di dalam Weblate dan membiarkan seluruh proses penyuntingan berkas tetap di sana. Untuk berkas dwibahasa, biasanya terdapat semacam proses ekstraksi pesan untuk menghasilkan berkas yang dapat diterjemahkan dari kode sumber. Dalam beberapa kasus, proses ini dapat dibagi menjadi dua bagian:

  1. Ekstraksi menghasilkan templat (misalnya gettext POT dihasilkan menggunakan xgettext).

  2. Proses selanjutnya menggabungkannya ke dalam terjemahan aktual (berkas PO gettext diperbarui menggunakan msgmerge).

Anda dapat melakukan langkah kedua dalam Weblate dan itu akan memastikan bahwa semua perubahan yang tertunda disertakan sebelum operasi ini.

Menghindari konflik penggabungan dengan mengunci Weblate saat melakukan perubahan eksternal

Mengintegrasikan Weblate ke dalam proses pembaruan Anda sehingga ia membuang perubahan sebelum memperbarui berkas di luar Weblate dapat dicapai dengan menggunakan API REST Weblate untuk memaksa Weblate mendorong semua perubahan yang tertunda dan mengunci terjemahan saat Anda membuat perubahan di pihak Anda.

Skrip untuk melakukan pembaruan dapat terlihat seperti ini:

# 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

Jika Anda memiliki beberapa komponen yang berbagi repositori yang sama, Anda perlu menguncinya semua secara terpisah:

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

Catatan

Contoh ini menggunakan Klien Weblate, yang memerlukan konfigurasi (kunci API) agar dapat mengontrol Weblate dari jarak jauh. Anda juga dapat melakukannya menggunakan klien HTTP apa pun selain Klien Weblate, misalnya curl, lihat API REST Weblate.

Pemeliharaan repositori

The Repository maintenance view shows repository status for a project, component, or translation and lets privileged users run maintenance operations from the user interface.

The same actions can also be triggered using API REST Weblate or, for the supported subset, Klien Weblate.

Availability of individual actions depends on permissions, the configured version control system, whether pushing is configured, and whether the selected object can be locked.

Tindakan

What it does

Typical use

Commit

Commits pending changes stored in Weblate to the local repository.

Flush pending Weblate changes before doing repository work elsewhere.

Push

Pushes committed local repository changes to the configured upstream.

Send committed translations upstream when automatic push is disabled or delayed.

Update

Fetches upstream changes and integrates them using the component's configured Gaya penggabungan.

Bring Weblate in sync with upstream using the default integration strategy.

Update with merge

Fetches upstream changes and integrates them with an explicit merge.

Override the default merge style for a single update.

Update with rebase

Fetches upstream changes and rebases local Weblate commits on top of upstream.

Keep history linear when that matches your workflow.

Update with merge without fast-forward

Fetches upstream changes and creates an explicit merge commit even when a fast-forward would be possible.

Preserve merge commits for auditing or branch-management reasons.

Lock / Unlock

Prevents or allows translators to make further changes in Weblate.

Freeze translation changes while doing repository maintenance outside Weblate.

Reset and discard

Resets Weblate's local repository to upstream and discards pending Weblate changes.

Use when upstream should overwrite the local Weblate repository state.

Reset and reapply

Resets Weblate's local repository to upstream while preserving pending translations. See Reset and reapply recovery behavior.

Recover from diverged history while keeping pending Weblate translations.

Cleanup

Removes untracked files and stale branches from the local repository checkout.

Clean up leftover files or stale repository state in Weblate's checkout.

Synchronize

Forces Weblate to write all known translations back to the repository files.

Repair cases where repository files became out of sync with the database state.

Rescan

Re-reads translation files from the local repository into Weblate.

Import file changes after manual repository work or file creation.

Reset and reapply recovery behavior

The Reset and reapply operation keeps pending translations from Weblate while resetting the local repository state to match upstream.

The operation can restore pending translations only when the target language files still exist after the reset or when Weblate can create them for the component, for example using a valid Templat untuk terjemahan baru.

If neither of these conditions is met, Weblate keeps the pending changes in its database and reports a recovery error instead of failing later with a generic parse error.

Menghindari konflik penggabungan dengan berfokus pada operasi Git

Bahkan ketika Weblate merupakan satu-satunya sumber perubahan pada berkas terjemahan, konflik dapat muncul saat menggunakan pengaya Lumatkan komit Git, Gaya penggabungan dikonfigurasikan ke Basis ulang, atau Anda melumatkan komit di luar Weblate (misalnya, saat menggabungkan permintaan tarik).

The reason for merge conflicts is different in this case. Weblate can have new local commits after you merge earlier Weblate commits upstream. This typically happens if merging is not automated and changes wait for days or weeks for a human review. Git is then sometimes no longer able to identify upstream changes as matching the Weblate ones and refuses to perform a rebase.

Squash merging Weblate changes makes this harder to recover from. A squash merge creates a new commit instead of preserving the individual Weblate commits in the upstream history. Weblate still has the original commits in its local repository, and Git can no longer prove that upstream already contains them. If the conflict was also resolved manually, the file contents can differ from both repositories, so Weblate can keep failing to update even after the pull request was merged upstream.

If upstream no longer contains Weblate commits because they were squash merged, updating the repository might not be enough. Use Reset and reapply from Repository maintenance to reset Weblate to upstream while keeping pending translations; see Reset and reapply recovery behavior. Use Reset and discard only when upstream should fully replace Weblate's local changes.

Untuk mengatasi hal ini, Anda perlu meminimalkan jumlah perubahan yang tertunda di Weblate saat Anda menggabungkan permintaan tarik, atau menghindari konflik sepenuhnya dengan tidak melumatkan perubahan.

Berikut beberapa pilihan untuk menghindarinya:

  • Do not use Lumatkan komit Git or squash merging for Weblate changes. Squashing is why Git might no longer recognize the changes after merging.

  • When resolving conflicts outside Weblate, merge the Weblate commits with a regular merge commit and push that result upstream. Do not squash merge the conflict-resolution pull request.

  • Biarkan Weblate melakukan komit yang tertunda sebelum penggabungan. Ini akan memperbarui permintaan tarik dengan semua perubahannya, dan kedua repositori akan sinkron.

  • Gunakan fitur tinjauan di Weblate (lihat Alur kerja terjemahan) sehingga Anda dapat secara otomatis menggabungkan permintaan penarikan GitHub setelah CI lolos.

  • Gunakan penguncian di Weblate untuk menghindari perubahan saat permintaan tarik GitHub sedang ditinjau.

Lihat juga

Klien Weblate

Code hosting notifications

Provider-specific app and webhook instructions for GitHub, GitLab, Bitbucket, Pagure, Azure Repos, Gitea, Forgejo, and Gitee are covered in Code hosting integrations.

Provider-specific notifications

These legacy anchors are kept for compatibility. Current provider-specific app and webhook setup is documented in Code hosting integrations.

Memperbarui repositori secara otomatis setiap malam

Weblate secara otomatis mengambil repositori jarak jauh setiap malam untuk meningkatkan kinerja saat menggabungkan perubahan nanti. Anda juga dapat mengaktifkan penggabungan setiap malam dengan mengaktifkan AUTO_UPDATE.

Mendorong perubahan dari Weblate

Each translation component can have a push URL set up (see URL dorong repositori), and in that case Weblate will be able to push changes to the remote repository. Weblate can also be configured to automatically push changes on every commit, see Dorong dalam komit.

For the push options table and provider-specific pull, merge, and review request workflows, see Mendorong perubahan dari Weblate.

Lihat juga

Lihat Mengakses repositori untuk menyiapkan kunci SSH, dan Komit malas untuk info tentang kapan Weblate memutuskan untuk komit perubahan.

Cabang yang dilindungi

Jika Anda menggunakan Weblate pada cabang yang dilindungi, Anda dapat mengkonfigurasikannya untuk menggunakan permintaan tarik dan melakukan tinjauan aktual terhadap terjemahan (yang mungkin bermasalah untuk bahasa yang tidak Anda pahami). Pendekatan alternatif adalah dengan mengabaikan batasan ini bagi pengguna dorong Weblate.

Misalnya pada GitHub hal ini dapat dilakukan dalam konfigurasi repositori:

../_images/github-protected.png

Berinteraksi dengan orang lain

Weblate memudahkan interaksi dengan orang lain menggunakan API-nya.

Lihat juga

API REST Weblate

Komit malas

Weblate menggrupkan komit dari penulis yang sama ke dalam satu komit jika memungkinkan. Hal ini sangat mengurangi jumlah komit, namun Anda mungkin perlu secara eksplisit memerintahkannya untuk melakukan komit jika Anda ingin menyinkronkan repositori VCS, misalnya untuk penggabungan (ini secara bawaan diizinkan untuk grup Pengelola, lihat Daftar hak akses).

Perubahan dalam mode ini dilakukan apabila salah satu kondisi berikut terpenuhi:

  • Orang lain mengubah string yang sudah diubah.

  • Penggabungan dari hulu terjadi.

  • Komit eksplisit diminta.

  • Permintaan untuk mengunduh berkas diminta.

  • Perubahan lebih lama dari periode yang didefinisikan sebagai Usia perubahan untuk komit pada Konfigurasi komponen.

Petunjuk

Komit dibuat untuk setiap komponen. Jika Anda memiliki banyak komponen, Anda akan melihat banyak komit. Anda dapat menggunakan pengaya Lumatkan komit Git dalam kasus tersebut.

Jika Anda ingin melakukan komit perubahan lebih sering tanpa memeriksa usia, Anda dapat menjadwalkan tugas rutin untuk melakukan komit. Ini dapat dilakukan menggunakan Tugas Berkala di Antarmuka admin Django. Pertama, buat Interval yang diinginkan (misalnya 120 detik). Kemudian, tambahkan tugas berkala baru dan pilih weblate.trans.tasks.commit_pending sebagai Tugas dengan {"hours": 0} sebagai Argumen Kata Kunci dan interval yang diinginkan.

Memproses repositori dengan skrip

Cara menyesuaikan bagaimana Weblate berinteraksi dengan repositori adalah Pengaya. Konsultasikan Menjalankan skrip dari pengaya untuk informasi tentang cara menjalankan skrip eksternal melalui pengaya.

Menjaga terjemahan tetap sama di semua komponen

Setelah Anda memiliki beberapa komponen terjemahan, Anda mungkin ingin memastikan bahwa string yang sama memiliki terjemahan yang sama. Hal ini dapat dicapai pada beberapa tingkatan.

Propagasi terjemahan

Dengan Izinkan propagasi terjemahan diaktifkan (lihat Konfigurasi komponen sebagai nilai bawaan), semua terjemahan baru akan otomatis dilakukan di semua komponen dengan string yang cocok. Terjemahan tersebut akan dikreditkan dengan benar kepada pengguna yang sedang menerjemahkan di semua komponen.

Prakondisi propagasi:

  • Semua komponen harus berada dalam satu proyek (menghubungkan komponen tidak cukup).

  • Aktifkan Izinkan propagasi terjemahan untuk secara otomatis menggunakan kembali terjemahan untuk string yang cocok.

  • Propagasi terjemahan memerlukan kunci yang cocok dengan format terjemahan ekabahasa, jadi ingatlah hal itu saat membuat kunci terjemahan.

  • String disebarkan saat menerjemahkan, string yang dimuat dari repositori tidak disebarkan.

Tip

Fitur ini saat ini memiliki keterbatasan, dan kami ingin membuatnya lebih universal. Silakan sampaikan masukan Anda di https://github.com/WeblateOrg/weblate/issues/3166.

Pemeriksaan konsistensi

Pemeriksaan Tidak konsisten akan aktif jika string beda. Anda dapat menggunakan ini untuk meninjau perbedaan tersebut secara manual dan memilih terjemahan yang tepat.

Terjemahan otomatis

Terjemahan otomatis berdasarkan komponen yang berbeda dapat menjadi cara untuk menyinkronkan terjemahan di seluruh komponen. Anda dapat memicunya secara manual (lihat Terjemahan otomatis) atau membuatnya berjalan secara otomatis pada pembaruan repositori menggunakan pengaya (lihat Terjemahan otomatis).