Next.js uygulamalarınızda küresel bir kitleye ulaşmak için sorunsuz uluslararasılaştırma (i18n) uygulamayı öğrenin. Yönlendirme, içerik çevirisi ve en iyi uygulamaları kapsar.
Next.js Uluslararasılaştırma: Küresel Kitle İçin Çok Dilli Uygulamalar Geliştirme
Günümüzün birbirine bağlı dünyasında, küresel bir kitleye hitap eden uygulamalar geliştirmek artık bir lüks değil, bir zorunluluktur. Güçlü bir React framework'ü olan Next.js, uluslararasılaştırmayı (i18n) uygulamak için sağlam özellikler sunarak dünya çapındaki kullanıcılara yerelleştirilmiş bir deneyim sunan çok dilli uygulamalar oluşturmanıza olanak tanır. Bu kapsamlı kılavuz, uluslararasılaştırılmış Next.js uygulamaları oluşturmak için temel kavramlar, teknikler ve en iyi uygulamalar konusunda size yol gösterecektir.
Uluslararasılaştırma ve Yerelleştirmeyi Anlamak
Next.js i18n'in ayrıntılarına dalmadan önce, anahtar terimleri açıklığa kavuşturalım:
- Uluslararasılaştırma (i18n): Bir uygulamayı, mühendislik değişikliği gerektirmeden çeşitli dillere ve bölgelere kolayca uyarlanabilecek şekilde tasarlama ve geliştirme sürecidir. Bu, metin, biçimlendirme ve diğer yerel ayara özgü öğelerin soyutlanmasını içerir.
- Yerelleştirme (l10n): Bir uygulamanın belirli bir dile ve bölgeye uyarlanması sürecidir. Bu, metin çevirisi, tarih ve saat biçimlerini, para birimi simgelerini ve daha fazlasını ayarlamayı içerir.
Esasen, i18n uygulamanızı yerelleştirme için hazırlar. Dile bağlı unsurları temel koddan ayırarak, uygulamayı farklı pazarlar için yerelleştirmeyi kolaylaştırırsınız.
Next.js'te Neden Uluslararasılaştırma Uygulanmalı?
Next.js uygulamanızda i18n uygulamak sayısız fayda sunar:
- Genişletilmiş Erişim: İçeriği tercih ettikleri dilde sunarak daha geniş bir kitleye ulaşın.
- İyileştirilmiş Kullanıcı Deneyimi: Farklı bölgelerdeki kullanıcılara daha kişiselleştirilmiş ve ilgi çekici bir deneyim sunun.
- Gelişmiş SEO: Belirli coğrafi bölgeleri hedefleyen yerelleştirilmiş içerik sağlayarak arama motoru optimizasyonunu (SEO) iyileştirin.
- Artan Dönüşümler: Bilgileri kullanıcının ana dilinde sunarak, güven ve anlayışı teşvik ederek dönüşümleri artırın.
- Küresel Marka Varlığı: Kapsayıcılığa olan bağlılığınızı göstererek ve çeşitli kitlelere hitap ederek daha güçlü bir küresel marka varlığı oluşturun.
Next.js i18n Özellikleri ve Yapılandırması
Next.js, yönlendirme ve içerik yönetimi özellikleri aracılığıyla i18n için yerleşik destek sunar. Aşağıda önemli özelliklerin bir dökümü bulunmaktadır:
1. next.config.js'de i18n Yapılandırması
i18n için temel yapılandırma next.config.js
dosyasında yer alır. İşte bir örnek:
/** @type {import('next').NextConfig} */
const nextConfig = {
i18n: {
locales: ['en', 'es', 'fr'], // Desteklenen yerel ayarların (dil kodları) bir dizisi
defaultLocale: 'en', // Kullanılacak varsayılan yerel ayar
localeDetection: true, // Tarayıcı ayarlarına göre otomatik yerel ayar tespitini etkinleştir/devre dışı bırak (isteğe bağlı)
// domains: [
// {
// domain: 'example.com',
// defaultLocale: 'en',
// },
// {
// domain: 'example.es',
// defaultLocale: 'es',
// },
// ],
},
}
module.exports = nextConfig;
Açıklama:
locales
: Uygulamanız tarafından desteklenen dillerin dil kodlarını (örneğin, İngilizce için'en'
, İspanyolca için'es'
, Fransızca için'fr'
) içeren bir dizi. Tutarlılık için ISO 639-1 dil kodlarını takip ettiğinizden emin olun.defaultLocale
: Uygulamanızın kullanacağı varsayılan dil. Bu, URL'de başka bir dil belirtilmemişse veya kullanıcının tarayıcı ayarlarından algılanmamışsa görüntülenen dildir. Birincil hedef kitlenizi temsil eden bir dil seçin.localeDetection
: Next.js'in kullanıcının tercih ettiği dili tarayıcı ayarlarına göre otomatik olarak algılayıp algılamayacağını kontrol eden bir boolean değeri.true
olarak ayarlanırsa, Next.js kullanıcıyı sitenizin uygun dil sürümüne yönlendirmeye çalışır.domains
(isteğe bağlı): Yerel ayarları belirli alan adlarıyla ilişkilendirmenize olanak tanıyan bir dizi. Bu, farklı diller için ayrı alan adlarınız varsa (örneğin, İngilizce içinexample.com
, İspanyolca içinexample.es
) kullanışlıdır.
2. Yerel Ayar Önekleriyle Yönlendirme
Next.js, rotaları otomatik olarak yerel ayar ile önekler. Örneğin, /about
adresinde bir sayfanız varsa ve yerel ayar 'es' (İspanyolca) ise, URL /es/about
olur. Bu, sayfaların farklı dil sürümlerini mümkün kılar ve arama motorlarının her yerel ayar için içeriği dizine eklemesini sağlar. Framework, yönlendirmeyi ve rota yönetimini sizin için halleder.
3. useRouter
Hook'unu Kullanma
next/router
'dan gelen useRouter
hook'u, mevcut yerel ayara ve diğer yönlendirme bilgilerine erişim sağlar.
import { useRouter } from 'next/router';
function MyComponent() {
const router = useRouter();
const { locale, locales, defaultLocale } = router;
return (
Mevcut yerel ayar: {locale}
Mevcut yerel ayarlar: {locales.join(', ')}
Varsayılan yerel ayar: {defaultLocale}
);
}
export default MyComponent;
router
nesnesi aşağıdaki anahtar özellikleri sunar:
locale
: O anda seçili olan yerel ayar (ör. 'en', 'es', 'fr').locales
:next.config.js
'de tanımlanan tüm desteklenen yerel ayarların bir dizisi.defaultLocale
:next.config.js
'de ayarlanan varsayılan yerel ayar.asPath
: Tarayıcıda görüntülendiği şekliyle, yerel ayar öneki dahil yol (ör./es/about
).pathname
: Yerel ayar öneki olmadan yol (ör./about
).
İçerik Çeviri Stratejileri
Next.js uygulamanızı i18n için yapılandırdıktan sonra, içeriğinizi çevirmek için stratejiler uygulamanız gerekecektir. İşte birkaç popüler yaklaşım:
1. Özel Bir Çeviri Yönetim Sistemi (TMS) Kullanma
Birçok dile sahip büyük ölçekli projeler için bir TMS şiddetle tavsiye edilir. Popüler seçenekler şunlardır:
- Phrase: Next.js dahil olmak üzere çeşitli platformlar için entegrasyonlara sahip bulut tabanlı bir TMS. İşbirliğine dayalı özellikler ve otomatik iş akışları sunar.
- Localize: Geniş bir dosya formatı yelpazesini destekleyen ve çeviri yönetimi özellikleri sunan başka bir bulut tabanlı TMS.
- Crowdin: Açık kaynak topluluğunda çok popüler olan ve Next.js ile iyi entegre olan, ekiplerin içeriği verimli bir şekilde çevirmesine olanak tanıyan güçlü bir TMS.
Faydaları:
- Merkezi çeviri yönetimi.
- Çevirmenler için işbirliği özellikleri.
- Çeviri iş akışlarının otomasyonu.
- Geliştirme iş akışınızla entegrasyon.
2. JSON Çeviri Dosyaları Oluşturma
Daha küçük projeler için, çevirileri saklamak üzere JSON dosyaları kullanmak basit ve etkili bir yöntemdir.
Örnek Dizin Yapısı:
/src
├── locales
│ ├── en.json
│ └── es.json
├── components
│ └── MyComponent.js
└── pages
└── index.js
Örnek en.json
:
{
"greeting": "Hello, world!",
"welcomeMessage": "Welcome to our website."
}
Örnek es.json
:
{
"greeting": "¡Hola, mundo!",
"welcomeMessage": "Bienvenido a nuestro sitio web."
}
Örnek MyComponent.js
:
import { useRouter } from 'next/router';
import en from '../locales/en.json';
import es from '../locales/es.json';
function MyComponent() {
const { locale } = useRouter();
const t = locale === 'es' ? es : en;
return (
{t.greeting}
{t.welcomeMessage}
);
}
export default MyComponent;
Bu yaklaşım esneklik sağlar ve daha küçük projeler için basittir. Genellikle güncellenmesi ve bakımı kolaydır.
3. Bir Çeviri Kütüphanesi Kullanma
Birkaç JavaScript kütüphanesi, React bileşenlerinizdeki içerik çevirisini kolaylaştırır.
next-i18next
: Özellikle Next.js için tasarlanmış popüler bir kütüphane. Framework ile iyi entegre olur ve sunucu tarafı render (SSR) ve istemci tarafı çeviri gibi özellikler sunar.react-i18next
: React için genel amaçlı bir i18n kütüphanesi. Next.js uygulamalarınızda kullanabilirsiniz, ancaknext-i18next
'e kıyasla daha fazla yapılandırma gerektirebilir.
next-i18next
ile örnek (Kurulum: npm install next-i18next i18next react-i18next
):
Bir i18n yapılandırma dosyası oluşturun (örneğin, kök dizininizde i18n.js
):
// i18n.js
import { createServerSideHelpers } from 'next-i18next'
import { i18n } from './next-i18next.config'
export function initI18next(req, res, namespaces = ['common']) {
const helpers = createServerSideHelpers(
req,
res,
i18n,
namespaces
)
return helpers
}
export { appWithTranslation } from 'next-i18next'
export { i18n }
next-i18next için Next.js yapılandırmanızı oluşturun.
// next-i18next.config.js
const { i18n } = require('./next-i18next.config');
/** @type {import('next').NextConfig} */
const nextConfig = {
reactStrictMode: true,
i18n: {
defaultLocale: 'en',
locales: ['en', 'es', 'fr'],
},
// diğer yapılandırmalar
}
module.exports = nextConfig
Yapılandırmayı ve çeviri import'unu _app.js
dosyanıza ekleyin:
import { appWithTranslation } from 'next-i18next';
import '../styles/globals.css';
function MyApp({ Component, pageProps }) {
return ;
}
export default appWithTranslation(MyApp);
Bir klasör oluşturun ve çevirileriniz için yerel ayarlarla doldurun.
/public
└── locales
├── en
│ └── common.json
├── es
│ └── common.json
└── fr
└── common.json
Örnek en/common.json:
{
"greeting": "Hello, world!",
"welcomeMessage": "Welcome to our website."
}
Bir bileşende çeviriyi kullanma:
import { useTranslation } from 'next-i18next';
function MyComponent() {
const { t } = useTranslation('common');
return (
{t('greeting')}
{t('welcomeMessage')}
);
}
export default MyComponent;
Bu örnek, mevcut yerel ayara göre çevirileri almak için useTranslation
hook'unu kullanır.
Dinamik Rotalar ve Statik Site Oluşturma (SSG) Yönetimi
Dinamik rotalar (örneğin, blog yazıları, ürün sayfaları) ve statik site oluşturma (SSG) ile uğraşırken uluslararasılaştırma daha karmaşık hale gelir.
1. Dinamik Rotalar (ör. /blog/[slug])
Dinamik rotalar için, derleme zamanında her yerel ayar için doğru yolları getStaticPaths
kullanarak oluşturmanız gerekir. Bu fonksiyon, Next.js'in önceden render etmesi gereken yolların bir dizisini döndürür.
export async function getStaticPaths() {
const paths = [];
const locales = ['en', 'es', 'fr'];
const posts = await fetchPosts(); // Blog gönderileri verilerini al
posts.forEach(post => {
locales.forEach(locale => {
paths.push({
params: {
slug: post.slug,
},
locale,
});
});
});
return {
paths,
fallback: false, // veya yükleme durumu göstermek istiyorsanız 'blocking'
};
}
export async function getStaticProps({ params, locale }) {
const post = await getPostBySlug(params.slug, locale);
return {
props: {
post,
},
};
}
Açıklama:
getStaticPaths
: Bu fonksiyon, blog gönderileriniz arasında döngü yapar ve her gönderi ve her yerel ayar için bir yol oluşturur.params
nesnesi, rota parametrelerini (örneğin, blog gönderisinin slug'ı) içerir.locale
: Bu parametre, mevcut yerel ayarı sağlar ve belirli bir yerel ayar için çevrilmiş içeriği almanıza olanak tanır.fallback
: Next.js'ingetStaticPaths
içinde tanımlanmayan yolları nasıl ele alacağını belirler.fallback: false
, tanımlanmamış yollar için 404 sayfaları oluşturur.fallback: 'blocking'
, sayfaları talep üzerine önceden render eder.
2. getStaticProps
ile Statik Site Oluşturma (SSG)
getStaticProps
içinde, locale
parametresine göre çevrilmiş içeriği alabilirsiniz.
export async function getStaticProps({ params, locale }) {
// Yerel ayara ve parametrelere göre içerik al
const { post } = await getPostBySlug(params.slug, locale);
return {
props: {
post,
},
};
}
getPostBySlug
fonksiyonu, çeviri dosyalarınızdan, veritabanından veya bir CMS'den alınabilecek olan belirli bir slug ve yerel ayar için çevrilmiş içeriği almalıdır.
3. getServerSideProps
ile Sunucu Tarafı Render (SSR)
Talep zamanında alınması gereken içerik için getServerSideProps
kullanın. Bu, içeriğin sık sık değiştiği veya her kullanıcı için kişiselleştirildiği durumlarda kullanışlıdır.
export async function getServerSideProps({ params, locale, req, res }) {
// Yerel ayara ve parametrelere göre veri al (ör. bir veritabanından)
const data = await fetchData(params.slug, locale);
return {
props: {
data,
},
};
}
Next.js Uluslararasılaştırma için En İyi Uygulamalar
Bu en iyi uygulamaları takip etmek, sağlam, sürdürülebilir ve kullanıcı dostu çok dilli uygulamalar oluşturmanıza yardımcı olacaktır:
- Erken Planlayın: Projenizin başlangıcından itibaren uluslararasılaştırmayı düşünün. Bunu baştan uygulamak, sonradan eklemekten çok daha kolaydır.
- İçeriği Koddan Ayırın: Çevrilebilir tüm metinleri ayrı dosyalarda (ör. JSON dosyaları veya bir TMS) saklayın ve metni doğrudan bileşenlerinize sabit kodlamaktan kaçının.
- Bir Çeviri Yönetim Sistemi (TMS) Kullanın: Daha büyük projeler için bir TMS, çeviri sürecini kolaylaştırabilir ve işbirliğini geliştirebilir.
- Kapsamlı Test Edin: Doğru çevirileri, doğru biçimlendirmeyi ve farklı tarayıcılarda ve cihazlarda düzgün render edilmesini sağlamak için uygulamanızı tüm desteklenen dillerde test edin. Sadece emülatörlerde değil, gerçek cihazlarda test yapın.
- Sağdan Sola (RTL) Dilleri Dikkate Alın: Arapça veya İbranice gibi dilleri destekliyorsanız, tasarımınızın ve düzeninizin sağdan sola metin yönünü barındırdığından emin olun. Next.js bunu otomatik olarak işlemez, bu nedenle CSS veya başka çözümler gerekir.
- Tarih ve Saat Biçimlendirmesini Yönetin: Tarihleri ve saatleri kullanıcının yerel ayarına göre biçimlendirmek için kütüphaneler veya yerleşik fonksiyonlar kullanın. Moment.js ve date-fns bu konuda yardımcı olan iki popüler kütüphanedir.
- Sayı ve Para Birimi Biçimlendirmesini Yönetin: Sayıları ve para birimi simgelerini kullanıcının yerel ayarına göre uygun şekilde biçimlendirin.
- SEO'yu Optimize Edin: Arama motorlarının içeriğinizi doğru bir şekilde dizine eklemesine yardımcı olmak için dile özgü meta etiketleri (
hreflang
) kullanın. URL'lerinize dil kodlarını ekleyin. - Kullanıcı Deneyimine Öncelik Verin: Kullanıcıların diller arasında geçiş yapmaları için açık ve sezgisel bir yol sağlayın. Tarayıcı ayarlarına göre otomatik dil algılama sunmayı düşünün.
- Güncel Kalın: En son özelliklerden ve güvenlik yamalarından yararlanmak için Next.js sürümünüzü ve i18n kütüphanelerinizi güncel tutun.
- Erişilebilirliği (a11y) Dikkate Alın: Çevrilmiş içeriğinizin engelli kullanıcılar için erişilebilir olduğundan emin olun. Görüntüler için alternatif metin sağlayın ve uygun ARIA niteliklerini kullanın. Ekran okuyucularla test yapın.
Uluslararasılaştırılmış Web Siteleri için SEO Hususları
Uluslararasılaştırılmış web sitenizi arama motorları için optimize etmek, dünyanın dört bir yanından organik trafik çekmek için çok önemlidir. İşte bazı önemli SEO en iyi uygulamaları:
hreflang
Etiketleri: Arama motorlarına içeriğinizin dil ve bölgesel varyasyonlarını bildirmek için HTML'inizin<head>
bölümündehreflang
etiketleri uygulayın. Bu, SEO için kritiktir. Örneğin:<link rel="alternate" hreflang="en" href="https://example.com/en/" />
ve<link rel="alternate" hreflang="es" href="https://example.com/es/" />
- Dile Özgü URL'ler: URL'lerinizde dil kodları kullanın (ör.
/en/about
,/es/acerca-de
). Bu, içeriğin dilini hem kullanıcılara hem de arama motorlarına açıkça belirtir. - Yerelleştirilmiş İçerik: İçeriğinizi doğru ve doğal bir şekilde çevirin. Makine çevirileri anadili konuşan biri tarafından gözden geçirilmelidir.
- Yerelleştirilmiş Meta Açıklamaları ve Başlıklar: Arama sonuçlarında tıklama oranlarını artırmak için her dil için benzersiz ve çekici meta açıklamaları ve başlıklar yazın.
- XML Site Haritaları: Sayfalarınızın tüm dil varyasyonlarını içeren XML site haritaları oluşturun ve gönderin.
- İç Bağlantı: İçeriğinizin dil sürümleri arasında uygun iç bağlantılar kullanın.
- Ülkeye Özgü Anahtar Kelime Araştırması: Her bölgedeki kullanıcıların aradığı terimleri belirlemek için her dilde anahtar kelime araştırması yapın.
Örnek: Basit Bir Çok Dilli Blog Oluşturma
Next.js kullanarak basit bir çok dilli blog örneği oluşturalım. Bu, yukarıda tartışılan kavramların nasıl uygulanacağına dair daha somut bir örnek sunacaktır.
1. Proje Kurulumu
Yeni bir Next.js projesi oluşturun:
npx create-next-app my-multi-lang-blog
cd my-multi-lang-blog
2. i18n'i Yapılandırın (next.config.js
)
/** @type {import('next').NextConfig} */
const nextConfig = {
reactStrictMode: true,
i18n: {
locales: ['en', 'es', 'fr'],
defaultLocale: 'en',
},
}
module.exports = nextConfig
3. Çeviri Dosyaları Oluşturun
Kök dizinde bir locales
klasörü oluşturun ve aşağıdaki JSON dosyalarını ekleyin:
locales/en.json
:
{
"title": "Welcome to My Blog",
"postTitle": "My First Post",
"postContent": "This is the content of my first blog post."
}
locales/es.json
:
{
"title": "Bienvenido a mi Blog",
"postTitle": "Mi Primer Post",
"postContent": "Este es el contenido de mi primer publicación de blog."
}
locales/fr.json
:
{
"title": "Bienvenue sur Mon Blog",
"postTitle": "Mon Premier Article",
"postContent": "Ceci est le contenu de mon premier article de blog."
}
4. Blog Gönderi Bileşenini Oluşturun (ör. components/BlogPost.js
)
import { useRouter } from 'next/router';
import en from '../locales/en.json';
import es from '../locales/es.json';
import fr from '../locales/fr.json';
function BlogPost() {
const router = useRouter();
const { locale } = router;
let translations;
switch (locale) {
case 'es':
translations = es;
break;
case 'fr':
translations = fr;
break;
default:
translations = en;
}
return (
{translations.postTitle}
{translations.postContent}
);
}
export default BlogPost;
5. Ana Sayfayı Oluşturun (pages/index.js
)
import { useRouter } from 'next/router';
import BlogPost from '../components/BlogPost';
import en from '../locales/en.json';
import es from '../locales/es.json';
import fr from '../locales/fr.json';
function HomePage() {
const router = useRouter();
const { locale, locales } = router;
let translations;
switch (locale) {
case 'es':
translations = es;
break;
case 'fr':
translations = fr;
break;
default:
translations = en;
}
return (
);
}
export default HomePage;
Bu basitleştirilmiş örnek, Next.js uluslararasılaştırmasının temel ilkelerini göstermektedir. Bu temel çerçeveyi, dinamik rotalar ve çeviri yönetim sistemleriyle entegrasyon gibi daha karmaşık özellikleri içerecek şekilde genişletebilirsiniz. Yukarıdaki bağlantıları Link
bileşeniyle iyileştirmeyi ve uygun locale
niteliğini eklemeyi düşünün.
6. Uygulamayı Çalıştırın
Uygulamayı şu komutla çalıştırın:
npm run dev
Artık blogunuza http://localhost:3000
(İngilizce), http://localhost:3000/es
(İspanyolca) ve http://localhost:3000/fr
(Fransızca) adreslerinden erişebilirsiniz. Başlığın ve blog gönderi içeriğinin seçilen yerel ayara göre çevrildiğini görmelisiniz.
Sonuç
Next.js, web uygulamalarınızda uluslararasılaştırma uygulamak için kapsamlı bir özellik seti sunar. Bu kılavuzda belirtilen ilke ve teknikleri izleyerek, dünya genelindeki kullanıcılara yerelleştirilmiş deneyimler sunan çok dilli uygulamalar oluşturabilirsiniz. i18n stratejinizi erken planlamayı, ihtiyaçlarınız için doğru çeviri yöntemini seçmeyi ve kullanıcı deneyimine öncelik vermeyi unutmayın. Dikkatli planlama ve uygulama ile, küresel bir kitleyle rezonans kuran ve büyüme için yeni fırsatlar açan uygulamalar oluşturabilirsiniz. Sürekli öğrenme, en son sürümleri ve en iyi uygulamaları takip etme, araçlarınızı ve teknolojilerinizi etkili bir şekilde kullandığınızdan emin olmanızı sağlayacaktır.
Teknoloji ilerledikçe, daha gelişmiş i18n özelliklerinin ortaya çıkmasını bekleyin. Farklı kültürler ve dil gruplarındaki kullanıcılara ulaşma yeteneği, dünya çapındaki uygulama geliştiricileri için önemli bir öncelik olmaya devam edecektir. Bu nedenle, i18n'in temellerinde ustalaşmak, günümüzün küresel geliştirme ortamında değerinizi artıracak değerli bir beceridir.