IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası
  sohbet

 Kayıt ol  Topluluk
Yeni Konu aç Cevapla
 
LinkBack Seçenekler Stil
Alt 09 Ekim 2014, 03:56   #1
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
Gettext ile çoklu dil desteği




gettext fonksiyonlarını C, C++, Phyton, Java, Perl gibi bir çok dilde kullanabilirsiniz. Ben size PHP'deki kullanımından bahsedeceğim.

Öncelikle sunucunuzun PHP ayarlarını kontrol etmelisiniz. gettext fonksiyonlarını kullanabilmek için php_gettext genişleme paketinin aktif olması gerekmektedir. phpinfo() ile PHP kurulum ayarlarınızı ekrana dökün. "gettext" kelimesini arattırın. Karşınıza "GetText Support enabled" yazısını bulduysanız bir şey yapmanıza gerek yok. Eğer phpinfo() çıktısında gettext ile ilgili bir şey bulamıyorsanız, php.ini dosyanızda "php_gettext.dll" diye aratın, bulduğunuz satırın başındaki noktalı virgül (
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
işaretini kaldırın ve dosyayı kaydedin. Web sunucunuzu baştan başlatın ve tekrar phpinfo() çıktısını kontrol edin. Her şey yolunda gittiyse phpinfo() çıktısında "gettext" diye arattığınızda "GetText Support enabled" yazısını görmeniz lazım. Bunları yapmanıza rağmen göremiyorsanız php kurulumunuzu gözden geçirin.

gettext fonksiyonlarının aktif olduğunu kabul ederek devam ediyorum. Bu noktadan sonra oluşturacağınız tüm dosyaları UTF-8 karakter setini kullanarak oluşturun. İlk olarak yeni bir php dosyası yaratın ve içine şunları yazın.

<?php
echo gettext("Merhaba IRCforumlari");
?>

Tarayıcınızla bu dosyayı çağırdığınızda "Merhaba IRCforumlari" çıktısını alacaksınız. her seferinde gettext yazmaya üşenenler _() fonksiyonunu da kullanabilir. Aşağıdaki kod da "Merhaba IRCforumlari" çıktısını üretecektir.

<?php
echo _("Merhaba IRCforumlari");
?>

Dil değiştirmenin zamanı geldi. Öncelikle uygulamamızda dil değiştiğinde değişmesi gereken metinlerden bir katalog oluşturmamız lazım. Bunun için bir kaç seçeneğimiz var. Bunlardan biri GNU gettext for WIN32 benzeri windows için hazırlanmış bir program kullanmak bir diğeri de ücretsiz poEdit programını kullanmak. Katalog dosyanızı kendiniz de yaratabilirsiniz ama büyük projelerde tavsiye etmem. (Hatta hiç tavsiye etmem) Benim tercihim poEdit'den yana. Windows versiyonunu kullanıyorum. Kısaca katalog oluşturmayı da anlatayım.

Dosya menüsünden Yeni katalog seçeneğini seçtiğinizde karşınıza bir pencere geliyor. Birinci sekmede kataloğun genel ayarlarını yapıyorsunuz. Projenin ismi, kataloğun hangi dilde hazırlandığı, karakter kümesi, kaynak dosyaların karakter kümesini projenize uygun olarak seçtikten sonra ikinci sekmede projenizin çalıştığı yolu ekliyorsunuz. örneğin "c:\apache\htdocs\gettext_ornek\" şeklinde. Üçüncü sekmede ise projede kullandığınız ve çeviri için kullanılacak fonksiyon isimlerini giriyorsunuz. Eğer projenizde "_" ya da "gettext" fonksiyonlarından birini ya da ikisini beraber kullandıysanız bu kısımdan ekleyin. Tamam tuşuna bastığınızda .po dosyanızı nereye kaydetmek istediğinizi soracak. Şimdilik kolayca erişebileceğiniz bir yere kaydedin. Kaydet tuşuna bastığınızda projeniz taranacak ve belirtmiş olduğunuz fonksiyonlardan çevirisi yapılacak metinlerin bir listesi ekrana gelecek. Tamam'a tıkladığınızda çevrilecek metinler ekranda sizi bekliyor olacak. "Merhaba IRCforumlari" metnini "Hello IRCforumlari" olarak çevirip .po dosyanızı "mesajlar.po" ismiyle kayıt edin. Kayıt ettiğinizde otomatik olarak .mo dosyanız da oluşacaktır. .mo dosyası da nereden çıktı diyeceksiniz. .mo dosyası da .po dosyanızdan üretilen paketlenmiş katalogdur diyebiliriz.

Katalog dosyamızı da oluşturduğumuza göre bu katalog dosyasını php ile kullanarak projemizi nasıl başka bir dilde çalışır hale getirebileceğinizi bir örnek ile anlatayım.

Öncelikle projenizin kök dizininde "diller" adıyla bir klasör yaratın. "diller" klasörünün altına de ingilizce için "en" adıyla yeni bir klasör yaratın ve son olarak da "en" klasörünün altında "LC_MESSAGES" adıyla yeni bir klasör yaratın. Daha önceden poEdit ile hazırlamış olduğumuz .po ve .mo dosyalarını "LC_MESSAGES" klasörünün altına taşıyın ve isimlerini "mesaj.po", "mesaj.mo" olarak değiştirin. Aşağıdaki gibi bir klasör yapınız oluşmuş olması lazım.

/diller
/en
/LC_MESSAGES
mesaj.po
mesaj.mo

Artık her şey yerli yerinde. Şimdi sıra php kodunda. Kodunuzu aşağıdaki gibi değiştirin.

<?php
$locale = "en";
putenv("LC_ALL=$locale");
setlocale(LC_ALL, $locale);
bindtextdomain("mesaj", "./diller");
textdomain("mesaj");

echo _("Merhaba IRCforumlari");
?>

Programınızı çalıştırdığınızda ekranda "Hello IRCforumlari" çıktısını göreceksiniz. Peki projeniz yeni kodlar eklediniz ve bunların da kataloğa eklenmesi gerekiyor. Ne yapacaksınız? çok basit. Örneğin kodumuza yeni bir satır ekleyin.

<?php
$locale = "en";
putenv("LC_ALL=$locale");
setlocale(LC_ALL, $locale);
bindtextdomain("mesaj", "./diller");
textdomain("mesaj");

echo _("Merhaba IRCforumlari")."<br>";
echo _("Websiteme hoşgeldiniz");
?>

poEdit ile ingilizce .po dosyanızı açın ve araç çubuğundan güncelleme çubuğuna basın (eğer değişmediyse soldan sağa üçüncü tuş. Dünyanın çevresinde dönen oklar olan.) Program kodunuzu inceleyerek yeni satırı kataloğa ekleyecektir. Hemen yeni cümleyi çevirin. "Welcome to my website". Dosyı kaydedip PHP programınızı çağırdığınızda aşağıdaki çıktıyı elde edeceksiniz.

Hello IRCforumlari
Welcome to my Website

Diyelim ki gettext ile çevrilen bu metinleri her seferinde echo ile ekrana basmak yerine ufak bir fonksiyon kullanmak istediniz. Örneğin;

<?php
function _e($metin) {
echo _($metin);
}

_e("Merhaba IRCforumlari");
?>

Katalog ayarlarında anahtar kelimeler sekmesinde bu yeni fonksiyonunuzu da tanıtırsanız ilk güncelleme sırasında yeni fonksiyonunuz ile kullandığınız metinler de katalog dosyasına eklenecektir.

__________________
Bu kez pek bir afili yalnızlık, ağlatan bir kadın kadar düşman. Ağzı bozuk üstelik bırakmıyor acıtmadan.
 
Alıntı ile Cevapla

IRCForumlari.NET Reklamlar
sohbet odaları reklam ver Benimmekan Mobil Sohbet
Cevapla

Etiketler
coklu, desteği, dil, gettext, ile


Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir)
 

Yetkileriniz
Konu Acma Yetkiniz Yok
Cevap Yazma Yetkiniz Yok
Eklenti Yükleme Yetkiniz Yok
Mesajınızı Değiştirme Yetkiniz Yok

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodu Kapalı
Trackbacks are Kapalı
Pingbacks are Açık
Refbacks are Açık


Benzer Konular
Konu Konuyu Başlatan Forum Cevaplar Son Mesaj
Borderlands'e Steamworks'den Çoklu Oyuncu Desteği Deep Oyun Dünyasından Son Haberler 0 17 Eylül 2014 03:26
Samsung'tan Çoklu Monitör Desteği xLine Bilim Dünyasından Son Haberler 0 10 Ocak 2010 18:34
TrueCrypt 6 çoklu çekirdek desteği kazandı Kralice Bilgisayar Donanımı 0 14 Temmuz 2008 11:04