自定义语言项 Language Items

自定义语言项 Language Items

语言项用于把文案从模板 / 代码中抽离,支持多语言。主题可在对应语言包目录自定义语言项。

一、语言包目录

端 语言包路径
前台 languages/zh_cn/、languages/zh_tw/、languages/en_us/(随多语言前缀切换)
后台 languages/zh_cn/admin/(后台使用独立的一份,语言项放错目录后台读不到)

二、自动加载规则

系统按下面的顺序 require 语言文件,后加载覆盖先加载的同名键:

  1. 语言包目录下所有 *.lang.php —— 由 glob 自动收集,新增文件即自动生效(文件名不要求与模块同名,如 m147.lang.php 也可以);
  2. 已安装模块的同名文件(如 article.lang.php,用于保证模块语言项不缺失);
  3. _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 语言包按内容指纹自动换版本号,服务端每次请求实时加载。

添加日期: