Bilgisayar Eğitim Merkezi
Ana Sayfa Hakkımızda İletişim Uzaktan Eğitim Ön Kayıt
 
PHP ile Çoklu Dil Desteği Kullanımı  - 03-09-2014
 

PHP çoklu dil desteği

Genelde çalışmamızın sonlarına geldiğimizde ya da önce Türkçe halini yaptıktan sonra çoklu dil olaylarına bakarız diye düşünürdüm. Ama bu düşünceyle gettext’in bize sağladığı en büyük kolaylığı aksine bir zorluğa çevirmiş oluyoruz. phpr.org' da hazırlanmış olan bu makaleye birlikte göz atalım. Çoklu dil ile ilgili güzel örneklere birlite bakalım.

Gettext Fonksiyonu

Bu yöntemin adı ve kullanım fonksiyonu gettext diye geçse de “_()” bu şekilde alt tire fonksiyonu haliyle de kullanabiliyoruz, ki zaten tercih edilen kullanımı da budur. Çalışmamızda kullanacağımız her dinamik olmayan cümle ve terimleri bu fonksiyondan geçirmemiz gerekiyor. Dinamik olmayandan kastım ise örneğin bir yazı sayfasında o yazının içeriği ya da başlığı gibi şeyler bu çeviri olayına dahil olmamalı.

Sadece kullanıma bir örnek göstermemiz gerekirse gayet basit ve işlere pek engel olmayacak bir tarzı olduğunu görebiliriz:

 

PHP ile gettext çoklu dil desteği oluşturma

Bu fonksiyonu kullanırken her seferinde echo demekten de kurtulmak içinde dilerseniz WordPress’in yaptığı gibi sizde bir “_e()” fonksiyonu oluşturabilirsiniz.

function _e($mesaj) {

   echo _($mesaj);

}

Eğer bunları şimdiden denemeye başladıysanız ve böyle fonksiyonların olmadığına dair hatalar alıyorsanız, büyük ihtimalle denediğiniz sunucuda gettext eklentisi kurulu değildir. Bu konularda bilgiliyseniz şuradan kütüphaneye ulaşıp sunucunuza kurabilirsiniz, eğer bilginiz yoksa sunucu sağlayıcınızla irtibata geçerek bu eklentinin kurulmasını isteyebilirsiniz.

Çevirinin Yapılması ve Dil Dosyalarının Hazırlanması

Başta bahsettiğim bu olayının en sevdiğim ve kullanmadan önce bilgi sahibi olunması gereken kısmı; projemizi hazırlarken yapmamız gereken tüm çevrilecek sabit yazıları “_()” ya da “_e()” fonksiyonuyla yazdırmamız. Varsayılan halinde çalışmaya hiç bir engeli olmadığı için bunu uygularken size herhangi bir rahatsızlık vermez.

Şimdi ben misalen bir blogun anasayfasını göstereyim.

PHP ile çoklu dil desteği oluşturma (gettext)

Biz projemizi bu tarzda hazırladıktan sonra bunların bir dil dosyası oluşturulması için son aşamalara doğru Poedit adlı programı yükleyip açıyoruz.

Poedit’te “Dosya > Yeni kataloğu oluştur“a basıyoruz. Burada çıkan forma genel olarak yaptığınız projenin adını, e-mail adresinizi ve hazırlayacağınız çevirinin hangi dile ait olacağını belirtiyorsunuz. Varsayılan olarak projemizi Türkçe yazdığımız için ben bu örnekte çalışmamızınİngilizce çevirisini yapacağım.

Poedit ile Dil Kataloğu oluşturma

İşte ilk açıklamamda kullanmadan önce bilmemizi önerdiğim kısım burasıydı. Eğer bu olayı genel olarak projeyi tamamladıktan sonra araştırıp keşfetsek bu güzel özellik için geç kalmış oluyoruz ve tüm projeyi baştan kendimiz tarayıp tüm metinlere “_()” fonksiyonu eklemek durumunda kalıyoruz.

PHP ile çoklu dil desteği sağlama (gettext)

 

 

Bu formu doldurduktan sonra “Veri yolları” tabına gelip projemizin ana dizinini ekliyoruz. Benim örnek çalışma dosyam “/var/www/ornek” klasörü altında olduğu için burada bunu belirtiyorum. Bu sayede Poedit tüm projeyi tarıyarak çevrilecek metinleri bulup getiriyor ve dil dosyasını oluşturuyor.

Daha sonra “Anahtar kelimeler” tabından hangi fonksiyonları tarıyacağını belirtiyoruz. Varsayılan olarak “_” ve “gettext” eklidir, bunun dışında yukarıda belirttiğim gibi kendiniz bir “_e()” fonksiyonuda kullandıysanız buraya “_e” eklemeniz gerekecek.

 

Ve tamam dediğinizde .po dosyasının kaydedileceği yeri soruyor. Burada dosyayı kaydetmemiz gereken dizin önemli, temel olarak olması gereken yer şöyledir: “/diller/en_US/LC_MESSAGES/projemiz.po”

Bu örnekte ben İngilizce’ye çevireceğim için en_US klasörüne atıyorum. Eğer yapacağım çeviri Türkçe olsaydı tr_TR klasöründe olurdu. Diğer dillerin kodlarını merak ediyorsan şuradanbakabilirsin.

Kaydedilecek yeri de belirttikten sonra karşımıza “Güncelleme özeti” başlığı altında projemizde kullandığımız ve kataloğuna ekleyeceği metinleri gösterir. Burada da onay verdikten sonra artık çevirmeye başlayıp dil dosyamızı hazırlayabiliriz.

PHP ile çoklu dilli sayfa yapma (gettext)

Dilin Belirlenmesi

Projemizi gettext ile hazırladık, sonrasında Poedit ile kataloğumuzu oluşturup çevirisini yaptık ve gerekli dizine yerleştirdik. Şimdi geldi projemize dili belirtmeye. Bunu ifade etmek için yaklaşık 6 satırlık bir ifadede bulunuyoruz:

PHP ile multi language - çoklu dilli sayfa site oluşturma (gettext)

Bu ifadeden sonra örnek çalışmamıza baktığımızda projenin İngilizce’ye çevrilmiş halini görmüş oluruz.

Eğer herhangi bir hata almadığınız halde halen Türkçe görüyorsanız bunun sebebi “setlocale” ve “putenv” fonksiyonlarda belirttiğimiz dil kodunun sisteminize kurulu dillerin adının böyle olmadığından kaynaklanabilir. Özetle sisteminizde İngilizce dili “en_US.utf8” ya da “en” adında tanımlanmış olabilir. Bu nedenle dizin adlarını değiştirmeden kodlardan bu dil değerini “en_US.utf8, en_US, en” gibi şekillerde değiştirerek tekrar deneyin.

Eğer Linux kullanıyorsanız “locale -a” komutu ile sisteminizde tanımlanmış dilleri görebilirsiniz.

Çevirilerin arasına değişken veriler eklemek

Bu durumuda yine basit bir örnekle izah etmek gerekirse, “Bu yazıya 12 adet yorum gönderilmiş” gibi bir cümlenin çevirisini yapmak için:

echo _('Bu yazıya ') . $yorum_sayisi . _(' adet yorum gönderilmiş.');

Tarzında bir yöntem uygulamak pek kullanışlı değil ve hatta diğer dillere çevrilirken gramer farklarından dolayı hatalı olabilir.

Bu olay içinde çok güzel bir yöntem mevcut, “printf” fonksiyonu sayesinde bir metnin içinde “%” işareti ile belirlediğimiz yerlere diğer parametrelerinde ifade ettiğimiz değerleri getirebiliyoruz.

$yorum_sayisi = 12;

printf('Bu yazıya %d adet yorum gönderilmiş', $yorum_sayisi)

Ekranda “Bu yazıya 12 adet yorum gönderilmiş” yazar. Eğer ekrana yazdırmak yerine sonucu döndürmesini istiyorsanız “sprintf” fonksiyonunu kullanabilirsiniz.

Bu fonksiyon sayesinde çeviride yapmak istediğimiz araya değişken ekleme olayını rahatlıkla yapabiliriz.

printf(_('Bu yazıya %d adet yorum gönderilmiş'), $yorum_sayisi)

Bu cümlenin İngilizce çevirisinde şöyle diyerek yorum sayısını rahatlıkla istediğimiz yerde kullanabiliriz: “This post have %d comments”

“%” işaretinden sonra kullandığımız “d” harfi yerine gelecek değerin yazı, tamsayı, işaretli sayı vs. gibi olduğunu ifade etmeye yarıyor. Bu harfleri şuarada biçem parametresinin 6. maddesinde inceleyebilirsiniz.

Bu olay yukarıda gösterdiğim gibi yapılsa da bu şekilde kullanılması pek kullanışlı değil, yani bu olay içinde bir fonksiyona ihtiyacımız var. Bunu da “_e” fonksiyonu üzerinden yapıp göstereyim:

function _e() {

   // fonksiyona gönderilen parametreleri esnek bir yöntem ile alıyoruz

   $parametreler = func_get_args();

   // ilk parametre çevrilecek metin olduğu için

   // _ fonksiyonu ile çevrilmiş hali ile değiştiriyoruz

   $parametreler[0] = _($parametreler[0]);

   // daha sonra printf fonksiyonunu manuel şekilde çağırıyoruz

   call_user_func_array('printf', $parametreler);

}

Bu fonksiyon ile “_e(‘Bu yazıya %d adet yorum yazılmış’, $yorum_sayisi)” dediğimizde sonuç olarak yapılacak işlem “printf(_(‘Bu yazıya %d adet yorum yazılmış’), $yorum_sayisi)” olacak. Ve eğer daha fazla parametre girmeye devam edersekte aynı şekilde onlarıda printf fonksiyonuna iletecektir.

Gettext ile plıral (çoğul) ifadeler

Yukarıdaki örnekte diğer dillerde metin içerisine rahatlıkla yorum sayısı gibi değişken değerleri nasıl gösterileceğini “Bu yazıya %d adet yorum yazılmış” örneği ile verdim. Fakat İngilizce başta olmak üzere bazı dillerde tekil ya da çoğul şeyler farklı kelimelerle ifade ediliyor. Türkçe’de “1 Yorum” ile “10 Yorum” doğru olsa da İngilizce’de çoğul olduğunda “s” takısı alması gerekiyor, “1 Comment” ve “10 Comments” şeklinde.

Bu yöntem için “ngettext” fonksiyonunu kullanmamız gerekiyor, fakat istersen yukarıda hazırladığımız “_e” fonksiyonunu geliştirerek de bu yöntemi ekleyebilirsin. Espirisi gayet basit, birinci parametreye tekil, ikinci parametreye ise çoğul ifadede kullanılacak olan metin girilir ve son parametresine de metin içerisinde kullanılacak sayı değeri girilir. Eğer sayı 1 ise ilk ifade, birden büyük ise ikinci ifade kullanılır. Fakat yine içerisinde gerekli yere sayının yazılması içinprintf fonksiyonundan faydalanır.

printf(ngettext("%d comment", "%d comments", 1), 1); // 1 comment

printf(ngettext("%d comment", "%d comments", 2), 2); // 2 comments

Yalnız benim yukarıda hazırladığım örnekte varsayılanı Türkçe olan içeriğe İngilizce çeviri yaptık. Bu yöntemi doğru kullanabilmemiz için varsayılan dilimizin İngilizce olması gerekir. Çünkü Türkçe’de her iki tarafta aynı olacağı için İngilizce çevirisinde ayırt edemeyiz. Ama İngilizce’den Türkçe’ye çevirirken “%d comments” metnini de “%d yorum” şeklinde çevirebiliriz.

 

Php ile bu tarz örnekleri öğrenmek geliştirmek ve web projeleri geliştirmek için profesyonel bir  eğitim almak için Vektörel Bilişim'de Profesyönel Eğitmenler ile Web Tasarım ve Programlama Eğitimi alabilirsiniz. Hemen Tıklayın.

 

ETİKETLER

php, gettext, plural ifade, çoklu dil, fonksiyon

 
 Diğer Haberler 
03-09-2014
PHP ile Çoklu Dil Desteği Kullanımı
29-08-2014
PHP’de Fonksiyonların kullanımı, işlevi
28-08-2014
Yararlı PHP Fonksiyonları
20-08-2014
Jquery ile basit Tooltip hazırlama
16-08-2014
PHP ile resmimize fligran (watermark) ekleyelim.
13-08-2014
Photoshop ile resmimize yağmur damlası ekleme
11-08-2014
Photoshop ile resmimize gün ışığı ekleyelim
08-08-2014
PHP ve Ajax ile Basit veri gönderim uygulaması
07-08-2014
Dreamveaver ile Site Tanımlaması Yapma
05-08-2014
Dreamveaver ile Map özelliğini kullanma
25-07-2014
PHP Nesne Yönelimli Programla Örneği
22-07-2014
Photoshop ile Manipülasyon nasıl Yaparız?
18-07-2014
PHP İle Formdan GET Metoduyla Gelen Bilgiler
14-07-2014
Photoshop ile Resmi Çerçevelere Bölmek
12-07-2014
PHP fonksiyon kullanımı ve örnekleri
10-07-2014
Php Nasıl daha hızlı çalıştırılır
08-07-2014
PHP ile dosya kontrol (exists)
07-07-2014
CSS İle içeriği dikey ortalama yöntemleri
05-07-2014
Fireworks mü? Photoshop mu?
02-07-2014
Visual Studio 2013 Yenilikleri
28-06-2014
Web Sayfasında SEO’nun önem
27-06-2014
Web sayfasında kompozisyon oluşturmak.
26-06-2014
Web Tasarım ve Programlama Eğitiminde Yaz İndirimi
30-01-2014
Lenovo Motorola’yı Google’dan Satın Aldı!
29.01.2014
Mysql 5.6 ve Özellikleri
27-01-2014
SkyDrive'ın İsmi Değişiyor
27.01.2014
Adobe Yeniliklerle Başlıyor
23-01-2014
GoDaddy Kullanıcılarına 1 Ay Ücretsiz Hosting
23-01-2014
Teknoloji Bağımlılığı Çalıştayı Düzenlendi
23-01-2014
Sahtekarlara Kilit
18-01-2014
Instagram Kullanıcı Sayısını Arttırdı
14-01-2014
CSS Nedir?
08.01.2014
CS5 ile Göz Alıcı Yenilikler
07.01.2014
HTML 5'in Getirdiği 10 Yenilik
31-12-2013
EXCEL’DE Formülleri Gizlemek ve Korumak
30-12-2013
5651 Sayılı Kanun Nedir ?
28-12-2013
HTC KitKat güncellemesi için site yaptı
27-12-2013
Seo'ya Etki Eden Faktörler
26-12-2013
e-Devlet 5. seneyi tamamladı
25-12-2013
LINQ Nedir LINQ Kullanımı
25-12-2013
100 liraya sanal ofis oluşturabilirsiniz
24-12-2013
XML Nedir ?
23-12-2013
SQL injection ve Korunma Yöntemleri
21-20-2013
Ajax Nedir?
20-12-2013
Content Delivery Network (CDN) Nedir
19-12-2013
Samsung, Güneş Enerjisi Kullanan Telefonlar Gelişt
18-12-2013
CSS Sprite Nedir? Nasıl Kullanılır?
17-12-2013
Adobe Photoshop Creative Cloud Yenilikleri
16-12-2013
Youtube, canlı yayın özelliğini tüm kullanıcıların
14-12-2013
Çin hükümeti süper bilgisayarını devreye koyacak..
13-12-2013
Adobe tüm şifreleri sıfırladı
13.11.2013
Web Tasarımda Renklerin Etkileri
30.10.2013
WEB VE GRAFİK TASARIM UZMANLIĞI
23.10.2013
NEDEN WEB SİTENİZ OLMALI ?
11.10.2013
Flash Web Tasarım
10.10.2013
Nasıl Web Tasarımcısı Olunur?
09.10.2013
Neden Web Sitesi Yaptırmalıyız
07.10.2013
Web Tasarım %20 İndirimle Başlıyor.
03.10.2013
Web Tasarım yaparken nelere dikkat etmek gerekir?
02.10.2013
Fireworks İle Neler Yapılabilir
02.10.2013
Web Tasarım Kursları ile Kariyerinize Yön Verin!
27.09.2013
Web Tasarım Eğitimi hafta sonu grubuyla başlıyor..
26.09.2013
Web Tasarım Eğitiminde Gelecek Bilişim'de…
25.09.2013
İpsalalı Öğrencilere Web Tasarımı Eğitimi...
18.09.2013
Web Tasarım Eğitimi Başlıyorrrr!!!
12.09.2013
Uzaktan Eğitim Web Tasarım&Programlama Kursu
12.09.2013
İndirimli Web Tasarım&Programlama Eğitimi Başlıyor
07.09.2012
İndirimli Web Uzmanlığı Eğitimleri Başlıyor!
20.08.2013
Uzaktan Eğitim ile Web Kursları Başlıyor
 

Web Tasarım Kursu | Web Kursu Ankara
Flash Kursu | Web Kursları
Photoshop Kursu | Web Kursu Ankara
Contribute Kursu | Web Kursu Ankara
MySQL Kursu | Web Kursları
Fireworks Kursu | Web Kursları