Gereksinimler ve Ön Hazırlık
Çok dilli bir WordPress projesine başlamadan önce sunucu ve yazılım ortamınızın bu süreci desteklediğinden emin olmalısınız. WordPress, çok dilli yapılar için yoğun veritabanı sorguları oluşturabilir; bu nedenle kaynak tüketimi konusunda dikkatli olmalısınız.
- PHP Sürümü: En az 8.2 veya üzeri bir sürüm kullanmanız önerilir.
- Veritabanı: MySQL 8.0+ veya MariaDB 10.6+ sürümü, karakter kodlaması için UTF-8mb4 desteği.
- Bellek Limiti:
wp-config.phpdosyanızdadefine('WP_MEMORY_LIMIT', '256M');ayarının yapılmış olması gerekir. - Caching: Çok dilli yapılarda nesne önbellekleme (Redis veya Memcached) kullanımı performansı ciddi oranda artırır.
Çok Dilli WordPress Yöntemlerinin Karşılaştırılması
WordPress'te çok dilli yapı kurmak için birkaç farklı yaklaşım mevcuttur. İhtiyacınıza göre en uygun yöntemi seçmek, projenin sürdürülebilirliği için kritiktir.
| Yöntem | Avantajları | Dezavantajları |
|---|---|---|
| Eklenti Tabanlı (WPML/Polylang) | Kullanımı kolay, SEO uyumlu, geniş destek. | Lisans maliyeti, veritabanı yükü. |
| WordPress Multisite | Tam bağımsız içerik yönetimi, yüksek ölçeklenebilirlik. | Karmaşık yönetim, eklenti uyumluluk sorunları. |
| Headless (API Tabanlı) | Maksimum performans, sınırsız özelleştirme. | Yüksek yazılım geliştirme maliyeti. |
Adım Adım Eklenti Tabanlı Çok Dilli Yapı Kurulumu
En yaygın ve güvenilir yöntem olan eklenti tabanlı yapılandırmada, içeriklerinizi farklı dillerde eşleştirebilir ve tek bir yönetim paneli üzerinden yönetebilirsiniz. İlk adım olarak eklentiyi kurup dil dosyalarını yapılandırmanız gerekir.
Eklenti kurulumundan sonra, sitenizin varsayılan dilini ve eklemek istediğiniz dilleri belirlemelisiniz. İşte temel dil yapılandırması için kullanılan PHP örneği:
// WordPress dil ayarlarını kontrol etme ve dilleri tanımlama
function setup_multilingual_support() {
$supported_languages = array('tr', 'en', 'de');
$current_lang = get_locale();
if (!in_array($current_lang, $supported_languages)) {
// Varsayılan dili ayarla
update_option('WPLANG', 'tr_TR');
}
}
add_action('init', 'setup_multilingual_support');
Bu kod, sitenizin desteklediği dilleri bir dizi içerisinde tutar ve geçerli yerel ayarın bu dizide olup olmadığını kontrol eder. Eğer değilse, varsayılan dili Türkçe olarak sabitler.
URL Yapısı ve SEO Stratejisi
Çok dilli bir sitede SEO başarısı için URL yapısı hayati önem taşır. Google, alt dizinleri (örneğin: site.com/en/) veya alt alan adlarını (örneğin: en.site.com/) önerir. Alt dizin yapısı, alan adı otoritesini (Domain Authority) korumak için genellikle daha avantajlıdır.
Aşağıdaki örnekte, WordPress rewrite kurallarını kullanarak dil parametresini URL'ye nasıl ekleyebileceğinizi görebilirsiniz:
// Özel dil parametresi için rewrite kuralı ekleme
function add_language_rewrite_rules() {
add_rewrite_rule('^([a-z]{2})/page/([0-9]+)/?$', 'index.php?lang=$matches[1]&paged=$matches[2]', 'top');
add_rewrite_rule('^([a-z]{2})/?$', 'index.php?lang=$matches[1]', 'top');
}
add_action('init', 'add_language_rewrite_rules');
Bu kod, site.com/en/ gibi bir adrese gidildiğinde WordPress'in bunu anlamasını ve ilgili dil içeriğini getirmesini sağlar. add_rewrite_rule fonksiyonu, WordPress'in gelen istekleri nasıl yorumlayacağını belirler.
Veritabanı ve Çeviri Yönetimi
Çok dilli yapıda veritabanı, her dilin kendi içeriğini tutacak şekilde genişletilmelidir. Genellikle wp_posts tablosuna bir trid (Translation ID) ve language_code sütunu eklenir. Bu, hangi yazının hangi dilin karşılığı olduğunu takip etmemizi sağlar.
Veritabanı sorgularınızda dil bazlı filtreleme yapmak için şu yöntemi kullanabilirsiniz:
// Belirli bir dildeki yazıları getirme örneği
function get_posts_by_language($lang_code) {
global $wpdb;
$query = $wpdb->prepare(
"SELECT * FROM {$wpdb->posts} p
JOIN wp_icl_translations t ON p.ID = t.element_id
WHERE t.language_code = %s AND p.post_type = 'post'",
$lang_code
);
return $wpdb->get_results($query);
}
Bu sorgu, wp_icl_translations tablosunu kullanarak dil koduna göre filtreleme yapar. $wpdb->prepare kullanımı, SQL Injection saldırılarına karşı veritabanınızı korumak için zorunludur.
Çeviri Dosyaları ve Gettext Kullanımı
Tema ve eklenti metinlerini çevirmek için WordPress'in yerel gettext fonksiyonlarını kullanmalısınız. Bu, .po ve .mo dosyaları aracılığıyla metinlerin dinamik olarak değiştirilmesini sağlar.
// Tema içerisinde çeviri fonksiyonu kullanımı
echo esc_html__('Hoş geldiniz', 'tema-metin-domaini');
// Değişken içeren metinler için
printf(esc_html__('Merhaba, %s!', 'tema-metin-domaini'), $kullanici_adi);
esc_html__ fonksiyonu, metni çevirir ve XSS (Cross-Site Scripting) saldırılarını engellemek için HTML etiketlerini temizler. printf kullanımı ise dinamik verilerin güvenli bir şekilde metne yerleştirilmesini sağlar.
Güvenlik ve Performans İpuçları
Kritik Uyarı: Çok dilli yapılarda "Translation Cache" (Çeviri Önbelleği) kullanırken, veritabanı sorgularının önbelleğe alındığından emin olun. Aksi takdirde, her sayfa yüklenişinde tüm diller için yapılan sorgular sunucunuzu yavaşlatabilir. Ayrıca, kullanıcı girdilerini her zaman sanitize_text_field() gibi WordPress güvenlik fonksiyonları ile temizleyin.
Performansı artırmak için dil geçişlerini (Language Switcher) statik bir HTML bloğu olarak önbelleğe almanız önerilir. Dinamik olarak oluşturulan dil menüleri, her sayfa yüklenişinde gereksiz sorgu oluşturur.
Sıkça Sorulan Sorular
Çok dilli yapı SEO'yu nasıl etkiler?
Doğru yapılandırılmış bir çok dilli site (hreflang etiketleri kullanılarak), arama motorlarının içeriğin hangi dilde olduğunu anlamasını sağlar. Bu, yanlış dildeki içeriklerin yanlış kitlelere gösterilmesini engeller ve kullanıcı deneyimini iyileştirir.
Hreflang etiketi nedir ve neden gereklidir?
Hreflang, bir sayfanın alternatif dildeki versiyonlarının nerede olduğunu Google'a bildiren bir HTML etiketidir. Örneğin, Türkçe sayfanızın İngilizce karşılığı olduğunu etiketiyle belirtirsiniz.
Veritabanı şişmesi (bloat) nasıl engellenir?
Çok dilli eklentiler veritabanı tablolarını büyütebilir. Gereksiz revizyonları temizlemek ve veritabanı tablolarını düzenli olarak optimize etmek, performans kaybını engellemek için önemlidir.
Alt alan adı mı yoksa alt dizin mi seçmeliyim?
Genel olarak, alt dizin (site.com/en/) yapısı, alan adınızın otoritesini tek bir merkezde topladığı için SEO açısından daha verimli kabul edilir. Alt alan adları (en.site.com) ise genellikle farklı coğrafi bölgeler için tamamen farklı içerikler sunulacaksa tercih edilir.
Eklentisiz çok dilli site yapmak mümkün mü?
Evet, WordPress Multisite kullanarak her dil için ayrı bir site kurabilirsiniz. Ancak bu yöntem, içeriklerin senkronizasyonu ve yönetimi açısından oldukça zahmetlidir.
Çok Dilli Yapılarda Hata Ayıklama ve Sorun Giderme
Çok dilli bir WordPress kurulumunda en sık karşılaşılan sorunlar, yanlış yönlendirmeler (redirect loops), eksik çeviri dizeleri ve veritabanı sorgu hatalarıdır. Bu sorunları çözmek için WordPress'in hata ayıklama modunu aktif ederek logları incelemek kritiktir.
WP_DEBUG ile Çeviri Hatalarını İzleme
wp-config.php dosyanızda aşağıdaki yapılandırmayı kullanarak çeviri süreçlerinde oluşan PHP hatalarını ve eksik metin dosyası uyarılarını görebilirsiniz:
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
@ini_set( 'display_errors', 0 );
Eğer bir çeviri dosyası (.mo veya .po) yüklenmiyorsa, wp-content/languages dizinindeki dosya izinlerini ve dosya adlandırma standartlarını (örneğin: tr_TR.mo) mutlaka kontrol edin. Dosya izinlerinin 644, klasör izinlerinin ise 755 olduğundan emin olun.
Özel Yazılım Geliştiricileri İçin: Dil Değiştirici (Switcher) Kodlama
Hazır eklentilerin sunduğu dil değiştiriciler bazen temanızın tasarımına uyum sağlamayabilir. Kendi dil değiştiricinizi oluşturmak için WordPress'in apply_filters ve get_languages fonksiyonlarını kullanarak özel bir yapı geliştirebilirsiniz.
Aşağıdaki örnek, mevcut sayfayı diğer dillerdeki karşılığına yönlendiren basit bir PHP fonksiyonunu göstermektedir:
function ozel_dil_degistirici() {
$languages = apply_filters( 'wpml_active_languages', NULL, 'orderby=id&order=desc' );
if ( ! empty( $languages ) ) {
echo '';
}
}
Bu fonksiyonu temanızın header.php dosyasına yerleştirerek, sitenizin tasarımına tam uyumlu, özelleştirilebilir bir dil seçimi menüsü elde edebilirsiniz. CSS tarafında ise .dil-menu sınıfına display: flex; vererek yatay bir görünüm elde etmek en yaygın tercihtir.
Çok Dilli Sitelerde Performans Optimizasyonu
Çok dilli yapılar, veritabanı sorgu sayısını artırabilir. Özellikle wp_icl_translations gibi tabloların büyümesi, site hızını doğrudan etkiler. Performansı korumak için şu stratejileri izleyin:
- Object Caching: Redis veya Memcached kullanarak çeviri sorgularını önbelleğe alın.
- Veritabanı İndeksleme: Dil bazlı sorguların hızlı çalışması için
wp_poststablosunda dil meta verilerine uygun indeksler oluşturun. - Lazy Loading: Sadece o anki dilin ihtiyaç duyduğu çeviri dosyalarının yüklenmesini sağlayın.
İpucu: Çok dilli sitelerde "String Translation" (Dize Çevirisi) özelliğini kullanırken, veritabanını şişirmemek adına sadece gerekli olan metinleri çevirin. Tüm tema dosyalarını taratmak yerine, sadece aktif kullanılan eklenti ve tema metinlerini çeviri listesine ekleyin.
Sonuç
WordPress ile çok dilli bir web sitesi altyapısı kurmak, teknik bilgi ve dikkatli bir planlama gerektiren bir süreçtir. Doğru eklenti seçimi, SEO uyumlu URL yapısı ve veritabanı güvenliği, projenizin başarısını belirleyen temel taşlardır. Bu rehberde öğrendiğiniz yöntemleri uygulayarak, dünya genelindeki kullanıcılarınıza kendi dillerinde hitap eden, hızlı ve güvenli bir platform oluşturabilirsiniz.
Bir sonraki adım olarak, sitenizin hızını test etmek için Google PageSpeed Insights aracını kullanabilir ve dil bazlı içerik stratejinizi oluşturmak için bir içerik yönetim planı hazırlayabilirsiniz.


Yorumlar (0)
Yorum Yaz