Astro动态路由层级需要注意的问题
注意:仅针对SSG模式
以这样的路由目录结构为例:
pages ----[lang] --------[category] ------------[page].astro
如果以这样的嵌套循环是无法传入params
参数的,需要注意。
const categories: string[] = []; const languages: string[] = []; responseArticles.data.forEach(p => { //categories const cat: string = p.category.slug ?? ''; if(cat.length == 0){ console.log('No categories found', p.slug); } if (!categories.includes(cat)) { categories.push(cat); } //languages p.translations.forEach(t => { if(t.languages_code && !languages.includes(t)){ languages.push(t.languages_code); } }) }); return languages.map(l => { categories.forEach(c => { const filtered = responseArticles.data.filter(p =>{ const cat: string = p.category.slug ?? ''; const lang: string = p.translations.find(item => item.languages_code === l).languages_code ?? ''; return (cat && lang); console.log(p) }); return paginate(filtered, { params: { lang: l, category: c }, props: { filtered }, pageSize: 2, } ); }); });
正确的打开方式是把第一层languages单独放入一个目录,所以这也是为什么Astro i18n的方案都是生成出各级语言的目录的原因,个人使用下来感受还是官网的方案最靠谱,其它两个社区插件astro-i18next以及astro-i18n都多少有点问题,而且每次都要用命令生成更新语言目录,更为可怕的是i18next这个插件每次都强制把注释去掉,这个真无法接受,也无法理解