Chevereto V4 右上角语言切换不生效:L10n.php 两处补丁

Chevereto V4.0.5 专业版的一个实际问题:初始语言为简体中文,右上角切换成英语后刷新页面,内容依然是中文。语言下拉正常、cookie 也写入了,但渲染时语言没生效。排查下来是旧版代码里的 L10n 类没有读取用户选择的语言。

图片[1]-Chevereto V4 右上角语言切换不起作用解决方法-本站

问题定位

语言切换的结果保存在 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
喜欢就支持一下吧
点赞5 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容