点语言切换后地址已经变成 en 前缀,正文仍是中文,强制刷新一次才对,换个浏览器又是同样的情况。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,缓存插件的键只按地址生成,没有带上语言会话或前缀,两种语言的页面共用一个缓存条目,谁先被访问就缓存谁,后面的人看到的都是别人那份。

「多语言缓存串味」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。报错里带路径的,先去看那个路径在不在、权限对不对。

define('WP_CACHE_KEY_SALT', 'example-com');
# 缓存键需包含 /en/ 与 /zh/ 的差异
curl -sI https://example.com/en/ | grep -i x-cache

同一份配置存在多处的,先确认改的是被加载的那一份。

具体做法是,把语言前缀或者语言会话加进缓存键的组成里;切换语言的时候主动清掉该地址对应的整页缓存;确认内容分发那一层也按语言做了相同的区分处理。

最后用这个标准收尾,切换语言以后首屏直接是对应语言的页面 完全不用强制刷新。

作者 9823189