|
7 | 7 | namespace Chamilo\CoreBundle\Command; |
8 | 8 |
|
9 | 9 | use Chamilo\CoreBundle\Entity\AgendaReminder; |
| 10 | +use Chamilo\CoreBundle\Entity\Language; |
10 | 11 | use Chamilo\CoreBundle\Entity\Session; |
11 | 12 | use Chamilo\CoreBundle\Entity\User; |
12 | 13 | use Chamilo\CoreBundle\Helpers\MessageHelper; |
13 | 14 | use Chamilo\CoreBundle\Repository\Node\CourseRepository; |
14 | 15 | use Chamilo\CoreBundle\Settings\SettingsManager; |
15 | 16 | use Chamilo\CourseBundle\Entity\CCalendarEvent; |
| 17 | +use Symfony\Component\Translation\TranslatorBagInterface; |
16 | 18 | use DateTime; |
17 | 19 | use DateTimeZone; |
18 | 20 | use Doctrine\ORM\EntityManagerInterface; |
@@ -237,9 +239,35 @@ private function formatForUser(DateTime $utc, ?User $user): string |
237 | 239 | return $dt->format('Y-m-d H:i:s'); |
238 | 240 | } |
239 | 241 |
|
| 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 | + |
240 | 268 | private function sendReminderMessage(User $user, CCalendarEvent $event, int $senderId, bool $debug, SymfonyStyle $io, int &$sentRemindersCount): void |
241 | 269 | { |
242 | | - $locale = $user->getLocale() ?: 'en'; |
| 270 | + $locale = $this->resolveTranslationLocale($user->getLocale() ?: 'en_US'); |
243 | 271 | $this->translator->setLocale($locale); |
244 | 272 |
|
245 | 273 | $messageSubject = \sprintf( |
|
0 commit comments