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
- "İlk sürüm"v9.5.1026.09.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ü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
2026'da Lingui Kullanarak Next.js Uygulamanızı Uluslararasılaştırma (i18n)
İçindekiler
Lingui Nedir?
Lingui, makrolar ve mesaj çıkarma (extraction) etrafında oluşturulmuş bir i18n kütüphanesidir. Kaynak metni doğrudan bileşenlerinizde yazarsınız ( t`Hello` , <Trans>Hello</Trans>), lingui extract her mesajı kataloglarda (varsayılan olarak PO dosyaları) toplar ve bir yükleyici (loader) bunları kompakt JavaScript'e derler. Mesajlar ICU MessageFormat kullanır ve Lingui, App Router'da React Server Components desteği sunar.
Bu kılavuz, Lingui'yi bir Next.js 16 App Router projesinde şu özelliklerle kurar:
- SWC ile derlenen makrolar, böylece Turbopack hızını korur.
- Aynı
TransveuseLinguiAPI'sini paylaşan Server ve Client Components. proxy.tsüzerinden yerel ayar yönlendirmesi (locale routing): varsayılan yerel ayar için/about, diğerleri için/fr/aboutve ilk ziyarette dil algılama.generateStaticParamsile her yerel ayarın statik olarak render edilmesi.- Eksiksiz çok dilli SEO: çevrilmiş
generateMetadata, canonical,x-defaultilehreflang, Open Graph yerel ayarları, JSON-LD,sitemap.ts,robots.tsve yerelleştirilmiş 404 sayfaları.
Başka bir kütüphane mi arıyorsunuz? next-intl kılavuzu, next-i18next kılavuzu veya Next.js + Intlayer kılavuzuna göz atın.
TanStack Start mı kullanıyorsunuz? TanStack Start + Lingui kılavuzuna bakın. Kütüphaneleri karşılaştırmak için Lingui vs Intlayer ve next-i18next vs next-intl vs Intlayer yazılarını okuyun.
Benchmark Next.js'te Lingui Hakkında Ne Söylüyor?
i18n benchmark testi, aynı 10 sayfalık, 10 yerel ayarlı Next.js uygulamasını tüm popüler kütüphanelerle çalıştırır ve tarayıcının gerçekte ne indirdiğini ölçer.
Dinamik JSON yükleme
Çevirileri çalışma zamanında geç yükler
Kapsamlı JSON (ad alanı oluşturma)
Sayfa başına çeviri ad alanları
I18n Performans Karşılaştırması
Bu metrik nedir?
Uluslararasılaştırma kitaplığı paketinin toplam gzip sıkıştırılmış boyutu. Sadece ağaç sallama (tree-shaking) ve küçültme (minification) sonrası sağlayıcı ve içerik getirme mantığını içerir.
Neden önemlidir?
Daha küçük bir kitaplık boyutu, başlangıç JavaScript yükünü azaltarak istemci tarafında daha hızlı indirme ve yürütme sürelerine yol açar.
Olarak gör
Next.js 16 üzerinde @lingui/core@6.6.0 için temel rakamlar, 2026-09-26 tarihinde ölçülmüştür (gzip):
Tüm veri içeriğini net bir şekilde görmek için tabloyu modalde açın
| Kurulum | Kütüphane boyutu | Sayfa başına JS | Diğer yerel ayar sızıntısı | Diğer sayfa sızıntısı |
|---|---|---|---|---|
| i18n yok (temel uygulama) | - | 141.0 KB | 0% | 0% |
| Lingui, yerel ayar başına bir kat. | 72.1 KB | 145.4 KB | 2.8% | 89.9% |
@intlayer/lingui (uyumluluk) | 10.7 KB | 221.6 KB | 50% | 90% |
next-intlayer (yerel Intlayer) | 4.9 KB | 141.5 KB | 0% | 0% |
Çıkarılması gereken önemli sonuçlar:
- Yerel ayar başına tek bir katalog bile diğer sayfaların mesajlarını istemci sağlayıcısına (client provider) sızdırır. Mümkün olduğunca çok metni, katalogları değil render edilmiş HTML'i gönderen Server Components içinde tutun.
- Lingui çalışma zamanı (runtime) ~72 KB gzip ağırlığındadır.
@intlayer/linguiuyumluluk bağdaştırıcısı çalışma zamanını ~11 KB seviyesine düşürür, ancak bu benchmark'ta Next.js uyumluluk kurulumu yine de sayfalara tüm katalogları gönderir. Temel uygulama boyutunda kalan kurulum, yerelnext-intlayerAPI'sidir.
Tüm verileri inceleyin: Next.js benchmark raporu ve benchmark deposu.
Next.js Üzerinde Özellik Karşılaştırması
Lingui'nin, bir Next.js App Router projesinin genellikle ihtiyaç duyduğu özellikler açısından next-intl ve Intlayer ile karşılaştırması:
Tüm veri içeriğini net bir şekilde görmek için tabloyu modalde açın
| Özellik | next-intlayer (Intlayer) | Lingui | next-intl |
|---|---|---|---|
| Bileşenlere yakın çeviriler | ✅ İçerik her bileşenle birlikte bulunur | ⚠️ Kaynak metin bileşenlerde, kataloglar merkezi | ❌ Merkezi JSON |
| TypeScript entegrasyonu | ✅ Otomatik oluşturulan katı tipler | ⚠️ Makrolar tiplenmiş, mesaj katalogları tiplenmemiş | ✅ İyi, AppConfig genişletmesi ile |
| Eksik çeviri algılama | ✅ TypeScript hataları ve derleme uyarıları | ⚠️ Çalışma zamanında kaynak metne geri dönüş (fallback) | ⚠️ Çalışma zamanında geri dönüş |
| Zengin içerik (JSX, Markdown) | ✅ Doğrudan destek | ✅ <Trans> içinde JSX, Markdown yok | ⚠️ t.rich üzerinden etiketler, Markdown yok |
| Yapay zeka ile çeviri | ✅ Kendi sağlayıcınız ve API anahtarınız ile | ❌ Yok | ❌ Yok |
| Görsel editör / CMS | ✅ Yerel görsel editör + isteğe bağlı CMS | ❌ Harici platformlar üzerinden | ❌ Harici platformlar üzerinden |
| Yerelleştirilmiş yönlendirme | ✅ Yerleşik | ❌ Kendi proxy.ts dosyanızı yazmanız gerekir | ✅ Yerleşik [locale] segmenti |
| Çoğullaştırma (Pluralization) | ✅ Numaralandırma tabanlı | ✅ ICU, <Plural> makrosu | ✅ ICU |
| İçerik formatları | ✅ .ts, .tsx, .js, .json, .md, .yaml | ✅ PO, JSON, CSV | ✅ .json, .js, .ts |
| ICU MessageFormat | ✅ format: "icu" aracılığıyla | ✅ Yerel | ✅ Yerel |
| SEO yardımcıları (hreflang, sitemap) | ✅ Metadata, sitemap ve robots.txt yardımcıları | ❌ Manuel | ✅ İyi |
| Server Components | ✅ Herhangi bir Server Component'te doğrudan erişim | ⚠️ Her layout ve sayfada setI18n | ⚠️ Bileşen başına await getTranslations() |
| Bileşen bazında tree-shaking | ✅ Derleme zamanında (Babel / SWC) | ⚠️ Yerel ayar başına bir katalog, sayfa bazlı çıkarıcı deneysel | ⚠️ Manuel, rota başına pick() ile |
| Çalışma zamanı boyutu (gzip) | 4.9 KB | 72.1 KB | 14.7 KB |
| CI ortamında eksik çeviri kontrolü | ✅ npx intlayer test | ✅ lingui compile --strict | ⚠️ Yerleşik değil |
| Ekosistem / topluluk | ⚠️ Daha küçük, hızla büyüyor | ✅ Olgun | ✅ Geniş |
Çalışma zamanı boyutları Next.js benchmark testinden alınmıştır. Ayrıntılı bir inceleme için Lingui vs Intlayer yazısını okuyun.
Diğer Next.js rehberleri: next-intl, next-i18next ve Intlayer.
Uygulamanız Gereken İyi Pratikler
[locale]layout'unda<html>üzerindelangvedirdeğerlerini ayarlayın.- Metinler için Server Components tercih edin: sunucuda HTML render ederler ve istemcide kataloğa ihtiyaç duymazlar.
- Her layout ve sayfada
initLingui(locale)çağrısı yapın. Sayfalar arası geçişlerde layout'lar yeniden render edilmez, bu nedenle bir sayfa yerel ayarın layout tarafından ayarlandığına güvenemez. - Yerel ayar başına tek bir URL kullanın ve
generateStaticParamsile her yerel ayarı önceden render edin. generateMetadataiçindecanonical,hreflangvex-defaultile meta verilerinizi çevirin.sitemap.tsverobots.tskuralları ile çok dilli bir sitemap ve robots.txt oluşturun.- Dil değiştirici (locale switcher) için gerçek bağlantılar (links) kullanın, böylece arama motoru botları her dili keşfedebilir.
- CI ortamında
lingui extractçalıştırın, böylece yeni bir mesaj asla çevrilmeden yayına alınmaz.
Uluslararasılaşma ve SEO kılavuzumuza, hreflang kılavuzuna ve Next.js çok dilli SEO karşılaştırmasına göz atın.
Next.js Uygulamasında Lingui Kurulumu İçin Adım Adım Kılavuz
Oluşturacağımız proje yapısı şöyledir:
Kodu panoya kopyala
Bağımlılıkları Yükleyin
bashKodu kopyalaKodu panoya kopyala
- @lingui/core / @lingui/react: çalışma zamanı,
I18nProvider, Server Components içinsetI18nve makrolar (@lingui/core/macro,@lingui/react/macro). - @lingui/swc-plugin: Next.js SWC derleme sürecinde makroları derler.
- @lingui/loader: içe aktarma sırasında
.pokataloglarını derler, böylecelingui compileçalıştırmaya gerek kalmaz. - @lingui/cli: mesajları kataloglarda toplamak için
lingui extract.
@lingui/swc-plugin, Next.js'in SWC sürümüne bağlı bir WebAssembly eklentisidir. Next.js güncellemesinden sonra derleme başarısız olursa, eklentiyi README dosyasında uyumlu olarak listelenen sürüme güncelleyin.- @lingui/core / @lingui/react: çalışma zamanı,
Yerel Ayar Yapılandırmanızı Merkezileştirin
Tek bir dosya yerel ayarları ve URL yardımcılarını tanımlar. Yönlendirme, meta veriler, sitemap ve Lingui bu dosyadan okur.
src/i18n/config.tsKodu kopyalaKodu panoya kopyala
Lingui ve Next.js'i Yapılandırın
lingui.config.tsKodu kopyalaKodu panoya kopyala
SWC eklentisi makroları derler ve yükleyici, hem Turbopack (Next.js 16'da varsayılan) hem de webpack için
.podosyalarını derler:next.config.tsKodu kopyalaKodu panoya kopyala
Mesaj çıkarma komut dosyalarını ekleyin:
package.jsonKodu kopyalaKodu panoya kopyala
Katalogları Yükleyin ve Sunucu Örneklerini Oluşturun
Server Components React context yapısına sahip değildir, bu nedenle Lingui geçerli render işlemi için örneği kaydetmek üzere
setI18nsağlar. Bu modül, her kataloğu sunucu işlemi başına bir kez yükler ve yerel ayar başına birI18nörneği oluşturur. Bu modülserver-onlyolarak işaretlenmiştir: diğer yerel ayarların katalogları asla istemci paketine ulaşmaz.src/i18n/appRouterI18n.tsKodu kopyalaKodu panoya kopyala
src/i18n/initLingui.tsKodu kopyalaKodu panoya kopyala
TypeScript'in
.poiçe aktarımını kabul etmesi için modülü bir kez bildirin:src/i18n/po.d.tsKodu kopyalaKodu panoya kopyala
İstemci Sağlayıcısını (Client Provider) Oluşturun
Client Components çevirileri bir React context'inden okur. Sağlayıcı, aktif yerel ayarın kataloğunu sunucu düzeninden (server layout) alır ve kendi örneğini bir kez oluşturur.
src/components/LinguiClientProvider.tsxKodu kopyalaKodu panoya kopyala
Dinamik Yerel Ayar Rotalarını Tanımlayın
[locale]segmenti kök layout'u barındırır.generateStaticParamsderleme zamanında her yerel ayarı önceden render eder vedynamicParams = falsediğer tüm ön ekler için 404 döndürür.src/app/[locale]/layout.tsxKodu kopyalaKodu panoya kopyala
İstemci sağlayıcısı, aktif yerel ayarın tüm kataloğunu alır. Benchmark testinde "diğer sayfa sızıntısı" olarak ölçülen durum budur. Metinleri Server Components içinde tutmak, istemcinin gerçekten ihtiyaç duyduğu şeyleri sınırlandırır. Büyük uygulamalar için Lingui'nin deneysel sayfa bazlı çıkarıcısı (
lingui.config.tsiçindekiexperimental.extractor) katalogları giriş noktasına göre böler.Server Components İçinde Çevirileri Kullanın
Server Components, Client Components ile aynı makroları kullanır.
initLinguisayfa içinde de çalıştırılmalıdır, çünkü sayfalar arasında gezinirken layout yeniden render edilmez.src/app/[locale]/about/page.tsxKodu kopyalaKodu panoya kopyala
Client Components İçinde Çevirileri Kullanın
Client Components aynı içe aktarımları kullanır. Makrolar örneği
LinguiClientProviderüzerinden okur.src/components/Counter.tsxKodu kopyalaKodu panoya kopyala
Mesajlarınızı Çıkarın ve Çevirin
Çıkarma işlemini çalıştırın. Lingui,
srciçinde bulunan her mesajı her bir yerel ayar kataloğuna yazar:bashKodu kopyalaKodu panoya kopyala
Ardından her bir girdinin
msgstrdeğerini çevirin:src/locales/fr/messages.poKodu kopyalaKodu panoya kopyala
src/locales/es/messages.poKodu kopyalaKodu panoya kopyala
<0>yer tutucuları bir<Trans>içindeki JSX öğelerini yerinde tutar, böylece çevirmenler işaretlemeye (markup) dokunmadan bunları taşıyabilir.Yerel Ayar Yönlendirmesi İçin Proxy Kurulumu
İsteğe bağlıNext.js 16,
middleware.tsdosyasınıproxy.tsolarak yeniden adlandırdı. Proxy "ihtiyaç duyuldukça" (as-needed) ön ek stratejisini uygular:/fr/aboutolduğu gibi sunulur;/en/about, varsayılan yerel ayarın tek bir URL'e sahip olması için/aboutadresine yönlendirir;/about, URL değiştirilmeden dahili olarak/en/aboutadresine yeniden yazılır (rewrite);/üzerindeki ilk ziyaret, tercih edilen dile yönlendirir (önce çerez, ardındanAccept-Language).
src/i18n/negotiateLocale.tsKodu kopyalaKodu panoya kopyala
src/proxy.tsKodu kopyalaKodu panoya kopyala
İçeriğinizin Dilini Değiştirin
İsteğe bağlıusePathnametarayıcı tarafından görülen URL'yi döndürür (/aboutveya/fr/about). Yerel ayarı ayıklayın, ardından her dilin bağlantısını oluşturun. Değiştirici gerçek bağlantılar render eder, böylece arama motoru botları her dil sürümüne ulaşabilir ve çerez açık tercihi hatırlar.src/components/LocaleSwitcher.tsxKodu kopyalaKodu panoya kopyala
Yerelleştirilmiş Link Bileşeni Oluşturun
İsteğe bağlısrc/components/LocalizedLink.tsxKodu kopyalaKodu panoya kopyala
LinguiClientProvideriçinde render edildiği için Server Components içinden de sorunsuz çalışır:tsxKodu kopyalaKodu panoya kopyala
Meta Verilerinizi Uluslararasılaştırın
İsteğe bağlıHer sayfa aşağıdakileri sağladığı takdirde her dil sürümü bağımsız olarak sıralama alabilir:
- çevrilmiş bir
titlevedescription; - kendisine işaret eden bir canonical URL;
- yerel ayar başına bir
hreflangalternatifi vex-default; - Open Graph
locale,alternateLocaleveurl; inLanguageiçeren JSON-LD.
generateMetadataReact ağacının dışında çalışır, bu nedenle doğrudanmsgmakrosuyla sunucu örneğini kullanır:src/i18n/metadata.tsKodu kopyalaKodu panoya kopyala
src/app/[locale]/about/page.tsxKodu kopyalaKodu panoya kopyala
JSON-LD sayfanın kendisi tarafından render edilir. Sayfa dosyaları yalnızca Next.js alanlarını dışa aktarabilir, bu nedenle bileşeni kendi dosyasında tutun:
src/components/WebPageJsonLd.tsxKodu kopyalaKodu panoya kopyala
src/app/[locale]/about/page.tsxKodu kopyalaKodu panoya kopyala
- çevrilmiş bir
Site Haritanızı (Sitemap) Uluslararasılaştırın
İsteğe bağlısitemap.tskuralı, Next.js'inxhtml:linkalternatifleri olarak render ettiğialternates.languagesdesteğine sahiptir. Her yerel ayarın her URL'sini listeleyin:src/app/sitemap.tsKodu kopyalaKodu panoya kopyala
robots.txt Dosyanızı Uluslararasılaştırın
İsteğe bağlıÖzel rotalar her dilde mevcuttur, bu nedenle
disallowher yerelleştirilmiş yolu kapsamalıdır:src/app/robots.tsKodu kopyalaKodu panoya kopyala
Yerelleştirilmiş 404 Sayfalarını Yönetin
İsteğe bağlınot-found.tsxdosyası[locale]layout'u içinde render edilir, bu nedenle istemci sağlayıcısına erişebilir. Genel yakalama (catch-all) rotası, bir yerel ayar içindeki bilinmeyen yolları buraya yönlendirir. Next.js 404 yanıtlarına otomatik olaraknoindexekler.src/app/[locale]/not-found.tsxKodu kopyalaKodu panoya kopyala
src/app/[locale]/[...rest]/page.tsxKodu kopyalaKodu panoya kopyala
Server Actions İçinde Yerel Ayara Erişin
İsteğe bağlıServer Actions rota parametrelerini almaz. En güvenilir yaklaşım, yerel ayarı bilen sayfadan form ile birlikte göndermektir:
src/app/[locale]/contact/page.tsxKodu kopyalaKodu panoya kopyala
src/app/actions/sendContactMessage.tsKodu kopyalaKodu panoya kopyala
Makrolarınızı Koruyun, Intlayer ile Çalışma Zamanını Küçültün
İsteğe bağlı@intlayer/linguiuyumluluk bağdaştırıcısı kaynak kodunuza dokunmaz: makrolar eskisi gibi derlenir ve sonuçta ortaya çıkani18n._(),useLingui()ve<Trans>çağrıları Intlayer sözlükleri tarafından karşılanır. Next.js benchmark testinde çalışma zamanı ~72.1 KB'tan ~10.7 KB gzip seviyesine düşer.Next.js üzerinde bağdaştırıcı,
next.config.tsdosyasında (webpack ve Turbopack)@lingui/coreve@lingui/reactmodüllerini@intlayer/linguiile takma adlandırarak (alias) ve yapılandırmayınext-intlayer/serverpaketindenwithIntlayerile sararak bağlanır. Makroların önce derlenmeye devam etmesi için@lingui/swc-plugineklentisini koruyun. Eksiksiz yapılandırma Lingui uyumluluk kılavuzunda yer almaktadır.Benchmark tablosunun gösterdiği gibi, bağdaştırıcı çalışma zamanını azaltır ancak Next.js'te her sayfaya gönderilen kataloğu henüz küçültmez. En iyi kullanım şekli bir geçiş köprüsü olmasıdır: çalışır hale geldikten sonra, bileşenleri teker teker yalnızca render ettikleri içeriği gönderen yerel
useIntlayerAPI'sine taşıyın. Next.js + Intlayer kılavuzuna, Lingui vs @intlayer/lingui karşılaştırmasına ve tüm uyumluluk bağdaştırıcılarına göz atın.Intlayer Kullanarak Çevirilerinizi Otomatikleştirin
İsteğe bağlıLingui mesajları çıkarır, ancak düzinelerce kataloğu elle doldurmak en çok zaman alan kısımdır. Intlayer ücretsiz ve açık kaynaklıdır, araçları Lingui ile birlikte sorunsuz çalışır:
- Kendi API anahtarınızı ve sağlayıcınızı kullanarak yapay zeka ile çeviri yapın. Otomatik doldurma (auto fill) ve CLI belgelerine bakın.
- PO senkronizasyon eklentisi ile PO dosyalarınızı tek doğruluk kaynağı olarak koruyun.
- CI ortamında eksik çevirileri test edin. Çevirilerinizi test etme sayfasına bakın.
- Scan komutu ile yayındaki sitenizi eksik
hreflang, hatalı canonical bağlantıları ve yerel ayar sızıntıları açısından denetleyin.
Sıkça Sorulan Sorular
Evet. @lingui/react React Server Components desteği sunar. Server Components örneği @lingui/react/server paketindeki setI18n ile kaydeder, Client Components bunu I18nProvider üzerinden okur ve her ikisi de aynı Trans ve useLingui makrolarını kullanır.
Server Components context yapısına sahip değildir, bu nedenle örnek render başına kaydedilir. Layout'lar gezintiler boyunca korunur ve yeniden render edilmez, bu nedenle bir sayfa yerel ayarı belirleme konusunda kendi layout'una güvenemez. Her layout ve sayfanın en üstünde initLingui(locale) çağırmak onları birbirinden bağımsız tutar.
@lingui/swc-plugin kullanın. SWC derleme sürecini ve Turbopack'i korur. Bir Babel yapılandırması eklemek, Next.js'te SWC'yi devre dışı bırakır ve derlemeleri yavaşlatır. Tek kısıtlama, eklenti sürümünü Next.js sürümünüzün SWC sürümüyle uyumlu tutmaktır.
Sunucu örneğini getI18nInstance(locale) ile alın ve msg makrosuyla tanımlanan tanımlayıcıları çevirin: i18n._(msg`About us`). alternates.canonical, x-default ile birlikte alternates.languages ve openGraph.locale döndürün. 13. adım yeniden kullanılabilir bir yardımcı fonksiyon sağlar.
Benchmark testi, çalışma zamanı için ~72 KB gzip ölçmektedir. Yerel ayar başına bir katalog ile sayfalar, i18n olmadan 141 KB iken ~145 KB ağırlığındadır, ancak her sayfa yine de istemci sağlayıcısı aracılığıyla diğer sayfaların mesajlarını alır.
Lingui, kaynak metinleri doğrudan bileşenler içinde yazmayı, PO dosyaları ve çevirmenlerle çalışmayı tercih eden ekiplere uygundur. next-intl, JSON kataloglarını ve Next.js ile sıkı şekilde entegre edilmiş bir t("key") API'sini tercih eden ekipler için uygundur. next-i18next ise geniş i18next eklenti ekosistemini getirir. next-i18next vs next-intl vs Intlayer ve Next.js benchmark yazılarına bakın.
Yorumlar
Henüz yorum yok. Düşüncelerinizi paylaşan ilk kişi olun.
