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
vue-i18n VS @intlayer/vue-i18n: Aynı API, Farklı Bundle
@intlayer/vue-i18n, bir uyumluluk adaptörüdür: vue-i18n API'sini (createI18n, useI18n, t(), d(), n(), $t, v-t, i18n.global.locale...) ortaya çıkarır ve bunu Intlayer tarafından derlenmiş sözlüklerden sunar. .vue dosyalarınız değişmez. t("footer.github")'nin bağlı olduğu şey değişir.
Bu makale, aynı Vite + Vue 3 uygulamasında bu değişimi ölçer; bir kez vue-i18n ile ve bir kez adapter ile oluşturulmuştur. Sayılar Benchmark Bloom kaynağından gelmektedir. vue-i18n ve Intlayer'ı kütüphaneler olarak karşılaştırmak için vue-i18n vs Intlayer ve vue-i18n vs Intlayer benchmark makalesini okuyun. Bu makale, bileşenlerinizi olduğu gibi tuttuğunuzda adapterın ne değiştirdiği hakkındadır.
tl;dr: Aynı Vite + Vue 3 uygulamasında,vue-i18nyerine@intlayer/vue-i18nkullanmak sayfa başına JavaScript'i gzip olarak 134.9 KB'den 47.0 KB'ye düşürdü (i18n olmadan uygulama 41.3 KB ağırlığında), runtime'ı 24.3 KB'den 7.9 KB'ye, ortalama component'i 196 KB'den 8.4 KB'ye ve yabancı sayfa string sızıntısını %90'dan %0'a indirdi, hiçbir.vuedosyası düzenlenmedi.createI18n({ messages })fallback olarak çalışmaya devam eder; yukarıdaki sayıları elde etmek için JSON imports'ları kaldırın. SFC<i18n>blokları ve runtimesetLocaleMessage(), bu özelliklerin aktarılmayan iki özelliğidir.
@intlayer/vue-i18n nedir
vue-i18n bir çalışma zamanıdır. createI18n({ messages: { en, fr, ... } }) her yerel ayarın tüm mesajlarını tutan genel bir örnek oluşturur; useI18n() her bileşeni buna bağlar; t("footer.github") render zamanında ağacı dolaşır. Bu tasarım, SFC <i18n> bloklarını ve setLocaleMessage() mümkün kılan şeydir ve aynı zamanda her bileşenin bağımlılık grafiğinin tüm ağacı içermesinin nedenidir.
@intlayer/vue-i18n API'yi korur ve ağacı değiştirir:
- İçe aktarma takma adı.
@intlayer/vue-i18n/pluginiçindekivueI18nVitePlugin(),vite-intlayer'ı sarmalanır vevue-i18n'in@intlayer/vue-i18nolarak çözülmesi için birresolve.aliasekler. Hiçbir içe aktarma yeniden adlandırılmaz. - JSON as source of truth. The
syncJSONplugin reads your existinglocales/{locale}.jsonwithformat: "vue-i18n"(so{name},{0}list interpolation and"car | cars"pipe plurals are parsed correctly) and writes translations back when the CLI or the CMS updates them. - Call-site binding. The Intlayer optimize pass rewrites
useI18n()call sites so the component receives the dictionaries its keys name, in the active locale, as imports the bundler can trace and split.
Kodu panoya kopyala
Kodu panoya kopyala
Bileşen artık global mesaj ağacına ulaşmıyor. Yalnızca footer'a ulaşıyor. Bu nedenle aşağıdaki bileşen boyutu sütunu 196 KB'den 8 KB'ye düşüyor.
Adaptörün ne tuttuğu, ne görmezden geldiği ve ne değiştirmediği
Tüm veri içeriğini net bir şekilde görmek için tabloyu modalde açın
vue-i18n API | @intlayer/vue-i18n ile |
|---|---|
useI18n() → { t, d, n, te, tm, rt, locale, availableLocales } | ✅ Korundu. t anahtarları sözlüklerinize göre yazılmıştır |
t("key", { name }), t("key", [a, b]), t("key", count) | ✅ Korundu. {name}, {0} ve pipe ile ayrılmış çoğullar daha önce olduğu gibi çözülür |
d(date, "long"), n(value, "currency") | ✅ Korundu. createI18n() öğesinden datetimeFormats / numberFormats yerine getirilir, yerel Intl ile desteklenir |
i18n.global.locale.value = "fr" | ✅ Korundu. Intlayer'in istemcisi tarafından desteklenen bir WritableComputedRef; reaktivite önceki gibi davranır |
$t, $tc, $te, $tm, $rt, $d, $n, $i18n (Options API) | ✅ Korundu. app.use(i18n) tarafından app.config.globalProperties üzerine kaydedildi |
v-t directive | ✅ Korundu |
legacy: true | ✅ Kabul edildi |
createI18n({ messages }) | ⚠️ messages bir runtime fallback olarak kullanılır ve dev uyarısı gösterilir. Bundle kazançları için JSON importlarını kaldırın |
setLocaleMessage(), mergeLocaleMessage() | ❌ Uyarı gösterilir ve hiçbir şey yapmaz. Runtime message yükleme, build-time sözlükleri ile değiştirilir |
SFC <i18n> custom blocks | ❌ Okunmaz. Bu mesajları locale JSON'a (veya bileşenin yanındaki .content.ts'e) taşıyın |
@nuxtjs/i18n | ⚠️ Ayrı adapter, bkz. Nuxt compat docu |
Benchmark
Ölçülen içerik
Benchmark Bloom paketi, aynı Vite + Vue 3 uygulamasını her setup ile derler: 10 sayfa (home, about, blog, careers, contact, FAQ, pricing, products, settings, team), 10 locale (en, fr, es, de, it, pt, zh, ja, ko, ru), özdeş bileşenler ve özdeş içerik. Sayfalar en ve fr dilinde ölçülür.
Her ikisi de static konfigürasyonda derlenmiştir; çoğu Vue projesinin sevk ettiği konfigürasyon: vue-i18n için, her locale'in JSON'u import edilip createI18n({ messages }) öğesine iletilir; adapter için, vite.config.ts ve intlayer.config.ts değiştirilmiş aynı bileşenler ve messages import'u kaldırılmıştır. Referans için native vue-intlayer dahil edilmiştir.
Her derleme için, suite şunları kaydeder:
- Kütüphane boyutu: i18n kütüphanesini yalnızca içe aktaran boş bir bileşenin gzip (ve küçültülmüş) boyutu.
- Sayfa JS: sayfa başına indirilen gzip JavaScript, tüm sayfalar ve locale'ler üzerinde ortalama.
- Locale sızıntısı %: indirilen JS'teki çevrilmiş dizelerin kullanıcının görüntülemediği bir locale'e ait olan yüzdesi.
- Sayfa sızıntısı %: indirilen JS'teki çevrilmiş dizelerin kullanıcının bulunmadığı bir sayfaya ait olan yüzdesi.
- Bileşen ortalaması: izolasyon halinde derlenen her bileşenin ortalama gzip boyutu.
- E2E tepkisellik: yeni bir locale seçimi ile DOM'da
html[lang]güncellemesi arasındaki duvar saati zamanı (Playwright, 5 yineleme). - Sayfa yükleme:
PerformanceNavigationTiming.duration.
Aşağıdaki rakamlar 2026-09-12 tarihindevue-i18n11.4.0 ve@intlayer/vue-i18n9.5.1 ile yapılan çalıştırmadan gelmiştir. Test uygulaması kasıtlı olarak küçüktür (locale başına birkaç düzine string), bu nedenle sızıntı yüzdeleri bir pattern açıklar: içeriğiniz büyüdükçe artar, ancak runtime maliyeti sabit kalır.
Vite + Vue 3 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
| Kurulum | Strategi | Lib size (gz) | Lib size (min) | Page JS avg (gz) | Locale leak | Page leak | Component avg (gz) | E2E reactivity | Page load |
|---|---|---|---|---|---|---|---|---|---|
| base (i18n yok) | - | 0.0 KB | 0.0 KB | 41.3 KB | 0.0% | - | 1.1 KB | 1.8 ms | 10.8 ms |
vue-i18n | static | 24.3 KB | 83.2 KB | 134.9 KB | 50.0% | 90.0% | 196.0 KB | 2.8 ms | 13.6 ms |
@intlayer/vue-i18n | static | 7.9 KB | 23.2 KB | 47.0 KB | 15.0% | 0.0% | 8.4 KB | 1.5 ms | 9.3 ms |
vue-intlayer (native) | static | 3.9 KB | 11.1 KB | 57.1 KB | 56.8% | 0.0% | 7.7 KB | 4.5 ms | 13.8 ms |
vue-intlayer (native) | dynamic | 3.9 KB | 11.1 KB | 59.8 KB | 50.0% | 0.0% | 6.5 KB | 4.0 ms | 15.8 ms |
Temel uygulamanın page-leak sütunu boş bırakılmıştır: i18n kütüphanesi olmadan, parmak izi alma paylaşılan chunk'lardaki sabit kodlanmış stringleri alır ve sayı anlamlı değildir.
Nasıl okunur
- Sayfa başına 88 KB daha az, aynı bileşenler.
vue-i18n, 41.3 KB uygulamayı 134.9 KB olarak alır. Aynı bileşenlerin adapter derlemesi 47.0 KB ile sonuçlanır, temel uygulamadan 5.7 KB üstündedir. Farkın çoğu,createI18n({ messages })tarafından her sayfaya çekilen 74.9 KBsrc/localesve adaptörün asla bir blok olarak paketlemediği şeydir. - Runtime 3 kat küçülüyor. Sadece
vue-i18niçe aktaran boş bir component 24.3 KB gzip / 83.2 KB minified maliyetlidir:@intlify/core-base, mesaj derleyicisi ve runtime. Adapter 7.9 KB / 23.2 KB maliyetlidir, çoğunluğu Intlayer'ın core'u artıvue-i18nAPI surface'idir. - Componentler: 23 kat daha küçük. İzolasyon halinde derlenen bir
useI18n()component ortalaması 196 KB'dir, çünküther locale'in her mesajını tutan instance'a bağlıdır. Adapter ile aynı component ortalaması 8.4 KB'dir: kendi sözlüğüne ulaşır. - Sızıntı.
vue-i18n, her yerel ayarı ve her sayfanın dizelerini her sayfada gönderir: %50 yerel ayar sızıntısı (iki parmakli yerel ayarda; on yerel ayar paketlenmiş olsa bile gerçek harcama daha yüksektir), %90 sayfa sızıntısı. Adapter, her bileşen yalnızca kendi sözlüklerini içe aktardığından sayfa sızıntısını %0'a düşürür. Bustaticçalıştırmada yerel ayar sızıntısı %15'tedir;importMode: 'dynamic'bunu kaldıran ayardır ve bu yapılandırma bu Vue çalıştırmasının bir parçası değildi. - Reaktivite ve sayfa yükü. Yerel ayar değiştirme her ikisi için de ucuzdur (1,5-2,8 ms); Vue'nin reaktivite sistemi mesajlar bellekte olduktan sonra bunu sağlar. Sayfa yükü 13,6 ms'den 9,3 ms'ye gider; ayrıştırılacak 88 KB daha az JavaScript ile uyumludur.
- Yerel satırlar hakkında.
vue-intlayerbu çalıştırmadastaticmodunda her yerel ayarı paketledi ve 3,9 KB çalışma zamanı ile 57,1 KB'ye ulaştı; adaptörün senkronize edilen sözlükleri daha az yabancı yerel ayar dizesi içeriyordu, bu nedenle sayfa başına daha düşük rakam. Yerel çalışma zamanı üçünün en hafifi olmaya devam ediyor ve.content.tsmodeli SFC<i18n>bloklarının eşdeğerini bulduğu yerdir.
Tüm tablo, her kütüphane ve her strateji, Vue kıyaslama raporunda.
Sayılar neden değişiyor

src/components/ içinde hiçbir şey değişmedi, bu nedenle kazançlar useI18n bağlı olduğu şeyden geliyor.
vue-i18n ile, bağlama global örnek olur. createI18n({ messages: { en, fr, ... } }) her şeyi içeren tek bir importtur; useI18n() çağıran her bileşen tümüne erişebilir, bu nedenle bundler örneğin altında bölemez. Optimize etmek, siz en.json dosyasını rota tarafından bölmeniz, bir router guard içinde setLocaleMessage() çağırmanız ve bileşenler hareket ettikçe rota-dosya haritasını doğru tutmanız anlamına gelir. İsraf aynı anda iki eksende büyür, sayfalar ve diller:

Kodu panoya kopyala
@intlayer/vue-i18n ile, binding sözlüktür. syncJSON her en.json dosyasının üst düzey anahtarını bir sözlüğe dönüştürür; optimize işlemi komponente adlarını verdiği anahtarları, bundler'ın izlediği ve sayfa başına böldüğü importlar olarak geçirir.
Kodu panoya kopyala
i18n.ts dosyasındaki messages import'ı silinecek tek satırdır. Bu 88 KB'dir.
Üç adımda geçiş
Kurulum
bashKodu kopyalaKodu panoya kopyala
Komut
vue-i18n'i algılar,intlayer,vue-intlayer,@intlayer/vue-i18nve@intlayer/sync-json-plugin'i kurar veintlayer.config.ts'i önceden doldurur.vue-i18n'i kurulu tutun: bu bir peer bağımlılığıdır ve türleri sağlar.Intlayer'ı yerel dosyalarınıza yönlendirin
intlayer.config.tsKodu kopyalaKodu panoya kopyala
locales/{locale}.jsonbulunduğu yerde kalır. Her üst düzey anahtar (footer,hero...) bir sözlük haline gelir.Eklentiyi ekleyin ve mesaj importunu kaldırın
vite.config.tsKodu kopyalaKodu panoya kopyala
src/i18n.tsKodu kopyalaKodu panoya kopyala
vueI18nVitePlugin()eklentisivite-intlayer'ı (içerik izleme, sözlük derleme, optimize geçişi) sarmaladığından vevue-i18n'i adaptöre alias ettiğinden;messagesimportunu kaldırmak 88 KB'lik tasarrufu sağlar; bunu bırakmak uygulamanın çalışmasını devam ettirse de hem eski hem de yeni versiyonu yükler.
Sonra silebileceğiniz şeyler
Tüm veri içeriğini net bir şekilde görmek için tabloyu modalde açın
| Dosya / pattern | Nedeni |
|---|---|
import en from "./locales/en.json" ve benzerleri | Adapter tarafından yalnızca fallback olarak kullanılır. 88 KB'ın geldiği yer burasıdır |
Router guards içindeki setLocaleMessage() | İşlevsiz. Route başına yükleme artık derleyicinin işidir |
@intlify/unplugin-vue-i18n | Gerekli değildir: mesajları önceden derler ve SFC blokları adapter tarafından okunmaz |
SFC <i18n> blokları | Okunmaz; bunları locale JSON'ına veya bileşen başına .content.ts dosyasına taşıyın |
Baytların ötesinde neler kazanırsınız
- Yazılı anahtarlar.
t("footer.github")derlenmişfootersözlüğüne karşı yazılıdır; yanlış bir yol, metni anahtar olarak render etmek yerine bir TypeScript hatasıdır. npx intlayer testherhangi bir locale'de eksik bir anahtar için CI'yi başarısız kılar.npx intlayer filleksik olanları kendi sağlayıcı anahtarınızla (OpenAI, Anthropic, Mistral, Gemini...) çevirir ve bunlarılocales/{locale}.jsondosyasına geri yazar.- Visual Editor ve CMS aynı JSON üzerinde çalışır, bu nedenle geliştirici olmayanlar bir UI aracılığıyla düzenler ve dosyalar güncellenir.
.content.tsdosyasına kademeli geçiş. Herhangi bir component, bir co-located content dosyası ileuseI18n()öğesindenuseIntlayer("footer")öğesine geçebilir. JSON ve.content.tssözlükleri bir arada bulunur ve birleşir.
Başlamadan önce bilmeniz gereken sınırlamalar
Mesajlarınız bileşenlerin içindeyse, yerel ayarlara ait dosyalara veya üretilen tiplerle aynı mantıkta olan .content.ts dosyasına taşınmalıdır.
setLocaleMessage() ve mergeLocaleMessage() bir uyarı verip geri döner. Çalışma zamanında bir CMS'ten çekilen çeviriler, Intlayer CMS veya intlayer pull / push komutlarını gerektirir.
createI18n() içindeki JSON içe aktarmalarını tutmak, pakette 75 KB tutmaya devam eder. intlayer test başarıyla geçtikten sonra bunları silin.
vue-intlayer için 3.9 KB iken adaptör için 7.9 KB. Her bileşen useIntlayer kullanımına geçtikten sonra kaldırın.
Hangisini ne zaman kullanmalı?
Uygulamanız SFC <i18n> bloklarına veya çalışma zamanı setLocaleMessage() akışlarına bağımlıysa ya da sayfa başına 90 KB kitleniz için bir endişe kaynağı değilse.
vue-i18n kullanıyorsanız ve hiçbir .vue dosyasını düzenlemeden 88 KB tasarruf, 23 kat daha küçük bileşenler, %0 sayfa sızıntısı, tiplenmiş anahtarlar ve CI denetimleri istiyorsanız. Mevcut bir vue-i18n kod tabanı için giriş noktası budur.
Yeni projeler için veya adaptör görevini tamamladıktan sonra. En hafif çalışma zamanına (3.9 KB) ve <i18n> bloklarını tiplenmiş içerikle değiştiren bileşen başına .content.ts modeline sahiptir. Vue ile Intlayer veya Nuxt ile başlayın.
SSS
Hayır. Kıyaslama derlemesi yalnızca vite.config.ts, intlayer.config.ts ve src/i18n.ts dosyasındaki messages içe aktarımını değiştirdi. Her useI18n(), $t, v-t ve Options API çağrısı olduğu gibi kaldı.
Çünkü useI18n() artık genel örneğe erişmeyi bırakır. createI18n({ messages }) her yerel ayarın tüm mesajlarını tutar, bu nedenle tek başına derlenen bir bileşen 196 KB yük getirir. Adaptörle yalnızca kendi sözlüğüne erişir: 8.4 KB.
Korundu. createI18n() işlevine iletilen datetimeFormats ve numberFormats yapılandırmalarına uyulur ve yerel Intl API'si ile desteklenir. Bkz. tarih, saat ve sayı biçimlendirmesi.
@intlayer/vue-i18n Vite + Vue hedefler. @nuxtjs/i18n için Nuxt i18n uyumluluk adaptörünü kullanın ve yerel kurulum için Nuxt ile Intlayer sayfasına bakın.
Evet. Herhangi bir bileşen, aynı dizinde bulunan bir içerik dosyasıyla useI18n() kullanımından useIntlayer("footer") kullanımına geçebilir. JSON ve .content.ts sözlükleri bir arada var olur ve birleşir.
İlgili karşılaştırmalar

Aynı adaptör serisi:
Doğrudan karşılaştırılan kütüphaneler:
Referans belgeler:
Bu kütüphanelerin nereden geldiğini anlamak için JavaScript i18n tarihini okuyun.
Sonuç
@intlayer/vue-i18n, useI18n() işlevini değiştirir: her yerel ayarın her mesajını tutan global bir instance'dan, o bileşen için derlenmiş bir sözlüğe. 88 KB daha küçük sayfa başına, 3x daha küçük runtime, 23x daha küçük bileşenler ve %0 sayfa sızıntısı ile aynı Vite + Vue 3 uygulamasında, bir config dosyası, bir plugin satırı ve silinen bir import için. SFC <i18n> blokları ve runtime message yüklenmesi, taşımadığı iki şeydir ve native vue-intlayer runtime'ı boyutunun yarısı kalır.
Tüm ham veriler, test uygulamaları ve scriptler Benchmark Bloom repository içinde bulunmaktadır. Kendiniz çalıştırabilirsiniz.
Daha fazla ayrıntı için 'Neden Intlayer?' dokümantasyonuna bakınız.
Yorumlar
Henüz yorum yok. Düşüncelerinizi paylaşan ilk kişi olun.
