# General Translation Integrations: 支持的内容 URL: https://generaltranslation.com/zh/docs/integrations/storyblok/reference/supported-content.mdx --- title: 支持的内容 description: 说明 General Translation 会翻译哪些 Storyblok 字段类型以及内容如何序列化的参考。Storyblok 支持内容的 API 参考。 --- 本文介绍 General Translation 会翻译哪些 Storyblok 字段类型、如何处理富文本和表格,以及它使用的数据格式。General Translation 会遍历每个 story 的内容树,递归处理嵌套块,并提取可翻译字段。 ## 概览 [#overview] | 主题 | 说明 | | ------------------------------------- | -------------------------------------- | | [可翻译字段类型](#field-types) | 发送进行翻译的字段类型及其数据格式。 | | [translatable 标记](#translatable-flag) | 为什么字段必须标记为 `translatable: true`。 | | [字段处理](#field-handling) | 各字段类型如何被提取、递归处理或保留。 | | [富文本和表格](#rich-text-tables) | `richtext` 和 `table` 字段的专用序列化方式。 | | [跳过的字段](#skipped-fields) | 按原因说明字段为何会被跳过。 | | [数据格式](#data-format) | `STORYBLOK_CONTENT_JSON` 格式及其与键关联的元数据。 | ## 可翻译的字段类型 [#field-types] General Translation 会提取以下 Storyblok 字段类型,并按所列的数据格式进行翻译: | 字段类型 | 数据格式 | | ---------- | ---------- | | `text` | `text` | | `textarea` | `text` | | `markdown` | `markdown` | | `richtext` | `richtext` | | `table` | `table` | `text` 和 `textarea` 都按纯文本翻译。`markdown`、`richtext` 和 `table` 则通过专用的序列化方式保留其结构。 ## `translatable` 标记 [#translatable-flag] 只有当受支持字段在其组件 schema 中被标记为 `translatable: true` 时,才会被提取。Storyblok 只会为可翻译字段存储字段级翻译,因此,受支持但不可翻译的字段会被保留 (复制而非翻译) ,而不会被发送去翻译。 你可以在 Storyblok 的 Block Library 中将字段标记为可翻译,或在仪表板中勾选 **自动启用受支持字段**,让 General Translation 为整个 space 中的受支持字段设置该标记。请参阅 [配置 Storyblok](/docs/integrations/storyblok/guides/configuring-storyblok#enable-fields)。 ## 字段处理 [#field-handling] 组件 schema 中的每个字段都会按以下四种方式之一处理: * **提取** — 该字段会被翻译。适用于 `text`、`textarea`、`markdown`、`richtext` 和 `table`,但仅当字段为 `translatable: true` 时才会这样处理。 * **递归** — 集成会继续深入处理嵌套内容。适用于 `bloks` 字段,其中的条目是按相同方式处理的组件。 * **保留** — 该字段会保持原样,不会被翻译。适用于 `option`、`options`、`section`、`number`、`datetime` 和 `boolean`,也适用于任何未标记为可翻译的受支持字段。 * **跳过 (不受支持) ** — 该字段类型无法翻译,并会被报告为已跳过。适用于 `custom`、`asset`、`multiasset`、`multilink`、`image` 和 `file`。 *注意:如果 `bloks` 字段中的条目不是有效组件,这些条目会被报告为已跳过,原因是 `missing_nested_component`。* ## 富文本和表格 [#rich-text-tables] `richtext` 和 `table` 字段采用专门的序列化方式,因此其结构在翻译后仍能保留。 * **富文本** — 富文本文档会被序列化为可翻译的形式,在保留标记 (如粗体和链接) 及内联节点的同时,译后再重新组装。值不是富文本文档的 `richtext` 字段会被跳过,原因是 `non_string_value`。 * **表格** — 表头和表体单元格会按单元格逐一序列化,并在翻译后重新组装。值不是表格的 `table` 字段会被跳过,原因是 `non_string_value`;如果表格中没有可翻译的单元格,则保持不变。 ## 跳过的字段 [#skipped-fields] 当某个字段无法翻译时,会被标记为已跳过。结果摘要会按组件、字段、类型和原因对跳过的字段进行分组: | 原因 | 含义 | | -------------------------- | -------------------------------------------------------------------------- | | `missing_component_schema` | 该区块的组件没有可供集成读取的 schema。 | | `unsupported_field_type` | 该字段类型不可翻译 (例如 `asset`、`multilink`、`image` 或 `custom`) 。 | | `non_string_value` | 该字段值不符合预期的结构 (例如,`text` 字段的值不是 string,或者 `richtext` 字段的值不是 富文本文档) 。 | | `missing_nested_component` | 嵌套的 `bloks` 项不是有效的组件。 | ## 数据格式 [#data-format] 提取的内容会以 `STORYBLOK_CONTENT_JSON` 数据格式上传到 General Translation。该 payload 是一个 JSON 对象,将每个字段的路径键映射到其源字符串。 除了 payload 之外,General Translation 还会附加与键关联的元数据——每个字段对应一条条目,并以相同的路径键作为键——这样就能把翻译合并回正确的位置。每条条目可包含: * `id` 和 `pathKey` — 字段在 story 中的标识符和路径。 * `provider` 和 `resourceType` — `STORYBLOK` 和 `STORYBLOK_SPACE`。 * `spaceId`、`storyId`、`storyName` 和 `storyFullSlug` — 源 space 和 story。 * `component`、`field` 和 `fieldType` — 值的来源及其 Storyblok 字段类型。 * `dataFormat` — 该字段在上表中的翻译数据格式。 * `displayPath` — 用于提供上下文的可读路径。 * `context` — 自动生成的翻译上下文,用于描述字段的位置、类型和 story。 *注意:metadata 会携带 `context` (也可以携带 `maxChars`) ,以帮助提高翻译质量。*