PHP ve Çoklu Dil Desteği

Standard

Günümüzde istenen her site artık çoklu dil destekli oluyor genelde..

Bunu yapmanın pek çok yolu vardır. Değişkenler şeklinde tutmak , Array içinde kay value şeklinde tutmak gibi ama bu yöntemlerin çevirmenlerin dosya array yapısını bozması gibi handikapları vardır.

Gelelim php nin bize sunmuş olduğu Gettext fonksiyonuna..

Gettext kullanabilmeniz için sunucunuzda kurulu olmalı ve phpinfo() ile baktığınızda “GetText Support enabled” yazısını görmeniz lazım.

Kurulumu test etmek için:

if (!function_exists("gettext")){
    echo "gettext kullanılamaz";
}
else{
    echo "gettext kullanabilirsiniz";
}

Bu noktadan sonra oluşturacağınız tüm dosyaları UTF-8 karakter setini kullanarak oluşturun.

Gettext’de kullanılacak olan farklı dillerde yazılmış mesajlar, mo formatındaki dosyalarında saklanırlar.
Bu dosyalar bir editör yardımı ile düzenlenebilir. En çok bilinen ve kullanılan uygulama PoEdit’dir(http://poedit.net)
Bu editörler po formatından mo formatına çeviri işlemini yapmaktadırlar.

Örnek vermek gerekirse po dosyalarının içeriği şu şekildedir :

msgid “Welcome to onurcanalp.com”
msgstr “onurcanalp.com a hoşgeldiniz”

msgid “Have a nice day”
msgstr “iyi günler”

Bu dosya msgid ve msgstr ile başlayan kelimelerden oluşur. Eklenecek her bir yeni kelime veya cümle bu yapıya sadık olmalıdır, yani msgid çevrilecek olan metin, msgstr ise çevrilmiş metindir. Bu katalog dosyalarını PoEdit gibi editörler yardımı ile açarak düzenleyebiliriz. Sonrasında kaydet dediğimizde bizim ihtiyacımız olan mo dosyasını oluşturacaktır.

PoEdit gibi editörlerin po dosyasına metin ekleyememesinin sebebi görevler ayrılığı. Yani bu dosyayı açmış kişiye sadece “Have a nice day” metninin çevrisini yazma olanağı tanıyor, böylece çevirmenin dosya yapısını değiştirmesinin önüne geçmeyi planlıyor. Özetle Çevirmen sadece çeviri yapabilir, ekleme çıkartma yapamaz..

Dizin Yapısı:

Proje
  locale
    en_UK
      LC_MESSAGES
        messages.po
        messages.mo
    tr_TR
      LC_MESSAGES
        messages.po
        messages.mo

Örnek verelim birde:

<?php
$language = 'en_UK'; 
putenv("LANG=$language"); 
setlocale(LC_ALL, $language);

// textdomain i 'messages' olarak tanımlayalım
$domain = 'messages';
bindtextdomain($domain, "/onurcanalp.com/locale"); 
textdomain($domain);

echo gettext("Welcome to onurcanalp.com");
?>

Gettext değişkenimizi ekrana basmanın bir diğer yolu:

<?php
//İki türlü de kullanabilirsiniz..
echo _("Welcome to onurcanalp.com");
echo gettext("Welcome to onurcanalp.com");
?>

Hepsi bu.. Yeterli olacağını düşünüyorum.. Daha detaylı bilgi almak isteyenler http://php.net/gettext adresine göz gezdirebilirler.

Herkese çok dilli günler dilerim, have a nice day… 🙂

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir