# General Translation Integrations: 翻訳の管理
URL: https://generaltranslation.com/ja/docs/integrations/sanity/guides/managing-translations.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: Sanity の翻訳について、インポート、参照のパッチ適用、一括公開、フィールドの動作を管理する方法。

セットアップ後、プラグインの翻訳ツールを使って生成された Sanity の翻訳を管理できます。

このガイドでは、サイト全体の**翻訳**ツール、参照のパッチ適用、一括公開、フィールドの動作、カスタムシリアライズについて説明します。

## 翻訳ツールを使う [#translations-tool]

このプラグインは、翻訳可能なすべてのドキュメントを一覧表示する、サイト全体用の**翻訳**ツールを登録します。このツールから、次の操作を行えます。

* すべてのドキュメントの翻訳を生成します (**すべて翻訳**) 。
* 後続の実行前に現在のSanity の翻訳を保持します (**ローカル編集を保存**) 。
* 実行を開始せずに、現在のSanity の翻訳をGeneral Translationに送信します (**ローカル編集を保存**) 。
* 準備ができている翻訳をすべてインポートし、既存の翻訳を上書きします (**すべてインポート**) 。
* ソースドキュメントのメタデータにまだ記録されていない翻訳のみをインポートします (**未登録分をインポート**) 。
* 翻訳済みドキュメント間の参照を修正します (**参照を修正**) 。
* ソースドキュメントが公開されている翻訳済みドキュメントを公開します (**翻訳を公開**) 。

自動更新と自動インポートはデフォルトでオンになっています。自動修正と自動公開はオフです。これらのスイッチと**ローカル編集を保存**の変更は、現在のSanityプロジェクトおよびデータセットについてブラウザストレージに記憶されます。

*メモ: **未登録分をインポート**、**参照を修正**、および**翻訳を公開**は、ドキュメント単位の`translation.metadata`に依存します。フィールドレベルのローカライゼーションでは、**すべてインポート**を使用するか、そのステータス行からロケールをインポートしたうえで、Sanityの通常のworkflowを通じてソースドキュメントを確認して公開してください。*

(トグルとオンデマンドアクションのどちらを選ぶかについては、[翻訳への編集を保持する](/docs/integrations/sanity/guides/translating-content#preserve-edits)を参照してください)。

## 翻訳をインポート [#import]

生成された翻訳は、Sanity にインポートする必要があります。ドキュメント単位のローカライゼーションでは、プラグインが翻訳済みフィールドをロケールドキュメントにマージするため、翻訳対象として送信されなかったフィールドも引き継がれます。フィールドレベルのローカライゼーションでは、翻訳済みの値をソースドキュメントの国際化配列にマージします。

* 単一のドキュメントは、**Translate** アクションまたは任意で表示される **General Translation** タブからインポートします。
* 複数のドキュメントは、翻訳ツールの **すべてインポート** または **未登録分をインポート** を使用します。

ドキュメント単位の翻訳が削除されたにもかかわらず、その `translation.metadata` エントリが残っている場合、そのロケールをインポートすると代替の翻訳が作成され、メタデータの参照が更新されます。**すべてインポート** を使用するか、ロケールを直接インポートしてください。**未登録分をインポート** は、すでにメタデータに記録されているロケールをスキップします。ソースがすでに存在しないドキュメントについては、インポートは失敗します。

## 参照のパッチ適用 [#patch-references]

翻訳済みドキュメントは、ほかのドキュメントを参照していることがあります。参照のパッチ適用では、各参照の `_ref` を、同じロケールの参照先ドキュメントの翻訳が存在する場合は、その翻訳を指すように書き換えます。プラグインは、これらの対応関係を `translation.metadata` ドキュメントから解決します。

既存の翻訳済みドキュメント全体にこれを実行するには、**翻訳** ツールの **参照を修正** を使用します。単一ドキュメントのダイアログで **インポート後に自動修正** を有効にします。自動修正はデフォルトで無効です。

翻訳済みドキュメントがすでに公開されており、ドラフトがない場合、パッチ適用によって公開済みドキュメントからドラフトが作成され、そのドラフトが更新されます。公開済みドキュメントが直接変更されることはありません。

## 翻訳を公開 [#publish]

**翻訳を公開**を使うと、翻訳済みドキュメントを一括で公開できます。このプラグインで公開されるのは、ソースドキュメントが公開済みの翻訳ドキュメントのみです。これは、多数の翻訳をインポートした後や、ロケール内の参照を修正した後に便利です。

インポートされたドキュメント単位の翻訳は下書きとして作成されます。**インポート後に自動公開**をオンにすると自動的に公開され、デフォルトでオフのままにすると、公開前に確認できます。

## デバッグ情報を確認する [#debug-info]

**翻訳**ツールとドキュメントダイアログのフッターには、インストールされている `gt-sanity` のバージョンが表示されます。**デバッグ情報**をクリックすると、サポートリクエスト用にプラグインの有効な設定を確認・コピーできます。

出力には、解決されたロケール、翻訳モード、ドキュメントとフィールドのルール、現在の設定値、翻訳数、Sanity のプロジェクトとデータセット、シークレットドキュメントが見つかったかどうかが含まれます。API Key 自体は含まれず、設定されているかどうかのみが表示されます。

## フィールドの動作を管理する [#field-behavior]

一部のフィールドを通常どおりに翻訳しないようにしたい場合は、フィールドマッチャーを使用します。各マッチャーは、JSONPath の `property` 式と、必要に応じてドキュメントの `_id` を使って、対象のフィールドを指定します。

### 翻訳せずにフィールドをコピーする

カテゴリ、タグ、内部メタデータなど、source document からコピーするものの、translation API には送信しないフィールドには `ignoreFields` を使用します。

```ts
gtPlugin({
  sourceLocale: 'en',
  locales: ['es', 'zh', 'ja'],
  ignoreFields: [
    { fields: [{ property: '$.category' }] },
    { fields: [{ property: '$..linkType' }] },
  ],
});
```

### フィールドをコピーしてロケールごとに重複しないようにする

ソース値をもとにしつつ、ロケールごとに固有の値にしたいフィールドには `dedupeFields` を使用します。これはスラッグでよくあるケースです。

```ts
gtPlugin({
  sourceLocale: 'en',
  locales: ['es', 'zh', 'ja'],
  dedupeFields: [{ fields: [{ property: '$.slug', type: 'slug' }] }],
});
```

Sanity のスラッグでは、スペイン語の場合、`{ _type: 'slug', current: 'about' }` は `{ _type: 'slug', current: 'about-es' }` になります。後でエディタが翻訳後のスラッグを変更した場合、その後のインポートでもその変更後の値が保持されます。

### 翻訳からフィールドを除外する

`skipFields` は、ソース専用のメタデータや、編集者が言語ごとに手動で設定するスラッグなど、翻訳先ドキュメントに一切コピーしたくないフィールドに使用します。

```ts
gtPlugin({
  sourceLocale: 'en',
  locales: ['es', 'zh', 'ja'],
  skipFields: [
    { fields: [{ property: '$.slug', type: 'slug' }] },
    { fields: [{ property: '$.canonicalUrl' }] },
  ],
});
```

 (完全な型定義については、[フィールドマッチャーのリファレンス](/docs/integrations/sanity/reference/plugin-configuration#field-matchers)を参照してください) 。

## カスタム型が翻訳対象にならないようにする [#stop-types]

デフォルトでは、このプラグインは翻訳対象外のschema型をいくつか保持しています。独自のカスタム型を追加するには、`additionalStopTypes` を使用します。

```ts
gtPlugin({
  sourceLocale: 'en',
  locales: ['es', 'zh', 'ja'],
  additionalStopTypes: ['codeBlock', 'mux.video', 'mux.videoAsset'],
});
```

 ([デフォルトの stop types の一覧](/docs/integrations/sanity/reference/plugin-configuration#stop-types)を参照してください) 。

## シリアライズをカスタマイズする [#serialization]

このプラグインは、翻訳のためにドキュメントをHTMLに変換し、翻訳後に元に戻します。ほとんどのプロジェクトでは、これを変更する必要はありません。カスタム serializers を使うのは、schema にデフォルトでは対応できないカスタムのマークやブロック型がある場合だけです。

```ts title="sanity.config.ts"
import { attachGTData, gtPlugin } from 'gt-sanity';

gtPlugin({
  sourceLocale: 'en',
  locales: ['es', 'zh', 'ja'],
  additionalSerializers: {
    marks: {
      link: ({ value, children }) =>
        attachGTData(`<a>${children}</a>`, value, 'markDef'),
      inlineMath: ({ value, children }) =>
        attachGTData(`<span>${children}</span>`, value, 'markDef'),
    },
  },
});
```

`attachGTData(html, data, 'markDef')` は、プラグインが翻訳をマージして戻す際に mark を再構築できるよう、mark のデータをシリアライズ済みの HTML に埋め込みます。 ([serialization reference](/docs/integrations/sanity/reference/plugin-configuration#serialization) を参照してください) 。

## Next steps

- /docs/integrations/sanity/guides/translating-content
- /docs/integrations/sanity/guides/querying-translations
- /docs/integrations/sanity/guides/configuring-sanity

## Sitemap

See the full [sitemap](https://generaltranslation.com/sitemap.md) for all pages.
