Günde bir kere çalışan kod
<script type="text/javascript">
var dil = navigator.language || navigator.userLanguage;
if (dil == "tr-TR" || dil == "tr") {
}
else {
document.location = "/en";
}
</script>
Şöyle bir şey yapmak istiyorum. kullanıcının tarayıcısı türkçeyse hiç bir şey olmasın.
Değilse /en sayfasına yönlensin.
Sorunum şu ki, kullanıcının tarayıcısı ingilizceyse ana dizine (türkçe sayfaya) girdiyi anda /en adresine yönleniyor.
Bu sorunu nasıl aşa bilirim?
iki çözüm geldi aklıma. ilk olarak bu kodun her kullanıcı için sadece bir kez çalışması. ya da her kullanıcı için belirtilen zamanda bir çalışması.
malesef javascript bilgim yetersiz olduğu için bir şey yapamadım.
Yukarıdakı koda nasıl bir ekleme yaparak bu sorun çözülür?
Teşükkürler.
Sorunu daha net açıklar mısınız?
İsteğiniz: Kullanıcının tarayıcısı Türkçeyse hiçbir şey olmasın. Değilse /en sayfasına yönlensin.
Sorununuz: Kullanıcının tarayıcısı İngilizceyse (Türkçe değilse) /en adresine yönleniyor.
Zaten istediğiniz şey olmuyor mu?
Öncelikle yönlendirme işlemini front-end kısmında değil back-end kısmında yapmanızı tavsiye ederim.
Front-end kısmında yapacaksanız, kullanıcının tarayıcısına 3-4 şekilde veri eklemeniz mümkün: Local Storage, Session Storage, IndexedDB, Cookies.
Bunlardan birine istediğiniz bir veriyi ekleyebilir ve ziyaretçiler her geldiğinde bu verinin varlığını kontrol edebilirsiniz. Böylece bu tarayıcıda tek seferlik çalışacak kodlar yazmanız mümkün olur.
Örneğin:
// Local Storage'deki "isFirst" key'inin değerini alalım.
let isFirst = localStorage.getItem("isFirst");
// Eğer aldığımız değer null ise bu tarayıcıya daha önce girilmediğini anlıyoruz.
if(!isFirst) {
// Local Storage'deki "isFirst" key'ine bir değer yazalım.
// Böylece birdahaki istekte "isFirst" key'i boş olmayacağı için ziyaretçinin ilk kez gelmediğini anlayabileceğiz.
localStorage.setItem("isFirst", "1");
// Böylece mesela ilk kez siteye giriş yapan birine "Seninle tanıştığıma memnun oldum" diyebiliriz.
const browserLang = navigator.language || navigator.userLanguage;
if(browserLang == "tr-TR" || browserLang == "tr") alert("Seninle tanıştığıma memnun oldum!");
else alert("I'm glad to meet you!");
}
Belki bu örnek yapmak istediğiniz şeyle ilgili ipucu verir.
Eğer siz kullanıcının tarayıcı diline göre Türkçe sayfaya hiç uğramadan /en'e gitmesini istiyorsanız bunu back-end tarafında çözmelisiniz.
Örneğin PHP ile tarayıcı dilini yakalamak için aşağıdaki gibi bir kod kullanabilirsiniz:
<?php
$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
$acceptLang = ['fr', 'it', 'en'];
$lang = in_array($lang, $acceptLang) ? $lang : 'en';
require_once "index_{$lang}.php";
?>
Kaynak: stackoverflow
Bu kadar yardımcı olabiliyorum...