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
- "Astro + Vue için ilk dokümantasyon"v8.7.724.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ü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
Astro + Vue Sitenizi Intlayer ile Çevirin | Uluslararasılaştırma (i18n)
İçindekiler
Neden alternatifler yerine Intlayer?
'astro-i18n' 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, çok dilli yönlendirme, site haritası ve uluslararasılaştırmayı (i18n) ölçeklendirmek için gereken tüm özellikleri sunarak Astro 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.
Astro + Vue'da Intlayer'ı Yapılandırmak İçin Adım Adım Kılavuz
GitHub'daki uygulama şablonuna göz atın.
Bağımlılıkları Yükleyin
Tercih ettiğiniz paket yöneticisini kullanarak gerekli paketleri yükleyin:
bashKodu kopyalaKodu panoya kopyala
npm install intlayer astro-intlayer vue vue-intlayer @astrojs/vuenpx intlayer initintlayer Konfigürasyon yönetimi, çeviriler, içerik deklarasyonu, transpilasyon ve CLI komutları için i18n araçları sağlayan temel paket.
astro-intlayer Intlayer'ı Vite paketleyici ile bağlamak için Astro entegrasyon eklentisi; ayrıca kullanıcının tercih ettiği dili algılamak, çerezleri yönetmek ve URL yönlendirmelerini işlemek için ara yazılım (middleware) içerir.
vue Temel Vue paketi.
vue-intlayer Vue uygulamalarına Intlayer entegre etmek için paket. Vue'da uluslararasılaştırma için
installIntlayer'ın yanı sırauseIntlayerveuseLocalecomposable'larını sağlar.@astrojs/vue Vue bileşen islands kullanımına olanak tanıyan resmi Astro entegrasyonu.
Projenizi Yapılandırın
Uygulamanızın dillerini tanımlamak için bir konfigürasyon 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, Locales.TURKISH, // Diğer dilleriniz ], defaultLocale: Locales.ENGLISH, },};export default config;Bu konfigürasyon dosyası aracılığıyla yerelleştirilmiş URL'leri, ara yazılım yönlendirmelerini, çerez adlarını, içerik deklarasyonlarının konumunu ve uzantılarını yapılandırabilir, konsoldaki Intlayer günlüklerini devre dışı bırakabilir ve daha fazlasını yapabilirsiniz. Kullanılabilir parametrelerin tam listesi için konfigürasyon dokümantasyonuna bakın.
Intlayer'ı Astro konfigürasyonunuza entegre edin
Astro konfigürasyonunuza
intlayereklentisini ve Vue entegrasyonunu ekleyin.astro.config.tsKodu kopyalaKodu panoya kopyala
// @ts-checkimport { intlayer } from "astro-intlayer";import vue from "@astrojs/vue";import { defineConfig } from "astro/config";// https://astro.build/configexport default defineConfig({ integrations: [intlayer(), vue()],});intlayer()entegrasyon eklentisi, Intlayer'ı Astro ile entegre etmek için kullanılır. İçerik deklarasyon dosyalarının oluşturulmasını sağlar ve bunları geliştirme modunda izler. Astro uygulaması içinde Intlayer ortam değişkenlerini tanımlar ve performansı optimize etmek için takma adalar (aliases) sağlar.vue()entegrasyonu,client:only="vue"aracılığıyla Vue bileşen islands kullanımına olanak tanır.İçeriğinizi Deklare Edin
Çevirileri saklamak için içerik deklarasyonlarınızı oluşturun ve yönetin:
src/app.content.tsKodu kopyalaKodu panoya kopyala
import { t, type Dictionary } from "intlayer";const appContent = { key: "app", content: { title: t({ en: "Hello World", fr: "Bonjour le monde", es: "Hola mundo", tr: "Merhaba Dünya", }), },} satisfies Dictionary;export default appContent;İçerik deklarasyonları,
contentDir(varsayılan olarak./src) içinde yer aldıkları ve içerik deklarasyon dosyası uzantısıyla (varsayılan olarak.content.{json,ts,tsx,js,jsx,mjs,cjs}) eşleştikleri sürece uygulamanızın herhangi bir yerinde tanımlanabilir.Daha fazla bilgi için içerik deklarasyon dokümantasyonuna bakın.
Astro'da İçerik Kullanma
Sözlükleri doğrudan
.astrodosyalarınızda,intlayer'dan dışa aktarılan temel yardımcıları kullanarak tüketebilirsiniz. Her sayfaya SEO meta verileri (hreflang ve kurallı bağlantılar gibi) eklemeli ve etkileşimli istemci tarafı içeriği için bir Vue island tanıtmalısınız.src/pages/[...locale]/index.astroKodu kopyalaKodu panoya kopyala
---import { getIntlayer, getLocaleFromPath, getLocalizedUrl, getHTMLTextDir, getPrefix, localeMap, defaultLocale, type LocalesValues,} from "intlayer";import VueIsland from "../../components/vue/VueIsland.vue";export const getStaticPaths = () => { return localeMap(({ locale }) => ({ params: { locale: getPrefix(locale).localePrefix }, }));};const locale = getLocaleFromPath(Astro.url.pathname) as LocalesValues;const { title } = getIntlayer("app", locale);---<!doctype html><html lang={locale} dir={getHTMLTextDir(locale)}> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width" /> <link rel="icon" type="image/svg+xml" href="/favicon.svg" /> <title>{title}</title> <!-- Kurallı (Canonical) Bağlantı: Arama motorlarını bu sayfanın ana sürümü hakkında bilgilendirir --> <link rel="canonical" href={new URL(getLocalizedUrl(Astro.url.pathname, locale), Astro.site)} /> <!-- Hreflang: Google'ı tüm yerelleştirilmiş sürümler hakkında bilgilendirir --> { localeMap(({ locale: mapLocale }) => ( <link rel="alternate" hreflang={mapLocale} href={new URL( getLocalizedUrl(Astro.url.pathname, mapLocale), Astro.site )} /> )) } <!-- x-default: Dil kullanıcının diliyle eşleşmediğinde kullanılan geri dönüş (fallback) seçeneği --> <link rel="alternate" hreflang="x-default" href={new URL( getLocalizedUrl(Astro.url.pathname, defaultLocale), Astro.site )} /> </head> <body> <!-- Vue island, dil seçici de dahil olmak üzere tüm etkileşimli içeriği oluşturur --> <VueIsland locale={locale} client:only="vue" /> </body></html>Yönlendirme Kurulumu Hakkında Not: Kullandığınız dizin yapısı,
intlayer.config.tsdosyasındakimiddleware.routingayarına bağlıdır:prefix-no-default(varsayılan): Varsayılan dili kök dizinde tutar (önek yok) ve diğerlerine önek ekler. Tüm durumları yakalamak için[...locale]kullanın.prefix-all: Tüm URL'ler bir dil öneki alır. Kök dizini ayrı işlemek gerekmiyorsa standart[locale]kullanabilirsiniz.search-paramveyano-prefix: Dil dizinlerine gerek yoktur. Dil, sorgu parametreleri veya çerezler aracılığıyla yönetilir.
Bir Vue Island Bileşeni Oluşturun
Vue uygulamanızı sarmalayan ve sunucu tarafından algılanan dili alan bir island bileşeni oluşturun. Herhangi bir composable kullanmadan önce
installIntlayer'ı çağırarak Vue örneğinize Intlayer eklentisini kaydetmelisiniz.src/components/vue/VueIsland.vueKodu kopyalaKodu panoya kopyala
<script setup lang="ts">import { ref, getCurrentInstance } from "vue";import { useIntlayer, useLocale, installIntlayer } from "vue-intlayer";import { getLocalizedUrl, getLocaleName, type LocalesValues } from "intlayer";const props = defineProps<{ locale: LocalesValues }>();const app = getCurrentInstance()?.appContext.app;if (app) { installIntlayer(app, { locale: props.locale });}const { locale: currentLocale, availableLocales, setLocale,} = useLocale({ onLocaleChange: (newLocale: LocalesValues) => { window.location.href = getLocalizedUrl(window.location.pathname, newLocale); },});const count = ref(0);const { title } = useIntlayer("app");</script><template> <div> <h1>{{ title }}</h1> <!-- Dil seçici doğrudan island şablonu içinde oluşturulur --> <div class="locale-switcher"> <span class="switcher-label">Dili değiştir:</span> <div class="locale-buttons"> <button v-for="localeItem in availableLocales" :key="localeItem" :class="['locale-btn', { active: localeItem === currentLocale }]" :disabled="localeItem === currentLocale" @click="setLocale(localeItem)" > <span class="ls-own-name">{{ getLocaleName(localeItem) }}</span> <span class="ls-current-name">{{ getLocaleName(localeItem, currentLocale) }}</span> <span class="ls-code">{{ localeItem.toUpperCase() }}</span> </button> </div> </div> </div></template>localeprop'u, Astro sayfasından (sunucu algılaması) aktarılır veinstallIntlayer'ı başlatmak için kullanılır, böylece ağaç içindeki tüm composable'lar için başlangıç dili ayarlanmış olur.Bir Dil Seçici Ekleme
Dil değiştirme işlevselliği doğrudan Vue island şablonuna entegre edilmiştir (yukarıdaki Adım 6'ya bakın).
vue-intlayer'danuseLocalecomposable'ını kullanır ve kullanıcı yeni bir dil seçtiğinde yerelleştirilmiş URL'ye yönlendirir:src/components/vue/VueIsland.vueKodu kopyalaKodu panoya kopyala
<script setup lang="ts">import { useLocale } from "vue-intlayer";import { getLocalizedUrl, getLocaleName, type LocalesValues } from "intlayer";// Adım 6'daki aynı prop/setup app mantığını yeniden kullanın...const { locale: currentLocale, availableLocales, setLocale,} = useLocale({ onLocaleChange: (newLocale: LocalesValues) => { // Dil değişikliğinde yerelleştirilmiş URL'ye yönlendir window.location.href = getLocalizedUrl(window.location.pathname, newLocale); },});</script><template> <div class="locale-switcher"> <span class="switcher-label">Dili değiştir:</span> <div class="locale-buttons"> <button v-for="localeItem in availableLocales" :key="localeItem" :class="['locale-btn', { active: localeItem === currentLocale }]" :disabled="localeItem === currentLocale" @click="setLocale(localeItem)" > <span class="ls-own-name">{{ getLocaleName(localeItem) }}</span> <span class="ls-current-name">{{ getLocaleName(localeItem, currentLocale) }}</span> <span class="ls-code">{{ localeItem.toUpperCase() }}</span> </button> </div> </div></template>Kalıcılık Hakkında Not:
window.location.hrefaracılığıyla yönlendirmek içinonLocaleChangekullanmak, yeni dil URL'sinin ziyaret edilmesini sağlar. Bu da Intlayer ara yazılımının dil çerezini ayarlamasına ve gelecekteki ziyaretlerde kullanıcının tercihini hatırlamasına olanak tanır.Sitemap ve Robots.txt
Intlayer, yerelleştirilmiş site haritanızı ve robots.txt dosyalarınızı dinamik olarak oluşturmak için yardımcı programlar sunar.
Sitemap
Intlayer comes with a built-in sitemap generator to help you create a sitemap for your application easily. It handles localized routes and adds the necessary metadata for search engines.
The Intlayer generated sitemap supports the
xhtml:linknamespace (Hreflang XML Extensions). Unlike the default sitemap generators that only list raw URLs, Intlayer automatically creates the required bidirectional links between all language versions of a page (e.g.,/about,/about?lang=fr, and/about?lang=es). This ensures search engines correctly index and serve the right language version to the right audience.Tüm yerelleştirilmiş rotalarınızı içeren bir site haritası oluşturmak için
src/pages/sitemap.xml.tsdosyasını oluşturun.src/pages/sitemap.xml.tsKodu kopyalaKodu panoya kopyala
import type { APIRoute } from "astro";import { generateSitemap, type SitemapUrlEntry } from "intlayer";const pathList: SitemapUrlEntry[] = [ { path: "/", changefreq: "daily", priority: 1.0 }, { path: "/about", changefreq: "monthly", priority: 0.7 },];const SITE_URL = import.meta.env.SITE ?? "http://localhost:4321";export const GET: APIRoute = async ({ site }) => { const xmlOutput = generateSitemap(pathList, { siteUrl: SITE_URL }); return new Response(xmlOutput, { headers: { "Content-Type": "application/xml" }, });};Robots.txt
Arama motoru taramasını kontrol etmek için
src/pages/robots.txt.tsdosyasını oluşturun.src/pages/robots.txt.tsKodu kopyalaKodu panoya kopyala
import type { APIRoute } from "astro";import { getMultilingualUrls } from "intlayer";const getAllMultilingualUrls = (urls: string[]) => urls.flatMap((url) => Object.values(getMultilingualUrls(url)) as string[]);const disallowedPaths = getAllMultilingualUrls(["/admin", "/private"]);export const GET: APIRoute = ({ site }) => { const robotsTxt = [ "User-agent: *", "Allow: /", ...disallowedPaths.map((path) => `Disallow: ${path}`), "", `Sitemap: ${new URL("/sitemap.xml", site).href}`, ].join("\n"); return new Response(robotsTxt, { headers: { "Content-Type": "text/plain" }, });};Bileşenlerinizin iç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ı sunar.
Kurulum 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ının 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;Bileşenlerinizi dönüştürmek ve içeriği çıkarmak için çıkarıcıyı çalıştırın
bashKodu kopyalaKodu panoya kopyala
npx intlayer extract
TypeScript Yapılandırması
Intlayer, kod tabanınızı daha sağlam hale getirmek için TypeScript'ten yararlanmak amacıyla modül artırımı (module augmentation) kullanır.


TypeScript yapılandırmanızın otomatik olarak oluşturulan türleri içerdiğinden emin olun.
Kodu panoya kopyala
{ // ... mevcut TypeScript yapılandırmanız "include": [ // ... mevcut TypeScript yapılandırmanız ".intlayer/**/*.ts", // Otomatik oluşturulan türleri dahil edin ],}Git Yapılandırması
Intlayer tarafından oluşturulan dosyaların yoksayılması önerilir. Bu, onları Git deponuza göndermenizi engeller.
Bunu yapmak için .gitignore dosyanıza aşağıdaki talimatları ekleyin:
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 Kurulum
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 önizlemesi.
- Kolayca çeviri oluşturmak ve güncellemek için hızlı eylemler.
Uzantı kullanımı hakkında daha fazla bilgi için VS Code Uzantısı dokümantasyonuna bakın.
Bilginizi Derinleştirin
Daha fazlarını öğrenmek isterseniz, içeriğinizi dış kaynaklara aktarmak için Görsel Editör'ü uygulayabilir veya CMS kullanabilirsiniz.