【问题标题】:Laravel Translate Notification Email Template According to Notifiable LocaleLaravel 根据 Notifiable Locale 翻译通知电子邮件模板
【发布时间】:2022-01-09 07:46:59
【问题描述】:

我有一个多语言 Laravel 应用程序,其中用户表中每个用户的区域设置为 locale 列。

在每个请求开始时,我将应用程序区域设置为当前登录用户的区域:

App::setLocale(App::user()->locale);

当用户 A 进行事件时,我会(通过数据库和邮件)向可能与用户 A 具有不同语言环境的所有其他用户发送通知。

现在我正在使用同步驱动程序进行通知。

我知道我可以在toMail 函数中翻译电子邮件的内容。但是模板中仍然有一些标签,我无法控制它们的翻译。它们是根据用户 A 语言环境而不是 notifiable 语言环境翻译的。

我发布了通知邮件模板:

php artisan vendor:publish --tag=laravel-notifications

将通知邮件模板复制到resources/views/vendor/notifications/email.blade.php

在这个模板中有一些翻译例如:

@lang('Whoops!')
@lang('Hello!')
@lang(
    "If you’re having trouble clicking the \":actionText\" button, copy and paste the URL below\n".
    'into your web browser:',
    [
        'actionText' => $actionText,
    ]
) <span class="break-all">[{{ $displayableActionUrl }}]({{ $actionUrl }})</span>

我需要将可通知的语言环境传递给此文件才能正确翻译标签:

@lang('Whoops!', [], $notifiableLocale)
@lang('Hello!', [], $notifiableLocale)

如何将通知语言环境传递给该模板?

【问题讨论】:

    标签: laravel


    【解决方案1】:

    您不能直接在供应商视图中传递变量,因为它是由 laravel 的核心库呈现的。将语言环境作为变量传递的 TBH 使模板有点混乱。您可以在向您的用户发送通知时localize您的通知:

    foreach ($users as $user) {
        $user->notify((new InvoicePaid($invoice))->locale($user->locale));
    }
    

    此外,请确保您为您的用户提供任何可用语言环境的所有翻译

    【讨论】:

      猜你喜欢
      • 2011-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多