You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何动态修改自定义Blade指令的值?——Stichoza/google-translate-php包Blade指令语言切换失效问题

解决Blade自定义翻译指令仅更新一次的问题

我一眼就看出问题出在哪了——你的Blade指令是在视图编译阶段就完成了翻译操作,而不是在每次请求的运行时执行。

你看,当Laravel第一次渲染视图时,会把Blade模板编译成PHP文件并缓存起来。你的translate指令在编译时就调用了GoogleTranslate::trans,把翻译结果直接硬编码到编译后的PHP文件里。之后哪怕你切换语言,Laravel还是会直接用缓存的编译文件,根本不会重新执行翻译逻辑,除非你清掉视图缓存。

修复方案

把翻译逻辑放到运行时执行,也就是让Blade指令返回一段会在请求时执行的PHP代码,而不是直接返回翻译后的文本:

public function boot()
{
    Blade::directive('translate', function ($text) {
        // 这里不直接执行翻译,而是返回运行时会执行的PHP代码
        return "<?php echo GoogleTranslate::trans($text, app()->getLocale(), 'en'); ?>";
    });
}

为什么这样有效?

修改后的指令会让编译后的视图文件保留调用GoogleTranslate::trans的代码,而不是硬编码的翻译结果。这样每次请求时,都会根据当前的app()->getLocale()值重新执行翻译,自然就能跟着语言切换实时更新了。

额外提示

如果你之前已经缓存了视图,记得先执行一次php artisan view:clear清除旧的编译文件,然后再测试语言切换功能,就能看到实时生效的效果了。

内容的提问来源于stack exchange,提问作者Udara Herath

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 22:17:50