Tematy na forum Pro mogą zakładać jedynie moderatorzy. W otwartych tematach może pisać każdy, kto ma coś fachowego do powiedzenia. Wszystkie posty nie wnoszące nic do tematu będą natychmiast usuwane, a ich autorzy dostaną ostrzeżenie.
Jeśli uważasz, że jakiś temat jest warty dyskusji na tym forum, zgłoś go w temacie Propozycje.
Post
#1
|
|
|
Grupa: Moderatorzy Postów: 1 566 Pomógł: 37 Dołączył: 14.05.2003 Skąd: Kraków |
Witam,
Od jakiegoś czasu piszę duży projekt i doszedłem do wybierania języku. Chciałbym poznać Wasze zdanie jak ma działać taki system wielojęzykowości strony. Pobuszowałem po internecie i oto, co wymyśliłem.
Byłbym wdzięczny za propozycje rozwiązań. Wojtek. |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 37 Pomógł: 4 Dołączył: 6.08.2006 Skąd: Lublin Ostrzeżenie: (0%)
|
Wybaczcie, że odgrzewam temat. Baardzo długo zastanawiałem się nad rozwiązaniem wielojęzykowości w moich skryptach. Końcowo doszedłem do wniosku, że idealnym rozwiązaniem będzie wykorzystanie systemu wbudowanego w OPT oraz kilku ciekawych ulepszeń. Po pierwsze, wszystkie stałe językowe przechowywane są w kategoriach niezależnych od czegokolwiek. Grupujesz jak chcesz, potem wczytujesz te grupy. Wczytanie jednej stałej z grupy powoduje wczytanie wszystkich z danej grupy.
Załóżmy, że mamy takie grupy:
languages/pl/ navigation.php contact.php home.php global.php languages/en/ navigation.php contact.php home.php global.php Każdy plik PHP składa się z tablicy $lang, która zawiera stałe. Dlaczego akurat tablica, a nie jakiś XML/YAML? Otóż z bardzo banalnego powodu. W pewnym momencie, kiedy pracowałem nad grą internetową (http://orodlin.pl) okazało się, że stałych odpowiedzialnych za niektóre akcje jest bardzo dużo (w jednym pliku ponad 500), natomiast wykorzystywana jest tylko jedna. Ładowanie wszytkich takich danych przy pomocy parsera byłoby całkowicie bezcelowe - marnotrawstwo pamięci. Dlatego zamiast tablicy stworzyłem obiekt implementujący interfejs ArrayAccess, który pobiera potrzebne stałe prosto z bazy danych. Muszę przyznać, że jestem z takiego rozwiązania bardzo zadowolony. Wszystkie stałe są pogrupowane w logiczne kategorie, w razie konieczności przechowania większych ilości danych, używam odpowiedniego obiektu bez modyfikowania samego systemu językowego. Pozostał tylko jeden zasadniczy problem - rozbicie wszystkich stałych na kilka plików wymusza wczytanie za każdym razem kilku plików. Ten problem rozwiązałem, używając cache. Wszystkie stałe, o ile nie pochodzą z dynamicznych tablic (tych obiektów implementujących ArrayAccess) zapisuję przy pomocy jednej wielkiej zserializowanej tablicy i zapisuję w pliku. Każda akcja w kontrolerze ma taki swój własny plik. W ten sposób kilka plików ładowanych jest tylko za pierwszym razem. Jestem w trakcie pisania pluginu do OPT który będzie realizował taki system. Mam nadzieję, że wszystkim się spodoba. Tymczasem chciałbym poznać wszystkich opinie, co sądzą o takim rozwiązaniu. EDIT: Co do danych dynamicznych, w Orodlinie istnieje założenie, że gra = jeden język. W innych projektach, gdy muszę mieć różne wersje językowe dynamicznych danych (np. artykułów), po prostu w tabeli dodaję pole określające język. Ten post edytował Albitos 19.08.2008, 15:19:07 |
|
|
|
Ociu Wielojęzykowość 1.04.2006, 18:29:19
pEbE Myślę ze dobrym rozwiązaniem są pliki. Stosuje sie... 1.04.2006, 20:31:20
Strzałek jeżeli w projekcie masz zamiar używać OPT, to ja n... 2.04.2006, 09:19:58
sf Smarty: {config_load file="text.conf" se... 2.04.2006, 09:59:36
NuLL Ja korzystam z modifiera SMARTY
[HTML] pobierz, pl... 7.04.2006, 00:59:47
TomASS A ja się bawię "słownikiem" - mam plik l... 7.04.2006, 07:27:19
eMartio Ja z kolei napisałem sobie plugin do Smartego. Tem... 7.04.2006, 10:15:48
Vengeance I ma taką wadę, że języki są różne i różną mają gr... 9.04.2006, 17:09:41
Fipaj http://developer.gnome.org/projects/gtp/tr...-gnom... 9.04.2006, 18:36:07
3rdeye Cytat(TomASS @ 2006-04-07 06:27:19)A ja się b... 12.04.2006, 15:10:53
splatch Ja ze swojej strony mogę polecić draft i18n z Moja... 12.04.2006, 19:49:35
yavaho Ja mam strony wielojezykowe zrobione na podstawie ... 12.04.2006, 20:15:15
Ace Ja osobiscie korzystam z plikow ini. Plik jezykowy... 13.04.2006, 08:45:23
dtb ja wczytuje zawartosc pliku ini dla wybranego jezy... 13.04.2006, 14:54:21
krzemian Moim zdaniem prawda znowu leży po środku - wydaje ... 16.04.2006, 13:53:05
NoiseMc Cytat(krzemian @ 2006-04-16 12:53:05)Wydaje m... 16.04.2006, 15:33:53
krzemian Teraz tak myślę i doszedłem do wniosku, że twoj po... 16.04.2006, 17:07:31
Jabol A co wy na to (suma kilku pomysłów):[PHP] pobierz,... 16.04.2006, 21:23:09
Bora Cytat(Jabol @ 2006-04-16 21:23:09)A plik tran... 17.04.2006, 14:11:06
Fipaj A co, jeśli w tłumaczonym tekście wystąpi znak ... 17.04.2006, 14:24:45
Ociu Jabol: Muszę się zgodzić z Borą, wygląd pliku jest... 17.04.2006, 15:28:25
sf Cytat(Fipaj @ 2006-04-17 14:24:45)A co, jeśli... 18.04.2006, 17:56:26
Jabol Cytat(Fipaj @ 2006-04-17 14:24:45)A co, jeśli... 18.04.2006, 18:01:58
Prph Witam,
Kilka dni temu pisalem klase opbsugujaca j... 26.04.2006, 11:57:49
Neotion Przepraszam będe pisał bez shifta bo siedze w szko... 27.04.2006, 07:20:49
Bastion takie wlasnie (podobne) rozwiaznie jest w klasie B... 27.04.2006, 07:35:10
sadu moze pomoze:
http://www.tutorialized.com/tutorial... 27.04.2006, 10:47:56
Seth Odkopuje temat bo zastanawiam sie nad tym w jaki s... 5.05.2006, 13:20:27
splatch Bardzo przydatny temat dla wszystkich którzy odwie... 5.05.2006, 21:36:48
AveNET Mam taką tablicę
[PHP] pobierz, plaintext <?php... 20.05.2006, 09:54:11
DeyV Cytat(Seth @ 2006-05-05 13:20:27)Ogolnie chod... 20.05.2006, 21:20:50
g00fy a co powiedzie o languagefactory::GetLang()
a pozn... 1.06.2006, 20:23:06
nasty_psycho Moim zdaniem, (ja tak zrobilem w moim programie kt... 4.06.2006, 19:22:50
DooBLER Witam
Odgrzeję kotleta...
Piszę średniej wielkoś... 3.12.2006, 09:13:15
NuLL http://forum.php.pl/index.php?showtopic=42371... 3.12.2006, 12:55:27
cicik Można też skorzystać z TMX, zunifikowany opis XMLo... 3.12.2006, 17:03:29
Sh4dow Nie wiem czy ktoś wogóle o tym słysza... 4.12.2006, 10:55:20
DeyV Właśnie o gettext była mowa, gdy wspominaliśmy o B... 7.12.2006, 23:18:16
pawkow Problem multijęzykowości rozwiązałem w prosty spos... 21.03.2007, 20:27:11 
mike_mech Cytat(pawkow @ 21.03.2007, 20:27:11 )... 21.03.2007, 20:30:23
pawkow musiałbyś poprawić tylko jeden plik, czy się mylę ... 21.03.2007, 21:16:19
Zeman Korzystam z autorskiego edytora i 2 pluginów multi... 3.04.2007, 21:34:22
Diabl0 Widzę że prawie każdy skupił się tylko na jednej (... 4.04.2007, 01:17:23
Sedziwoj Czy mi się wydaje czy to jest jeden 'artykuł... 4.04.2007, 01:31:24
Athlan Moim zdaniem baza danych w zupełności od... 4.04.2007, 07:05:59 
Sedziwoj Cytat(Athlan @ 4.04.2007, 08:05:59 ) ... 4.04.2007, 10:02:09
Zeman Cytat(Diabl0 @ 4.04.2007, 02:17:23 ) ... 4.04.2007, 11:11:42
Kayne Hm... Jest trochę prostsze rozwiązanie, z którego... 4.04.2007, 14:29:46
bela rozwiazanie powyzej jest fajne, ale ma jedna wade:... 4.04.2007, 16:52:29 
faster Cytat(bela @ 4.04.2007, 17:52:29 ) ro... 30.04.2007, 00:15:28
Kayne No, powtarzają się, ale jest to bardzo łatwe do za... 6.04.2007, 11:48:54
empathon Ja podobnie jak ~bela używam symfony i uważam tamt... 9.04.2007, 16:01:43
bela jezeli ktos sie zdecyduje na symfony, to radze pob... 9.04.2007, 19:52:04
cicik Od jakiegoś czasu zastanawiam się na wielojęzykowo... 12.04.2007, 21:45:21
Siner Ostatnio zastanawiam się nad wyglądem linków wielo... 13.05.2007, 16:19:31
Nitryt14 Mam podobny problem jezykowy przy tworzeniu strony... 13.05.2007, 17:23:59
kubarek moja idea:
[PHP] pobierz, plaintext <?phpclass ... 13.05.2007, 20:02:42
eai Mój sposób wygląda tak:
Plik Global_Lang.php:
[PHP... 14.05.2007, 09:41:24
Sedziwoj A mnie tak ciągle zastanawia, dlaczego artykuły/ne... 14.05.2007, 09:51:22
siemakuba Pojawił się w tym wątku pomysł, aby trzymać dane z... 14.05.2007, 15:17:27
Sedziwoj Ja bym szybciej jedną tabele `article` i w... 14.05.2007, 19:39:55
siemakuba @Sedziwoj - masz oczywiście rację, zdaje się, że t... 15.05.2007, 09:56:56
Black-Berry Dawno nie pisałem na forum dlatego pozdrawiam i wi... 24.12.2007, 00:23:58
Nattfarinn A ja się zastanawiam nad sensowności... 27.12.2007, 11:18:32
acztery ja stosuję metodę zapisu do bazy każdy element ma ... 4.02.2008, 21:53:48
Strzałek W Doctrine jest plugin do i18n. Wielojęzykowość st... 1.03.2008, 12:07:43
Sh4dow a jak w tym doctrine wyglada to tłumacznie ? Osobn... 4.03.2008, 10:43:03
Strzałek Przykład z dokumentacji doctrine:
news:
id |... 14.03.2008, 13:08:25
lusiek (sorry za odkop)
Nie można po prostu użyć prefixó... 22.05.2008, 09:10:58 
empathon Cytat(lusiek @ 22.05.2008, 10:10:58 )... 22.05.2008, 12:00:40
radex_p Mam jeden prosty i sprawdzony sposób.
[PHP] pobie... 23.05.2008, 17:52:07
Sedziwoj @radex_p
Co innego tłumaczenie statycznych rzeczy,... 23.05.2008, 19:10:41
radex_p Co masz na myśli? Te tablice z tłumaczen... 23.05.2008, 19:52:53
Crozin @radex_p - myślę, że chodziło o np. artykuł dodawa... 23.05.2008, 21:01:49
radex_p aaaaa..... Teraz już rozumiem 24.05.2008, 08:40:48
Sedziwoj Dokładnie, bo można rozgraniczyć na dwa rodzaje, j... 24.05.2008, 10:25:24
joohn Obecnie korzystam z Symfony i podoba mi sie jak to... 29.05.2008, 11:32:28
Sedziwoj @joohn
Wada, to że wszystkie teksty są wrzucone do... 29.05.2008, 14:18:48
rzymek01 Witam!
Podsumowując, moim zdaniem optymalnym ... 29.05.2008, 20:01:46
Sedziwoj @rzymek01
Jak masz kolumnę lang, to niech to będzi... 30.05.2008, 08:44:00
rzymek01 racja, mój błąd
nie chciałem już mieszać, bo na ... 30.05.2008, 13:39:42
Blodo Kolejny odkop no ale..
Ja uzywam dwoch tabel: jed... 6.07.2008, 05:56:10
Sedziwoj @Blodo
Może coś w tym stylu:
[SQL] pobierz, plaint... 7.07.2008, 08:00:55
Blodo Hmm, dobry pomysl. Co prawda trzeba w php potem sp... 7.07.2008, 23:24:09 
Sedziwoj Cytat(Blodo @ 8.07.2008, 00:24:09 ) H... 7.07.2008, 23:58:30
tomek_swat mam pytanie jak sobie radzicie z wersją językową p... 12.10.2008, 20:13:47
Crozin Ale w jakim celu tłumaczyć wyjątki? One są raczej ... 12.10.2008, 21:15:54
tomek_swat załóżmy, że mam klasę Config, która jest Singleton... 13.10.2008, 11:43:50
Sedziwoj Nie zawsze wyjątki są najlepsze, powinieneś sprawd... 13.10.2008, 15:23:27
test_next Witam,
tak pobieżnie przeglądając odpowiedzi nie ... 2.07.2009, 10:12:06
erix Mało przenośne. Co w sytuacji, gdy np. stała konfi... 2.07.2009, 10:27:14
test_next tak tylko aplikacja ma być przenośna, a gettext ni... 2.07.2009, 11:12:29
viking To zainteresuj się Zend Framework (i zanim napisze... 2.07.2009, 11:23:21
test_next To include GNU gettext support in your PHP build y... 2.07.2009, 11:51:36 
viking Cytat(test_next @ 2.07.2009, 12:51:36... 2.07.2009, 11:56:40
bim2 Nie miałem siły przeglądać całego watku, ale moim ... 2.07.2009, 11:54:13
test_next viking: ok, ale aplikacja jest dosyć rozbudowana i... 2.07.2009, 12:02:54
Crozin Zapewne da się ten komponent "wyciąć" z ... 2.07.2009, 12:56:10
erix Cytattak tylko aplikacja ma być przenośna, a gette... 2.07.2009, 14:18:37 ![]() ![]() |
|
Aktualny czas: 4.12.2025 - 15:16 |