diff --git a/src/content.config.ts b/src/content.config.ts
index 9cfdab0..f17db6f 100644
--- a/src/content.config.ts
+++ b/src/content.config.ts
@@ -1,7 +1,15 @@
-import { defineCollection } from 'astro:content'
+import { defineCollection, z } from 'astro:content'
import { docsLoader } from '@astrojs/starlight/loaders'
import { docsSchema } from '@astrojs/starlight/schema'
+import { glob } from 'astro/loaders'
export const collections = {
docs: defineCollection({ loader: docsLoader(), schema: docsSchema() }),
+ privacy: defineCollection({
+ loader: glob({ pattern: '**/*.mdx', base: './src/content/privacy' }),
+ schema: z.object({
+ title: z.string(),
+ description: z.string(),
+ }),
+ }),
}
diff --git a/src/pages/es/privacy-policy.mdx b/src/content/privacy/es.mdx
similarity index 99%
rename from src/pages/es/privacy-policy.mdx
rename to src/content/privacy/es.mdx
index 503aa58..873d94d 100644
--- a/src/pages/es/privacy-policy.mdx
+++ b/src/content/privacy/es.mdx
@@ -1,5 +1,4 @@
---
-layout: ../../layouts/PageLayout.astro
title: Política de Privacidad
description: Política de Privacidad de xahau.network
---
diff --git a/src/pages/ja/privacy-policy.mdx b/src/content/privacy/ja.mdx
similarity index 99%
rename from src/pages/ja/privacy-policy.mdx
rename to src/content/privacy/ja.mdx
index ef19594..1171252 100644
--- a/src/pages/ja/privacy-policy.mdx
+++ b/src/content/privacy/ja.mdx
@@ -1,5 +1,4 @@
---
-layout: ../../layouts/PageLayout.astro
title: プライバシーポリシー
description: xahau.network のプライバシーポリシー
---
diff --git a/src/data/connect.json b/src/data/connect.json
index cd735f0..4693cb8 100644
--- a/src/data/connect.json
+++ b/src/data/connect.json
@@ -1,4 +1,18 @@
{
+ "meta": {
+ "en": {
+ "title": "Xahau Connect",
+ "description": "Professional blockchain events for serious discussion and innovation"
+ },
+ "es": {
+ "title": "Xahau Connect",
+ "description": "Eventos profesionales de blockchain para debates serios e innovación"
+ },
+ "ja": {
+ "title": "Xahau Connect",
+ "description": "真剣な議論とイノベーションのためのプロフェッショナルなブロックチェーンイベント"
+ }
+ },
"events": [
{
"id": "non-evm-course-2026-02",
diff --git a/src/data/ecosystem.json b/src/data/ecosystem.json
index bac46d0..686c9a6 100644
--- a/src/data/ecosystem.json
+++ b/src/data/ecosystem.json
@@ -4,6 +4,11 @@
"es": "Ecosistema",
"ja": "エコシステム"
},
+ "description": {
+ "en": "Xahau around the world",
+ "es": "Xahau alrededor del mundo",
+ "ja": "世界中のXahau"
+ },
"buildonxahau": {
"en": "built on or around Xahau",
"es": "creados en Xahau o en torno a ella",
diff --git a/src/data/roadmap.json b/src/data/roadmap.json
index 2c65978..4c231ef 100644
--- a/src/data/roadmap.json
+++ b/src/data/roadmap.json
@@ -14,6 +14,20 @@
"locales": ["en", "es"]
}
},
+ "pageMeta": {
+ "en": {
+ "title": "Roadmap",
+ "description": "Xahau roadmap across the upcoming quarters"
+ },
+ "es": {
+ "title": "Hoja de ruta de Xahau",
+ "description": "Hoja de ruta de Xahau para los próximos trimestres"
+ },
+ "ja": {
+ "title": "ロードマップ",
+ "description": "Xahauの今後の四半期のロードマップ"
+ }
+ },
"labels": {
"en": {
diff --git a/src/i18n/contestTranslations.ts b/src/i18n/contestTranslations.ts
index 43e979c..9e273a3 100644
--- a/src/i18n/contestTranslations.ts
+++ b/src/i18n/contestTranslations.ts
@@ -1,5 +1,6 @@
export const contestTranslations = {
en: {
+ page_title: 'Xahau Dev Contest',
page_subtitle:
'Ecosystem Rising — Build user-facing services powered by Xahau',
chip1: '2nd Edition',
@@ -135,6 +136,7 @@ export const contestTranslations = {
},
es: {
+ page_title: 'Xahau Dev Contest',
page_subtitle:
'Ecosystem Rising — Construye servicios de usuario powered by Xahau',
chip1: '2ª Edición',
@@ -272,6 +274,7 @@ export const contestTranslations = {
},
ja: {
+ page_title: 'Xahau Dev Contest',
page_subtitle:
'Ecosystem Rising — Xahauを活用したユーザー向けサービスを構築',
chip1: '第2回',
diff --git a/src/pages/[lang]/about.astro b/src/pages/[lang]/about.astro
new file mode 100644
index 0000000..3e57dca
--- /dev/null
+++ b/src/pages/[lang]/about.astro
@@ -0,0 +1,21 @@
+---
+import '../../styles/main.css'
+import XahauAbout from '../../components/XahauAbout.astro'
+import { aboutTranslations } from '../../i18n/aboutTranslations'
+import { type Locale, nonDefaultLocales } from '../../i18n/locales'
+import BaseLayout from '../../layouts/BaseLayout.astro'
+
+export function getStaticPaths() {
+ return nonDefaultLocales.map((lang) => ({ params: { lang } }))
+}
+
+const { lang } = Astro.params
+const t = aboutTranslations[lang as Locale]
+const _frontmatter = { title: t.page_title, description: t.page_subtitle }
+---
+
+
+
+
+
+
diff --git a/src/pages/[lang]/connect.astro b/src/pages/[lang]/connect.astro
new file mode 100644
index 0000000..e6e7284
--- /dev/null
+++ b/src/pages/[lang]/connect.astro
@@ -0,0 +1,21 @@
+---
+import '../../styles/main.css'
+import XahauConnect from '../../components/XahauConnect.astro'
+import connectData from '../../data/connect.json'
+import { type Locale, nonDefaultLocales } from '../../i18n/locales'
+import BaseLayout from '../../layouts/BaseLayout.astro'
+
+export function getStaticPaths() {
+ return nonDefaultLocales.map((lang) => ({ params: { lang } }))
+}
+
+const { lang } = Astro.params
+const { title, description } = connectData.meta[lang as Locale]
+const _frontmatter = { title, description }
+---
+
+
+
+
+
+
diff --git a/src/pages/[lang]/contest.astro b/src/pages/[lang]/contest.astro
new file mode 100644
index 0000000..73794f1
--- /dev/null
+++ b/src/pages/[lang]/contest.astro
@@ -0,0 +1,21 @@
+---
+import '../../styles/main.css'
+import XahauContest from '../../components/XahauContest.astro'
+import { contestTranslations } from '../../i18n/contestTranslations'
+import { type Locale, nonDefaultLocales } from '../../i18n/locales'
+import BaseLayout from '../../layouts/BaseLayout.astro'
+
+export function getStaticPaths() {
+ return nonDefaultLocales.map((lang) => ({ params: { lang } }))
+}
+
+const { lang } = Astro.params
+const t = contestTranslations[lang as Locale]
+const _frontmatter = { title: t.page_title, description: t.page_subtitle }
+---
+
+
+
+
+
+
diff --git a/src/pages/[lang]/ecosystem.astro b/src/pages/[lang]/ecosystem.astro
new file mode 100644
index 0000000..b13b58e
--- /dev/null
+++ b/src/pages/[lang]/ecosystem.astro
@@ -0,0 +1,22 @@
+---
+import '../../styles/main.css'
+import XahauEcosystem from '../../components/XahauEcosystem.astro'
+import ecosystemData from '../../data/ecosystem.json'
+import { type Locale, nonDefaultLocales } from '../../i18n/locales'
+import BaseLayout from '../../layouts/BaseLayout.astro'
+
+export function getStaticPaths() {
+ return nonDefaultLocales.map((lang) => ({ params: { lang } }))
+}
+
+const { lang } = Astro.params
+const title = ecosystemData.title[lang as Locale]
+const description = ecosystemData.description[lang as Locale]
+const _frontmatter = { title, description }
+---
+
+
+
+
+
+
diff --git a/src/pages/[lang]/features.astro b/src/pages/[lang]/features.astro
new file mode 100644
index 0000000..7faa499
--- /dev/null
+++ b/src/pages/[lang]/features.astro
@@ -0,0 +1,21 @@
+---
+import '../../styles/main.css'
+import XahauFeatures from '../../components/XahauFeatures.astro'
+import { featuresTranslations } from '../../i18n/featuresTranslations'
+import { type Locale, nonDefaultLocales } from '../../i18n/locales'
+import BaseLayout from '../../layouts/BaseLayout.astro'
+
+export function getStaticPaths() {
+ return nonDefaultLocales.map((lang) => ({ params: { lang } }))
+}
+
+const { lang } = Astro.params
+const t = featuresTranslations[lang as Locale] ?? featuresTranslations.en
+const _frontmatter = { title: t.page_title, description: t.page_subtitle }
+---
+
+
+
+
+
+
diff --git a/src/pages/[lang]/fraud-report.astro b/src/pages/[lang]/fraud-report.astro
new file mode 100644
index 0000000..2836e04
--- /dev/null
+++ b/src/pages/[lang]/fraud-report.astro
@@ -0,0 +1,14 @@
+---
+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]
+---
+
+
diff --git a/src/pages/[lang]/index.astro b/src/pages/[lang]/index.astro
new file mode 100644
index 0000000..a6d7cc1
--- /dev/null
+++ b/src/pages/[lang]/index.astro
@@ -0,0 +1,10 @@
+---
+import { nonDefaultLocales } from '../../i18n/locales'
+import IndexLayout from '../../layouts/IndexLayout.astro'
+
+export function getStaticPaths() {
+ return nonDefaultLocales.map((lang) => ({ params: { lang } }))
+}
+---
+
+
diff --git a/src/pages/[lang]/privacy-policy.astro b/src/pages/[lang]/privacy-policy.astro
new file mode 100644
index 0000000..afd9805
--- /dev/null
+++ b/src/pages/[lang]/privacy-policy.astro
@@ -0,0 +1,21 @@
+---
+import { getEntry, render } from 'astro:content'
+import { nonDefaultLocales } from '../../i18n/locales'
+import PageLayout from '../../layouts/PageLayout.astro'
+
+export function getStaticPaths() {
+ return nonDefaultLocales.map((lang) => ({ params: { lang } }))
+}
+
+const { lang } = Astro.params
+const entry = await getEntry('privacy', lang)
+if (!entry) return Astro.redirect('/privacy-policy')
+
+const { Content } = await render(entry)
+const _frontmatter = {
+ title: entry.data.title,
+ description: entry.data.description,
+}
+---
+
+
diff --git a/src/pages/[lang]/roadmap.astro b/src/pages/[lang]/roadmap.astro
new file mode 100644
index 0000000..945a21f
--- /dev/null
+++ b/src/pages/[lang]/roadmap.astro
@@ -0,0 +1,21 @@
+---
+import '../../styles/main.css'
+import XahauRoadmap from '../../components/XahauRoadmap.astro'
+import roadmapData from '../../data/roadmap.json'
+import { type Locale, nonDefaultLocales } from '../../i18n/locales'
+import BaseLayout from '../../layouts/BaseLayout.astro'
+
+export function getStaticPaths() {
+ return nonDefaultLocales.map((lang) => ({ params: { lang } }))
+}
+
+const { lang } = Astro.params
+const { title, description } = roadmapData.pageMeta[lang as Locale]
+const _frontmatter = { title, description }
+---
+
+
+
+
+
+
diff --git a/src/pages/about.astro b/src/pages/about.astro
index 97ebe1c..cc43bb8 100644
--- a/src/pages/about.astro
+++ b/src/pages/about.astro
@@ -1,12 +1,11 @@
---
import '../styles/main.css'
import XahauAbout from '../components/XahauAbout.astro'
+import { aboutTranslations } from '../i18n/aboutTranslations'
import BaseLayout from '../layouts/BaseLayout.astro'
-const _frontmatter = {
- title: 'About Xahau',
- description: 'Enterprise L1 blockchain with account-based programmability',
-}
+const { page_title: title, page_subtitle: description } = aboutTranslations.en
+const _frontmatter = { title, description }
---
diff --git a/src/pages/connect.astro b/src/pages/connect.astro
index d388548..dcd6ce4 100644
--- a/src/pages/connect.astro
+++ b/src/pages/connect.astro
@@ -1,13 +1,11 @@
---
import '../styles/main.css'
import XahauConnect from '../components/XahauConnect.astro'
+import connectData from '../data/connect.json'
import BaseLayout from '../layouts/BaseLayout.astro'
-const _frontmatter = {
- title: 'Xahau Connect',
- description:
- 'Professional blockchain events for serious discussion and innovation',
-}
+const { title, description } = connectData.meta.en
+const _frontmatter = { title, description }
---
diff --git a/src/pages/contest.astro b/src/pages/contest.astro
index 75f2e78..f782e16 100644
--- a/src/pages/contest.astro
+++ b/src/pages/contest.astro
@@ -1,12 +1,11 @@
---
import '../styles/main.css'
import XahauContest from '../components/XahauContest.astro'
+import { contestTranslations } from '../i18n/contestTranslations'
import BaseLayout from '../layouts/BaseLayout.astro'
-const _frontmatter = {
- title: 'Xahau Dev Contest',
- description: 'Ecosystem Rising — Build user-facing services powered by Xahau',
-}
+const { page_title: title, page_subtitle: description } = contestTranslations.en
+const _frontmatter = { title, description }
---
diff --git a/src/pages/ecosystem.astro b/src/pages/ecosystem.astro
index 7f5935c..d08fe3d 100644
--- a/src/pages/ecosystem.astro
+++ b/src/pages/ecosystem.astro
@@ -1,11 +1,12 @@
---
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: 'Ecosystem',
- description: 'Xahau around the world',
+ title: ecosystemData.title.en,
+ description: ecosystemData.description.en,
}
---
diff --git a/src/pages/es/about.astro b/src/pages/es/about.astro
deleted file mode 100644
index 0e35aa4..0000000
--- a/src/pages/es/about.astro
+++ /dev/null
@@ -1,17 +0,0 @@
----
-import '../../styles/main.css'
-import XahauAbout from '../../components/XahauAbout.astro'
-import BaseLayout from '../../layouts/BaseLayout.astro'
-
-const _frontmatter = {
- title: 'Sobre Xahau',
- description:
- 'Blockchain L1 empresarial con programabilidad basada en cuentas',
-}
----
-
-
-
-
-
-
diff --git a/src/pages/es/connect.astro b/src/pages/es/connect.astro
deleted file mode 100644
index 776d1d3..0000000
--- a/src/pages/es/connect.astro
+++ /dev/null
@@ -1,17 +0,0 @@
----
-import '../../styles/main.css'
-import XahauConnect from '../../components/XahauConnect.astro'
-import BaseLayout from '../../layouts/BaseLayout.astro'
-
-const _frontmatter = {
- title: 'Xahau Connect',
- description:
- 'Eventos profesionales de blockchain para debates serios e innovación',
-}
----
-
-
-
-
-
-
diff --git a/src/pages/es/contest.astro b/src/pages/es/contest.astro
deleted file mode 100644
index 6c9f9b0..0000000
--- a/src/pages/es/contest.astro
+++ /dev/null
@@ -1,17 +0,0 @@
----
-import '../../styles/main.css'
-import XahauContest from '../../components/XahauContest.astro'
-import BaseLayout from '../../layouts/BaseLayout.astro'
-
-const _frontmatter = {
- title: 'Xahau Dev Contest',
- description:
- 'Ecosystem Rising — Construye servicios de usuario powered by Xahau',
-}
----
-
-
-
-
-
-
diff --git a/src/pages/es/ecosystem.astro b/src/pages/es/ecosystem.astro
deleted file mode 100644
index 67c8996..0000000
--- a/src/pages/es/ecosystem.astro
+++ /dev/null
@@ -1,16 +0,0 @@
----
-import '../../styles/main.css'
-import XahauEcosystem from '../../components/XahauEcosystem.astro'
-import BaseLayout from '../../layouts/BaseLayout.astro'
-
-const _frontmatter = {
- title: 'Ecosistema',
- description: 'Xahau alrededor del mundo',
-}
----
-
-
-
-
-
-
diff --git a/src/pages/es/features.astro b/src/pages/es/features.astro
deleted file mode 100644
index ec880f2..0000000
--- a/src/pages/es/features.astro
+++ /dev/null
@@ -1,16 +0,0 @@
----
-import '../../styles/main.css'
-import XahauFeatures from '../../components/XahauFeatures.astro'
-import BaseLayout from '../../layouts/BaseLayout.astro'
-
-const _frontmatter = {
- title: 'Características',
- description: 'Tecnología probada con un enfoque renovado',
-}
----
-
-
-
-
-
-
diff --git a/src/pages/es/fraud-report.astro b/src/pages/es/fraud-report.astro
deleted file mode 100644
index 0ee05b3..0000000
--- a/src/pages/es/fraud-report.astro
+++ /dev/null
@@ -1,6 +0,0 @@
----
-import FraudReportPage from '../../components/FraudReportPage.astro'
-import { fraudReportTranslations } from '../../i18n/fraudReportTranslations'
----
-
-
diff --git a/src/pages/es/index.mdx b/src/pages/es/index.mdx
deleted file mode 100644
index 88bca13..0000000
--- a/src/pages/es/index.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-layout: ../../layouts/IndexLayout.astro
----
diff --git a/src/pages/es/roadmap.astro b/src/pages/es/roadmap.astro
deleted file mode 100644
index 78f6624..0000000
--- a/src/pages/es/roadmap.astro
+++ /dev/null
@@ -1,16 +0,0 @@
----
-import '../../styles/main.css'
-import XahauRoadmap from '../../components/XahauRoadmap.astro'
-import BaseLayout from '../../layouts/BaseLayout.astro'
-
-const _frontmatter = {
- title: 'Hoja de ruta',
- description: 'Hoja de ruta de Xahau para los próximos trimestres',
-}
----
-
-
-
-
-
-
diff --git a/src/pages/features.astro b/src/pages/features.astro
index c4f2be0..001cb95 100644
--- a/src/pages/features.astro
+++ b/src/pages/features.astro
@@ -1,12 +1,12 @@
---
import '../styles/main.css'
import XahauFeatures from '../components/XahauFeatures.astro'
+import { featuresTranslations } from '../i18n/featuresTranslations'
import BaseLayout from '../layouts/BaseLayout.astro'
-const _frontmatter = {
- title: 'Features',
- description: 'Proven technology with a fresh approach',
-}
+const { page_title: title, page_subtitle: description } =
+ featuresTranslations.en
+const _frontmatter = { title, description }
---
diff --git a/src/pages/ja/about.astro b/src/pages/ja/about.astro
deleted file mode 100644
index b9e930b..0000000
--- a/src/pages/ja/about.astro
+++ /dev/null
@@ -1,17 +0,0 @@
----
-import '../../styles/main.css'
-import XahauAbout from '../../components/XahauAbout.astro'
-import BaseLayout from '../../layouts/BaseLayout.astro'
-
-const _frontmatter = {
- title: 'Xahauについて',
- description:
- 'アカウントベースプログラマビリティを持つエンタープライズL1ブロックチェーン',
-}
----
-
-
-
-
-
-
diff --git a/src/pages/ja/connect.astro b/src/pages/ja/connect.astro
deleted file mode 100644
index a13c16e..0000000
--- a/src/pages/ja/connect.astro
+++ /dev/null
@@ -1,17 +0,0 @@
----
-import '../../styles/main.css'
-import XahauConnect from '../../components/XahauConnect.astro'
-import BaseLayout from '../../layouts/BaseLayout.astro'
-
-const _frontmatter = {
- title: 'Xahau Connect',
- description:
- '真剣な議論とイノベーションのためのプロフェッショナルなブロックチェーンイベント',
-}
----
-
-
-
-
-
-
diff --git a/src/pages/ja/contest.astro b/src/pages/ja/contest.astro
deleted file mode 100644
index 77e1d16..0000000
--- a/src/pages/ja/contest.astro
+++ /dev/null
@@ -1,16 +0,0 @@
----
-import '../../styles/main.css'
-import XahauContest from '../../components/XahauContest.astro'
-import BaseLayout from '../../layouts/BaseLayout.astro'
-
-const _frontmatter = {
- title: 'Xahau Dev Contest',
- description: 'Ecosystem Rising — Xahauを活用したユーザー向けサービスを構築',
-}
----
-
-
-
-
-
-
diff --git a/src/pages/ja/ecosystem.astro b/src/pages/ja/ecosystem.astro
deleted file mode 100644
index fb66388..0000000
--- a/src/pages/ja/ecosystem.astro
+++ /dev/null
@@ -1,16 +0,0 @@
----
-import '../../styles/main.css'
-import XahauEcosystem from '../../components/XahauEcosystem.astro'
-import BaseLayout from '../../layouts/BaseLayout.astro'
-
-const _frontmatter = {
- title: 'エコシステム',
- description: '世界中のXahau',
-}
----
-
-
-
-
-
-
diff --git a/src/pages/ja/features.astro b/src/pages/ja/features.astro
deleted file mode 100644
index 90196f7..0000000
--- a/src/pages/ja/features.astro
+++ /dev/null
@@ -1,16 +0,0 @@
----
-import '../../styles/main.css'
-import XahauFeatures from '../../components/XahauFeatures.astro'
-import BaseLayout from '../../layouts/BaseLayout.astro'
-
-const _frontmatter = {
- title: '機能',
- description: '実績ある技術、新鮮なアプローチ',
-}
----
-
-
-
-
-
-
diff --git a/src/pages/ja/fraud-report.astro b/src/pages/ja/fraud-report.astro
deleted file mode 100644
index 5a96f7d..0000000
--- a/src/pages/ja/fraud-report.astro
+++ /dev/null
@@ -1,6 +0,0 @@
----
-import FraudReportPage from '../../components/FraudReportPage.astro'
-import { fraudReportTranslations } from '../../i18n/fraudReportTranslations'
----
-
-
diff --git a/src/pages/ja/index.mdx b/src/pages/ja/index.mdx
deleted file mode 100644
index 88bca13..0000000
--- a/src/pages/ja/index.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-layout: ../../layouts/IndexLayout.astro
----
diff --git a/src/pages/ja/roadmap.astro b/src/pages/ja/roadmap.astro
deleted file mode 100644
index deb41bf..0000000
--- a/src/pages/ja/roadmap.astro
+++ /dev/null
@@ -1,16 +0,0 @@
----
-import '../../styles/main.css'
-import XahauRoadmap from '../../components/XahauRoadmap.astro'
-import BaseLayout from '../../layouts/BaseLayout.astro'
-
-const _frontmatter = {
- title: 'ロードマップ',
- description: 'Xahau roadmap across the upcoming quarters',
-}
----
-
-
-
-
-
-
diff --git a/src/pages/roadmap.astro b/src/pages/roadmap.astro
index 6501b40..3fbcb57 100644
--- a/src/pages/roadmap.astro
+++ b/src/pages/roadmap.astro
@@ -1,12 +1,11 @@
---
import '../styles/main.css'
import XahauRoadmap from '../components/XahauRoadmap.astro'
+import roadmapData from '../data/roadmap.json'
import BaseLayout from '../layouts/BaseLayout.astro'
-const _frontmatter = {
- title: 'Roadmap',
- description: 'Xahau roadmap across the upcoming quarters',
-}
+const { title, description } = roadmapData.pageMeta.en
+const _frontmatter = { title, description }
---