术语表让本地化引擎可以精确控制特定术语——要么强制使用指定译法,要么完全不翻译。术语表中的术语优先于模型自身的判断,因此引擎会在每一次请求中始终如一地应用它们。
术语表归组织所有:它是一个带名称的容器,用来存放术语,并通过挂载的方式应用到本地化引擎。一个术语表可以统一管理所有需要它的引擎,而一个引擎也可以使用多个术语表。
工作原理#
| 对象 | 字段 |
|---|---|
| 术语表 | 名称、描述,以及它覆盖的源语言区域设置。可包含任意数量的术语。 |
| 术语 | 源语言区域设置、目标语言区域设置、源文本、目标文本、类型、提示。 |
当引擎处理翻译请求时,会通过语义搜索从所有已挂载的术语表中检索相关术语——匹配的是输入文本的含义与已存储源术语的含义,而不是精确字符串。
| 字段 | 说明 |
|---|---|
| 源区域设置 | 源文本的区域设置,或使用 * 表示任意源语言 |
| 目标区域设置 | 目标文本的区域设置,或使用 * 表示任意目标语言 |
| 源文本 | 源语言中的术语 |
| 目标文本 | 指定使用的译文(或对于不可翻译项,使用相同术语) |
| 类型 | custom_translation 或 non_translatable |
| 提示 | 用于消除歧义的可选上下文(例如:"名词,产品功能") |
术语表归组织所有#
| 操作 | 效果 |
|---|---|
| 创建术语表 | 术语表创建在组织层级,在挂载之前不会应用到任何对象 |
| 将其挂载到引擎 | 其中的每个术语都可供该引擎在翻译时检索使用 |
| 将其挂载到多个引擎 | 同一套术语会统一作用于所有这些引擎——改一次,全部同步 |
| 将多个术语表挂载到一个引擎 | 它们的术语会合并为一个检索池 |
| 将其从引擎卸载 | 引擎将不再应用它。术语表及其术语会被保留。 |
| 删除术语表 | 只要仍有任何引擎在使用它,就会被拒绝——请先卸载。删除时,其术语也会一并删除。 |
| 删除引擎 | 术语表和术语都会保留下来。它们属于组织,而不是引擎。 |
挂载顺序没有任何意义。当两个已挂载的术语表为同一语言区域设置对定义了相同的源文本时,任意一个都可能生效——请把同一个术语只保存在一个地方。
你可以在组织侧边栏的 Glossaries 下管理术语表。引擎的 Glossary 标签页会列出它当前应用的术语,并支持挂载或卸载术语表。
源语言区域设置#
术语表会声明它覆盖哪些源语言区域设置。若某个 custom_translation 的源语言区域设置不在其中,写入时就会被拒绝——所有路径都一样,包括控制台、API、已应用的 引擎建议,以及 预配。该检查使用与读取时相同的宽松区域设置匹配规则,因此,覆盖 en 的术语表会接受一个 en-US 术语。
如果将源语言区域设置留空,术语表就会接受任何源语言区域设置。
不可翻译项不受此限制:因为没有需要绑定的源语言翻译。无论你传入什么目标语言区域设置,它们也只会以通配目标语言区域设置存储一次——该术语会在所有语言中受到保护,因此按区域设置分别存储只会造成重复。
术语表类型#
自定义翻译#
为某个术语强制指定特定译文。引擎始终会使用你提供的翻译,而不是模型的译法。
| 源文本 | 目标文本 | 源区域设置 | 目标区域设置 |
|---|---|---|---|
| Deploy | Bereitstellen | en | de |
| 911 | 112 | en | de |
| workspace | espace de travail | en | fr |
以下情况适合使用自定义翻译:
- 已有固定译法的产品术语
- 需要文化适配的内容(如紧急电话号码、计量单位)
- 模型总是选错近义词的术语
不可翻译项#
阻止某个术语被翻译。引擎会在所有目标语言区域设置中保留原文不变。
| 源文本 | 目标文本 | 类型 |
|---|---|---|
| Lingo.dev | Lingo.dev | non_translatable |
| OAuth | OAuth | non_translatable |
| GraphQL | GraphQL | non_translatable |
以下情况适合使用不可翻译项:
- 品牌名和产品名
- 技术协议和标准
- 应保留为源语言的专有名词
语义匹配#
术语表中的术语按含义匹配,而不是按精确字符串比较。当引擎收到翻译请求时,它会为输入文本生成嵌入,并查找源文本在语义上相近的术语。
这意味着,针对 “Deploy” 的术语也会匹配 “Deploying”、“deployment” 和 “deploy your application”——无需为每种变体分别创建条目。
提示字段
可使用 hint 字段来区分多义术语。例如,带有提示“金融机构”的 “bank” 术语,就不会匹配输入文本中的 “river bank”。
通配区域设置#
将源语言区域设置或目标语言区域设置设为 *,即可让某个术语适用于所有语言区域设置对。
常见模式:
| 源文本 | 源区域设置 | 目标区域设置 | 使用场景 |
|---|---|---|---|
| Lingo.dev | * | * | 在任何语言中都不翻译这个品牌名 |
| API | en | * | 在所有目标区域设置中保留“API”不翻译 |
| Deploy | en | de | 为这个英文术语指定特定的德语译法 |
通配术语和特定区域设置术语会组合生效——它们不会互相覆盖。
区域设置匹配#
术语表术语可跨地区变体匹配,而不只是精确匹配区域设置代码。一个 de 术语可应用于 de-DE;一个 de-DE 术语可应用于不带地区的 de 请求。像 de-DE 和 de-AT 这样的同级变体绝不会共享术语。当存在多个匹配项时,以 CLDR 默认地区为准。品牌语调、规则和模型配置也遵循相同规则。完整行为(包括自定义翻译的脚本安全规则)请参阅 Locale Resolution。
术语表 vs. 规则 vs. 品牌语调#
它们在引擎配置中各自承担不同角色:
| 术语表 | 规则 | 品牌语气 | |
|---|---|---|---|
| 控制内容 | 单个术语 | 语言约定 | 整体语气与风格 |
| 粒度 | 按术语 | 按规则 | 按区域设置区分的文本 |
| 匹配方式 | 语义匹配(按含义) | 包含所有匹配规则 | 唯一一个最佳匹配文本 |
| 优先级 | 最高——覆盖模型判断 | 中等——引导模型 | 最低——提供上下文 |
| 示例 | "Deploy" → "Bereitstellen" | "Abbreviate Straße to Str." | "Use informal du, technical tone" |
这三者都是归组织所有、通过挂载方式由引擎应用的容器:术语表存放术语,规则集 存放规则,而 品牌语调 则为每个区域设置存放一段文本。
规则优先级
在引擎的优先级层级中,术语表术语拥有最高优先级。如果术语表术语与规则冲突,则以术语表为准。设计规则时应与术语表互补,而不是重复。
通过 API 使用术语表#
调用 localize endpoint 时,术语表术语会自动生效。引擎会从其所应用的术语表中,为源和目标语言区域设置对检索语义相关的术语,并将它们纳入提示中。无需额外参数。
| 调用 | 用途 |
|---|---|
POST /glossaries | 为组织创建术语表 |
GET /organizations/:id/glossaries | 列出组织的术语表,并显示术语数和引擎数 |
GET /glossaries/:id/glossary-items | 列出术语表中的术语,并按源文本分组 |
POST /glossary-items with glossaryId | 向术语表添加术语 |
PUT /engines/:id/glossaries | 替换某个引擎所应用的术语表集合 |
DELETE /engines/:id/glossaries/:glossaryId | 停止将某个术语表应用于某个引擎 |
GET /engines/:id/glossary-items | 列出某个引擎当前应用的所有术语 |
在 POST /glossary-items 上使用 ownerEngineId 仍然有效——它会写入该引擎的默认术语表。更推荐使用 glossaryId。
访问权限#
org:glossary:read 和 org:glossary:edit 管理术语表及其中的术语;将术语表挂载到引擎还需要该引擎上的 engine:edit 权限。按术语表授予权限,可让某人只对单个术语表拥有读取和编辑权限,而不必获得组织内所有术语表的权限。参见 Roles & Permissions。
通过 MCP 管理术语表#
如果你使用 Lingo.dev MCP server,你的 AI 编程助手可以直接管理术语表及其中的术语:
"Create a glossary called Product terms covering English, and
apply it to the web engine.""Add a term: translate 'workspace' to 'espace de travail'
for English to French.""Mark 'GraphQL' as non-translatable for all locales."