Skip to content

Commit 156ffeb

Browse files
committed
Language: #fix translation with sub language - refs BT#23513
1 parent b75391c commit 156ffeb

1 file changed

Lines changed: 29 additions & 1 deletion

File tree

src/CoreBundle/Command/SendEventRemindersCommand.php

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,14 @@
77
namespace Chamilo\CoreBundle\Command;
88

99
use Chamilo\CoreBundle\Entity\AgendaReminder;
10+
use Chamilo\CoreBundle\Entity\Language;
1011
use Chamilo\CoreBundle\Entity\Session;
1112
use Chamilo\CoreBundle\Entity\User;
1213
use Chamilo\CoreBundle\Helpers\MessageHelper;
1314
use Chamilo\CoreBundle\Repository\Node\CourseRepository;
1415
use Chamilo\CoreBundle\Settings\SettingsManager;
1516
use Chamilo\CourseBundle\Entity\CCalendarEvent;
17+
use Symfony\Component\Translation\TranslatorBagInterface;
1618
use DateTime;
1719
use DateTimeZone;
1820
use Doctrine\ORM\EntityManagerInterface;
@@ -237,9 +239,35 @@ private function formatForUser(DateTime $utc, ?User $user): string
237239
return $dt->format('Y-m-d H:i:s');
238240
}
239241

242+
/**
243+
* Resolve the best available translation locale for a user.
244+
* Handles Chamilo sub-languages (e.g. fr_69) by falling back to the parent
245+
* language's isocode (e.g. fr_FR), mirroring the pattern used in UpdateVueTranslations.
246+
*/
247+
private function resolveTranslationLocale(string $userLocale): string
248+
{
249+
if (!$this->translator instanceof TranslatorBagInterface) {
250+
return $userLocale;
251+
}
252+
253+
if ($this->translator->getCatalogue($userLocale)->defines('Reminder for event : %s', 'messages')) {
254+
return $userLocale;
255+
}
256+
257+
$language = $this->entityManager->getRepository(Language::class)->findOneBy(['isocode' => $userLocale]);
258+
if (null !== $language && null !== $language->getParent()) {
259+
$parentIso = $language->getParent()->getIsocode();
260+
if ($this->translator->getCatalogue($parentIso)->defines('Reminder for event : %s', 'messages')) {
261+
return $parentIso;
262+
}
263+
}
264+
265+
return 'en_US';
266+
}
267+
240268
private function sendReminderMessage(User $user, CCalendarEvent $event, int $senderId, bool $debug, SymfonyStyle $io, int &$sentRemindersCount): void
241269
{
242-
$locale = $user->getLocale() ?: 'en';
270+
$locale = $this->resolveTranslationLocale($user->getLocale() ?: 'en_US');
243271
$this->translator->setLocale($locale);
244272

245273
$messageSubject = \sprintf(

0 commit comments

Comments
 (0)