AnQiCMS作为一个高效、可定制的内容管理系统,提供了强大的多语言支持,帮助网站面向全球用户。要有效地配置和使用这一功能,确保内容在前端能够正确切换和显示,我们需要从后台设置到前端模板实现,一步步地进行细致的调整。
核心理念:理解AnQiCMS的多语言管理方式
在使用AnQiCMS的多语言功能时,一个重要的核心理念是:它并非提供自动翻译功能,而是通过管理不同语言版本的内容来实现多语言支持。这意味着,您需要为每一种目标语言创建和维护一套独立的内容(文章、产品、页面等),并为静态文本提供对应的翻译文件。系统会在用户切换语言时,展示相应语言版本的内容和界面文字。
从技术实现上看,AnQiCMS通常将每个语言版本视为一个独立的“站点”,在后台进行管理和配置,从而实现内容和设置的隔离。
第一步:后台基础配置与内容准备
首先,确保您的AnQiCMS环境已经为多语言做好了准备。
设置默认语言包 在AnQiCMS的后台,您会发现“全局功能设置”中有一个“默认语言包”选项。这里可以设定当前站点的默认语言。这个设置主要影响系统内置的文字信息(如后台界面提示、某些默认的系统消息等)在当前站点下的显示。例如,如果您的中文站点需要显示一些系统消息为中文,这里就应该选择“中文”。对于您的英文站点,则选择“英文”。
创建与配置语言版本站点 AnQiCMS的多语言实现往往依赖于其强大的“多站点管理”功能。要支持多种语言,您需要为每种语言版本创建一个独立的站点。
- 通过多站点管理创建: 在后台的“多站点管理”区域,点击“添加新站点”。在这里,您可以为不同的语言版本配置独立的域名(例如,中文站点使用
www.yourdomain.com,英文站点使用en.yourdomain.com),或通过反向代理配置子目录(www.yourdomain.com/en/)。 - 站点根目录和数据库: 确保为每个语言站点配置独立的“站点根目录”和“数据库名称”,以实现内容的物理隔离和管理。如果您是Docker部署,站点根目录通常以
/app/开头,数据库名称也建议根据语言进行区分,例如yourdomain_com_cn和yourdomain_com_en。 - 默认语言包设置: 在创建每个语言站点时,或在每个站点的“全局功能设置”中,分别将其“默认语言包”设置为对应的语言,例如为英文站点选择“英文”。
- 通过多站点管理创建: 在后台的“多站点管理”区域,点击“添加新站点”。在这里,您可以为不同的语言版本配置独立的域名(例如,中文站点使用
录入与管理多语言内容 这是多语言网站运营的关键一步。您需要在每个语言版本站点下,分别录入和管理内容。例如,在中文站点下发布中文文章,在英文站点下发布对应的英文文章。
- 文档、分类、标签等: 无论是文章、产品、单页面还是分类、标签,都需要在对应的语言站点下进行创建和维护。它们之间的关联(如文章所属分类)也应在各自的语言环境中完成。
- 内容模型: 如果您使用了自定义内容模型,也需要在每个语言版本下确保这些模型及其字段的配置是正确且一致的。
第二步:前端模板实现多语言切换与显示
内容准备就绪后,接下来需要在前端模板中实现语言的切换和内容的正确显示。
静态文本翻译:
locales目录与tr标签 对于网站界面上固定的文本(如导航菜单项、版权信息、表单提示等),AnQiCMS通过locales目录和tr(translate)标签进行管理。- 创建
locales目录: 在您使用的模板目录下,创建一个名为locales的文件夹。 - 语言文件夹: 在
locales文件夹内,为每种语言创建子文件夹,例如zh-CN代表简体中文,en-US代表英文。 - 翻译文件: 在每个语言子文件夹中,创建
default.yml(或其他您定义的名称)文件,并以 YAML 格式编写键值对,键是您在模板中使用的标识,值是该语言对应的翻译文本。 例如,在locales/zh-CN/default.yml中:
在"yourLocation": "您的位置" "contactUs": "联系我们"locales/en-US/default.yml中:"yourLocation": "Your Location" "contactUs": "Contact Us" - 使用
tr标签: 在您的模板文件(如header.html,footer.html等)中,使用{% tr "键名" %}的形式来调用翻译文本。 例如:<div>{% tr "yourLocation" %}</div>当用户访问中文站点时,会显示“您的位置”;访问英文站点时,则显示“Your Location”。
- 创建
动态内容展示:与当前站点语言关联 对于您在后台录入的文章、产品等动态内容,AnQiCMS会自动根据当前访问的“语言站点”来加载对应语言版本的内容。
- 例如,当用户访问
en.yourdomain.com时,archiveList、categoryList、pageDetail等标签会自动从该英文站点的数据库中获取并显示英文内容。您无需在这些标签中额外指定语言参数。 - 确保您的模板标签(如
archiveList,categoryList)在调用时,没有固定siteId参数,以便它们能自动识别当前站点的ID。通常,这些标签在不指定siteId时,会默认操作当前站点的数据。
- 例如,当用户访问
前端语言切换器 为了让用户能够自由切换语言版本,您需要在前端模板中添加语言切换器。AnQiCMS提供了
languages标签来获取所有语言站点的列表。- 使用
languages标签:
这段代码会遍历所有配置的语言站点,并生成指向它们链接。您可以根据需求调整显示样式,例如使用旗帜图标 ({%- languages websites %} {%- if websites %} <nav class="language-switcher"> <span>切换语言:</span> {%- for item in websites %} <a href="{{ item.Link }}" {% if item.Nofollow == 1 %}rel="nofollow"{% endif %}> {%- if item.LanguageIcon %} <img src="{{ item.LanguageIcon }}" alt="{{ item.LanguageName }}" /> {%- else %} {{ item.LanguageEmoji }} {% endif %} {{ item.LanguageName }} </a> {%- endfor %} </nav> {%- endif %} {%- endlanguages %}LanguageIcon) 或语言代码 (LanguageEmoji)。
- 使用
SEO 优化:
hreflang标签 为了帮助搜索引擎理解您的多语言内容并将其展示给正确语言区域的用户,在每个页面的<head>标签中添加hreflang属性至关重要。- 在
base.html或页面头部添加: “`twig {%- languages websites %} {%- for item in websites %} {%-
- 在