|
ドキュメント
デモを予約プラットフォーム
プラットフォームMCPCLIAPIワークフロー
ガイド
変更履歴

ローカライゼーション

  • 概要
  • 翻訳API
  • Webアプリのローカライゼーション
  • モバイルアプリのローカライズ
  • String Catalogを使ったiOS
  • Android with strings.xml
  • メールのローカライズ
  • 静的コンテンツ(例: .md、.json)
  • Next.js with Markdoc
  • Rails with i18n

ワークフロー

  • MCP でエンジンを設定
  • Jiraトリアージ
  • Zendeskヘルプセンター
  • CI/CD
  • Payload CMS

Payload CMS

Payload CMS をローカライゼーションエンジンに接続し、対象のコレクションとグローバルを選択すると、Lingo.dev がローカライズ対象のフィールドを指定したロケールに翻訳し、各ロケールに対応する Payload へ書き戻します。

ローカライゼーションが有効で、Lexical リッチテキストエディタを使用している Payload 3 プロジェクトに対応しています。旧式の Slate エディタには対応していません。翻訳対象は、ローカライズされた text、textarea、richText フィールドです。ドキュメント内のそれ以外の内容はそのまま維持されます。

Payload 連携は組織単位で有効になります。Settings -> Integrations に表示されない場合は、ご連絡ください。こちらで有効化します。

始める前に#

必要なものは 3 つです。

  • ローカライゼーション設定済みのPayload 3。 ソースロケールとターゲットロケールが、Payload の設定内のロケールと一致していることを確認してください。
  • API キーを持つサービスユーザー。 認証コレクション(通常は useAPIKey: true)で users を設定し、Lingo.dev 用のユーザーを作成したうえで、Payload の管理画面からそのユーザーの API キーを生成します。このユーザーには、翻訳対象にしたいすべてのコレクションとグローバルに対する read と update 権限が必要です。
  • ローカライゼーションエンジン。 その glossary、ブランドボイス、ルールが翻訳内容を左右します。

ロケールコードは Payload の設定と一致している必要があります

Lingo.dev で選択するロケールは、localization.locales にあるコードと完全に一致している必要があります。たとえば Payload に en と de がある場合は、English (United States) ではなく English と German を選んでください。en-US と en は別のロケールです。ソースロケールには Payload の defaultLocale を使ってください。プラグインはそのロケールの変更を監視します。

Payload インスタンスを接続する#

1

連携を開く

Settings -> Integrations に移動し、Payload CMS の Connect をクリックします。

2

インスタンス情報を入力

項目入力内容
接続名Production や Staging のようなラベル
Payload Base URLインスタンスのルート URL。例: https://cms.example.com。HTTPS のみ対応
Auth Collection Slugサービス API キーが属するコレクションです。通常は users
API Keyサービスユーザーの API キー
Custom headers任意。インスタンスへのすべてのリクエストに含まれます

Lingo.dev は次のステップに進む前に、そのキーをインスタンスに対して検証します。

3

翻訳対象を選ぶ

設定内容
Collections and Globals翻訳するものにチェックを入れます。No read + update と表示された行は、サービスユーザーに権限が付与されるまで無効のままです
Source Localeエディターが執筆するロケールです。Payload の defaultLocale を使ってください
Target Locales翻訳先のロケール
Engineこのコンテンツの翻訳に使うローカライゼーションエンジン
Translate draft savesオフの場合は公開済みの変更のみを翻訳します。オンの場合は下書き保存も翻訳し、翻訳結果も下書きとして保持します
4

プラグインをインストールする

最後のステップで webhook URL が表示されます。この時点で必ずコピーしてください。表示は 1 回限りです。 これを Payload の環境変数に LINGO_WEBHOOK_URL として保存し、その後プラグインをインストールして設定に追加します。

bash
pnpm add @lingo.dev/payloadcms
ts
import { buildConfig } from "payload";
import { lingo } from "@lingo.dev/payloadcms";

export default buildConfig({
  // ...your collections, globals, and localization config
  plugins: [
    lingo({
      webhookUrl: process.env.LINGO_WEBHOOK_URL,
    }),
  ],
});

Payload を再デプロイしてください。以後、ソースロケールで公開された変更はすべて、翻訳のために Lingo.dev へ送信されます。

プラグインが行うこと

これにより、どのフィールドがローカライズされたテキストかを Lingo.dev に伝える GET /api/lingo/schema エンドポイントと、ドキュメントまたはグローバルが変更されたときに Lingo.dev へ通知するフックが追加されます。スコープ、ロケール、エンジンはダッシュボードで管理されるため、再デプロイなしで変更できます。webhookUrl を省略するとフックは追加されず、翻訳は毎回ダッシュボードから手動で開始します。

翻訳対象を選ぶ#

接続ページには Collections、Globals、Runs の 3 つのタブがあります。

スコープはコレクション単位・グローバル単位で設定します。選択したコレクション内のすべてのドキュメントが対象になります。スコープ、ロケール、エンジン、下書き設定を変更するには、ページヘッダーの Edit configuration をクリックしてください。変更は再デプロイ不要で次回実行から反映されます。

各ドキュメント内で何が翻訳されるかは、Payload のフィールド設定で決まります。

フィールド翻訳対象
text が付いた textarea、richText、localized: true フィールドはい
ローカライズされた group、array、blocks、または tabs の中にある同じ種類のフィールドはい
リッチテキストに埋め込まれたブロックとインラインブロックはい。同じルールで、そのテキストフィールドも翻訳対象になります
select、radio、checkbox、number、date、relationship、upload、json、code、email、pointいいえ
ローカライズされておらず、ローカライズされた親も持たないフィールドいいえ
id、blockType、blockNameいいえ

リッチテキストは Lexical ツリーとして翻訳されます。書式、リンク、アップロード、ブロック構造はそのまま保持され、置き換わるのは中のテキストだけです。太字やリンクで途中が分かれている文でも、1 つの文としてまとめて翻訳されます。

フィールドを対象に含めるには、Payload でそのフィールドを localized: true としてマークして再デプロイしてください。次回の実行で反映されます。

同期と再翻訳#

自動実行。 プラグインで webhookUrl を設定すると、ソースロケールのドキュメントまたはグローバルを保存するたびに、Lingo.dev に通知されます。短時間に行われた複数の保存はデバウンスされ、1回の実行にまとめられます。他のロケールでの保存、下書きの保存(Translate draft saves がオンの場合を除く)、およびスコープ外のコンテンツは無視されます。

手動実行。 各コレクション、グローバル、ドキュメント行には 2 つのボタンがあります。

ボタン内容使いどころ
Sync前回の実行以降に変更された内容だけを翻訳します接続後に既存コンテンツを埋めるときや、失敗後の再試行に使います
Retranslateその行にある内容を、最初からすべて再翻訳しますエンジンの glossary、ブランドボイス、ルールを変更したあとに使います

コレクションを開くと、その中のドキュメントへ移動して 1 件ずつ同期できます。どちらのタブでも、各項目の最終同期日時が表示されます。

接続しただけでは翻訳は始まりません。すでにあるコンテンツを翻訳するには、各コレクションとグローバルで Sync をクリックしてください。後からターゲットロケールを追加する場合も同じで、次回の Sync で埋められます。

1 つの接続で同時に進行する実行は 1 件だけです。追加のリクエストはキューに入り、順番に開始されます。キュー待ちまたは実行中の行では、ボタン表示が Syncing... になります。

Retranslate は手動編集を上書きします

Retranslate は、対象スコープ内の翻訳済みフィールドをすべて再生成します。これには、チームが Payload 上で手動編集した翻訳も含まれます。一方 Sync は、ソーステキストが変わったフィールドだけを再生成するため、それ以外の手動編集は保持されます。

実行を確認する#

Runs タブには、すべての実行についてステータス、トリガー(Webhook または Manual、sync または retranslate)、開始時刻、所要時間が表示されます。キュー待ちまたは実行中の実行は、この一覧からキャンセルできます。

実行を開くと、現在のステージ(Payload からの読み取り、翻訳、書き戻し)、全体の進捗、ターゲットロケールごとの進捗、対象のドキュメント・コレクション・グローバルを確認できます。各項目には Payload 管理画面へのリンクがあります。

ステータス意味
Queued前にある実行の完了待ち
Running進行中
Completedすべての翻訳が書き戻されました
Up to date前回の実行以降、スコープ内に変更がありませんでした。失敗ではありません
Failed実行が停止しました。理由は実行詳細の上部に表示されます
Cancelledチーム内の誰かが停止しました

実行が失敗しても、すでに書き込まれた内容はそのまま保持されます。エラーメッセージには書き込まれなかったドキュメントが表示され、次回のSyncで再試行されます。実行中にエディターが保存したドキュメントはスキップされ、次の実行で処理されます。

翻訳の保存先#

各翻訳は、Payload 独自のローカライゼーションモデルに従い、対応するターゲットロケールの同じドキュメントまたはグローバルに書き込まれます。書き込まれるのは翻訳対象のフィールドのみで、それ以外のフィールドは変更されません。書き戻しはサービスユーザーとして実行され、新しい実行はトリガーされません。

既存の翻訳は保持されます。ドキュメントの初回 Sync では、ターゲットロケールにすでに入っている内容はそのまま残り、不足しているフィールドだけが翻訳されます。Payload のデフォルト値のままのフィールドは未入力として扱われます。既存の翻訳を置き換えたい場合は Retranslate を使ってください。

下書きと公開#

Translate draft saves がオフ(デフォルト)の場合、実行が開始されるのは公開済みの変更のみで、翻訳は書き込まれ次第すぐに公開されます。Payload はドキュメント全体を公開するため、そのドキュメント上の未公開の下書き編集も翻訳と一緒に公開されます。

これをオンにすると、下書き保存でも実行が開始されます。Lingo.dev はソースの最新の下書きを読み取り、各翻訳を下書きとして書き込みます。Payload で誰かがその翻訳を公開するまでは、読者に見える内容は変わりません。翻訳品質を確認している間や、翻訳がレビューを通る運用に向いています。

接続を管理する#

webhook URL を更新する#

接続ページのヘッダーメニューを開き、Regenerate webhook URL を選択します。古いURLはその時点ですぐに無効になります。LINGO_WEBHOOK_URL を更新して、再デプロイしてください。接続を編集しても、URLは変わりません。

接続を解除する#

Settings -> Integrations -> Payload CMS から接続を解除できます。これにより、接続情報、実行履歴、何が翻訳済みかの記録が削除されます。すでに書き込まれた翻訳は Payload に残ります。その後、設定から LINGO_WEBHOOK_URL またはプラグインを削除してください。

再接続するとWebhook URLは新しくなります

新しい接続には新しい webhook URL が発行されるため、自動実行を再び使うには LINGO_WEBHOOK_URL を更新して再デプロイする必要があります。最初の Sync では、スコープ内のすべてのドキュメントを再読み込みし、Payload にすでにある翻訳は残したまま、不足分だけを補います。

制限#

制限項目詳細
Payloadのバージョンローカライゼーションが設定されたPayload 3
対応フィールドtext が付いた textarea、richText、localized(Lexical のみ)フィールド
スコープコレクション全体とグローバル全体。フィールド単位での選択はできません
接続数組織ごとに複数作成可能、Payload インスタンスごとに 1 つ
同時実行数接続ごとに 1 つ
Base URLHTTPSのみ

トラブルシューティング#

接続時に "Payload rejected the API key" と表示される場合。 キー、認証コレクションの slug、そのコレクションで useAPIKey が有効になっているかを確認してください。

コレクションまたはグローバルに "No read + update" と表示される場合。 そのコレクションのアクセス設定で、サービスユーザーに read と update 権限を付与し、設定画面を開き直してください。

最初の実行で "The Lingo plugin isn't installed" と表示される場合。 Payload 設定の @lingo.dev/payloadcms に plugins を追加して再デプロイしてください。プラグインがなくても接続はできますが、Sync はできません。

Payload で公開しても実行が始まらない場合。 LINGO_WEBHOOK_URL が設定されていること、localization が設定済みであること、そのコレクションまたはグローバルがスコープに含まれていること、保存がソースロケールで行われたこと、そして下書き保存ではなく公開であることを確認してください。

フィールドが翻訳されない。 そのフィールド自身または親に localized: true が設定されていないか、text、textarea、richText のいずれのフィールドでもありません。

接続に "Couldn't reach this Payload instance" と表示される場合。 インスタンスが稼働中か、キーがまだ有効か、ゲートウェイヘッダーが引き続き機能しているかを確認してください。Settings -> Integrations から接続を更新してください。

次のステップ#

ローカライゼーションエンジン
Payloadコンテンツを翻訳するエンジンを設定
用語集
すべてのコレクションで製品名や用語を統一
ブランドボイス
コンテンツで保ちたいトーンを言語ごとに設定

このページは役に立ちましたか?

Max PrilutskiyMax Prilutskiy·更新済み 約2時間前·3分で読めます