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
Doğru Vue i18n kütüphanesi nasıl seçilir
"Vue i18n" hem genel bir terim hem de neredeyse herkesin yüklediği kütüphanenin adıdır. Bu durum aynı anda hem kullanışlı hem de yanıltıcıdır: vue-i18n iyi bir varsayılandır, ancak tek seçenek değildir ve seçimi yönlendirmesi gereken sorular (SSR var mı yok mu, kaç sayfa var, çevirileri kim yazıyor) npm install öncesinde nadiren sorulur.
Bu rehber önce bu soruları sorar, ardından sade Vite + Vue ve Nuxt için yanıtları uygun kütüphanelerle eşleştirir.

İçindekiler
Kütüphaneleri karşılaştırmadan önce yanıtlanması gereken altı soru
- Vite SPA mı yoksa Nuxt mı? Bir SPA'da katalog maliyeti bir JS bundle problemidir. Nuxt'ta ise aynı zamanda bir HTML payload problemidir, çünkü mesajlar SSR durumuna serialize edilir ve hydrate edilir. Çoğu "vue-i18n yavaş" bildirimi bu nedenle Nuxt uygulamalarından gelir.
- Çevirileri kim yazıyor? Geliştiriciler, bir TMS, ICU string'leri teslim eden bir ajans veya bir AI pipeline'ı.
vue-i18nICU değil, kendi pipe ile ayrılmış çoğul sözdizimini kullanır. String'ler dışarıdan geliyorsa bu önemlidir. - Kaç dil ve sayfa var? İki dil ve beş sayfa her şeyi tek seferde gönderebilir. On dil ve kırk route bunu yapamaz ve yükleme stratejisi ana maliyet haline gelir.
- Key'lerde type'lara ihtiyacınız var mı?
createI18n'e bir mesaj schema generic'i iletmediğiniz sürecet("cart.totl")vue-i18niçinde derlenir ve bu schema, lazy load edilen kataloglarla çakışır. - İçerik ne barındırıyor? Yalnızca UI etiketleri mi, yoksa markdown, cümle içi link'ler ve dil bazlı bloklar mı? Zengin içerik,
t()fonksiyonunun string döndürmesinin hantallaştığı yerdir. - CSP bir kısıtlama mı? Varsayılan
vue-i18nbuild'i mesajları tarayıcıdanew Functionile derler. Yalnızca runtime build'leri build time sırasında ön derleme yapmak için@intlify/unplugin-vue-i18ngerektirir.
Yanıtları not edin. Aşağıdaki her şey bunlara atıfta bulunacaktır.
Tek resimde genel manzara
Vue ekosisteminde React'e kıyasla daha az i18n kütüphanesi vardır ve bunlar farklı mimari dalgalardan gelir.

vue-i18n 2015 yılında ortaya çıktı ve o zamandan beri varsayılan oldu. @nuxt/i18n bunu dil bazlı routing, SEO etiketleri ve dil başına lazy loading ile sarar. Mesajlar render fonksiyonlarına derlenir; unplugin eklerseniz build time'da, aksi takdirde tarayıcıda derlenir.
Mozilla Fluent .ftl dosyaları, gramere duyarlı varyantlarla daha kullanıcı dostu bir mesaj sözdizimi getirdi. Key type'ları yoktur ve Vite eklentisi her dili her sayfaya yükler.
Paraglide mesaj başına bir fonksiyon üretir ve bundler'ın geri kalanını tree-shake etmesine izin verir. Intlayer içeriği bileşen başına .content.ts dosyalarında tanımlar, type'lar üretir ve yalnızca bir route'un render ettiği içeriği sunar.
JavaScript i18n tarihi her dalgayı ayrıntılı olarak ele almaktadır.
En önemli karar: içerik nerede yaşar ve ne zaman yüklenir
İki yapısal tercih, kurulumlar arasındaki bundle farkının çoğunu açıklar:
- Merkezi veya scoped içerik. Uygulama için tek bir
locales/en.jsonveya bileşen başına bir tanımlama. - Statik veya dinamik import. Başlangıçta her şey veya aktif dil (ve ideal olarak aktif route) talep üzerine getirilir.
Grafik, sayfa başına yaklaşık 30 KB metin içeren, 1 ila 10 dile çevrilmiş, 1 ila 10 sayfalık teorik bir uygulama için payload'u tahmin etmektedir.

vue-i18n dinamik ekseni destekler: bir import() sonrasında setLocaleMessage, kimsenin okumadığı dokuz dili göndermeyi bıraktığınız anlamına gelir. Size sağlamadığı şey ise sayfa eksenidir. Bir dil kataloğu tek bir nesnedir ve onu yüklemek her sayfanın metnini yükler. Bir SPA'da bunu kimse fark etmez. Nuxt'ta, @nuxtjs/i18n ve ondan fazla sayfa ile her route diğer tüm route'ların string'lerini iki kez taşır: JS chunk'ında ve SSR payload'unda.
Vue benchmark bunu "diğer route'lardan sızıntı" ve "diğer dillerden sızıntı" olarak ölçer. 3. soruya cevabınız "çok sayıda sayfa" ise, bu bölüm her türlü API tercihinden daha ağır basar. Bileşen bazlı ve merkezi i18n yazısı, aynı dengenin bakım tarafını ele alır.
Adaylar
Kütüphane boyutları Vue benchmark çalışmasından alınmıştır: 10 sayfalık, 10 dilli bir uygulamada, bundling, tree-shaking ve minification sonrasında boş bir bileşendeki plugin artı composable. İçerik ayrı olarak ölçülür.
Tüm veri içeriğini net bir şekilde görmek için tabloyu modalde açın
| Kütüphane | İçerik modeli | Key'lerde Type Desteği | Mesaj formatı | Route başına bölme | Kütüphane boyutu |
|---|---|---|---|---|---|
vue-i18n | Dil başına merkezi kataloglar, isteğe bağlı SFC <i18n> blokları | Schema generic ile opt-in | Kendine ait (pipe) | Hayır | ~24.3 kB |
@nuxtjs/i18n | vue-i18n ile aynı, artı routing ve SEO etiketleri | Aynı | Aynı | Hayır, sadece dile göre | Ek olarak |
fluent-vue | .ftl dosyaları (Mozilla Fluent) | Yok | Fluent | Hayır | ~29.7 kB |
| Paraglide | inlang projesi, üretilen fonksiyonlar | Üretilen | Kendine ait | Tree-shaking ile | Sıfıra yakın |
| Intlayer | Bileşen başına bir .content.ts | Üretilen, varsayılan açık | Yardımcılar (plural) | Evet, bileşen bazlı | Temel (Baseline) |
Rakamlar benchmark sürümlerindeki anlık bir görüntüdür. Yalnızca boyuta göre karar vermeden önce kendi uygulamanızda çalıştırın.
Paraglide'ın sıfıra yakın kütüphane boyutu yapısı gereğidir: runtime repository'nizin içine üretilir, bu da her push öncesi yeniden üretim adımı ve üretilen dosyalarda merge conflict anlamına gelir. Intlayer vite-intlayer'a (veya Nuxt modülüne) ihtiyaç duyar, bu nedenle build adımı olmadan çalışamaz.
Yanıtlarınızı bir kütüphaneyle eşleştirin
Composition modunda (legacy: false) vue-i18n, runtime-only build göndermek için @intlify/unplugin-vue-i18n ile birlikte. Dilleri import() ile lazy load edin. Bu, çoğu küçük uygulamayı kapsar ve topluluk yanıtları her yerdedir. SFC <i18n> blokları mesajları bileşenle birlikte konumlandırır, bu yardımcı olur; ancak bunların etrafındaki extraction ve TMS araçları JSON kataloglarına göre daha zayıftır, bu nedenle ekibin hangisini kullanacağına erkenden karar verin.
@nuxtjs/i18n size routing stratejisini, hreflang etiketlerini ve dil tespitini kod yazmadan sağlar; bu bile tek başına az sayfalı içerik siteleri için onu haklı çıkarır. Sınırı dil başına katalog yapısıdır: on civarı sayfayı geçtikten sonra SSR payload her route'un metnini taşır. Sizin durumunuz buysa, vue-i18n'i route bazlı mesajlarla manuel olarak bağlayın veya scoped içeriğe geçin. Nuxt i18n yazısı önce routing stratejisi seçimini ele alır.
vue-i18n'in çoğul sözdizimi ("no item | one item | {count} items") ICU değildir ve taşınabilir değildir. Çevirmenlere bunun bildirilmesi gerekir ve bir TMS export'u bunu üretmez. Ya ilk katalog oluşmadan önce format üzerinde anlaşın ya da formatı sağlayıcınızla eşleşen bir kütüphane seçin. Intlayer'ın ICU desteği kısmidir, bu nedenle bugün ICU string'leri alıyorsanız bunu da bir engel olarak değerlendirin.
Build time'da derlenen scoped içeriği tercih edin. Paraglide buraya Vite üzerinde vadedildiği gibi çalışan tree-shaking ile ulaşır. Intlayer buraya bileşen başına tanımlamalarla ulaşır ve yalnızca route'un render ettiği içeriği sunar. vue-i18n ile mesajları elle route'a göre bölebilirsiniz, ancak hiçbir şey bunu zorlamaz ve global bir namespace import eden paylaşılan bir bileşen bunu sessizce bozar.
vue-i18n, createI18n'e bir schema generic geçilerek type'landırılabilir. Çalışır, ancak kataloglar lazy load edildiği anda bozulur, çünkü schema henüz orada olmayabilecek mesajları tanımlar. Bunu yönetmek istemiyorsanız, type'ları içerikten üretilen bir kütüphane seçin: Paraglide veya Intlayer. Eksik çevirileri tespit etme yazısı, her birinin build time sırasında neleri yakaladığını karşılaştırır.
Markdown sayfaları, ortasında <RouterLink> bulunan cümleler, dil bazlı bileşenler. vue-i18n, bileşen interpolasyonu için çalışan ancak ayrıntılı olan <i18n-t> bileşenine sahiptir. Intlayer'ın içerik node'ları doğrudan markdown, HTML ve iç içe nesneleri kabul eder, bu da uygulama içerik ağırlıklı olduğunda daha iyi uyum sağlar.
Bu durumda merkezi JSON'ın varlığını haklı çıkaracak bir kullanıcısı kalmaz. Birlikte konumlandırılmış içerik ve eksik dilleri dolduran bir CLI en kısa yoldur. Intlayer'ın fill komutu kendi API anahtarınızla (OpenAI, Anthropic, Mistral, Gemini) çalışır ve yalnızca değişenleri yeniden çevirir.
Her kütüphanenin yetersiz kaldığı yönler
vue-i18n: grubun en ağırı, kendine ait çoğul formatı, type'lar opt-in ve lazy loading ile kırılgandır, route başına scoping yoktur, kullanılmayan key'ler sessizce birikir. Vue 3 uygulamasındalegacy: truebırakmak Vue 2 uyumluluk katmanını korur veuseI18n()type desteğini kaybettirir.@nuxtjs/i18n: yukarıdakilerin tümünü devralır ve bir düzine route aşıldığında SSR payload her sayfanın string'lerini taşır.fluent-vue: güzel mesaj sözdizimi, key type'ları yok ve Vite eklentisi tüm dillerdeki tüm içeriği her sayfaya yükler. Benchmark'taki en ağır kütüphanedir.- Paraglide: repo'ya commit edilen üretilmiş dosyalar, her push öncesi yeniden üretim ve dil reaktif bir store yerine her mesaj çağrısında cookie veya storage'dan okunur, bu da dil değişiminde ek maliyet yaratır.
- Intlayer: zorunlu build eklentisi, daha küçük ekosistem, kısmi ICU desteği ve tasarım gereği codebase geneline yayılmış içerik, bu yüzden bir çevirmen için tek bir JSON export etmek araç gerektirir.
Her seçeneğin kodda görünümü
Aynı bileşen, bir başlık ve çoğul içeren bir sepet özeti, her adayla yazılmıştır. İlginç olan kısım template değil, içeriğin nerede yaşadığı ve vue-tsc'nin bu konuda ne bildiğidir.
Kodu panoya kopyala
Kodu panoya kopyala
Pipe ile ayrılmış çoğullar vue-i18n'in kendi formatıdır, ICU değildir. createI18n'e bir mesaj schema generic'i iletmediğiniz sürece t herhangi bir string'i kabul eder.
Kodu panoya kopyala
Kodu panoya kopyala
Fluent sözdizimi çoğulları ve gramer varyantlarını iyi yönetir. Mesaj id'leri type tanımlanmamış string'lerdir ve Vite eklentisi her dili her sayfaya paketler.
Kodu panoya kopyala
Kodu panoya kopyala
Her mesaj üretilmiş, type tanımlı bir fonksiyondur, bu nedenle eksik bir key bir import hatasıdır. paraglide/ klasörü repo'nuza üretilir ve her değişiklikte yeniden üretilir.
Kodu panoya kopyala
Kodu panoya kopyala
Tüm diller bileşenin yanındaki tek bir dosyada. Type'lar build sırasında üretilir, bu sayede title otomatik tamamlanır ve bir yazım hatası vue-tsc'yi patlatır. <title /> görsel editörün hedefleyebileceği bir node render eder; {{ items(props.count) }} düz string döndürür.
Halihazırda vue-i18n kullanıyor musunuz? @intlayer/vue-i18n compat adaptörü, paketi bundler düzeyinde alias'lar, böylece Intlayer içeriği sunarken useI18n(), $t, pipe çoğulları ve v-t çalışmaya devam eder. Geçiş rehberi sonrasında adaptörden çıkışı kapsar ve bir de Nuxt'a özel rehber bulunmaktadır.
Karar vermeden önce
Bir özellik tablosu size bir kütüphanenin bugün ne yaptığını söyler. Bu maddeler ise onunla yaşamanın nasıl bir şey olacağını anlatır.
Repository aktivitesini kontrol edin.
Commit'ler, issue yanıt süresi ve son minor sürümün bu yıl çıkıp çıkmadığı. Bakımı yapılmayan sağlam bir tasarım, gerçekleşmeyi bekleyen bir migrasyondur.
npm indirmelerine göre seçim yapmayın.
En çok yüklenen kütüphane ilk çıkan kütüphanedir, 2026 Vue codebase'ine en uygun olan değil. İndirmeler uyumu değil, geçmişi ölçer.

Bakımını üstlenen kişiye kimin ödeme yaptığını ve ne sattıklarını sorun.
vue-i18n, next-intl ve svelte-i18n gibi Crowdin tarafından desteklenmektedir. i18next, Locize tarafından desteklenmektedir. Tolgee, Paraglide (inlang) ve Intlayer'ın her biri kendi platformunu işletmektedir. Geliri barındırılan çeviri olan bir sağlayıcının, araç zinciriniz içinde çeviriyi ücretsiz hale getirmek için pek bir nedeni yoktur. Intlayer, CLI aracılığıyla kendi API anahtarınızla yapay zeka çevirisi sunan ve self-host edebileceğiniz bir CMS sağlayan tek seçenektir.
Yapay zeka ajanlarına hazır mı?
Ajanlar i18n ile hâlâ zorlanıyor: dilleri unutuyorlar, key uyduruyorlar ve mesaj sözdizimlerini karıştırıyorlar. Kütüphane, ajanın içeriği listeleyebilmesi, doldurabilmesi ve test edebilmesi için Agent Skills veya bir MCP server sunuyor mu? Ve içerik yükleme varsayılan olarak optimize edilmiş mi, yoksa birinin her çeyrekte namespace'leri ve lazy import'ları gözden geçirmesi mi gerekiyor?
Kutudan çıktığı gibi Type safety.
"Ekstra yapılandırmayla type eklenebilir" değil, "temiz bir kurulumda yanlış bir key tsc'yi patlatır". Var olmayan bir key ile ve bir çevirisi eksik olan bir dilde ne olduğunu kontrol edin.
Kullanılmayan içeriğin tespiti.
Kataloglar yalnızca büyür. Intlayer'ın build işlemi kullanılmayan alanları temizler ve bunları loglar (build.purge). Paraglide buraya mimarisiyle ulaşır, çünkü çağrılmayan bir mesaj fonksiyonu tree-shake edilir. Diğer her şey temizliği size bırakır.
Developer experience (Geliştirici deneyimi).
İlk çevrilmiş string'e kadar kurulum süresi, hover sırasında çeviriyi gösteren ve tanımlamaya atlayan bir LSP veya VS Code eklentisi, doldurma, test etme ve push işlemleri için bir CLI ve geliştirici olmayanların bir pull request olmadan içeriği düzenlemesinin bir yolu (görsel editör veya CMS).
Sıkça Sorulan Sorular
Çoğu Vue uygulaması için evet. Ekosistem en büyüğüdür, dokümantasyon kapsamlıdır ve maliyetler öngörülebilirdir: ağır bir runtime, özel bir çoğul formatı ve kendi başınıza inşa edip savunmanız gereken route bazlı scoping.
Routing yapınız sıra dışı değilse veya uygulamanız az sayıda sayfaya sahip değilse modülü kullanın. Elle bağlamak; dil route'larını, middleware'i, hreflang'i ve sitemap'i kendiniz yeniden oluşturmanız anlamına gelir ve bunlar göründüklerinden daha zahmetlidir.
Yalnızca bundle boyutu, SSR payload'u, üretilen type'lar veya build time eksik key kontrolleri gerçek gereksinimler ise. Compiler ve deklaratif i18n karşılaştırması yazısı, derleyicilerin size ne sağladığını ve nerelerde yanılabileceğini açıklar.
Dolaylı olarak. Tarayıcı botları routing, hreflang, <html lang> ve metnin sunucu tarafından render edilen HTML içinde olup olmadığı ile ilgilenir. hreflang rehberi içeriğine göz atın.
Daha fazlası
- Vue i18n benchmark: bundle boyutu, sızıntı ve dil değiştirme süreleri
- Vue i18n: vue-i18n nasıl çalışır ve nerede zorlar ve Nuxt i18n yazısı
- vue-i18n ve Intlayer karşılaştırması, özellik özellik ve vue-i18n ve Intlayer benchmark karşılaştırması
- vue-i18n artık eskidi mi?
- JavaScript i18n tarihi
- Compiler ve deklaratif i18n karşılaştırması
- Bileşen bazlı ve merkezi i18n
- Vite + Vue uygulamasında i18n kurulumu ve Nuxt uygulamasında i18n kurulumu
- React, Svelte ve Solid için aynı rehber
Yorumlar
Henüz yorum yok. Düşüncelerinizi paylaşan ilk kişi olun.
