Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]strona dwu językowa...
Forum PHP.pl > Forum > Przedszkole
Majzel
Witam, szukałem, wiem, że dużo było na ten temat nawet jeden dość długi temat, ale wszędzie są pojęcia mi obce, tylko jakieś szkielety a nic konkretnego :/ nie wiem jak mam wykonać stronę w dwóch językach... pol i ang.

Mam taki kod strony index.php
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl">
  3. <head>
  4. <?php
  5. if (!empty($_GET['lang']) AND $_GET['lang'] != '') {
  6. $_COOKIE['lang'] = $_GET['lang'];
  7. }
  8.  
  9. if (empty($_COOKIE['lang']) OR $_COOKIE['lang'] == '') {
  10. if (preg_match('#([a-zA-Z]+),#', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $language)) {
  11. $_COOKIE['lang'] = $language['1'];
  12. } else {
  13. $_COOKIE['lang'] = 'pl';
  14. }
  15. }
  16.  
  17. setcookie('lang', $_COOKIE['lang'], time()+7*86400);
  18.  
  19.  
  20. ?>
  21.  <?php
  22.  switch($_GET['dzial'])
  23. {
  24. case "o_mnie": include('o_mnie_metatagi.php');
  25.  break;
  26. case "portfolio": include('portfolio_metatagi.php');
  27.  break;
  28. case "oferta": include('oferta_metatagi.php');
  29.  break;
  30. case "polec_mnie": include('polec_mnie_metatagi.php');
  31.  break;
  32. case "kontakt": include('kontakt_metatagi.php');
  33.  break;
  34. default:
  35.  include('index_metatagi.php');
  36.  }
  37.  ?>
  38. </head>
  39. <body>
  40.  <div id="top">
  41. <img src="images/layout_01.jpg" width="131" height="204" alt="" />
  42. <img src="images/layout_02.jpg" width="629" height="30" alt="" />
  43. <img src="images/layout_03.jpg" width="504" height="50" alt="" />
  44. <a href="index.php?lang=en"><img src="images/layout_04.jpg" width="32" height="29" alt="" /></a><!--ang-->
  45. <a href="index.php?lang=pl"><img src="images/layout_06.jpg" width="33" height="29" alt="" /></a><!--pl-->
  46.  </div>
  47. <div id="menu">
  48. <ul class="vert">
  49.  <li><a href="index.php?lang=<?php $_GET['lang']?>">Strona główna</a></li>
  50.  <li><a href="index.php?dzial=o_mnie" class="omnie">O mnie</a></li>
  51.  <li><a href="index.php?dzial=portfolio" class="portfolio">Portfolio</a></li>
  52.  <li><a href="index.php?dzial=oferta" class="oferta">Oferta</a></li>
  53.  <li><a href="index.php?dzial=polec_mnie" class="polec_mnie">Poleć mnie</a></li>
  54.  <li><a href="index.php?dzial=kontakt" class="kontakt">Kontakt</a></li>
  55. </ul>
  56. </div>
  57. <div id="middle">
  58. <?php
  59. switch($_GET['dzial'])
  60. {
  61. case "o_mnie":
  62.  include("o_mnie.php");
  63.  break;
  64. case "portfolio":
  65.  include("portfolio.php");
  66.  break;
  67. case "oferta";
  68.  include ('oferta.php');
  69.  break;
  70. case "polec_mnie";
  71.  include ('polec_mnie.php');
  72.  break;
  73. case "kontakt";
  74.  include ('kontakt.php');
  75.  break;
  76.  
  77.  default:
  78.  echo 'ŚRODEK ŚROdEK';
  79. }
  80.  
  81.  
  82.  ?>
  83. </div>


nie wiem jak mam to zrobić, mam taki plan, żeby zrobić ciasteczko i żeby np. gdy ktoś kliknie flagę angielską to ciasteczko miało by wartość en, a domyślnie miało by pl
nie wiem naprawdę, ehh... mógłby mi ktoś pomóc? albo zna jakiś tutorial/artykuł z bardzo prostym wyjaśnieniem? no bo ja nie wiem jak mam np/ połączyć te linki np. jak kliknę o mnie to w adresie mam ?dzial=o_omnie.php
bo korzystam z include a jak do tego dodac np : ?lang=en&&dzial=o_omnie.php

czarna magia normalnie, a myślałem, że już coś wiem o php, ale nie umiem jakby złapać tego rytmu w takich sprawach bo brak mi doświadczenia, dlatego bardzo bym prosił o pomoc ... już 3 dzień myślę jak to rozwiązać
pozdrawiam.
klocu
Ja osobiście wykorzystałbym sesję. Ale ciasteczko też jest skuteczne.
A jaki problem w tym żeby zapamiętać raz przekazaną wartość języka i potem już się do niej nie odwoływać? Zapisz Sobie a potem przecież robisz include czyli masz pełen dostęp do zmiennych którymi operujesz. Sprawdzasz wartość i wybierasz odpowiedni plik. Możesz też te pliki pogrupować w dwa katalogi zgodnie z językami. Zorganizujesz Sobie hierarchię plików i masz tym samym porządek na serwerze.
Chyba że za każdym razem wolisz przekazywać parametr języka, można lecz nie polecam.
Tak czy tak, z każdego wywołania musisz wyłuskać język i wczytać określony plik, a jak to rozwiążesz to już Twoja broszka - grunt w tym żebyś wiedział Sam co masz na myśli.
Majzel
dzięki już to chyba zrozumiałem,
ale mam problem bo jednak zdecydowałem się na sesje i teraz jak zrobić takie coś, żeby domyślnie był włonczony język polski, bo napisałem skrypt który działa ale tylko po kliknięciu na flage i przekazaniu wartosci, wtedy dziala, ale jak ktos wlaczy moją strone 1 raz to nie działa bo nie ma zapisanej sesji(poprostu jak zresetuje przeglądarke to też nie działa), jak mam to zrobić? to wygląda mniej więcej tak:
Kod
<?php
session_start();

$jezyk = $_GET["jezyk"];

if (isset($jezyk))
{
    $_SESSION["jezyk"] = $jezyk;
}


?>



potem jest w kodzie:

Kod
<a href="index.php?jezyk=en"><img src="images/layout_04.jpg" width="32" height="29" alt="" /></a><!--ang-->
  <a href="index.php?jezyk=pl"><img src="images/layout_06.jpg" width="33" height="29" alt="" /></a><!--pl-->


potem jeszcze menu na takiej samej zasadzie jak treść:
Kod
switch($_GET['dzial'])
{
case "o_mnie":
include("o_mnie_{$_SESSION['jezyk']}.php");
break;
case "portfolio":
include("portfolio_{$_SESSION['jezyk']}.php");
break;
case "oferta";
include ("oferta_{$_SESSION['jezyk']}.php");
break;
case "polec_mnie";
include ("polec_mnie_{$_SESSION['jezyk']}.php");
break;
case "kontakt";
include ("kontakt_{$_SESSION['jezyk']}.php");
break;

default:
include("srodek_{$_SESSION['jezyk']}.php");
}


i wszystko pieknie dziala ale tylko po naciśnieciu odnośnika z zapisaną sesją :/
nie wiem jak zrobić takie coś, żeby np. gdy nie istnieje sesja to żeby includował domyślnie język PL czyli np.
index_pl.php, o_mnie_pl.php ITD.

Jak to zrobić? próbowałem takie coś:
Kod
<?php
if (isset($_SESSION = "jezyk")) {
switch($_GET['dzial'])
{
case "o_mnie":
include("o_mnie_{$_SESSION['jezyk']}.php");
break;
case "portfolio":
include("portfolio_{$_SESSION['jezyk']}.php");
break;
case "oferta";
include ("oferta_{$_SESSION['jezyk']}.php");
break;
case "polec_mnie";
include ("polec_mnie_{$_SESSION['jezyk']}.php");
break;
case "kontakt";
include ("kontakt_{$_SESSION['jezyk']}.php");
break;

default:
include("srodek_{$_SESSION['jezyk']}.php");
}
}


ale wyskakuje błąd bo chyba tak nie można a szkoda :/

Pomoże ktoś? smile.gif
Shili
  1. <?php
  2. if (isset($jezyk))
  3. {
  4. $_SESSION["jezyk"] = $jezyk;
  5. }
  6. else {
  7. $_SESSION["jezyk"] = 'polski'; // czy jak tam sobie nazywasz język polski
  8. }
  9. ?>


I nie
Kod
{$_SESSION['jezyk']}

a
Kod
$_SESSION['jezyk']
Majzel
dzięki, a jeszcze jest taki problem, że jak zmienię {$_SESSION['jezyk']} na $_SESSION['jezyk'] czyli wtedy wygląda to tak:
include("srodek_$_SESSION['jezyk'].php");
to wyskakuje błąd:
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in

a jak jest pomiędzy {} to działa normalnie... nie rozumiem (?)
phpion
  1. <?php
  2. include("srodek_".$_SESSION['jezyk'].".php");
  3. ?>
Majzel
dzięki ale jeszcze raz będę musiał prosić o pomoc...
ten kod:
Kod
session_start();

$jezyk = $_GET["jezyk"];

if (isset($jezyk))
{
    $_SESSION["jezyk"] = $jezyk;
}
else {
    $_SESSION["jezyk"] = 'pl';
    }


nie działa tak jak powinien, po dopisaniu else domyślny język czyli PL działa ok, ale gdy kliknę odnośnik z jezyk=en to język działa tylko na index.php i po kliknięciu na inny odnośnik bądź przeładowaniu strony wszystko znowu robi się polskie (polski tekst)
czy ktoś wie dlaczego?? co zmienić w tej deklaracji sesji? czy gdzie?
Methestel
Jeśli chcesz wyciągnąć cokolwiek z sesji musisz wcześnij wywołać session_start();. Stawiam że w tych innych plikach tego nie ma.

No i radziłbym zmienić zamieszczony wcześniej fragment kodu na:

  1. <?php
  2. if (isset($_GET["jezyk"])) {
  3. $_SESSION["jezyk"] = $_GET["jezyk"];
  4. } else {
  5. if (!isset($_SESSION["jezyk"])) {
  6. $_SESSION["jezyk"] = 'pl';
  7. }
  8. }
  9. ?>
bim2
Zmień
  1. <?php
  2. $jezyk = $_GET["jezyk"];
  3.  
  4. if (isset($jezyk))
  5. {
  6. ?>

na
  1. <?php
  2. $jezyk = $_GET["jezyk"];
  3.  
  4. if (isset($jezyk) AND !empty($jezyk))
  5. {
  6. ?>
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.