Detaylar
Kim cevapladı?Bu yaklaşımın beğenmediğim birçok yanı var fakat ilk aklıma gelen çözümlerden biri oldu, buyurun:
Jsfiddle ön izlemesi gelmiş Sosyal'e, vay! Bayağı iyi.
Yoksa başından beri var mıydı?
Mantık şu şekilde:
En azından fikir olsun.
- Metin yazan her yerde aynı metnin alt alta Türkçe ve İngilizce versiyonlarını barındıran elementler bulunuyor, sırasıyla
trveensınıflarına sahip. Ben bu iki dilin olacağını varsaydım.- Script kısmında şu anki dili tutuyoruz
curLangdeğişkeninde.- Dil değiştirme butonu ve bu butona atanmış bir
onclicketkinliği var. Butona basıldığı zamanchangeLanguagefonksiyonu çağrılıyor ki bu fonksiyon yine script kısmında tanımlı.- Fonksiyon şu şekilde çalışıyor: Şu anki dile sahip elementlere
hiddensınıfı ekle, diğer dile sahip elementlerdenhiddensınıfını kaldır.hiddensınıfı da sadecedisplay: none;özelliğini kapsıyor.
Merhaba,
Bu çözümü çok beğendim, pratik ve sadece iki dil ise kullanışlı. Bir sorum olacaktı navigasyon ile alakalı. Navigasyon linkleri nasıl olmalı sizce? Mesela başka bir sayfaya atlandığında aynı dil kalsın.
Son düzenleyen: Moderatör:
Merhaba,
Bu çözümü çok beğendim, pratik ve sadece iki dil ise kullanışlı. Bir sorum olacaktı navigasyon ile alakalı. Navigasyon linkleri nasıl olmalı sizce? Mesela başka bir sayfaya atlandığında aynı dil kalsın.
Merhaba, yorumunuz için sağ olun.
Bu çözümün beğenmediğim yanlarından biri, sayfa yüklenirken kısa süreliğine iki dildeki elementlerin de görülmesi. Sayfa yüklendikten sonra JavaScript'in devreye girmesi gerekiyor ki tercih edilmeyen dildeki elementler gizlenebilsin. Bunun üstesinden gelmek için mesela bir dildeki elementlerin tümüne HTML'de
hidden sınıfını da eklemeyi düşündüm ama pek sıcak bakmadım. Aslında şu ankinden daha güzel bir sonuç verir gibi geliyor ama o tercih sizin olsun. (Alternatif çözüm olarak bunu da sona ekledim.)Her ne kadar ben de sizin gibi kullanışlı olduğunu düşünsem de söz konusu sayfa dili olunca daha oturaklı çözümler kesin mevcuttur, ben araştırmadığım için bilmiyorum, yalnızca
i18n kavramından söz edebilirim. Size önerim, bu çözüme pek bel bağlamamanız. Günü kurtarabilir ama proje büyüdükçe ne kadar sağlıklı kalır bilmiyorum. Fikir olsun diye sundum.Navigasyon desteği için birtakım düzenlemeler yaptım (Umarım destekliyordur şimdi, test etmedim.), bir de kodu genel olarak biraz düzenlemeye çalıştım. Tercih edilen dilin hatırlanması adına
localStorage'ı kullandım, "tarayıcı hafızası" olarak düşünebilirsiniz bunu. Site içinde başka sayfaya geçseniz de oraya kaydettiğiniz bilgiler korunuyor. Umarım işinize yarar:İlk paragrafta bahsettiğim alternatif çözüm, İngilizce elementlere tek tek
hidden sınıfını ekledim:Merhaba, yorumunuz için sağ olun.
Bu çözümün beğenmediğim yanlarından biri, sayfa yüklenirken kısa süreliğine iki dildeki elementlerin de görülmesi. Sayfa yüklendikten sonra JavaScript'in devreye girmesi gerekiyor ki tercih edilmeyen dildeki elementler gizlenebilsin. Bunun üstesinden gelmek için mesela bir dildeki elementlerin tümüne HTML'dehiddensınıfını da eklemeyi düşündüm ama pek sıcak bakmadım. Aslında şu ankinden daha güzel bir sonuç verir gibi geliyor ama o tercih sizin olsun. (Alternatif çözüm olarak bunu da sona ekledim.)
Her ne kadar ben de sizin gibi kullanışlı olduğunu düşünsem de söz konusu sayfa dili olunca daha oturaklı çözümler kesin mevcuttur, ben araştırmadığım için bilmiyorum, yalnızcai18nkavramından söz edebilirim. Size önerim, bu çözüme pek bel bağlamamanız. Günü kurtarabilir ama proje büyüdükçe ne kadar sağlıklı kalır bilmiyorum. Fikir olsun diye sundum.
Navigasyon desteği için birtakım düzenlemeler yaptım (Umarım destekliyordur şimdi, test etmedim.), bir de kodu genel olarak biraz düzenlemeye çalıştım. Tercih edilen dilin hatırlanması adınalocalStorage'ı kullandım, "tarayıcı hafızası" olarak düşünebilirsiniz bunu. Site içinde başka sayfaya geçseniz de oraya kaydettiğiniz bilgiler korunuyor. Umarım işinize yarar:
İlk paragrafta bahsettiğim alternatif çözüm, İngilizce elementlere tek tekhiddensınıfını ekledim:
Kullanışsız ve hantal bir kod. Stabil çözüm için dil içeriğini JSON olarak depolayıp seçilen dile göre elementlere yazdırmanız gerekiyor. Her dil için aynı elementten birden fazla kez oluşturduğunuz için DOM gereksiz büyüyor. Bu da ram kullanımı ve yüklenme süresini olumsuz yönde etkiliyor.
- Katılım
- 16 Aralık 2023
- Mesajlar
- 309
- Çözümler
- 3
- Beğeniler
- 192
Stringlerin her birini farklı dil dosyalarında tutup kullanıcı hangi dili seçtiyse o dil dosyasını çağırmak ve stringlerin o dil dosyalarından okunmasını sağlamak mantıklı bir çözüm olabilir. Örnek bir structure:
/languages/
-> en.php
-> tr.php
-> de.php
tr.php içeriği:
Daha sonra template üzerinden çağırılabilir
/languages/
-> en.php
-> tr.php
-> de.php
tr.php içeriği:
PHP:
<?php
return array(
"homepage" => "Ana Sayfa",
"about" => "Hakkımızda",
"error" => "Hata",
...
);
Daha sonra template üzerinden çağırılabilir
PHP:
<?php
// Kullanıcının seçtiği dil, session veya cookie'de tutulabilir
$selected_lang = "tr";
// Seçilen dili çağır
$lang = include __DIR__ . '/languages/'. $selected_lang .'.php';
?>
<html>
<head>
<title>Techolay için dil desteği örneği</title>
</head>
<body>
<div id="app">
<?=$lang['homepage']?>
// Dil TR ise "Ana Sayfa" yazar, dil İngilizce ise en.php içerisinde tanımlanan veriyi yazar
</div>
</body>
</html>
xares
Üyecik
- Katılım
- 10 Eylül 2025
- Mesajlar
- 2
- Beğeniler
- 1
React kütüphanesinde i18n kullanıyorum bu gibi durumlar için müthiş kolaylık sağlıyor. Türkçe dosyasını yapay zeka ile istediğim dile çevirip siteye tek seferde istediğim dili ekliyorum. Buna geçmeden önce conditional rendering ile yapıyordum işkenceydiKeşke daha iyi çözümler düşünebilsem de onları paylaşsam. : D
Ne düşünebildiysem onu paylaştım. Kötü yanlarını görebilmekle birlikte nasıl iyileştirebileceğimi bilemedim.
React gibi bir kütüphaneyle yapmak rahatıma gelirdi.
Yeni konular
-
-
X870e Aorus Pro X3D Ice model anakartta RAM XMP1 profili açılmıyor
- Teknopatici
- Mesaj: 2
-
-
-
-
-
-
-
-