--- 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 --- ```