mirror of
https://github.com/reonokiy/blog.nokiy.net.git
synced 2025-06-15 19:22:52 +02:00
fix: Switching language error on tabbed pages, add 404 page
This commit is contained in:
parent
a61b299b51
commit
2a9500089c
4 changed files with 35 additions and 12 deletions
|
@ -19,7 +19,7 @@ const marginBottom = {
|
|||
---
|
||||
|
||||
<header class="mb-10.625 lg:fixed">
|
||||
<h1 class={`${marginBottom} text-8 c-primary font-bold font-title lg:text-9 w-75%`}>
|
||||
<h1 class={`${marginBottom} text-8 c-primary font-bold font-title lg:text-9 w-75% lg:w-full`}>
|
||||
<!-- Fix text cropping issues during view transition on ios by adding a div tag -->
|
||||
<div
|
||||
class="box-content inline-block pr-1.25"
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
import { getNextLangUrl, getPostNextLangUrl } from '@/i18n/path'
|
||||
import { isPostPage } from '@/utils/page'
|
||||
import { isPostPage, isTagPage } from '@/utils/page'
|
||||
|
||||
interface Props {
|
||||
supportedLangs: string[]
|
||||
|
@ -9,10 +9,15 @@ interface Props {
|
|||
const { supportedLangs } = Astro.props
|
||||
const currentPath = Astro.url.pathname
|
||||
const isPost = isPostPage(currentPath)
|
||||
const isTag = isTagPage(currentPath)
|
||||
|
||||
const nextUrl = isPost
|
||||
? getPostNextLangUrl(currentPath, supportedLangs)
|
||||
: getNextLangUrl(currentPath)
|
||||
// 检查是否应使用受限的语言列表
|
||||
const useFilteredLangs = isPost || (isTag && supportedLangs.length > 0)
|
||||
|
||||
// 根据页面类型选择合适的语言切换方式
|
||||
const nextUrl = useFilteredLangs
|
||||
? getPostNextLangUrl(currentPath, supportedLangs) // 只在有内容的语言间切换
|
||||
: getNextLangUrl(currentPath) // 在所有语言间切换
|
||||
---
|
||||
|
||||
<a
|
||||
|
|
8
src/pages/404.astro
Normal file
8
src/pages/404.astro
Normal file
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
import Layout from '@/layouts/Layout.astro'
|
||||
---
|
||||
|
||||
<Layout>
|
||||
<div class="uno-decorative-line"></div>
|
||||
<h1 class="mt-10 text-8 font-title">404</h1>
|
||||
</Layout>
|
|
@ -5,8 +5,6 @@ import Layout from '@/layouts/Layout.astro'
|
|||
import { getAllTags, getPostsByTag } from '@/utils/content'
|
||||
|
||||
export async function getStaticPaths() {
|
||||
const tags = await getAllTags()
|
||||
|
||||
// 定义路径数组的类型
|
||||
type PathItem = {
|
||||
params: { tags_tag: string }
|
||||
|
@ -16,7 +14,8 @@ export async function getStaticPaths() {
|
|||
const paths: PathItem[] = []
|
||||
|
||||
// 默认语言的标签页面 (没有语言前缀)
|
||||
tags.forEach((tag: string) => {
|
||||
const defaultTags = await getAllTags(defaultLocale)
|
||||
defaultTags.forEach((tag: string) => {
|
||||
paths.push({
|
||||
params: { tags_tag: `tags/${tag}` },
|
||||
props: { tag, lang: defaultLocale },
|
||||
|
@ -24,16 +23,17 @@ export async function getStaticPaths() {
|
|||
})
|
||||
|
||||
// 更多语言的标签页面 (有语言前缀)
|
||||
allLocales.forEach((lang: string) => {
|
||||
for (const lang of allLocales) {
|
||||
if (lang !== defaultLocale) {
|
||||
tags.forEach((tag: string) => {
|
||||
const langTags = await getAllTags(lang)
|
||||
langTags.forEach((tag: string) => {
|
||||
paths.push({
|
||||
params: { tags_tag: `${lang}/tags/${tag}` },
|
||||
props: { tag, lang },
|
||||
})
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
return paths
|
||||
}
|
||||
|
@ -42,6 +42,16 @@ const { tag, lang } = Astro.props
|
|||
const posts = await getPostsByTag(tag, lang)
|
||||
const allTags = await getAllTags(lang)
|
||||
|
||||
// 获取当前标签在每种语言下是否有文章
|
||||
const tagSupportedLangs = await Promise.all(
|
||||
allLocales.map(async (locale) => {
|
||||
const postsInLang = await getPostsByTag(tag, locale)
|
||||
return postsInLang.length > 0 ? locale : null
|
||||
}),
|
||||
)
|
||||
// 过滤出支持当前标签的语言列表
|
||||
const supportedLangs = tagSupportedLangs.filter(Boolean) as string[]
|
||||
|
||||
// 构建标签链接
|
||||
function getTagUrl(tagName: string): string {
|
||||
return lang === defaultLocale
|
||||
|
@ -50,7 +60,7 @@ function getTagUrl(tagName: string): string {
|
|||
}
|
||||
---
|
||||
|
||||
<Layout>
|
||||
<Layout supportedLangs={supportedLangs}>
|
||||
<div class="uno-decorative-line"></div>
|
||||
<div class="uno-tags-wrapper">
|
||||
{allTags.map(tagName => (
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue