多语言栏目概述
织梦CMS原生不支持完整的多语言功能,但可以通过多站点架构或栏目分组的方式实现中英文或其他语言的内容管理。常见的做法包括:使用多套织梦系统独立管理、同一系统内创建语言栏目目录等。
一、方案一:独立站点方案
为每种语言部署独立的织梦CMS系统:
主站结构: www.domain.com/ -- 中文主站(独立数据库) en.domain.com/ -- 英文分站(独立数据库,独立织梦系统) jp.domain.com/ -- 日文分站(独立数据库,独立织梦系统) 优点:完全独立,互不影响,便于管理 缺点:维护成本高,内容需分别录入
二、方案二:同一系统内栏目分组
在织梦CMS中创建语言分类栏目结构:
栏目结构:
├── 中文站(顶级栏目) typeid=1
│ ├── 新闻中心 typeid=2
│ ├── 产品展示 typeid=3
│ └── 关于我们 typeid=4
├── English(顶级栏目) typeid=5
│ ├── News typeid=6
│ ├── Products typeid=7
│ └── About Us typeid=8
└── 日本語(顶级栏目) typeid=9
├── ニュース typeid=10
├── 製品 typeid=11
└── 会社概要 typeid=12
三、使用自定义字段存储多语言内容
为文章附加表添加多语言字段:
-- 为addonarticle表添加英文内容字段
ALTER TABLE dede_addonarticle
ADD COLUMN body_en TEXT COMMENT 'English content',
ADD COLUMN title_en VARCHAR(200) COMMENT 'English title',
ADD COLUMN keywords_en VARCHAR(200) COMMENT 'English keywords';
-- 模板中根据语言参数显示对应内容
{dede:php}
$lang=isset($_GET['lang']) ? $_GET['lang'] : 'zh';
if($lang=='en'){
$titleField='title_en';
$bodyField='body_en';
} else {
$titleField='title';
$bodyField='body';
}
{/dede:php}
四、栏目模板的多语言切换
<!-- 语言切换导航 -->
<div class="lang-switch">
<a href="/zh/" class="active">中文</a>
<a href="/en/">English</a>
<a href="/jp/">日本語</a>
</div>
<!-- 按语言目录加载不同模板 -->
{dede:php}
$typedir=$refObj->TypeLink->TypeInfos['typedir'];
if(strpos($typedir, '/en/') !==false){
require('templets/en/list_article.htm');
} elseif(strpos($typedir, '/jp/') !==false){
require('templets/jp/list_article.htm');
}
{/dede:php}
五、多语言栏目的URL规划
推荐URL结构: 中文站: www.domain.com/news/123.html 英文站: www.domain.com/en/news/123.html 日文站: www.domain.com/jp/news/123.html 使用hreflang标签告知搜索引擎: <link rel="alternate" hreflang="zh-CN" href="http://www.domain.com/news/123.html"> <link rel="alternate" hreflang="en" href="http://www.domain.com/en/news/123.html"> <link rel="alternate" hreflang="ja" href="http://www.domain.com/jp/news/123.html"> <link rel="alternate" hreflang="x-default" href="http://www.domain.com/news/123.html">
六、语言设置的系统参数
<!-- 在data/config.cache.inc.php中设置 --> $cfg_soft_lang='utf-8'; // 确保使用UTF-8编码,支持多语言字符 $cfg_cli_time=8; // 时区设置 <!-- HTML页面语言声明 --> 中文:<html lang="zh-CN"> 英文:<html lang="en"> 日文:<html lang="ja">
最佳实践:对于需要多语言支持的网站,建议采用独立站点方案。虽然维护成本稍高,但数据隔离更好,SEO效果最理想。如果预算有限,同一系统内栏目分组是最经济实用的方案。