PHP ile Dil Desteği Ekleme

Artık bir çok site için yurt içi hedef kitlesi dar kalmakta ya da site sahipleri daha çok gelir elde etmek için yurt dışına da hizmet vermek istemekte. Bu yüzden bugün temanıza php ile nasıl dil desteği ekleyebileceğinizden bahsedicem.

Öncelikle bu özelliği admin paneline ekleyecekseniz giriş yapan kullanıcınız, temanıza ekleyecekseniz web sitenize giren ziyaretçiler için varsayılan bir dil atayalım. Varsayılan dili direkt olarak Türkçe tarzı seçmek yerine dinamik bir şekilde bulunduğu ülkeye göre seçelim.

Önce bir php dosyası oluşturun ve php taglarını ekleyin. Ardından kullanıcının ip adresini çekelim:

$ip = $_SERVER['REMOTE_ADDR'];

Ardından fonksiyonumuzu ekleyelim:

function ip_info($ip = NULL, $purpose = "location", $deep_detect = TRUE) {
$output = NULL;
if(filter_var($ip, FILTER_VALIDATE_IP) === FALSE) {
if ($deep_detect) {
if (filter_var(@$_SERVER['HTTP_X_FORWARDED_FOR'], FILTER_VALIDATE_IP)){
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
if (filter_var(@$_SERVER['HTTP_CLIENT_IP'], FILTER_VALIDATE_IP)){
$ip = $_SERVER['HTTP_CLIENT_IP'];
}
}
}
$purpose = str_replace(array("name", "\n", "\t", " ", "-", "_"), NULL, strtolower(trim($purpose)));
$support = array("country", "countrycode", "state", "region", "city", "location", "address");
$continents = array(
"AF" => "Africa",
"AN" => "Antarctica",
"AS" => "Asia",
"EU" => "Europe",
"OC" => "Australia (Oceania)",
"NA" => "North America",
"SA" => "South America",
"TR" => "Türkiye",
);
if (filter_var($ip, FILTER_VALIDATE_IP) && in_array($purpose, $support)) {
$ipdat = @json_decode(file_get_contents("http://www.geoplugin.net/json.gp?ip=". $ip));
if (@strlen(trim($ipdat->geoplugin_countryCode)) == 2) {
switch ($purpose) {
case "city":
$output = @$ipdat->geoplugin_city;
break;
case "countrycode":
$output = @$ipdat->geoplugin_countryCode;
break;
}
}
}
return $output;
}

Ardından kullanıcının şehrine ve ülkesine erişebilirsiniz. Bunun için şu kodları kullanın:

echo $ulke = ip_info($ip, "Country Code");
echo $sehir = ip_info($ip, "City");

Şimdi kullanıcının ülkesini Session olarak kaydedelim.

$_SESSION["ulke"] = strtolower($ulke);

Şimdi dil dosyamızı oluşturalım. Örneğin Türkçe için tr.php ingilizce için en.php oluşturalım ve içeriğini şu şekilde ayarlayalım:

<?php
$lang = array("degisken" => "çıktısı", "degisken2" => "çıktısı2");
?>

Artık dil işlemlerimizi tamamladık son olarak da bu verileri admin panelizden düzenlemek isterseniz nasıl yapacağınızı gösteriyim. Önce language-settings.php diye dosya oluşturun sonra düzenlenecek dili çekelim:

<?php 
$wanted_lang = addslashes(htmlspecialchars($_GET["lang"]));
if(!$wanted_lang && $_SESSION["lang"]){
$wanted_lang = $_SESSION["lang"];
}
else if(!$wanted_lang && !$_SESSION["lang"]){
$wanted_lang = "en";
}
?>

Şimdi de hangi dili düzenleyeceğinizi belirlemek için seçim butonları koyalım:

<?php 
  if ($wanted_lang=="tr") {
?>
<div class="col-4 float-left"><a href="language-settings.php?lang=tr"><li class="list-group-item active"><?php echo $lang["tr"]; ?></li></a></div>
<div class="col-4 float-left"><a href="language-settings.php?lang=en"><li class="list-group-item"><?php echo $lang["en"]; ?></li></a></div>
<?php
}
else {
?>
<div class="col-4 float-left"><a href="language-settings.php?lang=tr"><li class="list-group-item"><?php echo $lang["tr"]; ?></li></a></div>
<div class="col-4 float-left"><a href="language-settings.php?lang=en"><li class="list-group-item active"><?php echo $lang["en"]; ?></li></a></div>
<?php
}
?>

Aşağıdaki bölümü kendi sayfa yapınıza göre yerleştirin ve düzenleyin:

<form id="frm" class="row">
<?php
if($wanted_lang=="tr"){
include 'language/tr.php';
}
else if($wanted_lang=="en"){
include 'language/en.php';
}
foreach ($lang as $key => $value) {
echo '<tr>
<td>'.trim($key).'</td>
<td><input class="input-100" type="text" name="'.trim($key).'" placeholder="'.trim($value).'"/></td>
</tr>';
}
?>
<input type="hidden" name="lang" value="<?php echo $wanted_lang; ?>">
</form>

Ayrıca çalışan versiyonu yaptığım admin panelinde bulunuyor. Github üzerinden ücretsiz olarak indirmek için buraya tıklayın.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir