Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [cookies][javascript] 2 wersje językowe na blogu
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
marian2299
Cześć,
mam problem z blogiem, który pomagam założyć znajomemu. Chcemy, żeby był po angielsku i po polsku. Blogger niestety nie ma takiej funkcji, ale znalazłem pomoc w postaci skryptu (http://polytimenerd.blogspot.fr/2012/06/multilanguage-posts-in-your-blog.html)

Mój kod obecnie wygląda tak:

  1. <script language="Javascript">
  2. function getElementsByClass(searchClass,node,tag) {
  3. var classElements = new Array();
  4. if ( node == null )
  5. node = document;
  6. if ( tag == null )
  7. tag = '*';
  8. var els = node.getElementsByTagName(tag);
  9. var elsLen = els.length;
  10. var pattern = new RegExp('(^|\\\\s)'+searchClass+'(\\\\s|$)');
  11. for (i = 0, j = 0; i < elsLen; i++) {
  12. if ( pattern.test(els[i].className) ) {
  13. classElements[j] = els[i];
  14. j++;
  15. }
  16. }
  17. return classElements;
  18. }
  19.  
  20. function show_en() {
  21. var pl = getElementsByClass('lang:polish', null, null);
  22. var en = getElementsByClass('lang:english', null, null);
  23.  
  24. for(i = 0; i < pl.length; i++) {
  25. pl[i].style.display = 'none';
  26. }
  27.  
  28. for(i = 0; i < en.length; i++) {
  29. en[i].style.display = 'block';
  30. }
  31. }
  32.  
  33. function show_pl() {
  34. var pl = getElementsByClass('lang:polish', null, null);
  35. var en = getElementsByClass('lang:english', null, null);
  36.  
  37. for(i = 0; i < pl.length; i++) {
  38. pl[i].style.display = 'block';
  39. }
  40.  
  41. for(i = 0; i < en.length; i++) {
  42. en[i].style.display = 'none';
  43. }
  44. }
  45.  
  46.  
  47.  
  48.  
  49.  
  50. <a href="#" onclick="show_en();"><img src="PATH-flagawielkiejprytanii.jpg" style="width: 65px; height: 48px;" /></a>
  51. <a href="#" onclick="show_pl();"><img src="PATH-polskaflaga.jpg" style="width: 65px; height: 48px;" /></a>


Dzięki temu, każdy <div class="lang:polish"> </div> i <div class="lang:english"> </div> pokazują się tylko po kliknięciu flagę.

Kategorie działają ładnie, zmieniają się, kiedy się w nie kliknie, ale problemem są 2 rzeczy:

1. Jak sprawić, żeby nie trzeba było klikać przy każdym odświeżeniu strony w angielską flagę?
2. Jak sprawić, żeby po kliknięciu w angielską flagę automatycznie PRZEKIEROWAŁO MNIE POD JAKIŚ ADRES I ZAŁADOWAŁO angielską wersję?
(chodzi o to, że posty angielskie mają konkretną flagę na bloggerze i chciałbym żeby można było podstawić link /search/Label:Englsish i jednocześnie, zeby cała strona się zmieniała na angielski)

Wiem, że należałoby ustawić setcookie, ale nie mam pojęcia, jak i byłbym bardzo wdzięczny za jakąkolwiek pomoc.
Marcin
Comandeer
Jeśli to działa tylko po stronie JS, to zamiast ciasteczek wystarczy pobawić się z localStorage. Wówczas zapis języka mógłby wyglądać tak:
Kod
localStorage.setItem('lang', 'en');

a odczyt tak:
Kod
var lang = localStorage.getItem('lang');


A przekierowanie to po prostu ustawienie location.href na odpowiedni adres.
marian2299
Dziękuję za odpowiedź!
Ale ten odczyt ma być onclick na fladze?
jestem zielony w JS, nigdy sie nie zglebilem w tym tak jak w PHP i MySQL.
Comandeer
Dostawiłbym coś takiego na końcu tego script:
Kod
if(localStorage.getItem('lang') != 'en')
    show_pl();
else
    show_en();

Co na starcie powinno załadować dobry język.

Natomiast do show_pl i show_en trza by dodać na końcu linijki ustawiające odpowiedni język
Kod
localStorage.setItem('lang', 'en czy tam pl');

i powinno w miarę działać.
marian2299
DZIĘKUJĘ ! ! ! !

Mam jeszcze jedno pytanie,
jak podlinkować te flagi? Gdy daję coś takiego:
<a href="http://*.blogspot.com/search/?q=label:english" onclick="show_en();">

to elementy niżej (jak "o mnie") zmieniają się na angielski ale tylko na sekundę i na tej załadowanej stronie już znowu jest po polsku. Podczas gdy np. menu głowne u góry się nie zmienia. To wina bloggera czy moja?

Comandeer
Hmm… A
Kod
<a href="http://*.blogspot.com/search/?q=label:english" onclick="show_en();return false;">

?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.