核心思路
织梦CMS本身不是多语言系统,但我们可以利用其强大的栏目和模板功能来模拟一个多语言站点,核心思路是:

(图片来源网络,侵删)
- 创建语言目录:在网站根目录下为每种语言创建一个文件夹,如
/en/代表英文。 - 复制站点:将整个织梦站点复制到新的语言目录中。
- 分离栏目和内容:将不同语言的内容分别存放在不同的主栏目下(“新闻”栏目下有“中文新闻”和“English News”两个子栏目)。
- 制作语言模板:为每种语言制作独立的模板文件,通过判断当前语言目录来加载不同的模板。
- 修改链接和配置:确保所有链接都指向正确的语言目录,并修改系统配置以适应新站点。
详细操作步骤
第一步:准备工作(强烈建议)
在进行任何操作之前,请务必备份你的整个网站和数据库! 这是最重要的安全措施。
第二步:创建语言目录和站点文件
-
通过FTP或文件管理器,登录你的网站服务器。
-
在网站根目录(通常是
public_html或www)下,创建一个新的文件夹,en(代表 English)。 -
将你原有的织梦站点(除了
data和include目录,因为它们是共享的)完整复制到en文件夹中。
(图片来源网络,侵删)- 需要复制的目录:
templets(模板文件夹),special(专题文件夹),uploads(上传文件夹),plus(附加功能文件夹) 等。 - 不需要复制的目录:
data(存放缓存和配置文件) 和include(核心类库),这两个文件夹应该被符号链接或硬链接到en目录中,以确保两个站点共享核心数据和功能,如果你不熟悉链接操作,直接复制也可以,但更新时需要两边都更新。
你的网站结构现在看起来像这样:
/wwwroot/ ├── /en/ (英文站点) │ ├── /templets/ │ ├── /uploads/ │ ├── index.php │ └── ... (其他织梦文件) ├── /templets/ (中文站点模板) ├── /uploads/ ├── index.php ├── dede/ (后台目录) ├── data/ └── include/ - 需要复制的目录:
第三步:创建多语言栏目结构
这是整个流程的核心,我们需要在后台创建一套平行的栏目结构来存放不同语言的内容。
-
登录织梦后台 (
/dede/)。 -
进入“栏目管理”。
(图片来源网络,侵删) -
创建一级语言栏目(可选但推荐):
- 创建一个顶级栏目,命名为“网站内容”。
- 在其下创建两个子栏目:
- 栏目名称:
- 栏目目录:
cn_content(这个目录名可以任意,但不要和实际语言文件夹混淆) - 栏目属性:选择“最终列表栏目”。
- 创建另一个子栏目:
- 栏目名称:
English Content - 栏目目录:
en_content - 栏目属性:选择“最终列表栏目”。
- 栏目名称:
- 这样,你的所有中文内容都将放在
cn_content及其子栏目下,所有英文内容都放在en_content及其子栏目下。
-
创建具体的内容栏目:
- 在 下,创建你需要的所有栏目,如“公司新闻”、“产品中心”、“关于我们”等。
- 在
English Content下,创建对应的英文栏目,如 "Company News", "Products", "About Us" 等。 - 关键点:确保中英文栏目的层级结构保持一致,这样模板调用时才能方便地对应。
第四步:制作多语言模板
现在我们需要让模板能够识别当前是哪个语言站点,并加载对应的内容。
-
复制模板文件:
- 进入
/templets/目录,将你当前使用的模板文件夹(default)完整复制到/en/templets/目录下。 - 你现在有两个一模一样的模板文件夹:
/templets/default/(中文) 和/en/templets/default/(英文)。
- 进入
-
修改英文模板中的路径:
- 打开
/en/templets/default/下的所有模板文件(如index.htm,list.htm,article_artlist.htm等)。 - 修改所有站内链接:将像
{dede:global.cfg_cmsurl/}/这样的链接前缀,修改为/en/。- 例如:
- 原始链接:
{dede:field name='arcurl'/} - 在列表页和内容页,织梦会自动生成正确路径,所以这里主要修改的是像首页、栏目页等固定链接。
- 更稳妥的方法是,在模板中找到所有指向首页、栏目页、专题页的链接,手动加上
/en/前缀。 - 推荐做法:在模板的
<head>部分或公共头部文件(如head.htm)中,为所有相对路径添加一个基础路径<base href="/en/" />,这样,模板中所有相对链接都会以/en/为基准。
- 原始链接:
- 例如:
- 打开
-
修改模板标签以调用对应栏目:
- 这是最关键的一步,你的模板需要能够动态调用当前语言下的栏目。
- 假设你的栏目结构是:
- 中文新闻栏目ID是 5
- 英文新闻栏目ID是 6
- 在首页模板 (
index.htm) 中调用新闻列表:- 错误做法:写死
{dede:arclist typeid='5' ...},因为这只能调用中文新闻。 - 正确做法:使用PHP判断当前路径,然后调用不同的栏目ID。
- 错误做法:写死
{dede:php} // 获取当前请求的URI $current_uri = $_SERVER['REQUEST_URI']; // 判断是否在英文目录下 if (strpos($current_uri, '/en/') !== false) { // 英文站点,调用英文新闻栏目ID (假设为6) $en_news_id = 6; $typeid = $en_news_id; } else { // 中文站点,调用中文新闻栏目ID (假设为5) $cn_news_id = 5; $typeid = $cn_news_id; } {/dede:php} {dede:arclist typeid='$typeid' titlelen='40' row='5'} <li> <a href="[field:arcurl/]">[field:title/]</a> </li> {/dede:arclist}- 对其他模板进行类似修改:在
list.htm(列表页) 和article.htm(内容页) 中,你也需要使用类似的PHP代码来确保面包屑导航、相关文章、上一篇/下一篇等功能都指向正确的语言栏目。
-
创建独立的语言首页模板:
- 你可以为英文站点创建一个完全不同的首页模板,
en_index.htm。 - 修改
/en/index.php文件,让它加载这个新模板:// /en/index.php require_once(dirname(__FILE__)."/include/common.inc.php"); require_once(DEDETEMPLATE.'/default/en_index.htm'); exit();
- 这样,当用户访问
/en/时,就会显示en_index.htm模板。
- 你可以为英文站点创建一个完全不同的首页模板,
第五步:修改系统配置
-
修改英文站点的
common.inc.php:-
打开
/en/include/common.inc.php文件。 -
找到
$cfg_cmspath和$cfg_cmsurl这两行。 -
将它们的值修改为英文站点的路径:
// 修改前 // $cfg_cmspath = '/wwwroot'; // $cfg_cmsurl = 'http://www.yourdomain.com'; // 修改后 $cfg_cmspath = '/wwwroot/en'; // 指向英文站点的物理路径 $cfg_cmsurl = 'http://www.yourdomain.com/en'; // 指向英文站点的URL
-
-
设置默认首页:
- 登录你的服务器控制面板(如 cPanel)。
- 进入“索引管理”或“默认文档”设置。
- 确保首页文件顺序是
index.php,织梦会通过index.php来加载对应的模板。
第六步:添加语言切换按钮
在你的网站模板(最好是头部或底部模板,如 head.htm 或 footer.htm)中,添加一个语言切换链接。
<div class="language-switcher">
<a href="/">中文</a> |
<a href="/en/">English</a>
</div>
这样,用户就可以轻松地在两个语言版本之间切换了。
总结与注意事项
- 维护成本:这种方法的缺点是,当你需要更新模板或进行系统升级时,可能需要在中文和英文两个站点上分别操作(如果核心文件没有共享的话)。
- URL结构:你的网站URL会变成
www.yourdomain.com/en/...,这是一种清晰且SEO友好的多语言URL结构。 - SEO优化:记得在后台为每个栏目和文章设置正确的
title、keywords和description要填写英文的SEO标签。 - 图片和附件:上传的图片和附件会存放在
uploads文件夹中,两个站点共享,没有问题。 - 表单等Plus功能:如果你使用了Plus目录下的表单(如反馈、会员注册等),它们的提交地址也需要指向对应语言的目录,你可能需要为英文站点复制一份
plus目录下的文件,并修改其中的路径。
虽然这个过程比较繁琐,但一旦完成,你就拥有了一个功能完整、易于管理的双语织梦网站,耐心按照步骤操作,你一定能成功!
