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

Laravel 5.7中Twilio通知Locale设置失效问题求助

解决Laravel Twilio通知Locale不生效的问题

我帮你分析下问题所在,以及对应的解决方案:

问题根源

你的邮件测试能正常工作,是因为你使用了真实邮件发送,Laravel在发送通知的流程中会自动临时切换到通知实例上设置的locale,所以视图渲染时__()函数能正确获取对应语言的翻译。

但Twilio测试用了Notification::fake(),这种模式下Laravel并不会执行完整的通知发送流程——它只会把通知实例存储起来,直到你调用assertSentTo时才会执行toTwilio方法。此时的执行环境还是测试的默认locale,并没有切换到你设置的fr,所以翻译用了默认文案。

解决方案

方案1:在测试回调中手动切换Locale

在assertSentTo的回调里,先切换到通知设置的locale,生成消息后再恢复原locale:

public function test_sms_notifications_use_localisation() { 
    Notification::fake(); 
    $user = factory(User::class)->create(); 
    $user->notify( (new WelcomeSmsNotificationStub)->locale('fr') ); 

    Notification::assertSentTo( 
        $user, WelcomeSmsNotificationStub::class, 
        function ($notification, $channels) use ($user) { 
            // 保存当前默认Locale
            $originalLocale = app()->getLocale();
            // 切换到通知指定的Locale
            app()->setLocale($notification->locale);
            // 生成Twilio消息
            $message = $notification->toTwilio($user);
            // 恢复原Locale
            app()->setLocale($originalLocale);
            
            return $message->content === 'Bonjour Le Monde';
        } 
    ); 
}

方案2:在通知类中主动处理Locale

修改你的WelcomeSmsNotificationStub类,让toTwilio方法生成内容时强制使用通知设置的locale,这样不管是真实发送还是fake测试都能生效:

class WelcomeSmsNotificationStub extends \Illuminate\Notifications\Notification { 
    public function via($notifiable) { 
        return [TwilioChannel::class]; 
    } 

    public function toTwilio($notifiable) { 
        // 保存当前Locale
        $originalLocale = app()->getLocale();
        // 切换到通知的Locale(如果没设置则用默认)
        app()->setLocale($this->locale ?? $originalLocale);
        
        // 获取翻译内容
        $content = __('welcome_notification.opening_text');
        
        // 恢复原Locale
        app()->setLocale($originalLocale);

        return (new TwilioSmsMessage())->content($content); 
    } 
}

验证测试

修改后再运行测试,__('welcome_notification.opening_text')就会正确读取法语的翻译文案,断言就能通过了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:48:38