Birinci bölümde gettext’e değinmeye çalışmıştım. Şimdi bu karmaşık po ve mo dosyaları ile ne yapabileceğimize bakalım.
İlk önce herhangi bir editör ile bir metin dosyası açalım ve birkaç satır metin ekleyelim :
msgid “Start”
msgstr “Başla”
msgid “Stop”
msgstr “Dur”
msgid “Forward”
msgstr “İleri”
msgid “Back”
msgstr “Geri”
ve bu metin dosyamızı tr.po olarak kaydedelim. Şimdi elimizde bir kataloğumuz var, bunu PoEdit ile açarak kaydet düğmesine tıklayalım. tr.po dosyamızın olduğu dizine baktığımız zaman tr.mo dosyamızın oluşturulduğunu görebiliriz.
Şimdi bir düzen sağlamak için klasör yapısı oluşturalım :
- Kodumuzu test edebilmek için bir klasör oluşturalım ve bu klasör içerisinde “yereller” diye bir klasör oluşturalım.
- “yereller” klasörü içerisinde “tr” ve “en” diye iki klasör daha oluşturalım. Son olarak tr ve en klasörleri içerisinde ayrı ayrı LC_MESSAGES klasörü oluşturalım.
- tr.mo dosyamızı yereller/tr/LC_MESSAGES dizinin altına kopyalayalım.
- tr.po dosyamızı kopyalayarak en.po adında bir dosya oluşturalım.
- PoEdit ile aynı şekilde bu dosyamızı da açarak, metinlerin karşılıkları olan çeverileri kaydet dedikten sonra çıkan en.mo dosyamızı yereller/en/LC_MESSAGES dizininin altına kopyalıyoruz.
- Aşağıda vereceğimiz php ve html kodlarını da test için oluşturduğumuz dizine index.php olarak kaydediyoruz.
Burada yapmaya çalıştığımız çok dilli bir medya oynatıcısının tasarımı. Tabi bu medya oynatıcı işlevsel bir medya oynatıcı olmayacak, sadece adı olacak.
index.php
1 2 3 4 5 6 7 8 | <table border="0"> <tr> <td>Geri</td> <td>Durdur</td> <td>Başlat</td> <td>İleri</td> </tr> </table> |
Bu oyanıtıcımızın kumanda paneli
Burada sadece Türkçe kelimeler var, ama biz burada başka diller de olmasını istiyoruz ve bunun için gettexti kullanacağız .
İlk önce kodu biraz değiştiriyoruz :
1 2 3 4 5 6 7 8 |
Artık uygulamamız çoklu dil desteği kazanmaya daha yakın , şimdi diller arasında geçiş yapabilmemiz için bir fonksiyon yazmamız gerekli, tabi gene html kodumuza ek yapmamız gerekli :
1 2 3 4 5 6 7 8 9 10 11 12 13 | function diliDegistir($dil){ switch($dil){ case 'en': // setlocale için ayrıca yazacağım setlocale(LC_MESSAGES, 'en_US.utf8'); textdomain('en'); break; case 'tr': setlocale(LC_MESSAGES, 'tr_TR.utf8'); textdomain('tr'); break; } } |
Şimdi index.php dosyamızın son haline bakalım :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | <?php header('Content-Type:text/html;charset=utf8'); // bindtextdomain çeviri klasörlerimizin yerini belirtmek için bindtextdomain("tr", "yereller"); bindtextdomain("en","yereller"); function diliDegistir($dil){ switch($dil){ case 'en': // setlocale için ayrıca yazacağım setlocale(LC_MESSAGES, 'en_US.utf8'); // dili ayarlıyoruz textdomain('en'); break; case 'tr': setlocale(LC_MESSAGES, 'tr_TR.utf8'); textdomain('tr'); break; } } if(isset($_POST['dil'])) { diliDegistir($_POST['dil']); } ?> <table border="0"> <tr> <td colspan="4" align="right"> <form method="post"> <select name="dil" onchange="document.forms[0].submit();"> <option value="en" <?php if($_POST['dil']=='en') :?> selected="selected" <?php endif;?>>ingilizce</option> <option value="tr" <?php if($_POST['dil']=='tr') :?> selected="selected" <?php endif;?>>Türkçe</option> </select> </form> </td> </tr><tr> <td><?php echo gettext('Back') ?></td> <td><?php echo gettext('Stop') ?></td> <td><?php echo gettext('Start') ?></td> <td><?php echo gettext('Forward') ?></td> </tr> </table> |
Evet sonunda, çok dil destekli bir medya oynatıcının tuşlarını oluşturduk ![]()
Konunun devamı olan bindtextdomain ve setlocale fonksiyonlarına daha sonra değineceğim. Ayrıca bu konu ile ilgili söylemem gereken ufak birkaç ipucu var.
Güzel günler dileği ile, hoşça kalın.
Not : Konuda anlatılmış dosyaları buradan indirebilirsiniz.
