PHP Uluslararasılaştırma (i18n): Geliştiriciler için Pratik Rehber
Yee
Aug 03, 2024

PHP Siteni Dünyaya Aç: Daha Verimli Bir Uluslararasılaştırma Çözümü
Eğer benim gibiysen ve büyük framework’lere (Laravel veya Symfony gibi) bağlı olmayan "vanilla" PHP projeleriyle uğraşıyorsan, çoklu dil desteği (i18n) muhtemelen sürekli ama küçük bir sorun olmuştur.
Geleneksel çözüm olan gettext, güçlü olsa da yapılandırması oldukça zahmetli. Özellikle küçük projelerde, bu durum "fındık kırmak için balyoz kullanmak" gibi geliyor. Aslında ihtiyacımız olan şey, fazla karmaşıklık getirmeden hızlıca uygulanabilecek bir yöntem.
Birçok projede deneme yanılma yaptıktan sonra, PHP dizi dosyalarına ve çevrimiçi çeviri araçlarına dayalı hafif bir uluslararasılaştırma çözümü geliştirdik. Bu yaklaşım sadece kurulumu kolay olmakla kalmıyor, aynı zamanda bakım maliyeti de son derece düşük. Bugün, bu çözümün tamamını sizinle paylaşıyorum, tamamen ücretsiz.
Uygulamalı Rehber: O.Translator ile PHP Çoklu Dil Desteğini Nasıl Hallettim?
Temel fikrimiz çok basit: Her dil için bir PHP dosyası var ve bu dosya, bir ilişkisel dizi döndüren bir return ifadesi içeriyor. Bu yöntem hem basit, hem sezgisel, hem de minimum performans yüküne sahip.
Adım 1: Dizin Yapını Planla
Temiz bir dizin yapısı işin yarısıdır. Her şeyi düzenli tutmak için, tüm dil dosyalarını aynı klasöre koyup, dosya adlarını dil kodlarıyla adlandıracağız. Yani şöyle:
project_root/
├── index.php // Your main logic file
├── i18n/ // Folder for all language files
│ ├── lang.cn.php // Chinese language pack
│ ├── lang.en.php // English language pack
│ └── lang.fr.php // French language pack
Adım 2: "Dil Cephaneliğini" Oluştur
Şimdi temel dil dosyasını oluşturuyoruz. Örnek olarak Çince'yi kullanalım ve bir lang.cn.php dosyası oluşturalım. Dosyanın içeriği basit bir PHP dizisi; anahtarlar benzersiz tanımlayıcılar, değerler ise karşılık gelen metinler.
lang.cn.php örneği: Anahtarlar sabit kalır, değerler dile göre değişir
Adım 3: Çeviri Sihirbazı O.Translator'a Gir
Onlarca ya da yüzlerce girdiyi elle çevirmek mi? İşte bu, programcıların en nefret ettiği tekrarlı işlerden biri. İşte tam bu noktada gizli silahımız O.Translator devreye giriyor.
Bu profesyonel bir online belge çeviri platformu ve PHP dosyalarını mükemmel şekilde destekliyor; dizinizi doğrudan okuyup 70'ten fazla dile çevirebiliyor.
Süreç inanılmaz derecede basit:
- O.Translator ana sayfasını ziyaret edip ana dil dosyanı (örneğin
lang.cn.php) yükle. - Hedef dillerini seç, mesela İngilizce ve Fransızca.
- Çeviriye tıkla, biraz bekle ve çevrilmiş
lang.en.phpilelang.fr.phpdosyaların hazır olacak.
Beni en çok etkileyen şey, O.Translator'ın çevirinin bir kısmını önizleme imkanı sunması. Sonuçlardan memnunsan, tam çeviri için ödeme yapıp yapmamaya karar verebilirsin. Kendi sözleriyle: "Memnun kalmadığın bir ürün için asla ödeme yapma."
Adım 4: Kodu Hayata Geçir
Her şey hazır; sadece son dokunuş kaldı. Şimdi, ana index.php dosyasını kullanıcı seçimine göre uygun dil paketini dinamik olarak yükleyecek şekilde güncelleyelim.
<?php
// 1. Determine the current language (using a GET parameter for demonstration)
$supported_langs = ['en', 'cn', 'fr'];
$default_lang = 'en';
$lang = isset($_GET['lang']) && in_array($_GET['lang'], $supported_langs) ? $_GET['lang'] : $default_lang;
// 2. Load the corresponding language file
// Use a global variable like $_ or a specific variable like $TEXTS to store the strings
$_ = require_once __DIR__ . "/i18n/lang.{$lang}.php";
?>
HTML şablonunda metinleri bu şekilde kolayca çağırabilirsin:
<!DOCTYPE html>
<html lang="<?php echo htmlspecialchars($lang); ?>">
<head>
<meta charset="UTF-8">
<title><?php echo htmlspecialchars($_['heading_home']); ?></title>
</head>
<body>
<header>
<h1><?php echo htmlspecialchars($_['heading_home']); ?></h1>
<nav>
<ul>
<li><?php echo htmlspecialchars($_['heading_about']); ?></li>
<li><?php echo htmlspecialchars($_['button_read_more']); ?></li>
</ul>
</nav>
</header>
</body>
</html>
Ve işte, basit bir çok dilli site hazır!
Dikkat Edilmesi Gerekenler ve İleri Seviyede Düşünceler
Bu çözüm hafif olsa da, canlıya almadan önce göz önünde bulundurmanız gereken birkaç önemli nokta var:
- Kullanıcının dilini nasıl tespit edersiniz? Örnekte
?lang=engibi bir GET parametresi kullanılıyor. Gerçek bir uygulamada, otomatik algılama için$_SESSION,$_COOKIEkullanabilir veya tarayıcınınAccept-Languageistek başlığını ayrıştırabilirsiniz. - Performans Dikkatleri: Küçük ve orta ölçekli siteler için, her istekte bir PHP dosyasını
require_onceile çağırmanın performans yükü ihmal edilebilir düzeydedir. Siteniz yüksek trafikli ise, daha fazla optimizasyon için APC veya OPcache gibi bytecode önbellekleme teknolojilerini kullanmayı düşünebilirsiniz. - Ölçeklenebilirlik: Dil veya metin sayısı arttıkça, dosyaları elle yönetmek karmaşıklaşabilir. O aşamada, PHP'nin gettext eklentisi gibi veya frameworklerin sunduğu yerelleştirme bileşenleri gibi daha profesyonel i18n çözümlerini keşfetmen gerekebilir.
- Çeviri Tutarlılığı: Marka isimleri ve terimlerin tüm dil sürümlerinde tutarlı olmasını sağlamak için O.Translator'ın Glosar özelliğini kullanmanı kesinlikle öneririz.
- Üst Düzey Strateji: Bu makale teknik uygulamaya odaklanıyor. Web sitesi uluslararasılaştırmasının genel stratejisi hakkında daha fazla bilgi edinmek istersen, diğer kapsamlı makalemizi de okuyabilirsin.
