Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zasady pisania na forum Pro

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.

> Wielojęzykowość, Czekam na Wasze propozycje
Ociu
post 1.04.2006, 18:29:19
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.
  • Pliki.
    Trzymamy pliki językowe w plikach. Każdy język ma osobny katalog, każdy ma pliki o takiej samej nazwie jak reszta języków, w plikach tablice o takich samych kluczach. Wybieramy odpowiedni język, include odpowiedniego pliku i print.
  • Teksty w bazie danych.
    Tworzymy dwa obiekty. Jeden (może być traktowany jako filter) pobiera dane z bazy danych i przerzuca je do klasy o nazwie np. LangWrapper. Używając magicznych metod __get() pobieramy tekst z klasy i __set() gdy nie ma potrzebnego tekstu należy do stworzyć
  • Open Power Template

Byłbym wdzięczny za propozycje rozwiązań.
Wojtek.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Albitos
post 19.08.2008, 15:17:06
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:
  • navigation
  • contact
  • home
  • global
Teraz struktura plików:
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


--------------------
Albi's Jogger - z pamiętnika młodego programisty
Orodlin Team Member
Go to the top of the page
+Quote Post

Posty w temacie
- 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
- - Albitos   Wybaczcie, że odgrzewam temat. Baardzo d...   19.08.2008, 15:17:06
- - 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
2 Stron V   1 2 >


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

 



RSS Wersja Lo-Fi Aktualny czas: 21.06.2024 - 01:51