Astro中自定义defineCollection实现多语言内容聚合
多语言MDX内容集合合并方案求助
场景
我的网站包含多语言MDX页面,习惯将同一「条目」的所有相关文件放在单个文件夹中,目录结构如下:
- blog - 01 - index.th.mdx // 对应路径 /blog/01 - index.en.mdx // 对应路径 /en/blog/01 - 02 - index.th.mdx // 对应路径 /blog/02;/en/blog/02 将重定向到 /blog/02
我曾尝试通过操作getStaticPaths函数解析每个条目对应的slug,但出现了问题。
遇到的挑战
这种方式虽然能运行,但会生成3个独立条目:
- /blog/01/indexth
- /blog/01/indexen
- /blog/02/indexth
导致我在列举博客时需要手动过滤内容,且使用reference引用blog/01时无法正常生效。
期望的效果
我需要得到如下结构的集合:
entries: [ { id: 'blog/01', th: { ... }, en: { ... }, }, { id: 'blog/02', th: { ... }, en: null }, ]
这样查询集合时能得到正确数量的条目,后续可自行处理getStaticPaths。
已尝试的方案
- 尝试自定义加载器:参考Astro的
glob源码实现,但因部分私有方法存在,无法完成构建; - 考虑创建两个对应不同语言的集合,但需要额外处理两个集合的查询与合并。
需求
现寻求更优方案,需实现以下任一目标:
- 拦截
getCollection的结果并进行处理,确保Content Collection中的reference也能获取处理后的结果; - 在默认glob加载器执行后修改存储内容。
内容的提问来源于stack exchange,提问作者Art
相关产品推荐
相关产品推荐

