Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pomocy - strona wielojezykowa PHP/MySQL
Forum PHP.pl > Forum > Przedszkole
Guest
Witam.
Jestem "BARDZO POCZATKUJACY" jesli chodzi o php. W ramach nauki postanowilem przerobic strone m.in. na wielojezykowa. Podczas przerabiania natrafilem na taki problem. Opis kategorii musze przechowywac w tablicy bazy danych. Na poczatku tablica byla taka:

re2_categories
CategoryID
CategoryName

Ja przerobilem ja na taka:

re2_categories
CategoryID
CategoryNamepl
CategoryNameen
CategoryNamees

Kod tworzacy menu poczatkowo wygladal tak:
Kod
$qi = "select * from re2_categories order by CategoryID";
$ri = mysql_query($qi) or die(mysql_error());

$Account = "<table width=200>\n";

if(mysql_num_rows($ri) > '0')
{
    while($ai = mysql_fetch_array($ri))
    {
  $Categories .= "<tr>\n\t<td bgcolor=#ECECEC><a class=BlackLinkB href=\"search.php?c=$ai[CategoryID]\">[COLOR=Red]$ai[CategoryName]</[/COLOR]a></td>\n</tr>\n";


Informacje na temat jezyka sa przechowane w zmiennej $lang ktora odpowiednio ma wartosci: pl, en i es. "Poprawilem" skrypt i teraz wyglada tak:
Kod
$qi = "select * from re2_categories order by CategoryID";
$ri = mysql_query($qi) or die(mysql_error());

$Account = "<table width=200>\n";

[COLOR=Red]//Multilanguage category description
if($lang ='pl') {
    $langcat = $ai[CategoryNamepl]; }
elseif ($lang ='en') {
    $langcat = $ai[CategoryNameen]; }
elseif ($lang ='es') {
    $langcat = $ai[CategoryNamees]; }[/COLOR]

if(mysql_num_rows($ri) > '0')
{
    while($ai = mysql_fetch_array($ri))
    {
  $Categories .= "<tr>\n\t<td bgcolor=#ECECEC><a class=BlackLinkB href=\"search.php?c=$ai[CategoryID]\">[COLOR=Red]$langcat</[/COLOR]a></td>\n</tr>\n";

... i bydle nie dziala :-( . Jesli ktos wie co zrobilem zle lub wie jak to rozwiazac w inny sposob to bardzo prosze o pomoc.
Dziekuje

Roovio
roovio
Przepraszam za zamieszanie ale do cytowanego skryptu wkradly sie tagi [COLOR]

Jeszcze raz zamieszczam kody:

  1. <?php
  2.  
  3. $qi = &#092;"select * from re2_categories order by CategoryID\";
  4. $ri = mysql_query($qi) or die(mysql_error());
  5.  
  6. $Account = &#092;"<table width=200>n\";
  7.  
  8. if(mysql_num_rows($ri) > '0')
  9. {
  10. while($ai = mysql_fetch_array($ri))
  11. {
  12. $Categories .= &#092;"<tr>nt<td bgcolor=#ECECEC><a class=BlackLinkB href=\"search.php?c=$ai[CategoryID]\">$ai[CategoryName]</a></td>n</tr>n\";
  13.  
  14. ?>


i "popraviony"

  1. <?php
  2.  
  3. $qi = &#092;"select * from re2_categories order by CategoryID\";
  4. $ri = mysql_query($qi) or die(mysql_error());
  5.  
  6. $Account = &#092;"<table width=200>n\";
  7.  
  8. //Multilanguage category description
  9. if($lang ='pl') {
  10. $langcat = $ai[CategoryNamepl]; }
  11. elseif ($lang ='en') {
  12. $langcat = $ai[CategoryNameen]; }
  13. elseif ($lang ='es') {
  14. $langcat = $ai[CategoryNamees]; }
  15.  
  16. if(mysql_num_rows($ri) > '0')
  17. {
  18. while($ai = mysql_fetch_array($ri))
  19. {
  20. $Categories .= &#092;"<tr>nt<td bgcolor=#ECECEC><a class=BlackLinkB href=\"search.php?c=$ai[CategoryID]\">$langcat</a></td>n</tr>n\";
  21.  
  22. ?>


Dziekuje

---
do umieszczania kodu php służy tag [php] exclamation.gif

alek
Kshyhoo
Nie pisz posta pod postem, tylko edytuj poprzedni.
Nie lepiej (prościej) przekazywać langi zmienną tablicową?
bigZbig
  1. <?php
  2.  
  3. $qi = &#092;"select * from re2_categories order by CategoryID\";
  4. $ri = mysql_query($qi) or die(mysql_error());
  5.  
  6. $Account = &#092;"<table width=200>n\";
  7.  
  8. if(mysql_num_rows($ri) > '0')
  9. {
  10. while($ai = mysql_fetch_array($ri))
  11. {
  12. switch ($lang) {
  13. case pl:
  14. $langcat=$ai[CategoryNamepl];
  15. break;
  16. case en:
  17. $langcat=$ai[CategoryNameen];
  18. break;
  19. case es:
  20. $langcat=$ai[CategoryNameesl];
  21. break;
  22. default:
  23. $langcat=$ai[CategoryNamepl];
  24. break;
  25. }
  26. $Categories .= &#092;"<tr>nt<td bgcolor=#ECECEC>\";
  27. $Categories .= &#092;"<a href=\"search.php?c=$ai[CategoryID]\" class=\"BlackLinkB\">$langcat</a>\"
  28. $Categories .= &#092;"</td>n</tr>n\";
  29. }
  30. }
  31.  
  32. ?>
Ociu
IMO nie ma co się bawić w trzymanie tłumaczeń w bazie danych.

Ja robie podobnie jak jest w phpBB.

pozdrawiam
bigZbig
phpBB trzyma w tablicy teksty interfejsu, a tresc strony pozostaje w orginale. Jesli twoim celem jest wyswietlanie newsow w trzech wersjach jezykowych to rozwiazanie zastosowane w phpBB na nic sie nie zda.

W takim wypadku jestes zmuszony albo utworzyc trzy tabele w bazie np. newsy_pl, newsy_en, newsy_es, co uwazam za lepsze rozwiazanie, albo jak to widac wyzej potroic wszystkie pola tekstowe w danej tabeli.
Ociu
No tak, tylko czy za każdym razem chciało by Ci się pisać newsy w 3-ech językach ? Lepiej napisać w jednym (np. w angielskim).
hombrerro
Użyłeś błędnego operatora w IF wiec nie bedzie działać:

  1. <?php
  2.  
  3. ...
  4.  
  5. if($lang ='pl') {
  6.  
  7. ..
  8.  
  9. ?>


$lang == 'pl'
Roovio
To prawdopodobnie racja (jak zdobede troche doswiadczenia to bede pewny :-), bo jak napisalem jestem poczatkujacy). Jedna jesli chodzi o (w przypadaku mojej strony) kategorie i podkategorie, wydaje mi sie to wygodniejsze, bo wystarczy ze dodajac (pod)kategorie podam jej nazwe w 3 jezykach poprzez formularz i wtedy nie musze jeszcze dodatkowo wpisywac tej nazwy do description w kazdym z plikow jezykowych. Pozostale tlumaczenia trzymam w takich wlasnie plikach.

bigZbig bardzo dziekuje za rozwiazanie problemu.
Z jakiegos powodu nazwy kategorii zmienialy sie na odpowiedni jezyk dpoiero po 2 kliknieciu na ikone z linkiem index.php?lang=xx dodalem jeszcze cos takiego przed twoim kodem

  1. <?php
  2.  
  3. if ( $_GET['lang'] == 'pl' || $_GET['lang'] == 'en' || $_GET['lang'] == 'es' )
  4. {
  5. $lang = $_GET['lang'];
  6. }
  7.  
  8. ?>

i teraz dziala super. Jeszcze raz wielkie dzieki

Roovio
mhs
Cytat(bigZbig @ 2005-04-07 15:24:27)
phpBB trzyma w tablicy teksty interfejsu, a tresc strony pozostaje w orginale. Jesli twoim celem jest wyswietlanie newsow w trzech wersjach jezykowych to rozwiazanie zastosowane w phpBB na nic sie nie zda.

W takim wypadku jestes zmuszony albo utworzyc trzy tabele w bazie np. newsy_pl, newsy_en, newsy_es, co uwazam za lepsze rozwiazanie, albo jak to widac wyzej potroic wszystkie pola tekstowe w danej tabeli.

a co jak po roku bedziesz chcial dodac kolejny jezyk? bedziesz dodawal kolejna tabele lub kolumny?

wg. mnie lepszym rozwiazaniem bedzie zbudowanie dwoch tabel:

jezyki
jezyk_id
jezyk_nazwa
(...)


oraz:


wiadomosci
wiadomosc_id
jezyk_id
wiadomosc_tytul
(...)
bigZbig
Zamiast
  1. <?php
  2. if ( $_GET['lang'] == 'pl' || $_GET['lang'] == 'en' || $_GET['lang'] == 'es' )
  3. {
  4. $lang = $_GET['lang'];
  5. }
  6. ?>


Daj poprostu.

  1. <?php
  2. if( empty($_GET['lang']) ) $lang = 'pl';
  3. else $lang = $_GET['lang'];
  4. ?>


Albo bardziej elegancko zapisane ale rownoznaczne powyzszemu.

  1. <?php
  2.  $lang = ( empty($_GET['lang']) ) ? 'pl' : $_GET['lang'];
  3. ?>


Chodzi przeciez o to aby sprawdzic czy zmienna $_GET['lang'] ma wartosc ustalona, a jak nie to nalezy zmiennej $lang nadac jakas wartosc domyslna.
roovio
Zbig jestes naprawde BIG - Dzieki.

Mam jeszcze jedno pytanie. W tej chwili aby zmienic jezyk mam na gorze strony obrazek flagi (ktory wyglada inczej ponajechaniu myszka na niego) i link do index.php z okresleniem wartosci zmiennej $lang. W zwiazku z tym przy kazdej zmianie jezyka strona wraca do index-u. Czy jest mozliwe zrobienie tak zeby przycisk wysylal wartosc $lang od index.php, ale zostawal na aktualnej stronie (nie wracal do index)?
Tak wyglada html jednego z przyciskow:
  1. <td width="50" height="20">
  2. <div align="center">
  3. <a onmouseover="changeImages( /*CMP*/'pl_up',/*URL*/'../images/pl_dn.gif');return true" onmouseout="changeImages( /*CMP*/'pl_up',/*URL*/'../images/pl_up.gif');return true" href="index.php?lang=pl"><img src="../images/pl_up.gif" alt="" name="pl_up" height="20" width="30"></a></div>
  4. </td>


Dzieki
bigZbig
Zamiast: index.php?lang=pl

  1. <?php
  2. $link='http://'.$_SERVER['HTTP_HOST'].''.$_SERVER['PHP_SELF'].'?lang=pl';
  3. ?>
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.