---
title: 自定义 404 页面
keywords: teedoc, 自定义404页面, 404页面国际化
desc: teedoc 自定义404页面，以及404页面国际化
---

支持自定义 404 页面（访问错误网址时显示的页面）， 并且支持 404 页面国际化

## 添加 404 错误页面

在 `site_config` 中设置 网站根目录 的`url`与路径的映射，比如
```json
    "route": {
        "pages": {
            "/": "pages/index/zh"
        }
    },
    "translate": {
        "pages": {
            "/": [ {
                    "url": "/en/",
                    "src": "pages/index/en"
                }
            ]
        }
    }
```
这里将 网站根目录（`/`）映射到了文件夹`pages/index/zh`， 则只需要创建文件`pages/index/zh/404.md`，然后添加内容：
```markdown
---
layout: 404.html
---
```
或者
```markdown
---
layout: 404
---
```

用户访问错误的路径时就会返回这个页面

## 404 错误页面国际化

如上面所说的网站根目录配置， 在`pages/index/zh`下的`config`文件如果配置`locale`为`zh`， 则生成的`/404.html`内容为中文

如果用户的浏览器语言设置的其它语言，比如英文`en`， 则会试图跳转到`/en/404.html`, 所以我们只需要：
* 在`site_config`中配置好`translate`的路径映射，如上面的示例所示
* 然后新建`pages/index/en/404.md`， 添加内容

```markdown
---
layout: 404.html
---
```

>! 如果`locale`有后缀，比如`zh_CN`, `en_US`等，`404`页面会自动尝试跳转到和浏览器设置的语言相同的页面， 比如`/en_US/404.html`、`/en-US/404.html`、`/en-us/404.html`， `/en_us/404.html`直到跳转到页面语言和浏览器语言相同则停止跳转，当所有链接都尝试跳转失败后也会停止跳转

如果你需要的语言没有被翻译， 有两种方法：
* 可以通过[自定义 404 页面来实现](#自定义-404-错误页面内容)
* 也可以贡献翻译, 到[这里](https://github.com/teedoc/teedoc/tree/main/plugins/teedoc-plugin-theme-default/teedoc_plugin_theme_default)， `fork`仓库， 然后`git clone`你的仓库到本地， 在`locales.cfg`文件里面添加新的语言，然后执行`python trans_prepare.py`，这会在`locales`目录下生成新的翻译文件，后缀为`.po`，翻译这个文件（翻译`po`文件你可以直接修改文本，也可以用其它工具翻译），然后执行`python trans_finish.py`就会生成`mo`二进制文件，没有错误就可以提交更改，然后在`github`创建`PR(Pull Request)`来贡献翻译到`teedoc`仓库

## 自定义 404 错误页面内容

直接基于主题的模板修改，或者继承主题的模板，比如小改一下`404.html`页面的`body`部分，只需在`layout`目录下新建一个`my_404.html`， 注意文件名不能和内置的文件名冲突， 如果冲突会提示`generate html fail: maximum recursion depth exceeded in comparison`:
```markdown
{% extends "404.html" %}

{% block body_404 %}

这里是 body
{{ body|safe }}

{% endblock%}
```

然后在`404.md`中使用这个模板
```markdown
---
layout: my_404.html
---
```
