PHP ile çoklu dil desteği

  2017/05/06 13:29 • Ana Sayfa > PHP

Merhaba! Bugün, PHP öğrendiğim günden itibaren içimde ukte kalan "php ile çoklu dil" yapımını anlatacağım. Öncelikle bu, Facebook gibi veya global çapta düşünülen küçük çaplı projelerinizde oldukça gerekli, işinize yarayacak bir ders olacaktır diye düşünüyorum. WordPress kullananlar bilirler; poedit programı vasıtasıyla çevirebildiğiniz 2 adet dil dosyası, genellikle temaların içinde tr_TR.po ve tr_TR.mo olarak gelirler. Siz, poedit vasıtasıyla tr_TR.po dosyasını düzenler ve temaya yüklersiniz.

Ama bu yazıda, saf PHP ile dil yapımını yazacağım.

Öncelikle HTML yapısıyla "dil seçme" özelliğini yapalım. Birçok şekilde yapılabilir; örneğin bir form yada buton vasıtasıyla arkaplanda çalıştırabilirsiniz. Ben, anlaşılabilir olsun diye en basit metodla yapacağım.

<select onchange="this.options[this.selectedIndex].value && (window.location = this.options[this.selectedIndex].value);">
<option value="" selected>Dil Seçin</option>
<option value="?lang=tr">Türkçe</option>
<option value="?lang=en">English</option>
<option value="?lang=de">Deutsch</option>
</select>

Yukarıda yaptığımız kodda, dil seçimi sonrasında bir URL yönlendirmesi yaptık. Böylece site.com/sayfa-icerik.html?lang=de şeklinde yönlenecek ve sayfa dili almancaya dönüşecek. Eklediğiniz her seçenek, yeni bir dile tekabül edecek.

Şimdi de PHP ile GET kontrolü yapalım.

<?php
if ($_GET['lang'] == 'tr' OR $_GET['lang'] == 'en' OR $_GET['lang'] == 'de') { $_SESSION['lang'] == $_GET['lang'];
}
?>

Lang isminde bir oturum oluşturduk. Bu oturumun süresi, sizin tercihinize kalmış. Memcached veya Redis gibi bir alternatifle süreyi sonsuza erdirebilir veya IP adresiyle bağdaştırabilirsiniz.

Son olarak dil yollarını çekme aşaması kaldı.

<?php 
if ($_SESSION['lang']) {
include_once('languages/'.$_SESSION['lang'].'.php');
}else{
include_once('languages/tr.php');
}
?>

YA DA

Tarayıcı diline göre, eğer sistemde kayıtlı bir dil dosyası varsa onu yazdırmak istiyorsanız aşağıdaki kodu kullanabilirsiniz. Aynı anda iki kodu kullanmanız da mümkün fakat gerekli ayarları yapmalısınız.

<?php
if (substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) == 'tr') {
include_once('languages/tr.php');
}elseif (substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) == 'en') {
include_once('languages/en.php');
}else{
include_once('languages/tr.php');
}
?>

Şimdi son aşamadayız! languages/ isminde oluşturduğumuz klasörün içine; var olan dilleri dosya olarak ekliyoruz. Dosya isimleri en.php, tr.php veya de.php gibi olmalı. Bu dosyaların içeriği ise aşağıdaki gibi olacak.

Örneğin bu dosyayı en.php olarak kaydedelim ve sitemizin ingilizce dili olmasını sağlayalım.

<?php
$lang[] = array();

$lang['site_motto'] = 'Hello World!';

$lang['login'] = 'Login';
$lang['register'] = 'Register';
?>

Şimdi de tr.php yaparak sitemize Türkçe dil ekleyelim.

<?php
$lang[] = array();

$lang['site_motto'] = 'Merhaba Dünya!';

$lang['login'] = 'Giriş Yap';
$lang['register'] = 'Kayıt Ol';
?>

Son olarak bu dilleri, sitemiz içinde temada veya artık nerede kullanmayı planlıyorsanız orada kullanmak üzere aşağıdaki kod parçacıklarını kullanalım.

<?php echo $lang['site_motto']; ?>
// Çıktı: Türkçe ise: Merhaba dünya!
// Çıktı: İngilizce ise Hello World!

Tabiki bu kodlar, küçük ve orta ölçekli bireysel veya kurumsal çalışmalarda tercih edilebilir fakat alternatifi ve daha başarılı, optimize edilmesi daha mümkün yöntemler de mevcut.

Yazar: Ercüment Çözer (@Felina)

2009 yılında gelen "internet için bir şeyler üretme isteği" doğrultusunda yazılım öğrenmeye başladım. Aradan geçen süre zarfında başta PHP ve Python olmak üzere, ticareti yapılabilir birçok şey öğrendim. Şu sıralar web ve mobil ortamda kodlama, tasarlama ve pazarlama konularındaki bilgilerimi pekiştirmek ve ihtiyaç halinde diğer insanlara da yardımcı olabilmek için KodLab.org'u kurdum. Freelance olarak kendi projelerimle ilgileniyorum.