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
- "Solid useIntlayer API kullanımını doğrudan özellik erişimine güncelle"v8.9.004.05.2026
- "Başlangıç geçmişi"v8.4.1023.03.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ü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
Intlayer kullanarak Vite ve Lit web sitenizi çevirin | Uluslararasılaştırma (i18n)
İçindekiler
Neden alternatifler yerine Intlayer?
'lit-localize' veya 'i18next' gibi ana çözümlerle karşılaştırıldığında Intlayer, aşağıdaki gibi entegre optimizasyonlarla gelen bir çözümdür:
Intlayer, Web Bileşeni düzeyinde içerik kapsamı, TypeScript desteği ve ölçeklendirme uluslararasılaştırması (i18n) için gereken tüm özellikleri sunarak Lit ile mükemmel çalışacak şekilde optimize edilmiştir.
Sayfalarınıza çok büyük JSON dosyaları yüklemek yerine yalnızca gerekli içeriği yükleyin. Intlayer bundle ve sayfa boyutlarınızı %50'ye kadar azaltmanıza yardımcı olur.
Uygulamanızın içeriğinin kapsamını belirlemek, büyük ölçekli uygulamalar için bakımı kolaylaştırır. İçerik kod tabanınızın tamamını gözden geçirmenin zihinsel yükü olmadan, tek bir özellik klasörünü çoğaltabilir veya silebilirsiniz. Ayrıca Intlayer, içeriğinizin doğruluğunu sağlamak için tamamen tiplendirilmiş (fully typed)tır.
İçeriğin bir arada konumlandırılması Büyük Dil Modellerinin (LLM'ler) ihtiyaç duyduğu bağlamı azaltır. Intlayer ayrıca eksik çevirileri test etmek için CLI gibi bir araç paketiyle birlikte gelirLSP, MCP ve aracı becerileri, geliştirici deneyimini (DX) yapay zeka için daha da sorunsuz hale getirmek için ajanlar.
Maliyeti AI sağlayıcınıza ait olmak üzere seçtiğiniz LLM'yi kullanarak CI/CD işlem hattınızda çeviri yapmak için otomasyonu kullanın. Intlayer ayrıca içerik çıkarmayı otomatikleştirmek için bir derleyici ve arka planda çeviri yapmaya yardımcı olacak bir web platformu sunar.
Büyük JSON dosyalarını bileşenlere bağlamak performans ve tepkime sorunlarına yol açabilir. Intlayer, içerik yüklemenizi derleme sırasında optimize eder.
Bir i18n çözümünden çok daha fazlası olan Intlayer, kendi kendine barındırılan bir görsel düzenleyici ve tam CMS çok dilli içeriğinizi gerçek zamanlı olarak yönetmenize yardımcı olarak çevirmenler, metin yazarları ve diğer ekip üyeleriyle işbirliğini kusursuz hale getirir. İçerik yerel olarak ve/veya uzaktan depolanabilir.
Vite ve Lit Uygulamasında Intlayer Kurulumu İçin Adım Adım Kılavuz
Bağımlılıkları Yükleyin
Gerekli paketleri npm kullanarak yükleyin:
bashKodu kopyalaKodu panoya kopyala
npm install intlayer lit-intlayernpm install vite-intlayer --save-devnpx intlayer initintlayer
Yapılandırma yönetimi, çeviri, içerik bildirimi, transpilasyon ve CLI komutları için uluslararasılaştırma araçları sağlayan temel paket.
lit-intlayer Intlayer'ı Lit uygulamalarıyla entegre eden paket. Dil değiştiğinde LitElement'lerin otomatik olarak yeniden oluşturulması için
ReactiveControllertabanlı kancalar (useIntlayer,useLocalevb.) sağlar.vite-intlayer Intlayer'ı Vite paketleyici ile entegre etmek için Vite eklentisini ve kullanıcının tercih ettiği dili algılamayı, çerezleri yönetmeyi ve URL yönlendirmesini işlemeyi sağlayan ara yazılımı içerir.
Projenizin Yapılandırılması
Uygulamanızın dillerini yapılandırmak için bir yapılandırma dosyası oluşturun:
intlayer.config.tsKodu kopyalaKodu panoya kopyala
import { Locales, type IntlayerConfig } from "intlayer"; const config: IntlayerConfig = { internationalization: { locales: [ Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH, // Diğer dilleriniz ], defaultLocale: Locales.ENGLISH, }, }; export default config;Bu yapılandırma dosyası aracılığıyla, yerelleştirilmiş URL'ler, ara yazılım yönlendirmesi, çerez adları, içerik bildirimlerinizin konumu ve uzantısı, konsoldaki Intlayer günlüklerini devre dışı bırakma ve daha fazlasını ayarlayabilirsiniz. Kullanılabilir parametrelerin tam listesi için yapılandırma belgelerine bakın.
Intlayer'ı Vite Yapılandırmanıza Entegre Edin
Yapılandırmanıza intlayer eklentisini ekleyin.
vite.config.tsKodu kopyalaKodu panoya kopyala
import { defineConfig } from "vite"; import { intlayer } from "vite-intlayer"; // https://vitejs.dev/config/ export default defineConfig({ plugins: [intlayer()], });intlayer()Vite eklentisi, Intlayer'ı Vite ile entegre etmek için kullanılır. İçerik bildirimi dosyalarının oluşturulmasını sağlar ve bunları geliştirme modunda izler. Vite uygulaması içinde Intlayer ortam değişkenlerini tanımlar. Ayrıca performansı optimize etmek için takma adlar (aliases) sağlar.Giriş Noktasında Intlayer'ı Başlatın
Herhangi bir özel öğe kaydedilmeden önce
installIntlayer()işlevini çağırın, böylece ilk öğe bağlandığında küresel dil tekili hazır olur.src/main.tsKodu kopyalaKodu panoya kopyala
import { installIntlayer } from "lit-intlayer";// Herhangi bir LitElement DOM'a bağlanmadan önce çağrılmalıdır.installIntlayer();// Özel öğelerinizi içe aktarın ve kaydedin.import "./my-element.js";Ayrıca
md()içerik bildirimlerini (Markdown) kullanıyorsanız, markdown oluşturucuyu da yükleyin:src/main.tsKodu kopyalaKodu panoya kopyala
import { installIntlayer, installIntlayerMarkdown } from "lit-intlayer";installIntlayer();installIntlayerMarkdown();import "./my-element.js";İçeriğinizi Bildirin
Çevirileri saklamak için içerik bildirimlerinizi oluşturun ve yönetin:
src/app.content.tsKodu kopyalaKodu panoya kopyala
import { t, type Dictionary } from "intlayer"; const appContent = { key: "app", content: { title: "Vite + Lit", viteLogo: t({ en: "Vite logo", fr: "Logo Vite", es: "Logo Vite", }), litLogo: t({ en: "Lit logo", fr: "Logo Lit", es: "Logo Lit", }), count: t({ en: "count is {{count}}", fr: "le compte est {{count}}", es: "el recuento es {{count}}", }), readTheDocs: t({ en: "Click on the Vite and Lit logos to learn more", fr: "Cliquez sur les logos Vite et Lit pour en savoir plus", es: "Haga clic en los logotipos de Vite y Lit para obtener más información", }), }, } satisfies Dictionary; export default appContent;İçerik bildirimleriniz,
contentDirdizinine (varsayılan olarak./src) dahil edildikleri ve içerik bildirimi dosyası uzantısıyla (varsayılan olarak.content.{json,ts,tsx,js,jsx,mjs,cjs,md,mdx,yaml,yml}) eşleştikleri sürece uygulamanızın herhangi bir yerinde tanımlanabilir.Daha fazla ayrıntı için içerik bildirimi belgelerine bakın.
LitElement'inizde Intlayer'ı Kullanın
Bir
LitElementiçindeuseIntlayerkullanın. Aktif dil değiştiğinde otomatik olarak yeniden oluşturma işlemini tetikleyen birReactiveControllerproxy'si döndürür - ekstra kurulum gerekmez.src/my-element.tsKodu kopyalaKodu panoya kopyala
import { LitElement, html } from "lit";import { customElement, property } from "lit/decorators.js";import { useIntlayer } from "lit-intlayer";@customElement("my-element")export class MyElement extends LitElement { @property({ type: Number }) count = 0; // useIntlayer kendisini bir ReactiveController olarak kaydeder. // Dil değiştiğinde öğe otomatik olarak yeniden oluşturulur. private content = useIntlayer(this, "app"); override render() { const { content } = this; return html` <h1>${content.title}</h1> <img src="/vite.svg" alt=${content.viteLogo.value} /> <img src="/lit.svg" alt=${content.litLogo.value} /> <button @click=${() => this.count++}> ${content.count({ count: this.count })} </button> <p>${content.readTheDocs}</p> `; }}Yerel bir HTML özniteliğinde (örneğin
alt,aria-label,title) çevrilmiş dizeye ihtiyacınız olduğunda, yaprak düğüm üzerinde.valueişlevini çağırın:typescriptKodu kopyalaKodu panoya kopyala
html`<img alt=${content.viteLogo.value} />`;html`<img alt=${content.viteLogo.toString()} />`;html`<img alt=${String(content.viteLogo)} />`;İçeriğinizin Dilini Değiştirin
İsteğe bağlıİçeriğinizin dilini değiştirmek için
useLocaledenetleyicisi tarafından sunulansetLocaleyöntemini kullanın.src/locale-switcher.tsKodu kopyalaKodu panoya kopyala
import { LitElement, html } from "lit";import { customElement } from "lit/decorators.js";import { getLocaleName } from "intlayer";import { useLocale } from "lit-intlayer";@customElement("locale-switcher")export class LocaleSwitcher extends LitElement { private locale = useLocale(this); private _onChange(e: Event) { const select = e.target as HTMLSelectElement; this.locale.setLocale(select.value as any); } override render() { return html` <select @change=${this._onChange}> ${this.locale.availableLocales.map( (loc) => html` <option value=${loc} ?selected=${loc === this.locale.locale}> ${getLocaleName(loc)} </option> ` )} </select> `; }}Markdown ve HTML İçeriğini Oluşturun
İsteğe bağlıIntlayer
md()vehtml()içerik bildirimlerini destekler. Lit'te, derlenmiş çıktıunsafeHTMLyönergesi aracılığıyla ham HTML olarak enjekte edilir.Derlenmiş HTML'yi öğenizde oluşturun:
src/my-element.tsKodu kopyalaKodu panoya kopyala
import { LitElement, html } from "lit";import { customElement } from "lit/decorators.js";import { unsafeHTML } from "lit/directives/unsafe-html.js";import { useIntlayer } from "lit-intlayer";import { compileMarkdown } from "lit-intlayer/markdown";@customElement("my-element")export class MyElement extends LitElement { private content = useIntlayer(this, "app"); override render() { return html` <div class="edit-note"> ${unsafeHTML(compileMarkdown(String(this.content.editNote)))} </div> `; }}TIP String(content.editNote),IntlayerNodeüzerinde ham Markdown dizesini döndürentoString()işlevini çağırır. Bir HTML dizesi almak için bunucompileMarkdownişlevine geçirin, ardından Lit'inunsafeHTMLyönergesiyle oluşturun.Uygulamanıza Yerelleştirilmiş Yönlendirme Ekleyin
İsteğe bağlıHer dil için benzersiz rotalar oluşturmak (SEO için yararlıdır), Intlayer'ın
localeMap/localeFlatMapyardımcılarını ve sunucu tarafı dil algılama içinintlayerProxyVite eklentisini içeren bir istemci tarafı yönlendirici kullanabilirsiniz.İlk olarak, Vite yapılandırmanıza
intlayerProxyekleyin:Üretimde
intlayerProxykullanmak içinvite-intlayerpaketinidevDependencies'tandependencies'a taşımanız gerektiğini unutmayın.vite.config.tsKodu kopyalaKodu panoya kopyala
import { defineConfig } from "vite"; import { intlayer, intlayerProxy } from "vite-intlayer"; export default defineConfig({ plugins: [intlayer(), intlayerProxy()], });Dil Değiştiğinde URL'yi Değiştirin
İsteğe bağlıDil değiştiğinde tarayıcı URL'sini güncellemek için dil değiştiriciyle birlikte
useRewriteURLkullanın:src/locale-switcher.tsKodu kopyalaKodu panoya kopyala
import { LitElement, html } from "lit";import { customElement } from "lit/decorators.js";import { getLocaleName, getLocalizedUrl } from "intlayer";import { useLocale, useRewriteURL } from "lit-intlayer";@customElement("locale-switcher")export class LocaleSwitcher extends LitElement { private locale = useLocale(this); // Dil değiştiğinde geçerli URL'yi otomatik olarak yeniden yazar. private _rewriteURL = useRewriteURL(this); private _onChange(e: Event) { const select = e.target as HTMLSelectElement; this.locale.setLocale(select.value as any); } override render() { return html` <select @change=${this._onChange}> ${this.locale.availableLocales.map( (loc) => html` <option value=${loc} ?selected=${loc === this.locale.locale}> ${getLocaleName(loc)} </option> ` )} </select> `; }}HTML Dil ve Yön Özniteliklerini Değiştirin
İsteğe bağlıErişilebilirlik ve SEO için
<html>etiketininlangvedirözniteliklerini geçerli dille eklenecek şekilde güncelleyin.src/my-element.tsKodu kopyalaKodu panoya kopyala
import { LitElement, html } from "lit";import { customElement } from "lit/decorators.js";import { getHTMLTextDir } from "intlayer";import { useLocale } from "lit-intlayer";@customElement("my-element")export class MyElement extends LitElement { private locale = useLocale(this, { onLocaleChange: (loc) => { document.documentElement.lang = loc; document.documentElement.dir = getHTMLTextDir(loc); }, }); override render() { return html`<!-- içeriğiniz -->`; }}Bileşenlerinizin İçeriğini Çıkarın
İsteğe bağlıMevcut bir kod tabanınız varsa, binlerce dosyayı dönüştürmek zaman alıcı olabilir.
Bu süreci kolaylaştırmak için Intlayer, bileşenlerinizi dönüştürmek ve içeriği çıkarmak için bir derleyici / çıkarıcı önerir.
Kurulumu yapmak için
intlayer.config.tsdosyanıza bircompilerbölümü ekleyebilirsiniz:intlayer.config.tsKodu kopyalaKodu panoya kopyala
import { type IntlayerConfig } from "intlayer";const config: IntlayerConfig = { // ... Yapılandırmanızın geri kalanı compiler: { /** * Derleyicinin etkinleştirilip etkinleştirilmeyeceğini belirtir. */ enabled: true, /** * Çıktı dosyaları yolunu tanımlar */ output: ({ fileName, extension }) => `./${fileName}${extension}`, /** * Bileşenlerin dönüştürüldükten sonra kaydedilip kaydedilmeyeceğini belirtir. * Bu sayede derleyici, uygulamayı dönüştürmek için yalnızca bir kez çalıştırılabilir ve ardından kaldırılabilir. */ saveComponents: false, /** * Sözlük anahtarı öneki */ dictionaryKeyPrefix: "", },};export default config;
(İsteğe bağlı) Sitemap ve robots.txt (build zamanı üretimi)
Intlayer, generateSitemap ve getMultilingualUrls ile tarayıcılar için çok dilli sitemap.xml ve robots.txt üretip bunları public/ klasörüne otomatik yazmanıza yardımcı olur. Genelde Vite’tan önce küçük bir Node betiği çalıştırılır (ör. npm predev / prebuild kancaları).
Sitemap
Intlayer sitemap oluşturucusu yerel ayarlarınıza uyar ve tarayıcılar için metadata ekler.
Üretilen sitemapxhtml:link(hreflang) ad alanını destekler. Düz URL listesi yerine, her sayfanın tüm dil sürümleri çift yönlü bağlanır (ör./about,/fr/aboutveya/about?lang=fr- yönlendirme moduna bağlı).
Robots.txt
getMultilingualUrls kullanarak Disallow kurallarının hassas yolların tüm yerelleştirilmiş varyantlarını kapsamasını sağlayın.
1. Proje köküne generate-seo.mjs ekleyin
Kodu panoya kopyala
import fs from "fs";import path from "path";import { fileURLToPath } from "url";import { generateSitemap, getMultilingualUrls } from "intlayer";const __dirname = path.dirname(fileURLToPath(import.meta.url));const SITE_URL = (process.env.SITE_URL || "http://localhost:5173").replace( /\/$/, "");const pathList = [ { path: "/", changefreq: "daily", priority: 1.0 }, { path: "/about", changefreq: "monthly", priority: 0.7 },];const sitemapXml = generateSitemap(pathList, { siteUrl: SITE_URL });fs.writeFileSync(path.join(__dirname, "public", "sitemap.xml"), sitemapXml);const getAllMultilingualUrls = (urls) => urls.flatMap((url) => Object.values(getMultilingualUrls(url)));const disallowedPaths = getAllMultilingualUrls(["/admin", "/private"]);const robotsTxt = [ "User-agent: *", "Allow: /", ...disallowedPaths.map((path) => `Disallow: ${path}`), "", `Sitemap: ${SITE_URL}/sitemap.xml`,].join("\n");fs.writeFileSync(path.join(__dirname, "public", "robots.txt"), robotsTxt);console.log("SEO files generated successfully.");Betik intlayer içe aktarabilmeli; paket kurulu olmalı. Üretimde ortam değişkeni SITE_URL ayarlayın (ör. CI).
Node ESM içingenerate-seo.mjstercih edin.generate-seo.jskullanıyorsanızpackage.jsoniçinde"type": "module"veya ESM’yi başka şekilde etkinleştirin.
2. Betiği Vite’tan önce çalıştırın
Kodu panoya kopyala
{ "scripts": { "dev": "vite", "prebuild": "node generate-seo.mjs", "build": "vite build", "preview": "vite preview" }}pnpm veya yarn kullanıyorsanız komutları uyarlayın. CI’dan da çağrılabilir.
TypeScript Yapılandırması
TypeScript yapılandırmanızın otomatik oluşturulan tipleri içerdiğinden emin olun.
Kodu panoya kopyala
{ "compilerOptions": { // ... "experimentalDecorators": true, "useDefineForClassFields": false, }, "include": ["src", ".intlayer/**/*.ts"],}experimentalDecoratorsveuseDefineForClassFields: false, dekoratör desteği için Lit tarafından gereklidir.
Git Yapılandırması
Intlayer tarafından oluşturulan dosyaların yoksayılması önerilir. Bu, bunları Git deponuza göndermenizi önler.
Bunu yapmak için .gitignore dosyanıza aşağıdaki talimatları ekleyebilirsiniz:
Kodu panoya kopyala
# Intlayer tarafından oluşturulan dosyaları yoksay.intlayerVS Code Uzantısı
Intlayer ile geliştirme deneyiminizi iyileştirmek için resmi Intlayer VS Code Uzantısını yükleyebilirsiniz.
VS Code Marketplace'ten yükleyin
Bu uzantı şunları sağlar:
- Çeviri anahtarları için otomatik tamamlama.
- Eksik çeviriler için gerçek zamanlı hata algılama.
- Çevrilmiş içeriğin satır içi önizlemeleri.
- Çevirileri kolayca oluşturmak ve güncellemek için hızlı işlemler.
Uzantının nasıl kullanılacağı hakkında daha fazla ayrıntı için Intlayer VS Code Uzantısı belgelerine bakın.
Daha Fazlasına Gidin
Daha ileri gitmek için görsel düzenleyiciyi uygulayabilir veya CMS kullanarak içeriğinizi dışsallaştırabilirsiniz.