你好,
我的 Discourse(版本 2.6.0.beta4)已配置将 Europe/Paris 设为默认的本地日期时区,但当我尝试选择时间时,显示的时间不正确,如下截图所示:
即使我输入"20:00:00",显示的时间却是“今天 22:00”。我在浏览器中执行的 moment.tz.guess() 返回的是"Europe/Paris",所以我不太清楚问题出在哪里。
有什么建议吗?
谢谢,
你好,
我的 Discourse(版本 2.6.0.beta4)已配置将 Europe/Paris 设为默认的本地日期时区,但当我尝试选择时间时,显示的时间不正确,如下截图所示:
即使我输入"20:00:00",显示的时间却是“今天 22:00”。我在浏览器中执行的 moment.tz.guess() 返回的是"Europe/Paris",所以我不太清楚问题出在哪里。
有什么建议吗?
谢谢,
@j.jaffeux 有什么想法吗,这可能是什么原因导致的?
我认为这是对法语引号(如果我没记错的话,是 bbcode)处理不当的问题,该问题已在德语本地化中解决。
https://meta.discourse.org/t/locale-date-timezone-cooking-error-with-french-localization/161532
我把时区标识符的引号去掉了,这并非长久之计,但……它奏效了😁
是的,抱歉,我周一/周二不在。我在本地无法复现,但我觉得是同样的问题。
我采用了这个修复方案:
从技术上讲,这更像是一个文本/Markdown 显示问题,而非本地日期问题。我们或许需要一个更全局的解决方案。不过,目前我只在本地日期的上下文中收到过相关投诉,我猜这是因为该功能使用更频繁,且更可能被手动编辑。
我觉得它似乎不起作用,discourse-local-dates.js.es6 第 99 行的条件可能也有问题:
if (config.timezone && moment.tz.names().includes(config.timezone))
这个条件实际上并不成立(但应该是成立的)。
编辑
我刚刚意识到修复已经提交到了另一个分支,我稍后再回来 ![]()
……所以,我检查了一下:
[date=2020-12-20 time=15:00:00 timezone=„Europe/Paris“]
[date=2020-12-20 time=15:00:00 timezone=Europe/Paris]
[date=2020-12-20 time=15:00:00 timezone="Europe/Paris"]
[date=2020-12-20 time=15:00:00 timezone=«Europe/Paris»]
分别是:正确、正确、错误、错误。
另外,在我的法语 AZERTY 键盘上,引号实际上是 "。我甚至不知道如何输入 « 或 »,除非复制粘贴,这大概很正常 ![]()
有点奇怪,最后两个我都有16小时。
既然您能复现该问题,能否尝试在此处添加一条日志:https://github.com/discourse/discourse/blob/master/plugins/discourse-local-dates/assets/javascripts/lib/discourse-markdown/discourse-local-dates.js.es6#L15
console.log(matches[1]);
并告诉我您看到的具体输出内容。
当然啦!不过你把我绕晕了
我猜你想要的是 Rails 日志?我可不是专家,只是个有点热情的爱好者!
另外抱歉,我把 5 看成 6 了,或者我也不太清楚,只有第三个不行,我的错。第四个在预览里不生效,但在发布后的帖子中是正确的 ![]()
我又提交了一个拉取请求,也许在你深入之前先等等吧。
我能看到的问题是(当某些功能无法工作时)缺少了“data-timezone”属性:
消息
Post Update (1.1ms) UPDATE "posts" SET "raw" = '[date=2020-12-20 time=12:00:00 timezone=Europe/Paris]
[date=2020-12-20 time=12:00:00 timezone="Europe/Paris"]', "self_edits" = 3, "cooked" = '<p><span data-date="2020-12-20" data-time="12:00:00" class="discourse-local-date" data-timezone="Europe/Paris" data-email-preview="2020-12-20T11:00:00Z UTC">2020-12-20T11:00:00Z</span><br>
<span data-date="2020-12-20" data-time="12:00:00" class="discourse-local-date" data-email-preview="2020-12-20T12:00:00Z UTC">2020-12-20T12:00:00Z</span></p>', "baked_at" = '2020-10-21 15:25:53.050518', "updated_at" = '2020-10-21 15:25:53.050721' WHERE "posts"."id" = 1954
是的,因为它无法识别转换后的引号,所以我正试图强制将它们置于一种已知状态。
很抱歉提出这个问题,之后我会让您继续工作。我原以为是 « 中的 ; 导致 && moment.tz.names().includes(config.timezone) 失败。请问 config.timezone 是否被进行了 HTML 转义?
别担心,我完全可能搞错 ![]()
所以,你问的其实就是我正在做的事,只是时间点可能和你预期的不太一样,不过那样应该也行。比如在修复之前,像这样的代码:
[date=2020-12-20 time=15:00:00 timezone=«Europe/Paris»]
在解析后的 Markdown 中会得到这些属性:
{"date"=>"2020-12-20", "time"=>"15:00:00", "timezone"=>"«Europe/Paris»"}
问题显而易见。
修复之后,我们得到的是:
{"date"=>"2020-12-20", "time"=>"15:00:00", "timezone"=>"Europe/Paris"}
我只是觉得之前没有处理所有带引号的情况。你试过我提交的第二个版本了吗?
是的……
但原始内容并不是
[date=2020-12-20 time=15:00:00 timezone=«Europe/Paris»]
而是已经是
[date=2020-12-20 time=15:00:00 timezone="Europe/Paris"]
我觉得问题出在“更下游”的地方:thinking:,我其实不知道具体在哪里。« 和 » 是在哪里被引入的。
啊,对了!我可以在编辑器预览中看到
[date=2020-12-15 time=14:00:00 timezone="Europe/Paris"]
变成了
[date=2020-12-15 time=14:00:00 timezone=« Europe/Paris »
是的,可能前后端都存在两个问题,因为之前的修复确实改善了德语的情况。我想我可以直接在前端应用相同的正则表达式,真希望我能复现这个问题😅
明天再处理。
@Benjamin_D / @j.jaffeux 这个问题还存在吗?
我认为是的,但我有点滞后,目前还在 2.6.0 beta5 版本:flushed 不过自十月以来,我还没看到任何关于该问题的提交。