Dynuel
18.06.2005, 13:44:03
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
18.06.2005, 13:56:06
Ja to zawsze (2 razy

) robiłem mniej więcej tak:
index.php:
<?php
$lang = 'pl'; // lub 'en'
include('./lang/'.$lang.'.inc.php');
echo '<a href=\"\">'.$lng['link_name'].'</a>'; // itp itd, cała strona...
?>
pl.inc.php:
<?php
$lng['link_name'] = 'To jest link';
$lng['exit'] = 'Wyjście';
// ...
?>
en.inc.php:
<?php
$lng['link_name'] = 'This is link';
$lng['exit'] = 'Exit';
// ...
?>
To tylko jedna z wielu możliwości...
Dynuel
19.06.2005, 06:14:21
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??
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.
<?php
class Msg {
private $messages; //tablica z komunikatami $messages[ id ] = 'kontakt';
static public function get
( $id ) { return this->messages[ $id ];
}
}
?>
Następnie gdzieś tam odwołujesz się poprzez:
<?php
Msg::get(51831);
//czy
Msg::get( \"link_menu1\" );
?>
Dynuel
19.06.2005, 08:57:06
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ć.
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
19.06.2005, 09:09:34
Mordercy...
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
19.06.2005, 09:15:35
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?




?
SongoQ
19.06.2005, 14:21:42
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.