Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Budowa wielojęzycznego CMS'a
Forum PHP.pl > Forum > PHP > Object-oriented programming
freddd
Witam wszystkich!
Chciałem was zapytać o opinię na temat tworzenia wielojęzycznych cms'ów.
Mam dwie koncepcję stworzenia takiego cms'a.
Pierwsza opiera się na tym, że budowanie stron, produktów itp. rozpoczynamy od wyboru wersji językowej, dla której będzie tworzony ten kontent. W tej wersji relacja pomiędzy modułami a językami jest jeden do wielu. Druga opcja jest taka, że każdy moduł jest połączony z językami relacją wiele do wielu, czyli np. mamy tabele: site, site_lang i lang. W pierwszej tabeli znajdują się dane wspólne dla wszystkich wersji językowych (nazwa w menu, licznik wyświetleń). Druga tabela przechowywałaby dane konkretnej wersji językowej (treść, stopka, tytuł). W drugiej koncepcji klikając w edycję np. strony mamy dane do uzupełnienia dla wszystkich wersji oraz taby zależne od wersji językowej a w nich odpowiednie formularze.
Która wersja według was jest lepsza na bazie waszych doświadczeń. Obie koncepcje mają swoje wady i zalety. Zaletą pierwszej jest to, że dla każdej z wersji językowych można zbudować praktycznie zupełnie inny kontent. Tylko pytanie czy jakaś firma będzie tego potrzebować ?
erix
Cytat
Zaletą pierwszej jest to, że dla każdej z wersji językowych można zbudować praktycznie zupełnie inny kontent. Tylko pytanie czy jakaś firma będzie tego potrzebować ?

Kiedyś miałem taki projekt do wykonania i dla każdej podstrony miało być wykonywane tłumaczenie. Choć wiesz - stałe dla np. skinów, czy stałych elementów lepiej wrzucić do plików niż za każdym razem odpytywać bazę.
SzamanGN
Ja robię to tak:
1. Tworzę pliki z tekstem danego języka, np.: powitanie_pl.txt, powitanie_en.txt.
2. W sesji przechowuję wybrany język, np.: en.
3. Mam "silnik", który wczytuje podstronę (przykładowe odwołanie: pokaz.php?art=powitanie).
4. Silnik sprawdza, czy plik o nazwie $_GET['art'].'_'.$_SESSION['jezyk'].'.txt' istnieje.
5. Jeżeli istnieje, to go ładuje.
6. Jeżeli nie istnieje, to ładuje $_GET['art'].'_pl.txt'.

Wiem, że nie jest to idealne rozwiązanie, ale jest proste i niezawodne (jak na razie).
freddd
Cytat(SzamanGN @ 5.04.2009, 10:18:03 ) *
Ja robię to tak:
1. Tworzę pliki z tekstem danego języka, np.: powitanie_pl.txt, powitanie_en.txt.
2. W sesji przechowuję wybrany język, np.: en.
3. Mam "silnik", który wczytuje podstronę (przykładowe odwołanie: pokaz.php?art=powitanie).
4. Silnik sprawdza, czy plik o nazwie $_GET['art'].'_'.$_SESSION['jezyk'].'.txt' istnieje.
5. Jeżeli istnieje, to go ładuje.
6. Jeżeli nie istnieje, to ładuje $_GET['art'].'_pl.txt'.

Wiem, że nie jest to idealne rozwiązanie, ale jest proste i niezawodne (jak na razie).


Jak w ten sposób klient będzie edytował strony w panelu admina ?
To jest raczej rozwiązanie statyczne a nie do cms'a?

Cytat(erix @ 5.04.2009, 01:21:24 ) *
Kiedyś miałem taki projekt do wykonania i dla każdej podstrony miało być wykonywane tłumaczenie. Choć wiesz - stałe dla np. skinów, czy stałych elementów lepiej wrzucić do plików niż za każdym razem odpytywać bazę.


W jakim sensie stałe ?

Nie wiem czy się dobrze rozumiemy więc przedstawię jeszcze raz koncepcję na tabelach w bazie danych:
Wersja 1:
site(id, site_name, site_title, site_content, lang_id)
lang(id, lang_name)

Wersja 2:
site(id, site_name)
site_lang(id, site_id, lang_id, site_title, site_content)
lang(id, lang_name)

W pierwszej wersji klient ma możliwość stworzenia różnych stron dla różnych wersji językowych, ale ma więcej do wpisywania.
Lonas
Wersja pierwsza jest dobra. Skoro strona jest wielojezyczna to klient wporwadzajac nowy artykul nie bedzie chciial czesci miec po polsku a czesci po ang np.. Czyli tworzy to od nowa wpisujac do lang_id flage jezyka w ktorym jest dany art.
erix
Cytat
W jakim sensie stałe ?

Np. etykietki przycisków "powrót", "wyślij", etc.
maniekl2
Po co zakładasz dwa takie same tematy ? - Klik

Na pewno jakaś firma będzie tego potrzebować. Tu masz temat o wielojęzykowości - Klik

--
pozwoliłem sobie wydzielić

~erix
freddd
Cytat(maniekl2 @ 6.04.2009, 19:45:09 ) *
Po co zakładasz dwa takie same tematy ? - Klik


Dzięki za usunięcie tamtego. Nikt mi tam nie odpowiedział rzeczowo, więc stwierdziłem, że wybrałem zły dział.

Cytat(maniekl2 @ 6.04.2009, 19:45:09 ) *
Na pewno jakaś firma będzie tego potrzebować. Tu masz temat o wielojęzykowości - Klik


Ten link nie rozwiązuje mojego problemu. Tam jest poruszany temat statycznych tekstów na stronie, a mi chodzi o dynamiczną treść, którą klient sam uzupełnia w panelu administracyjnym.
Moli
Jako że teraz robie spory wielojęzyczny system, to napiszę jak ja to u siebie zrobilem. Teksty na stronie pobierane są z tablicy, w której mogę zmieniać parametry. Zaś teksty z bazy (np. podstrony) rozwiazałem tak:
Cytat
ID | LANG | INNE POLA

i wpisy np.
Kod
1 | pl | ...
1 | en | ...

Zapytaniem pobieram wartość o ID = X i LANG = aktualny język. Dodatkowo mam tabelę "id" w której mam
Cytat
TABELA | ID

Proste, ale działa jak trzeba smile.gif
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.