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

Laravel教程:在Blade视图与控制器中使用语言文件短变量名

如何在Laravel的Blade视图与控制器中使用语言文件的短变量名?

嘿,我来给你分享几个实用的方法,帮你摆脱冗长的语言键名调用,用更短的方式引用语言文件内容:

方法一:通过视图共享(View Composers)注入变量

这个方法适合把特定语言文件的所有内容一次性注入到视图里,直接用变量名调用就行:

  1. 创建视图Composer类
    在app/View/Composers目录下新建LoginLangComposer.php(如果没有View/Composers目录就手动创建):

    namespace App\View\Composers;
    
    use Illuminate\View\View;
    use Illuminate\Support\Facades\Lang;
    
    class LoginLangComposer
    {
        public function compose(View $view)
        {
            // 加载account/login语言文件的所有键值对
            $loginLang = Lang::get('account/login');
            
            // 把每个语言键单独绑定为视图变量,比如$text_login、$error_login
            foreach ($loginLang as $key => $value) {
                $view->with($key, $value);
            }
        }
    }
    
  2. 注册视图Composer
    打开app/Providers/AppServiceProvider.php,在boot方法里注册刚才的Composer:

    use App\View\Composers\LoginLangComposer;
    use Illuminate\Support\Facades\View;
    
    public function boot()
    {
        // 只绑定到welcome视图
        View::composer('welcome', LoginLangComposer::class);
        
        // 如果要让所有视图都能用,改成下面这行
        // View::composer('*', LoginLangComposer::class);
    }
    
  3. 在Blade里直接调用变量
    现在你可以在welcome.blade.php里直接用短变量名了:

    <a href="{{ route('login') }}">{{ $text_login }}</a>
    <a href="{{ route('register') }}">{{ $text_register }}</a>
    @if($errors->has('login'))
        <p class="text-red-500">{{ $error_login }}</p>
    @endif
    

方法二:自定义辅助函数,预设语言前缀

如果想在控制器和视图里都用短调用,自定义辅助函数是个不错的选择:

  1. 创建辅助函数文件
    在app/Helpers目录下新建LangHelper.php:

    if (!function_exists('__login')) {
        /**
         * 快速调用account/login语言文件的内容
         */
        function __login($key, $replace = [], $locale = null)
        {
            // 自动拼接account/login前缀
            return __("account/login.$key", $replace, $locale);
        }
    }
    
  2. 让Laravel自动加载这个文件
    打开项目根目录的composer.json,在autoload的files数组里添加这个文件路径:

    "autoload": {
        "files": [
            "app/Helpers/LangHelper.php"
        ],
        // 保留原来的autoload内容...
    }
    
  3. 更新自动加载
    在终端运行以下命令,让Composer更新自动加载规则:

    composer dump-autoload
    
  4. 在视图和控制器里使用
    Blade视图里:

    <a href="{{ route('login') }}">{{ __login('text_login') }}</a>
    

    控制器里:

    return back()->withErrors(['login' => __login('error_login')]);
    

方法三:将常用语言项移到根语言文件(适合全局通用文本)

如果这些文本是全局常用的,你可以把它们移到根目录的语言文件里,比如resources/lang/en/messages.php:

// resources/lang/en/messages.php
return [
    'text_login' => 'Login',
    'text_register' => 'Register',
    'error_login' => 'These credentials do not match our records.',
];

然后直接用__('text_login')调用就行,不过这个方法更适合全局通用的文本,如果只是登录模块专用,前两种方法更灵活。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:31:10