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 da küreselleştikçe, web geliştiricilerinin farklı ülkelerden ve kültürlerden kullanıcıları karşılayabilen uygulamalar oluşturması giderek daha önemli hale geliyor. Bunu başarmanın önemli yollarından biri, uygulamanızı farklı dillere, para birimlerine ve tarih formatlarına uyarlamanıza olanak tanıyan uluslararasılaştırma (i18n) yöntemidir.
Bu makalede, React Next.js uygulamanıza server side rendering ile birlikte uluslararasılaştırmayı nasıl ekleyeceğimizi keşfedeceğiz. TL;DR: Tam örneği buradan görebilirsiniz.
Bu rehber, App Router kullanan Next.js uygulamaları içindir.
Eğer Pages Router kullanıyorsanız, bunun yerine bu rehbere bakınız.
Adım 1: Bir i18n kütüphanesi kurun
Next.js uygulamanızda uluslararasılaştırmayı uygulamak için önce bir i18n kütüphanesi seçeceğiz. next-intl dahil olmak üzere birkaç popüler kütüphane bulunmaktadır. Ancak bu örnekte TacoTranslate kullanacağız.
TacoTranslate, gelişmiş yapay zeka kullanarak dizelerinizi otomatik olarak herhangi bir dile ç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ü yüklediğinize göre, şimdi TacoTranslate hesabınızı, bir çeviri projesi ve ilgili API anahtarlarını oluşturmanın zamanı geldi. Buradan bir hesap oluşturun. Ücretsizdir ve kredi kartı eklemenizi gerektirmez.
TacoTranslate uygulama arayüzü içinde bir proje oluşturun ve API anahtarları sekmesine gidin. Bir tane read
anahtarı ve bir tane read/write
anahtarı oluşturun. Bunları ortam değişkenleri olarak kaydedeceğiz. read
anahtarına public
diyoruz ve read/write
anahtarı secret
olarak adlandırıyoruz. Örneğin, bunları projenizin kök dizininde bulunan .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.
İki tane daha ortam değişkeni ekleyeceğiz: TACOTRANSLATE_DEFAULT_LOCALE
ve TACOTRANSLATE_ORIGIN
.
TACOTRANSLATE_DEFAULT_LOCALE
: Varsayılan yedek yerel kodu. Bu örnekte, İngilizce içinen
olarak ayarlayacağız.TACOTRANSLATE_ORIGIN
: Metinlerinizin saklanacağı “klasör”, örneğin web sitenizin URL’si. Originler hakkında daha fazla bilgi edinin.
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.com
Adım 3: TacoTranslate Kurulumu
To integrate TacoTranslate with your application, you’ll need to create a client using the API keys from earlier. For example, create a file named /tacotranslate-client.js
.
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 yönetimi içeren bir yardımcı fonksiyondur. Şimdi, TacoTranslate
sağlayıcısını uygulayacağımız /app/[locale]/tacotranslate.tsx
adlı bir dosya oluşturun.
'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 belirten 'use client';
ifadesine dikkat edin.
Artık bağlam sağlayıcımız hazır olduğuna göre, /app/[locale]/layout.tsx
adında bir dosya oluşturun, bu uygulamamızdaki kök düzenidir. Bu yolun, Dynamic Routes kullanan bir klasörü olduğunu unutmayın; 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 not edilmesi gereken ilk şey, o dil için çevirileri almak üzere Dynamic Route
parametremiz [locale]
kullanıyor olmamızdır. Ek olarak, generateStaticParams
projeniz için etkinleştirdiğiniz tüm yerel ayar kodlarının önceden render edilmesini 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 işleminin uygulanması
TacoTranslate sunucu tarafı renderlamayı destekler. Bu, çevrilmemiş içeriğin önce gözükmesi yerine, çevrilmiş içeriğin hemen gösterilmesiyle kullanıcı deneyimini büyük ölçüde iyileştirir. Ayrıca, kullanıcı tarafından görüntülenen sayfa için ihtiyacımız olan çevirilere zaten sahip olduğumuz için istemci tarafında ağ isteklerini atlayabiliriz.
Sunucu tarafı render'ı (server side rendering) 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};
};
isProduction
kontrolünü kurulumunuza uyacak şekilde değiştirin. true
ise, TacoTranslate genel API anahtarını ortaya çıkaracaktır. Yerel, test veya hazırlama ortamındaysak (isProduction
is false
), yeni dizgilerin çeviri için gönderildiğinden emin olmak için gizli read/write
API anahtarını kullanacağız.
Yönlendirme ve yeniden yönlendirme işlemlerinin 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 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 koda bakın!
Adım 5: Yayınla ve test et!
İşimiz bitti! Artık herhangi bir metni Translate
bileşenine eklediğinizde React uygulamanız otomatik olarak çevrilecektir. API anahtarında sadece read/write
izinlerine sahip ortamların yeni çevrilecek metinler oluşturabileceğini unutmayın. Canlıya geçmeden önce yeni metinler ekleyerek üretim uygulamanızı böyle bir API anahtarıyla test edebileceğiniz kapalı ve güvenli bir hazırlık ortamı oluşturmanızı öneririz. Bu, gizli API anahtarınızın çalınmasını önleyecek ve çeviri projenizin gereksiz, ilgisiz metinlerle şişmesini engelleyecektir.
GitHub profilimizdeki tam örneğe göz atmayı unutmayın. Orada ayrıca Pages Router kullanarak bunu nasıl yapacağınıza dair bir örnek de bulacaksınız! Herhangi bir sorunla karşılaşırsanız, lütfen bizimle iletişime geçin, size yardımcı olmaktan memnuniyet duyarız.
TacoTranslate, React uygulamalarınızı herhangi bir dile hızlıca ve otomatik olarak yerelleştirmenizi sağlar. Bugün başlayın!