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üleyinIf you have an idea for improving this documentation, please feel free to contribute by submitting a pull request on GitHub.
GitHub link to the documentationCopy doc Markdown to clipboard
Yeni Intlayer v8 - Yenilikler
Intlayer v8'e hoş geldiniz! Bu sürüm, otomatik içerik algılama ile geliştirici deneyimini iyileştirmeye, şema doğrulaması ile veri bütünlüğünü sağlamaya ve sözlük yönetimi üzerinde daha fazla kontrol sunmaya odaklanıyor.
İçindekiler
Zengin İçerik Evrimi: Markdown ve HTML
Intlayer v8, zengin içeriğin işlenme şeklinde büyük iyileştirmeler getirerek HTML düğümlerini (v7'de yoktu) tanıtıyor ve API'yi Markdown düğümleri (v7'de vardı ancak geliştirildi) ile birleştiriyor.
Birleşik .use() API'si
Hem Markdown hem de HTML düğümleri için .use() metodunu tanıttık. Bu metod, render sırasında kullanılan HTML etiketlerini veya bileşenlerini özelleştirmenize olanak tanır.
- Bileşen Değiştirme: HTML etiketlerini veya özel bileşenleri kendi framework bileşenlerinizle kolayca değiştirebilirsiniz (örneğin,
<a>etiketiniNextLinkile veya<CustomCmp>etiketini bir React bileşeniyle değiştirebilirsiniz). - Tip Güvenliği: Bileşen sağlamak için kullanılan tüm fonksiyonlar tam tiplidir ve doğru prop'ları almanızı sağlar.
Varsayılan Render Davranışı
v7'de, bir sağlayıcı tanımlanmamışsa, Markdown düğümleri ham string'ler olarak render ediliyordu ve bunları ayrıştırmak için genellikle harici kütüphanelere ihtiyaç duyuluyordu.
v8'de Intlayer kendi dahili Markdown ayrıştırıcısını içerir. Varsayılan olarak, Markdown düğümleri artık herhangi bir harici kütüphaneye ihtiyaç duymadan doğrudan HTML olarak render edilir.
Yeni Renderer ve Provider Yardımcı Araçları
Standart useIntlayer akışının dışında size daha fazla kontrol sağlamak için yeni bağımsız renderer fonksiyonları ve bileşenleri tanıttık.
- Markdown:
MarkdownRenderer,useMarkdownRenderer,renderMarkdown. (Not:MarkdownProviderv7'de vardı ancak artık bu yeni araçlarla entegre çalışıyor). - HTML:
HTMLRenderer,useHTMLRenderer,renderHTML,HTMLProvider.
Örnekler: Markdown Render Araçları
1. Bileşeni Kullanma:
Kodu panoya kopyala
import { MarkdownRenderer } from "react-intlayer/markdown";<MarkdownRenderer forceBlock={true} components={{ h1: ({ children }) => <h1 className="text-2xl">{children}</h1> }}> {"# Başlığım"}</MarkdownRenderer>2. Hook'u Kullanma:
Kodu panoya kopyala
import { useMarkdownRenderer } from "react-intlayer/markdown";const renderMarkdown = useMarkdownRenderer({ components: { h1: ({ children }) => <h1 className="text-red-500">{children}</h1> }});return <div>{renderMarkdown("# Başlığım")}</div>;3. Yardımcı Fonksiyonu Kullanma:
Kodu panoya kopyala
import { renderMarkdown } from "react-intlayer/markdown";const html = renderMarkdown("# Başlığım", { forceBlock: true});Örnekler: HTML Render Araçları
1. Bileşeni Kullanma:
Kodu panoya kopyala
import { HTMLRenderer } from "react-intlayer/html";<HTMLRenderer components={{ p: ({ children }) => <p className="mb-4">{children}</p> }}> {"<p>Merhaba Dünya</p>"}</HTMLRenderer>2. Hook'u Kullanma:
Kodu panoya kopyala
import { useHTMLRenderer } from "react-intlayer/html";const renderHTML = useHTMLRenderer({ components: { strong: ({ children }) => <b className="font-bold">{children}</b> }});return <div>{renderHTML("<p>Merhaba <strong>Dünya</strong></p>")}</div>;3. Yardımcı Fonksiyonu Kullanma:
Kodu panoya kopyala
import { renderHTML } from "react-intlayer/html";const html = renderHTML("<p>Merhaba Dünya</p>");Daha fazla ayrıntı için HTML İçerik Dokümantasyonu ve Markdown Dokümantasyonu sayfalarına bakın.
Özel URL Yeniden Yazımları
Intlayer v8, standart /locale/path yapısından farklı olan dile özgü yollar tanımlamanıza olanak tanıyan Özel URL Yeniden Yazımları desteğini getirir. Bu, yerel SEO'yu iyileştirmek ve İngilizce dışı kullanıcılar için daha doğal bir kullanıcı deneyimi sağlamak açısından güçlü bir özelliktir.
v8'deki önemli geliştirmeler:
- Framework Formatlayıcıları: Her router için idiomatik desen sözdizimi sağlamak amacıyla
nextjsRewrite,svelteKitRewrite,reactRouterRewrite,vueRouterRewrite,solidRouterRewrite,tanstackRouterRewrite,nuxtRewriteveviteRewriteeklendi. useRewriteURLHook: Yeni bir istemci tarafı hook'u; router navigasyonlarını tetiklemeden adres çubuğunu sessizce "güzel" yerelleştirilmiş URL'ye düzeltir.- Otomatik SEO Yönlendirmeleri: Yerleşik proxy'ler artık kullanıcıları elle girilmiş kanonik yollardan (örn.
/fr/about) daha güzel yerelleştirilmiş sürümlerine (örn./fr/a-propos) otomatik olarak yönlendirir.
Örnek Yapılandırma:
Kodu panoya kopyala
import { Locales, type IntlayerConfig } from "intlayer";import { nextjsRewrite } from "intlayer/routing";const config: IntlayerConfig = { internationalization: { locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH], defaultLocale: Locales.ENGLISH, }, routing: { mode: "prefix-no-default", rewrite: nextjsRewrite({ "/[locale]/about": { fr: "/[locale]/a-propos", es: "/[locale]/acerca-de", }, "/[locale]/products/[id]": { fr: "/[locale]/produits/[id]", es: "/[locale]/productos/[id]", }, }), },};export default config;Bu özellik, Intlayer proxy'leri aracılığıyla Next.js ve Vite'te varsayılan olarak desteklenir ve TanStack Router, React Router, Vue Router, SvelteKit ve Solid Router gibi diğer yönlendiricilere kolayca entegre edilebilir.
Daha fazla bilgi ve entegrasyon kılavuzları için Özel URL Yeniden Yazma Dokümantasyonu sayfasına bakın.
Geliştirilmiş Ekleme Değerleri
v8'de, ekleme (insertion) değerleri artık string ve sayılara ek olarak React elementlerini (veya Vue düğümlerini) kabul edebilir. Bu, zengin, etkileşimli bileşenleri doğrudan ekleme şablonlarınıza enjekte etmenize olanak tanır.
Intlayer artık eklemeler içinde iç içe geçmiş React ve Preact düğümlerini güvenilir bir şekilde işler; böylece karmaşık kullanıcı arayüzü yapıları korunur ve doğru şekilde render edilir.
Örnek:
Kodu panoya kopyala
import { insert } from "intlayer";export default { key: "my-key", content: { myInsertion: insert("Merhaba {{name}}"), },};Kodu panoya kopyala
import { useIntlayer } from "next-intlayer";const { myInsertion } = useIntlayer("my-key");return ( <div> {myInsertion({ name: 2, // sayı // veya name: "John", // metin // veya name: <span>John</span>, // React öğesi })} </div>);İçerik Şeması Doğrulama
Intlayer v8, sözlükler için şema doğrulamasını tanıtır. Artık yapılandırmanızda Zod kullanarak yeniden kullanılabilir doğrulama şemaları tanımlayabilir ve bunları içerik dosyalarınıza uygulayabilirsiniz. Bu, içeriğinizin her zaman beklenen yapıya uygun olmasını sağlar ve hataları build zamanında yakalar.
1. Şemaları Tanımlayın
Şemalarınızı intlayer.config.ts içinde tanımlayın:
Kodu panoya kopyala
import { z } from "zod";export default { schemas: { "seo-metadata": z.object({ title: z.string().min(50).max(60), description: z.string().min(150).max(160), }), },};2. Şemaları Sözlüklere Uygulayın
Sözlük tanımınızda şema anahtarına başvurun:
Kodu panoya kopyala
import { type Dictionary } from "intlayer";const aboutPageMetaContent = { key: "about-page-meta", schema: "seo-metadata", // <-- şema anahtarı content: { title: "Şirketimiz Hakkında - Bizim Hakkımızda Daha Fazla Bilgi Edinin", description: "Şirketimizin misyonunu, değerlerini ve ekibini keşfedin.", },} satisfies Dictionary;export default aboutPageMetaContent;Eğer içerik şemayla eşleşmezse (ör. başlık çok kısaysa), build süreci bir hata verecektir.
Geliştirilmiş Otomatik İçerik Algılama
v8'de Intlayer, içerik dizelerinizde Markdown sözdizimini, HTML etiketlerini ve değişken yerleştirmelerini akıllıca algılar. Bu, genellikle md(), html() veya insert() gibi yardımcı fonksiyonları atlamanıza olanak tanır.
Bu davranış varsayılan olarak etkindir. Bu algılamayı artık küresel olarak intlayer.config.ts içinde veya her bir sözlük düzeyinde ince ayar yapabilirsiniz.
Daha Ayrıntılı Kontrol
Belirli dönüşüm türlerini etkinleştirebilir veya devre dışı bırakabilirsiniz:
Kodu panoya kopyala
export default { dictionary: { // contentAutoTransformation: false (varsayılan) contentAutoTransformation: { markdown: true, html: true, insertion: false, // Otomatik yerleştirme algılamasını devre dışı bırak }, },};v7 davranışı (Manuel sarmalama):
Kodu panoya kopyala
import { md, insert } from "intlayer";export default { key: "my-key", content: { myMarkdown: md("## Hello World"), myInsertion: insert("Merhaba {{name}}"), },};v8 davranışı (Otomatik algılama):
Kodu panoya kopyala
export default { key: "my-key", contentAutoTransformation: true, // Sözlük tanımında veya intlayer.config.ts'de global olarak da ayarlanabilir content: { myMarkdown: "## Hello World", // Otomatik olarak Markdown olarak algılanır myHTML: "<p>Hello World</p>", // Otomatik olarak HTML olarak algılanır myInsertion: "Merhaba {{name}}", // Otomatik olarak Ekleme (Insertion) olarak algılanır },};Aşağıdaki JSON sonucu aynı kalır ve render için gereken zengin tip bilgisini korur:
Kodu panoya kopyala
{ "key": "my-key", "content": { "myMarkdown": { "nodeType": "markdown", "markdown": "## Hello World" }, "myHTML": { "nodeType": "html", "html": "<p>Hello World</p>" }, "myInsertion": { "nodeType": "insertion", "insertion": "Hi {{name}}" } }}Yerelleştirme: yeni useIntl hook'u
React, Next.js ve Vue için yeni bir useIntl() hook'u artık kullanılabilir. Bu, sayıları, tarihleri ve daha fazlasını biçimlendirirken geçerli dili otomatik olarak kullanan locale-bağlı bir Intl nesnesi sağlar; locale'yi elle geçirmeye gerek yoktur.
Kodu panoya kopyala
import { useIntl } from "next-intlayer";const intl = useIntl();const formattedPrice = new intl.NumberFormat({ style: "currency", currency: "USD",}).format(123.45);Araçlar: VSCode Uzantısı Geliştirmeleri
Intlayer VSCode uzantısı, uluslararasılaştırma iş akışınızı kolaylaştırmak için v8'de önemli güncellemeler alıyor:
- Başlangıç Süresi: Bir proje açılırken performans iyileştirmeleri.
- Önbellekleme: Neredeyse anlık doğrulama ve otomatik tamamlama için geliştirilmiş önbellekleme katmanı.
- Kullanılmayan Anahtarlar & Çoğaltılmış Anahtarların Tespiti: Sözlüklerinizdeki kullanılmayan anahtarları ve çoğaltılmış anahtarları otomatik olarak tespit eden yeni özellikler; içeriğinizi temiz ve verimli tutmanıza yardımcı olur.
Derleyici Optimizasyonları
Intlayer v8, Markdown ve HTML derleyicisi için yeni bir önbellekleme katmanı içerir. Bu, aynı yapılandırmaya sahip özdeş içerik dizelerinin yalnızca bir kez ayrıştırılmasını sağlar; bu da yeniden render'lar sırasında veya aynı içeriğin birden çok yerde kullanılması durumunda genel yükü önemli ölçüde azaltır.
Kodu panoya kopyala
const { intlayerExtractBabelPlugin, intlayerOptimizeBabelPlugin, getExtractPluginOptions, getOptimizePluginOptions,} = require('@intlayer/babel');module.exports = { presets: ['next/babel'], plugins: [ // Bileşenlerden içeriği sözlüklere çıkar [intlayerExtractBabelPlugin, getExtractPluginOptions()], // useIntlayer'ı doğrudan sözlük importlarıyla değiştirerek importları optimize et [intlayerOptimizeBabelPlugin, getOptimizePluginOptions()], ],};Esneklik: Birleştirilmiş İçe Aktarma Modu
live boolean özelliği, daha kapsamlı olan importMode özelliği lehine kullanımdan kaldırıldı. Bu, sözlüklerin nasıl yükleneceğini açıkça tanımlamanıza olanak tanır: statik olarak, dinamik olarak veya canlı senkronizasyon ile.
Modlar
static(Varsayılan): Sözlük build zamanında paketlenir. Performans için en iyisidir.dynamic: Sözlük çalışma zamanında yüklenir (ör. JSON fetch veya suspense).fetch: Sözlük çalışma zamanında CMS/Server'dan çekilir ve senkronize edilir.
Geçiş:
Tüm veri içeriğini net bir şekilde görmek için tabloyu modalde açın
| v7 Yapılandırması | v8 Yapılandırması |
|---|---|
live: true | importMode: 'fetch' |
live: false | importMode: 'static' (veya 'dynamic') |
Not: Intlayer v8'de, importMode özelliği intlayer.config.ts içindeki build yapılandırmasından alınarak dictionary yapılandırmasına taşındı. Bu sayede tüm sözlükleriniz için varsayılan bir içe aktarma modu tanımlayabilir ve yine de sözlük bazında override yapabilirsiniz.
Küresel Yapılandırma Örneği:
Kodu panoya kopyala
export default { dictionary: { importMode: "dynamic", // Küresel varsayılan }, // ...};Sözlük Örneği:
Kodu panoya kopyala
export default { key: 'my-key', importMode: "fetch", // Küresel yapılandırmayı geçersiz kılar content: { ... }}Sözlük Konumu Kontrolü
v8, sözlüklerin nerede bulunduğunu ve nasıl senkronize edileceğini açıkça yönetmek için location özelliğini tanıtır. Bu, hem yerel dosyaları hem de uzak CMS içeriğini içeren hibrit iş akışları için özellikle kullanışlıdır.
Seçenekler
local: Sözlük yalnızca yerelde bulunur. Uzak CMS'ye gönderilmeyecektir.remote: Sözlük uzaktan yönetilir. CMS'ye gönderildikten sonra yereldekinden ayrılacaktır. Uzak sözlük CMS'den çekilecektir.local_and_remote: Sözlük her iki yerde de bulunur. Yerel değişiklikler gönderilir ve uzak değişiklikler çekilir (senkronize edilir).
Örnek:
Kodu panoya kopyala
export default { key: 'my-key', location: "local", // Bu sözlüğü yalnızca yerelde tut content: { ... }}Sistem Yapılandırma Ayrımı
Intlayer v8, içerik kaynaklarının yapılandırmasını dahili sistem ve çıktı yollarından ayırır. Bu, content özelliğini sadeleştirir ve hangi ayarların kullanıcı tarafından yönetilmek üzere, hangilerinin Intlayer sistemi tarafından yönetilmek üzere olduğunun net olmasını sağlar.
Aşağıdaki özellikler content'ten alınarak intlayer.config.ts içindeki yeni system özelliğine taşındı:
dictionariesDirmoduleAugmentationDirunmergedDictionariesDirtypesDirmainDirconfigDircacheDiroutputFilesPatternWithPath
v7 davranışı:
Kodu panoya kopyala
export default { content: { contentDir: ["src"], dictionariesDir: ".intlayer/dictionary", // Kaynak yapılandırmasıyla karışık },};v8 davranışı:
Kodu panoya kopyala
export default { content: { contentDir: ["src"], }, system: { dictionariesDir: ".intlayer/dictionary", // Net şekilde ayrıldı },};İçerik ve Kod Dizin Ayrımı
Intlayer v8, içerik tanım dosyalarının yapılandırmasını kod dönüşümü yapılandırmasından ayırır. Bu, izleme ve tarama işlemlerinin daha hassas yapılmasını sağlayarak derleme performansını iyileştirir.
Önceden contentDir, hem .content.* dosyalarını izlemek hem de kodu useIntlayer çağrıları için taramak amacıyla kullanılıyordu. Şimdi:
contentDir: İçerik bildirim dosyalarınız için özel olarak kullanılır.codeDir: Dönüşüm gerektiren uygulama kodunuz için özel olarak kullanılır (ör. budama, optimizasyon).
Geçiş:
Önceden contentDir ayarlıysa, Intlayer v8 bunu varsayılan olarak codeDir için de kullanacaktır, ancak bir uyarı kaydı oluşturacaktır. Yapılandırmanızda codeDir'i açıkça tanımlamalısınız.
v7 davranışı:
Kodu panoya kopyala
export default { content: { contentDir: ["src", "@packages/design-system"], // Hem içerik hem de kod için kullanıldı },};v8 davranışı:
Kodu panoya kopyala
export default { content: { contentDir: ["src/content", "@packages/design-system"], // Burada yalnızca src/content/*.content.* dosyaları ve @packages/design-system/dist/*.content.* dosyaları izlenir codeDir: ["src", "@packages/design-system"], // Burada yalnızca kod dönüşümü için tarama yapılır ve @packages/design-system/src/*.content.* dosyaları taranır },};Çerçeve: Svelte İyileştirmeleri
Svelte'deki Markdown ve HTML içerikleri artık stringleştirildiklerinde otomatik olarak HTML'e parse edilir. Bu, Svelte'in {@html} sözdizimiyle kullanımı çok daha kolay hale getirir; artık içerik düğümünü doğrudan iletebilirsiniz.
v7'den geçiş notları
Yapılandırma Değişiklikleri
liveözelliği: Sözlüklerdekiliveözelliği kaldırıldı. Bunun yerineimportMode: 'fetch'kullanın.- importMode: Yapılandırmadaki
build.importModeözelliği kullanımdan kaldırıldı. Bunun yerinedictionary.importModekullanın. contentDirvecodeDir:contentDirartık özellikle içerik dosyaları içindir. Kod dönüşümü için yeni bircodeDirözelliği eklendi. EğercodeDirayarlanmazsa, IntlayercontentDir'e geri dönecek ve bir uyarı kaydedecektir.- Şema Doğrulama: Yeni
schemaözelliğini kullanmak için projenizezod'un yüklü olduğundan emin olun.