自定义语言项 Language Items
语言项用于把文案从模板 / 代码中抽离,支持多语言。主题可在对应语言包目录自定义语言项。
一、语言包目录
| 端 | 语言包路径 |
|---|---|
| 前台 | languages/zh_cn/、languages/zh_tw/、languages/en_us/(随多语言前缀切换) |
| 后台 | languages/zh_cn/admin/(后台使用独立的一份,语言项放错目录后台读不到) |
二、自动加载规则
系统按下面的顺序 require 语言文件,后加载覆盖先加载的同名键:
- 语言包目录下所有
*.lang.php—— 由glob自动收集,新增文件即自动生效(文件名不要求与模块同名,如m147.lang.php也可以); - 已安装模块的同名文件(如
article.lang.php,用于保证模块语言项不缺失); _override.lang.php—— 存在于语言包目录时永远最后加载、优先级最高,适合覆盖系统或模块已有的键(做定制文案时优先用它,避免直接改系统文件)。
三、文件写法
<?php
// 自定义语言项
$_LANG['my_theme_slogan'] = '专注品质,用心服务';
$_LANG['btn_book_now'] = '立即预约';
- 键名建议小写下划线;
- 同目录内按文件名字典序加载,同名键以最后加载的为准;要稳定覆盖请用
_override.lang.php。
四、使用方式
| 场景 | 写法 |
|---|---|
PHP(控制器 / 服务 / ..from_theme.php) |
lang('my_theme_slogan'),带默认值 lang('my_theme_slogan', '默认文案');主题脚本内可用 Portal::langKey('my_theme_slogan') |
模板(.dwt / .tpl) |
{$lang.my_theme_slogan} |
| 前台 / 后台 JS | lang('btn_book_now')(数据来自 window.__douLang,由 lang_js 端点按当前语言包输出) |
五、未定义键行为
- 模板:未定义的键输出为空;
- JS:
lang()返回传入的 fallback,未传则返回键名本身。
六、缓存
修改语言文件后无需手动清缓存:JS 语言包按内容指纹自动换版本号,服务端每次请求实时加载。