Skip to content

Commit 6825c38

Browse files
committed
fix: Reset password, email confirm, activation not locale aware
1 parent 9e80f5e commit 6825c38

File tree

4 files changed

+52
-1
lines changed

4 files changed

+52
-1
lines changed
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?php
2+
3+
/*
4+
* This file is part of Flarum.
5+
*
6+
* For detailed copyright and license information, please view the
7+
* LICENSE file that was distributed with this source code.
8+
*/
9+
10+
namespace Flarum\Mail;
11+
12+
use Flarum\Locale\Translator;
13+
use Flarum\Settings\SettingsRepositoryInterface;
14+
use Flarum\User\UserRepository;
15+
16+
trait SetTranslatorLocaleForEmailTrait
17+
{
18+
/**
19+
* Set the translator locale based on the user's preference for the given email.
20+
* Falls back to forum default if user not found or has no preference.
21+
*/
22+
protected function setTranslatorLocaleForEmail(
23+
Translator $translator,
24+
SettingsRepositoryInterface $settings,
25+
string $email
26+
): void {
27+
$users = resolve(UserRepository::class);
28+
$user = $users->findByEmail($email);
29+
30+
$locale = $user
31+
? ($user->getPreference('locale') ?? $settings->get('default_locale'))
32+
: $settings->get('default_locale');
33+
34+
$translator->setLocale($locale);
35+
}
36+
}

framework/core/src/User/AccountActivationMailer.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
namespace Flarum\User;
1111

1212
use Flarum\Http\UrlGenerator;
13+
use Flarum\Mail\SetTranslatorLocaleForEmailTrait;
1314
use Flarum\Settings\SettingsRepositoryInterface;
1415
use Flarum\User\Event\Registered;
1516
use Illuminate\Contracts\Queue\Queue;
@@ -18,6 +19,7 @@
1819
class AccountActivationMailer
1920
{
2021
use AccountActivationMailerTrait;
22+
use SetTranslatorLocaleForEmailTrait;
2123

2224
/**
2325
* @var SettingsRepositoryInterface
@@ -61,6 +63,8 @@ public function handle(Registered $event)
6163
return;
6264
}
6365

66+
$this->setTranslatorLocaleForEmail($this->translator, $this->settings, $user->email);
67+
6468
$token = $this->generateToken($user, $user->email);
6569
$data = $this->getEmailData($user, $token);
6670

framework/core/src/User/EmailConfirmationMailer.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,16 @@
1111

1212
use Flarum\Http\UrlGenerator;
1313
use Flarum\Mail\Job\SendRawEmailJob;
14+
use Flarum\Mail\SetTranslatorLocaleForEmailTrait;
1415
use Flarum\Settings\SettingsRepositoryInterface;
1516
use Flarum\User\Event\EmailChangeRequested;
1617
use Illuminate\Contracts\Queue\Queue;
1718
use Symfony\Contracts\Translation\TranslatorInterface;
1819

1920
class EmailConfirmationMailer
2021
{
22+
use SetTranslatorLocaleForEmailTrait;
23+
2124
/**
2225
* @var SettingsRepositoryInterface
2326
*/
@@ -49,6 +52,9 @@ public function __construct(SettingsRepositoryInterface $settings, Queue $queue,
4952
public function handle(EmailChangeRequested $event)
5053
{
5154
$email = $event->email;
55+
56+
$this->setTranslatorLocaleForEmail($this->translator, $this->settings, $email);
57+
5258
$data = $this->getEmailData($event->user, $email);
5359

5460
$body = $this->translator->trans('core.email.confirm_email.body', $data);

framework/core/src/User/Job/RequestPasswordResetJob.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
use Flarum\Http\UrlGenerator;
1313
use Flarum\Mail\Job\SendRawEmailJob;
14+
use Flarum\Mail\SetTranslatorLocaleForEmailTrait;
1415
use Flarum\Queue\AbstractJob;
1516
use Flarum\Settings\SettingsRepositoryInterface;
1617
use Flarum\User\PasswordToken;
@@ -20,6 +21,8 @@
2021

2122
class RequestPasswordResetJob extends AbstractJob
2223
{
24+
use SetTranslatorLocaleForEmailTrait;
25+
2326
/**
2427
* @var string
2528
*/
@@ -36,9 +39,11 @@ public function handle(
3639
SettingsRepositoryInterface $settings,
3740
UrlGenerator $url,
3841
TranslatorInterface $translator,
39-
UserRepository $users,
4042
Queue $queue
4143
) {
44+
$this->setTranslatorLocaleForEmail($translator, $settings, $this->email);
45+
46+
$users = resolve(UserRepository::class);
4247
$user = $users->findByEmail($this->email);
4348

4449
if (! $user) {

0 commit comments

Comments
 (0)