翻訳用にカスタマイズされたテキスト文字列をプログラムで取得(および書き込み)する最善の方法は何ですか?

管理インターフェースを使用して、多くの Discourse 文字列を変更しました。手っ取り早く[1] 非英語バージョンは無視しました。もちろん、それらは同期していません。

Fedora では、コミュニティ主導の翻訳に Weblate を使用しています。(https://translate.fedoraproject.org/ を参照)。これを連携させたいと考えています。理想的には、管理インターフェースで英語の文字列が更新されると Weblate に送信され、翻訳が完了すると戻ってくる、完全に自動化されたワークフローです。

これを達成するための最善の方法は何でしょうか?


  1. 怠惰. ↩︎

「いいね!」 2

API を使用したインテグレーションを実装します。具体的には以下のようになります。

  • Discourse で新しいオーバーライドをポーリングする(Webhook なし)
  • Weblate から新しい翻訳を Discourse サイトにプッシュする

これが予備的な概要です。現在の API は固定量の翻訳オーバーライドしか返さないため、既存の制限を定量化することを検討しています。つまり、機能させるためにはその API エンドポイントに変更を加える必要があります。

「いいね!」 1

ポーリングは問題ないようです。翻訳はすぐに完了するわけではありません。しかし、ポーリングの仕組みは、何らかの方法で状態を追跡する必要があるのでしょうか?ステートレスである方が良いのですが…。

「いいね!」 2

サイトで何も追跡する必要はありません。ステートレスで実装できるはずです。

  • ポーリングするには、サイトの次のパスに GET リクエストを送信する必要があります。
    /admin/customize/site_texts.json?locale=en&overridden=true&page=0

locale パラメータを必要に応じて調整してください。API は最大 50 件の結果を返し、ページネーション (page パラメータ) をサポートします。
結果がさらにある場合、JSON には { "extras" : { "has_more" : true } } が含まれます。

  • 翻訳オーバーライドの更新は、次のパスに PUT リクエストを送信することで機能します。
    /admin/customize/site_texts/<id>

<id> を翻訳したい文字列の ID に置き換えてください。例: 「js.user.username.instructions」。

PUT リクエストのペイロードはフォームデータ (Content-Type: application/x-www-form-urlencoded; charset=UTF-8) である必要があり、次の属性を含める必要があります。

  • site_text[value]: 翻訳
  • site_text[locale]: ロケール、例: 「en」

基本的に、Customize Text 管理インターフェースが使用するのと同じ API コールを使用する必要があります。

「いいね!」 4

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.