Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Zmiana języków
dk1342
post 7.10.2008, 18:37:08
Post #1





Grupa: Zarejestrowani
Postów: 275
Pomógł: 9
Dołączył: 24.07.2008
Skąd: Racibórz

Ostrzeżenie: (10%)
X----


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

Ten post edytował dk1342 7.10.2008, 18:37:56


--------------------
Firefox - The Best,
Internet Exokier - shit

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
drPayton
post 7.10.2008, 20:24:56
Post #2





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


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)

Ten post edytował drPayton 7.10.2008, 20:26:56
Go to the top of the page
+Quote Post
blooregard
post 7.10.2008, 20:31:50
Post #3


Newsman


Grupa: Moderatorzy
Postów: 2 033
Pomógł: 290
Dołączył: 21.12.2007
Skąd: Łódź




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.


--------------------
Life's simple... You make choices and don't look back...
Go to the top of the page
+Quote Post
drPayton
post 7.10.2008, 20:35:55
Post #4





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


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...

Ten post edytował drPayton 7.10.2008, 20:38:00
Go to the top of the page
+Quote Post
blooregard
post 7.10.2008, 20:39:15
Post #5


Newsman


Grupa: Moderatorzy
Postów: 2 033
Pomógł: 290
Dołączył: 21.12.2007
Skąd: Łódź




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).

Ten post edytował blooregard 7.10.2008, 20:41:46


--------------------
Life's simple... You make choices and don't look back...
Go to the top of the page
+Quote Post
dk1342
post 8.10.2008, 13:28:28
Post #6





Grupa: Zarejestrowani
Postów: 275
Pomógł: 9
Dołączył: 24.07.2008
Skąd: Racibórz

Ostrzeżenie: (10%)
X----


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...


--------------------
Firefox - The Best,
Internet Exokier - shit

Go to the top of the page
+Quote Post
drPayton
post 8.10.2008, 13:56:45
Post #7





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


  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

Ten post edytował drPayton 8.10.2008, 13:57:45
Go to the top of the page
+Quote Post
dk1342
post 8.10.2008, 14:05:12
Post #8





Grupa: Zarejestrowani
Postów: 275
Pomógł: 9
Dołączył: 24.07.2008
Skąd: Racibórz

Ostrzeżenie: (10%)
X----


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


--------------------
Firefox - The Best,
Internet Exokier - shit

Go to the top of the page
+Quote Post
drPayton
post 8.10.2008, 14:12:10
Post #9





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


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. ?>
Go to the top of the page
+Quote Post
thm
post 8.10.2008, 14:12:29
Post #10





Grupa: Zarejestrowani
Postów: 52
Pomógł: 10
Dołączył: 6.10.2008
Skąd: Lublin

Ostrzeżenie: (0%)
-----


wszystko ok tylko
Kod
in_array($_SESSION['lang'], $avaiable_langs)
Go to the top of the page
+Quote Post
drPayton
post 8.10.2008, 14:13:46
Post #11





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


To powodowało pętlę, ale i inne bzdury tam naskrobałem winksmiley.jpg Wyżej poprawiona wersja
Go to the top of the page
+Quote Post
dk1342
post 8.10.2008, 14:28:33
Post #12





Grupa: Zarejestrowani
Postów: 275
Pomógł: 9
Dołączył: 24.07.2008
Skąd: Racibórz

Ostrzeżenie: (10%)
X----


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..


--------------------
Firefox - The Best,
Internet Exokier - shit

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 13:32