Laravel 后台如何返回国际化的消息

使用 Blade 适合,国际化很容易使用。
首先 App::setLocale('zh')
再使用 @lang('message.hello') 就很容易让消息国际化了。
可是在文档中,却没有找到后台可以使用的方法。
而我又在做的是 API 服务器。又需要这些功能。

1. 发现问题,寻找思路

@lang() 也是一个方法,只不过它是 Blade 的语法,最终会被翻译成 php 的语法。
那就让我们来看看它翻译后是什么样子。到底是哪个类调用了哪个方法。

  1. 随便找一个 blade 文件,在随便一个地方写上 @lang(),这里一定要为空,不传任何参数,让它报错,这也我们才能看到错误日志,快速便捷定位它调用的是哪个类中的哪个方法。

  2. 运行这个 blade 文件,我们会看到如下图

    错误日志_2

    我可以看到,@lang() 被解析后,实际上调用的是 Illuminate\Translation\Translator::getFromJson(),调用方法是 app('translator')->getFromJson()

  3. 创建一个测试 Controller 并调用刚刚的方法试一下。

    <?php
    
    namespace App\Http\Controllers
    
    use Illuminate\Http\Request;
    use App\Http\Controllers\Controller;
    use Illuminate\Translation\Translator;
    
    class TestController extends Controller
    {
        public function __invoke(Request $request)
        {
            $message = app('translator')->getFromJson("messages.welcome");
    
            return view('welcome', $message);
        }
    }

    再运行一个这个 welcome.blade.php 文件。

  4. 大功告成!完结撒花~

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!