PHP Uluslararasılaştırma (i18n): Geliştiriciler için Pratik Rehber

more

Yee

Aug 03, 2024

cover-img

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. Tam burada 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:

  1. O.Translator ana sayfasını ziyaret et ve ana dil dosyanı yükle (örneğin, lang.cn.php).
  2. Hedef dillerini seç, mesela İngilizce ve Fransızca.
  3. Çeviriye tıkla, biraz bekle ve çevrilmiş lang.en.php ile lang.fr.php dosyaları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 bu kadar—basit bir çok dilli web sitesi ortaya çıktı!

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=en gibi bir GET parametresi kullanılıyor. Gerçek bir uygulamada, otomatik algılama için $_SESSION, $_COOKIE kullanabilir veya tarayıcının Accept-Language istek başlığını ayrıştırabilirsiniz.
  • Performans Dikkatleri: Küçük ve orta ölçekli siteler için, her istekte bir PHP dosyasını require_once ile ç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. Bu noktada, PHP'nin gettext eklentisi veya frameworklerin sunduğu yerelleştirme bileşenleri gibi daha profesyonel i18n çözümlerini araştırmanız gerekebilir.
  • Çeviri Tutarlılığı: Marka isimleri ve terimlerin tüm dil sürümlerinde tutarlı olması için O.Translator'ın Sözlük özelliğini kullanmanızı kesinlikle öneririm.
  • Üst Düzey Strateji: Bu makale teknik uygulamaya odaklanıyor. Web sitesi uluslararasılaştırması için genel strateji hakkında daha fazla bilgi almak isterseniz, diğer detaylı makalemizi okuyabilirsiniz.

Konu

Senaryo

Senaryo

Yayınlanmış makaleler11

Önerilen okumalar