gt-sanity@3.0.0
概要
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 エイリアス) を有効にすると、sourceLocale と locales に基づいて 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 は、internationalizedArray、internationalizedArrayLanguageFilter、isInternationalizedArrayItemType をそのまま直接利用できるよう再エクスポートしています。
スキーマ内のフィールドを翻訳対象から除外する
プラグインの設定で別途リストを管理する代わりに、フィールドまたは型全体にマークを付けます:
defineField({
name: 'internalNotes',
type: 'string',
options: { gt: { exclude: true } },
});serializer は、標準の Sanity ローカライゼーションプラグインの除外オプションにも対応しているため、1 つのパターンですべてをカバーできます。
options.gt.exclude— GT 独自の名前空間options.documentInternationalization.exclude—@sanity/document-internationalizationoptions.aiAssist.exclude—@sanity/assist
除外はネストの深さに関係なく適用され、カスタム型定義の options に設定すると、その型のすべての出現箇所が除外されます。これは、ネイティブプラグインの「field または type」というセマンティクスに一致します。options.gt は declaration merging によって完全に型付けされており、id ベースの ignoreFields / skipFields / dedupeFields プラグインオプションも、スラッグの重複排除のようなドキュメント横断のルール向けに引き続き利用できます。
破壊的変更
GT のフィールドレベルの Studio UI は削除されました
createInternationalizedArrayTypes のエクスポートと FieldLevelUIComponents 型は廃止され、GTFieldLevelLocalizationConfig の typePrefix、includeCompatibilityTypes、components オプションも削除されました。これらに対応するネイティブの同等機能はありません。削除されたオプションを渡すと警告が出力され、無視されます。カスタムの typePrefix で作成されたデータは検出されなくなりますが、標準の internationalizedArray* データには影響ありません。
localize: false のより深い階層での適用
除外指定 (スキーマ の options と従来の localize: false) は、これまで除外対象になっていなかったトップレベルの object フィールド内のフィールドにも適用されるようになりました。以前は誤って翻訳対象として送信されていた Content は、今後は送信されなくなります。アップグレード後に翻訳からフィールドが「消えた」ように見える場合は、そのフィールドに除外指定が付いていないか確認してください。