@@ -16,25 +16,28 @@ import log from "@/lib/logger";
1616const inter = Inter ( { subsets : [ "latin" ] } ) ;
1717
1818export async function generateMetadata ( props : {
19- params : Promise < { locale : string } > ;
19+ params : Promise < { locale ? : string } > ;
2020} ) : Promise < Metadata > {
2121 const { locale } = await props . params ;
22+ const resolvedLocale = ( [ "zh" , "en" ] . includes ( locale ?? "" )
23+ ? locale
24+ : "zh" ) as "zh" | "en" ;
2225 let messages : any = { } ;
2326
24- if ( [ "zh" , "en" ] . includes ( locale ) ) {
27+ if ( [ "zh" , "en" ] . includes ( resolvedLocale ) ) {
2528 try {
2629 const filePath = path . join (
2730 process . cwd ( ) ,
2831 "public" ,
2932 "locales" ,
30- locale ,
33+ resolvedLocale ,
3134 "common.json"
3235 ) ;
3336 const fileContent = await fs . readFile ( filePath , "utf8" ) ;
3437 messages = JSON . parse ( fileContent ) ;
3538 } catch ( error ) {
3639 log . error (
37- `Failed to load i18n messages for locale: ${ locale } ` ,
40+ `Failed to load i18n messages for locale: ${ resolvedLocale } ` ,
3841 error
3942 ) ;
4043 }
@@ -54,15 +57,20 @@ export async function generateMetadata(props: {
5457 } ;
5558}
5659
57- export default async function RootLayout ( props : {
60+ export default async function RootLayout ( {
61+ children,
62+ params,
63+ } : {
5864 children : ReactNode ;
59- params : Promise < { locale : string } > ;
65+ params : Promise < { locale ? : string } > ;
6066} ) {
61- const { children, params } = props ;
6267 const { locale } = await params ;
68+ const resolvedLocale = ( [ "zh" , "en" ] . includes ( locale ?? "" )
69+ ? locale
70+ : "zh" ) as "zh" | "en" ;
6371
6472 return (
65- < html lang = { locale } suppressHydrationWarning >
73+ < html lang = { resolvedLocale } suppressHydrationWarning >
6674 < body className = { inter . className } >
6775 < NextThemesProvider
6876 attribute = "class"
0 commit comments