Better i18n'i Next.js ile nasıl kurarım?
`@better-i18n/next` paketi, Next.js App Router ile entegre olur ve ISR destekli CDN tabanlı mesaj çekme özelliği sunar. Bu kılavuzla adım adım kurun.
@better-i18n/next paketi, Next.js App Router ile entegre olur ve arka planda next-intl kullanır. ISR desteğiyle CDN destekli mesaj çekme özelliği ekler.
Kurulum
bun add @better-i18n/next next-intl
Adım 1: i18n yapılandırmasını oluşturun
src/i18n.ts dosyasını oluşturun:
import { createI18n } from '@better-i18n/next';
export const i18n = createI18n({
project: 'acme/dashboard',
defaultLocale: 'en',
localePrefix: 'as-needed', // 'always' | 'as-needed' | 'never'
manifestRevalidateSeconds: 3600, // ISR: yerel dil listesini saatte bir yenile
messagesRevalidateSeconds: 30, // ISR: mesajları her 30 saniyede yenile
});
Yerel dil öneki seçenekleri
| Seçenek | Varsayılan dil URL'si | Diğer dil URL'si |
|---|---|---|
as-needed |
/about |
/tr/about |
always |
/en/about |
/tr/about |
never |
/about |
/about (çerez/başlıktan dil) |
Adım 2: İstek yapılandırmasını kurun
src/i18n/request.ts dosyasını oluşturun:
import { i18n } from '@/i18n';
export default i18n.requestConfig;
Bu, next-intl'e her istek için mesajların nasıl yükleneceğini söyler. Arka planda, ISR önbelleklemesiyle Better i18n CDN'den çeker.
Adım 3: Middleware ekleyin
src/middleware.ts dosyasını oluşturun:
import { i18n } from '@/i18n';
export default i18n.betterMiddleware();
export const config = {
matcher: ['/((?!api|_next|.*\\..*).*)'],
};
Middleware:
- Kullanıcının tercih ettiği yerel dili
Accept-Languagebaşlığından algılar - Uygun yerel dil önekine yönlendirir
- Aşağı akış kullanımı için
x-better-localebaşlığını ayarlar
Adım 4: Provider ekleyin
Kök düzeninizde (src/app/[locale]/layout.tsx):
import { NextIntlClientProvider } from 'next-intl';
import { getMessages } from 'next-intl/server';
export default async function LocaleLayout({
children,
params: { locale },
}) {
const messages = await getMessages();
return (
<html lang={locale}>
<body>
<NextIntlClientProvider messages={messages}>
{children}
</NextIntlClientProvider>
</body>
</html>
);
}
Adım 5: Çevirileri kullanın
import { useTranslations } from 'next-intl';
export function WelcomeBanner() {
const t = useTranslations('common');
return (
<div>
<h1>{t('welcome_title')}</h1>
<p>{t('welcome_description')}</p>
</div>
);
}
Ortam değişkenleri
# .env.local
BETTER_I18N_PROJECT=acme/dashboard
Genel anahtar SDK'ya gömülüdür — salt okunur CDN erişimi için API anahtarına gerek yoktur.
ISR önbelleğe alma nasıl çalışır?
SDK dahili olarak iki createI18nCore örneği oluşturur:
- Manifest core — mevcut yerel dilleri çeker,
manifestRevalidateSecondssaniyede yeniler (varsayılan: 3600s) - Messages core — çevirileri çeker,
messagesRevalidateSecondssaniyede yeniler (varsayılan: 30s)
Bu, yeni çeviriler yayınladıktan sonra Next.js uygulamanızın yeniden derleme gerektirmeden ~30 saniye içinde bunları aldığı anlamına gelir.
Sonraki adımlar
Bu makale yardımcı oldu mu?