Chevereto V4.0.5 专业版的一个实际问题:初始语言为简体中文,右上角切换成英语后刷新页面,内容依然是中文。语言下拉正常、cookie 也写入了,但渲染时语言没生效。排查下来是旧版代码里的 L10n 类没有读取用户选择的语言。
![图片[1]-Chevereto V4 右上角语言切换不起作用解决方法-本站](https://i1.img.azhai.de/upload/84389c3538b83398-23-02-12-1.jpg?)
问题定位
语言切换的结果保存在 cookie 的 USER_SELECTED_LANG 键里,而 chevereto/app/src/Legacy/Classes/L10n.php 决定 locale 时没把这个 cookie 算进去,页面每次渲染都按默认语言走。
修改 L10n.php
共两处。第一处,在文件头部引用 cookie 模块:
use function CheveretoVarscookie;
第二处,全局搜索下面两行:
self::processTranslation($locale);
self::$instance = $this;
在这两行上方添加语言判定逻辑:
$user_lang = cookie()['USER_SELECTED_LANG'] ?? '0';
if (isset($user_lang) && $user_lang != '0') { // cookie有值
$locale = $user_lang;
} else { // cookie没值
if (Login::isLoggedUser()) {
$user_lang = Login::getUser()['language'];
$locale = $user_lang;
} else {
if (!isset($user_lang)) {
$locale = getSetting('default_language');
}
}
}
逻辑很直白:cookie 里有 USER_SELECTED_LANG 就直接用它;没有的话,已登录用户取账号里的 language 设置;两者都没有才回落到 default_language。
验证与提醒
改完刷新页面,重新切换一次语言确认能持久生效。两点提醒:环境里有 OPcache 之类缓存的话,改完 php 文件要重启 php-fpm,不然看不到效果;Chevereto 升级会覆盖这个文件,升级后需要重新打这两处补丁。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
















暂无评论内容