Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [wzorzec] Serwis wielojęzyczny
Forum PHP.pl > Forum > Gotowe rozwiązania > Szukam
kamileus
Witam.
Poszukuję jakiegoś dobrego, elastycznego i sprawdzonego wzorca do serwisu wielojęzycznego.
Założenia:
1. Szablon serwisu powinien być wspólny dla wszystkich języków, zmienia się tylko treść np. tytuł, nazwy w menu itp.
2. Obsługa defaultowego języka, tzn. nie wszystkie treści muszą mieć swoje odpowiedniki w innym języku (tzn. jakiś artykuł może być napisany tylko w j. polskim, inny tylko w angielskim, a jeszcze inny tylko w niemieckim). Może też nastąpić sytuacja, że użytkownik wybrał domyślnie niemiecki (elementy menu są w tym języku, a sam artykuł jest np. po angielsku).

Będę wdzięczny za wszelkie przykłady kodu, tutoriale lub cokolwiek związanego z tematem postu.
in5ane
Kolega franki01 opisał jak to zrobić w innym topicu...

Proszę, patrz:

Cytat
Troche tutaj inny schemat katalogow bedzie niz w poprzednim poscie...

Robisz katalog langs/ w nim robisz katalogi z jezykami, np pl/, en/ itd. W tych katalogach robisz plik lang.php. Strukura katalogow ma wygladac tak:

Kod
katalog ze strona
--katalog1
--katalog2
--langs
----en
------lang.php
------obrazek.gif <- obrazek z napisem angielskim
----pl
------lang.php
------obrazek.gif <- obrazek z napisem polskim
--index.php
--style.css



Najwazniejsze jest drzewo langs...
W kazdym pliku z jezykami bedzie lista tlumaczen:

  1. <?php
  2. // tresc langs/pl/lang.php
  3. define('L_TEXT', 'Treść');
  4. define('L_QANSW', 'Szybka odpowiedź');
  5. define('L_IMAGE', 'Obrazek');
  6. // itd...
  7.  
  8.  
  9. // tresc langs/en/lang.php
  10. define('L_TEXT', 'Text');
  11. define('L_QANSW', 'Quick answer');
  12. define('L_IMAGE', 'Image');
  13. ?>



Tak ma wygladac schemat katalogow. Chyba zrozumiałe...

Teraz skrypt sterujący językami:

  1. <?php
  2.  
  3. if($_SESSION['LANG'] == '') $_SESSION['LANG'] = 'pl'; // deklaracja jezyka dla pierwszej wizyty
  4.  
  5. if($_GET['lang'] != '') {
  6. preg_match("([a-zA-Z0-9-_]*)", $_GET['lang'], $tmp); // filtracja wprowadzonego jezyka zeby nie bylo czegos w stylu ../../../../../plik.php
  7. if(file_exists('langs/'.$tmp[1].'/lang.php')) $_SESSION['LANG'] = $tmp[1]; // sprawdzenie czy plik z jezykiem istnieje i przypisanie
  8. }
  9.  
  10. define('LANG_DIR', 'langs/'.$_SESSION['LANG'].'/'); // zdefiniowanie katalogu z jezykiem, zeby latwo zmieniac jezyki obrazkow
  11. require_once(LANG_DIR.'lang.php'); // incudowanie pliku z jezykiem
  12. ?>



I potem mozna zeby uzyc jakiegos wyrazenia w danym jezyku, wywolujemy okreslona stałą, np:

  1. <?php
  2. echo L_TEXT.' - '.L_QANSW; // pojawi sie tekst w okreslonym jezyku z zaincudowanego pliku
  3. echo '<img src="'.LANG_DIR.'obrazek.gif" alt="'.L_IMAGE.'" />'; // tekst alternatywny jest okreslony w pliku z jezykiem, a obrazek.gif lezy w odpo
    wiednim katalogu z jezykiem (zobacz strukture katalgow wyzej)
  4. ?>



No i to by bylo na tyle... Chyba najlepszy sposob. Jak jest niezrozumiale to najpierw przyczytac trzy razy a potem pisac biggrin.gif

EDIT:
Lepiej operowac na stalych niz na zmiennych ze wzgledow za ich zasieg w funkcjach i klasach
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-2024 Invision Power Services, Inc.