gt-sanity@3.0.0
概览
gt-sanity v3 进一步回归 Sanity 的原生行为。字段级本地化现已改由 sanity-plugin-internationalized-array 提供支持——也就是 Sanity 的参考插件——而不再使用 GT 自建的 Studio UI;现在你还可以在自己的 schema 中,采用与标准 Sanity 本地化插件相同的基于 options 的模式,直接将字段排除在翻译之外。
目标是:gt-sanity 负责协调 Sanity 生态中已在维护的插件 (文档级使用 @sanity/document-internationalization,字段级使用 sanity-plugin-internationalized-array) ,并在此基础上叠加翻译工作流。你的 Studio 不会因为安装了 GT 而改变行为。
最新动态
字段级本地化现已运行在 参考插件之上
启用 fieldLevelLocalization (或其别名 internationalizedArray) 后,现在会根据你的 sourceLocale 和 locales 自动配置 sanity-plugin-internationalized-array。该原生插件负责 internationalizedArray* schema 类型以及 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。
使用你自己的 plugin 实例
如果你已经自行注册了 sanity-plugin-internationalized-array,请保持当前 setup。翻译检测基于数据结构——它会读取并写入已存储的数据,无论这些 schema 类型是由谁注册的。请保持 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,可供直接使用。
在 schema 中排除无需翻译的字段
通过直接标记某个字段——或整个类型——即可,无需再在插件配置中维护一份单独的列表:
defineField({
name: 'internalNotes',
type: 'string',
options: { gt: { exclude: true } },
});该 serializer 也兼容标准 Sanity 本地化插件的排除选项,因此一个 pattern 就能覆盖所有情况:
options.gt.exclude— GT 自身的命名空间options.documentInternationalization.exclude—@sanity/document-internationalizationoptions.aiAssist.exclude—@sanity/assist
排除规则在任意嵌套层级都生效;如果在自定义类型定义的 options 中设置,则会排除该类型的所有实例——与原生插件“字段或类型”的语义保持一致。options.gt 通过声明合并获得了完整的类型支持,而基于 id 的 ignoreFields / skipFields / dedupeFields 插件选项仍然保留,用于 slug 去重这类跨文档规则。
不兼容变更
GT 的字段级 Studio UI 已被移除
createInternationalizedArrayTypes 导出项和 FieldLevelUIComponents 类型均已移除,同时 GTFieldLevelLocalizationConfig 中的 typePrefix、includeCompatibilityTypes 和 components 选项也一并移除——这些都没有对应的原生替代项。传入已移除的选项时,会记录一条警告并将其忽略。使用自定义 typePrefix 创建的数据将不再被识别;标准的 internationalizedArray* 数据不受影响。
更严格的深层 localize: false 生效范围
排除规则 (schema 选项和 legacy localize: false) 现在也会应用于顶层对象字段内的子字段,而这些字段此前不会被过滤。之前被误发去翻译的内容现在将不再发送——如果升级后某个字段似乎从翻译中“消失”了,请检查它是否带有排除标记。