Php ile çoklu dil

Kimi zaman yazdığımız sistemlerde birden fazla dil desteklemesini isteriz. Sitemizin her hangi bir yerine koyacağımız ufak bir bağlantı ile, zaman zaman dillerin bayrakları ile sitenin tek dokunuş ile bir dilden bir başka dile geçmesini isteriz. Böylece her milletten insana kendimizi açmış oluruz :)

Lafı fazla uzatmadan olaya geçelim…

Öncelikle, bize lazım olacak dosyaları ve klasör yapısını yazalım. Burada anlatacağım çok basit bir yapı. O yüzden de çok fazla dizin ve dosya kullanmayacağız.

  • /lang <— Dil dosyalarının olacağı lang dizini
  • /lang/tr.php <— Türkçe dil dosyası
  • /lang/eng.php <— İngilizce dil dosyası
  • /lang/fr.php <— Fransızca dil dosyası
  • index.php

Genel olarak bize bu iş için lazım olan dizin ve dosyalar bunlar.  En alttan başlayarak, yani index.php den başlayarak nasıl yapacağımıza bakalım.

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>dil denemeleri</title>
</head>
<body>
<?php
// adres satırından gelen değişkene göre dil dosyasını alalım
$dil = $_GET['dil'];
// eğer adres satırında her hangi bir dil belirtilmemişse
// ön tanımlı olarak dili Türkçe yapalım
if(!$dil) { $dil = 'tr'; }
// eğer bir dil seçilmişse, o dili alalım
else { $dil = $_GET['dil']; }
// ve dil dosyamızı çağıralım.
include ("lang/$dil.php");
// _welcome <-- bu sabit dil dosyalarından değere göre değişecek.
echo _welcome;
echo '<br />';
// _copy yine aynı şekilde.
echo '<strong>'. _copy .'</strong>';

echo '<br /><br />';
// dil değiştirme bölümünde ise _langTR _lang_ENG ve _langFR sabitlerini kullandım.
echo '<a href="index.php?dil=tr">'. _langTR .'</a> || <a href="index.php?dil=eng">'. _langENG .'</a> || <a href="index.php?dil=fr">'. _langFR .'</a>';

?>
</body>
</html>

index.php genel olarak bu şekilde olacak. Tabii duruma ve kullanışa göre şekillendirilebilir ancak şimdilik kavramak için bu yeterli. Burada önemli olan, dil dosyalarında kullanacağımız sabitleri iyi belirlemek.

Şimdi de dil dosyalarımıza bakalım. Tüm dosyaları tek tek yazmayacağım, bir tek kod içinde hepsini göstereceğim, siz bölersiniz :)

// tr.php <--- Türkçe dil dosyası
define('_welcome','Sitemize Hoş Geldiniz');
define('_copy','kodlama: lestioni');
define('_langTR','Türkçe');
define('_langENG','İngilizce');
define('_langFR','Fransızca');

// eng.php <--- İngilizce dil dosyası
define('_welcome','Welcome to our site');
define('_copy','coded by lestioni');
define('_langTR','Turkish');
define('_langENG','English');
define('_langFR','French');

// fr.php <--- Fransızca dil dosyası
define('_welcome','Bienvenue sur notre site');
define('_copy','codée par lestioni');
define('_langTR','Turc');
define('_langENG','Anglais');
define('_langFR','Français');

Dil dosyaları da bu şekilde olacaklar. Ne yapıldığını da anlatmak gerekirse, sanırım en kolay yol, değişkenlerden yola çıkmak olur. Tek farkı, sabitler bir betik içinde değişkenler gibi tekrar tekrar değiştirilemezler. Ne değer verilmişse o. $kelime değişkenine sayfa başında bir değer verip, sayfa sonunda farklı bir değer ile kullanmak mümkündür, ancak sabitlerde bunu yapamazsınız. Buradaki sayfada çok güzel bir anlatım var.

Kodların çalışan halini görmek için buraya tıklayabilirsiniz.

etiketler, , ,

Yorum yaz









dipnot: Yorumunuz onaydan geçtikten sonra yayınlanacak. Aynı yorumu tekrar tekrar göndermemeniz rica olunur.