Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Przechowywanie wersji językowych strony
Forum PHP.pl > Forum > PHP
Dynuel
witam

mam jedno pytanie, jak najlepiej przechowywać tlumaczenia strony??, myślelem o plikach tekstowych, lecz chcę wprowadzić możliwość dodawania i edytowania tlumaczen dla kazdego uzytkownika indywidualnie (poza oficjalnymi domyslnymi), tak wiec tych wersji tlumaczeń moze się trochę nazbierać, pliki nie bardzo mi pasują ze względu na edycję, a przechowywatnie tego w mysql moze troche miejsca zajmowac, chociaz rozmiar nie jest istotny, ale nie wiem jak będzie to chodzilo, co o tym sądzicie??

wielkie dzięki, pozdrawiam
crash
Ja to zawsze (2 razy smile.gif) robiłem mniej więcej tak:

index.php:
  1. <?php
  2. $lang = 'pl'; // lub 'en'
  3.  
  4. include('./lang/'.$lang.'.inc.php');
  5.  
  6. echo '<a href=\"\">'.$lng['link_name'].'</a>';
  7. // itp itd, cała strona...
  8. ?>

pl.inc.php:
  1. <?php
  2. $lng = array();
  3.  
  4. $lng['link_name'] = 'To jest link';
  5. $lng['exit'] = 'Wyjście';
  6. // ...
  7. ?>

en.inc.php:
  1. <?php
  2. $lng = array();
  3.  
  4. $lng['link_name'] = 'This is link';
  5. $lng['exit'] = 'Exit';
  6. // ...
  7. ?>

To tylko jedna z wielu możliwości...
Dynuel
no dobra, metoda dość prosta i wygodna, lecz jezeli ja zamierzam zrobić, tych wersji językowych dziesiątki i do tego ich edytowanie, to nie wiem czy operacje na plikach będą dosyć wygodne i dobre. a co powiesz na MySQL??
dag
crashu pokazał koncept. To już od Ciebie i twojego systemu zależy implementacja.

1. Pobierasz z bazy danych komunikaty - tylko dla jednego języka (tzn. wersję danego usera, bo jak zauważyłeś chcesz, aby user mógł sobie ją edytować).
2. Wstawiasz do pliku (template, etc.)

Możesz to rozwiązać np. poprzez statyczną metodę jakiejś klasy.
  1. <?php
  2. class Msg {
  3. private $messages; //tablica z komunikatami $messages[ id ] = 'kontakt';
  4. static public function get( $id ) {
  5.  return this->messages[ $id ];
  6. }
  7. }
  8.  
  9. ?>


Następnie gdzieś tam odwołujesz się poprzez:
  1. <?php
  2. Msg::get(51831);
  3.  
  4. //czy
  5.  
  6. Msg::get( &#092;"link_menu1\" );
  7.  
  8. ?>
Dynuel
dobra, ale mnie nie chodzi o to jak na stronie uzyc roznych wersji jezykowych, poniewaz myślę że z tym nie mam problemu. Mi chodzi o to ze nie mogę zdecywac się gdzie trzymać te wszystkie tłumaczenia. pli byłby wygodny poniewaz tych wszystkich tekstow jest sporo, ale baza natomiast jest chyba jeszcze lepsza poniewaz latwa w edycji. ale tutaj pojawia sie kolejny problem poniewaz nie wiem jak skonstruowac tabelę, mam zrobić tyle kolumn ile jest tekstow do przetlumaczenia?? i dla kazdego usera bedzie osobny wiersz, lub stworzyc tylko cztery kolumny (id,user,nazwa_tekstu,tlumaczenie) i dla kazdego tekstu do przetlumaczenia i dla kazdego usera dodawac osobny rekord?? mysle ze pierwsza metoda jest lepsza poniewaz wszystko jest dosc ladnie poukladane, lecz nie mam pojęcia jak zachowa sie baza danych z tabelą ktora ma np. 100 kolumn, z czego niektore pola są w dodatku typu text. a drugi pomysl moglby chodzic duzo lepiej, lecz ilosc rekordow wzrosla by 100-krotnie, tak wiec juz nie mam pojęcia co wybrać.
dag
Widzę, że masz problem z projektowaniem baz danych. Zainteresuj się jakąś książką na ten temat.

Kod
tabela "grupa"
grupa_id //id grupy

tabela "langs"
lang_id //id jezyka
lang_short_name //skórt np. pol eng
...

tabela "msg"
grupa_id //id grupy, ktora zajmuje sie tym tlumaczeniem
msg_id //nr id komunikatu, np. link_menu1
lang_id //nr id jezyka
msg_text //tresc komunikatu
...


W ten sposób będziesz mógł w łatwy sposób pobrać listę tłumaczeń dla każdego języka, bo może istnieć kilka tłumaczeń dla danego języka.
NuLL
Mordercy...
dag
Cytat(NuLL @ 2005-06-19 10:09:34)
Mordercy...

Powinien wprowadzić jakieś wielopziomowe cache'owanie (napisałem gdzieś w jego innym temacie). Dzięki temu nie będzie aż tak bardzo obciążona baza ;-)
Dynuel
czyli mam zrobic tak jak pisałem w swoim drugim pomyśle tak?? dla każdego osobnego tekstu w tłumaczeniu dawać osobny rekord w tabeli, no ale zdajesz sobie sprawe z tego ze jezeli bedzie np. 10 językow, a kazde tlumaczenie ma powiedzmy po 100 fragmentow tekstow na stronie to daej 1000 rekordow w bazie danych, a jezeli do tego dojdzie jeszcze z 10000 uzytkownikow, a powiedzmy 1000 z nich zrobi sobie wlasne tlumaczenie (a chcę by mieli taką mozliwość) to tych wpisow pojawi sie w bazie 10000 prywatnych tlumaczen + 1000 oficjalnych. no w sumie nie jest tego az tak dluzo, no ale gdyby zrobic tak jak opisywalem w sowim pierwszym pomysl to tych rekordow bylo by 1010, no ale tabela by miala 100 kolum, tak wiec moze by to spowolniło pracę. zupełnie się na tym nie znam, tak więc proszę o pomoc w wyborze.


ps. "Powinien wprowadzić jakieś wielopziomowe cache'owanie" ze co?questionmark.gifquestionmark.gifquestionmark.gifquestionmark.gif?
SongoQ
W tym przypadku wydaje mi sie baza danych najlepszym rozwiazaniem. Tak jak pisales moze byc n jezykow i n userow, odnosnie plikow to bedzie masakra z wciaganiem tych plikow, kilka tysiecy plikow w 1 katalogu i wydajnosc spada. Wtedy wymagana by byla struktura drzewiasta tatalogow z jezykami. A co z edycja latwiej na bazie zrobic.

Projekt tabeli. Lepiej zastosowac wiele rekordow i tutaj jak napisales "0000 prywatnych tlumaczen + 1000 oficjalnych" to nie jest tak az wiele niz 1000 pol w bazie danych, chyba nie musze tlumaczyc dlaczego wiele pol powoduje problemy.
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.