Sorunuzu sorun ve bu sayfaya ve seçtiğiniz AI sağlayıcısına referans vererek belgenin bir özetini alın
Sürüm Geçmişi
- "Solid useIntlayer API kullanımını doğrudan özellik erişimine güncelle"v8.9.004.05.2026
- "İlk sürüm"v8.0.010.01.2026
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üleyinIf you have an idea for improving this documentation, please feel free to contribute by submitting a pull request on GitHub.
GitHub link to the documentationCopy doc Markdown to clipboard
Next.js 16 web sitenizi (sayfa yolunda [locale] olmadan) Intlayer kullanarak çevirin | Uluslararasılaştırma (i18n)
GitHub'da Uygulama Şablonu sayfasına bakın.
İç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 aracı becerileri, 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.
Next.js Uygulamasında Intlayer Kurulumuna Adım Adım Rehber
Bağımlılıkları Yükleyin
Gerekli paketleri npm kullanarak yükleyin:
bashKodu kopyalaKodu panoya kopyala
npm install intlayer next-intlayernpx intlayer initintlayer
Yapılandırma yönetimi, çeviri, içerik bildirimi, transpilation ve CLI komutları için uluslararasılaştırma araçlarını sağlayan çekirdek paket.
next-intlayer
Intlayer'ı Next.js ile entegre eden paket. Next.js için uluslararasılaştırma amacıyla context provider'ları ve hook'lar sağlar. Ayrıca Intlayer'ı Webpack veya Turbopack ile entegre etmek için Next.js eklentisini ve kullanıcının tercih ettiği dili algılamak, çerezleri yönetmek ve URL yönlendirmesini gerçekleştirmek için bir proxy içerir.
Projenizi Yapılandırın
İşte oluşturacağımız son yapı:
bashKodu kopyalaKodu panoya kopyala
.├── src│ ├── app│ │ ├── layout.tsx│ │ ├── page.content.ts│ │ └── page.tsx│ ├── components│ │ ├── clientComponentExample│ │ │ ├── client-component-example.content.ts│ │ │ └── ClientComponentExample.tsx│ │ ├── localeSwitcher│ │ │ ├── localeSwitcher.content.ts│ │ │ └── LocaleSwitcher.tsx│ │ └── serverComponentExample│ │ ├── server-component-example.content.ts│ │ └── ServerComponentExample.tsx│ └── proxy.ts├── intlayer.config.ts├── next.config.ts├── package.json└── tsconfig.jsonEğer locale yönlendirmesi istemiyorsanız, intlayer basit bir provider / hook olarak kullanılabilir. Daha fazla ayrıntı için bu rehbere bakın.
Uygulamanızın dillerini yapılandırmak için bir config dosyası oluşturun:
intlayer.config.tsKodu kopyalaKodu panoya kopyala
import { Locales, type IntlayerConfig } from "intlayer"; const config: IntlayerConfig = { internationalization: { locales: [ Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH, // Diğer yereller (locales) ], defaultLocale: Locales.ENGLISH, }, routing: { mode: "search-params", // veya `no-prefix` - middleware tespiti için kullanışlı }, }; export default config;Bu yapılandırma dosyası aracılığıyla, yerelleştirilmiş URL'leri, proxy yönlendirmesini, çerez adlarını, içerik bildirimlerinizin konumunu ve uzantısını, Intlayer günlüklerini konsolda devre dışı bırakmayı ve daha fazlasını ayarlayabilirsiniz. Kullanılabilir tüm parametrelerin eksiksiz listesi için yapılandırma belgelerine bakın.
Intlayer'ı Next.js Yapılandırmanıza Entegre Edin
Next.js kurulumunuzu Intlayer kullanacak şekilde yapılandırın:
next.config.tsKodu kopyalaKodu panoya kopyala
import type { NextConfig } from "next"; import { withIntlayer } from "next-intlayer/server"; const nextConfig: NextConfig = { /* yapılandırma seçenekleri burada */ }; export default withIntlayer(nextConfig);withIntlayer()Next.js eklentisi, Intlayer'ı Next.js ile entegre etmek için kullanılır. İçerik bildirim (content declaration) dosyalarının oluşturulmasını sağlar ve geliştirme modunda bunları izler. Webpack veya Turbopack ortamlarında Intlayer ortam değişkenlerini tanımlar. Ayrıca performansı optimize etmek için alias'lar sağlar ve sunucu bileşenleriyle uyumluluğu garanti eder.withIntlayer()fonksiyonu bir promise fonksiyonudur. Derleme başlamadan önce intlayer sözlüklerini hazırlamanıza olanak tanır. Diğer eklentilerle birlikte kullanmak istiyorsanız, onu await edebilirsiniz. Örnek:tsKodu kopyalaKodu panoya kopyala
const nextConfig = await withIntlayer(nextConfig);const nextConfigWithOtherPlugins = withOtherPlugins(nextConfig);export default nextConfigWithOtherPlugins;Eğer senkron olarak kullanmak isterseniz,
withIntlayerSync()fonksiyonunu kullanabilirsiniz. Örnek:tsKodu kopyalaKodu panoya kopyala
const nextConfig = withIntlayerSync(nextConfig);const nextConfigWithOtherPlugins = withOtherPlugins(nextConfig);export default nextConfigWithOtherPlugins;Intlayer, proje komut satırı bayrakları
--webpack,--turboveya--turbopackile ve mevcut Next.js sürümünüze göre projenizin webpack mi yoksa Turbopack mi kullandığını otomatik olarak algılar.next>=16olduğunda, eğer Rspack kullanıyorsanız, Turbopack'i devre dışı bırakarak Intlayer'ın webpack yapılandırmasını kullanmasını açıkça zorlamalısınız:tsKodu kopyalaKodu panoya kopyala
withRspack(withIntlayer(nextConfig, { enableTurbopack: false }));Dinamik Locale Rotalarını Tanımlayın
RootLayout içindeki her şeyi kaldırın ve aşağıdaki kodla değiştirin:
src/app/layout.tsxKodu kopyalaKodu panoya kopyala
import type { Metadata } from "next"; import type { ReactNode } from "react"; import "./globals.css"; import { IntlayerClientProvider, LocalPromiseParams } from "next-intlayer"; import { getHTMLTextDir, getIntlayer } from "intlayer"; import { getLocale } from "next-intlayer/server"; export { generateStaticParams } from "next-intlayer"; export const generateMetadata = async (): Promise<Metadata> => { const locale = await getLocale(); const { title, description, keywords } = getIntlayer("metadata", locale); return { title, description, keywords, }; }; const RootLayout = async ({ children, }: Readonly<{ children: ReactNode; }>) => { const locale = await getLocale(); return ( <html lang={locale} dir={getHTMLTextDir(locale)}> <IntlayerClientProvider defaultLocale={locale}> <body>{children}</body> </IntlayerClientProvider> </html> ); }; export default RootLayout;İçeriğinizi Deklare Edin
Çevirileri saklamak için içerik deklarasyonlarınızı oluşturun ve yönetin:
src/app/metadata.content.tsKodu kopyalaKodu panoya kopyala
import { t, type Dictionary } from "intlayer"; import { Metadata } from "next"; const metadataContent = { key: "metadata", content: { title: t({ tr: "Projemin Başlığı", en: "My Project Title", fr: "Le Titre de mon Projet", es: "El Título de mi Proyecto", }), description: t({ tr: "İş akışınızı sadeleştirmek ve verimliliği artırmak için tasarlanmış yenilikçi platformumuzu keşfedin.", en: "Discover our innovative platform designed to streamline your workflow and boost productivity.", fr: "Découvrez notre plateforme innovante conçue pour simplifier votre flux de travail et booster votre productivité.", es: "Descubra nuestra plataforma innovadora diseñada para simplificar su flujo de trabajo y aumentar su productividad.", }), keywords: t({ tr: ["yenilik", "verimlilik", "iş akışı", "SaaS"], en: ["innovation", "productivity", "workflow", "SaaS"], tr: ["yenilik", "verimlilik", "iş akışı", "SaaS"], fr: ["innovation", "productivité", "flux de travail", "SaaS"], es: ["innovación", "productividad", "flujo de trabajo", "SaaS"], }), }, } as Dictionary<Metadata>; export default metadataContent;src/app/page.content.tsKodu kopyalaKodu panoya kopyala
import { t, type Dictionary } from "intlayer"; const pageContent = { key: "page", content: { getStarted: { main: t({ tr: "Düzenleyerek başlayın", en: "Get started by editing", fr: "Commencez par éditer", es: "Comience por editar", }), pageLink: "src/app/page.tsx", }, }, } satisfies Dictionary; export default pageContent;İçerik deklarasyonlarınız,
contentDirdizinine (varsayılan olarak./src) dahil edildikleri sürece uygulamanızda herhangi bir yerde tanımlanabilir. Ve içerik deklarasyon dosya uzantısıyla eşleşmelidir (varsayılan olarak.content.{json,ts,tsx,js,jsx,mjs,cjs,md,mdx,yaml,yml}).Daha fazla ayrıntı için içerik deklarasyonu dokümantasyonuna bakın.
İçeriği Kodunuzda Kullanın
Uygulamanız genelinde içerik sözlüklerinize erişin:
src/app/page.tsxKodu kopyalaKodu panoya kopyala
import type { FC } from "react"; import { ClientComponentExample } from "@components/clientComponentExample/ClientComponentExample"; import { ServerComponentExample } from "@components/serverComponentExample/ServerComponentExample"; import { IntlayerServerProvider, useIntlayer, getLocale, } from "next-intlayer/server"; import { NextPage } from "next"; import { headers, cookies } from "next/headers"; const PageContent: FC = () => { const content = useIntlayer("page"); return ( <> <p>{content.getStarted.main}</p> <code>{content.getStarted.pageLink}</code> </> ); }; const Page: NextPage = async () => { const locale = await getLocale(); return ( <IntlayerServerProvider locale={locale}> <PageContent /> <ServerComponentExample /> <ClientComponentExample /> </IntlayerServerProvider> ); }; export default Page;IntlayerClientProvideristemci tarafı bileşenlerine locale sağlamak için kullanılır. Layout dahil herhangi bir üst bileşene yerleştirilebilir. Ancak, Next.js'in layout kodunu sayfalar arasında paylaştığı ve bu nedenle daha verimli olduğu için bir layout içine yerleştirilmesi önerilir.IntlayerClientProvider'ı layout'ta kullanarak, her sayfa için yeniden oluşturulmasını önleyerek performansı artırır ve uygulamanız boyunca tutarlı bir yerelleştirme bağlamı sağlar.IntlayerServerProvidersunucu çocuklarına locale sağlamak için kullanılır. Layout içinde ayarlanamaz.Layout ve page ortak bir server context paylaşamaz çünkü server context sistemi her isteğe özel bir veri deposuna (React'in cache mekanizması aracılığıyla) dayanır, bu da uygulamanın farklı segmentleri için her "context"in yeniden oluşturulmasına neden olur. Sağlayıcıyı paylaşılan bir layout'a yerleştirmek bu izolasyonu bozacak ve server bileşenlerinize server context değerlerinin doğru şekilde iletilmesini engelleyecektir.
src/components/clientComponentExample/ClientComponentExample.tsxKodu kopyalaKodu panoya kopyala
"use client"; import type { FC } from "react"; import { useIntlayer } from "next-intlayer"; export const ClientComponentExample: FC = () => { const content = useIntlayer("client-component-example"); // İlgili içerik tanımını oluştur return ( <div> <h2>{content.title}</h2> <p>{content.content}</p> </div> ); };src/components/serverComponentExample/ServerComponentExample.tsxKodu kopyalaKodu panoya kopyala
import type { FC } from "react"; import { useIntlayer } from "next-intlayer/server"; export const ServerComponentExample: FC = () => { const content = useIntlayer("server-component-example"); // İlgili içerik bildirimi oluştur return ( <div> <h2>{content.title}</h2> <p>{content.content}</p> </div> ); };İçeriğinizi bir
stringözniteliğinde kullanmak istiyorsanız; ör.alt,title,href,aria-labelvb., fonksiyonun değerini çağırmalısınız, örneğin:htmlKodu kopyalaKodu panoya kopyala
<img src="{content.image.src.value}" alt="{content.image.value}" /><img src="{content.image.src.toString()}" alt="{content.image.toString()}" /><img src="{String(content.image.src)}" alt="{String(content.image)}" />useIntlayerhook'u hakkında daha fazla bilgi edinmek için belgelere bakın.Locale Algılama için Proxy'yu Yapılandırma
İsteğe bağlıKullanıcının tercih ettiği locale'i algılamak için proxy'yu yapılandırın:
src/proxy.tsKodu kopyalaKodu panoya kopyala
export { intlayerProxy as proxy } from "next-intlayer/proxy"; export const config = { matcher: "/((?!api|static|assets|robots|sitemap|sw|service-worker|manifest|.*\\..*|_next).*)", };intlayerProxy, kullanıcının tercih ettiği yerel dili algılamak ve onları yapılandırmada belirtildiği gibi uygun URL'ye yönlendirmek için kullanılır. Ayrıca, kullanıcının tercih ettiği yerel dili bir çerezde kaydetmeyi sağlar.Birden fazla proxy'yi birbirine zincirlemeniz gerekiyorsa (örneğin, kimlik doğrulama veya özel proxy'lerle
intlayerProxy), Intlayer artıkmultipleProxiesadlı bir yardımcı sağlar.tsKodu kopyalaKodu panoya kopyala
import { multipleProxies, intlayerProxy } from "next-intlayer/proxy";import { customProxy } from "@utils/customProxy";export const proxy = multipleProxies([intlayerProxy, customProxy]);İçeriğinizin dilini değiştirin
İsteğe bağlıNext.js'te içeriğinizin dilini değiştirmek için önerilen yol, kullanıcıları uygun yerelleştirilmiş sayfaya yönlendirmek amacıyla
Linkbileşenini kullanmaktır.Linkbileşeni sayfanın önceden getirilmesini (prefetching) sağlar; bu da tam sayfa yeniden yüklemesini önlemeye yardımcı olur.src/components/localeSwitcher/LocaleSwitcher.tsxKodu kopyalaKodu panoya kopyala
"use client"; import type { FC } from "react"; import { Locales, getHTMLTextDir, getLocaleName } from "intlayer"; import { useLocale } from "next-intlayer"; export const LocaleSwitcher: FC = () => { const { locale, availableLocales, setLocale } = useLocale(); return ( <div> <button popoverTarget="localePopover">{getLocaleName(locale)}</button> <div id="localePopover" popover="auto"> {availableLocales.map((localeItem) => ( <button key={localeItem} aria-current={locale === localeItem ? "page" : undefined} onClick={() => setLocale(localeItem)} > <span> {/* Yerel (Locale) - örn. FR */} {localeItem} </span> <span> {/* Dil kendi yerelinde - örn. Français */} {getLocaleName(localeItem, locale)} </span> <span dir={getHTMLTextDir(localeItem)} lang={localeItem}> {/* Dil mevcut locale'de - örn. mevcut locale Locales.SPANISH ise "Francés" */} {getLocaleName(localeItem)} </span> <span dir="ltr" lang={Locales.ENGLISH}> {/* İngilizce dil adı - örn. French */} {getLocaleName(localeItem, Locales.ENGLISH)} </span> </button> ))} </div> </div> ); };Alternatif bir yol,
useLocalehook'unun sağladığısetLocalefonksiyonunu kullanmaktır. Bu fonksiyon sayfanın prefetching yapılmasına izin vermez. Daha fazla bilgi içinuseLocalehook dokümantasyonuna bakın.Dokümantasyon referansları:
Sunucu eylemlerinde geçerli yereli (locale) alın
İsteğe bağlıEğer bir sunucu eylemi içinde aktif yerel ayara (örn. e-postaları yerelleştirmek veya yerel duyarlı mantık çalıştırmak için) ihtiyacınız varsa,
next-intlayer/serveriçindengetLocale'i çağırın:src/app/actions/getLocale.tsKodu kopyalaKodu panoya kopyala
"use server";import { getLocale } from "next-intlayer/server";export const myServerAction = async () => { const locale = await getLocale(); // locale ile bir şeyler yap};getLocalefonksiyonu kullanıcının yerel ayarını belirlemek için kademeli bir strateji izler:- Öncelikle, proksi tarafından ayarlanmış olabilecek bir locale değerini kontrol etmek için istek başlıklarını (request headers) kontrol eder
- Başlıklarda locale bulunamazsa, çerezlerde (cookies) saklanan bir locale arar
- Çerez bulunamazsa, kullanıcının tarayıcı ayarlarından tercih edilen dili tespit etmeye çalışır
- Son çare olarak uygulamanın yapılandırılmış varsayılan locale değerine döner
Bu, kullanılabilir bağlama göre en uygun yerelin seçilmesini sağlar.
bundle boyutunuzu optimize edin
İsteğe bağlınext-intlayerkullanıldığında, sözlükler varsayılan olarak her sayfanın bundle'ına dahil edilir. bundle boyutunu optimize etmek için Intlayer, makrolar kullanarakuseIntlayerçağrılarını akıllıca değiştiren isteğe bağlı bir SWC eklentisi sağlar. Bu, sözlüklerin yalnızca bunları gerçekten kullanan sayfaların bundle'larına dahil edilmesini sağlar.Bu optimizasyonu etkinleştirmek için
@intlayer/swcpaketini yükleyin. Yüklendikten sonranext-intlayereklentiyi otomatik olarak algılar ve kullanır:bashKodu kopyalaKodu panoya kopyala
npm install @intlayer/swc --save-devNot: Bu optimizasyon yalnızca Next.js 13 ve üzeri için kullanılabilir.
Not: Bu paket varsayılan olarak yüklenmez çünkü SWC eklentileri Next.js üzerinde hâlâ deneysel durumdadır. İleride değişebilir.
Not: Eğer seçeneği
importMode: 'dynamic'veyaimportMode: 'fetch'(dictionaryyapılandırmasında) olarak ayarlarsanız, bu Suspense'e dayanır; bu nedenleuseIntlayerçağrılarınızı birSuspensesınırı içine almanız gerekir. Bu,useIntlayer'ı Sayfa / Layout bileşeninizin en üst düzeyinde doğrudan kullanamayacağınız anlamına gelir.
Turbopack'ta sözlük değişikliklerini izleme
next dev komutunu kullanarak geliştirme sunucunuz olarak Turbopack'i kullandığınızda, sözlük değişiklikleri varsayılan olarak otomatik algılanmaz.
Bu sınırlama, Turbopack'in içerik dosyalarınızdaki değişiklikleri izlemek için webpack eklentilerini paralel olarak çalıştıramamasından kaynaklanır. Bunu aşmak için geliştirme sunucusunu ve Intlayer derleme izleyicisini aynı anda çalıştırmak üzere intlayer watch komutunu kullanmanız gerekir.
Kodu panoya kopyala
{ // ... Mevcut package.json yapılandırmalarınız "scripts": { // ... Mevcut scripts yapılandırmalarınız "dev": "intlayer watch --with 'next dev'", },}Eğer next-intlayer@<=6.x.x kullanıyorsanız, Next.js 16 uygulamasının Turbopack ile doğru çalışması için --turbopack bayrağını tutmanız gerekir. Bu sınırlamadan kaçınmak için next-intlayer@>=7.x.x kullanmanızı öneririz.
TypeScript'i Yapılandırma
Intlayer, TypeScript'in avantajlarından yararlanmak ve kod tabanınızı güçlendirmek için module augmentation kullanır.


TypeScript yapılandırmanızın otomatik oluşturulmuş tipleri içerdiğinden emin olun.
Kodu panoya kopyala
{ // ... Mevcut TypeScript yapılandırmalarınız "include": [ // ... Mevcut TypeScript yapılandırmalarınız ".intlayer/**/*.ts", // Otomatik oluşturulan türleri dahil et ],}Git Yapılandırması
Intlayer tarafından oluşturulan dosyaları yoksaymanız önerilir. Bu, bu dosyaları Git deponuza commit etmekten kaçınmanızı sağlar.
Bunu yapmak için .gitignore dosyanıza aşağıdaki satırları ekleyebilirsiniz:
Kodu panoya kopyala
# Intlayer tarafından oluşturulan dosyaları yoksay.intlayerVS Code Uzantısı
Intlayer ile geliştirme deneyiminizi iyileştirmek için resmi Intlayer VS Code Uzantısını yükleyebilirsiniz.
VS Code Marketplace'ten Yükleyin
Bu uzantı şunları sağlar:
- Otomatik tamamlama çeviri anahtarları için.
- Eksik çeviriler için gerçek zamanlı hata tespiti.
- Satır içi önizlemeler, çevrilmiş içeriğin önizlemeleri.
- Hızlı eylemler, çevirileri kolayca oluşturup güncellemek için.
Daha fazla ayrıntı için uzantının nasıl kullanılacağına dair Intlayer VS Code Extension belgelerine bakın.
Daha İleri
Daha ileri gitmek için görsel editörü uygulayabilir veya içeriğinizi CMS kullanarak dışsallaştırabilirsiniz.