Даты встроенных комментариев всё ещё не локализованы

Здравствуйте,

эта тема основана на обсуждении на ask.discourse.com, где мы заметили проблему, которая, похоже, совпадает с той, что была в этой старой теме на Meta:

Встраивание: даты не локализуются

Мы используем настройку встраиваемых комментариев Discourse по умолчанию, как описано здесь, без каких-либо специальных изменений в выводе встраивания:

Встраивание комментариев Discourse на другой сайт через JavaScript

Я пробовал новый метод fullApp, и там даты были на финском, но мне больше нравится старый подход для этого сайта.

Что мы видим

Интерфейс встраиваемых комментариев локализирован правильно, но текст даты поста всё ещё отображается на английском.

Например, во встраивании мы можем увидеть:

April 2025

а в подсказке/заголовке содержится английская дата и время, например:

April 9, 2025, 3.31pm

Ожидаемое поведение

Даты встраиваемых комментариев должны соответствовать локалю сайта или пользователя, а не всегда отображаться на английском.

В нашем случае мы ожидаем форматирование дат на финском языке во встраивании по умолчанию.

Грязный обходной путь

С помощью Claude я реализовал довольно грязный обходной путь, используя пользовательский компонент и добавив JavaScript в секцию embedded_header. У меня уже была некоторая CSS-стилизация в зависимости от того, является ли класс обычным (discourse-upotus) или тёмным (discourse-upotus-tumma).

<script type="text/javascript">
const selector = '.discourse-upotus a.post-date, .discourse-upotus-tumma a.post-date';

document.querySelectorAll(selector).forEach(el => {
  const title = el.getAttribute('title');
  if (!title) return;

  const match = title.match(/(\w+) (\d+), (\d{4}),\s*([\d]+)\.([\d]+)(am|pm)/i);
  if (!match) return;

  const [, month, day, year, hours, minutes, ampm] = match;
  const date = new Date(`${month} ${day}, ${year}`);
  if (isNaN(date)) return;

  let h = parseInt(hours);
  if (ampm.toLowerCase() === 'pm' && h !== 12) h += 12;
  if (ampm.toLowerCase() === 'am' && h === 12) h = 0;
  date.setHours(h, parseInt(minutes));

  const pvm = date.toLocaleDateString('fi-FI', { day: 'numeric', month: 'long', year: 'numeric' });
  const klo = date.toLocaleTimeString('fi-FI', { hour: '2-digit', minute: '2-digit' });

  el.textContent = pvm;
  el.setAttribute('title', `${pvm} klo ${klo}`);
});
</script>

Примечания

  • это происходит со стандартным/встраиванием по умолчанию
  • изначально логика кастомизации формата дат не добавлялась
  • мы говорим конкретно о выводе дат внутри iframe встраиваемых комментариев
  • используется самая последняя версия Discourse

Может ли кто-то подтвердить, что это всё ещё известная проблема, и есть ли уже более свежее исправление или связанная тема по этому вопросу?

Спасибо!

1 лайк