---
type: how-to
title: 自定义一个游戏的语言
summary: 在语言标签页上覆盖一个游戏的已翻译字符串，按语言分组；从 Alpha 套餐起可用。
---

一个游戏带着它作者把它翻译成的那些语言交付。在游戏编辑器的 **语言** 标签页上，你可以覆盖那些字符串、修一处翻译、调整措辞以匹配你的产品，或添加一个游戏没交付的语言，而这个改动应用到渲染出的游戏上。

语言自定义从 **Alpha 套餐起可用**（Alpha、Troop、Apex）。

## 设置语言字符串

在一个站点密钥（或团队）的 **游戏** 页上打开游戏，然后是 **语言** 标签页。游戏提供的每种语言是一个预设，每个预设是一组命名的字符串（游戏内的标签和消息）。编辑你想改的那些字符串；其余的留着，它们就保持游戏的内置措辞。

语言字段始终是纯文本。除了词语，没有别的可挑。

## 一种语言在运行时如何被选中

每个语言预设携带一个 **语言标签**（`en`、`es`、`fr` 等等），预设按那个标签分组。挑一个分两个阶段发生。

先是组件决定要请求哪种语言：

1. 组件的 `locale` 属性，如果页面设了一个（明确的作者意图）。
2. 否则，访客的浏览器语言（他们偏好语言中的第一个）。
3. 否则什么都没有，服务器回退到游戏的默认。

然后服务器在合并你的覆盖之后（站点密钥盖过团队、团队盖过游戏的内置集合），按这个顺序把那种语言与预设匹配：

1. 一个精确的标签匹配（`pt-BR` 找到 `pt-BR` 预设）。
2. 基础语言（`pt-BR` 回退到一个 `pt` 预设）。
3. 你标为 **默认** 的那个预设。
4. 游戏的第一个预设。

所以一个带任何预设的游戏总是渲染出真实文本，绝不渲染原始的键。你在编辑器里把每种语言里的一个预设标为默认。

在 `<caputchin-game>` 元素上你还可以传一个内联的 `locale` 对象：一个写作属性值的 JSON 对象，例如 `locale='{"start":"Go!"}'`。组件把它作为那次挂载的语言信号发给服务器，服务器解析它并把它叠在解析出的预设之上，于是你的内联字符串胜过上面的一切（包括你的团队和站点密钥覆盖）。它是你自己标记的一个属性，所以它在任何套餐上都能用。复选框式的 `<caputchin-widget>` 不接受一个内联 locale；它的 `locale` 属性只接受一个语言标签或预设名。这种逐嵌入的撰写为什么免费，见 [我们的理念](/docs/understanding-caputchin/philosophy)。

文本方向（从左到右或从右到左）自动从语言标签派生，所以一种从右到左的语言无需额外设置就能正确渲染。

## 添加或扩展一种语言

你可以扩展游戏交付的任何语言：新预设从你扩展的那个继承每一个字符串，而你只覆盖你改的那些。要添加一个游戏没交付的语言，就用那种语言的标签创建一个预设并填入字符串。

## 什么适用，以及在哪里

语言覆盖在服务器上解析，最具体者胜：一个站点密钥的预设胜过团队的预设，团队的预设又胜过游戏的内置语言。访客的浏览器语言选中他们看到哪个解析出的预设。

## 另见

- [游戏自定义概览](/docs/game-customization/overview)：注册一个游戏并管理它。
- [配置](/docs/game-customization/configurations) 和 [皮肤](/docs/game-customization/skin)：另外两个维度。
- [模式参考](/docs/references/customization-schema)：预设模型和字段类型。
