Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Zmiana języków
Forum PHP.pl > Forum > Przedszkole
dk1342
Witam mam pytanie jak zrobić taki wybór języka jak na tej stronie:

http://og-servers.net/index.html

czyli są 3 flagi i jak się klikne na np. angielska to jest taki link:

http://og-servers.net/index.php?modul=language&lang=en

na chwile a potem znów zmienia się na index.php i jest po angielsku

próbowalem robić tak:


<?php
if ($_GET[lang] == "eng") {
echo " tu tekst języka angielskiego ";
}
else if ($_GET[lang] == "de") {
echo "tu niemieckiego";
}
else {
echo "tu po polsku";
}
?>

ale ten sposób jakoś mi się nie spodobał bo chce miec tak jak wyzej napisalem ze jak się kliknie w np.:

<a href="http://www.costam.pl/index.php?modul=language&lang=en"><img src="flagade.jpg"></a>

to wybierze mi język i odswierzy się do adresu index.php ale juz z tym wybranym językiem

nie wiem czy dobrze opisałem bo nie wiem jak to opisać

dodam że jestem troche zielony a jest mi to potrzebne
drPayton
Sposobów jest sporo, dla przykładu:

Masz wersje językowe artykułów (w bazie, pliku - bez znaczenia) z określeniem języka w którym zostały napisane. Klikając w link wywołujesz skrypt, który zapisuje w sesji jaki język został wybrany (i przekierowuje z powrotem na poprzednią stronę) a skrypt odpowiedzialny za pobieranie danych do wyświetlenia pobiera te, których żąda użyszkodnik (dany artykuł) oraz wersję językową zapamiętaną w sesji. Jednocześnie trzeba okreslić który język jest domyślnym, używanym gdy stosowna zmienna sesyjna jest pusta...


Kod
Oferta/Product1 - w wersji polskiej
Oferta/Product1 - w wersji angielskiej

etc. Mają wspólny identyfikator zawartości, różny identyfikator języka


Przykładowa realizacja w bazie danych:
Kod
Tabela Artykuły
--------------------

id [pk - czyli unikalny]
nazwa [jakies tam pola zawartosci]
tresc [jakies tam pola zawartosci 2]
jezyk_id [fk z tabeli jezyki]
tresc_id [powtarzalny w ramach zawartosci, np 1 dla danej strony w PL i 1 dla danej strony w EN, 2 dla drugiej strony w PL i 2 dla drugiej strony w EN etc]


Tabela Języki
----------------------
id
jezyk


Gdy decydujesz (request) jaki artykuł (=stronę) wyświetlić bierzesz pod uwagę nie unikalne id z tabeli artykułów (PK) tylko tresc_id oraz jezyk_id
Zamiast osobnej tabeli języków i stosowania klucza obcego, w prostych serwisach można wstawić w tabeli artykuły "identyfikator" tekstowy (np 'pl', 'en' etc)
blooregard
Przede wszystkim-nie ładuj od razu treści we wszystkich językach.
Przygotuj sobie pliki dla każdego języka w takiej np. postaci:

Kod
pl_lang.php:

<?php
//polski
define(TYTUL , 'Moja strona');
define(WSTEP, 'Czesc, witam na moje stronie bla bla bla...');
...
?>

en_lang.php:

<?php
//angielski
define(TYTUL , 'My homepage');
define(WSTEP, 'Hello everybody and welcome on my homepage blah blah blah...');
...
?>


i tak dla każdego języka.

Nastepnie, tam, gdzie masz menu i klikasz we flagi, robisz sobie odnosniki na tych flagach:
- na polskiej: index.php?lang=pl
- na angielskiej: index.php?lang=en

itd.

Nastepnie, w index.php, robisz sobie tak:

Kod
<?php
$avaiable_langs = array('pl','en');    //tabela z dostepnymi jezykami
$lang = substr($_GET['lang'],0,2)    //wycinasz dwie pierwsze literki ze zmiennej lang, to na wypadek, gdyby ktos probowal Ci cos tam przeslac getem
if (in_array($avaiable_langs, $lang) {      // w tym warunku inkludujesz wybrany jezyk
   include_once($lang.'_lang.php');
} else {
  include_once('pl_lang.php');
}

// dalsza czesc strony:
<title><?php echo TITLE; ?></title>

<body>
<?php echo WSTEP; ?>

/// ... cala reszta tresci ....
</body>


No i tyle.
drPayton
Sposób podany przez @blooregard stosuje się do wersji językowych interfejsu graficznego, to co ja napisałem - do zawartości, w praktyce potrzebne Ci i jedno i drugie smile.gif
Chyba, że serwis jest malutki, wówczas faktycznie pliki językowe wystarczają...

Tak czy siak @blooregard zapomniał o zapisaniu wyboru do sesji. Jeśli tego nie zrobisz będziesz musiał zmienną określającą język cały czas trzymać w adresie...
blooregard
Cytat
Sposób podany przez @blooregard stosuje się do wersji językowych interfejsu graficznego, to co ja napisałem - do zawartości, w praktyce potrzebne Ci i jedno i drugie
Chyba, że serwis jest malutki, wówczas faktycznie pliki językowe wystarczają...


Racja. Treści generowane dynamicznie też pobieram z bazy. Sposób opisany przeze mnie odnosi się do treści statycznych. Tak jest reaizowany m.in. w osCommerce.

Cytat
Tak czy siak @blooregard zapomniał o zapisaniu wyboru do sesji. Jeśli tego nie zrobisz będziesz musiał zmienną określającą język cały czas trzymać w adresie...


Druga racja. $lang trzymaj w sesji i tylko sobie na początku index.php sprawdzaj, czy czasem nie przyjdzie z GET jakis inny (może sie przecież zdarzyć że ktoś zmieni wersję językową serwisu w trakcie odwiedzin).
dk1342
sposób od blooregard mi sie podoba bo to b. malutka strona

sry ja troche zielony sad.gif ale mogliyście podać całośc z tym wyborem do sesji... questionmark.gif

cytat:
Tak czy siak @blooregard zapomniał o zapisaniu wyboru do sesji. Jeśli tego nie zrobisz będziesz musiał zmienną określającą język cały czas trzymać w adresie...
drPayton
  1. <?php
  2. $avaiable_langs = array('pl','en');    //tabela z dostepnymi jezykami
  3. $lang = substr($_GET['lang'],0,2)    //wycinasz dwie pierwsze literki ze zmiennej lang, to na wypadek, gdyby ktos probowal Ci cos tam przeslac getem
  4. if (in_array($avaiable_langs, $lang) {      // w tym warunku inkludujesz wybrany jezyk
  5.   include_once($lang.'_lang.php');
  6. } else {
  7.  include_once('pl_lang.php');
  8. ?>


Z sesją:

  1. <?php
  2. session_start(); // Startujesz sesję, na początku pliku, zanim coś wyślesz do przeglądarki
  3. $avaiable_langs = array('pl','en');    //tabela z dostepnymi jezykami
  4. // Najpierw sprawdzasz, czy istnieje zmienna określająca język w sesji
  5. if(isset($_SESSION['lang']) AND in_array($avaiable_langs, $_SESSION['lang'])) {
  6.    include_once($lang.'_lang.php');
  7. }
  8. // Jeśli nei istnieje, to może akurat ktoś w link (flagę) kliknął - ustawiamy więc język w sesji i przekierowujemy na stronę główną
  9. else if(isset($_GET['lang']) AND  in_array($avaiable_langs, $_GET['lang'])) {
  10.    $_SESSION['lang'] = $_GET['lang'];
  11.    header("Location: index.php");
  12. }
  13. // A jeśli sesja pusta i w GETie nic nie ma ładujemy do sesji domyślny język i przekierowujemy na stronę główną
  14. else {
  15.    $_SESSION['lang'] = 'pl'; // Ustawiasz domyślny język systemu
  16.    header("Location: index.php");
  17. }
  18. ?>


Nie najpiękniejsza, ale prosta i czytelna metoda winksmiley.jpg
dk1342
mam taki komunikat:

Pętla przekierowań













Firefox wykrył, że serwer przekierowuje żądanie tego zasobu w sposób uniemożliwiający jego ukończenie.







Przeglądarka przerwała próby pobrania żądanego elementu. Witryna przekierowuje żądanie w sposób, który uniemożliwia jego dokończenie.

* Czy ciasteczka zostały wyłączone lub zablokowane dla tej witryny?
* UWAGA: Jeśli włączenie obsługi ciasteczek dla tej witryny nie rozwiązuje problemu, najprawdopodobniej jest to problem w konfiguracji serwera, a nie oprogramowania na Twoim komputerze


sad.gif
drPayton
Trochę bzdury napisałem, sorry winksmiley.jpg

  1. <?php
  2. session_start(); // Startujesz sesję, na początku pliku, zanim coś wyślesz do przeglądarki
  3. $avaiable_langs = array('pl','en');    //tabela z dostepnymi jezykami
  4.  
  5. // Jeśli ktoś w link (flagę) kliknął - ustawiamy język w sesji i przekierowujemy na stronę główną
  6. if(isset($_GET['lang']) AND  in_array($_GET['lang'], $avaiable_langs)) {
  7.   $_SESSION['lang'] = $_GET['lang'];
  8.   header("Location: index.php");
  9. }
  10.  
  11. // Sprawdzamy, czy istnieje zmienna określająca język w sesji
  12. if(isset($_SESSION['lang']) AND in_array($_SESSION['lang'], $avaiable_langs)) {
  13.   include_once($lang.'_lang.php');
  14. }
  15. // A jeśli sesja pusta i w GETie nic nie ma ładujemy do sesji domyślny język i przekierowujemy na stronę główną
  16. else {
  17.   $_SESSION['lang'] = 'pl'; // Ustawiasz domyślny język systemu
  18.   include_once('pl_lang.php');
  19. }
  20. ?>
thm
wszystko ok tylko
Kod
in_array($_SESSION['lang'], $avaiable_langs)
drPayton
To powodowało pętlę, ale i inne bzdury tam naskrobałem winksmiley.jpg Wyżej poprawiona wersja
dk1342
teraz nie ma zadnego erroru ani komuniktu ale nie wyswietla się tekst sad.gif jest pusta biała strona...

sry juz dziala

wszystko ładnie działa dziękuje bardzo i dam wam piwka lub + jak można..
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.