Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> strona wielojęzyczna - jak ?
robos85
post
Post #1





Grupa: Zarejestrowani
Postów: 466
Pomógł: 11
Dołączył: 21.09.2006
Skąd: Szczecin

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


Otóż chcę zrobić stronkę w języku PL i niemieckim. I mam pytanie - jakby to zrobić, żeby były flagi i po kliknięciu na flagę przestawiał sie język.
Teksty na stronie będą modyfikowane - coś a'la mały CMS.

Dajcie jakieś sugestie jak się do tego zabrać.
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
Foxx
post
Post #2





Grupa: Zarejestrowani
Postów: 896
Pomógł: 76
Dołączył: 15.11.2003
Skąd: Sosnowiec/Kraków

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


Użyj sesji, na początku indexu zainicjuj zmienną sesyjną 'lang':

  1. <?php
  2. if(empty($_GET['lang'])){
  3.  $_SESSION['lang'] = 'pl';
  4. } else {
  5.  $_SESSION['lang'] = $_GET['lang'];
  6. }
  7. ?>


Na stronie umieść link, na którego kliknięcie będzie zmieniało wersję językową:
  1. if($_SESSION['lang'] == 'pl'){
  2.  ?><a href="?lang=de">de</a><?
  3. } else {
  4.  ?><a href="?lang=pl">pl</a><?
  5. }


Stwórz sobie pliki dla wersji językowych w postaci np:
  1. <?php
  2. $lang['okno']['pl'] = "Okno";
  3. $lang['okno']['de'] = "das Fenster";
  4. // itd
  5. ?>

A wszędzie na stronie zamiast pisać tekst, umieszczaj zmienną
  1. <?php
  2. $lang['slowo'][$_SESSION['lang']]
  3. ?>


Możesz też inaczej, np. mieć dwa pliki z dwoma wersjami słów:
  1. <?php
  2. $okno = "Okno";
  3. // a w pliku niemieckim:
  4. $okno = "das Fenster";
  5. ?>

a potem tylko includować właściwy plik na podstawie zmiennej $_SESSION['lang']
Go to the top of the page
+Quote Post
robos85
post
Post #3





Grupa: Zarejestrowani
Postów: 466
Pomógł: 11
Dołączył: 21.09.2006
Skąd: Szczecin

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


Dzięki, w sobotę coś zacznę już (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Dodam tylko, że oprócz stałych części strony jak menu czy stopka, będą też "dynamiczne" tzn. zmieniająca sie oferta firmy itp.
Więc będę jeszcze musiał jakoś to zrobić w bazie danych.

Jakieś sugestie?

Ten post edytował robos85 16.11.2007, 01:53:28
Go to the top of the page
+Quote Post
Foxx
post
Post #4





Grupa: Zarejestrowani
Postów: 896
Pomógł: 76
Dołączył: 15.11.2003
Skąd: Sosnowiec/Kraków

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


To bardzo ogólne o co pytasz więc ogólna odpowiedź jest taka:
Zaprojektuj odpowiednio bazę danych, zrób panel administracyjny, w którym pracownicy będą mogli sobie zmieniać ofertę np. w jakimś wyswigowym edytorze, a na stronie wyświetlaj ofertę pobraną z bazy...
Go to the top of the page
+Quote Post
robos85
post
Post #5





Grupa: Zarejestrowani
Postów: 466
Pomógł: 11
Dołączył: 21.09.2006
Skąd: Szczecin

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


Cytat(Foxx @ 16.11.2007, 03:36:53 ) *
Stwórz sobie pliki dla wersji językowych w postaci np:
  1. <?php
  2. $lang['okno']['pl'] = "Okno";
  3. $lang['okno']['de'] = "das Fenster";
  4. // itd
  5. ?>

A wszędzie na stronie zamiast pisać tekst, umieszczaj zmienną
  1. <?php
  2. $lang['slowo'][$_SESSION['lang']]
  3. ?>


a dokładniej z tymi plikami?
trzeba je jakoś includować albo określić?
np chciałbym dla każdej podstrony osobny plik w j. polskim i osobny plik w j. niemieckim.
Jak takie coś stworzyć?
Go to the top of the page
+Quote Post
Foxx
post
Post #6





Grupa: Zarejestrowani
Postów: 896
Pomógł: 76
Dołączył: 15.11.2003
Skąd: Sosnowiec/Kraków

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


Nie rób osobnych plików dla każdej podstrony.
Rozwiązania, które podałem zakładają jeden albo dwa pliki w pierwszej wersji oraz dwa pliki w drugiej wersji.
Załóżmy, że wybierzesz pierwszą wersję z jednym plikiem:
Zrób plik lang.php:
  1. <?php
  2. // lang.php:
  3. $lang['okno']['pl'] = "Okno";
  4. $lang['okno']['de'] = "das Fenster";
  5. $lang['powitanie']['pl'] = "Witaj";
  6. $lang['powitanie']['de'] = "Welkommen";
  7. // itd.
  8. ?>


Następnie musisz ten plik includować gdzieś na stronie, zanim cokolwiek wyświelisz z niego.
A więc plik index może wyglądać tak:
  1. <?php
  2. // index.php:
  3. include('lang.php');
  4.  
  5. echo $lang['powitanie'][$_SESSION['lang']]." świecie!";
  6. ?>

Oczywiście przykład bez sensu (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Zmienną lang ustawiasz tak jak opisałem w poprzednim poście.
Go to the top of the page
+Quote Post
robos85
post
Post #7





Grupa: Zarejestrowani
Postów: 466
Pomógł: 11
Dołączył: 21.09.2006
Skąd: Szczecin

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


mam taki błąd:
  1. <?php
  2. ?>
Fatal error: Cannot use string offset as an array in C:Program FilesVertrigoServwww2jlang.php on line 3
  1. <?php
  2. ?>


linia 3 to: $lang['powitanie']['pl'] = "Witaj";

błąd po kliknięciu w linka zmiany języka.

adres w przeglądarce: http://localhost/2j/?lang=de

Ten post edytował robos85 16.11.2007, 02:16:14
Go to the top of the page
+Quote Post
Foxx
post
Post #8





Grupa: Zarejestrowani
Postów: 896
Pomógł: 76
Dołączył: 15.11.2003
Skąd: Sosnowiec/Kraków

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


Pokaż swój kod.
Go to the top of the page
+Quote Post
robos85
post
Post #9





Grupa: Zarejestrowani
Postów: 466
Pomógł: 11
Dołączył: 21.09.2006
Skąd: Szczecin

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


index.php
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  5. <title>Untitled Document</title>
  6. </head>
  7.  
  8. <body>
  9.  
  10. <?php
  11. include ('lang.php');
  12.  
  13. if(empty($_GET['lang'])){
  14.  $_SESSION['lang'] = 'pl';
  15. } else {
  16.  $_SESSION['lang'] = $_GET['lang'];
  17. }
  18.  
  19. if($_SESSION['lang'] == 'pl'){
  20.  ?><a href="?lang=de">de</a><?
  21. } else {
  22.  ?><a href="?lang=pl">pl</a><?
  23. } 
  24.  
  25. print ("<br>");
  26. echo $lang['powitanie'][$_SESSION['lang']];
  27. ?>
  28.  
  29.  
  30.  
  31.  
  32. </body>
  33. </html>


lang.php
  1. <?php
  2. // lang.php:
  3. $lang['powitanie']['pl'] = "Witaj";
  4. $lang['powitanie']['de'] = "Welkommen";
  5. // itd.
  6. ?>
Go to the top of the page
+Quote Post
Foxx
post
Post #10





Grupa: Zarejestrowani
Postów: 896
Pomógł: 76
Dołączył: 15.11.2003
Skąd: Sosnowiec/Kraków

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


Rzeczywiście, to powoduje błąd... zmodyfikowalem trochę kod:
  1. <?
  2. // dane w 1 pliku językowym:
  3. $pl['witaj'] = 'witaj';
  4. $de['witaj'] = 'welkommen';
  5.  
  6. // sterowanie za pomocą zmiennej _GET['lang'] - to prowizorka, np. powróci do wersji pl gdy z urla zniknie lang
  7. if(empty($_GET['lang'])){
  8.  $_SESSION['lang'] = 'pl';
  9. } else {
  10.  $_SESSION['lang'] = $_GET['lang'];
  11. }
  12.  
  13. // link zmiany wersji:
  14. if($_SESSION['lang'] == 'pl'){
  15.  ?><a href="?lang=de">de</a><?
  16. } else {
  17.  ?><a href="?lang=pl">pl</a><?
  18. }
  19.  
  20. // słowo:
  21. echo ${$_SESSION['lang']}['witaj'];
  22. ?>


To tylko szkic, prosiłeś o sugestie, musisz to rozwinąć jeżeli chcesz zastosować na stronie, ale chyba jest to w miarę jasne...
Go to the top of the page
+Quote Post
robos85
post
Post #11





Grupa: Zarejestrowani
Postów: 466
Pomógł: 11
Dołączył: 21.09.2006
Skąd: Szczecin

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


dzięki, może ktoś podpowie mi jak zrobić, żeby zmienna sesyjna nie była widoczna w url (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

może połączyć ciasteczka z tym ?

Ten post edytował robos85 16.11.2007, 02:54:18
Go to the top of the page
+Quote Post
drPayton
post
Post #12





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

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


Brak identyfikatora sesji w URI:
  1. <?php
  2. ini_set('session.use_trans_sid', 0);
  3. ?>


2. Sesja na cookies:
  1. <?php
  2. ini_set('session.use_cookies', 1);
  3. ?>


Ten post edytował drPayton 16.11.2007, 04:32:43
Go to the top of the page
+Quote Post
NoiseMc
post
Post #13





Grupa: Zarejestrowani
Postów: 398
Pomógł: 10
Dołączył: 24.11.2004
Skąd: Łódź

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


Zmienna jezykowa w sesji? A jak wyslesz komus linka do niemieckiej wersju artykulu? Zakladajac ze uzytkownik nie wie ze do url nalezy dokleic ?lang=de
... a jak Google znajdzie wszystkie niemieckojezyczne artykuly?

Takie rzeczy powinno sie przekazywac w url za kazdym razem.

Ten post edytował NoiseMc 16.11.2007, 05:06:25
Go to the top of the page
+Quote Post
FliSs_tCv
post
Post #14





Grupa: Zarejestrowani
Postów: 198
Pomógł: 3
Dołączył: 27.02.2007
Skąd: Tczew

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


NoiseMc mógłbyś wtedy pomoc jak wykonać to przekazanie w url ? napewno kolega który zakładał posta też jest ciekaw jak to wygląda (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) pozdrawiam
Go to the top of the page
+Quote Post
robos85
post
Post #15





Grupa: Zarejestrowani
Postów: 466
Pomógł: 11
Dołączył: 21.09.2006
Skąd: Szczecin

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


Cytat(drPayton @ 16.11.2007, 06:31:27 ) *
Brak identyfikatora sesji w URI:
  1. <?php
  2. ini_set('session.use_trans_sid', 0);
  3. ?>


2. Sesja na cookies:
  1. <?php
  2. ini_set('session.use_cookies', 1);
  3. ?>


mógłbyś mi to jeszcze ciut naświetlić? Znaczy - ciut więcej wytłumaczyć czemu ma to służyć.

OT...... NoiseMc - twoja lokacja: Boston, MA kojarzy mi się z tą reklamą gdzie Kolonko reklamuje ubezpieczycieli samochodów (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)

to przekazanie w url działa z tego skryptu wyżej u mnie normalnie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował robos85 16.11.2007, 09:02:56
Go to the top of the page
+Quote Post
NoiseMc
post
Post #16





Grupa: Zarejestrowani
Postów: 398
Pomógł: 10
Dołączył: 24.11.2004
Skąd: Łódź

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


Cytat(FliSs_tCv @ 16.11.2007, 08:45:42 ) *
NoiseMc mógłbyś wtedy pomoc jak wykonać to przekazanie w url ? napewno kolega który zakładał posta też jest ciekaw jak to wygląda (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Na przyklad http://www.example.com/showarticles.php?lang=de a w kodzie odpada wtedy tylko ustawianie zmiennych sesyjnych.

Co do Maxa Kolonko nie widzialem tej reklamy ale slyszalem ze reklamowal slynna amerykanska firme ubezpieczeniowa ktorej nikt w usa nie zna (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
Sh4dow
post
Post #17





Grupa: Zarejestrowani
Postów: 569
Pomógł: 0
Dołączył: 17.08.2003
Skąd: Dąbrowa Górnicza

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


Po pierwsze w sesji mozna index jezyka trzymac, ale co do tablicy z tlumaczeniami to jest troche malo optymalne przy wiekszych stronach, a po co uczyc sie nie do konca wydajnych metod. Proponuje poczytac o gettext, istnieje rozszerzenie php do tego, Chyba Bastion pisal klase Babel do obslugi tego. Jesli chodzi o szablony to na stronie smarty mozna było znalesc plugin nazwany smarty_block_t obslugujacy gettexta. To tak jako alternatywa dla tych tablic z tlumaczeniami, No bo jesli bedziesz mial 2 jezyki to jeszcze przejdzie ale przy 6 jezykach wielu stronach standardowe 8 MB dla php moze okazac sie za małe.
Go to the top of the page
+Quote Post
domis86
post
Post #18





Grupa: Zarejestrowani
Postów: 255
Pomógł: 5
Dołączył: 20.03.2007
Skąd: Kraków

Ostrzeżenie: (30%)
XX---


zamiast
  1. <?php
  2. $lang['slowo'][$_SESSION['lang']];
  3. ?>

lepiej zrobic sobie funkcje
  1. <?php
  2. function tr($text)
  3. {
  4. return $lang[$text][$_SESSION['lang']];
  5. }
  6. ?>



I co będzie jak ktos wpisze taki url: "..../?lang=dupa" (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
robos85
post
Post #19





Grupa: Zarejestrowani
Postów: 466
Pomógł: 11
Dołączył: 21.09.2006
Skąd: Szczecin

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


zacząłem ten temat właśnie po to, aby poznać jakąś optymalną metosę na zrobienie tego (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
więc co byście polecili w końcu (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

co do przekazywania w url - jak zrobić, aby działało to na podobnej zasadzie, ale nie było widoczne w url to lang .....

Ten post edytował robos85 16.11.2007, 20:42:26
Go to the top of the page
+Quote Post
franki01
post
Post #20





Grupa: Zarejestrowani
Postów: 508
Pomógł: 75
Dołączył: 2.11.2005
Skąd: Bydgoszcz

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


Ja robie katalog langs/ i tam trzymam pliki z jezykami: pl.lang.php, en.lang.php, de.lang.php itd. Potem przy pomocy wyzej wymienionych sesji includuje odpowiedni plik. Zawartosci pliku mozna tworzyc na rozne sposoby:

  1. <?php
  2. define('L_TYTUL', 'Tytuł'); // dla np. angielskiego define('L_TYTUL', 'Title');
  3. define('L_KOMPUTER', 'Komputer');
  4. // itd.
  5. ?>


albo

  1. <?php
  2. $lang_tytul = 'Tytuł';
  3. $lang_komputer = 'Komputer';
  4. ?>


Dzieki takiemu czemus nie trzeba bawic sie w budowanie dlugich zmiennych jak to bylo wyzej napisane..
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.10.2025 - 02:32