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, Next.js için en popüler i18n kütüphanesidir. Intlayer ise derleyici tabanlı, bileşen kapsamlı bir alternatiftir. Her ikisi de bir App Router uygulamasını yerelleştirir. Soru, uygulama derlendikten sonra her birinin maliyetinin ne olduğudur.
Bu makale bir kılavuz değildir. Her kütüphaneyle aynı uygulamayı derleyen ve tarayıcının gerçekte ne indirip çalıştırdığını ölçen açık kaynaklı bir karşılaştırma paketi olan Benchmark Bloom verileriyle desteklenen bir karşılaştırmadır.
tl;dr: Aynı Next.js uygulamasında,next-intlher sayfaya +12.6 KB gzip JavaScript eklerken, Intlayer için bu +0.3 KB'dir. Ekstra bir çalışma olmadan,next-intlher sayfayla birlikte diğer sayfaların dizgilerinin yaklaşık %90'ını gönderir.next-intlile %0 sızıntıya ulaşmak ad alanı kapsamlandırması ve sayfa başınapick(messages, [...])gerektirir. Intlayer, derleyicisi içeriği bileşen başına kapsamlandırdığı için varsayılan olarak %0'a ulaşır. Intlayer çıktısıylanext-intlAPI'sini korumak istiyorsanız,@intlayer/next-intlbağdaştırıcısı orijinalin 153.6 KB değerine karşılık sayfa başına 147.5 KB olarak ölçülmüştür.
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ı
İlgilendiğiniz metrikleri ve kütüphaneleri seçin:
Metrik
Dinamik JSON yükleme
Çevirileri çalışma zamanında geç yükler
Kapsamlı JSON (ad alanı oluşturma)
Sayfa başına çeviri ad alanları
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
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.
Tüm kütüphaneler ve stratejiler için tam tablo, Next.js kıyaslama raporunda.
TanStack Start (use-intl) Sonuçları
use-intl, next-intl'in framework bağımsız çekirdeğidir. Aynı API, aynı mesaj formatı. TanStack Start üzerinde intlayer ile karşılaştırmak, denklemin Next.js'e özgü kısımlarını ortadan kaldırır.
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).
Tam tablo TanStack Start kıyaslama raporunda.
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.
Bunu başaramamanın maliyeti aynı anda iki eksende büyür: sayfalar ve yerel ayarlar:

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)
Kodu panoya kopyala
Kodu panoya kopyala
Bu bileşeni oluşturan her sayfadaNextIntlClientProvider'a iletilen mesajlaracounterad alanını eklemeyi unutmayın.
Kodu panoya kopyala
Kodu panoya kopyala
Sayfada kayıt edilecek hiçbir şey yok: bileşen kendi içeriğini kendisi getirir.
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.
Kodu panoya kopyala
Sayfanın await getTranslations("counter") ve await getFormatter() çalıştırması, ardından sonuçları props olarak aşağı aktarması gerekir. Bileşen artık bağımsız değildir.
Kodu panoya kopyala
Meta veriler (Metadata)
Kodu panoya kopyala
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.js için ekosistem standardını istiyorsanız, ICU MessageFormat'a güveniyorsanız, uygulamanız küçük veya orta ölçekliyse veya merkezi JSON bekleyen bir çeviri platformuyla (Crowdin, Phrase, Lokalise...) entegre oluyorsanız. Performans önemliyse katalogları ad alanlarına bölmek ve sayfa başına pick() ile mesaj seçmek için zaman ayırın.
Bileşen kapsamlı içerik, katı TypeScript, derleme zamanı eksik anahtar hataları, zahmetsiz tree-shaking ve lazy loading, eşzamanlı sunucu bileşenleri ve yerleşik düzenleme araçları (Görsel Düzenleyici, CMS, yapay zeka çevirisi, MCP sunucusu) istiyorsanız. Özellikle büyük, modüler kod tabanları ve tasarım sistemleri için uygundur.
Zaten next-intl kullanıyorsanız ve kodu yeniden yazmadan paket boyutu kazanımı istiyorsanız. Uyumluluk bağdaştırıcısı içe aktarmalarınızı ve messages/{locale}.json dosyanızı tek gerçek kaynak olarak korur. next-intl vs @intlayer/next-intl içinde yan yana ölçülmüştür.
SSS
Render sırasında değil. Fark tarayıcıya ne gönderildiğindedir: next-intl her sayfada +12.6 KB gzip çalışma zamanı maliyeti getirir ve standart kurulumlarda her sayfayla birlikte yabancı sayfa dizelerinin yaklaşık %90'ını gönderir. Dil değiştirme ve hidrasyon Next.js'de benzerdir (15-18 ms); TanStack Start'ta use-intl, Intlayer'ın 3-4 ms'sine karşılık 7-21 ms sürer.
Evet, scoped-dynamic kurulumuyla: messages/{locale}.json dosyasını rota başına bir ad alanına bölün, ardından her sayfada pick(messages, [...]) kullanın ve bileşenler taşındıkça bu eşlemeyi doğru tutun. Kıyaslamadaki scoped-* satırları tam olarak bu çalışmayı temsil eder. Intlayer derleyici içeriği bileşen bazında kapsadığı için buna gerek kalmadan %0'a ulaşır. Bkz. paket optimizasyonu.
Hayır. @intlayer/next-intl, useTranslations, getTranslations, useFormatter, t.rich(), ICU çoğulları ve gezinme yardımcılarını korur ve bunları derlenmiş sözlüklerden sunar. next.config.ts içinde tek satırlık eklenti. next-intl geçiş kılavuzunda adım adım anlatılmıştır.
Yerel API'de ICU desteği üzerinde çalışılmaktadır. Uyumluluk bağdaştırıcıları (@intlayer/next-intl, @intlayer/use-intl) ICU'yu çalıştırır: çoğullar, select, selectordinal, # ve {ts, date, long} Intlayer'ın ICU çözücüsünden geçer. Ayrıntılar için ICU mesaj formatı sayfasına bakın.
Evet. JSON senkronizasyon eklentisi bunları okur, en üst düzey anahtarlarını sözlüklere böler ve CLI veya CMS bunları güncellediğinde çevirileri aynı dosyalara yazar. Çevirmenlerinizin iş akışı değişmez.
İlgili karşılaştırmalar
Aynı kıyaslama, diğer kütüphaneler:
next-intl hakkında daha fazlası:
Referans belgeleri:
Bu kütüphanelerin nereden geldiğini anlamak için JavaScript i18n tarihini okuyun.
GitHub Yıldızları
GitHub yıldızları, bir projenin popülaritesinin ve topluluk güveninin önemli bir göstergesidir.
Commit etkinliği
Yıldızlar popülerliği gösterir. Commit sayısı ise bir projeye ne kadar emek verildiğini gösterir. Bu yazı yazıldığında Intlayer yaklaşık 7.500 commit içeriyor; bu, burada karşılaştırılan kütüphanelerin çoğundan fazla ve next-intl ya da next-i18next kütüphanesinin yaklaşık 5 katı.
- amannn/next-intl
- aymericzip/intlayer
Varsayılan daldaki commit sayısı, kaynak: GitHub API.
Intlayer bir monorepo olduğundan bu sayı her framework paketini, CLI'yi ve dokümantasyonu kapsar. Commit sayısını kalitenin değil, etkinliğin bir göstergesi olarak okuyun.
npm indirmeleri
- next-intl
- next-intlayer
Kaynak: npm kayıt defteri indirme API’si.
İndirme sayıları en iyi çözümleri değil, en eski çözümleri ödüllendirir. Yıllar önce yayımlanmış bir kütüphane, onu o zaman seçen her proje, her CI çalışması ve ona bağımlı her paket tarafından hâlâ kurulur. Bu sayı yeni bir tercihten çok ataleti ölçer.
Yapay zekâ asistanları bu etkiyi büyütür. next-intl, i18next ve vue-i18n eğitildikleri kodun her yerinde bulunduğu için, alternatifleri karşılaştırmadan bunları varsayılan olarak önerirler. Her öneri indirme sayısını artırır, bu da bir sonraki öneriyi besler. İndirme sayısına değil, benchmark sonuçlarına göre karşılaştırın.
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.
