Sorunuzu sorun ve bu sayfaya ve seçtiğiniz AI sağlayıcısına referans vererek belgenin bir özetini alın
Intlayer MCP Sunucusunu favori AI asistanınıza entegre ederek tüm belgeleri doğrudan ChatGPT, DeepSeek, Cursor, VSCode vb. üzerinden alabilirsiniz.
MCP Sunucu belgesini görüntüleBu 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
next-intl ve Intlayer ile Next.js Uluslararasılaştırma (i18n)
Hem next-intl hem de Intlayer, Next.js uygulamaları için tasarlanmış açık kaynaklı uluslararasılaştırma (i18n) çerçeveleridir. Yazılım projelerinde çevirileri, yerelleştirmeyi ve dil değiştirmeyi yönetmek için yaygın olarak kullanılırlar.
Üç temel kavramı paylaşırlar:
Sözlük: Uygulamanızın çevrilebilir içeriğini tanımlama yöntemi.
- Intlayer'da content declaration file olarak adlandırılır, yapılandırılmış veriyi dışa aktaran bir JSON, JS veya TS dosyası olabilir. Daha fazla bilgi için Intlayer dokümantasyonuna bakın.
- next-intl'de messages veya locale messages olarak adlandırılır, genellikle JSON dosyalarında. Daha fazla bilgi için next-intl dokümantasyonuna bakın.
Araçlar: Uygulamada içerik beyanlarını oluşturmak ve yorumlamak için araçlar, örneğin Intlayer için useIntlayer() veya useLocale(), next-intl için useTranslations().
Eklentiler ve Ara Yazılımlar: URL yönlendirmesini, paket optimizasyonunu vb. yönetmek için özellikler, örneğin Intlayer için intlayerMiddleware veya next-intl için createMiddleware.
Intlayer vs. next-intl: Temel Farklılıklar
Intlayer'ın Next.js için diğer i18n kütüphaneleriyle (next-intl gibi) nasıl karşılaştırıldığına dair daha derin bir analiz için next-i18next vs. next-intl vs. Intlayer blog yazısına bakın.
Intlayer ile next-intl Mesajları Nasıl Oluşturulur
Neden Intlayer'ı next-intl ile Kullanmalı?
Intlayer içerik beyan dosyaları genellikle daha iyi bir geliştirici deneyimi sunar. İki ana avantaj nedeniyle daha esnek ve sürdürülebilirlerdir:
Esnek Yerleştirme: Intlayer içerik beyan dosyasını uygulamanızın dosya ağacında herhangi bir yere yerleştirebilirsiniz. Bu, kullanılmayan veya sallanan mesaj dosyaları bırakmadan bileşenleri yeniden adlandırmayı veya silmeyi kolaylaştırır.
Örnek dosya yapıları:
bashKodu kopyalaKodu panoya kopyala
.└── src └── components └── MyComponent ├── index.content.ts # İçerik beyan dosyası └── index.tsx
Merkezi Çeviriler: Intlayer tüm çevirileri tek bir içerik beyanında depolar, hiçbir çevirinin eksik olmasını sağlar. TypeScript projelerinde, eksik çeviriler otomatik olarak tip hataları olarak işaretlenir, geliştiricilere anında geri bildirim sağlar.
Kurulum
Intlayer ve next-intl'i birlikte kullanmak için her iki kütüphaneyi de yükleyin:
Kodu panoya kopyala
npm install intlayer next-intl
next-intl Mesajlarını Dışa Aktarmak İçin Intlayer'ı Yapılandırma
Not: Intlayer'dan next-intl için mesajları dışa aktarmak yapıda hafif farklılıklar getirebilir. Mümkünse, entegrasyonu basitleştirmek için Intlayer-only veya next-intl-only akışını koruyun. Intlayer'dan next-intl mesajları oluşturmanız gerekiyorsa, aşağıdaki adımları takip edin.
Projenizin kökünde bir intlayer.config.ts dosyası oluşturun veya güncelleyin (.mjs / .cjs):
Kodu panoya kopyala
import { Locales, type IntlayerConfig } from "intlayer";const config: IntlayerConfig = { internationalization: { locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH], defaultLocale: Locales.ENGLISH, }, content: { dictionaryOutput: ["next-intl"], // next-intl çıktısını kullan nextIntlMessagesDir: "./intl/messages", // next-intl mesajlarının kaydedileceği yer },};export default config;
Sözlük
Çeşitli formatlardaki içerik beyan dosyalarının örnekleri aşağıdadır. Intlayer bunları next-intl'in tüketebileceği mesaj dosyalarına derleyecektir.
Kodu panoya kopyala
import { t, type Dictionary } from "intlayer";const content = { key: "my-component", content: { helloWorld: t({ en: "Hello World", es: "Hola Mundo", fr: "Bonjour le monde", }), },} satisfies Dictionary;export default content;
next-intl Mesajlarını Oluştur
next-intl için mesaj dosyalarını oluşturmak için şunu çalıştırın:
Kodu panoya kopyala
npx intlayer dictionaries build
Bu, ./intl/messages dizininde kaynaklar oluşturacaktır ( intlayer.config.* dosyasında yapılandırıldığı gibi). Beklenen çıktı:
Kodu panoya kopyala
.└── intl └── messages └── en └── my-content.json └── fr └── my-content.json └── es └── my-content.json
Her dosya, tüm Intlayer içerik beyanlarından derlenmiş mesajları içerir. Üst düzey anahtarlar genellikle content.key alanlarınızla eşleşir.
Next.js Uygulamanızda next-intl Kullanma
Daha fazla detay için resmi next-intl kullanım dokümantasyonuna bakın.
Bir Ara Yazılım Oluşturun (isteğe bağlı):
Otomatik yerel algılama veya yönlendirmeyi yönetmek istiyorsanız, next-intl’in createMiddleware özelliğini kullanın.middleware.tsKodu kopyalaKodu panoya kopyala
import createMiddleware from "next-intl/middleware";import { NextResponse } from "next/server";export default createMiddleware({ locales: ["en", "fr", "es"], defaultLocale: "en",});export const config = { matcher: ["/((?!api|_next|.*\\..*).*)"],};
Mesajları Yüklemek İçin layout.tsx veya _app.tsx Oluşturun:
App Router kullanıyorsanız (Next.js 13+), bir layout oluşturun:app/[locale]/layout.tsxKodu kopyalaKodu panoya kopyala
import { NextIntlClientProvider } from 'next-intl';import { notFound } from 'next/navigation';import React, { ReactNode } from 'react';
export default async function RootLayout({
children, params}: {
children: ReactNode; params: { locale: string };}) {
let messages; try { messages = (await import(`../../intl/messages/${params.locale}.json`)).default; } catch (error) { notFound(); } return ( <html lang={params.locale}> <body> <NextIntlClientProvider locale={params.locale} messages={messages}> {children} </NextIntlClientProvider> </body> </html> );}
Pages Router kullanıyorsanız (Next.js 12 veya aşağı), mesajları `_app.tsx` dosyasında yükleyin:typescript fileName="pages/_app.tsx" import type { AppProps } from 'next/app'; import { NextIntlProvider } from 'next-intl';
function MyApp({ Component, pageProps }: AppProps) {
return ( <NextIntlProvider locale={pageProps.locale} messages={pageProps.messages}> <Component {...pageProps} /> </NextIntlProvider> );}
export default MyApp;
3. **Mesajları Sunucu Tarafında Getirin (Pages Router örneği):**typescript fileName="pages/index.tsx" import { GetServerSideProps } from "next"; import HomePage from "../components/HomePage";
export default HomePage;
export const getServerSideProps: GetServerSideProps = async ({ locale }) => {
const messages = (await import(`../intl/messages/${locale}.json`)).default; return { props: { locale, messages, }, };};
### Next.js Bileşenlerinde İçeriği Kullanma Mesajlar next-intl'e yüklendikten sonra, `useTranslations()` hook'u aracılığıyla bileşenlerinizde kullanabilirsiniz:typescript fileName="src/components/MyComponent/index.tsx" codeFormat="typescript" import type { FC } from "react"; import { useTranslations } from 'next-intl';
const MyComponent: FC = () => { const t = useTranslations('my-component'); // 'my-component' Intlayer'daki içerik anahtarına karşılık gelir
return (
<div> <h1>{t('helloWorld')}</h1> </div>); };
export default MyComponent;
jsx fileName="src/components/MyComponent/index.jsx" codeFormat="esm" import { useTranslations } from "next-intl";
export default function MyComponent() { const t = useTranslations("my-component");
return (
<div> <h1>{t("helloWorld")}</h1> </div>); }
**Hepsi bu kadar!** Intlayer içerik beyan dosyalarınızı güncellediğinizde veya yeni eklediğinizde, next-intl JSON mesajlarınızı yeniden oluşturmak için `intlayer build` komutunu yeniden çalıştırın. next-intl güncellenmiş içeriği otomatik olarak alacak.