App Router kullanan bir Next.js uygulamasında uluslararasılaştırma (i18n) nasıl uygulanır
React uygulamanızı daha erişilebilir hale getirin ve uluslararasılaştırma (i18n) ile yeni pazarlara ulaşın.
Dünya giderek daha fazla küreselleştikçe, web geliştiricilerinin farklı ülkelerden ve kültürlerden gelen kullanıcılara hitap edebilecek uygulamalar geliştirmesi giderek daha önemli hale geliyor. Bunu başarmanın kilit yollarından biri, uygulamanızı farklı dillere, para birimlerine ve tarih formatlarına uyarlamanıza olanak tanıyan uluslararasılaştırma (i18n)'dır.
Bu yazıda, React Next.js uygulamanıza sunucu tarafı render (server side rendering) ile birlikte uluslararasılaştırmayı nasıl ekleyeceğimizi inceleyeceğiz. TL;DR: Tam örneği burada inceleyin.
Bu kılavuz, App Router kullanan Next.js uygulamaları içindir.
Eğer Pages Router kullanıyorsanız, bunun yerine bu kılavuza bakın.
Adım 1: Bir i18n kütüphanesi yükleyin
Next.js uygulamanızda uluslararasılaştırmayı (i18n) uygulamak için önce bir i18n kütüphanesi seçeceğiz. next-intl dahil olmak üzere birkaç popüler kütüphane var. Ancak bu örnekte TacoTranslate kullanacağız.
TacoTranslate, gelişmiş yapay zeka kullanarak metinlerinizi herhangi bir dile otomatik olarak çevirir ve sizi JSON dosyalarının zahmetli yönetiminden kurtarır.
Terminalinizde npm kullanarak yükleyelim:
npm install tacotranslate
Adım 2: Ücretsiz bir TacoTranslate hesabı oluşturun
Modülü kurduğunuza göre, şimdi TacoTranslate hesabınızı, bir çeviri projesi ve ilişkili API anahtarlarını oluşturmanın zamanı geldi. Buradan bir hesap oluşturun. Ücretsizdir ve kredi kartı eklemenizi gerektirmez.
TacoTranslate uygulama arayüzünde bir proje oluşturun ve API anahtarları sekmesine gidin. Bir read
anahtarı ve bir read/write
anahtarı oluşturun. Bunları ortam değişkenleri olarak kaydedeceğiz. read
anahtarı bizim public
dediğimiz anahtar, read/write
anahtarı ise secret
anahtardır. Örneğin, bunları projenizin kök dizinindeki bir .env
dosyasına ekleyebilirsiniz.
TACOTRANSLATE_PUBLIC_API_KEY=123456
TACOTRANSLATE_SECRET_API_KEY=789010
Gizli read/write
API anahtarını istemci tarafı üretim ortamlarına asla sızdırmadığınızdan emin olun.
Ayrıca iki ortam değişkeni daha ekleyeceğiz: TACOTRANSLATE_DEFAULT_LOCALE
ve TACOTRANSLATE_ORIGIN
.
TACOTRANSLATE_DEFAULT_LOCALE
: Varsayılan yedek (fallback) yerel dil kodu. Bu örnekte bunu İngilizce içinen
olarak ayarlayacağız.TACOTRANSLATE_ORIGIN
: Dizelerinizin saklanacağı "klasör", örneğin web sitenizin URL'si. Origin'ler hakkında daha fazla bilgi edinin.
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.com
Adım 3: TacoTranslate'i Ayarlama
Uygulamanıza TacoTranslate'i entegre etmek için, daha önceki API anahtarlarını kullanarak bir istemci oluşturmanız gerekecek. Örneğin, /tacotranslate-client.js
adlı bir dosya oluşturun.
const {default: createTacoTranslateClient} = require('tacotranslate');
const tacoTranslate = createTacoTranslateClient({
apiKey:
process.env.TACOTRANSLATE_SECRET_API_KEY ??
process.env.TACOTRANSLATE_PUBLIC_API_KEY ??
process.env.TACOTRANSLATE_API_KEY,
projectLocale:
process.env.TACOTRANSLATE_IS_PRODUCTION === 'true'
? process.env.TACOTRANSLATE_PROJECT_LOCALE
: undefined,
});
module.exports = tacoTranslate;
Kısa süre içinde TACOTRANSLATE_API_KEY
ve TACOTRANSLATE_PROJECT_LOCALE
otomatik olarak tanımlanacaktır.
İstemciyi ayrı bir dosyada oluşturmak, daha sonra tekrar kullanmayı kolaylaştırır. getLocales
sadece bazı yerleşik hata işleme içeren bir yardımcı fonksiyondur. Şimdi, /app/[locale]/tacotranslate.tsx
adlı bir dosya oluşturun; burada TacoTranslate
sağlayıcısını uygulayacağız.
'use client';
import React, {type ReactNode} from 'react';
import {
type TranslationContextProperties,
TacoTranslate as ImportedTacoTranslate,
} from 'tacotranslate/react';
import tacoTranslateClient from '@/tacotranslate-client';
export default function TacoTranslate({
locale,
origin,
localizations,
children,
}: TranslationContextProperties & {
readonly children: ReactNode;
}) {
return (
<ImportedTacoTranslate
client={tacoTranslateClient}
locale={locale}
origin={origin}
localizations={localizations}
>
{children}
</ImportedTacoTranslate>
);
}
Bu bir istemci bileşeni olduğunu gösteren 'use client';
ifadesine dikkat edin.
Bağlam sağlayıcısı artık hazır olduğuna göre, /app/[locale]/layout.tsx
adlı bir dosya oluşturun; bu dosya uygulamamızdaki kök düzen olacaktır. Bu yolun, dinamik parametre olan [locale]
’yi barındıran ve Dynamic Routes kullanan bir klasör içerdiğine dikkat edin.
import React, {type ReactNode} from 'react';
import {type Locale, isRightToLeftLocaleCode} from 'tacotranslate';
import './global.css';
import tacoTranslateClient from '@/tacotranslate-client';
import TacoTranslate from './tacotranslate';
export async function generateStaticParams() {
const locales = await tacoTranslateClient.getLocales();
return locales.map((locale) => ({locale}));
}
type RootLayoutParameters = {
readonly params: Promise<{locale: Locale}>;
readonly children: ReactNode;
};
export default async function RootLayout({params, children}: RootLayoutParameters) {
const {locale} = await params;
const origin = process.env.TACOTRANSLATE_ORIGIN;
const localizations = await tacoTranslateClient.getLocalizations({
locale,
origins: [origin /* , other origins to fetch */],
});
return (
<html lang={locale} dir={isRightToLeftLocaleCode(locale) ? 'rtl' : 'ltr'}>
<body>
<TacoTranslate
locale={locale}
origin={origin}
localizations={localizations}
>
{children}
</TacoTranslate>
</body>
</html>
);
}
Burada dikkat edilmesi gereken ilk şey, o dil için çevirileri almak üzere Dynamic Route
parametremiz [locale]
’ı kullandığımızdır. Ayrıca, generateStaticParams
projeniz için etkinleştirdiğiniz tüm locale kodlarının önceden oluşturulmasını sağlıyor.
Şimdi ilk sayfamızı oluşturalım! /app/[locale]/page.tsx
adlı bir dosya oluşturun.
import React from 'react';
import {Translate} from 'tacotranslate/react';
export const revalidate = 60;
export default async function Page() {
return (
<Translate string="Hello, world!" />
);
}
Next.js'in sayfayı 60 saniye sonra yeniden oluşturmasını ve çevirilerinizi güncel tutmasını sağlayan revalidate
değişkenine dikkat edin.
Adım 4: Sunucu tarafı render'ı uygulama
TacoTranslate sunucu tarafı renderlamayı destekler. Bu, çevrilmemiş içeriğin önce kısa bir süre görünmesi yerine çevirilmiş içeriği anında göstererek kullanıcı deneyimini büyük ölçüde iyileştirir. Ayrıca, kullanıcının görüntülediği sayfa için gerekli çevirilere zaten sahip olduğumuzdan istemci tarafında ağ isteklerini atlayabiliriz.
Sunucu tarafı render'ı kurmak için /next.config.js
dosyasını oluşturun veya değiştirin:
const withTacoTranslate = require('tacotranslate/next/config').default;
const tacoTranslateClient = require('./tacotranslate-client');
module.exports = async () => {
const config = await withTacoTranslate(
{},
{
client: tacoTranslateClient,
isProduction:
process.env.TACOTRANSLATE_ENV === 'production' ||
process.env.VERCEL_ENV === 'production' ||
(!(process.env.TACOTRANSLATE_ENV || process.env.VERCEL_ENV) &&
process.env.NODE_ENV === 'production'),
}
);
// NOTE: Remove i18n from config when using the app router
return {...config, i18n: undefined};
};
Kurulumunuza uygun olacak şekilde isProduction
kontrolünü değiştirin. Eğer true
, TacoTranslate genel API anahtarını gösterecektir. Yerel, test veya staging ortamındaysak (isProduction
is false
), yeni metinlerin çeviri için gönderildiğinden emin olmak üzere gizli read/write
API anahtarını kullanacağız.
Yönlendirme ve yeniden yönlendirme beklendiği gibi çalışmasını sağlamak için, /middleware.ts
adlı bir dosya oluşturmamız gerekecek. Middleware kullanarak kullanıcıları tercih ettikleri dilde sunulan sayfalara yönlendirebiliriz.
import {type NextRequest} from 'next/server';
import {middleware as tacoTranslateMiddleware} from 'tacotranslate/next';
import tacoTranslate from '@/tacotranslate-client';
export const config = {
matcher: ['/((?!api|_next|favicon.ico).*)'],
};
export async function middleware(request: NextRequest) {
return tacoTranslateMiddleware(tacoTranslate, request);
}
matcher
öğesini Next.js Middleware belgelerine uygun olarak yapılandırdığınızdan emin olun.
İstemci tarafında, kullanıcının tercih ettiği dili değiştirmek için locale
çerezini değiştirebilirsiniz. Bunu nasıl yapacağınıza dair fikirler için lütfen tam örnek koduna bakın!
Adım 5: Yayınlayın ve test edin!
İşlem tamam! React uygulamanız artık herhangi bir metni Translate
bileşenine eklediğinizde otomatik olarak çevrilecektir. Dikkat: yalnızca API anahtarında read/write
izinlerine sahip ortamlar çeviri için yeni metinler oluşturabilecektir. Böyle bir API anahtarıyla üretim uygulamanızı test edebileceğiniz kapalı ve güvenli bir staging ortamı oluşturmanızı ve canlıya almadan önce yeni metinleri eklemenizi öneririz. Bu, gizli API anahtarınızın başkaları tarafından çalınmasını ve yeni, alakasız metinlerin eklenmesiyle çeviri projenizin gereksiz yere şişmesini önleyecektir.
Be sure to check out the complete example over at our GitHub profile. There, you’ll also find an example of how to do this using the Pages Router! If you encounter any problems, feel free to reach out, and we’ll be more than happy to help.
TacoTranslate lets you automatically localize your React applications quickly to and from over 75 languages. Get started today!