From cd40c603a10aaf4671fbf6e68afe812e2cb46fef Mon Sep 17 00:00:00 2001 From: feie9456 Date: Thu, 18 Dec 2025 18:32:35 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0i18n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/{ => [locale]}/layout.tsx | 31 +++++++--- app/{ => [locale]}/page.tsx | 0 bun.lock | 87 ++++++++++++++++++++++++++++ components/About.tsx | 19 +++--- components/Contact.tsx | 44 +++++++------- components/Footer.tsx | 11 ++-- components/Hero.tsx | 14 +++-- components/Navbar.tsx | 106 ++++++++++++++++++++++++---------- components/Services.tsx | 73 ++++++++++++----------- i18n/request.ts | 16 +++++ i18n/routing.ts | 15 +++++ messages/en.json | 92 +++++++++++++++++++++++++++++ messages/ja.json | 92 +++++++++++++++++++++++++++++ messages/zh.json | 92 +++++++++++++++++++++++++++++ middleware.ts | 11 ++++ next.config.ts | 5 +- package.json | 1 + 17 files changed, 597 insertions(+), 112 deletions(-) rename app/{ => [locale]}/layout.tsx (63%) rename app/{ => [locale]}/page.tsx (100%) create mode 100644 i18n/request.ts create mode 100644 i18n/routing.ts create mode 100644 messages/en.json create mode 100644 messages/ja.json create mode 100644 messages/zh.json create mode 100644 middleware.ts diff --git a/app/layout.tsx b/app/[locale]/layout.tsx similarity index 63% rename from app/layout.tsx rename to app/[locale]/layout.tsx index 207b82e..86413e3 100644 --- a/app/layout.tsx +++ b/app/[locale]/layout.tsx @@ -1,8 +1,11 @@ import type { Metadata } from "next"; import { Playfair_Display, Noto_Serif_SC } from "next/font/google"; -import "./globals.css"; +import "../globals.css"; import Navbar from "@/components/Navbar"; import Footer from "@/components/Footer"; +import {NextIntlClientProvider} from 'next-intl'; +import {getMessages} from 'next-intl/server'; +import {notFound} from 'next/navigation'; const playfairDisplay = Playfair_Display({ variable: "--font-serif", @@ -22,21 +25,31 @@ export const metadata: Metadata = { description: "南京市肥鹅信息技术有限公司致力于为企业提供卓越的数字化解决方案,以创新技术驱动商业价值。", }; -export default function RootLayout({ +export default async function LocaleLayout({ children, -}: Readonly<{ + params +}: { children: React.ReactNode; -}>) { + params: Promise<{locale: string}>; +}) { + const { locale } = await params; + if (!['en', 'zh', 'ja'].includes(locale)) { + notFound(); + } + + const messages = await getMessages(); + return ( - + - - {children} -