Sorunuzu sorun ve bu sayfaya ve seçtiğiniz AI sağlayıcısına referans vererek belgenin bir özetini alın
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
next-intl ve Intlayer Karşılaştırması | React & Next.js Uluslararasılaşma (i18n) Testi
next-intl, günümüzde Next.js App Router için varsayılan tercihtir: yönlendirme ile sıkı entegrasyon, eksiksiz ICU MessageFormat desteği ve klasik i18n sistemlerini kullanmış olan herkes için tanıdık bir geliştirici deneyimi sunar.
Intlayer ise soruna temelden farklı yaklaşır: merkezi sözlükler yoktur, ad alanlarını (namespaces) rotalarla manuel olarak eşleştirme zahmeti bulunmaz. İçerik her bileşenin hemen yanında bildirilir ve derleme zamanı derleyicisi her sayfanın tam olarak neye ihtiyacı varsa yalnızca onu paketler.
Bu makale, her iki kütüphaneyi aynı uygulamayı derleyen ve tarayıcının gerçekte ne indirdiğini ve çalıştırdığını kaydeden açık kaynaklı bir test paketi olan Benchmark Bloom verilerine dayanarak karşılaştırmaktadır.
Özetle (tl;dr):next-intl, yalnızca çalışma zamanı için sayfa başına en az +12.6 KB gzip ekler ve standart kurulumlarında (staticvedynamic) diğer sayfaların dizgilerinin yaklaşık %90'ını sızdırır. Bu sızıntıyı gidermek, katalogları ad alanlarına bölmeyi ve sayfa başına manuel olarak seçmeyi gerektirir. Buna karşılık,Intlayerderleyicisi herhangi bir manuel yapılandırma olmadan %0 sızıntı, 3 kat daha küçük bileşenler ve temel uygulamanın üzerine yalnızca +0.3 KB ek yük sağlar.
Kısaca
- next-intl - Next.js topluluk standardı. Dil başına merkezi JSON sözlükleri, tam ICU MessageFormat desteği ve Next.js istek işleme ile yönlendirme mekanizmasına derin entegrasyon.
- Intlayer - Bileşen odaklı içerik modeli.
.content.tsdosyaları doğrudan bileşenlerin yanında bulunur, derleme zamanı derleyicisi bunları bileşen ve dil başına tree-shake ve tembel yükleme yapar, katı TypeScript tiplerini otomatik üretir.
Tüm veri içeriğini net bir şekilde görmek için tabloyu modalde açın
Rozetler otomatik olarak güncellenir.
Özellik karşılaştırması
Tüm veri içeriğini net bir şekilde görmek için tabloyu modalde açın
| Özellik | Intlayer (react-intlayer / next-intlayer) | next-intl (next-intl / use-intl) |
|---|---|---|
| Bileşenlerin yanında çeviriler | ✅ Evet, .content.ts her bileşenin hemen yanında bulunur | ❌ messages/ dizininde merkezi JSON sözlükleri |
| TypeScript entegrasyonu | ✅ İçerikten otomatik üretilen katı tipler | ⚠️ Manuel global.d.ts kurulumuyla desteklenir |
| Eksik çeviri tespiti | ✅ TypeScript hatası + derleme zamanı hatası/uyarısı | ⚠️ Çalışma zamanında eksik anahtarı döndürür veya yapılandırmaya göre hata fırlatır |
| Zengin içerik (JSX / Markdown / bileşenler) | ✅ Doğrudan destek | ⚠️ Eşleme bileşenleri ile t.rich() üzerinden |
| ICU MessageFormat desteği | ⚠️ Geliştirilmekte | ✅ Evet, tam ICU desteği |
| Eşzamanlı sunucu bileşenleri | ✅ next-intlayer/server altındaki useIntlayer alt sunucu bileşenlerinde çalışır | ❌ Asenkron sunucu ebeveyninden props yoluyla çevirilerin aktarılmasını gerektirir |
| Tree-shaking | ✅ Bileşen ve dil başına derleyici tarafından otomatik | ⚠️ Ad alanlarını manuel bölmeyi ve pick() kullanmayı gerektirir |
| Tembel yükleme (Lazy loading) | ✅ Tek satır yapılandırma (importMode: 'dynamic') | ⚠️ getRequestConfig içinde manuel dinamik import gerektirir |
| Görsel Düzenleyici / CMS | ✅ Ücretsiz Görsel Düzenleyici + isteğe bağlı CMS | ❌ Yok |
| Yapay zeka destekli çeviri | ✅ Yerleşik, kendi sağlayıcı anahtarlarınızı kullanır | ❌ Yok |
| MCP sunucusu ve Ajan Becerileri | ✅ Evet | ❌ Yok |
Karşılaştırmalı test
Neler ölçüldü?
Benchmark Bloom test paketi, her kütüphane ile aynı uygulamayı derler: 10 sayfa (home, about, blog, careers, contact, FAQ, pricing, products, settings, team), 10 dil (en, fr, es, de, it, pt, zh, ja, ko, ru), özdeş bileşenler ve özdeş içerik. Sayfalar en ve fr dillerinde ölçülür. Her kütüphane dört yükleme stratejisi ile test edilmiştir:
Tüm veri içeriğini net bir şekilde görmek için tabloyu modalde açın
| Strateji | Açıklama | Kimler kullanır |
|---|---|---|
| static | Her dil ve her sayfa baştan paketlenir ve yüklenir | Hızlı prototipler, yapay zeka kodları |
| dynamic | Yalnızca etkin dil yüklenir, ancak tüm sayfalar birlikte gelir | Projelerin büyük çoğunluğu |
| scoped-static | Rota başına ad alanları, tembel yükleme yok | Nadir |
| scoped-dynamic | Rota başına ad alanları + tembel yükleme. Yalnızca geçerli dilin geçerli sayfası iletilir | Katı performans bütçesi olan uygulamalar |
Intlayer'ın "scoped" varyantı yoktur: derleyici içeriği otomatik olarak bileşen başına sınırlar, bu nedenle static ve dynamic satırları zaten kapsamlandırılmıştır.
Her derleme için şunlar kaydedilir:
- Kütüphane boyutu (Lib size): Yalnızca i18n kütüphanesini içe aktaran boş bir bileşenin gzip boyutu.
- Sayfa JS (Page JS): Sayfa başına indirilen gzip sıkıştırmalı JavaScript.
- Dil sızıntısı % (Locale leak %): Kullanıcının görüntülemediği bir dile ait dizgilerin oranı.
- Sayfa sızıntısı % (Page leak %): Kullanıcının üzerinde bulunmadığı bir sayfaya ait dizgilerin oranı.
- Bileşen ortalaması (Component avg): Yalıtılmış olarak derlenen her bileşenin ortalama gzip boyutu.
- E2E tepkisellik: Dil değişiminden DOM'daki
html[lang]güncellenmesine kadar geçen süre. - Hidrasyon: React hidrasyon aşamasının süresi.
Aşağıdaki verilernext-intl4.14.2 veintlayer9.5.1 ile 2026-09-12 tarihindeki çalıştırmadan alınmıştır.
Next.js (App Router) Sonuçları
Tüm veri içeriğini net bir şekilde görmek için tabloyu modalde açın
| Kütüphane | Strateji | Kütüphane Boyutu (gz) | Ort. Sayfa JS (gz) | Dil Sızıntısı | Sayfa Sızıntısı | Ort. Bileşen (gz) | E2E Tepkisellik | Hidrasyon |
|---|---|---|---|---|---|---|---|---|
| Temel uygulama (i18n yok) | - | 0.0 KB | 141.0 KB | 0.0% | 0.0% | 0.9 KB | 13.4 ms | 11.8 ms |
next-intl | static | 14.7 KB | 153.6 KB | 4.2% | 89.8% | 21.8 KB | 16.0 ms | 14.7 ms |
next-intl | dynamic | 14.7 KB | 153.6 KB | 9.7% | 89.9% | 21.8 KB | 15.6 ms | 14.8 ms |
next-intl | scoped-static | 14.7 KB | 153.6 KB | 0.0% | 0.0% | 80.1 KB | 17.9 ms | 17.4 ms |
next-intl | scoped-dynamic | 14.7 KB | 153.6 KB | 0.0% | 0.0% | 22.9 KB | 17.8 ms | 16.8 ms |
next-intlayer | static | 5.5 KB | 141.3 KB | 0.0% | 0.0% | 8.5 KB | 15.5 ms | 16.9 ms |
next-intlayer | dynamic | 5.5 KB | 141.3 KB | 0.0% | 0.0% | 6.9 KB | 15.3 ms | 15.9 ms |
@intlayer/next-intl (uyumlu) | static | 8.0 KB | 147.5 KB | 0.0% | 0.0% | 8.1 KB | 14.5 ms | 12.8 ms |
@intlayer/next-intl (uyumlu) | dynamic | 8.0 KB | 148.7 KB | 0.0% | 0.0% | 8.1 KB | 11.7 ms | 12.8 ms |
Sonuçlar nasıl okunmalı?
- Çalışma zamanı maliyeti. Temel uygulama sayfa başına 141.0 KB'dir.
next-intlbunu 153.6 KB'ye çıkarırken (her sayfada +12.6 KB gzip), Intlayer yalnızca 141.3 KB (+0.3 KB) yer kaplar. - İçerik sızıntısı. En yaygın kurulumlarda (
staticvedynamic),next-intltümen.jsonistemci sağlayıcısına girdiği için her sayfada diğer sayfaların içeriğinin yaklaşık %90'ını gönderir. Bunu %0'a indirmek zahmetli manuel ad alanı ayrımı gerektirir; Intlayer ise bunu varsayılan olarak sunar. - Bileşen boyutu.
useTranslations()çağıran bir bileşen ortalama 21.8 KB derlenirken,useIntlayer()kullanan aynı bileşen sadece 6.9 KB tutar.
TanStack Start (use-intl) Sonuçları
Tüm veri içeriğini net bir şekilde görmek için tabloyu modalde açın
| Kütüphane | Strateji | Kütüphane Boyutu (gz) | Ort. Sayfa JS (gz) | Dil Sızıntısı | Sayfa Sızıntısı | Ort. Bileşen (gz) | E2E Tepkisellik |
|---|---|---|---|---|---|---|---|
| Temel uygulama (i18n yok) | - | 0.0 KB | 111.0 KB | 0.0% | 0.0% | 0.7 KB | 8.1 ms |
use-intl | static | 14.1 KB | 179.8 KB | 50.0% | 89.8% | 76.0 KB | 6.7 ms |
use-intl | dynamic | 14.1 KB | 119.4 KB | 0.0% | 89.8% | 75.9 KB | 7.0 ms |
use-intl | scoped-static | 14.1 KB | 128.7 KB | 0.0% | 0.0% | 87.1 KB | 20.9 ms |
use-intl | scoped-dynamic | 14.1 KB | 128.7 KB | 0.0% | 0.0% | 87.1 KB | 13.3 ms |
intlayer | static | 5.0 KB | 125.8 KB | 50.0% | 0.0% | 8.1 KB | 3.2 ms |
intlayer | dynamic | 5.0 KB | 118.6 KB | 0.0% | 0.0% | 6.3 KB | 3.6 ms |
@intlayer/use-intl (uyumlu) | dynamic | 7.3 KB | 129.7 KB | 0.0% | 0.0% | 9.3 KB | 8.7 ms |
Sonuçlar nasıl okunmalı?
- Basit
use-intlkurulumu, temel uygulamaya göre sayfa başına 68.8 KB daha fazla JS iletir. dynamicmoddause-intl119.4 KB değerine inse de %89.8 sayfa sızıntısını sürdürür.- Mimari fark en çok bileşen boyutunda göze çarpar:
use-intlile 76-87 KB, Intlayer ile 6-8 KB. - Dil değiştirme hızı Intlayer ile 2-4 kat daha seridir (3 ms vs 7-21 ms).
Neden bu fark var? Merkezi kataloglar vs derlenmiş sözlükler
next-intl geleneksel modeli izler: dil başına bir JSON, getRequestConfig içinde yüklenir, NextIntlClientProvider'a aktarılır ve t("namespace.key") ile okunur.
Kodu panoya kopyala
Çalışma zamanı bir sayfanın hangi anahtarları kullanacağını bilemez, bu yüzden tüm kataloğu göndermek en güvenli yoldur.
Intlayer bu sorumluluğu tersine çevirir. İçerik doğrudan ilgili bileşenin yanında tanımlanır:
Kodu panoya kopyala
Derleme sırasında derleyici, hangi bileşenin hangi sözlüğü içe aktardığını tespit eder ve yalnızca etkin dil için gereken sözlükleri paketler.
dynamicsatırının verilerini elde etmek içinintlayer.config.tsdosyasındadictionary.importMode: 'dynamic'ayarını yapın. Paket optimizasyonu belgesine göz atın.
Geliştirici deneyimi
İstemci bileşeni (Client component)
next-intl
Kodu panoya kopyala
Kodu panoya kopyala
Intlayer
Kodu panoya kopyala
Kodu panoya kopyala
Eşzamanlı sunucu bileşenleri
Tasarım sistemi bileşenleri (navbar, footer, kartlar) genellikle istemci bileşenlerinin alt öğeleri olarak işlenen sunucu bileşenleridir, dolayısıyla async olamazlar.
next-intl
Kodu panoya kopyala
Intlayer
Kodu panoya kopyala
Meta veriler (Metadata)
next-intl
Kodu panoya kopyala
Intlayer
Kodu panoya kopyala
next-intl API'sini koruyun, Intlayer verimini elde edin
Yukarıdaki performans verilerine ulaşmak için bileşenlerinizi sıfırdan yazmanız gerekmez. @intlayer/next-intl doğrudan tak-çalıştır bir adaptördür: useTranslations, getTranslations, useFormatter, t.rich() ve ICU çoğul yapılarını korur, bunları Intlayer derleyicisi tarafından derlenen Intlayer sözlüklerinden sunar.
Kodu panoya kopyala
Testlerde, aynı uygulamanın uyumluluk derlemesi, uygulama koduna dokunulmadan sayfa başına 153.6 KB'den 147.5 KB'ye, bileşen başına 21.8 KB'den 8.1 KB'ye ve sayfa sızıntısında %90'dan %0'a geriledi. Mevcut messages/{locale}.json dosyalarınız JSON eşitleme eklentisi ile tek doğruluk kaynağı olarak kalabilir.
Ayrıntılı adımlar için next-intl geçiş kılavuzuna göz atın.
Hangisi ne zaman tercih edilmeli?
- next-intl tercih edin: Next.js ekosisteminin yaygın standartlarını istiyorsanız, ICU MessageFormat'a yoğun şekilde güveniyorsanız, uygulamanız küçük veya orta ölçekliyse veya merkezi JSON bekleyen çeviri platformlarıyla (Crowdin, Phrase, Lokalise...) entegreyseniz.
- Intlayer tercih edin: Bileşen kapsamlı içerik, katı TypeScript desteği, derleme zamanı eksik anahtar tespiti, sıfır yapılandırmalı tree-shaking ve tembel yükleme, eşzamanlı sunucu bileşenleri ve yerleşik düzenleme araçları (Görsel Düzenleyici, CMS, yapay zeka çevirisi, MCP sunucusu) istiyorsanız.
@intlayer/next-intltercih edin: Halihazırdanext-intlkullanıyorsanız ve kodu yeniden yazmadan paket boyutu kazanımı elde etmek istiyorsanız.
İlgili karşılaştırmalar
- i18next ve Intlayer Karşılaştırması (aynı test)
- Lingui ve Intlayer Karşılaştırması (aynı test)
- vue-i18n ve Intlayer Kıyaslaması (aynı test)
- next-i18next, next-intl ve Intlayer Karşılaştırması
- next-intl artık eski mi?
GitHub Yıldızları
GitHub yıldızları, bir projenin popülaritesinin ve topluluk güveninin önemli bir göstergesidir.
Sonuç
next-intl, Next.js üzerinde güvenilir ve sağlam bir kütüphanedir. Ancak merkezi katalog modeli optimizasyon yükünü geliştiriciye bırakır: basit bir kurulum diğer sayfaların içeriğinin yaklaşık %90'ını sızdırır ve çalışma zamanının kendisi her sayfada +12.6 KB gzip ekler.
Intlayer bu yükü derleyiciye devreder. Bileşen başına sözlükler, dil başına tembel yükleme ve gereksiz içeriklerin temizlenmesi otomatik derleme çıktısıdır. Aynı uygulamadaki sonuç: sayfa başına +0.3 KB, %0 sızıntı, 3 kat daha küçük bileşenler ve TanStack Start üzerinde 2-4 kat daha hızlı dil değişimi.
Tüm ham veriler, test uygulamaları ve betikler Benchmark Bloom deposunda yer almaktadır.
Daha fazla ayrıntı için 'Neden Intlayer?' belgesine bakın.
Yorumlar
Henüz yorum yok. Düşüncelerinizi paylaşan ilk kişi olun.
