Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Wielojęzykowość
Forum PHP.pl > Forum > Przedszkole
potreb
Witam, poszukuje odpowiedzi a konkretnie w zakresie wielojęzykowości. Mam już system, tyle że chciałby rozbududować go o możliwość tworzeni treści w wielu językach, szukam prostego sposobu. Prosty to jest utworzenie nowych tabel, bądź całej bazy w którym byłaby osobna treść dla danego języka, aczkolwiek nie jest to dobre rozwiązanie, pracuję na jednym z systemów, który pod dodaniu do xml nazwy jeżyka i włączeniu go w panelu administratora, automatycznie rozbudowuje stronę o następny język, z tym że cała zawartość musi być taka sama jak w wersji polskiej żeby nie było różnic. Nie wiem jak w ogólne zaprojektować, żeby było proste i dobre.
CuteOne
Nie widzę powodu aby rezygnować z bazy danych na rzecz XML do tego typu działań. Po pierwsze nie trzeba tworzyć nowej tabeli dla każdego jeżyka wystarczy:

id | kraj | key | value
1 | 1 | 'pokaz' | 'show'
1 | 2 | 'pokaz' | 'pokaz'

Małe wyjaśnienie:
- kraj = 1 -> np. english, 2->polski, 3->euroazjatycki itd. Pobierasz tylko te dane, które mają odpowiedni język
- key czyli wywołując $lang['pokaz'] zmienna ta zwraca "show" dla angielskiego lub "pokaz" dla polskiego
toaspzoo
Plik z jezykiem, zaleznie od języka wybierasz plik, np pl.php, en.php
a w pliku zmienne:

pl.php
  1. $lang['imie'] = 'Imię';
  2. $lang['wiek'] = 'Wiek';

en.php
  1. $lang['imie'] = 'Name';
  2. $lang['wiek'] = 'Age';


I tak dalej

Najłatwiej tak i najoptymalniej, bo nie obciążasz bazy
mortus
Można również połączyć obie powyższe propozycje i zastosować plik językowy dla elementów stałych (takich jak jakieś nagłówki, tytuły poszczególnych sekcji strony), a treść artykułów, nowinek itp. zapisywać w bazie danych, jak to wyżej przedstawiono.
potreb
Cytat(CuteOne @ 6.07.2011, 23:30:52 ) *
Nie widzę powodu aby rezygnować z bazy danych na rzecz XML do tego typu działań. Po pierwsze nie trzeba tworzyć nowej tabeli dla każdego jeżyka wystarczy:

id | kraj | key | value
1 | 1 | 'pokaz' | 'show'
1 | 2 | 'pokaz' | 'pokaz'

Małe wyjaśnienie:
- kraj = 1 -> np. english, 2->polski, 3->euroazjatycki itd. Pobierasz tylko te dane, które mają odpowiedni język
- key czyli wywołując $lang['pokaz'] zmienna ta zwraca "show" dla angielskiego lub "pokaz" dla polskiego


Czyli tak naprawdę czeka mnie przeprojektowanie bazy danych, dodanie do każdej tabeli kolumny lang, wtedy przy wyborze języka automatycznie do bazy powinna dodawać się informacja o języku, i automatycznie po wyborze strona.pl/en/ miałby się ustawiać język. Także czeka mnie przeprojektowanie kilku klas a w szczególności drzewa nawigacji. Aczkolwiek, to może nie być takie trudne bo gdy dodam do root odnośnik en, pl, fr, automatycznie treść będzie tworzona dla tych języków.

Co do tłumaczenia elementów stałych to jest banał, moje pytanie raczej tyczyło się samego zaprojektowania, sposobu tworzenia treści w wielu językach, rozwiązania zaprojektowania samego mechanizmu, struktury tabel itp.

Dziękuje za odpowiedzi.
CuteOne
Pamiętaj tylko, że przy dużych ilościach danych lepiej rozdzielić to na kilka tabel np. tabela_lang_pl, tabela_lang_en - tu jak widzisz wystarczy w zaytaniu do bazy wstawić odpowiednią zmienną

  1. SELECT * FROM table_lang_'$lang' WHERE klucz = '$klucz'
nospor
@CuteOne Ten mechanizm ma moim zdaniem poważną wadę:
w przypadku jakiejś niezbędnęj aktualizacji tabeli o dodatkowe pole, trzeba pamiętać by zmienić to we wszystkich tabelach językowych.
W przypadku, gdy tabele są tworzone dynamicznie, trzeba pamiętać o zaktualizowaniu skryptu do tworzenia takich tabel.

No ale wady/zalety zapewne i tak docelowo będą zależały od aplikacji, ilości danych i kupie masie innych rzeczy.
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.