Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jaka metoda dla wielu języków ?
Forum PHP.pl > Forum > PHP
jerrys
Witam
Mam pytanie jakiej metody urzyć na stronie w celu umożliwienia przeglądania jej w wielu językach i która metoda jest najlepsza.
Znam takie metody:
1: napisy przechowywane są w tablicy
2: napisy przechowywane są w bazie

Może znacie jescze inne??
Która metoda jest najlepsza??
Dzieki za każdą pomoc - to ma być duży serwis :roll2: .
hwao
OPT ma moduly wspomagajace pisanie stron wielojezycznych ( OPT - system szablonow) a reszta to juz tylko odpowiednia tabelka w bazie danych (jak masz okreslona liczbe jezykow to duzo ulatiwa).

Pisze arta i ma 3 textarea (etc) i w nim podaje w 3 jezykach to jest zapisane do bazy i juz :-)
jerrys
Jestem początkujący i nie wiem co to jest OPT - czy mógłbyś podpowiedzieć, ewentualnie skąd to ściągnąć.
Dzięki winksmiley.jpg
kubatron
http://www.opb.ibplanet.pl/
bela
www.opbp.info/wiki
jerrys
A co jeżeli chciałbym skorzystać z bazy danych lub tabeli - co jest lepsze ?
Które z tych rozwiązań lepiej zastosować ? sadsmiley02.gif
Bo nie chce korzystać z OPT nie za bardzo to jeszcze kumam smile.gif

Pomóżcie
tiraeth
---------STRUKTURA BAZY---------
  1. CREATE TABLE languages (
  2. word CHAR(100),
  3. default_name CHAR(100),
  4. LANGUAGE CHAR(100)
  5. );


language - język (np. pol, eng, ger, rus, cze, slo)
word - słowo w danym języku
default_name - słowo w głównym języku - będzie sprawdzane przy pobieraniu

I sobie robisz np. tak:
  1. <?php
  2. $language = 'ang';
  3. $query = &#092;"SELECT * FROM languages WHERE language='\".$language.\"'\";
  4. $result = mysql_query($conn, $query);
  5. while($row = mysql_fetch_assoc($result));
  6. {
  7.  $def = $row['default_word'];
  8.  $lang[$def] = $row['word'];
  9. }
  10.  
  11. // Powiedzmy, ze juz jest w bazie Dodaj po angielsku czyli Add
  12. echo 'Tutaj mamy przyklad zmiany:';
  13. echo '<br />';
  14. echo '<b>Dodaj - '.$lang['Dodaj'].'</b>';
  15. // Wyswietli:
  16. // Dodaj - Add
  17. ?>
jerrys
Dzięki wszystkim za pomoc biggrin.gif
Z tego co napisales Tiraeth rozumiem ze preferujesz mysql-a biggrin.gif i ja tak chyba zrobie biggrin.gif
faster
Ja korzystam z tablicy. Dokładniej to mam pliczek w którym wpisuję sobie wszystkie komunikaty (tak je nazywam) wyświetlane na stronie. Pliczek ten ma postać

[pl]
PUSTE = "Pole nie może być puste"
ERROR_NAZWA = "Błędna nazwa"
ERROR_LICZBA = "Błędna liczba"

[eng]
PUSTE = "Empty fields not allowed"
ERROR_NAZWA = "Invalid name"
ERROR_LICZBA = "Invalid number"

[de]
PUSTE = "..."
ERROR_NAZWA = ".."
ERROR_LICZBA = "....."

odczytuję to za pomocą funkcji

$komunikaty = parse_ini_file("komunikaty.dat",true);
$komunikaty = $komunikaty["pl"]; <- to wybieram automatycznie of kors

i potem w kodzie odwołuję się tak:
print( $komunikaty["PUSTE"] );

... i hula

Taki plik jest łatwiejszy w edycji niż tablica w bazie danych - wiem z własnego doświadczenia.

pozdrawiam
docent
true - sprawy jezykowe na plikach sa sprawa bardzo wygodna. szczegolnie, gdy system jest dosc rozbudowany - wtedy dobrze podzielic jeden jezyk na kilka(nascie) plikow jezykowych - odpowiednia struktura katalogow zalatwia sprawe porzadku. reczna edycja w bazie to masochizm - przeciez 5 tabel dla 5 jezykow zakladac nikt nie bedzie tongue.gif

co do jezykow. oczywiscie mily dodatek:

Kod
if(eregi("\.pl$", gethostbyaddr($_SERVER['REMOTE_ADDR'])))
     {
     $jezyk = '_pl';
     setcookie ('pod_jezyk', "_pl", time()+96422400);
     }
  else
     {
     $jezyk = '_en';
     setcookie ('pod_jezyk', "_en", time()+96422400);
     }


(u mnie akuratnie info o jezykach trzymalem w ciastkach jak widzisz)

a potem juz gdzies w skrypcie tylko zaladowac sobie odpowiedni plik:

Kod
require_once("naglowek$jezyk.php");


powyzej jakis przyklad dla zczytania pliku naglowek_pl.php

a na koniec sam plik naglowek_pl.php:

Kod
<?php
// w tym miejscu znajduja sie polskie teksty do naglowka portalu (naglowek.php)
define("ZALOGOWANY_JAKO", "Jeste zalogowany jako:");
define("WYLOGUJ", "Wyloguj:");
define("PODAJ_LOGIN", "Podaj Login (Nick):");
define("PODAJ_HASLO", "Podaj Has│o:");
define("NIEPOPRAWNY_LOGIN", "Podano niepoprawny login lub has│o!");
define("ZALOGUJ", "Zaloguj siŕ!");
define("WYBIERZ_JEZYK", "Wybierz jŕzyk:");
define("WYBIERZ", "wybierz");
define("POLSKI", "polski");
define("ANGIELSKI", "angielski");
?>


i oppowiednio naglowek_en.php:

(op chwili namyslu stwierdzilem, ze nikomu sie jeszcze nie chcialo tego tlumaczyc tongue.gif)

ale generalnie idee rozumiesz. w samym pliku innego jezyka masz dokladnie to samo, czyli np:

define("WYLOGUJ", "Logout:");
define("PODAJ_LOGIN", "Enter ur login:");

itd... a w samym kodzie zamiast pisac wrzucasz twe stale. zakladam, ze siedzisz na jakichs templatach, czyli klasyk gadzet:

Kod
$jezyk = array(
        'AUTORYZACJA_KONTA_TYTUL' => AUTORYZACJA_KONTA_TYTUL,
        'AUTORYZACJA_KONTA_TRESC' => AUTORYZACJA_KONTA_TRESC,
        'PODAJ_LOGIN' => PODAJ_LOGIN,
        'PODAJ_HASLO' => PODAJ_HASLO,
        'ZALOGUJ' => ZALOGUJ
      );
     $smarty->assign ("jezyk", $jezyk);


i z glowy tongue.gif
tiraeth
System wielojęzykowy moim zdaniem powinien opierać się na parse_ini_file" title="Zobacz w manualu PHP" target="_manual..... smile.gif np.

languages/lang_polish.txt
Kod
; Language File
; *************
; lang_polish

[lang_main]
; Language strings for main site
WELCOME = Witamy
YOUR_PERMS = Twoja ranga to

[lang_errors]
; Language strings for errors
ERROR404 = Error 404: Brak strony
ERROR501 = Error 501: Kolejny błąd


functions/functions.php
  1. <?php
  2. function parse_Lang($language, $section)
  3. {
  4.  $path = 'languages/lang_';
  5.  $ini = parse_ini_file($path.$language.'.txt', true); // Drugi parametr wczytuje sekcje
  6.  foreach($ini[$section] as $key => $value)
  7.  {
  8. $lang[$key] = $value;
  9.  }
  10.  return $lang;
  11. }
  12. ?>


I nareszcie przykład:
demo.php
  1. <?php
  2. include('functions/functions.php');
  3.  
  4. // Zwróci tablicę z pliku lang_polish gdzie sekcja była lang_main
  5. $lang = parse_Lang('polish', 'lang_main');
  6.  
  7. print_r($lang);
  8. ?>


Oczywiście wynik takiego działania:
Cytat(demo.php)
Array
(
    [ERROR404] => Error 404: Brak strony
    [ERROR501] => Error 501: Kolejny błąd
)


smile.gif
kubatron
Zainteresował mnie twój przykłąd z obsługą langów, ponieważ teraz się zastanawiam bo tablice jak wiadomo są szybkie smile.gif A twój przykład jest bardzo fajny, czy jest także szybki jak tablice??
shima
Cytat(jerrys @ 2005-01-18 10:19:41)
Witam
Mam pytanie jakiej metody urzyć na stronie w celu umożliwienia przeglądania jej w wielu językach i która metoda jest najlepsza.
Znam takie metody:
1: napisy przechowywane są w tablicy
2: napisy przechowywane są w bazie

Może znacie jescze inne??
Która metoda jest najlepsza??
Dzieki za każdą pomoc - to ma być duży serwis :roll2: .

Przez tablicę rozumiesz plik?

Jeżeli masz elementy stałe (menu, stopka, opisy), to w pliku, jeżeli newsy, artykuły etc to już zależy od ilości, wymaganej elastyczności, szybkości etc. Wszelkie rady typu "lepiej w bazie", "tylko w pliku" bez znajomości wymagań co do Twojego systemu i możliwości są jak rzucanie monetą i odpowiedź orzeł/reszka.
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.