Sorunuzu sorun ve bu sayfaya ve seçtiğiniz AI sağlayıcısına referans vererek belgenin bir özetini alın
Sürüm Geçmişi
- "Build yapılandırmasına `minify` ve `purge` seçenekleri eklendi"v8.7.008.04.2026
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
i18n Bundle Boyutu ve Performans Optimizasyonu
JSON dosyalarına dayalı geleneksel i18n çözümlerindeki en yaygın zorluklardan biri içerik boyutunu yönetmektir. Geliştiriciler içeriği manuel olarak ad alanlarına (namespaces) ayırmazlarsa, kullanıcılar genellikle tek bir sayfayı görüntülemek için her sayfanın ve potansiyel olarak her dilin çevirilerini indirmek zorunda kalırlar.
Örneğin, 10 dilde çevrilmiş 10 sayfası olan bir uygulama, kullanıcının sadece bir sayfaya (mevcut dildeki mevcut sayfa) ihtiyacı olmasına rağmen 100 sayfalık içerik indirmesine neden olabilir. Bu durum bant genişliği israfına ve daha yavaş yükleme sürelerine yol açar.
Intlayer bu sorunu derleme zamanı optimizasyonu ile çözer. Her bileşen başına hangi sözlüklerin gerçekten kullanıldığını tespit etmek için kodunuzu analiz eder ve bundle'ınıza yalnızca gerekli içeriği yeniden yerleştirir.
İçindekiler
Bundle'ınızı Tarayın
Bundle'ınızı analiz etmek, "ağır" JSON dosyalarını ve kod bölme (code-splitting) fırsatlarını belirlemenin ilk adımıdır. Bu araçlar, uygulamanızın derlenmiş kodunun görsel bir ağaç haritasını (treemap) oluşturarak hangi kütüphanelerin en çok yer kapladığını tam olarak görmenizi sağlar.
Vite / Rollup
Vite, arka planda Rollup kullanır. rollup-plugin-visualizer eklentisi, grafiğinizdeki her modülün boyutunu gösteren etkileşimli bir HTML dosyası oluşturur.
Kodu panoya kopyala
npm install -D rollup-plugin-visualizerKodu panoya kopyala
import { defineConfig } from "vite";import { visualizer } from "rollup-plugin-visualizer";export default defineConfig({ plugins: [ visualizer({ open: true, // Raporu tarayıcınızda otomatik olarak aç filename: "stats.html", gzipSize: true, brotliSize: true, }), ],});Nasıl Çalışır?
Intlayer, bileşen başına yaklaşımı kullanır. Global JSON dosyalarının aksine içeriğiniz, bileşenlerinizin yanında veya içinde tanımlanır. Build süreci sırasında Intlayer:
useIntlayerçağrılarını bulmak için kodunuzu analiz eder.- Karşılık gelen sözlük içeriğini oluşturur.
useIntlayerçağrısını yapılandırmanıza bağlı olarak optimize edilmiş kodla değiştirir.
Bu şu avantajları sağlar:
- Bir bileşen içe aktarılmazsa, içeriği bundle'a dahil edilmez (Gereksiz Kod Ayıklama - Dead Code Elimination).
- Bir bileşen geç yüklenirse (lazy-loaded), içeriği de geç yüklenir.
Platforma Göre Kurulum
Next.js
Next.js, dönüşümü yönetmek için @intlayer/swc eklentisine ihtiyaç duyar çünkü Next.js build'ler için SWC kullanır.
Bu eklenti varsayılan olarak yüklenmez çünkü SWC eklentileri Next.js için hala deneysel aşamadadır. Gelecekte değişebilir.
Kodu panoya kopyala
npm install -D @intlayer/swcKurulduktan sonra Intlayer, eklentiyi otomatik olarak algılar ve kullanır.
Yapılandırma
Intlayer'ın bundle'ınızı nasıl optimize edeceğini intlayer.config.ts dosyanızdaki build özelliği aracılığıyla kontrol edebilirsiniz.
Kodu panoya kopyala
import { Locales, type IntlayerConfig } from "intlayer";const config: IntlayerConfig = { internationalization: { locales: [Locales.ENGLISH, Locales.FRENCH], defaultLocale: Locales.ENGLISH, }, dictionary: { importMode: "dynamic", }, build: { /** * Bundle boyutunu küçültmek için sözlükleri minify et. */ minify: true; /** * Sözlüklerdeki kullanılmayan anahtarları temizle (purge) */ purge: true; /** * Build'in TypeScript tiplerini kontrol edip etmeyeceğini belirtir */ checkTypes: false; },};export default config;Çoğu durumda optimize seçeneğini varsayılan halinde bırakmanız önerilir.
Daha fazla detay için yapılandırma dökümanına bakın: Yapılandırma
Build Seçenekleri
build yapılandırma nesnesi altında aşağıdaki seçenekler mevcuttur:
Tüm veri içeriğini net bir şekilde görmek için tabloyu modalde açın
| Özellik | Tür | Varsayılan | Açıklama |
|---|---|---|---|
optimize | boolean | undefined | Build optimizasyonunun etkin olup olmadığını kontrol eder. true ise, Intlayer sözlük çağrılarını optimize edilmiş enjeksiyonlarla değiştirir. false ise optimizasyon devre dışıdır. Prod ortamında true olmalıdır. |
minify | boolean | false | Bundle boyutunu azaltmak için sözlüklerin küçültülüp küçültülmeyeceği. |
purge | boolean | false | Sözlüklerdeki kullanılmayan anahtarların temizlenip temizlenmeyeceği. |
Küçültme (Minification)
Sözlükleri küçültmek gereksiz boşlukları, yorumları temizler ve JSON içeriğinin boyutunu azaltır. Bu, özellikle büyük sözlükler için çok faydalıdır.
Kodu panoya kopyala
import type { IntlayerConfig } from "intlayer";const config: IntlayerConfig = { build: { minify: true, },};export default config;Not: optimize devre dışıysa veya Visual Editor etkinse (editörün düzenleme yapmak için tam içeriğe ihtiyacı olduğundan) küçültme yoksayılır.
Temizleme (Purging)
Temizleme, yalnızca kodunuzda gerçekten kullanılan anahtarların nihai sözlük paketine dahil edilmesini sağlar. Uygulamanızın her yerinde kullanılmayan birçok anahtara sahip büyük sözlükleriniz varsa, bu özellik bundle boyutunu önemli ölçüde azaltabilir.
Kodu panoya kopyala
import type { IntlayerConfig } from "intlayer";const config: IntlayerConfig = { build: { purge: true, },};export default config;Not: optimize devre dışıysa temizleme yoksayılır.
İçe Aktarma Modu (Import Mode)
Birkaç sayfa ve dil içeren büyük uygulamalarda, JSON dosyalarınız bundle boyutunuzun önemli bir kısmını oluşturabilir. Intlayer, sözlüklerin nasıl yükleneceğini kontrol etmenize olanak tanır.
İçe aktarma modu varsayılan olarak intlayer.config.ts dosyanızda global olarak tanımlanabilir.
Kodu panoya kopyala
import type { IntlayerConfig } from "intlayer";const config: IntlayerConfig = { build: { minify: true, },};export default config;Ayrıca her bir sözlük için .content.{{ts|tsx|js|jsx|mjs|cjs|json|jsonc|json5}} dosyalarınızda da tanımlanabilir.
Kodu panoya kopyala
import { type Dictionary, t } from "intlayer";const appContent: Dictionary = { key: "app", importMode: "dynamic", // Varsayılan içe aktarma modunu geçersiz kıl content: { // ... },};export default appContent;Tüm veri içeriğini net bir şekilde görmek için tabloyu modalde açın
| Özellik | Tür | Varsayılan | Açıklama |
|---|---|---|---|
importMode | 'static', 'dynamic', 'fetch' | 'static' | Kullanımdan Kaldırıldı: Bunun yerine dictionary.importMode kullanın. Sözlüklerin nasıl yükleneceğini belirler. |
importMode ayarı, sözlük içeriğinin bileşeninize nasıl enjekte edileceğini belirler.
Bunu intlayer.config.ts dosyasında dictionary nesnesi altında global olarak tanımlayabilir veya belirli bir sözlük için .content.ts dosyasında geçersiz kılabilirsiniz.
1. Statik Mod (default)
Statik modda Intlayer, useIntlayer yöntemini useDictionary ile değiştirir ve sözlüğü doğrudan JavaScript bundle'ına enjekte eder.
- Artıları: Anında işleme (senkron), hidratasyon sırasında fazladan ağ isteği yok.
- Eksileri: Bundle, o belirli bileşen için tüm dillerdeki çevirileri içerir.
- En iyi kullanım alanı: Tek Sayfa Uygulamaları (SPA).
Dönüştürülmüş Kod Örneği:
Kodu panoya kopyala
// Sizin kodunuzconst content = useIntlayer("my-key");// Optimize edilmiş kod (Statik)const content = useDictionary({ key: "my-key", content: { nodeType: "translation", translation: { en: "My title", fr: "Mon titre", }, },});2. Dinamik Mod
Dinamik modda Intlayer, useIntlayer yöntemini useDictionaryAsync ile değiştirir. Bu, mevcut dile özel JSON'u geç yüklemek (lazy-load) için import() (Suspense benzeri mekanizma) kullanır.
- Artıları: Dil düzeyinde tree shaking. İngilizce versiyonunu görüntüleyen bir kullanıcı yalnızca İngilizce sözlüğü indirir. Fransızca sözlüğü asla yüklenmez.
- Eksileri: Hidratasyon sırasında bileşen başına bir ağ isteği (varlık getirme) tetikler.
- En iyi kullanım alanı: Bundle boyutunun kritik olduğu çok sayıda dil desteği sağlayan sayfalar veya büyük metin blokları.
Dönüştürülmüş Kod Örneği:
Kodu panoya kopyala
// Sizin kodunuzconst content = useIntlayer("my-key");// Optimize edilmiş kod (Dinamik)const content = useDictionaryAsync({ en: () => import(".intlayer/dynamic_dictionary/my-key/en.json").then( (mod) => mod.default ), fr: () => import(".intlayer/dynamic_dictionary/my-key/fr.json").then( (mod) => mod.default ),});importMode: 'dynamic'kullanırken tek bir sayfadauseIntlayerkullanan 100 bileşeniniz varsa, tarayıcı 100 ayrı getirme (fetch) isteği deneyecektir. Bu istek "şelalesinden" (waterfall) kaçınmak için içeriği atom bileşen başına bir tane yerine daha az sayıda.contentdosyasında (örneğin sayfa bölümü başına bir sözlük) gruplandırın.
3. Getirme Modu (Fetch Mode)
Dinamik mod gibi davranır ancak önce sözlükleri Intlayer Live Sync API'den getirmeye çalışır. API çağrısı başarısız olursa veya içerik canlı güncellemeler için işaretlenmemişse dinamik içe aktarmaya (dynamic import) geri döner.
Daha fazla detay için CMS dökümanına bakın: CMS
Getirme modunda temizleme (purge) ve küçültme (minification) kullanılamaz.
Özet: Statik vs Dinamik
Tüm veri içeriğini net bir şekilde görmek için tabloyu modalde açın
| Özellik | Statik Mod | Dinamik Mod |
|---|---|---|
| JS Bundle Boyutu | Daha Büyük (Bileşen için tüm dilleri içerir) | En Küçük (Yalnızca kod, içerik yok) |
| İlk Yükleme | Anında (İçerik bundle içindedir) | Hafif gecikme (JSON'u getirir) |
| Ağ İstekleri | 0 ek istek | Sözlük başına 1 istek |
| Tree Shaking | Bileşen düzeyinde | Bileşen düzeyinde + Dil düzeyinde |
| En İyi Kullanım | Kullanıcı Arayüzü Bileşenleri, Küçük Uygulamalar | Bol metinli sayfalar, Çok sayıda dil |