Daha önce ki scriptimde kullanmış olduğum php çoklu dil dosyasını adım adım nasıl yaptığımı kısacası php dil dosyası yapımını anlatacağım. Sitenizin kodlama dilinin php olması gerektiğini en başta belirteyim. Eğer html bir siteniz var ve php ye hiç bulaşmak istemiyorum diyorsanız google translate kullanarak sitenizde uygun gördüğünüz herhangi bir yere google translate kodlarını ekleyebilirsiniz.
Çeviri yapacağınız sayfada olması gereken kod betiği
Aşağıda ki kodları çevirinin gerçekleşeceği her sayfaya ekleyebilirsiniz. index.php açılış sayfası olduğunu varsayarak oraya eklediğinizi düşünelim.
<?php session_start(); if (!$_SESSION["dil"]){ require("dil/tr.php"); }else { require("dil/".$_SESSION["dil"].".php"); } ?>
Dil fonksiyonu
Aşağıda ki kodları dil.php olarak kaydedelim. Aşağıdaki kod sitenizde iki adet dil olacağı varsayılarak yazılmıştır. tr ve en olmak üzere Türkçe ve İngilizce iki dil olacağı belirtilmiştir.
<?php session_start(); $dil =strip_tags($_GET["dil"]); if ($dil =="tr" || $dil == "en"){ $_SESSION["dil"] = $dil; header("Location:index.php"); }else { header("Location:index.php"); } ?>
<?php session_start(); $dil =strip_tags($_GET["dil"]); if ($dil =="tr" || $dil == "en" || $dil == "de" || $dil == "ru"){ $_SESSION["dil"] = $dil; header("location: ".$_SERVER['HTTP_REFERER'].""); }else { header("Location:index.html"); } ?>
Eğer Türkçe ve İngilizce dilin yanısıra Rusça, Almanca diye farklı başka dillerde tanımlayacaksak yukarıda ki kodda işaretli olan if satırını şu şekilde değiştirebilirsiniz.
if ($dil =="tr" || $dil == "en" || $dil == "de" || $dil == "ru")
Dil dosyası hazırlanması
Birden fazla dil olduğu için her ayrı dile, ayrı bir dil.php dosyası oluşturacağız. Örneğin; tr.php, en.php. ru.php gibi
Bundan dolayı tüm bu dosyaları tek bir klasörde toplamakta yarar var. dil adında bir klasör oluşturalım. Klasörümüz index.php ile aynı dizinde olsun. Aşağıda tr.php yani Türkçe dil dosyasının içeriğini görüyorsunuz.
<?php $dil = array( "anasayfa" => "Anasayfa", "pvplinkekle" => "Pvp Link Ekle", "dilseciniz" => "Dil Seçiniz", "trdil" => "Türkçe", "ingdil" => "İngilizce", "baslik" => "Başlık", "durum" => "Durum", "servertipi" => "Server Tipi", "git" => "Git", "yorumbirak" => "Bir Yorum Bırakın...", "adsoyad" => "Adınız ve Soyadınız...", "email" => "Eposta Adresiniz...", "yorum" => "Yorumunuzu Yazın...", "gonder" => "Gönder", "onceki" => "Önceki", "sonraki" => "Sonraki", "acik" => "Açık", "kapali" => "Kapalı", ); ?>
dil.php Dosyasının Mantığını Anlayalım
Sol tarafta bulunanlar bizim tüm diğer dil dosyalarımızda sabit kalacak olan kelimeler. Türkçe karakterler kullanmamaya özen gösterdik, bu kelimeleri sitemizin kodları arasında bulunan sabit kelimeler için anlaşılır bir isim olarak belirledik. Sağ tarafta bulunanlar ise; yalnızca tr.php dosyası için yani dil Türkçe seçildiğinde karşılığını almak istediğimiz kelimelerimiz.
Buna göre en.php dil dosyasının da içeriği şu şekilde olmalı
<?php $dil = array( "anasayfa" => "Homepage", "pvplinkekle" => "Add Pvp Link", "dilseciniz" => "Select Language", "trdil" => "Turkish", "ingdil" => "English", "baslik" => "Title", "durum" => "Case", "servertipi" => "Server Type", "git" => "Go", "yorumbirak" => "I leave anywhere ...", "adsoyad" => "Name and Surname...", "email" => "Email address...", "yorum" => "Write your comment...", "gonder" => "Submit", "onceki" => "Previous", "sonraki" => "Next", "acik" => "Open", "kapali" => "Closed", ); ?>
Dil dosyasının ziyaretçiye sunumu
index.php dosyamızda ziyaretçinin dil dosyasını seçebileceği bir dilden diğer bir dile geçiş yapacağı bir menü olduğunu varsayalım. Kodumuz örnek bir menünün html kod yapısı şu şekilde olmalı;[sociallocker id=4715]
<ul class="dropdown-menu" role="menu"> <li><a href="dil.php?dil=tr">Türkçe</a></li> <li><a href="dil.php?dil=en">İngilizce</a></li> </ul>
[/sociallocker]Buraya kadar her şey tamam Türkçe linkine tıklandığında dil.php?dil=tr dosyasına gidecek ve sayfa kapatılım yeniden açılıncaya kadar tr dosyası oturum boyunca aktif olacaktır. Tr dosyası varsayılan olarak ayarlanmıştır. Hiç bir dil seçilmezse yine tr dosyası ziyaretçiye sunulacaktır.
İngilizce linkine tıklandığındaysa dil.php?dil=en dosyası okunacak ve oturum boyunca Türkçe dil seçneği seçilmedikçe ziyaretçi İngilizce olarak sunum yapılacaktır.
Peki sitede bulunan sabit Türkçe kelimeleri nasıl değiştireceğiz
Bunun için yine menüden bulunan iki kelimeyi ele alalım. Türkçe ve İngilizce
Ben bu kelimelerin İngilizce dil seçildiğinde Turkish ve English olarak sunmak istiyorsam menü kodumu şu şekilde düzenlemeliyim
<ul class="dropdown-menu" role="menu"> <li><a href="dil.php?dil=tr"><?php echo $dil["trdil"];?></a></li> <li><a href="dil.php?dil=en"><?php echo $dil["ingdil"];?></a></li> </ul>
Burada değişen sadece şu oldu Türkçe kelimesinin yerini <?php echo $dil[“trdil“];?>
İngilizce kelimesinin yerini ise <?php echo $dil[“ingdil“];?> bu php kalıbı tüm değişen kelimeler için sabit olacak değişen ise sadece kırmızı ile işaretlediğim yerler.
Zaten en.php dil dosyamızın içinde
“trdil” => “Turkish”,
“ingdil” => “English”, karşılıklarını bu şekilde tanımlamıştık hangi kelimenin neyi ifade ettiğini bildiğimiz için kodu da yazan sizseniz çok kolay bir şekilde sitenize dil dosyası hazırlamış olursunuz.
Merhaba hocam, teşekkürler. Sorunsuz çalışıyor, ancak bir şeyi beceremedim.
Elimde bir contact.php var iletişim formu için, bunda mesaj gönderdikten sonra başarılı ya da başarısız mesajlarınıda dil desteğine eklicem ama bu php kodu içinde nasıl bir kod kullanmam gerekiyor?
form.php
$result = sonrasındaki mesajlarıda dil dosyasına eklemek istedim ama bir türlü beceremedim.
şu kodu form.php içindeki alanlara nasıl eklerim? teşekkürler.
function yetki($uid){
$uye=mysql_fetch_array(mysql_query("select * from users where id='$uid'"));
if($uye['yetki'] == 1){
$yetki=echo $dil['giris'];
}
else{
$yetki='YOK';
}
return $yetki;
}
burdaki hatayı nasıl düzeltebilirim yardımcı olursan çok mutlu olurum
hata:
Notice: Undefined variable: dil in C:\serverr\htdocs\baglantilar\fonksiyonlar.php on line 6
$yetki=echo $dil[‘giris’];
bu kullanım yanlışbu şekilde duzeltiniz
$yetki= $dil[‘giris’];
Merhaba bu dediklerinizi uyguladım anlattıklarınız için çok teşekkür ederim fakat bir konuda daha sizden yardım isteyeceğim, kullanıcı logout işlemi yaptığında yani session_destroy edildiğilde anasayfaya yönlendirdiğinde if (!$_SESSION[“dil”]) bu kısım hata veriyor. Bu hatayı başına “@” koyarak çözdüm fakat
kullanıcı ingilizce dilini seçti diyelim sorun yok site boyunca dolaşabiliyor fakat logout(session_destroy) işlemi yapıldığında site varsayılan türkçe haline geri dönüyor. Bu sorunu nasıl düzeltebilirim
Çıkış sayfasında session sonlandırırken tüm sesionları değil, çıkış ile alakalı sessionları sonlandırmalısınız.
Hocam boyle bisey yazdm header.php-de siteye girerken gozukuyo ama tiklaynca calsmiyor neden olur rica etsem bakarmisiniz?yardm ederseniz sevinirim
AZ | RU | EN | GE (kayd etdiyim sitemi ziyaret ederseniz wahid olursunuz)
Okan bey
ve
if ($_SESSION[“dil”]==”tr”) : BU SATIR HATA VERİYOR
$this->slogan=$sorguson[“slogan_tr”];
$this->referansbaslik=$sorguson[“referansbaslik_tr”];
$this->referansUstBaslik=$sorguson[“referansUstBaslik_tr”];
elseif ($_SESSION[“dil”]==”en”) : BU SATIR HATA VERIYOR
$this->slogan=$sorguson[“slogan_en”];
$this->referansbaslik=$sorguson[“referansbaslik_en”];
$this->referansUstBaslik=$sorguson[“referansUstBaslik_en”];
sayfa açıldığında hata veriyor dil tercihi yapıldıktan sonra düzeliyor. Yardımcı olursanız sevinirim.
if(isset($_SESSION[“dil”]){
if ($_SESSION[“dil”]==”tr”) : BU SATIR HATA VERİYOR
$this->slogan=$sorguson[“slogan_tr”];
$this->referansbaslik=$sorguson[“referansbaslik_tr”];
$this->referansUstBaslik=$sorguson[“referansUstBaslik_tr”];
elseif ($_SESSION[“dil”]==”en”) : BU SATIR HATA VERIYOR
$this->slogan=$sorguson[“slogan_en”];
$this->referansbaslik=$sorguson[“referansbaslik_en”];
$this->referansUstBaslik=$sorguson[“referansUstBaslik_en”];
}
isset ile session olup olmadığını kontrol edin veya
if (@$_SESSION[“dil”]==”tr”)
şeklinde hata bastırma operatörü olan @ karakterini kullanının.Merhaba, Çorlu danım bende. Espower dan hazır e ticaret scripti almayı düşünüyorum php. 4-5 dil desteği eklenmesi gerekecek. Mümkünse taracıdan otomatik okusun o dilde açsın olmuyorsa sağ üstten çoktan seçme butonla.Bu konuda uygun ücretli yardımınız olursa lütfen 05327221994 whatsapptan gönderin.Teşekkürler..
Merhaba,
domain.con/en olacak şekilde ayarlamak istiyorum. Yalnız bunun htaccess dosyası nasıl olacak?
Hocam merhaba, sisteminizi kullanmaya başladım. Yalnız ilk girişte (hiç dil seçimi yapılmadan) şöyle bir hatayla karşılaşıyorum:
Notice: Undefined index: dil in D:\laragon\www\index.php on line 6
Dil seçip session atandıktan sonra bu sorun kalkıyor. 6. satır şöyle: “if (!$_SESSION[“dil”]){”
Yardımcı olabilir misiniz?
session tanimli olmadigindan o hatayi veriyor. 6. satırın başına @ operatörü koyarak hatayi bastirabilir ve isset ile session olup olmadığını kontrol edebilirsiniz.
Selamlar, yaklaşık 3 yıldır bu makalenizde ki sistemi kullanmaktayım ancak şöyle bir sorum var. Yabancı bir kişi girdiği zaman otomatik kendi diline atmasını istiyorum (Tarayıcı dili) bunu nasıl yönlendirebilirim?
Bu yapı ile olmaz malesef. Bunun için ayrı bir makale yazmalıyım.
ben sessionda tutmak istemiyorum. mysite.com/tr mysite.com/en olarak görüntülenmesini istiyorum bunun için ne yapmalıyım
İyi günler.Ben blog sitemde yayinladigim yazının da dil seçeneğinin olmasını istiyorum.2 farklı şekilde yazıyorum postu tr ve en hangi dile tiklarsa o yazının çıkmasını nasıl saglarim
Merhaba sizin öncelikle veritabanınızın blog kısmında icerik alanınızda tr_icerik, en_icerik gibi farklı sütunlar oluşturmalısınız.
Ziyaretçinin konuştuğu dili basitçe şöyle tesbit edebilirsiniz.
Ziyaretçinin dilini tesbit ettikten sonra basit bir if kontrolü ile eğer konuşulan dil veritabanında varsa göster yoksa varsayılan dilim olan türkçeyi göster yapabilirsin.
Kısaca mantığı budur.
Okan; WP sitemiz var. Bir çok dil yapacağım. Lakin şu şekilde yapmak istiyorum bir txt dosyası düşün $Login = “Giriş Yap” şeklinde bir çok sözlük içeriğimiz var. Dosyayı sayfaya çağırıp O değişkenleri nasıl gömeriz?
Php ile satır satır txt dosyası okumanız gerekiyor. Yani okuduğunuz satırları bir arraya aktararak alabilirsiniz.
Dosya.txt adlı bir dosyamız olsun bu dosyada her satırı dizin olarak alabiliriz.
Örnek Dosya.txt içeriği
-deneme
-deneme1
-deneme2
Merhaba,
anlatımınız için teşekkür ederim.
bu uygulama ile veritabanından da çektiğim verilere uyguladım örnek
$row[‘baslik_’.$_SESSION[“dil”]]
gibi. İşlem çok güzel çalışıyor merak ettiğim konu tek bir sorgu ile verinin türkçe haricinde başka bir dili yoksa veritabanında onu türkçe olarak ekrana çıkmasını nasıl sağlarım.
her bir sorgu için yapmak çok zor bunun kısa bir yolu varmı.
yani kişi ingilizceyi seçti fakat ingilizce hali veritabanında yok ona türkçeyi nasıl gösterebilirim
if($dil==””){
$_SESSION[“dil”] = “tr”;
}else{
$_SESSION[“dil”] = $dil;
}
fonksiyon dosyasına gibi birşey olabilirmi
Merhaba, eğer sitede girilmek istenen dil yoksa menüde de geçiş için dilin butonu olmamalı. Ha eğer görüntü olsun ileride eklerim dil dosyasını menüde butonu da gözüksün diyorsan, dil dosyalarını dil adinda bir klasörde tutup, o klasörde get ile gelen dil dosyası var mı yok mu buna bakmalısın.
Örneğin dil klasörü altında tr.php, en.php diye iki dil dosyamız olsun. Menüde ekstra olarak de.php çağrılarak almanca goruntulenmek istensin.
Klasöründe de.php dosyasının varlığını
Şeklinde bulabilirsin
Merhaba Okan, dil dosyası içine yazılan link in tıklanabilir olması için ne yapmak gerekli. “her dil için farklı bir pdf linki vermem gerekli”
Şimdiden teşekkür ederim.
şeklinde kullanabilirsiniz.
Merhaba,
2020 yılına göre sizce global bir site hazırlarken milyonlara hitap edebilcek bir site için konuşuyorum url dil yapısı olsun kullanılan dil yöntemi olsun nasıl olmalıdır en mantıklısı en rahatı? (Örneğin: http://www.example.com.tr / http://www.example.com.eu bu tarzda bişimi yoksa url içinde gözüken lang=tr lang=eu gibi birşeymi yapmak mantıklı olur) her ayrı bölgeleri yönetebilmek adına ziyaretçileri kolaylıkla takip edebilmek adına nasıl olmalıdır. Her dil için farklı domain almak gerekirse farklı bulut sunucu’mu gerekli yoksa tek bulut sunucudan farklı domainlere yöneltebilirmiyiz. :)) biraz karışık olmuş olabilir kafama keldiği gibi yazdım şimdiden teşekkürler cevabınızı bekliyorum. İyi günler
Saygılarımla
Merhaba, mantıklı olan example.com/tr, example.com/en gibi bir yapı oluşturmaktır. com uzantısı zaten global bir uzantidir. Bu şekilde tek sunucudan hizmet verilebilir. Artık yeni sitelerde ziyaretçiye dil seçimi menüsü yapılmıyor. Bunun için kullanılan browser hangi dilde ise veritabanindan o dil yansıtılıyor. Eger o dil yoksa varsayılan dil yansıtılıyor. Bu sayede İngilterede yaşayan bir Türk tarayıcısını Türkçe kullanacağı düşünüldüğünden o ziyaretcinin Türkçe bildiği anlaşılıyor ve site ona otomatik olarak Türkçe açılıyor. Güzel soru için teşekkürler.
söyle bir sorum olucak kişi panelden dil ekle dediğinde gerekli ayarları nerden nasıl yapıyorlar bunla ilgili bir çalışma paylaşırsanız sevinirim örnek olarak webofisinin kullandığı gibi mesela.
yada mantığını anlatan bir içerik paylaşırsanız.
Benim gösterdiğim manuel bir dil ekleme. Panelden yeni bir dil eklemek için bunu veritabanından yonetilebilir yapmanız lazım. Esasen bunun bir çok yolu var. Dizindeki yeni bir php dil dosyasını yönetim panelinden oluşturmakta çözüm olabilir.
fonksiyon çok kullanışlı ancak sormak istediğim bir şey var örnek olarak array içerisinde x kategorisinde ilan bulunamadı yazmak istiyorum bu x kısmına’da dinamik olarak mesajın gösterildiği kategoriyi yazmak istiyorum acaba bunu nasıl yapabilirim?
Emeğinize sağlık çok teşekkür ederim sizin sayenizde işim çözüldü 🙂
Siz bana ulaşabilirsiniz sitede bilgilerim mevcut.
s.a hayırlı günler kardeşim.mail adresimden bana ulaşabilirmisin senden dil çeviri konusunda yardımı rica ediyorum…
teşekkürler
seo url’de nasıl kullancaz ? Örneğin Türkçede link “a” ingilizce seçine doğal olarak başlığın değişmesi lazım yardımcı olurmusunuz.
Çok dil secenekli yapilarda seo url degismez. Bu şekilde bir yapi görmedim. İçerik degisebiliyor ancak url degismez seoya uygun olduğunu da düşünmüyorum.
Allah razı olsun.Bir ay önce 3 dilli bir site yapmıştım.Dil değiştiğinde aynı sayfada kalmasını sağlayamamıştım.Vazgeçmedim.ve senin sayande halloldu.Arayan mevlasınıda belasınıda bulur.Sonunda buldumHayırlı ne dileğin varsa rabbim nasib eylesin.:)
header(“location: “.$_SERVER[‘HTTP_REFERER’].””);
Her ne kadar konuşma diliyle yazsamda bazen kendi yazdıklarımı anlamakta ben bile zorluk çekiyorum. Anlamanıza ve sorunu çözmenize sevindim.
keşke demoyu indirmek için link verseydiniz. Bu şekilde yapamadım o örnek üzerinden ilerlerdik.
Demoda verilen scripti indirebilirsiniz. Pvp diye aratın.
merhaba ,bu sadece index.php de oluyor.mesela ben hakkımızda.php de dil değiştirmek istiyorum
ama index.php ye atıyor bunu nasıl düzeltebilirim.
Merhaba Mehmet, dil fonksiyonununda if‘ten sonraki header(“Location:index.php”); kısmı silip yerine header(“location: “.$_SERVER[‘HTTP_REFERER’].””); yazmanız yeterli olacaktır. Bu haliyle bulunduğu sayfada dil değişecek ve index.php dosyasına yönlendirmeyecek sizi. Sayfanın ilgili kısmında da sizin mesajınızdan sonra bu değişikliği ekledim.
saol kardes işe yaradı.Fakat bi sorum daha olacak yardım edersen sevinirim.Ben sitemi yaptım sunucu ya attım fakat location:index.php çalışmıyordu .com/dil.php?dil=en bura geliyo burda beyaz sayfada kalıyordu bunuda söyle çözmustum
print ‘location=”index.php”;’;
exit;
bu kodu yazarak ama şimdi $_SERVER[‘HTTP_REFERER’].”” bunu eklıyemıyorum buraya baska nasıl yapabılırım
Ben sitemi yaptım sunucuya attım tabirinizden localde çalıştığını anlıyorum. Sunucunuz acaba windows mu? Bu şekilde çalışması gerekir. Verdiği hatayı buraya yazarsanız daha iyi yardımcı olabilirim
Localde sorunsuz çalısıyor ama internete yükledigimde location:index.php çalısmıyor.
Yani .com/dil.php?dil=en buraya gidiyo burda beyaz sayfada kalıyor sunucuda çalısmıyor localde çalısıyor.Location:index.php yerıne baska bıse kullanabılırmıyız.
Merhaba Okan. Ben statik tasarımlarda çoğunlukla bu sistemi kullanıyorum fakat dil değiştiğinde anasayfaya atıyor. Ziyaretçi bulunduğu sayfada dil değiştiremiyor mu? Konuyla ilgili bi fikrin varsa paylaşırsan sevinirim.
Merhaba Deniz, anlatımını yaptığım dil sistemini pvp scriptimde kullandım, her sayfada dil değiştirebiliyorum bir problem yaşamadım.
Haklısın Okan, ben internette araştırırken senin kodlara ulaştım ama yapısına dikkat etmemişim. Benim kullandığım cookie ile hazırlanmıştı. Ama hallettim 🙂 Geridönüş için teşekkürler.
İyi çalışmalar kolay gelsin.