嵌入的评论日期仍未本地化

你好,

本话题基于 ask.discourse.com 上的一次讨论,我们注意到其中似乎存在与以下旧 Meta 话题相同的问题:

嵌入:日期未本地化

我们使用的是文档中所述的 Discourse 默认嵌入评论设置,未对嵌入输出进行任何特殊定制:

通过 JavaScript 在另一个网站上嵌入 Discourse 评论

我尝试了新的 fullApp 方法,它确实显示了芬兰语日期,但我更倾向于在这个网站上使用此处提到的旧方法。

我们观察到的现象

嵌入评论的用户界面已正确本地化,但 帖子日期文本仍显示为英文

例如,在嵌入内容中我们可能会看到:

2025 年 4 月

而工具提示/标题中包含的日期/时间也是英文格式,例如:

2025 年 4 月 9 日,下午 3:31

预期行为

嵌入评论的日期应遵循站点或用户的本地化设置,而不是始终显示为英文。

在我们的案例中,我们期望默认的嵌入内容使用芬兰语本地化的日期格式。

临时解决方案

在 Claude 的帮助下,我实现了一个相当粗糙的临时方案:通过自定义组件,并向 embedded_header 部分添加了 JavaScript。我之前已经根据类名(正常模式 discourse-upotus 或暗色模式 discourse-upotus-tumma)编写了一些 CSS。

<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}`);
});
</script>

备注

  • 此问题出现在 标准/默认嵌入
  • 最初并未添加任何自定义日期格式化逻辑
  • 我们特指嵌入评论 iframe 内部的日期输出
  • 我们运行的是最新版本的 Discourse

能否有人确认这是否仍是一个已知问题,以及是否已有更新的修复方案或相关话题?

谢谢!

1 个赞