DedeCMS 本身是单语言的,但它提供了非常灵活的机制来实现多语言网站,核心思路是利用其强大的自定义模型和字段功能,为每个内容条目附加一个语言版本的数据。

下面我将为你分解实现步骤、优缺点以及更现代的替代方案。
核心实现方案:自定义模型 + 多语言字段
这是最经典、最灵活的 DedeCMS 多语言实现方法,尤其适合内容结构复杂(如文章、产品、案例等)的网站。
第一步:创建自定义模型
默认的“文章模型”可能无法满足双语需求,我们需要创建一个全新的、专为多语言设计的模型。
- 登录后台:进入 DedeCMS 后台。
- 找到模型管理:在“核心” -> “内容模型管理”中,点击“增加一个新模型”。
- 填写模型信息:
- 模型名称:双语文章模型”。
- 表前缀:保持默认
dede_archives或使用新的,如dede_archives_en(但通常不推荐,保持原表更简单)。 - 附加表:
dede_addonarticle_multilang,这个表将用来存储我们自定义的双语字段。
- 设置字段:这是最关键的一步,我们需要为这个模型添加多语言字段。
- 点击“字段管理” -> “增加新字段”。
- 字段名:
en_title(英文标题) - :
- 字段类型:
单行文本 - 是否为空:
是 - 重复:
否 - 其他选项:根据需要设置,如“默认值”、“显示顺序”等。
- 保存后,继续添加其他字段:
en_body(英文内容) -> 字段类型:Html文本编辑器en_description(英文摘要) -> 字段类型:多行文本en_keywords(英文关键词) -> 字段类型:单行文本
- 重复此过程,为所有需要双语的内容(如产品、服务)创建对应的模型和字段。
第二步:修改模板文件
模板是实现语言切换和显示的关键。

-
创建语言切换按钮: 在你的网站头部模板(如
head.htm)中,添加一个语言切换的链接。<div class="lang-switch"> <a href="{dede:global.cfg_cmsurl/}/?lang=cn">中文</a> <a href="{dede:global.cfg_cmsurl/}/?lang=en">English</a> </div> -
详情页模板 (
article_article.htm): 在这个模板中,你需要根据当前语言变量来决定显示哪个字段。- 获取语言变量:在模板开头,通过 PHP 获取 URL 中的
lang参数。{dede:php} $lang = isset($_GET['lang']) && in_array($_GET['lang'], ['cn', 'en']) ? $_GET['lang'] : 'cn'; {/dede:php} - :
{dede:field.name function='htmlspecialchars(@me)'/}这里需要修改,直接调用
name字段(中文标题),为了更清晰,可以修改为:<h1> {dede:php} if ($lang == 'en') { echo $this->Fields['en_title']; } else { echo $this->Fields['title']; // DedeCMS 默认标题字段 } {/dede:php} </h1> - :
<div class="article-content"> {dede:php} if ($lang == 'en') { echo $this->Fields['en_body']; } else { echo $this->Fields['body']; // DedeCMS 默认内容字段 } {/dede:php} </div> - 对列表页 (
list_article.htm) 和首页 (index.htm) 做同样修改,循环调用时根据$lang变量来显示en_title或title。
- 获取语言变量:在模板开头,通过 PHP 获取 URL 中的
第三步:发布内容时的注意事项
在后台发布文章时,你需要在“高级选项”中找到你添加的字段(如 en_title, en_body),并填入对应的英文内容。

优缺点分析
优点
- 高度灵活:可以精确控制每个字段的语言版本,适合内容结构复杂的网站。
- 数据统一:所有语言版本的数据都存储在同一个内容条目中,管理方便,易于同步更新。
- SEO 友好:可以通过 URL 参数(如
?lang=en)让搜索引擎识别不同语言版本,虽然不如子域名(en.example.com)完美,但可以通过 sitemap 等方式弥补。 - 充分利用 DedeCMS:不需要修改核心文件,升级相对安全。
缺点
- 模板修改复杂:需要手动修改大量模板文件,并嵌入 PHP 代码,对不熟悉 PHP 和 DedeCMS 模板语法的人来说有难度。
- 维护成本高:每次添加新模型或字段,都需要同时为所有语言版本创建,并修改相关模板,容易出错。
- URL 结构不理想:
?lang=en的方式不够优雅,对 SEO 不如子域名或目录(/en/)友好。 - 非标准化:这算是一种“hack”或“变通”方案,不是 DedeCMS 的原生设计,可能不符合最佳实践。
替代方案与最佳实践
除了上述方法,还有其他实现方式,各有优劣。
使用子站或栏目分离(简单但笨重)
- 方法:创建两套完全独立的栏目(如“中文新闻”和“English News”),然后分别发布内容。
- 优点:实现最简单,无需修改模板或模型。
- 缺点:
- 数据完全分离:无法同步更新,修改一篇文章需要修改两次。
- 管理混乱混杂,难以统一管理。
- 用户体验差:语言切换需要跳转到不同的栏目,URL 结构不统一。
- 不推荐:仅适用于极少数、内容完全不相关的网站。
使用现成的多语言插件
- 方法:在网上搜索“DedeCMS 多语言插件”,有一些开发者制作了现成的插件。
- 优点:开箱即用,节省开发时间。
- 缺点:
- 兼容性风险:插件可能与你的 DedeCMS 版本不兼容,或与其它插件冲突。
- 安全性:来源不明的插件可能包含后门。
- 功能受限:插件功能可能不够灵活,无法满足个性化需求。
- 停止维护:很多旧插件早已无人维护。
升级到更现代的 CMS(强烈推荐)
对于任何新项目,或者对网站有长期规划(如频繁更新、追求更好的 SEO 和用户体验),强烈建议不要使用 DedeCMS 来构建双语网站。
DedeCMS 是一个时代的产物,其架构和设计理念与现代 CMS 相比已经落后,现代 CMS 在多语言支持方面有天生的优势:
-
WordPress + WPML/Polylang 插件:
- WPML:功能最强大、最专业的多语言解决方案,支持所有内容类型,SEO 优化极佳。
- Polylang:免费且功能强大,适合大多数网站。
- 优势:原生支持,无需复杂操作,URL 结构灵活(子域名、子目录、语言代码),翻译管理极其方便,社区庞大,文档丰富。
-
Joomla + JoomFish/FLEXIcontent:
Joomla 本身对多语言有较好的支持,配合相关插件可以实现非常专业的多语网站。
-
国产 CMS(如 Typecho, EmpressCMS 等):
一些新兴的国产 CMS 开始重视多语言支持,可能提供更简洁的解决方案。
| 方案 | 难度 | 灵活性 | 维护成本 | SEO | 推荐度 |
|---|---|---|---|---|---|
| 自定义模型 | 高 | 极高 | 高 | 中等 | ★★☆☆☆ (仅限旧项目改造) |
| 子站/栏目分离 | 低 | 低 | 低 | 差 | ☆☆☆☆☆ (不推荐 |
