Yazar:
    Oluşturma:2025-11-25Son güncelleme:2026-08-09

    i18n Paket Boyutu ve Performans Optimizasyonu

    JSON dosyalarına dayanan geleneksel i18n çözümlerinde en yaygın zorluklardan biri içerik boyutunu yönetmektir. Geliştiriciler içeriği manuel olarak isim alanlarına (namespaces) ayırmazlarsa, kullanıcılar genellikle yalnızca tek bir sayfayı görüntülemek için her sayfanın ve potansiyel olarak her dilin çevirilerini indirir.

    Örneğin, 10 dilde çevrilmiş 10 sayfalı bir uygulama, bir kullanıcının yalnızca birine (geçerli dilde geçerli sayfaya) ihtiyacı olmasına rağmen 100 sayfanın içeriğini indirmesine neden olabilir. Bu da israf edilen bant genişliği ve daha yavaş yükleme süreleri anlamına gelir.

    Intlayer bu sorunu build zamanı optimizasyonlarıyla çözer. Kodunuzu analiz ederek her bileşen (component) için gerçekte hangi sözlüklerin kullanıldığını tespit eder ve yalnızca gerekli içeriği paketinizin (bundle) içine yeniden enjekte eder.

    İçindekiler

    Paketinizi analiz edin

    Paketinizi analiz etmek, "ağır" JSON dosyalarını ve kod bölme (code-splitting) fırsatlarını belirlemede atılacak ilk adımdır. Bu araçlar, uygulamanızın derlenmiş (compiled) kodunun görsel bir treemap'ini oluşturarak tam olarak hangi kütüphanelerin en çok yer kapladığını görmenize olanak tanır.

    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ı üretir.

    bash
    npm install -D rollup-plugin-visualizer
    
    vite.config.ts
    import { defineConfig } from "vite";
    import { visualizer } from "rollup-plugin-visualizer";
    
    export default defineConfig({
      plugins: [
        visualizer({
          open: true, // Raporu otomatik olarak tarayıcınızda açar
          filename: "stats.html",
          gzipSize: true,
          brotliSize: true,
        }),
      ],
    });
    

    Next.js (Turbopack)

    App Router ve Turbopack kullanan projelerde, Next.js ekstra bir bağımlılığa ihtiyaç duymayan yerleşik, deneysel bir analizör sağlar.

    bash
    npx next experimental-analyze
    

    Next.js (Webpack)

    Next.js'de varsayılan Webpack paketleyiciyi kullanıyorsanız, resmi bundle analyzer'ı kullanın. Bunu derleme (build) sırasında bir ortam değişkeni ayarlayarak tetikleyebilirsiniz.

    bash
    npm install -D @next/bundle-analyzer
    
    next.config.js
    const withBundleAnalyzer = require("@next/bundle-analyzer")({
      enabled: process.env.ANALYZE === "true",
    });
    
    module.exports = withBundleAnalyzer({
      // Next.js yapılandırmanız
    });
    

    Kullanımı:

    bash
    ANALYZE=true npm run build
    

    Standart Webpack

    Create React App (ejected), Angular veya özel Webpack yapılandırmaları için endüstri standardı olan webpack-bundle-analyzerı kullanın.

    bash
    npm install -D webpack-bundle-analyzer
    
    webpack.config.ts
    import { BundleAnalyzerPlugin } from "webpack-bundle-analyzer";
    
    export default {
      plugins: [
        new BundleAnalyzerPlugin({
          analyzerMode: "static",
          reportFilename: "bundle-analyzer.html",
          openAnalyzer: false,
        }),
      ],
    };
    

    Nasıl Çalışır

    Intlayer, bileşen başına bir yaklaşım kullanır. Global JSON dosyalarının aksine, içeriğiniz bileşenlerinizin yanında veya içinde tanımlanır. Derleme işlemi sırasında Intlayer şunları gerçekleştirir:

    1. useIntlayer çağrılarını bulmak için kodunuzu analiz eder.
    2. Karşılık gelen sözlük (dictionary) içeriğini oluşturur.
    3. useIntlayer çağrısını, yapılandırmanıza göre optimize edilmiş kod ile değiştirir.

    Bu şu anlamlara gelir:

    • Bir bileşen (component) import edilmezse, içeriği de pakete (bundle) dahil edilmez (Dead Code Elimination).
    • Bir bileşen lazy-loaded (tembel yükleme) ile çağrılırsa, içeriği de lazy-loaded olur.

    Eklenti (Plugin) Referansı

    Intlayer'ın derleme optimizasyonu, her birinin tek bir sorumluluğu olduğu birkaç ayrı eklentiye bölünmüştür. Her birinin ne işe yaradığını anlamak yapılandırma sırasında karışıklığı önler.

    Babel eklentileri (@intlayer/babel)

    Bunlar doğrudan Webpack tabanlı yapılandırmalarda (Babel ile kullanılan Next.js, CRA, özel Webpack vb.) babel.config.js içinde kullanılır.

    Aşağıdaki tablo bunları gerekli pipeline sırasına göre listeler (babel.config.js içinde görünmeleri gereken sırayla aynı):

    Eklenti Ne yapar
    intlayerExtractBabelPlugin .content.ts dosyalarını tarayarak derlenmiş sözlükleri .intlayer/ altına yazar
    intlayerPurgeBabelPlugin Tüm kaynak dosyaları tarar, derlenmiş .intlayer/**/*.json sözlük dosyalarından kullanılmayan içerik alanlarını temizler
    intlayerMinifyBabelPlugin JSON dosyalarındaki ve kaynak koddaki içerik alanı anahtarlarını kısa alfabetik isimlere (alias) (titlea) dönüştürür
    intlayerOptimizeBabelPlugin useIntlayer('key') çağrısını useDictionary(hash) olarak yeniden yazar ve ilgili sözlük için eşleşen bir import ifadesi enjekte eder
    Eklenti sırası önemlidir. babel.config.js dosyanızda purge ve minify eklentileri optimize eklentisinden önce gelmelidir. Optimize aşaması useIntlayer('key') öğesini belirsiz bir useDictionary(hash) çağrısı ile değiştirdiğinden, purge ve minify işlemlerinin hangi alanların kullanıldığını tespit edebilmesi için gerekli olan sözlük anahtar bilgisi kaybolur.

    Her Babel eklentisi, yapılandırma yüklenme zamanında intlayer.config.ts'yi bir kez okuyan ve önceden çözümlenmiş değerler döndüren, kendisine eşlik eden bir opsiyon yardımcısı (options helper) içerir:

    Opsiyon yardımcısı Birlikte kullanıldığı eklenti
    getExtractPluginOptions() intlayerExtractBabelPlugin
    getPurgePluginOptions() intlayerPurgeBabelPlugin
    getMinifyPluginOptions() intlayerMinifyBabelPlugin
    getOptimizePluginOptions() intlayerOptimizeBabelPlugin

    Vite eklentileri (vite-intlayer)

    Vite kullanıcıları bunları asla doğrudan yapılandırmaz. Bunlar vite.config.ts içinde withIntlayer() fonksiyonu çağrıldığında otomatik olarak bağlanır. intlayer.config.ts içindeki build.purge ve build.minify bayrakları, ek bir eklenti kaydına (registration) gerek kalmadan karşılık gelen davranışı etkinleştirip kapatır.

    Dahili Vite eklentisi Eşdeğer davranışı
    Usage analyzer intlayerPurgeBabelPlugin analizi ile aynı
    Dictionary prune intlayerPurgeBabelPlugin JSON yazma adımı ile aynı
    Dictionary minify intlayerMinifyBabelPlugin JSON yazma adımı ile aynı
    Babel transform intlayerMinifyBabelPlugin kaynak kod yeniden adlandırması + intlayerOptimizeBabelPlugin aynı

    SWC eklentisi (@intlayer/swc)

    Next.js kullanıcıları da bunları asla doğrudan yapılandırmaz. v9.2.1'den itibaren next.config.ts içindeki withIntlayer(), yalnızca build.purge ve build.minify bayraklarına dayanarak tüm pipeline'ı — purge, minify ve import yeniden yazımını — çalıştırır.

    İş ikiye bölünmüştür, çünkü bir SWC Wasm eklentisi her seferinde tek bir dosyayı dönüştürür ve dosya sistemine erişimi yoktur:

    Geçiş Nerede çalışır Ne yapar
    Kullanım analizi + JSON purge/minify Node, withIntlayer() içinde Her bileşen kaynak dosyasını okur, .intlayer/**/*.json dosyalarını yeniden yazar, yeniden adlandırma tablolarını üretir
    Kaynak kodu yeniden yazımı (content.title.a) @intlayer/swc (Wasm) Yeniden adlandırma tablolarını kodunuzdaki eşleşen özellik erişimlerine uygular
    Import yeniden yazımı (useIntlayer → dict) @intlayer/swc (Wasm) intlayerOptimizeBabelPlugin ile aynı

    Hangi alanların kullanılmadığına ve her birinin hangi takma adı alacağına karar vermek dosyalar arası durum ve dosya G/Ç gerektirir; bu nedenle bu yarısı Node'da çalışır ve SWC eklentisi yalnızca ortaya çıkan tabloları alır.

    Platforma Göre Kurulum

    Next.js

    Next.js, derlemeler için SWC kullandığından @intlayer/swc eklentisini gerektirir. v9.2.1'den itibaren bu tek paket tüm pipeline'ı kapsar — optimize (import yeniden yazımı), purge ve minify.

    Bu eklenti varsayılan olarak yüklenmez çünkü SWC eklentileri Next.js için hala deneysel aşamadadır. İlerleyen zamanlarda bu durum değişebilir.
    Next.js 16.1.0 minimum sürümdür. SWC'nin ileriye dönük uyumlu Wasm eklenti ABI'si üzerine kurulan ilk sürümdür; daha eski sürümler eklentiyi reddeder. withIntlayer projenizin Next.js sürümünü okur ve 16.1.0'ın altında eklentiyi hiç kaydetmez — bu derlemeler yine de başarılı olur, sadece paket optimizasyonu olmadan çalışır.
    bash
    npm install -D @intlayer/swc
    
    Cargo.toml
    [dependencies]
    intlayer-swc-plugin = "*"
    

    View on Crates.io

    Yüklendikten sonra Intlayer eklentiyi otomatik olarak algılar ve kullanır.

    Purge ve minify geçişleri (alan kaldırma ve alan yeniden adlandırma) ek bir paket veya babel.config.js gerektirmez. Yapılandırmanızı withIntlayer ile sarın ve bayrakları intlayer.config.ts içinde açın:

    next.config.ts
    import { withIntlayer } from "next-intlayer/server";
    import type { NextConfig } from "next";
    
    const nextConfig: NextConfig = {/* yapılandırmanız */};
    
    export default withIntlayer(nextConfig);
    
    intlayer.config.ts
    import type { IntlayerConfig } from "intlayer";
    
    const config: IntlayerConfig = {
      build: {
        purge: true, // paketlenen JSON'dan kullanılmayan içerik alanlarını kaldırır
        minify: true, // içerik alanı anahtarlarını kısa takma adlara dönüştürür
      },
    };
    
    export default config;
    

    next build sırasında withIntlayer kaynaklarınızı analiz eder, derlenmiş sözlükleri yeniden yazar ve elde edilen alan yeniden adlandırma tablolarını @intlayer/swc eklentisine iletir; eklenti de kodunuzdaki eşleşen özellik erişimlerini günceller.

    withIntlayerSync yerine asenkron withIntlayer kullanın. Senkron sürüm analiz pipeline'ını çalıştırmaz, bu nedenle purge ve minify onunla hiçbir etki yaratmaz.
    Purge ve minify yalnızca next build sırasında çalışır — optimize pipeline'ı next dev sırasında kapalıdır.
    Uyumluluk adaptörü çağıranları yapılandırıldığında da devre dışı kalırlar (swcExtraCallers; @intlayer/next-intl veya @intlayer/react-i18next gibi uyumluluk paketleri tarafından ayarlanır): bu çağrı noktaları kullanım analizörüne görünmez, dolayısıyla purge kodun hâlâ okuduğu alanları kaldırırdı. Import yeniden yazımı etkin kalır.

    Daha eski sürümler (9.2.1 öncesi) @intlayer/babel paketini ve intlayerPurgeBabelPlugin ile intlayerMinifyBabelPlugin tanımlayan bir babel.config.js dosyasını gerektiriyordu. Bu dosya artık gerekli değildir ve silinebilir.

    Vite

    Vite, vite-intlayer bağımlılığı (dependency) olarak dahil edilen @intlayer/babel eklentisini kullanır. Import yeniden yazma, purge ve minify işlemlerini barındıran tam optimizasyon işlemi varsayılan olarak etkindir ve herhangi bir ekstra eklenti kaydı gerektirmez.

    intlayer.config.ts içinde karşılık gelen ayarları ayarlayarak purge ve minify seçeneklerini etkinleştirebilirsiniz:

    intlayer.config.ts
    import type { IntlayerConfig } from "intlayer";
    
    const config: IntlayerConfig = {
      build: {
        purge: true, // derlenmiş paketlenmiş JSON içinden kullanılmayan içerik alanlarını kaldır
        minify: true, // içerik alanı anahtarlarını daha kısa isimlere (alias) yeniden adlandır
      },
    };
    
    export default config;
    

    Webpack (ve Babel kullanan Next.js)

    @intlayer/babel paketini yükleyin:

    bash
    npm install -D @intlayer/babel
    

    Dört eklentinin (plugin) tümünü babel.config.js dosyasına doğru sırayla ekleyin:

    babel.config.js
    const {
      intlayerExtractBabelPlugin,
      intlayerPurgeBabelPlugin,
      intlayerMinifyBabelPlugin,
      intlayerOptimizeBabelPlugin,
      getExtractPluginOptions,
      getPurgePluginOptions,
      getMinifyPluginOptions,
      getOptimizePluginOptions,
    } = require("@intlayer/babel");
    
    module.exports = {
      plugins: [
        // Extract: .content.ts dosyalarını → .intlayer/**/*.json olacak şekilde derler
        [intlayerExtractBabelPlugin, getExtractPluginOptions()],
    
        // Purge: kullanılmayan alanları .intlayer/**/*.json dosyalarından kaldırır
        //    (intlayer.config.ts içerisindeki build.purge seçeneğini okur)
        [intlayerPurgeBabelPlugin, getPurgePluginOptions()],
    
        // Minify: JSON ve kaynak kodundaki alan anahtarlarını kısaltarak yeniden adlandırır
        //    (intlayer.config.ts içerisindeki build.minify seçeneğini okur)
        [intlayerMinifyBabelPlugin, getMinifyPluginOptions()],
    
        // Optimize: useIntlayer('key') çağrılarını → useDictionary(hash) çağrısına çevirir
        //    Sözlük anahtarını tamamen değiştirdiği için en sonda bulunmalıdır.
        [intlayerOptimizeBabelPlugin, getOptimizePluginOptions()],
      ],
    };
    

    Yapılandırma

    Intlayer'ın paketinizi (bundle) nasıl optimize edeceğini intlayer.config.ts dosyanızdaki build özelliği aracılığıyla kontrol edebilirsiniz.

    intlayer.config.ts
    import { Locales, type IntlayerConfig } from "intlayer";
    
    const config: IntlayerConfig = {
      internationalization: {
        locales: [Locales.ENGLISH, Locales.TURKISH],
        defaultLocale: Locales.ENGLISH,
      },
      dictionary: {
        importMode: "dynamic",
      },
      build: {
        // Derleme zamanında useIntlayer() çağrılarını doğrudan sözlük içe aktarmalarıyla (import) değiştirir.
        // undefined = otomatik (üretim/production ortamında etkin), true = daima, false = asla.
        optimize: undefined,
    
        // Derlenmiş sözlüklerdeki içerik alanı anahtarlarını kısa alfabetik isimlerle (alias) yeniden
        // adlandırır (örneğin title → a). JSON boyutunu küçültür; optimize işlemi (optimize: true) gerektirir.
        minify: true,
    
        // Kaynak kodda asla erişilmeyen içerik alanlarını kaldırır.
        // optimize işlemi gerektirir.
        purge: true,
      },
    };
    
    export default config;
    
    Çoğu durumda optimize ayarı için varsayılan değeri (undefined) korumak önerilir.
    Tüm seçenekler için yapılandırma referansına bakın: Configuration

    Derleme (Build) Seçenekleri

    Özellik Tip Varsayılan Açıklama
    optimize boolean / undefined undefined İçe aktarma (import) yeniden yazma işlemini etkinleştirir. undefined = yalnızca production derlemelerinde aktiftir. false olarak ayarlanırsa purge ve minify işlemleri de devre dışı kalır.
    minify boolean false Derlenmiş JSON dosyalarındaki içerik alanlarının anahtar isimlerini kısa alfabetik adlara dönüştürür. Kaynak kodundaki eşleşen özellikleri de buna uygun şekilde yeniden adlandırır. optimize ayarı false ise hiçbir etkisi olmaz.
    purge boolean false Derlenmiş JSON dosyalarından, kaynak kodda erişilmeyen statik içerik alanlarını kaldırır. optimize ayarı false ise hiçbir etkisi olmaz.

    Minification (alan anahtarını yeniden adlandırma)

    build.minify komutu JavaScript paketinizi minify etmez — bunu bundler'ınız (Webpack, Rollup vb.) halleder. Bunun yerine, kullanıcı tarafından tanımlanmış her içerik alanının adını kısa bir harfe çevirerek derlenmiş olan JSON sözlük dosyalarını küçültür:

    plaintext
    // Minify öncesi
    { "title": "Merhaba", "subtitle": "Dünya" }
    
    // Minify sonrası
    { "a": "Merhaba", "b": "Dünya" }
    

    Aynı yeniden adlandırma işlemi kaynak kodunuzdaki erişim özelliklerine de yansır; bu nedenle derlenmiş kodda content.title erişimi content.a haline gelir. Çalışma zamanı (runtime) davranışı tamamen aynı kalır.

    intlayer.config.ts
    import type { IntlayerConfig } from "intlayer";
    
    const config: IntlayerConfig = {
      build: {
        minify: true,
      },
    };
    
    export default config;
    
    optimize false olduğunda minification atlanır. editor.enabled true olduğunda yine çalışır, ancak alan adı değiştirme adımı olmadan — görsel düzenleyici düzenlemeleri keyPath üzerinden çözer, bu yüzden orijinal alan adlarının korunması gerekir.
    Next.js'te minifikasyon, @intlayer/swc kurulu değilse veya yüklenemiyorsa (16.1.0 altındaki Next.js) da atlanır. Eklenti, kaynak kodundaki erişimleri yeniden yazan yarıdır; onsuz sözlükleri yeniden adlandırmak kodunuzun artık var olmayan alan adlarını okumasına yol açardı.
    Ayrıca, JSON'ların orijinal isimleriyle uzak (remote) API'den getirildiği durumlarda, yani sözlüklerin importMode: 'fetch' ile yüklendiği durumlarda da atlanır — istemci tarafındaki (client-side) isimleri değiştirmek sunucu/istemci sözleşmesini bozacaktır.

    Purging (kullanılmayan alanların silinmesi)

    build.purge, kaynak kodunuzda gerçekte hangi içerik alanlarına erişildiğini analiz eder ve derlenen JSON dosyalarından diğer tüm kullanılmayan alanları kaldırır.

    intlayer.config.ts
    import type { IntlayerConfig } from "intlayer";
    
    const config: IntlayerConfig = {
      build: {
        purge: true,
      },
    };
    
    export default config;
    

    Örnek: Beş alanı olan ve sadece ikisinin kullanıldığı bir sözlük:

    plaintext
    // Purge öncesi
    { "title": "…", "subtitle": "…", "cta": "…", "footer": "…", "badge": "…" }
    
    // Purge sonrası (kaynak kodda sadece title + subtitle kullanılıyor)
    { "title": "…", "subtitle": "…" }
    
    optimize false olduğunda Purge işlemi atlanır. editor.enabled true olduğunda etkin kalmaya devam eder — temizlenen bir alan hiçbir bileşen tarafından okunmaz, bu yüzden düzenleyici onu asla render etmez. Next.js'te ayrıca @intlayer/swc kullanılamadığında ve uyumluluk adaptörü çağıranları yapılandırıldığında atlanır.
    Ayrıca, bir kaynak dosyasının ayrıştırılamadığı veya useIntlayer sonucunun bir değişkene atanıp (örneğin objeye yayılması, parçalama (destructuring) yapılmadan bir prop olarak iletilmesi gibi) statik analiz aracının takip edemeyeceği yollarla gönderildiği durumlarda Purge işlemi tedbir amaçlı olarak atlanır. Bu durumlarda tüm sözlük bozulmadan korunur.

    İçe Aktarım Modu (Import Mode)

    Farklı sayfalar ve yerel ayarlar (locales) içeren büyük uygulamalarda, JSON dosyalarınız toplam paket boyutunun önemli bir bölümünü oluşturabilir. Intlayer, importMode seçeneğini kullanarak sözlüklerin nasıl yükleneceğini belirlemenize olanak tanır.

    Global tanımlama

    İçe aktarım modu (import mode), genel kullanım için intlayer.config.ts dosyanızda tanımlanabilir.

    intlayer.config.ts
    import type { IntlayerConfig } from "intlayer";
    
    const config: IntlayerConfig = {
      dictionary: {
        importMode: "dynamic", // Varsayılan değer 'static'
      },
    };
    
    export default config;
    

    Sözlük bazlı (Per-dictionary) tanımlama

    Ayrıca tek bir sözlüğün içe aktarma modunu (import mode), kendisine ait olan .content.{{ts|tsx|js|jsx|mjs|cjs|json|jsonc|json5|md|mdx|yaml|yml}} dosyasında kolayca üzerine yazabilirsiniz (override).

    ts
    import { type Dictionary, t } from "intlayer";
    
    const appContent: Dictionary = {
      key: "app",
      importMode: "dynamic", // Sözlüğün varsayılan import modunu ezer
      content: {
        // ...
      },
    };
    
    export default appContent;
    
    Özellik Tür Varsayılan Açıklama
    importMode 'static', 'dynamic', 'fetch' 'static' Önerilmiyor: Yerine dictionary.importMode seçeneğini kullanın. Sözlüklerin nasıl yükleneceğini belirler (aşağıya bakın).

    importMode ayarı, sözlük içeriğinin bileşeniniz içine (component) nasıl enjekte edileceğini belirler. Bunu intlayer.config.ts dosyasında dictionary altında genel olarak ayarlayabilir veya .content.ts dosyasında sözlük bazlı olacak şekilde değiştirebilirsiniz.

    1. Static Mode (default)

    Statik modda Intlayer, useIntlayer kullanımını useDictionary ile değiştirir ve sözlüğü doğrudan JavaScript paketi içerisine koyar.

    • Artıları: Anında işleme (senkron), hydration işlemi sırasında hiç fazladan ağ (network) isteği gerektirmez.
    • Eksileri: Paket, bileşen için desteklenen tüm dillerdeki (locales) içerikleri beraberinde yükler.
    • Kullanım Senaryosu: Tek Sayfalı Uygulamalar (Single Page Applications - SPA).

    Dönüştürülmüş Kod Örneği:

    tsx
    // Yazdığınız kod
    const content = useIntlayer("my-key");
    
    // (Statik Mod için) dönüştürülmüş en iyi kodun temsili
    // Bu sadece temsili bir gösterimdir; asıl kod yapılandırma ve optimizasyona bağlı olarak farklı olabilir.
    const content = useDictionary({
      key: "my-key",
      content: {
        nodeType: "translation",
        translation: {
          en: "My title",
          tr: "Benim başlığım",
        },
      },
    });
    

    2. Dynamic Mode

    Dinamik modda Intlayer, useIntlayer işlevini useDictionaryAsync işleviyle değiştirir. Bu, mevcut geçerli dile (locale) ait JSON verisini özel olarak ve sonradan yüklemek için import() işlevini (Suspense benzeri bir mekanizma) kullanır.

    • Artıları: Yerel (locale) seviyesinde tree shaking sağlar. Türkçe sürümü görüntüleyen bir kullanıcı yalnızca Türkçe sözlüğü indirir. İngilizce sözlük ise hiçbir zaman indirilmez veya yüklenmez.
    • Eksileri: İlk açılışta (hydration esnasında) bileşen başına bir veri getirme ağ (network) isteğini tetikler.
    • Kullanım Senaryosu: Büyük metin blokları barındıran uygulamalar, makaleler veya paket boyutunun (bundle size) oldukça kritik olduğu çok fazla dilli projeler.

    Dönüştürülmüş Kod Örneği:

    tsx
    // Yazdığınız kod
    const content = useIntlayer("my-key");
    
    // (Dinamik Mod için) dönüştürülmüş en iyi kodun temsili
    // Bu sadece temsili bir gösterimdir; asıl kod optimizasyon nedenleriyle değişebilir
    const content = useDictionaryAsync({
      en: () =>
        import(".intlayer/dynamic_dictionary/my-key/en.json").then(
          (mod) => mod.default
        ),
      tr: () =>
        import(".intlayer/dynamic_dictionary/my-key/tr.json").then(
          (mod) => mod.default
        ),
    });
    
    importMode: 'dynamic' seçeneği kullanıyorken bir bileşende (component) useIntlayer kullanan 100 ayrı alanınız varsa, sistem bu alanlara ayrı ayrı olarak ulaşmak için 100 adet istek yapmaya çalışacaktır. Bu tür karmaşık olan istek (request) trafiğinden ve performans kaybından kaçınmak için atom parçalar (atom component) yerine içeriği genel alanlara ayırarak .content (örneğin sayfa bölümüne özel bir sözlük dosyası) gruplandırmalarına koyun. Ek olarak aynı isme sahip birkaç .content dosyasını kullanmak da mümkündür. İsimler (keyler) aynı ise Intlayer bunları tamamen tek bir sözlük dosyası altında gruplandıracaktır.

    3. Fetch Mode

    Dinamik modla fazlasıyla benzer şekilde çalışır ancak ilk olarak uzak sözlükleri bulup almak için Intlayer Live Sync API'ye başvurmaya çalışır. Uzak (Remote API) isteği başarısız olursa veya içeriğin anlık senkronizasyona tabi (live updates) olmadığı belirlenirse yedek (fallback) olan statik duruma, yani dinamik içe aktarım işlemine (dynamic import) geçer.

    Dönüştürülmüş Kod Örneği:

    tsx
    // Yazdığınız kod
    const content = useIntlayer("my-key");
    
    // Optimize Edilmiş Kod Örneği (Fetch - İçe Aktarım İçin)
    const content = useDictionaryAsync({
      en: () =>
        fetch("https://intlayer.my-domain.com/dictionary/my-key/en").then((res) =>
          res.json()
        ),
      tr: () =>
        fetch("https://intlayer.my-domain.com/dictionary/my-key/tr").then((res) =>
          res.json()
        ),
    });
    
    CMS (İçerik Yönetim Sistemi) için doküman detayına bakın: CMS
    API tarafında verilerin tamamen orijinal alan (key) bilgisi barındırması gerektiği için uzak (fetch) çalışma alanlarında (minify) küçültme ve (purge) tamamen temizleme sistemleri uygulanmaz.

    Özet: Static (Statik) vs Dynamic (Dinamik)

    Özellik Static Mode (Statik Mod) Dynamic Mode (Dinamik Mod)
    JS Paketi Boyutu Büyük (Bileşen için kullanılan tüm dil dosyalarını barındırır) Küçük (Sadece kod tabanı vardır)
    İlk Yükleme Hızı Anlık (Sözlük, genel paketin içindedir) Küçük Gecikme ile (JSON sonradan indirilir)
    Ağ İstekleri 0 Eksta İstek Gerektirmez 1 Sözlük için anahtar isteği alır
    Tree Shaking Bileşen Seviyesinde Bileşen ve Dil Seviyesinde
    En İyi Senaryo UI ve Arayüz Bileşenleri, Küçük Uygulamalar Büyük Yazılar içeren Siteler, Çok Sayıda Dil