# 为不同域名配置不同默认语言 | Creght AI 文档

> Creght 支持为同一个网站绑定多个域名，并让不同域名使用不同的默认语言。这个能力适合多国家、多地区网站：同一套网站内容和 CMS 数据，可以在不同市场使用更自然的访问路径。…

[![Creght](https://ugc.talizen.com/_assets/site/2061660904709165056/1780797461299__creght_logo.png)帮助文档](/help)

[更新历史](/blogs)

[AI](/docs/ai/quick-create-first-website) [可视化](/docs/get-start)

开始使用

- [5 分钟快速创建第一个网站](/docs/ai/quick-create-first-website)
- [AI 创建网站指南](/docs/ai/ai-create-website-guide)
- [直接编辑：不消耗积分的内容修改](/docs/ai/ai-edit-content-guide)
- [使用 Pick，把其他模板的板块用到自己的网站](/docs/ai/pick-element-in-tpl)
- [Prompt 库](/docs/ai/prompt-lib)
- [AI 积分说明](/docs/ai/ai-credits-guide)
- [Creght Skill](/docs/ai/creght-skill)

后端

- [让网站支持登录、预约、密码页面等功能](/docs/ai/backend-database-guide)
- [OAuth 登录配置教程：Google 和 GitHub](/docs/ai/backend-auth-guide)

网站设置

- [多语言网站设置教程](/docs/ai/localization)
- [域名绑定教程](/docs/ai/custom-domain)
- [阿里云购买域名教程（新手版）](/docs/ai/aliyun-domain-registration-guide)
- [重定向设置教程](/docs/ai/redirects)
- [页面不存在时：该用重定向还是 404？](/docs/ai/redirect-or-404)
- [Facebook Pixel（Meta Pixel）接入教程](/docs/ai/facebook-meta-pixel)

高级用法

- [为不同域名配置不同默认语言](/docs/ai/domain-locale-routing)

高级用法/

# 为不同域名配置不同默认语言

Creght 支持为同一个网站绑定多个域名，并让不同域名使用不同的默认语言。这个能力适合多国家、多地区网站：同一套网站内容和 CMS 数据，可以在不同市场使用更自然的访问路径。

例如， `example.com/about` 可以显示英文， `example.fr/about` 可以显示法文，而且不需要访问 `example.fr/fr/about`。

## 前提条件

- 网站已经开启多语言。
- 相关域名已经绑定到同一个网站。
- 每个语言都已经加入 `locales` 配置。

> **注意：** `i18n.domains` 只负责语言路由。域名本身仍然必须先在「设置 → 域名」中绑定到当前网站，否则请求不会进入这个网站的语言配置。

## 配置示例

在 `talizen.config.ts` 中添加 `i18n.domains`：

```ts
export default {
  i18n: {
    defaultLocale: "en",
    locales: ["en", "fr"],
    localeDetection: true,
    domains: [
      { domain: "example.com", defaultLocale: "en" },
      { domain: "example.fr", defaultLocale: "fr" },
    ],
  },
}
```

配置后：

- `example.com/about` 使用英文。
- `example.fr/about` 使用法文。
- `/fr/about` 仍然可以作为显式语言路径使用。
- 如果语言检测或显式语言前缀命中另一个域名承载的语言，系统会跳转到对应域名。

## 字段说明

`defaultLocale` 是网站的基础默认语言，通常也是 CMS 基础字段使用的语言。

`locales` 是网站支持的全部语言列表。

`domains` 用来声明不同域名对应的默认语言。每一项中的 `domain` 是要匹配的域名， `defaultLocale` 是这个域名在无语言前缀路径下使用的语言。每一项还可以写 `locales`，声明该域名除默认语言外还承载哪些语言（见下一节）。

## domains 里的 locales：让一个域名承载多种语言

默认情况下，每个域名 **只服务它自己的 `defaultLocale`**（无前缀访问）。 `domains[].locales` 用来声明这个域名 **额外** 再承载哪些语言——这些语言在本域名下通过带前缀的路径访问，而不会被跳转到其他域名。

### 不写 locales 会怎样？

不写 `locales` 不会报错，但域名会退化成 **单语言**：只认自己的 `defaultLocale`。此时用户在这个域名上访问 **其他** 语言（带语言前缀，或自动检测命中），会被 **307 跳转** 到「拥有」那门语言的域名（按各域名的 `defaultLocale` 匹配）。如果没有任何域名拥有该语言，则退回在当前域名用带前缀的路径提供，不跳转。

用一个中英双语站点举例，站点基础默认语言是中文：

```ts
export default {
  i18n: {
    defaultLocale: "zh-CN",
    locales: ["zh-CN", "en"],
    domains: [
      { domain: "www.example.cn", defaultLocale: "zh-CN", locales: ["zh-CN", "en"] },
      { domain: "www.example.com", defaultLocale: "en" },
    ],
  },
}
```

访问结果：

```
www.example.cn/about        → 中文（无前缀默认）
www.example.cn/en/about     → 英文（.cn 也承载 en，正常显示，不跳转）
www.example.com/about       → 英文（无前缀默认）
```

如果把 `.cn` 的 `locales` 去掉， `.cn` 就只剩中文：再访问 `www.example.cn/en/about` 会被 307 跳转到 `www.example.com/about`——英文被「甩」到了 `.com`。所以 **要让一个域名同时提供多种语言，必须在它的 `locales` 里把这些语言列全**（把它自己的 `defaultLocale` 也一并写上会更清晰）。

> **一句话：** `locales` 是「把这个域名变成多语言」的开关。一个域名只服务一门语言时可以省略；需要双语／多语时必须写。这与 Next.js 的 `i18n.domains[].locales` 语义一致——表示「除 `defaultLocale` 外还应路由到该域名的其他语言」。

## 多语言路径规则

没有配置多域名时，Creght 默认使用路径前缀区分语言：

```
/about     → 默认语言
/fr/about  → 法文
/zh/about  → 中文
```

配置多域名后，每个域名可以拥有自己的无前缀默认语言：

```
example.com/about  → 英文
example.fr/about   → 法文
```

这样用户访问地区域名时，不需要再看到额外的语言前缀。

## 常见问题

### 为什么 example.fr 不需要 /fr？

因为 `example.fr` 已经在 `i18n.domains` 中声明了默认语言：

```ts
{ domain: "example.fr", defaultLocale: "fr" }
```

所以 `example.fr/about` 的无前缀路径会直接按法文处理。

### 只写 i18n.domains 就可以了吗？

不可以。域名还必须绑定到同一个网站。如果 `example.fr` 没有在「设置 → 域名」中绑定到当前网站，平台无法把这个请求解析到当前网站，自然也不会读取当前网站的 `i18n.domains` 配置。

### 可以一个域名支持多个语言吗？

可以。域名的 `defaultLocale` 是无前缀默认语言，其他语言仍然可以通过路径前缀访问。

```ts
export default {
  i18n: {
    defaultLocale: "en",
    locales: ["en", "nl-NL", "nl-BE"],
    domains: [
      {
        domain: "example.nl",
        defaultLocale: "nl-NL",
        locales: ["nl-BE"],
      },
    ],
  },
}
```

访问结果：

```
example.nl/about        → nl-NL
example.nl/nl-BE/about  → nl-BE
```

### 为什么用 localizedPath / <Link> 生成的链接没有语言前缀？

这是正确行为。多域名下， `<Link>` 和 `localizedPath()` 以「当前域名的无前缀默认语言」为准：当目标语言正好是当前域名的默认语言时，链接不带前缀。例如在 `www.example.com`（默认 en）上， `localizedPath("/about", "en")` 返回 `/about` 而不是 `/en/about`；只有切到该域名的非默认语言时才会带前缀。这也是不建议手动拼接语言路径的原因。

## 推荐做法

为每个主要市场配置独立域名，例如：

```
example.com  → en
example.fr   → fr
example.de   → de
```

站内链接请使用 Creght/Talizen 的多语言链接能力，例如 `<Link>` 或 `localizedPath()`，不要手动拼接语言路径。这样在未来调整默认语言或域名策略时，链接更容易保持正确。

本文目录

- [前提条件](#前提条件)
- [配置示例](#配置示例)
- [字段说明](#字段说明)
- [domains 里的 locales：让一个域名承载多种语言](#domains-里的-locales-让一个域名承载多种语言)
- [不写 locales 会怎样？](#不写-locales-会怎样)
- [多语言路径规则](#多语言路径规则)
- [常见问题](#常见问题)
- [为什么 example.fr 不需要 /fr？](#为什么-example-fr-不需要-fr)
- [只写 i18n.domains 就可以了吗？](#只写-i18n-domains-就可以了吗)
- [可以一个域名支持多个语言吗？](#可以一个域名支持多个语言吗)
- [为什么用 localizedPath / <Link> 生成的链接没有语言前缀？](#为什么用-localizedpath-生成的链接没有语言前缀)
- [推荐做法](#推荐做法)

![Creght](https://ugc.talizen.com/_assets/site/2061660904709165056/1780797461299__creght_logo.png)

此网站使用 [Creght](/) 创建

![用户交流群](https://ugc.talizen.com/_assets/site/2061660904709165056/1781070374701__help_qr.webp)

用户交流群

## 链接

- [价格](/price)
- [帮助中心](/help)
- [联系我们](/contact)
- [博客](/blogs)
- [退款说明](/tuikuan)

## 资源

- [全部资源](/resources)
- [模板](/templates)
- [组件库](https://creghtlib.site.creght.com)
- [动效库](/effects)
- [Figma to Creght](/figma2creght)
- [AI 编程指南](/api)

## 产品对比

- [对比上线了](/creght-vs-sxl)
- [对比凡科建站](/creght-vs-fkw)

## 协议

- [用户协议](/legal/terms)
- [隐私政策](/legal/privacy)
- [可接受使用政策](/legal/acceptable-use)

## 社交媒体

- [小红书](https://www.xiaohongshu.com/user/profile/5a38606811be10715f4895b6)
- [哔哩哔哩](https://space.bilibili.com/513308095)

[蜀ICP备2023038192号-2](https://beian.miit.gov.cn)
