App Router kullanan bir Next.js uygulamasında uluslararasılaştırma 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 daha küreselleştikçe, web geliştiricilerinin farklı ülkelerden ve kültürlerden kullanıcıların ihtiyaçlarına hitap edebilen uygulamalar geliştirmesi giderek daha önemli hale geliyor. Bu konuda başarının ana yollarından biri, uygulamanızı farklı dillere, para birimlerine ve tarih formatlarına uyarlamanıza olanak sağlayan uluslararasılaştırma (i18n)'dır.
Bu makalede, React Next.js uygulamanıza sunucu tarafı oluşturma ile nasıl uluslararasılaştırma ekleyeceğimizi inceleyeceğiz. TL;DR: Tam örneği buradan görebilirsiniz.
Bu kılavuz, App Router kullanan Next.js uygulamaları içindir.
Eğer Pages Router kullanıyorsanız, bunun yerine bu kılavuzu inceleyin.
Adım 1: Bir i18n kütüphanesi yükleyin
Next.js uygulamanıza uluslararasılaştırma (i18n) eklemek için önce bir i18n kütüphanesi seçeceğiz. Birkaç popüler kütüphane vardır; bunlar arasında next-intl sayılabilir. Ancak bu örnekte TacoTranslate kullanacağız.
TacoTranslate, gelişmiş yapay zeka kullanarak metinlerinizi otomatik olarak herhangi bir dile çevirir ve sizi JSON dosyalarının zahmetli yönetiminden kurtarır.
Bunu terminalinizde npm kullanarak yükleyelim:
npm install tacotranslateAdım 2: Ücretsiz bir TacoTranslate hesabı oluşturun
Modülü yüklediğinize 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ına public diyoruz ve read/write anahtarı secret'tir. Örneğin, bunları projenizin kök dizinindeki .env dosyasına ekleyebilirsiniz.
TACOTRANSLATE_PUBLIC_API_KEY=123456
TACOTRANSLATE_SECRET_API_KEY=789010Gizli 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 kodu. Bu örnekte, İngilizce için bunuenolarak ayarlayacağız.TACOTRANSLATE_ORIGIN: Metinlerinizin saklanacağı “klasör”, örneğin web sitenizin URL'si. Origins hakkında daha fazla bilgi edinin.
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.comAdım 3: TacoTranslate'i Kurma
TacoTranslate'i uygulamanıza 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 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>
);
}Bunun bir istemci bileşeni olduğunu belirten 'use client'; ifadesine dikkat edin.
Bağlam sağlayıcısı artık hazır olduğuna göre, uygulamamızdaki kök layout olan /app/[locale]/layout.tsx adlı bir dosya oluşturun. Bu yolun Dynamic Routes kullanan bir klasör içerdiğini ve burada [locale] dinamik parametredir.
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 olan [locale]’ı kullandığımızdır. Ayrıca, generateStaticParams proje 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'e sayfayı 60 saniye sonra yeniden oluşturmasını ve çevirilerinizi güncel tutmasını söyleyen revalidate değişkenine dikkat edin.
Adım 4: Sunucu tarafı render'ı uygulama
TacoTranslate sunucu tarafı render'lamayı destekler. Bu, çevrilmemiş içeriğin önce bir anlık görünmesi yerine çevrilmiş içeriği hemen 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 gereken çevirilere zaten sahip olduğumuz için istemci tarafında ağ isteklerini atlayabiliriz.
Sunucu tarafı render'ı (server-side rendering) ayarlamak 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 uyacak şekilde isProduction kontrolünü değiştirin. Eğer true, TacoTranslate genel API anahtarını gösterecektir. Yerel, test veya hazırlık ortamındaysak (isProduction is false) yeni dizelerin çeviri için gönderilmesini sağlamak üzere gizli read/write API anahtarını kullanacağız.
Yönlendirme ve yeniden yönlendirmelerin 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 şekilde ayarladığı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 kodu inceleyin!
Adım 5: Yayınlayın ve test edin!
İşimiz bitti! React uygulamanız artık Translate bileşenine herhangi bir dize eklediğinizde otomatik olarak çevrilecektir. API anahtarında read/write izinlerine sahip olan ortamların çevrilecek yeni dizeler oluşturabileceğini unutmayın. Böyle bir API anahtarıyla üretim uygulamanızı test edebileceğiniz kapalı ve güvenli bir staging ortamı oluşturmanızı öneririz; canlıya geçmeden önce yeni dizeler ekleyebilirsiniz. Bu, gizli API anahtarınızın çalınmasını ve yeni, alakasız dizeler eklenerek ç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!