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
i18next VS Intlayer | React & Next.js Uluslararasılaştırma (i18n) Benchmark Karşılaştırması
i18next, JavaScript ekosisteminde en yaygın kullanılan i18n kütüphanesidir. react-i18next ve next-i18next aracılığıyla çok sayıda React ve Next.js uygulamasını destekler. Intlayer ise derleyici tabanlı ve bileşen kapsamlı (component-scoped) modern bir alternatiftir.
Bu makale iki aracı özellik listeleri yerine somut ölçümlerle karşılaştırır. Rakamlar, her kütüphaneyle aynı uygulamayı oluşturan ve tarayıcının gerçekte ne indirdiğini kaydeden açık kaynaklı bir test paketi olan Benchmark Bloom projesinden alınmıştır.
Özet (tl;dr):i18next, bu benchmark testindeki en ağır çalışma zamanıdır (runtime): Standart (naive) kurulumda Next.js üzerinde sayfa başına +77 KB gzip, tam ad alanı (namespace) ve tembel yükleme (lazy-loading) optimizasyonundan sonra bile +22 KB ek yük getirir. Intlayer ise yalnızca +0.3 KB ekler. Tamamen izole edilmiş (scoped) kurulum dışındaki tümi18nextyapılandırmaları, kullanıcının bulunmadığı diğer sayfaların çeviri metinlerinin yaklaşık %90'ını sızdırır; Intlayer ise varsayılan olarak %0 sızıntı ile çalışır. Tembel yüklenen bir backend ile dil değiştirmekreact-i18nextile 123-185 ms sürerken Intlayer ile yalnızca 3-4 ms sürmüştür.i18nextAPI'sini koruyan@intlayer/next-i18nextuyumluluk adaptörü, sayfa boyutunu orijinalin 218.5 KB seviyesinden 150.7 KB seviyesine düşürmüştür.
Kısaca Özet
- i18next / react-i18next / next-i18next - Olgun, zengin eklenti ekosistemine sahip ve çatıdan bağımsız (framework-agnostic). Ad alanları, dil algılayıcıları, arka uçlar, eklenti üzerinden ICU ve zengin içerikler için
<Trans>desteği sunar. İçeriklerlocales/{lng}/{ns}.jsonaltında merkezi olarak toplanır. Güçlüdür ancak her optimizasyonu (ad alanı ayrımı, sayfa bazlı yükleme, tip güvenliği) geliştiricinin manuel olarak yapılandırmasını ve sürdürmesini gerektirir. - Intlayer - Bileşen odaklı içerik modeli.
.content.tssözlükleri doğrudan hizmet ettikleri bileşenin yanında yer alır; derleme zamanı derleyicisi bileşen ve dil bazında ağaç budama (tree-shaking) ve tembel yükleme uygular, içerikten katı TypeScript tipleri otomatik oluşturulur ve eksik çeviriler derleme anında hata verir. Dahili middleware, SEO yardımcıları, Görsel Editör / CMS ve yapay zeka destekli çeviri sunar.
Tüm veri içeriğini net bir şekilde görmek için tabloyu modalde açın
Rozetler otomatik olarak güncellenir. Değerler zamanla değişiklik gösterebilir.
Ö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) | i18next (react-i18next / next-i18next) |
|---|---|---|
| Bileşen yanında çeviri tanımlama | ✅ Evet, her bileşenle aynı dizinde .content.ts | ❌ Hayır, locales/{lng}/{ns}.json altında merkezi yapı |
| TypeScript entegrasyonu | ✅ İçerikten otomatik olarak üretilen katı tipler | ⚠️ Temel; katı anahtarlar için CustomTypeOptions genişletmesi gereklidir |
| Eksik çeviri tespiti | ✅ TypeScript hatası + derleme anında hata/uyarı | ⚠️ Çalışma zamanı yedeği (saveMissing, anahtarın kendisini döndürme) |
| Zengin içerik (JSX / Markdown / bileşenler) | ✅ Doğrudan yerel destek | ⚠️ Numaralı etiketlerle <Trans> bileşeni |
| ICU desteği | ⚠️ Geliştirilme aşamasında | ⚠️ Eklenti ile (i18next-icu) |
| Çoğullaştırma (Pluralization) | ✅ Numaralandırma (enum) tabanlı açık modeller | ✅ _one / _other sonekleri (Intl.PluralRules) |
| Biçimlendirme (tarih, sayı, para birimi) | ✅ useNumber, useDate, ... (yerel Intl desteği) | ⚠️ İnterpolasyon biçimlendiricileri veya manuel Intl.* çağrıları |
| Yerelleştirilmiş yönlendirme ve middleware | ✅ Yerleşik proxy/middleware desteği, getMultilingualUrls | ⚠️ Çekirdeğe dahil değil; özel middleware veya üçüncü taraf araçlar gerekir |
| SEO yardımcıları (hreflang, sitemap, robots) | ✅ Yerleşik yardımcılar | ❌ Manuel kurulum gerekir |
| Eşzamanlı sunucu bileşenleri (RSC) | ✅ next-intlayer/server altındaki useIntlayer tüm sunucu bileşenlerinde çalışır | ⚠️ Sayfa seviyesinde getFixedT çağrısı yapıp t'yi Props ile aktarma |
| Tree-shaking (yalnızca kullanılan içerik) | ✅ Bileşen ve dil bazında derleyici tarafından otomatik yapılır | ⚠️ Manuel: ad alanları + sayfa başına ns listesi + arka uç yapılandırması |
| Tembel yükleme (Lazy loading) | ✅ importMode: 'dynamic' (tek satırlık yapılandırma) | ✅ Arka uç eklentileri aracılığıyla (i18next-resources-to-backend vb.) |
| Kullanılmayan içeriğin temizlenmesi | ✅ Kullanılmayan sözlükler derleme anında elenir | ❌ Yerleşik destek yok |
| Eksik çeviri testleri (CLI / CI) | ✅ npx intlayer content test | ⚠️ i18next-parser veya harici araçlar |
| Yapay zeka destekli çeviri | ✅ Yerleşik, kendi API anahtarlarınızı kullanır | ❌ Yok (Locize ayrı ve ücretli bir platformdur) |
| Görsel Editör / CMS | ✅ Ücretsiz Görsel Editör + isteğe bağlı CMS | ❌ Yok (Locize veya harici sistemler gerektirir) |
| MCP Sunucusu & Agent Skills | ✅ Desteklenir | ❌ Desteklenmez |
| Ekosistem ve topluluk | ⚠️ Daha yeni ancak hızla büyüyor | ✅ En büyük ve en olgun ekosistem |
Benchmark Testi
Neler Ölçüldü?
Benchmark Bloom test paketi, her kütüphane ile birebir aynı uygulamayı inşa eder: 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 İngilizce (en) ve Fransızca (fr) olarak test edilir. Her kütüphane dört farklı yükleme stratejisi ile değerlendirilir:
Tüm veri içeriğini net bir şekilde görmek için tabloyu modalde açın
| Strateji | Açıklama | Tipik Kullanım Alanı |
|---|---|---|
| static | Tüm diller ve tüm sayfalar tek pakette toplanır (init() içinde satır içi resources) | Hızlı prototipler, yapay zeka kodları |
| dynamic | Yalnızca aktif dil arka uçtan yüklenir, ancak tüm ad alanları tek seferde gelir | Çoğu standart proje |
| scoped-static | Rota başına bir ad alanı ayrılır, tümü baştan ana pakete dahil edilir | Nadir görülen yapılandırmalar |
| scoped-dynamic | Rota başına ad alanı + arka uç tembel yükleme. Yalnızca mevcut sayfa ve mevcut dil gelir | Katı performans bütçesi olan uygulamalar |
Intlayer için ayrı bir "scoped" varyantına ihtiyaç yoktur: Derleyici, içeriği bileşen düzeyinde otomatik olarak izole eder; bu nedenle static ve dynamic satırları zaten en iyi düzeyde optimize edilmiştir.
Her derleme için kaydedilen metrikler:
- Lib size: Yalnızca i18n kütüphanesini içe aktaran boş bir bileşenin gzip boyutu. Çalışma zamanının sabit maliyeti.
- Page JS: Sayfa başına indirilen ortalama JavaScript gzip boyutu (tüm sayfalar ve diller genelinde).
- Locale leak %: İndirilen JS içerisindeki, kullanıcının görüntülemediği bir dile ait çeviri metinlerinin oranı.
- Page leak %: İndirilen JS içerisindeki, kullanıcının bulunmadığı diğer sayfalara ait çeviri metinlerinin oranı.
- Component avg: İzole olarak derlenen her bir bileşenin ortalama gzip boyutu.
- E2E reactivity: Yeni bir dil seçimi ile DOM'da
html[lang]etiketinin güncellenmesi arasındaki gerçek süre (Playwright, 5 deneme ortalaması). - Hydration: React hidrasyon (hydration) aşamasının süresi.
Aşağıdaki verilernext-i18next16.3.0,react-i18next17.0.13 veintlayer9.5.1 sürümleriyle yapılan 2026-09-12 tarihli test çalıştırmasından alınmıştır. Test uygulaması bilinçli olarak kompakt tutulmuştur; bu nedenle sızıntı yüzdeleri yapısal bir örüntüyü temsil eder: İçeriğiniz büyüdükçe sızıntı katlanarak artarken çalışma zamanı maliyeti sabit kalır.
Next.js Sonuçları (next-i18next)
Tüm veri içeriğini net bir şekilde görmek için tabloyu modalde açın
| Kütüphane | Strateji | Lib size (gz) | Page JS avg (gz) | Dil Sızıntısı | Sayfa Sızıntısı | Bileşen Ort. (gz) | E2E Tepki Süresi | Hydration |
|---|---|---|---|---|---|---|---|---|
| base (i18n yok) | - | 0.0 KB | 141.0 KB | 0.0% | 0.0% | 0.9 KB | 13.4 ms | 11.8 ms |
next-i18next | static | 19.7 KB | 218.5 KB | 0.0% | 89.8% | 78.5 KB | 16.4 ms | 15.6 ms |
next-i18next | dynamic | 19.7 KB | 169.5 KB | 50.0% | 89.8% | 26.1 KB | 15.4 ms | 27.7 ms |
next-i18next | scoped-static | 19.7 KB | 220.1 KB | 0.0% | 89.8% | 78.9 KB | 16.4 ms | 14.7 ms |
next-i18next | scoped-dynamic | 19.7 KB | 163.4 KB | 0.0% | 0.0% | 27.1 KB | 15.9 ms | 15.1 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-i18next (uyumlu) | static | 9.4 KB | 150.7 KB | 0.0% | 0.0% | 9.7 KB | 10.7 ms | 11.3 ms |
@intlayer/next-i18next (uyumlu) | dynamic | 9.4 KB | 150.7 KB | 0.0% | 0.0% | 9.7 KB | 11.9 ms | 10.6 ms |
Sonuçların Analizi
- Çalışma zamanı maliyeti:
i18nextçekirdeği ilereact-i18nextbirlikte test edilen en ağır çalışma zamanıdır: Boş bir bileşen için 19.7 KB gzip yer tutarken,next-intlayeryalnızca 5.5 KB tüketir. - Standart kurulum maliyetlidir:
init()içineresourcesdoğrudan yerleştirildiğinde sayfa başına 218.5 KB boyuta ulaşılır; bu da temel uygulamaya göre +77.5 KB fazlalıktır. Her sayfa tüm ad alanlarını taşımak zorunda kalır. - Manuel optimizasyon zahmetlidir: Bir arka uca (
dynamic) geçmek 49 KB tasarruf sağlar ancak başka sayfalara ait metinlerin %90'ını sızdırmaya devam eder ve bu kurulumda indirilen metinlerin yarısı yanlış dile aittir. Rota bazlı ad alanlarına (scoped-dynamic) geçildiğinde sızıntı %0'a inse de ulaşılan 163.4 KB boyutu, hiçbir manuel ayar gerektirmeyen Intlayer'ın (141.3 KB) sayfa başına 22.4 KB üzerindedir. - Bileşen boyutu:
useTranslation()kullanan bir bileşen 26-79 KB boyutunda derlenirken, aynı bileşenuseIntlayer()ile yalnızca 6.9 KB yer kaplar. - Hidrasyon gecikmesi:
dynamickurulumunda hidrasyon süresi 27.7 ms'ye yükselir; çünkü React hidrasyona başlamadan önce istemcide i18next örneğinin başlatılması ve arka uçtan veri alması gerekir.
TanStack Start Sonuçları (react-i18next)
Next.js'e özgü yapılandırmaları dışarıda bırakmak adına TanStack Start üzerinde doğrudan react-i18next ile yapılan ölçümler:
Tüm veri içeriğini net bir şekilde görmek için tabloyu modalde açın
| Kütüphane | Strateji | Lib size (gz) | Page JS avg (gz) | Dil Sızıntısı | Sayfa Sızıntısı | Bileşen Ort. (gz) | E2E Tepki Süresi | Hydration |
|---|---|---|---|---|---|---|---|---|
| base (i18n yok) | - | 0.0 KB | 111.0 KB | 0.0% | 0.0% | 0.7 KB | 8.1 ms | 21.6 ms |
react-i18next | static | 18.4 KB | 180.3 KB | 50.0% | 89.8% | 24.3 KB | 12.9 ms | 85.1 ms |
react-i18next | dynamic | 18.4 KB | 136.4 KB | 23.1% | 89.8% | 24.8 KB | 123.1 ms | 32.9 ms |
react-i18next | scoped-static | 18.4 KB | 184.2 KB | 50.7% | 89.8% | 25.3 KB | 185.1 ms | 25.2 ms |
react-i18next | scoped-dynamic | 18.4 KB | 127.2 KB | 0.0% | 0.0% | 26.7 KB | 17.6 ms | 11.3 ms |
intlayer | static | 5.0 KB | 125.8 KB | 50.0% | 0.0% | 8.1 KB | 3.2 ms | 11.5 ms |
intlayer | dynamic | 5.0 KB | 118.6 KB | 0.0% | 0.0% | 6.3 KB | 3.6 ms | 14.1 ms |
Sonuçların Analizi
- Standart
react-i18nextuygulaması temel uygulamaya kıyasla sayfa başına +69 KB fazla kod taşır ve hidrasyon 85 ms (temelin 4 katı) sürer; çünkü tüm kaynak ağacı ilk render öncesinde istemcide işlenir ve kaydedilir. - Dil değişiminde gecikme: Kaynaklar arka uç üzerinden tembel yüklendiğinde, dili değiştirmek
html[lang]güncellenmeden önce bir ağ gidiş-dönüşü (round-trip) gerektirir:dynamicmodunda 123 ms,scoped-staticmodunda 185 ms. Intlayer ise her iki modda da DOM'u 3-4 ms içinde günceller; dil değişimi ağ çağrılarına takılmadan anında gerçekleşir. - Tamamen optimize edilmiş
scoped-dynamicyapılandırması 127.2 KB seviyesine inse de, Intlayer'ındynamicsatırından +8.6 KB daha ağırdır ve bu sonuca ulaşmak için rota-ad alanı eşleme haritası, arka uç yükleyicisi ve Suspense sınırları gerekmiştir. - Intlayer'ın
staticmodu, yalnızca ilgili sayfanın bileşenleri tarafından içe aktarılan sözlükleri paketlediği için zaten %0 sayfa sızıntısına sahiptir.importMode: 'dynamic'ayarını açmak dil sızıntısını da tamamen ortadan kaldırır. - Bileşen boyutu:
react-i18nextile bileşen başına 24-27 KB iken Intlayer ile 6-8 KB seviyesindedir.
Fark Nereden Kaynaklanıyor? Global Örnek vs Derlenmiş Sözlükler
i18next, 2012 yılında bir çalışma zamanı kütüphanesi olarak tasarlandı: Global bir örnek kaynak deposunu tutar, eklentiler bunu genişletir ve t() render anında anahtarları arar. Bu yapı ona yüksek esneklik kazandırsa da performans açısından ağır bir yük getirir:
Kodu panoya kopyala
Global örnek, bileşenin hangi anahtarlara ihtiyaç duyacağını önceden bilemez; bu nedenle yüklemesi söylenen tüm ad alanlarını bellekte tutar. Optimizasyon yapmak sizin katalogları bölmenizi, sizin her sayfanın ihtiyaç duyduğu ad alanlarını listelemenizi ve bileşenler taşındıkça bu listeyi elle güncellemenizi gerektirir. Benchmark notlarında ifade edildiği gibi: "Tip güvenliğini korurken hangi sayfaya hangi ad alanının dahil edileceğini tam olarak bilmek tam bir kabustur".
Intlayer global örneği tamamen ortadan kaldırır. İçerik doğrudan bileşenin yanında tanımlanır ve derleyici bağımlılık grafiğini derleme zamanında çözer:
Kodu panoya kopyala
@intlayer/swc / @intlayer/babel hangi bileşenin hangi sözlüğü kullandığını tespit eder, yalnızca bunları ve yalnızca aktif dil için paketler, kullanılmayan içerikleri eler. "scoped-dynamic" kalıbı, ekibin yönetmek zorunda olduğu bir kural yerine derlemenin otomatik bir çıktısı haline gelir.
dynamicsatırındaki rakamları elde etmek içinintlayer.config.tsdosyasındadictionary.importMode: 'dynamic'ayarını yapmanız yeterlidir. Ayrıntılar için paket optimizasyonu kılavuzuna bakın.
Geliştirici Deneyimi (DX)
Kurulum Karşılaştırması
next-i18next (App Router)
Kodu panoya kopyala
Bunun yanı sıra istemci tarafı I18nProvider, generateStaticParams ve her sayfada ad alanı dizisi tanımlanmalıdır.
Intlayer
Kodu panoya kopyala
Kodu panoya kopyala
İstemci Bileşeni (Client Component)
react-i18next
Kodu panoya kopyala
Kodu panoya kopyala
Bu bileşeni kullanan sayfaaboutad alanını yüklemek zorundadır veCustomTypeOptionsgenişletilmedikçet("counter.label")düz bir metinden ibarettir.
Intlayer
Kodu panoya kopyala
Kodu panoya kopyala
label ve increment katı tiplere sahiptir; yazım hataları anında TypeScript hatası verir ve eksik çeviriler derlemeyi durdurur.
Eşzamanlı Sunucu Bileşeni (Server Component)
next-i18next
Kodu panoya kopyala
Sayfa seviyesinde i18n.getFixedT(locale, "about") çağrılmalı ve t ile locale bileşene prop olarak aktarılmalıdır.
Intlayer
Kodu panoya kopyala
i18next API'sini Koruyarak Intlayer Performansına Erişin
Yukarıdaki benchmark kazanımlarını elde etmek için bileşenlerinizi sıfırdan yeniden yazmak zorunda değilsiniz. @intlayer/i18next, @intlayer/react-i18next ve @intlayer/next-i18next uyumluluk adaptörleri tak-çalıştır niteliğindedir: useTranslation, t(), <Trans>, çoğullaştırmalar ve bağlam sonekleri Intlayer derleyicisi tarafından optimize edilen sözlükler üzerinden çalışmaya devam eder.
Kodu panoya kopyala
Kodu panoya kopyala
Benchmark testinde, aynı Next.js uygulamasının uyumluluk derlemesi kodlara dokunulmadan sayfa başına 218.5 KB'tan 150.7 KB'a, bileşen başına 78.5 KB'tan 9.7 KB'a, sayfa sızıntısı ~%90'dan %0'a gerilemiş ve hidrasyon süresi 15.6 ms'den 11.3 ms'ye düşmüştür. Mevcut locales/{lng}/{ns}.json dosyalarınız JSON senkronizasyon eklentisi sayesinde ana kaynak olarak kalabilir.
Geçiş kılavuzlarına göz atın: i18next, react-i18next, next-i18next.
Hangisini Ne Zaman Seçmeli?
- i18next'i seçin: Geniş eklenti ekosistemine (özel algılayıcılar, arka uçlar, ICU, Locize) kesin olarak ihtiyacınız varsa, React dışı alanlarda da (Node servisleri, vanilla JS, diğer çatılar) yerelleştirme yapıyorsanız, ekibiniz bu araca zaten hakimse veya harici çeviri platformunuz
locales/{lng}/{ns}.jsonbiçimini zorunlu kılıyorsa. Ancak performans önemliyse ad alanlarını ve rota haritalarını yönetmek için zaman ayırmayı unutmayın. - Intlayer'ı seçin: Bileşen düzeyinde içerik yönetimi, katı TypeScript desteği, derleme zamanı eksik anahtar hataları, sıfır çaba ile otomatik tree-shaking ve tembel yükleme, anında dil değişimi, eşzamanlı sunucu bileşenleri ve yerleşik düzenleme araçları (Görsel Editör, CMS, yapay zeka destekli çeviri, MCP sunucusu) istiyorsanız. Modüler kod tabanları ve tasarım sistemleri için idealdir.
@intlayer/*-i18nextadaptörlerini seçin: Halihazırda i18next kullanıyorsanız ve büyük bir yeniden yazım sürecine girmeden paket boyutunda ve tepki süresinde hemen kazanım sağlamak istiyorsanız.
İlgili Karşılaştırmalar
- next-intl vs Intlayer (aynı benchmark)
- Lingui vs Intlayer (aynı benchmark)
- vue-i18n vs Intlayer Karşılaştırması (aynı benchmark)
- next-i18next vs next-intl vs Intlayer
- react-i18next vs react-intl vs Intlayer
- i18next modası geçti mi?
GitHub Yıldızları
GitHub yıldızları bir projenin popülerliğini, topluluk güvenini ve uzun vadeli sürdürülebilirliğini yansıtır. Tek başına teknik kaliteyi kanıtlamasa da, kaç geliştiricinin projeyi faydalı bulduğunu ve benimsediğini gösterir.
Sonuç
i18next hak ettiği konuma sahiptir: Her ortamda çalışır, her senaryo için bir eklentisi vardır ve 10 yılı aşkın süredir geliştirilmektedir. Ancak bu benchmark, çalışma zamanı odaklı mimarinin getirdiği maliyeti açıkça göstermektedir. Standart yapılandırma sayfa başına +70-77 KB gzip ek yük getirmekte, diğer sayfalara ait içeriğin ~%90'ını sızdırmakta ve dil değişimi 100 ms'nin üzerinde sürmektedir. Sızıntıyı sıfıra indirmek mümkündür ancak bu da karmaşık bir manuel takip gerektirir ve yine de Intlayer'dan 9-22 KB daha ağırdır.
Intlayer bu iş yükünü derleyiciye devreder. Bileşen başına sözlükler, dil başına tembel yükleme ve gereksiz metinlerin ayıklanması derlemenin otomatik sonuçlarıdır. Aynı uygulamada: Sayfa başına yalnızca +0.3 KB, %0 sızıntı, 3 ila 10 kat daha küçük bileşenler ve 3-4 ms içinde dil değişimi.
Tüm ham veriler, test uygulamaları ve otomasyon komutları Benchmark Bloom deposunda herkese açıktır. Kendiniz test edebilirsiniz.
Daha fazla bilgi için 'Neden Intlayer?' dokümanını inceleyin.
Yorumlar
Henüz yorum yok. Düşüncelerinizi paylaşan ilk kişi olun.
