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ı
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.
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.
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
- SFC
<i18n>blokları okunmaz. Mesajlarınız componentler içinde bulunuyorsa, bunların locale dosyalarına (veya türleri olan.content.tsdosyasına, bu da aynı fikrin türlü halidir) taşınması gerekir. - Runtime mesaj yükleme kaldırılmıştır.
setLocaleMessage()vemergeLocaleMessage()uyarı verir ve geri döner. CMS'den runtime'da alınan çeviriler, Intlayer'ın CMS'ini veyaintlayer pull/pushkomutlarını gerektirir. messagesbir fallback'tir, ücretsiz değildir.createI18n()içindeki JSON import'larını tutmak, bundle'a 75 KB ekler.intlayer testgeçtikten sonra bunları silin.- Adapter, native runtime değildir. 7.9 KB vs
vue-intlayeriçin 3.9 KB. Her componentuseIntlayer'a geçtikten sonra bunu kaldırabilirsiniz.
Hangisini ne zaman kullanmalı?
vue-i18nüzerinde kalın eğer uygulamanız SFC<i18n>blocks'a, runtimesetLocaleMessage()flows'a bağlı ise, veya 90 KB per page sizin audience'ınız için bir sorun değilse.@intlayer/vue-i18nkullanın eğervue-i18nüzerindeyseniz ve 88 KB, 23x daha küçük components, 0% page leakage, typed keys ve.vuedosyasını düzenlemeden CI checks istiyorsanız. Bu, mevcut birvue-i18ncodebase'i için giriş noktasıdır.- Native'ye gidin (
vue-intlayer) yeni projeler için veya adapter işini bitirdikten sonra. En hafif runtime'a (3.9 KB) ve<i18n>blocks'ı typed content ile değiştiren per-component.content.tsmodelini içerir.
İlgili karşılaştırmalar
- vue-i18n vs Intlayer (özellikler ve DX)
- vue-i18n vs Intlayer benchmark (kütüphaneler, aynı benchmark)
- next-intl vs @intlayer/next-intl (aynı adapter serisi)
- i18next vs @intlayer/i18next (aynı adapter serisi)
- Lingui vs @intlayer/lingui (aynı adapter serisi)
- Geçiş rehberi: vue-i18n to Intlayer
- Compat adapter reference: vue-i18n, Nuxt i18n
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.
