戻る

gt-sanity@3.0.0

Brian Lou avatarBrian Lou
gt-sanityv3.0.0sanitycmstranslationmajor

概要

gt-sanity v3 では、Sanity 本来の動作をこれまで以上に重視しています。フィールドレベル localization は、GT 独自の Studio UI ではなく、リファレンスとなる Sanity プラグイン sanity-plugin-internationalized-array によって提供されるようになりました。また、標準の Sanity ローカライゼーションプラグインと同じ options ベースのパターンを使って、スキーマ内でフィールドを翻訳対象から直接除外できるようになりました。

狙いは明確です。gt-sanity は、Sanity エコシステムですでにメンテナンスされているプラグイン (ドキュメントレベル用の @sanity/document-internationalization、フィールドレベル 用の sanity-plugin-internationalized-array) を組み合わせ、その上に Translation ワークフローを追加します。GT をインストールしても、Studio の挙動が変わることはありません。


新機能

フィールドレベルのローカライゼーションは reference プラグイン上で動作します

fieldLevelLocalization (またはその internationalizedArray エイリアス) を有効にすると、sourceLocalelocales に基づいて sanity-plugin-internationalized-array が自動設定されるようになりました。ネイティブ プラグインが internationalizedArray* スキーマ型と Studio の編集 UI (言語ごとの追加ボタン、言語ラベル、フィールドアクション) を担うため、Studio の挙動は Sanity ユーザーにとって既知のものと常に一致し、プラグインの更新もアップストリームでリリースされ次第すぐに反映されます。

gtPlugin({
  sourceLocale: 'en',
  locales: ['es', 'fr', 'ja'],
  translateDocuments: [{ type: 'post' }],
  fieldLevelLocalization: { enabled: true },
  translationLevel: 'internationalizedArray',
});

保存されるデータ自体に変更はありません。項目は引き続き { _key, _type, language, value } のままなので、既存のコンテンツをマイグレーションする必要はありません。config にはネイティブのパススルーオプションも追加されました: defaultLanguages, buttonLocations, buttonAddAll, languageDisplay, apiVersion

独自のプラグインインスタンスを使用する

すでに sanity-plugin-internationalized-array を自分で登録している場合は、そのままのセットアップを維持してください。翻訳の検出はデータ構造ベースで行われ、スキーマ型を誰が登録したかに関係なく、保存済みデータを読み書きします。型が重複して登録されないよう、fieldLevelLocalization は無効のままにし、translationLevel で各ドキュメントを フィールドレベル 翻訳の対象にしてください。

plugins: [
  internationalizedArray({
    languages: [
      { id: 'en', title: 'English' },
      { id: 'es', title: 'Spanish' },
    ],
    fieldTypes: ['string'],
  }),
  gtPlugin({
    sourceLocale: 'en',
    locales: ['es'],
    translateDocuments: [{ type: 'post' }],
    translationLevel: 'internationalizedArray',
  }),
],

gt-sanity は、internationalizedArrayinternationalizedArrayLanguageFilterisInternationalizedArrayItemType をそのまま直接利用できるよう再エクスポートしています。

スキーマ内のフィールドを翻訳対象から除外する

プラグインの設定で別途リストを管理する代わりに、フィールドまたは型全体にマークを付けます:

defineField({
  name: 'internalNotes',
  type: 'string',
  options: { gt: { exclude: true } },
});

serializer は、標準の Sanity ローカライゼーションプラグインの除外オプションにも対応しているため、1 つのパターンですべてをカバーできます。

  • options.gt.exclude — GT 独自の名前空間
  • options.documentInternationalization.exclude@sanity/document-internationalization
  • options.aiAssist.exclude@sanity/assist

除外はネストの深さに関係なく適用され、カスタム型定義の options に設定すると、その型のすべての出現箇所が除外されます。これは、ネイティブプラグインの「field または type」というセマンティクスに一致します。options.gt は declaration merging によって完全に型付けされており、id ベースの ignoreFields / skipFields / dedupeFields プラグインオプションも、スラッグの重複排除のようなドキュメント横断のルール向けに引き続き利用できます。


破壊的変更

GT のフィールドレベルの Studio UI は削除されました

createInternationalizedArrayTypes のエクスポートと FieldLevelUIComponents 型は廃止され、GTFieldLevelLocalizationConfigtypePrefixincludeCompatibilityTypescomponents オプションも削除されました。これらに対応するネイティブの同等機能はありません。削除されたオプションを渡すと警告が出力され、無視されます。カスタムの typePrefix で作成されたデータは検出されなくなりますが、標準の internationalizedArray* データには影響ありません。

localize: false のより深い階層での適用

除外指定 (スキーマ の options と従来の localize: false) は、これまで除外対象になっていなかったトップレベルの object フィールド内のフィールドにも適用されるようになりました。以前は誤って翻訳対象として送信されていた Content は、今後は送信されなくなります。アップグレード後に翻訳からフィールドが「消えた」ように見える場合は、そのフィールドに除外指定が付いていないか確認してください。


リンク