feat(i18n): setup next-intl core config and translation dictionaries

This commit is contained in:
Poyraz
2026-06-27 14:42:40 +03:00
parent 6d2ecbc14f
commit 968ebb33c5
19 changed files with 275 additions and 91 deletions
+7 -90
View File
@@ -1,94 +1,11 @@
import type { Metadata } from "next";
import "./globals.css";
import { ReactNode } from "react";
import { AppShell } from "@/components/app-shell";
import { GoogleAnalytics } from "@/components/google-analytics";
export const metadata: Metadata = {
metadataBase: new URL("https://poyrazavsever.com"),
title: {
default: "Poyraz Avsever | Portfolyo",
template: "%s | Poyraz Avsever",
},
description:
"Poyraz Avsever'in projelerini, yazılım içeriklerini ve teknik çalışmalarını paylaştığı kişisel portfolyo sitesi.",
applicationName: "Poyraz Avsever Portfolyo",
alternates: {
canonical: "/",
},
icons: {
icon: [
{ url: "/favicon.ico", sizes: "any" },
{ url: "/logo/logo.jpeg", type: "image/jpeg" },
],
shortcut: "/favicon.ico",
apple: "/logo/logo.jpeg",
},
authors: [{ name: "Poyraz Avsever" }],
creator: "Poyraz Avsever",
publisher: "Poyraz Avsever",
openGraph: {
type: "website",
locale: "tr_TR",
url: "https://poyrazavsever.com",
siteName: "Poyraz Avsever Portfolyo",
title: "Poyraz Avsever | Portfolyo",
description:
"Poyraz Avsever'in projelerini, yazılım içeriklerini ve teknik çalışmalarını paylaştığı kişisel portfolyo sitesi.",
images: [
{
url: "/logo/logo.jpeg",
width: 1200,
height: 1200,
alt: "Poyraz Avsever Logo",
},
],
},
twitter: {
card: "summary_large_image",
title: "Poyraz Avsever | Portfolyo",
description:
"Poyraz Avsever'in projelerini, yazılım içeriklerini ve teknik çalışmalarını paylaştığı kişisel portfolyo sitesi.",
images: ["/logo/logo.jpeg"],
creator: "@poyrazavsever",
},
keywords: [
"Poyraz Avsever",
"Portfolio",
"Freelancer",
"Fullstack Developer",
"Web Developer",
"Projects",
"Skills",
"Services",
"Coding",
"Technology",
"Personal Website",
"Software Engineer",
"Frontend Developer",
"Backend Developer",
"JavaScript",
"React",
"Node.js",
"Next.js",
"Web Development",
"Programming",
"Tech Enthusiast",
"Developer Portfolio",
],
type Props = {
children: ReactNode;
};
export default function RootLayout({
children,
}: Readonly<{
children: React.ReactNode;
}>) {
return (
<html lang="tr">
<body className="min-h-dvh bg-background text-foreground antialiased">
<GoogleAnalytics />
<AppShell>{children}</AppShell>
</body>
</html>
);
// Since we have a `[locale]` layout, this layout is just a placeholder
// that passes children through.
export default function RootLayout({ children }: Props) {
return children;
}