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 daha küreselleştikçe, web geliştiricilerinin farklı ülkelerden ve kültürlerden gelen kullanıcılara hitap edebilen uygulamalar oluşturması giderek daha önemli hale geliyor. Bunu başarmanın ana 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 makalede, React Next.js uygulamanıza sunucu tarafı render ile nasıl uluslararasılaştırma ekleyeceğimizi inceleyeceğiz. TL;DR: Tam örneği buradan 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ıza uluslararasılaştırma (i18n) eklemek için önce bir i18n kütüphanesi seçeceğiz. Birkaç popüler kütüphane var; bunlar arasında next-intl. Bu örnekte ise TacoTranslate'ı kullanacağız.
TacoTranslate, en son yapay zeka teknolojisini 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 artık TacoTranslate hesabınızı, bir çeviri projesini ve ilgili API anahtarlarını oluşturma zamanı. Buradan bir hesap oluşturun. Ücretsizdir ve kredi kartı eklemenizi gerektirmez.
TacoTranslate uygulama kullanıcı 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
. Ö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 çevresel değişken daha ekleyeceğiz: TACOTRANSLATE_DEFAULT_LOCALE
ve TACOTRANSLATE_ORIGIN
.
TACOTRANSLATE_DEFAULT_LOCALE
: Varsayılan yedek yerel kodu. Bu örnekte bunu İngilizce içinen
olarak ayarlayacağız.TACOTRANSLATE_ORIGIN
: Metinlerinizin saklanacağı “klasör”, örneğin web sitenizin URL'si. Origin'ler hakkında daha fazlasını burada okuyun.
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.com
Adım 3: TacoTranslate'i kurma
Uygulamanızla TacoTranslate'i entegre etmek için önceki API anahtarlarını kullanarak bir istemci oluşturmanız gerekecek. Örneğin, /tacotranslate-client.js
adında 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ımlanacak.
İstemciyi ayrı bir dosyada oluşturmak, daha sonra tekrar kullanmayı kolaylaştırır. getLocales
bazı yerleşik hata işleme özelliklerine sahip basit bir yardımcı işlevdir. Şimdi, /app/[locale]/tacotranslate.tsx
adında 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 belirten 'use client';
ifadesine dikkat edin.
Bağlam sağlayıcı artık hazır olduğuna göre, uygulamamızdaki kök düzen olan /app/[locale]/layout.tsx
adlı bir dosya oluşturun. Bu yolun Dynamic Routes kullanan bir klasör içerdiğine dikkat edin; 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 amacıyla Dynamic Route
parametremiz olan [locale]
’ı kullandığımızdır. Ayrıca, generateStaticParams
projenizde 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'ını destekler. Bu, çevirilmemiş içeriğin önce kısa bir süre görünmesine yol açmak yerine çevirilmiş içeriği anında göstererek kullanıcı deneyimini büyük ölçüde iyileştirir. Ayrıca, kullanıcı tarafından görüntülenen sayfa için gerekli çevirilere zaten sahip olduğumuz için istemcide ağ isteklerini atlayabiliriz.
Sunucu tarafı renderlamayı 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 staging 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ö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);
}
Next.js Middleware dokümantasyonu'na uygun olarak matcher
öğesini 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ız konusunda fikir almak için tam örnek koda göz atın!
Adım 5: Yayınla ve test et!
İşimiz bitti! React uygulamanız, herhangi bir diziyi Translate
bileşenine eklediğinizde artık otomatik olarak çevrilecek. API anahtarının read/write
izinlerine sahip ortamlarda yalnızca yeni çevrilecek dizeleri oluşturabileceğini unutmayın. Üretim uygulamanızı bu tür bir API anahtarıyla test edebileceğiniz, yeni dizeleri canlıya almadan önce ekleyebileceğiniz kapalı ve güvenli bir staging (hazırlık) ortamı bulundurmanızı öneririz. Bu, gizli API anahtarınızın kimsenin çalmasını engelleyecek ve çeviri projenizin alakasız yeni dizelerle 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!