文章日期只从英文版读取
Pluso 开发 · · English · 日本語

文章日期只从英文版读取

英文文件存在但没写日期的时候,这篇文章在列表里落到末尾,时间栏空着,中文文件里写了日期也不生效。构建不报错,也不打日志,页面照常生成,所以一直没人发现。

真正的成因比「只读英文」更绕。日期在记录第一次创建时就被定下来,取的是当时那个文件的日期;此后没有任何地方再写回。读取逻辑里确实还有一行按语言判断的赋值,看起来正是它在维护英文优先,但它是死代码。

我把它改成不分语言的赋值,重新构建整站,产物零差异:39 个 markdown、13 篇英文,一个字节都没变。原因很直接——13 篇英文每一篇都写了日期,没有一篇是「英文存在但日期为空」,那行的条件从来没有成立过。删掉整行也是同样的零差异。

所以英文优先不发生在任何优先级列表里,也不发生在那一行,而发生在创建记录的那一刻:文件按名字排序读进来,同一篇的英文排在日文和中文之后,于是记录总由英文创建,日期自然取英文的。那行代码没能维护英文优先,因为英文优先早在它之前就已经发生了。

英文文件不存在时才轮到排序说了算,谁排前面就用谁的日期,实际上日文先于中文。这一段是纯粹的文件名副作用,不是谁定的规则,改个文件名就能变。

现在的写法先把三份的日期各自存下来,再按中文、英文、日文取第一个非空值。读写分开,顺序写在明处,以后加语种只要往这个列表里加一项,不用再去猜文件名的排列。

最后一条注意:日期取到第一个非空值之后不做校验,也不跟当天比较。构建目前没有跳过未来文章的过滤;哪天加上,空日期比不出大小,会被当成可发布,校验得加在读取那一处,不能指望空值自己拦住。