Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wybór języka
Forum PHP.pl > Forum > PHP
neversoft
Witam serdecznie,

Mam pewien problem. Tworzę stronę na której będą na pewno 3 języki. Jest strona powitalna z 3 flagami. I teraz jak najlepiej zrobic ten wybór w php? Nie wiem czy się dobrze wyraziłem. Ale po prostu wg mnie rozwiązanie typu index1.php?lang=pl jest dosc słabe ze względu tego, że było by trzeba przesyłac tą zmienną w każdym linku... Drugim moim pomysłem wg mnie lepszym było by utworzenie sesji z wybranym językiem. I wtedy skrypt by sobie sprawdzał jaki jest język. Znacie może lepszy sposób? I czy może któryś z moich jest dobry i powszechnie stosowany? Proszę o pomoc.
strife
Sesje bądź ciasteczka to najlepsze rozwiązanie. Dla tych którzy wyłączają ciastka, możesz dodawać na końcu każdego odnośnika zmienną językową, ale nie wiem czy jest sens. Patrz ranking.pl
neversoft
Czyli pozostają sesje?
strife
Cytat(neversoft @ 13.02.2007, 21:51:10 ) *
Czyli pozostają sesje?


No ale wiesz, jak jest sesja tworzona to zostaje dodane ciasteczko z identyfikatorem sesji ( PHPSESSID domyślnie ), i na podstawie tego są odczytywane wartości zmiennych sesyjnych z serwera. Uważam, że ciastka są lepszym rozwiązaniem, bo zostaje to zapisane po stronie użytkownika, ( co odciąża serwer ), a także przy ponownym wejściu na stronę, wersja językowa będzie już zapamiętana. Także, aby nie było w adresie widocznego np. ?lang=en musisz zmusić użytkownika do włączenia ciastek obojętnie czy będziesz to zapisywał w sesjach czy ciastkach.

Wejdź na tą stronę ranking, i zobacz jaki procent ludzi nie korzysta z ciasteczek.

Pozdrawiam.
Babcia@Stefa
Ja proponuje tablice + sesje + ciasteczka.
Przykład użycia tablicy:
  1. <?php
  2. $lang = $_SESSION['language'];
  3. $zdanie[pol] = 'To jest zdanie po polsku.';
  4. $zdanie[eng] = 'This is sentence in polish.';
  5. $zdanie[ger] = 'Blablablabla...';
  6. echo $zdanie[$lang];
  7. ?>


@strife
Chyba raczej do tego służą ciastka, ponieważ ciasteczka służą do przechowywanie informacji na stronie o użytkowniku w jego komputerze.

Dziękuję, Babcia@Stefa
Vogel
Cytat(strife @ 14.02.2007, 02:09:33 ) *
No ale wiesz, jak jest sesja tworzona to zostaje dodane ciasteczko z identyfikatorem sesji ( PHPSESSID domyślnie ), i na podstawie tego są odczytywane wartości zmiennych sesyjnych z serwera. Uważam, że ciastka są lepszym rozwiązaniem, bo zostaje to zapisane po stronie użytkownika, ( co odciąża serwer )


wylacz ciastka w przegladarce i sprawdz co sie stanie przy odpaleniu sesji. pozatym "odciazanie serwera". odciazanie z czego? prooooszeee...

@neversoft - uzyj sesji. zapomnij o ciastkach. ciastka sa przydatne gdy chcesz zapisac dane, ktore maja pozostac PO zamknieciu przegladarki. w przeciwnym wypadku sesje sa znacznie wygodniejsze (sa niezalene od ustawien przegladarki, nie przekazujesz danych do klienta tylko trzymasz je na serwerze).
strife
Cytat
@neversoft - uzyj sesji. zapomnij o ciastkach. ciastka sa przydatne gdy chcesz zapisac dane, ktore maja pozostac PO zamknieciu przegladarki. w przeciwnym wypadku sesje sa znacznie wygodniejsze (sa niezalene od ustawien przegladarki, nie przekazujesz danych do klienta tylko trzymasz je na serwerze).


Są zależne od ustawień przeglądarki, chyba że jest użyty session handler który dodaje id sesji do adresu. Ciastka są po to, aby zapamiętać jakąś wartość która się często nie będzie zmieniać, np. język na stronie. W moim przekonaniu sesje służą do czegoś innego, ale to już moje zdanie.

Cytat(Vogel @ 14.02.2007, 06:40:37 ) *
wylacz ciastka w przegladarce i sprawdz co sie stanie przy odpaleniu sesji


Zmienne z sesji nie będą widoczne?

  1. <?php
  2.  
  3. var_export( $_SESSION );
  4.  
  5. $arrLang = array( 'en', 'pl', 'de' );
  6.  
  7. if ( in_array( $_GET['lang'], $arrLang) )
  8. {
  9. $_SESSION['lang'] = strtolower( $_GET['lang'] );
  10.  
  11. }
  12.  
  13. ?>
  14. <pre>
  15. <a href="?lang=en">Angielski</a>
  16. <a href="?lang=pl">Polski</a>
  17. <a href="?lang=de">Niemiecki</a> 
  18. </pre>


I po wyłączeniu ciastek masz widoczne zmienne sesji tak ? snitch.gif

Mimo wszystko uważasz, że ciągłe ustawianie języka po wejściu na stronę jest dobrym rozwiązaniem niż zapamiętywanie języka na stałe i bycie niezależnym od zamknięcia przeglądarki?

Pozdrawiam.
neversoft
Hmm klient raczej chce aby zawszę była pokazana strona z wyborem języka. Więc pozostanę przy sesjach.
graft
ja używam i sesji i ciastek, żeby powracający odwiedzający nie musieli zmieniać język przy każdych odwiedzinach.

Jeśli jest ciastko ----> przypisuje sesji dane z ciastka.
Jeśli nie ma to szuka języka przeglądarki i zapisuje ciacho i sesje.
Jeśli nie wykryje języka to standardowy.
sagittariuspl
@Babcia@Stefa ja robiłem trochę inaczej
  1. <?php
  2. $_lang[pol][zdanie1] = 'To jest zdanie po polsku.';
  3. $_lang[eng][zdanie1] = 'This is sentence in polish.';
  4. $_lang[ger][zdanie1] = 'Blablablabla...';
  5. ?>

taką tabelkę można sobie w razie potrzeby fajnie wyświetlić przez print_r.
choć oczywiście najlepiej zrobić trzy pliki językowe i wczyywać odpowiedni wg wybranego języka... ale to są rozważania trochę odbiegające od tematu wstydnis.gif
sanchoo
sesja + ewentualnie ciastka .. sa najlepszym rozwiazaniem....
B16
znalazłem ten temat, a że jestem początkujący w php to mam pytanko:
jak zrobić stronke index.php, żeby mieć wybór języków ?
Mam obecnie coś takiego
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  2. <html>
  3. <head>
  4. <title>b3niup@o2.pl - Webmaster &amp; Webdesigner</title>
  5. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
  6. <meta http-equiv="Content-Language" content="pl" />
  7. <meta name="robots" content="index,follow" />
  8. <meta HTTP-EQUIV="reply-to" CONTENT="b3niup@o2.pl" />
  9. <link href="main.css" type="text/css" rel="stylesheet">
  10. <body>
  11. <center>
  12. <?php
  13. $lang = "pol/index.php";
  14. function lang($jaki)
  15. {
  16. switch ($jaki) {
  17. case "eng":
  18. $lang = "eng/index.php";
  19. break;
  20. case "pol":
  21. $lang = "pol/index.php";
  22. break;
  23. }
  24. global $lang;
  25. }
  26. ?>
  27.  
  28. <a href=<?php $lang; ?>>
  29. <img src='img/enter_site.jpg' alt='Enter'>
  30. </a>
  31. <br />
  32. <p id="select">Wybierz język / Choose language 
  33. <img src='img/languages_06.gif' alt='English' onclick='<?php lang(eng) ?>>
  34. <img src='img/languages_03.gif' alt='Polski' onclick='<?php lang(pol) ?>>
  35. <br /><br />
  36. <b>Uwaga ! / Warning !</b><br />
  37. Żeby przeglądać tę strone w różnych językach musisz mieć włączoną obsługę cookie
    s w przeglądarce !<br />
  38. To visit our page in different languages you must have enabled cookies in your b
    rowser !
  39. </p>
  40. </center>
  41. </body>
  42. </html>

ale coś mi tu nie działa (jak zwykle tongue.gif)
in5ane
Ja pi3rd0l3, ile można to wałkować...
Masz tutaj dobrze wytłumaczone: LINK
.radex
Cytat(sagittariuspl @ 29.12.2007, 13:28:27 ) *
  1. <?php
  2. $_lang[pol][zdanie1] = 'To jest zdanie po polsku.';
  3. $_lang[eng][zdanie1] = 'This is sentence in polish.';
  4. $_lang[ger][zdanie1] = 'Blablablabla...';
  5. ?>

Zapomniałeś o apostrofach/cudzysłowach przy nazwach elementów.
sagittariuspl
@radex_p - jak nie masz zamiaru pisać nic sensownego to nie pisz. nie zapomniałem. sprawdź. dziala
Hazel
Obaj macie rację, bo jeden powinien stosować apostrofy/cudzysłowy przy odwoływaniu się do elementów tablic, a drugi powinien sprawdzić i zobaczyć ze działa.
@sagittariuspl
Pamiętaj, że na przykład mocno zabałaganiony kod jest mniej wart od czystego, chociaż oba działają równie poprawnie. Powinieneś faktycznie używać cudzysłowów. Ale odkopywanie tematu tylko po to, żeby to komuś powiedzieć, chyba nie ma sensu...
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.