İçindekiler
Birden fazla dili desteklemesi gereken bir Next.js uygulaması geliştiriyorsanız, büyük ihtimalle karmaşık yapılandırma dosyaları, bozuk middleware zincirleri ve server component'larda yüklenmeyi reddeden çevirilerle boğuştunuz. Bu rehber, @better-i18n/next kullanarak Next.js 15 App Router'da internationalization (i18n) kurulumunu sıfırdan production'a hazır hale getirmenizi 30 dakikadan kısa sürede adım adım anlatıyor.
Next.js App Router'da i18n Neden Farklıdır?
Pages Router ile i18n kullandıysanız, bildiklerinizin büyük bölümünü unutun. App Router oyunun kurallarını değiştirdi:
- Server Components artık varsayılan.
useTranslationsgibi React hook'larını bunlarda kullanamazsınız; sunucu tarafındagetTranslationskullanmanız gerekir. - Middleware, artık
next.config.jsiçindekii18nyapılandırması yerine (Next.js 13+ ile kaldırıldı) locale tespitini ve yönlendirmeyi üstleniyor. - ISR (Incremental Static Regeneration), çevirileri edge'de önbelleğe almanızı ve arka planda yeniden doğrulamanızı sağlar; çeviriler değiştiğinde tam yeniden derleme gerekmez.
- Streaming, layout'unuzun çeviriler asenkron yüklenirken anında render edilebilmesini sağlar.
Çoğu i18n kütüphanesi bu mimariye uyum sağlamakta zorlandı. @better-i18n/next, özellikle bu mimari için tasarlandı; çevirileri ISR önbelleğe almayla küresel bir CDN'den sunuyor ve birleştirilebilir bir middleware API'si sunuyor.
i18n Neden Önemlidir?
İnternet kullanıcılarının %60'ından fazlası içeriklere kendi dillerinde göz atmayı tercih ediyor. Next.js ile geliştirilen SaaS ürünleri, e-ticaret siteleri ve içerik platformları için yerelleştirme artık güzel bir ek özellik değil — büyümeyi çarpan bir faktör. Doğru uygulanmış i18n şunları iyileştirir:
- SEO sıralamaları —
hreflangetiketleri ve yerelleştirilmiş URL'ler aracılığıyla İngilizce dışı pazarlarda. Güçlü bir localization SEO strategy, her çevrilmiş sayfanın değerini katlar. - Dönüşüm oranları — kullanıcılar içerikleri kendi dillerinde gördüğünde %70'in üzerinde artış
- Kullanıcı tutma oranı — anadil hissi veren bir deneyim sayesinde
Geliştirici odaklı araçlara yöneliş, i18n'nin benimsenmesini de hızlandırdı. Why developer-first localization wins in 2026 makalesi, ekipleri çevirmen merkezli iş akışlarından burada kurduğunuz gibi kod-natif kuruluma yönelten geniş çaplı güçleri açıklıyor.
Mobil uygulama geliştirme deneyiminiz varsa, buradaki kalıpların React Native Expo localization'dan farklı olduğunu unutmayın — App Router, paketlenmiş locale dosyaları yerine sunucu taraflı mesaj yükleme ve ISR önbelleğe alma kullanır; bu mimari açıdan önemli bir farktır. Koda dalmadan önce internationalization söz dizimine genel bir giriş için localization and internationalisation fundamentals faydalı bir başlangıç noktasıdır.
Ne İnşa Edeceksiniz?
Bu rehberin sonunda Next.js uygulamanız şunlara sahip olacak:
- URL, cookie ve tarayıcı başlıklarından otomatik locale tespiti
- ISR önbelleğe almayla sunucu taraflı çeviri yükleme
- Sayfa yenilemesi olmadan anlık istemci taraflı locale değiştirme
hreflangve canonical URL'lerle SEO optimize edilmiş yönlendirme- Namespace kapsamlı, tür güvenli çeviriler
1. Kurulum
@better-i18n/next ve peer dependency'lerini yükleyerek başlayın:
npm install @better-i18n/next next-intl
@better-i18n/next, peer dependency olarak Next.js 15+ ve next-intl 4+ gerektirir. next-intl'in kanıtlanmış istek işleme altyapısının üzerine inşa edilmiş olup CDN destekli çeviri dağıtımı, otomatik locale tespiti ve birleştirilebilir bir middleware API'si ekler.
2. i18n Yapılandırmanızı Oluşturun
Uygulamanızın geri kalanının referans alacağı merkezi bir yapılandırma dosyası oluşturun. Bu, i18n kurulumunuz için tek doğruluk kaynağıdır.
// i18n/config.ts
import { createI18n } from "@better-i18n/next";
export const i18n = createI18n({
project: "acme/dashboard", // Better i18n proje tanımlayıcınız
defaultLocale: "en", // Yedek locale
localePrefix: "as-needed", // URL stratejisi (Bölüm 6'ya bakın)
timeZone: "UTC", // Tutarlı tarih/saat biçimlendirme
});
createI18n fonksiyonu ihtiyacınız olan her şeyi içeren bir nesne döndürür:
| Özellik | Görevi |
|---|---|
i18n.config | Varsayılanlar uygulanmış normalleştirilmiş yapılandırma |
i18n.requestConfig | App Router için next-intl istek yapılandırması |
i18n.middleware | Eski middleware (next-intl tabanlı) |
i18n.betterMiddleware() | Auth callback'li modern birleştirilebilir middleware |
i18n.getLocales() | CDN'den mevcut locale'leri getir |
i18n.getMessages() | ISR önbelleğe almayla bir locale için çevirileri getir |
Yapılandırma Seçenekleri
I18nConfig arayüzü, Next.js'e özgü seçeneklerle çekirdek yapılandırmayı genişletir:
interface I18nConfig {
project: string; // "org/project" biçimi
defaultLocale: string; // örn. "en"
localePrefix?: "as-needed" | "always" | "never";
cookieName?: string; // Varsayılan: "locale"
manifestRevalidateSeconds?: number; // Manifest için ISR (varsayılan: 3600)
messagesRevalidateSeconds?: number; // Çeviriler için ISR (varsayılan: 30)
timeZone?: string; // IANA saat dilimi tanımlayıcısı
storage?: TranslationStorage; // Çevrimdışı yedek depolama
staticData?: Record<string, Messages>; // Paketlenmiş yedek çeviriler
fetchTimeout?: number; // CDN zaman aşımı (ms, varsayılan: 10000)
retryCount?: number; // Yeniden deneme sayısı (varsayılan: 1)
}
3. Middleware'i Yapılandırın
Middleware, locale tespitini ve URL yönlendirmesini yönetir. Her istekte çalışır, kullanıcının tercih ettiği dili tespit eder ve URL yapısının locale prefix stratejinizle eşleşmesini sağlar.
Basit Kurulum
Çoğu uygulama için tek satır yeterlidir:
// middleware.ts
import { i18n } from "./i18n/config";
export default i18n.betterMiddleware();
export const config = {
matcher: ["/((?!api|_next|.*\\..*).*)`"],
};
Kimlik Doğrulama ile (Clerk Tarzı Callback)
i18n'i kimlik doğrulamayla birleştirmeniz gerekiyorsa betterMiddleware, tespit edilen locale ve i18n yanıtına erişim sağlayan bir callback kabul eder:
// middleware.ts
import { NextResponse } from "next/server";
import { i18n } from "./i18n/config";
export default i18n.betterMiddleware(async (request, { locale, response }) => {
const isProtected = request.nextUrl.pathname.includes("/dashboard");
const isLoggedIn = request.cookies.get("session")?.value;
if (isProtected && !isLoggedIn) {
return NextResponse.redirect(
new URL(`/${locale}/login`, request.url)
);
}
// Hiçbir şey döndürmemek = i18n yanıtı kullanılır (başlıklar korunur!)
});
export const config = {
matcher: ["/((?!api|_next|.*\\..*).*)`"],
};
Bu kalıp, kullanımdan kaldırılan composeMiddleware yaklaşımının yerini alır. Callback, tamamen çözümlenmiş locale ve tüm i18n başlıkları ayarlanmış yanıtı alır; böylece başlık çakışmalarını düşünmeden auth mantığınıza odaklanabilirsiniz.
Locale Tespiti Nasıl Çalışır?
Middleware, kullanıcının locale'ini bir öncelik zinciri kullanarak tespit eder:
- URL yolu —
/fr/about→fr - Cookie —
localecookie'si (önceki ziyaretlerde ayarlanır) - Tarayıcı başlığı —
Accept-Languagebaşlığı - Varsayılan —
defaultLocale'e geri düşer
Mevcut locale'ler, her istekte Better i18n CDN'inden getirilir (bellekte önbelleğe alınır). Yeni bir locale tespit edildiğinde, gelecek ziyaretler için otomatik olarak bir cookie ayarlanır.
4. İstek Yapılandırmasını Kurun
İstek yapılandırması, next-intl'e her istek için çevirilerin nasıl yükleneceğini bildirir. Better i18n bunu ISR önbelleğe almayla CDN'den mesajlar getirerek yönetir.
// i18n/request.ts
import { i18n } from "./config";
export default i18n.requestConfig;
Arka planda requestConfig, her sunucu isteğinde şunları yapar:
- Middleware başlığından locale'i çözer (ya da cookie'ye, ardından varsayılana geri düşer)
- Next.js ISR yeniden doğrulamayla CDN'den çevirileri getirir
- Hidrasyon uyumsuzluklarını önlemek için saat dilimini çözer
- next-intl'e
{ locale, messages, timeZone }döndürür
ISR stratejisi, çevirilerin sunucuda önbelleğe alındığı ve arka planda yeniden doğrulandığı anlamına gelir — manifest verisi varsayılan olarak her 3600 saniyede (1 saat), çeviri mesajları ise her 30 saniyede yeniden doğrulanır. Bunu manifestRevalidateSeconds ve messagesRevalidateSeconds yapılandırma seçenekleriyle ayarlayabilirsiniz.
5. Bileşenlerde Çevirileri Kullanma
Server Components
Server component'larda next-intl'in getTranslations fonksiyonunu kullanın:
// app/[locale]/page.tsx
import { getTranslations } from "next-intl/server";
export default async function HomePage() {
const t = await getTranslations("home");
return (
<main>
<h1>{t("title")}</h1>
<p>{t("description")}</p>
</main>
);
}
Client Components
Client component'larda useTranslations hook'unu kullanın:
"use client";
import { useTranslations } from "next-intl";
export function WelcomeBanner() {
const t = useTranslations("home");
return (
<section>
<h2>{t("welcome")}</h2>
<p>{t("subtitle", { name: "Developer" })}</p>
</section>
);
}
Namespace Kapsamı
Çeviriler namespace'e göre düzenlenir. useTranslations("home") veya getTranslations("home") çağırdığınızda çeviri dosyalarındaki home namespace'ine kapsam belirliyorsunuz:
{
"home": {
"title": "Acme'ye Hoş Geldiniz",
"description": "İşletmeniz için en iyi dashboard",
"welcome": "Merhaba, {name}!",
"subtitle": "Hadi başlayalım"
},
"auth": {
"login": "Giriş yap",
"logout": "Çıkış yap"
}
}
Bu, uygulamanızın farklı bölümlerindeki anahtar çakışmalarını önler ve uygulama büyüdükçe çeviri dosyalarını yönetilebilir tutar.
6. URL Locale Prefix Stratejileri
localePrefix seçeneği, locale'lerin URL'lerde nasıl göründüğünü kontrol eder. Uygulamanıza uygun stratejiyi seçin:
"as-needed" (Varsayılan)
Varsayılan locale'in prefix'i yoktur. Diğer locale'ler prefix alır.
| Locale | URL |
|---|---|
en (varsayılan) | /about |
fr | /fr/about |
tr | /tr/about |
createI18n({ localePrefix: "as-needed", defaultLocale: "en" });
"always"
Varsayılan dahil her locale prefix alır.
| Locale | URL |
|---|---|
en | /en/about |
fr | /fr/about |
tr | /tr/about |
createI18n({ localePrefix: "always", defaultLocale: "en" });
"never"
URL'de hiçbir locale görünmez. Locale tamamen cookie ve tarayıcı başlıklarıyla belirlenir.
| Locale | URL |
|---|---|
| Herhangi biri | /about |
createI18n({ localePrefix: "never", defaultLocale: "en" });
"never" kullanıldığında middleware, next-intl'in URL yeniden yazımını tamamen atlar ve locale'i x-middleware-request-x-next-intl-locale başlığı aracılığıyla ayarlar. İstek yapılandırması, middleware başlığı mevcut değilken locale cookie'sini okumaya geri döner.
7. İstemci Taraflı Locale Değiştirme
Better i18n, anlık değiştirme ya da sunucu yenileme yaklaşımı isteyip istemediğinize bağlı olarak istemci üzerinde locale değiştirmek için iki yaklaşım sunar.
BetterI18nProvider ile Anlık Değiştirme
Sayfa yenilemesi olmadan anlık locale değiştirmeyi etkinleştirmek için layout'unuzu BetterI18nProvider ile sarın:
// app/[locale]/layout.tsx
import { getLocale, getMessages } from "next-intl/server";
import { BetterI18nProvider } from "@better-i18n/next/client";
export default async function LocaleLayout({
children,
}: {
children: React.ReactNode;
}) {
const locale = await getLocale();
const messages = await getMessages();
return (
<html lang={locale}>
<body>
<BetterI18nProvider
locale={locale}
messages={messages}
config={{ project: "acme/dashboard", defaultLocale: "en" }}
>
{children}
</BetterI18nProvider>
</body>
</html>
);
}
Ardından bileşen ağacınızın herhangi bir yerinde useSetLocale hook'unu kullanın:
"use client";
import { useSetLocale } from "@better-i18n/next/client";
export function LanguageSwitcher() {
const setLocale = useSetLocale();
return (
<div>
<button onClick={() => setLocale("en")}>English</button>
<button onClick={() => setLocale("fr")}>Francais</button>
<button onClick={() => setLocale("tr")}>Turkce</button>
</div>
);
}
setLocale çağrıldığında:
- Sonraki navigasyonda sunucu taraflı kalıcılık için bir
localecookie'si ayarlar - İstemcide CDN'den yeni çevirileri getirir
- Tüm ağacı yeni locale ve mesajlarla yeniden render eder — sayfa yenilemesi yok
Dinamik Dil Seçici Oluşturma
Better i18n projenizde yapılandırılmış dilleri otomatik olarak yansıtan bir dil seçici oluşturmak için useManifestLanguages hook'unu kullanın:
"use client";
import { useManifestLanguages, useSetLocale } from "@better-i18n/next/client";
export function DynamicLanguagePicker() {
const { languages, isLoading, error } = useManifestLanguages({
project: "acme/dashboard",
defaultLocale: "en",
});
const setLocale = useSetLocale();
if (isLoading) return <div>Diller yükleniyor...</div>;
if (error) return <div>Diller yüklenemedi</div>;
return (
<select onChange={(e) => setLocale(e.target.value)}>
{languages.map((lang) => (
<option key={lang.code} value={lang.code}>
{lang.nativeName || lang.name || lang.code}
</option>
))}
</select>
);
}
Dil listesi, yerleşik istek tekilleştirmesiyle CDN manifest'inden getirilir — useManifestLanguages çağıran birden fazla bileşen tek bir ağ isteğini paylaşır.
8. SEO: hreflang, Canonical URL'ler ve Metadata
Çok dilli Next.js uygulamaları için doğru SEO kurulumu kritiktir. hreflang etiketleri ve canonical URL'lerin nasıl kurulacağı aşağıda açıklanmıştır. Bunun daha geniş bir çok dilli SEO stratejisine nasıl uyduğuna dair kapsamlı bir açıklama için localization SEO strategy guide sayfamıza bakın.
Çok dilli uygulamanızın genel bilgi mimarisini planlarken, multilingual website design guide locale'e duyarlı navigasyon kalıplarını, diller arası metin genişlemesini ve burada oluşturduğunuz yapıyı doğrudan etkileyen RTL betik değerlendirmelerini ele alır.
hreflang Etiketleri Oluşturma
Kök layout'unuza veya sayfa metadata'sına alternatif dil bağlantıları ekleyin:
// app/[locale]/layout.tsx
import { i18n } from "@/i18n/config";
import type { Metadata } from "next";
export async function generateMetadata({
params,
}: {
params: { locale: string };
}): Promise<Metadata> {
const { locale } = await params;
const locales = await i18n.getLocales();
const languages: Record<string, string> = {};
for (const loc of locales) {
languages[loc] = `https://yourdomain.com/${loc}`;
}
// Arama motorları için x-default ekle
languages["x-default"] = "https://yourdomain.com/en";
return {
alternates: {
canonical: `https://yourdomain.com/${locale}`,
languages,
},
};
}
Bu, HTML'nizde şunları oluşturur:
<link rel="alternate" hreflang="en" href="https://yourdomain.com/en" /> <link rel="alternate" hreflang="fr" href="https://yourdomain.com/fr" /> <link rel="alternate" hreflang="tr" href="https://yourdomain.com/tr" /> <link rel="alternate" hreflang="x-default" href="https://yourdomain.com/en" /> <link rel="canonical" href="https://yourdomain.com/en" />
Yerelleştirilmiş Metadata
Her locale için çevrilmiş sayfa başlıkları ve açıklamalar sunun:
// app/[locale]/page.tsx
import { getTranslations } from "next-intl/server";
import type { Metadata } from "next";
export async function generateMetadata({
params,
}: {
params: { locale: string };
}): Promise<Metadata> {
const t = await getTranslations("meta");
return {
title: t("home.title"),
description: t("home.description"),
openGraph: {
title: t("home.title"),
description: t("home.description"),
},
};
}
9. Çevrimdışı Yedek ve Dayanıklılık
Production uygulamaları CDN kesintilerini sorunsuz yönetebilmelidir. @better-i18n/next, hem manifest hem de çeviri verisi için üç katmanlı bir yedek zinciri sağlar:
- Bellek önbelleği — İşlem içi TTL önbelleği (en hızlı)
- CDN getirme — Yapılandırılabilir zaman aşımı ve yeniden deneme ile
- Kalıcı depolama — Çevrimdışı/düşük performanslı senaryolar için
- Statik veri — Son çare olarak paketlenmiş çeviriler
// i18n/config.ts
import { createI18n } from "@better-i18n/next";
export const i18n = createI18n({
project: "acme/dashboard",
defaultLocale: "en",
fetchTimeout: 5000, // 5 saniye sonra CDN getirmeyi iptal et
retryCount: 2, // Hata durumunda iki kez yeniden dene
staticData: { // Paketlenmiş yedek
en: {
common: { error: "Bir şeyler ters gitti" },
},
},
});
CDN erişilemezse çeviriler kalıcı depolamadan (yapılandırıldıysa) sunulur veya paketlenmiş staticData'ya geri düşer. Uygulamanız kullanıcılara hiçbir zaman kırık anahtarlar göstermez.
10. MCP ile Yapay Zeka Destekli Çeviri
Better i18n, yapay zeka asistanlarının çevirilerinizi doğrudan yönetmesine olanak tanıyan bir MCP (Model Context Protocol) sunucusu içerir. Çeviri dosyalarını elle yazmak yerine Claude, Cursor veya herhangi bir MCP uyumlu araç kullanarak şunları yapabilirsiniz:
createKeysile çeviri anahtarları oluşturmaproposeLanguagesile yeni diller önermeupdateKeysile mevcut çevirileri güncellemepublishTranslationsile CDN'e yayınlama
Örnek İş Akışı
- React bileşeninizi İngilizce dizelerle yazın
- Yapay zeka asistanınıza sorun: "Ana sayfa için Fransızca ve Türkçe çeviriler ekle"
- MCP sunucusu anahtarları oluşturur, çeviriler önerir ve yayınlar
- Next.js uygulamanız yeni çevirileri bir sonraki ISR yeniden doğrulama döngüsünde alır (varsayılan olarak 30 saniye)
Manuel JSON düzenleme yok. Dosyalar arası kopyala-yapıştır yok. Tüm çeviri iş akışı yapay zeka kodlama asistanınız aracılığıyla gerçekleşir. Bu iş akışını kendi blog içeriğimizde nasıl kullandığımızı görmek için how we use AI to write our own blog sayfasını okuyun.
Çeviriler diller genelinde yayına girdikten sonra özel bir i18n testing pass çalıştırmaya değer — otomatik kontroller eksik anahtarları, bozuk interpolasyonları ve çoğullama uç durumlarını kullanıcılara ulaşmadan yakalar. Dizelerinizin ton veya bağlama göre değişen bir nüansa ihtiyacı varsa, why translation context matters yazımız bu bağlamın yapay zeka çevirmenlerine nasıl etkili şekilde sağlanacağını ele alır.
Hepsini Bir Araya Getirme
İşte Better i18n ile bir Next.js App Router projesinin tam dosya yapısı:
your-app/
i18n/
config.ts # createI18n yapılandırması
request.ts # next-intl istek yapılandırması
middleware.ts # Locale tespiti ve yönlendirme
app/
[locale]/
layout.tsx # BetterI18nProvider sarmalayıcısı
page.tsx # getTranslations ile server component
components/
LanguageSwitcher.tsx # İstemci taraflı locale değiştirme
Hızlı Başvuru
// i18n/config.ts
import { createI18n } from "@better-i18n/next";
export const i18n = createI18n({
project: "acme/dashboard",
defaultLocale: "en",
localePrefix: "as-needed",
});
// i18n/request.ts
import { i18n } from "./config";
export default i18n.requestConfig;
// middleware.ts
import { i18n } from "./i18n/config";
export default i18n.betterMiddleware();
export const config = {
matcher: ["/((?!api|_next|.*\\..*).*)`"],
};
Sık Karşılaşılan Tuzaklar (ve Nasıl Kaçınılır)
Yüzlerce ekibin Next.js'de i18n kurmasına yardım ettikten sonra, en sık karşılaştığımız sorunlar şunlar:
1. Tarih/Saat Biçimlendirmesinde Hidrasyon Uyumsuzlukları
timeZone ayarlamadan tarih veya saat biçimlendirirseniz sunucu ve istemci farklı değerler render edebilir — bu React hidrasyon hatalarına yol açar.
Çözüm: createI18n yapılandırmanızda her zaman timeZone ayarlayın:
createI18n({
project: "acme/dashboard",
defaultLocale: "en",
timeZone: "UTC", // Sunucu/istemci uyumsuzluğunu önler
});
Better i18n bunu istek yapılandırmasında ve BetterI18nProvider'da otomatik olarak ayarlar; belirtmezseniz Intl.DateTimeFormat().resolvedOptions().timeZone'a geri döner.
2. Varsayılan Locale'de Eksik Locale Prefix
localePrefix: "as-needed" (varsayılan) ile varsayılan locale'inizin URL prefix'i yoktur. Bu, /about'un İngilizce, /fr/about'un ise Fransızca sunduğu anlamına gelir. Bunu unutup bağlantılarda locale segmentlerini doğrudan kodlarsanız varsayılan locale'iniz bozulur.
Çözüm: next-intl'in Link bileşenini kullanın veya yolları dinamik olarak oluşturun:
// Bunu yapın:
<Link href="/about">{t("nav.about")}</Link>
// Bunu yapmayın:
<a href="/en/about">About</a>
3. Alt Alan Adlarında Cookie Kalıcı Olmuyor
Varsayılan locale cookie'si path: / ile ayarlanır ancak domain içermez. Uygulamanız alt alan adlarına yayılıyorsa (örn. app.yourdomain.com ve www.yourdomain.com) cookie paylaşılmaz.
Çözüm: Çok alt alan adlı kurulumlar için locale'in her zaman URL'de yer aldığı localePrefix: "always" kullanın ya da middleware callback'inizde özel bir cookie domain'i ayarlayın.
4. Middleware Matcher'ın Statik Dosyaları Dışlamaması
Middleware matcher'ınız çok geniş kapsamlıysa resimler, fontlar ve API rotaları dahil her istekte çalışır. Bu uygulamanızı yavaşlatır ve beklenmedik locale yönlendirmelerine neden olabilir.
Çözüm: Her zaman önerilen matcher kalıbını kullanın:
export const config = {
matcher: ["/((?!api|_next|.*\\..*).*)`"],
};
Bu /api/*, /_next/* ve dosya uzantısı içeren tüm yolları dışlar.
Sonuç
Next.js App Router'da i18n kurmak bu kadar zahmetli olmak zorunda değil. @better-i18n/next ile şunlara sahip olursunuz:
- Sıfır yapılandırma ile locale tespiti — URL, cookie ve tarayıcı başlıklarından
- CDN destekli çeviriler — ISR önbelleğe alma ve çevrimdışı yedekle
- Birleştirilebilir middleware — auth ile uyumlu (Clerk, NextAuth, vb.)
- Anlık istemci taraflı locale değiştirme — sayfa yenilemesi olmadan
- SEO'ya hazır — hreflang, canonical URL'ler ve yerelleştirilmiş metadata ile
- Yapay zeka destekli çeviri — MCP sunucusu entegrasyonu sayesinde
Kurulumun tamamı beş dosya ve 50 satırdan az yapılandırma kodu gerektirir. Çevirileriniz küresel bir CDN'den sunulur, ISR ile önbelleğe alınır ve yapay zeka asistanınız aracılığıyla yönetilir.
Başlamaya hazır mısınız? @better-i18n/next'i yükleyin ve ilk locale'inizi dakikalar içinde çalıştırın:
npm install @better-i18n/next next-intl
Daha gelişmiş kalıplar için tam belgelere göz atın veya GitHub deposunu keşfedin.
İlgili Kaynaklar
- Next.js i18n Landing Page — Özellik genel bakışı ve karşılaştırma
- i18n for Developers — Better i18n neden geliştirici odaklı
- CLI Code Scanning — Hardcoded string'leri göndermeden önce yakala