refactor: consolidate pages into [...lang] optional routing

This commit is contained in:
tequ
2026-04-23 12:38:49 +09:00
parent bc7d40748c
commit 31252d253e
17 changed files with 55 additions and 133 deletions

View File

@@ -2,15 +2,18 @@
import '../../styles/main.css'
import XahauAbout from '../../components/XahauAbout.astro'
import { aboutTranslations } from '../../i18n/aboutTranslations'
import { type Locale, nonDefaultLocales } from '../../i18n/locales'
import { defaultLocale, type Locale, locales } from '../../i18n/locales'
import BaseLayout from '../../layouts/BaseLayout.astro'
export function getStaticPaths() {
return nonDefaultLocales.map((lang) => ({ params: { lang } }))
return locales.map((lang) => ({
params: { lang: lang === defaultLocale ? undefined : lang },
}))
}
const { lang } = Astro.params
const t = aboutTranslations[lang as Locale]
const locale = (lang as Locale) ?? defaultLocale
const t = aboutTranslations[locale]
const _frontmatter = { title: t.page_title, description: t.page_subtitle }
---

View File

@@ -2,15 +2,18 @@
import '../../styles/main.css'
import XahauConnect from '../../components/XahauConnect.astro'
import connectData from '../../data/connect.json'
import { type Locale, nonDefaultLocales } from '../../i18n/locales'
import { defaultLocale, type Locale, locales } from '../../i18n/locales'
import BaseLayout from '../../layouts/BaseLayout.astro'
export function getStaticPaths() {
return nonDefaultLocales.map((lang) => ({ params: { lang } }))
return locales.map((lang) => ({
params: { lang: lang === defaultLocale ? undefined : lang },
}))
}
const { lang } = Astro.params
const { title, description } = connectData.meta[lang as Locale]
const locale = (lang as Locale) ?? defaultLocale
const { title, description } = connectData.meta[locale]
const _frontmatter = { title, description }
---

View File

@@ -2,15 +2,18 @@
import '../../styles/main.css'
import XahauContest from '../../components/XahauContest.astro'
import { contestTranslations } from '../../i18n/contestTranslations'
import { type Locale, nonDefaultLocales } from '../../i18n/locales'
import { defaultLocale, type Locale, locales } from '../../i18n/locales'
import BaseLayout from '../../layouts/BaseLayout.astro'
export function getStaticPaths() {
return nonDefaultLocales.map((lang) => ({ params: { lang } }))
return locales.map((lang) => ({
params: { lang: lang === defaultLocale ? undefined : lang },
}))
}
const { lang } = Astro.params
const t = contestTranslations[lang as Locale]
const locale = (lang as Locale) ?? defaultLocale
const t = contestTranslations[locale]
const _frontmatter = { title: t.page_title, description: t.page_subtitle }
---

View File

@@ -2,16 +2,19 @@
import '../../styles/main.css'
import XahauEcosystem from '../../components/XahauEcosystem.astro'
import ecosystemData from '../../data/ecosystem.json'
import { type Locale, nonDefaultLocales } from '../../i18n/locales'
import { defaultLocale, type Locale, locales } from '../../i18n/locales'
import BaseLayout from '../../layouts/BaseLayout.astro'
export function getStaticPaths() {
return nonDefaultLocales.map((lang) => ({ params: { lang } }))
return locales.map((lang) => ({
params: { lang: lang === defaultLocale ? undefined : lang },
}))
}
const { lang } = Astro.params
const title = ecosystemData.title[lang as Locale]
const description = ecosystemData.description[lang as Locale]
const locale = (lang as Locale) ?? defaultLocale
const title = ecosystemData.title[locale]
const description = ecosystemData.description[locale]
const _frontmatter = { title, description }
---

View File

@@ -2,15 +2,18 @@
import '../../styles/main.css'
import XahauFeatures from '../../components/XahauFeatures.astro'
import { featuresTranslations } from '../../i18n/featuresTranslations'
import { type Locale, nonDefaultLocales } from '../../i18n/locales'
import { defaultLocale, type Locale, locales } from '../../i18n/locales'
import BaseLayout from '../../layouts/BaseLayout.astro'
export function getStaticPaths() {
return nonDefaultLocales.map((lang) => ({ params: { lang } }))
return locales.map((lang) => ({
params: { lang: lang === defaultLocale ? undefined : lang },
}))
}
const { lang } = Astro.params
const t = featuresTranslations[lang as Locale] ?? featuresTranslations.en
const locale = (lang as Locale) ?? defaultLocale
const t = featuresTranslations[locale] ?? featuresTranslations.en
const _frontmatter = { title: t.page_title, description: t.page_subtitle }
---

View File

@@ -0,0 +1,17 @@
---
import FraudReportPage from '../../components/FraudReportPage.astro'
import { fraudReportTranslations } from '../../i18n/fraudReportTranslations'
import { defaultLocale, type Locale, locales } from '../../i18n/locales'
export function getStaticPaths() {
return locales.map((lang) => ({
params: { lang: lang === defaultLocale ? undefined : lang },
}))
}
const { lang } = Astro.params
const locale = (lang as Locale) ?? defaultLocale
const t = fraudReportTranslations[locale]
---
<FraudReportPage t={t} />

View File

@@ -2,20 +2,23 @@
import '../../styles/main.css'
import XahauRoadmap from '../../components/XahauRoadmap.astro'
import roadmapData from '../../data/roadmap.json'
import { type Locale, nonDefaultLocales } from '../../i18n/locales'
import { defaultLocale, type Locale, locales } from '../../i18n/locales'
import BaseLayout from '../../layouts/BaseLayout.astro'
export function getStaticPaths() {
return nonDefaultLocales.map((lang) => ({ params: { lang } }))
return locales.map((lang) => ({
params: { lang: lang === defaultLocale ? undefined : lang },
}))
}
const { lang } = Astro.params
const { title, description } = roadmapData.pageMeta[lang as Locale]
const locale = (lang as Locale) ?? defaultLocale
const { title, description } = roadmapData.pageMeta[locale]
const _frontmatter = { title, description }
---
<BaseLayout frontmatter={_frontmatter}>
<div class="page-content flex-1 container mx-auto max-w-7xl p-6">
<XahauRoadmap lang={lang} theme="light" />
<XahauRoadmap lang={locale} theme="light" />
</div>
</BaseLayout>

View File

@@ -1,14 +0,0 @@
---
import FraudReportPage from '../../components/FraudReportPage.astro'
import { fraudReportTranslations } from '../../i18n/fraudReportTranslations'
import { type Locale, nonDefaultLocales } from '../../i18n/locales'
export function getStaticPaths() {
return nonDefaultLocales.map((lang) => ({ params: { lang } }))
}
const { lang } = Astro.params
const t = fraudReportTranslations[lang as Locale]
---
<FraudReportPage t={t} />

View File

@@ -1,15 +0,0 @@
---
import '../styles/main.css'
import XahauAbout from '../components/XahauAbout.astro'
import { aboutTranslations } from '../i18n/aboutTranslations'
import BaseLayout from '../layouts/BaseLayout.astro'
const { page_title: title, page_subtitle: description } = aboutTranslations.en
const _frontmatter = { title, description }
---
<BaseLayout frontmatter={_frontmatter}>
<div class="page-content flex-1 container mx-auto max-w-7xl p-6">
<XahauAbout />
</div>
</BaseLayout>

View File

@@ -1,15 +0,0 @@
---
import '../styles/main.css'
import XahauConnect from '../components/XahauConnect.astro'
import connectData from '../data/connect.json'
import BaseLayout from '../layouts/BaseLayout.astro'
const { title, description } = connectData.meta.en
const _frontmatter = { title, description }
---
<BaseLayout frontmatter={_frontmatter}>
<div class="page-content flex-1 container mx-auto max-w-7xl p-6">
<XahauConnect />
</div>
</BaseLayout>

View File

@@ -1,15 +0,0 @@
---
import '../styles/main.css'
import XahauContest from '../components/XahauContest.astro'
import { contestTranslations } from '../i18n/contestTranslations'
import BaseLayout from '../layouts/BaseLayout.astro'
const { page_title: title, page_subtitle: description } = contestTranslations.en
const _frontmatter = { title, description }
---
<BaseLayout frontmatter={_frontmatter}>
<div class="flex-none container mx-auto max-w-7xl p-6 pb-12">
<XahauContest />
</div>
</BaseLayout>

View File

@@ -1,17 +0,0 @@
---
import '../styles/main.css'
import XahauEcosystem from '../components/XahauEcosystem.astro'
import ecosystemData from '../data/ecosystem.json'
import BaseLayout from '../layouts/BaseLayout.astro'
const _frontmatter = {
title: ecosystemData.title.en,
description: ecosystemData.description.en,
}
---
<BaseLayout frontmatter={_frontmatter}>
<div class="page-content flex-1 container mx-auto max-w-7xl p-6">
<XahauEcosystem />
</div>
</BaseLayout>

View File

@@ -1,16 +0,0 @@
---
import '../styles/main.css'
import XahauFeatures from '../components/XahauFeatures.astro'
import { featuresTranslations } from '../i18n/featuresTranslations'
import BaseLayout from '../layouts/BaseLayout.astro'
const { page_title: title, page_subtitle: description } =
featuresTranslations.en
const _frontmatter = { title, description }
---
<BaseLayout frontmatter={_frontmatter}>
<div class="page-content flex-1 container mx-auto max-w-7xl p-6">
<XahauFeatures lang="en" />
</div>
</BaseLayout>

View File

@@ -1,6 +0,0 @@
---
import FraudReportPage from '../components/FraudReportPage.astro'
import { fraudReportTranslations } from '../i18n/fraudReportTranslations'
---
<FraudReportPage t={fraudReportTranslations.en} />

View File

@@ -1,15 +0,0 @@
---
import '../styles/main.css'
import XahauRoadmap from '../components/XahauRoadmap.astro'
import roadmapData from '../data/roadmap.json'
import BaseLayout from '../layouts/BaseLayout.astro'
const { title, description } = roadmapData.pageMeta.en
const _frontmatter = { title, description }
---
<BaseLayout frontmatter={_frontmatter}>
<div class="page-content flex-1 container mx-auto max-w-7xl p-6">
<XahauRoadmap lang="en" theme="light" />
</div>
</BaseLayout>