Sorunuzu sorun ve bu sayfaya ve seçtiğiniz AI sağlayıcısına referans vererek belgenin bir özetini alın
Bu belge güncel değil, temel sürüm şu tarihte güncellendi 22 Ağustos 2026.
İngilizce dökümana gitSürüm Geçmişi
- "Solid useIntlayer API kullanımını doğrudan özellik erişimine güncelle"v8.9.004.05.2026
- "init komutu ekle"v7.5.930.12.2025
- "`withIntlayer()` fonksiyonunu promise tabanlı fonksiyona dönüştür"v5.6.006.07.2025
- "Geçmişi başlat"v5.5.1029.06.2025
Bu sayfanın içeriği bir yapay zeka kullanılarak çevrildi.
Orijinal içeriğin İngilizce son sürümünü görüntüleyinBu dokümantasyonu geliştirmek için bir fikriniz varsa, lütfen GitHub'da bir çekme isteği göndererek katkıda bulunmaktan çekinmeyin.
Dokümantasyon için GitHub bağlantısıBelge Markdown'ını panoya kopyala
Intlayer ile Next.js 14 and App Router çevirin | Uluslararasılaştırma (i18n)
İçindekiler
Neden alternatifler yerine Intlayer?
'Next-intl' veya 'i18next' gibi ana çözümlerle karşılaştırıldığında Intlayer, aşağıdaki gibi entegre optimizasyonlarla gelen bir çözümdür:
Intlayer, verimli işleme için Sunucu Bileşenleri ile çalışacak şekilde optimize edilmiştir ve Turbopack ile tamamen uyumludur. Statik oluşturmayı engellemez ve ara yazılımların yanı sıra uluslararasılaştırmayı (i18n) ölçeklendirmek için gereken tüm özellikleri sunar.
Intlayer, Next.js 12, 13, 14, 15 ve 16 ile uyumludur. Next.js Pages Router kullanıyorsanız bu rehbere başvurabilirsiniz. Yerel yönlendirme SEO, bundle boyutu ve performans açısından faydalıdır. İhtiyacınız yoksa bu rehbere başvurabilirsiniz. Uygulama Yönlendiricili Next.js 12, 13, 14 ve 15 için bu kılavuz bakın.
Sayfalarınıza çok büyük JSON dosyaları yüklemek yerine yalnızca gerekli içeriği yükleyin. Intlayer bundle ve sayfa boyutlarınızı %50'ye kadar azaltmanıza yardımcı olur.
Uygulamanızın içeriğinin kapsamını belirlemek, büyük ölçekli uygulamalar için bakımı kolaylaştırır. İçerik kod tabanınızın tamamını gözden geçirmenin zihinsel yükü olmadan, tek bir özellik klasörünü çoğaltabilir veya silebilirsiniz. Ayrıca Intlayer, içeriğinizin doğruluğunu sağlamak için tamamen tiplendirilmiş (fully typed)tır.
İçeriğin bir arada konumlandırılması Büyük Dil Modellerinin (LLM'ler) ihtiyaç duyduğu bağlamı azaltır. Intlayer ayrıca eksik çevirileri test etmek için CLI gibi bir araç paketiyle birlikte gelirLSP, MCP ve agent skills, geliştirici deneyimini (DX) yapay zeka için daha da sorunsuz hale getirmek için ajanlar.
Maliyeti AI sağlayıcınıza ait olmak üzere seçtiğiniz LLM'yi kullanarak CI/CD işlem hattınızda çeviri yapmak için otomasyonu kullanın. Intlayer ayrıca içerik çıkarmayı otomatikleştirmek için bir derleyici ve arka planda çeviri yapmaya yardımcı olacak bir web platformu sunar.
Büyük JSON dosyalarını bileşenlere bağlamak performans ve tepkime sorunlarına yol açabilir. Intlayer, içerik yüklemenizi derleme sırasında optimize eder.
Bir i18n çözümünden çok daha fazlası olan Intlayer, kendi kendine barındırılan bir görsel düzenleyici ve tam CMS çok dilli içeriğinizi gerçek zamanlı olarak yönetmenize yardımcı olarak çevirmenler, metin yazarları ve diğer ekip üyeleriyle işbirliğini kusursuz hale getirir. İçerik yerel olarak ve/veya uzaktan depolanabilir.
Ön Koşullar
Bu kılavuzu takip etmek için aşağıdaki araçlara ihtiyacınız olacak:
</Tab>
</Tab> </Tabs>
- Node.js 18 veya üzeri
- npm, pnpm veya yarn paket yöneticisi
- Next.js 14 projesi
Intlayer Paketlerini Kurma
İlk olarak, Intlayer paketlerini projenize kurun:
bashKodu kopyalaKodu panoya kopyala
--interactivebayrağı isteğe bağlıdır. Bir yapay zeka aracısıysanızintlayer-cli initkullanın.Bu komut ortamınızı algılayacak ve gerekli paketleri yükleyecektir. Örneğin:
bashKodu kopyalaKodu panoya kopyala
- intlayer
Internationalization araçlarını sağlayan core package'ı, konfigürasyon yönetimi, çeviri, içerik bildirimi, transpilation ve CLI komutları için.
- next-intlayer
Intlayer'ı Next.js ile entegre eden paket. Next.js uluslararasılaştırması için context providers ve hooks'ları sağlar. Ayrıca, Intlayer'ı Webpack veya Turbopack ile entegre etmek için Next.js plugin'ini, ayrıca kullanıcının tercih ettiği dili algılamak, çerezleri yönetmek ve URL yeniden yönlendirmesini işlemek için middleware'i içerir.
Intlayer Yapılandırma Dosyası Oluşturma
Here is the final structure that we will make:
bashKodu kopyalaKodu panoya kopyala
If you don't want locale routing, intlayer can be used as a simple provider / hook. See this guide for more details.
Proje kök dizininizde
intlayer.config.tsdosyasını oluşturun:intlayer.config.tsKodu kopyalaKodu panoya kopyala
import { Locales } from "intlayer"; import { type IntlayerConfig } from "intlayer"; const config: IntlayerConfig = { internationalization: { locales: [ Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH, Locales.TURKISH, ], defaultLocale: Locales.ENGLISH, }, content: { // İçerik dosyalarınızın bulunduğu dizin fileExtensions: [".content.ts", ".content.js", ".content.json"], baseDir: "./src", contentDirName: "content", // İçerik dosyalarınızın türlerini belirtin types: { filePath: "./types/intlayer.d.ts", moduleAugmentation: true, }, }, }; export default config;Bu yapılandırma dosyası aracılığıyla, yerelleştirilmiş URL'ler, middleware yönlendirmesi, cookie adları, içerik bildirimlerinizin konumu ve uzantısı, Intlayer günlüklerini konsolda devre dışı bırakma ve daha fazlasını ayarlayabilirsiniz. Mevcut parametrelerin tam listesi için yapılandırma belgelerine başvurun.
Next.js Yapılandırmasını Güncelleme
Next.js yapılandırma dosyanızı Intlayer ile uyumlu hale getirin:
İçerik Bildirimi
İçerik dosyalarınızı oluşturun. Bu dosyalar, uygulamanızdaki çok dilli içeriği tanımlar.
src/content/home.content.tsKodu kopyalaKodu panoya kopyala
import { t } from "intlayer"; import { type ILocaleContent } from "intlayer"; const homeContent = { title: t({ en: "Welcome to My App", fr: "Bienvenue dans mon application", es: "Bienvenido a mi aplicación", tr: "Uygulamama Hoş Geldiniz", }), description: t({ en: "This is a sample Next.js application with Intlayer", fr: "Ceci est un exemple d'application Next.js avec Intlayer", es: "Esta es una aplicación de ejemplo de Next.js con Intlayer", tr: "Bu, Intlayer ile örnek bir Next.js uygulamasıdır", }), } satisfies ILocaleContent; export default homeContent;intlayerMiddleware, kullanıcının tercih ettiği dili algılamak ve onları yapılandırmada belirtilen uygun URL'ye yönlendirmek için kullanılır. Ayrıca, kullanıcının tercih ettiği dili bir çerezde kaydetmeyi sağlar.Intlayer v9'dan bu yana, bu middleware
routing.enableProxyseçeneğini respects eder (truevarsayılan olarak). Bunu pass-through haline dönüştürmek için konfigürasyonunuzdarouting.enableProxy: falseayarlayın ve bu dosyayı silmeyin. v9 release notes dosyasına bakın.Uygulamanızın rotalarıyla eşleşmesi için
matcherparametresini uyarlayın. Daha fazla ayrıntı için Next.js matcher yapılandırması belgesine bakın.Birden fazla middleware'i bir araya getirmeniz gerekiyorsa (örneğin,
intlayerMiddleware'i kimlik doğrulama veya özel middleware'lerle), Intlayer artıkmultipleMiddlewaresadında bir yardımcı sağlıyor.src/content/home.content.jsonKodu kopyalaKodu panoya kopyala
İçerik Kullanımı
İçeriğinizi bileşenlerinizde kullanın:
src/app/page.tsxKodu kopyalaKodu panoya kopyala
import { useIntlayer } from "next-intlayer"; import { Locales } from "intlayer"; export default function HomePage() { const content = useIntlayer("home"); return ( <div> <h1>{content.title}</h1> <p>{content.description}</p> </div> ); }RootLayoutbileşenini boş tutmak,langvedirözniteliklerini<html>etiketine ayarlamaya izin verir.Middleware Kurulumu
src/app/[locale]/layout.tsxKodu kopyalaKodu panoya kopyala
import { type Next14LayoutIntlayer } from "next-intlayer"; import { IntlayerProvider } from "next-intlayer/server"; import { Inter } from "next/font/google"; import { getHTMLTextDir } from "intlayer"; const inter = Inter({ subsets: ["latin"] }); const LocaleLayout: Next14LayoutIntlayer = ({ children, params: { locale }, }) => ( <IntlayerProvider locale={locale}> <html lang={locale} dir={getHTMLTextDir(locale)}> <body className={inter.className}>{children}</body> </html> </IntlayerProvider> ); export default LocaleLayout;Tek bir
IntlayerProvider, ağacın her iki yarısını da kapsar: istek kapsamlı sunucu bağlamını tohumlandırır (sunucu hooks'ları tarafından okunur) ve istemci sağlayıcısını monte eder, böylece istemci bileşenleri aynı yerel ayarı alır.Next.js 14'te çok dilli yönlendirme için middleware kurun:
src/app/[locale]/layout.tsxKodu kopyalaKodu panoya kopyala
import { type Next14LayoutIntlayer, IntlayerProvider } from "next-intlayer"; import { Inter } from "next/font/google"; import { getHTMLTextDir } from "intlayer"; const inter = Inter({ subsets: ["latin"] }); const LocaleLayout: Next14LayoutIntlayer = ({ children, params: { locale }, }) => ( <html lang={locale} dir={getHTMLTextDir(locale)}> <body className={inter.className}> <IntlayerProvider locale={locale}>{children}</IntlayerProvider> </body> </html> ); export default LocaleLayout;</Tab> </Tabs>
[locale]yol segmenti, dili tanımlamak için kullanılır. Örneğin:/en-US/abouten-USdilini ve/fr/aboutisefrdilini ifade eder.Bu aşamada şu hatayı alacaksınız:
Error: Missing <html> and <body> tags in the root layout.. Bu beklenen bir durumdur çünkü/app/page.tsxdosyası artık kullanılmamaktadır ve kaldırılabilir. Bunun yerine,[locale]path segment/app/[locale]/page.tsxsayfasını etkinleştirecektir. Sonuç olarak, sayfalar tarayıcınızda/en,/fr,/esgibi yollar aracılığıyla erişilebilir olacaktır. Varsayılan locale'i kök sayfa olarak ayarlamak için, 4. adımdakimiddlewarekurulumuna başvurun.Ardından, uygulamanızın Layout'unda
generateStaticParamsfonksiyonunu uygulayın.src/middleware.tsKodu kopyalaKodu panoya kopyala
import { createMiddleware } from "next-intlayer/middleware"; import { type NextRequest } from "next/server"; export default createMiddleware({ // Alternatif olarak, middleware seçeneklerini özelleştirebilirsiniz // locales: ['en', 'fr', 'es'], // defaultLocale: 'en', }); export const config = { matcher: ["/((?!api|_next|_vercel|.*\\..*).*)"], };generateStaticParams, uygulamanızın tüm locales için gerekli sayfaları önceden oluşturmasını sağlayarak runtime hesaplamasını azaltır ve kullanıcı deneyimini iyileştirir. Daha fazla bilgi için Next.js generateStaticParams belgesine bakın.Düzen Dosyası (Layout)
Kök düzen dosyanızı çok dilli hale getirin:
src/app/layout.tsxKodu kopyalaKodu panoya kopyala
import {} from "next-intlayer"; import { getHTMLTextDir } from "intlayer"; import { getLocaleName } from "intlayer"; import { Inter } from "next/font/google"; import { type Metadata } from "next/types"; import { getIntlayer } from "next-intlayer/server"; import { type Locales } from "intlayer"; const inter = Inter({ subsets: ["latin"] }); export const generateMetadata = (params: { params: { locale: Locales }; }): Metadata => { const { locale } = params.params; const t = getIntlayer(locale); return { title: t({ en: "My App", fr: "Mon Application", es: "Mi Aplicación", tr: "Uygulamam", }), description: t({ en: "This is my Next.js app with Intlayer", fr: "Ceci est mon application Next.js avec Intlayer", es: "Esta es mi aplicación Next.js con Intlayer", tr: "Bu, Intlayer ile Next.js uygulamamdır", }), }; }; export default function RootLayout({ children, params, }: { children: React.ReactNode; params: { locale: Locales }; }) { const { locale } = params; const localeName = getLocaleName(locale); const textDirection = getHTMLTextDir(locale); return ( <html lang={locale} dir={textDirection}> <body className={inter.className}> <header> <h1>{localeName}</h1> </header> {children} </body> </html> ); }İçerik deklarasyonlarınız,
contentDirdizinine dahil edildikleri sürece uygulamanızın herhangi bir yerinde tanımlanabilir (varsayılan olarak./src). Ve içerik deklarasyonu dosya uzantısıyla eşleşmelidir (varsayılan olarak.content.{json,ts,tsx,js,jsx,mjs,cjs,md,mdx,yaml,yml}).Daha fazla bilgi için içerik bildirimi belgelerine başvurun.
Sayfa Yönlendirme
Sayfa yönlendirmelerini çok dilli hale getirin:
src/app/[locale]/page.tsxKodu kopyalaKodu panoya kopyala
import { useIntlayer } from "next-intlayer"; import { Locales } from "intlayer"; export default function HomePage() { const content = useIntlayer("home"); return ( <div> <h1>{content.title}</h1> <p>{content.description}</p> </div> ); }IntlayerProvideryerel düzen içinde bir kez monte edilir. Sunucu ve istemci bileşenlerine yerel ayarları sağlar, bu nedenle sayfalar artık kendilerini sarmalamaz.- Sunucu hooks'ları yerel ayarları şu sırayla çözer: çağrı sitesinde geçirilen yerel ayar, ardından sağlayıcı tarafından başlatılan sunucu bağlamı, ardından istekle taşınan yerel ayar (Intlayer proxy'si tarafından ayarlanan
x-intlayer-localebaşlığı, ardından yerel ayar cookie'si). Bu son adım, yalnızca sayfa segmentini yeniden işleyen istemci tarafı navigasyonunda içeriğin doğru kalmasını sağlar; burada düzen — ve onunla birlikte sağlayıcı — yeniden çalışmaz.
src/app/[locale]/page.tsxKodu kopyalaKodu panoya kopyala
import { ClientComponentExample } from "@components/ClientComponentExample"; import { ServerComponentExample } from "@components/ServerComponentExample"; import { type Next14PageIntlayer } from "next-intlayer"; import { IntlayerServerProvider, useIntlayer } from "next-intlayer/server"; const Page: Next14PageIntlayer = ({ params: { locale } }) => { const content = useIntlayer("page", locale); return ( <> <p> {content.getStarted.main} <code>{content.getStarted.pageLink}</code> </p> <IntlayerServerProvider locale={locale}> <ServerComponentExample /> <ClientComponentExample /> </IntlayerServerProvider> </> ); }; export default Page;IntlayerClientProvideristemci tarafı bileşenlerine locale sağlamak için kullanılır. Herhangi bir ana bileşene, düzen (layout) dahil olmak üzere yerleştirilebilir. Ancak, düzene yerleştirmek önerilir çünkü Next.js düzen kodunu sayfalar arasında paylaştığı için daha verimlidir. DüzendeIntlayerClientProviderkullanarak, her sayfa için yeniden başlatmaktan kaçınır, performansı iyileştirir ve uygulamanız genelinde tutarlı bir lokalizasyon bağlamı sağlarsınız.IntlayerServerProvidersunucu alt öğelerine locale sağlamak için kullanılır. Düzende ayarlanamaz.
Layout ve page ortak bir server context paylaşamaz çünkü server context sistemi, per-request data store'a dayalıdır (React's cache mekanizması aracılığıyla), bu da her "context"in uygulamanın farklı segmentleri için yeniden oluşturulmasına neden olur. Provider'ı shared layout'a yerleştirmek bu izolasyonu bozar, server context değerlerinin server component'lerinize doğru şekilde yayılmasını engeller.
Meta Verilerin Uluslararasılaştırılması
src/components/ServerComponentExample.tsxKodu kopyalaKodu panoya kopyala
import type { FC } from "react"; import { useIntlayer } from "next-intlayer"; const ServerComponentExample: FC = () => { const content = useIntlayer("server-component-example"); // İlgili içerik bildirimini oluştur return ( <div> <h2>{content.title}</h2> <p>{content.content}</p> </div> ); };next-intlayerisomorphic import yoludur:react-serverexport koşulu sunucu bileşenlerine ambient-locale uygulamasını verirken, istemci bileşenleri context-backed olanı alır. Aynı çağrı her iki tarafta da çalışır.Sayfa meta verilerini uluslararasılaştırın:
src/app/[locale]/page.tsxKodu kopyalaKodu panoya kopyala
import { getIntlayer } from "next-intlayer/server"; import { type Locales } from "intlayer"; import { type Metadata } from "next/types"; export const generateMetadata = (params: { params: { locale: Locales }; }): Metadata => { const { locale } = params.params; const t = getIntlayer(locale); return { title: t({ en: "Home Page", fr: "Page d'accueil", es: "Página de inicio", tr: "Ana Sayfa", }), description: t({ en: "Welcome to the home page", fr: "Bienvenue sur la page d'accueil", es: "Bienvenido a la página de inicio", tr: "Ana sayfaya hoş geldiniz", }), }; }; export default function HomePage() { const content = getIntlayer("home"); return ( <div> <h1>{content.title}</h1> <p>{content.description}</p> </div> ); }</Tab> </Tabs>
İçeriğinizi
alt,title,href,aria-labelgibi birstringözniteliğinde kullanmak istiyorsanız, fonksiyonun değerini şu şekilde kullanabilirsiniz:htmlKodu kopyalaKodu panoya kopyala
useIntlayerhook hakkında daha fazla bilgi için belgelere bakınız.Site Haritası ve Robots.txt Kurulumu
Site haritanızı ve robots.txt dosyanızı çok dilli hale getirin:
src/app/[locale]/sitemap.tsKodu kopyalaKodu panoya kopyala
import { getLocalizedUrl } from "intlayer"; import { Locales } from "intlayer"; import { type MetadataRoute } from "next"; export default function sitemap(): MetadataRoute.Sitemap { const locales = [ Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH, Locales.TURKISH, ]; return [ { url: getLocalizedUrl("/", Locales.ENGLISH), lastModified: new Date(), changeFrequency: "yearly", priority: 1, alternates: { languages: locales.reduce( (acc, locale) => ({ ...acc, [locale]: getLocalizedUrl("/", locale), }), {} ), }, }, ]; }src/app/[locale]/robots.tsKodu kopyalaKodu panoya kopyala
import { getLocalizedUrl } from "intlayer"; import { Locales } from "intlayer"; import { type MetadataRoute } from "next"; export default function robots(): MetadataRoute.Robots { return { rules: { userAgent: "*", allow: "/", disallow: "/private/", }, sitemap: getLocalizedUrl("/sitemap.xml", Locales.ENGLISH), }; }src/app/[locale]/layout.tsx or src/app/[locale]/page.tsxKodu kopyalaKodu panoya kopyala
import { getIntlayer, getMultilingualUrls } from "intlayer"; import type { Metadata } from "next"; import type { LocalParams } from "next-intlayer"; export const generateMetadata = ({ params: { locale }, }: LocalParams): Metadata => { const metadata = getIntlayer("page-metadata", locale); /** * Her locale için tüm url'leri içeren bir nesne oluşturur. * * Örnek: * ```ts * getMultilingualUrls('/about'); * * // Döndürür * // { * // en: '/about', * // fr: '/fr/about', * // es: '/es/about', * // } * ``` */ const multilingualUrls = getMultilingualUrls("/"); const localizedUrl = multilingualUrls[locale as keyof typeof multilingualUrls]; return { ...metadata, alternates: { canonical: localizedUrl, languages: { ...multilingualUrls, "x-default": "/" }, }, openGraph: { url: localizedUrl, }, }; }; // ... Kodun geri kalanınext-intlayeradresinden içe aktarılangetIntlayerişlevinin, içeriğinizi visual editor ile entegrasyon sağlayan birIntlayerNodeiçinde sarılı şekilde döndürdüğünü unutmayın. Buna karşılık,intlayeradresinden içe aktarılangetIntlayerişlevi, içeriğinizi ek özelliklere sahip olmaksızın doğrudan döndürür.Metadata optimizasyonu hakkında daha fazla bilgi için resmi Next.js dokumentasyonuna bakın.
Yerel Anahtarlayıcı Bileşeni Oluşturma
sitemap.xmlverobots.txtdosyalarınızı uluslararasılaştırmak için Intlayer tarafından sağlanangetMultilingualUrlsfonksiyonunu kullanabilirsiniz. Bu fonksiyon, sitemap'iniz için çok dilli URL'ler oluşturmanıza olanak tanır.src/app/sitemap.tsKodu kopyalaKodu panoya kopyala
import { getMultilingualUrls } from "intlayer"; import type { MetadataRoute } from "next"; const sitemap = (): MetadataRoute.Sitemap => [ { url: "https://example.com", alternates: { languages: { ...getMultilingualUrls("https://example.com"), "x-default": "https://example.com", }, }, }, { url: "https://example.com/login", alternates: { languages: { ...getMultilingualUrls("https://example.com/login"), "x-default": "https://example.com/login", }, }, }, { url: "https://example.com/register", alternates: { languages: { ...getMultilingualUrls("https://example.com/register"), "x-default": "https://example.com/register", }, }, }, ]; export default sitemap;src/app/robots.tsKodu kopyalaKodu panoya kopyala
import type { MetadataRoute } from "next"; import { getMultilingualUrls } from "intlayer"; const getAllMultilingualUrls = (urls: string[]) => urls.flatMap((url) => Object.values(getMultilingualUrls(url)) as string[]); const robots = (): MetadataRoute.Robots => ({ rules: { userAgent: "*", allow: ["/"], disallow: getAllMultilingualUrls(["/login", "/register"]), }, host: "https://example.com", sitemap: `https://example.com/sitemap.xml`, }); export default robots;Uygulamanızın mevcut yerel ayarı saygı göstermesini sağlamak için, bir yerel anahtarlayıcı bileşeni oluşturabilirsiniz. Bu bileşen, dahili URL'leri otomatik olarak mevcut dille önekler, böylece örneğin Fransızca konuşan bir kullanıcı "Hakkında" sayfasına bir bağlantıya tıkladığında,
/fr/hakkindayerine/hakkindaya yönlendirilir.Bu davranış birkaç nedenden dolayı kullanışlıdır:
- SEO ve Kullanıcı Deneyimi: Yerelleştirilmiş URL'ler, arama motorlarının dil özel sayfalarını doğru şekilde indekslemesine yardımcı olur ve kullanıcılara tercih ettikleri dilde içerik sağlar.
- Tutarlılık: Uygulamanız boyunca yerelleştirilmiş bir bağlantı kullanarak, navigasyonun mevcut yerel ayar içinde kalmasını garanti edersiniz, beklenmedik dil anahtarlarını önlersiniz.
- Bakım Kolaylığı: URL yönetim mantığını tek bir bileşende merkezileştirmek, kod tabanınızı yönetmeyi ve uygulamanız büyüdükçe genişletmeyi basitleştirir.
Aşağıda, TypeScript'te yerelleştirilmiş bir
Linkbileşeninin uygulanması bulunmaktadır:src/components/LocaleSwitcher.tsxKodu kopyalaKodu panoya kopyala
"use client"; import { useRouter } from "next/navigation"; import { useLocale } from "next-intlayer"; import { getLocalizedUrl } from "intlayer"; import { Locales } from "intlayer"; const LocaleSwitcher = () => { const router = useRouter(); const { locale } = useLocale(); const handleLocaleChange = (newLocale: Locales) => { const pathWithoutLocale = window.location.pathname.replace( /^\/[a-z]{2}/, "" ); router.push(getLocalizedUrl(pathWithoutLocale, newLocale)); }; return ( <div> <h2>Dil Seçin</h2> <div> {Object.values(Locales).map((localeItem) => ( <button key={localeItem} onClick={() => handleLocaleChange(localeItem)} disabled={locale === localeItem} > {localeItem.toUpperCase()} </button> ))} </div> </div> ); }; export default LocaleSwitcher;Alternatif bir yol,
useLocalekancası tarafından sağlanansetLocalefonksiyonunu kullanmaktır. Bu fonksiyon, sayfa ön yüklemesine izin vermez ve sayfayı yeniden yükler.Bu durumda,
router.pushkullanarak yönlendirme olmadan, sadece sunucu tarafı kodunuz içeriğin yerel ayarını değiştirecektir.src/components/LocaleSwitcher.tsxKodu kopyalaKodu panoya kopyala
Dokümantasyon referansları:
Yerelleştirilmiş Bağlantı Bileşeni Oluşturma
İsteğe bağlıUygulamanızın navigasyonunun mevcut yerel ayarı saygı göstermesini sağlamak için, özel bir
Linkbileşeni oluşturabilirsiniz. Bu bileşen, dahili URL'leri otomatik olarak mevcut dille önekler, böylece örneğin Fransızca konuşan bir kullanıcı "Hakkında" sayfasına bir bağlantıya tıkladığında,/fr/hakkindayerine/hakkindaya yönlendirilir.Bu davranış birkaç nedenden dolayı kullanışlıdır:
- SEO ve Kullanıcı Deneyimi: Yerelleştirilmiş URL'ler, arama motorlarının dil özel sayfalarını doğru şekilde indekslemesine yardımcı olur ve kullanıcılara tercih ettikleri dilde içerik sağlar.
- Tutarlılık: Uygulamanız boyunca yerelleştirilmiş bir bağlantı kullanarak, navigasyonun mevcut yerel ayar içinde kalmasını garanti edersiniz, beklenmedik dil anahtarlarını önlersiniz.
- Bakım Kolaylığı: URL yönetim mantığını tek bir bileşende merkezileştirmek, kod tabanınızı yönetmeyi ve uygulamanız büyüdükçe genişletmeyi basitleştirir.
Aşağıda, TypeScript'te yerelleştirilmiş bir
Linkbileşeninin uygulanması bulunmaktadır:src/components/Link.tsxKodu kopyalaKodu panoya kopyala
"use client"; import { getLocalizedUrl } from "intlayer"; import NextLink, { type LinkProps as NextLinkProps } from "next/link"; import { useLocale } from "next-intlayer"; import { forwardRef, PropsWithChildren, type ForwardedRef } from "react"; /** * Verilen bir URL'nin harici olup olmadığını kontrol eden yardımcı fonksiyon. * URL http:// veya https:// ile başlıyorsa, harici olarak kabul edilir. */ export const checkIsExternalLink = (href?: string): boolean => /^https?:\/\//.test(href ?? ""); /** * Href özelliğini mevcut yerel ayar temelinde uyarlayan özel bir Link bileşeni. * Dahili bağlantılar için, `getLocalizedUrl` kullanarak URL'yi yerel ayar ile önekler (örneğin, /fr/hakkinda). * Bu, navigasyonun aynı yerel ayar bağlamında kalmasını sağlar. */ export const Link = forwardRef< HTMLAnchorElement, PropsWithChildren<NextLinkProps> >(({ href, children, ...props }, ref: ForwardedRef<HTMLAnchorElement>) => { const { locale } = useLocale(); const isExternalLink = checkIsExternalLink(href.toString()); // Bağlantı dahili ise ve geçerli bir href sağlanmışsa, yerelleştirilmiş URL'yi alın. const hrefI18n: NextLinkProps["href"] = href && !isExternalLink ? getLocalizedUrl(href.toString(), locale) : href; return ( <NextLink href={hrefI18n} ref={ref} {...props}> {children} </NextLink> ); }); Link.displayName = "Link";Nasıl Çalışır
Harici Bağlantıları Algılama:
Yardımcı fonksiyoncheckIsExternalLink, bir URL'nin harici olup olmadığını belirler. Harici bağlantılar değişmeden bırakılır çünkü yerelleştirmeye ihtiyaçları yoktur.Mevcut Yerel Ayarı Alma:
useLocalekancası mevcut yerel ayarı sağlar (örneğin, Fransızca içinfr).URL'yi Yerelleştirme:
Dahili bağlantılar (yani harici olmayan) için,getLocalizedUrlkullanarak URL'yi otomatik olarak mevcut yerel ayar ile önekler. Bu, kullanıcınız Fransızca ise,/hakkindahref'ini geçmek onu/fr/hakkindaya dönüştürür.Bağlantıyı Döndürme:
Bileşen, yerelleştirilmiş URL ile bir<a>elementi döndürür, böylece navigasyon yerel ayar ile tutarlı olur.
Bu
Linkbileşenini uygulamanız boyunca entegre ederek, tutarlı ve dil bilincine sahip bir kullanıcı deneyimi sürdürürsünüzken aynı zamanda gelişmiş SEO ve kullanılabilirlikten de yararlanırsınız.Sunucu Eylemlerinde (Server Actions) geçerli yerel ayarı alın
İsteğe bağlıBir Sunucu Eylemi (Server Action) içinde aktif yerel ayara ihtiyacınız varsa (örneğin, e-postaları yerelleştirmek veya yerel ayara duyarlı mantık çalıştırmak için),
next-intlayer/serverüzerindengetLocalefonksiyonunu çağırın:src/app/actions/getLocale.tsKodu kopyalaKodu panoya kopyala
getLocalefonksiyonu, kullanıcının yerel ayarını belirlemek için basamaklı bir strateji izler:- İlk olarak, ara katman yazılımı (middleware) tarafından ayarlanmış olabilecek bir yerel ayar değeri için istek başlıklarını kontrol eder
- Başlıklarda yerel ayar bulunamazsa, çerezlerde saklanan bir yerel ayar arar
- Çerez bulunamazsa, kullanıcının tercih ettiği dili tarayıcı ayarlarından tespit etmeye çalışır
- Son çare olarak, uygulamanın yapılandırılmış varsayılan yerel ayarına geri döner
Bu, mevcut bağlama göre en uygun yerel ayarın seçilmesini sağlar.
bundle boyutunuzu Optimize Edin
İsteğe bağlınext-intlayerkullanırken, sözlükler varsayılan olarak her sayfa için pakete dahil edilir. bundle boyutunu optimize etmek için, Intlayer isteğe bağlı bir SWC eklentisi sağlar ki bu,useIntlayerçağrılarını akıllıca makrolar kullanarak değiştirir. Bu, sözlüklerin sadece onları gerçekten kullanan sayfalar için paketlere dahil edilmesini sağlar.Bu optimizasyonu etkinleştirmek için,
@intlayer/swcpaketini kurun. Kurulduktan sonra,next-intlayereklentiyi otomatik olarak algılayacak ve kullanacaktır:bashKodu kopyalaKodu panoya kopyala
Not: Bu optimizasyon sadece Next.js 13 ve üzeri için kullanılabilir.
Not: Bu paket varsayı alan olarak kurulmaz çünkü SWC eklentileri Next.js'te hala deneyseldir. Gelecekte değişebilir.
Not: Eğer seçeneği
importMode: 'dynamic'veyaimportMode: 'fetch'olarak ayarlarsanız (sözlük yapılandırmasında), Suspense'e dayanacaktır, bu nedenleuseIntlayerçağrılarınızı birSuspensesınırıyla sarmalamanız gerekecektir. Bu,useIntlayer'ı doğrudan Sayfa / Düzen bileşeninizin en üst düzeyinde kullanamayacağınız anlamına gelir.
Kodu panoya kopyala
"use client";
import type { FC } from "react";
import { useIntlayer } from "next-intlayer";
const ClientComponentExample: FC = () => {
const content = useIntlayer("client-component-example"); // İlgili içerik bildirimini oluştur
return (
<div>
<h2>{content.title}</h2>
<p>{content.content}</p>
</div>
);
};
TypeScript Yapılandırma
Intlayer, TypeScript'ten faydalanmak ve kod tabanınızı daha güçlü hale getirmek için modül genişletmesi kullanır.


TypeScript yapılandırmanızın otomatik olarak oluşturulan türleri içerdiğinden emin olun.
Kodu panoya kopyala
Git Yapılandırma
Intlayer tarafından oluşturulan dosyaları yok saymanız önerilir. Bu, onları Git deposuna göndermemenizi sağlar.
Bunu yapmak için, .gitignore dosyanıza aşağıdaki talimatları ekleyebilirsiniz:
Kodu panoya kopyala
VS Code Uzantısı
Intlayer ile geliştirme deneyiminizi geliştirmek için, resmi Intlayer VS Code Uzantısı'nı kurabilirsiniz.
Bu uzantı şunları sağlar:
- Çeviri anahtarları için otomatik tamamlama.
- Eksik çeviriler için gerçek zamanlı hata algılama.
- Çevrilmiş içeriğin satır içi önizlemeleri.
- Çevirileri kolayca oluşturmak ve güncellemek için hızlı eylemler.
Uzantının nasıl kullanılacağı hakkında daha fazla detay için, Intlayer VS Code Uzantısı dokümantasyonuna bakın.
Daha Fazla Bilgi Edinin
Daha fazla ilerlemek için, görsel düzenleyiciyi uygulayabilir veya içeriğinizi CMS kullanarak harici hale getirebilirsiniz.
