継続的な現地語化

開発と翻訳を密接に行えるように、インフラを整備しています。これにより、翻訳者は常に翻訳作業を続けることができ、リリース直前に膨大な量の新しいテキストを扱わずにすみます。

参考

Weblate との統合 で、開発環境と Weblate を統合する基本的な方法を説明しています。

処理の流れ:

  1. 開発者は変更を行い、VCS リポジトリにプッシュする。

  2. オプションで、翻訳ファイルを更新する(これはファイル形式によって異なる。参照: テンプレートを更新しても、Weblate に以前の翻訳文が表示されるのはなぜですか?)。

  3. Weblate が、VCS リポジトリから変更をプルする。参照: リポジトリの更新

  4. Weblate が翻訳の変更を検出すると、登録者の設定に基づいて翻訳者に通知する。

  5. 翻訳者は、Weblate の管理画面を使用して翻訳を送信するか、オフラインでの変更をアップロードします。

  6. 翻訳者が作業を終えると、Weblate は変更をローカル リポジトリにコミットし(参照: 遅延コミット)、権限があれば元のリポジトリにプッシュします(参照: 変更点を 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 "]; }

リポジトリの更新

ソースからバックエンド リポジトリを更新する方法を何か設定することが必要です。

Weblate がリポジトリを更新するたびに、更新後のアドオンが起動。参照: アドオン

マージ競合の回避

Weblate によるマージ競合は、同じファイルが Weblate 内と外部の両方で変更された場合に発生します。対処方法は 2 つあります。Weblate 外部での編集を避けるか、Weblate を更新プロセスに統合して、Weblate 外部でファイルを更新する前に 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.

2 番目の方法は、Weblate の REST API を使用して、保留中の変更をすべて強制的にプッシュし、自分で変更を行っている間に翻訳をロックして実現します。

更新を実行するスクリプトの例:

# 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

複数のコンポーネントが同じリポジトリを共有している場合、コンポーネントすべてを個別にロックすることが必要です。すべてロックする例:

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

注釈

この例では、Weblate クライアント を使用します。これには、Weblate をリモートで制御するための設定(API キー)が必要です。wlc の代わりにどのような HTTP クライアントを使用しても実現できます(curl など) 。参照: Weblate の REST API

変更を GitHub から自動受信

Weblate は、GitHub に正式に対応しています。

Hosted Weblate を使用している場合は、Weblate app をインストールしてください。そうすれば、簡単に正しい初期設定ができます。変更を元に戻すためにも使用できます。

通知を、GitHub リポジトリへプッシュするたびに受け取るには、リポジトリの設定画面(Webhook)から Weblate の Web フックを追加します。Web フックの設定画面:

../_images/github-settings.png

独自 URL の場合、Weblate URL に /hooks/github/ を追加します。たとえば、Hosted Weblate サービスの場合、https://hosted.weblate.org/hooks/github/ となります。

その他の値は、既定の設定に従えます(Weblate は両方の種類のコンテンツを処理でき、プッシュ イベントのみを使用する)。

変更を Bitbucket から自動受信

Weblate は、Bitbucket の Web フックに対応しています。リポジトリのプッシュ時に起動する Web フックを、インストールした Weblate の URL に /hooks/bitbucket/ を追加して、宛先(例: https://hosted.weblate.org/hooks/bitbucket/)を指定します。

../_images/bitbucket-settings.png

変更を GitLab から自動受信

Weblate は、GitLab のフックに対応しています。プロジェクトの Web フックを、インストールした Weblate の URL に /hooks/gitlab/ を追加して、宛先を指定します(例: https://hosted.weblate.org/hooks/gitlab/)。

変更を Pagure から自動受信

バージョン 3.3 で追加.

Weblate は、Pagure のフックに対応しています。Web フックを、インストールした Weblate の URL に /hooks/pagure/ を追加して、宛先を指定します(例: https://hosted.weblate.org/hooks/pagure/)。Project options の中で Activate Web-hooks を設定する方法:

../_images/pagure-webhook.png

変更を Azure リポジトリから自動受信

バージョン 3.8 で追加.

Weblate は、Azure リポジトリの Web フックに対応しています。コード プッシュ イベントの Web フックを、インストールした Weblate の URL に /hooks/azure/ を追加して、宛先を指定します(例: https://hosted.weblate.org/hooks/azure/)。これは、プロジェクトの設定 の中にある フック サービス で指定します。

変更を Gitea リポジトリから自動受信

バージョン 3.9 で追加.

Weblate は、Gitea の Web フックに対応しています。プッシュ イベント 用の Gitea の Web フック を、インストールした Weblate の URL に /hooks/gitea/ を追加して、宛先を指定します(例: https://hosted.weblate.org/hooks/gitea/)。これは、Web フック リポジトリの中にある 設定 で指定します。

変更を Gitee リポジトリから自動受信

バージョン 3.9 で追加.

Weblate は、Gitee の Web フックに対応しています。プッシュ イベント用の Web フック を、インストールした Weblate の URL に /hooks/gitee/ を追加して、宛先を指定します(例: https://hosted.weblate.org/hooks/gitee/)。これは、管理 リポジトリの中にある Web フック で指定します。

リポジトリを毎晩自動更新

Weblate は、リモート リポジトリを夜間に自動的に取得し、後で変更をマージする性能を向上させます。オプションで、自動更新 の設定を有効にすると、これを夜間のマージの実行に変更できます。

変更点を Weblate からプッシュ

各翻訳コンポーネントは、プッシュ URL を指定できます(参照: :ref: component-push)、その場合、Weblate は変更を、リモート リポジトリにプッシュします。 Weblate は、変更をコミットのたびに自動的にプッシュする設定にすることもできます (これはデフォルトです、参照: コミット時にプッシュする)。変更を自動的にプッシュさせない場合は、リポジトリのメンテナンス から手動で操作するか、wlc push 経由で API を使用して操作できます。

プッシュのオプションは、使用する バージョン管理の統合 によって異なります。詳細については、その章を確認してください。

Weblate による直接のプッシュが不要な場合は、GitHub プルリクエストGitLab マージリクエストGitea プルリクエストPagure マージリクエスト のプルリクエストまたは Gerrit 査読に対応しています。これを有効にするには、コンポーネント構成バージョン管理システム として GitHubGitLabGiteaGerrit または Pagure を選択します。

全体で使用できる、Git、GitHub、GitLab のオプション:

理想的な初期設定

バージョン管理システム

リポジトリの送信先 URL

ブランチにプッシュ

プッシュしない

Git

直接プッシュ

Git

SSH URL

別のブランチに push

Git

SSH URL

ブランチ名

フォークの GitHub プル リクエスト

GitHub プルリクエスト

ブランチの GitHub プル リクエスト

GitHub プルリクエスト

SSH URL 1

ブランチ名

フォークの GitLab マージ リクエスト

GitLab マージリクエスト

ブランチの GitLab マージ リクエスト

GitLab マージリクエスト

SSH URL 1

ブランチ名

フォークの Gitea マージ リクエスト

Gitea プルリクエスト

ブランチの Gitea マージ リクエスト

Gitea プルリクエスト

SSH URL 1

ブランチ名

フォークの Pagure マージ リクエスト

Pagure マージリクエスト

ブランチの Pagure マージ リクエスト

Pagure マージリクエスト

SSH URL 1

ブランチ名

1(1,2,3,4)

ソースコードのリポジトリ がプッシュに対応している場合は、空にできます。

注釈

Weblate コミット後の、変更の自動プッシュを有効にすることもできます。これは、コミット時にプッシュする で設定します。

参考

SSH キーの設定は リポジトリへの接続 を、Weblate の変更をコミットするタイミングは 遅延コミット を参照してください。

保護されたブランチ

保護されたブランチで Weblate を使用している場合は、プル リクエストを使用し、翻訳の実際の査読をするように設定できます(知らない言語では問題になることがある)。その他の方法は、Weblate プッシュ ユーザーに対してこの制限を放棄することです。

GitHub で、リポジトリの設定から指定する例:

../_images/github-protected.png

他のユーザーとの対話

Weblate は、API を使用して他の人と簡単に対話できます。

遅延コミット

Weblate は、可能であれば、同じ著者のコミットを 1 つのコミットにグループ化します。これによりコミット数が大幅に削減されますが、VCS リポジトリを同期させる場合(これは、デフォルトで 管理者 グループに許可されます。参照: アクセス権および組込みロールの一覧)に備えて、コミットを実行するように直接指定することが必要になります。

このモードで、変更がコミットされる条件:

  • 他の誰かがすでに変更した文字列を変更する。

  • 上流からのマージが発生した。

  • 直接コミットが要求される。

  • ファイルのダウンロードが要求される。

  • 変更が、コンポーネント構成コミットするまでの経過時間 として設定した期間を超えている。

ヒント

コミットは、すべてのコンポーネントに対して作成されます。そのため、多くのコンポーネントがある場合も、多くのコミットが表示されます。その場合は、Git コミットのスカッシュ アドオンを使用できます。

経過時間を検査せずに、変更をより頻繁にコミットする場合は、コミットを実行する通常のタスクをスケジュールできます。

CELERY_BEAT_SCHEDULE = {
    # Unconditionally commit all changes every 2 minutes
    "commit": {
        "task": "weblate.trans.tasks.commit_pending",
        # Omitting 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,
    }
}

スクリプトを使用するリポジトリの処理

Weblate がリポジトリとのやり取りをカスタマイズするには、アドオン を使用します。アドオンを使用して外部スクリプトを実行する方法については、アドオンから実行するスクリプト を確認してください。

コンポーネント間で翻訳を同じ状態に維持

複数の翻訳コンポーネントを作成したら、同じ文字列は同じ翻訳になるようにしてください。これはどの段階でも実現できます。

翻訳の反映

翻訳の自動反映の有効化 を有効にすると(デフォルトについては、参照: コンポーネント構成)、一致する文字列を持つすべてのコンポーネントで、すべての新しい翻訳が自動的に実行されます。このような翻訳は、すべてのコンポーネントの現在の翻訳ユーザーに適切に署名されます。

注釈

翻訳の反映は、キーがモノリンガルの翻訳形式と一致する必要があるため、翻訳キーの作成時には注意してください。

整合性検査

一貫性の欠如 検査は、文字列が一致しないたびに起動します。これを利用して、このような違いを手動で確認し、適切な翻訳を選択できます。

自動翻訳

異なるコンポーネントに基づく自動翻訳は、コンポーネント間で翻訳を同期する方法です。手動で起動する(参照: 自動翻訳)ことも、アドオンを使用してリポジトリの更新時に自動的に実行する(参照:ref:addon-weblate.auttranslate.auttranslate)こともできます。