Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL] Wielojęzykowość
potreb
post
Post #1





Grupa: Zarejestrowani
Postów: 1 568
Pomógł: 192
Dołączył: 7.03.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
CuteOne
post
Post #2





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

Ostrzeżenie: (0%)
-----


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

Ten post edytował CuteOne 6.07.2011, 23:31:38
Go to the top of the page
+Quote Post
toaspzoo
post
Post #3





Grupa: Zarejestrowani
Postów: 778
Pomógł: 84
Dołączył: 29.07.2010
Skąd: Gliwice / Pławniowice Mistrz niezmordowanej klawiatury.

Ostrzeżenie: (20%)
X----


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

Ten post edytował toaspzoo 7.07.2011, 00:48:07
Go to the top of the page
+Quote Post
mortus
post
Post #4





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
potreb
post
Post #5





Grupa: Zarejestrowani
Postów: 1 568
Pomógł: 192
Dołączył: 7.03.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
CuteOne
post
Post #6





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

Ostrzeżenie: (0%)
-----


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'


Ten post edytował CuteOne 7.07.2011, 12:55:24
Go to the top of the page
+Quote Post
nospor
post
Post #7





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




@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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 2.10.2025 - 18:51