Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [klasa PHP5] Klasa wspierająca wielojęzykowość, Klasa w teorii ma ułatwić dodawanie wielojęzykowych elementów tekstowy
everth
post
Post #1





Grupa: Zarejestrowani
Postów: 782
Pomógł: 153
Dołączył: 21.07.2010

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


Poniższa klasa powinna pomóc w tworzeniu wielojęzykowych stron.

Przy projektowaniu wzorowałem się na podobnej funkcji w bibliotece Qt4 - gdzie metoda tr() ułatwia znacznie tworzenie templatek z tłumaczeniami, właściwie bez ingerencji w kod. Moja klasa próbuje to (trochę nieporadnie, ale cóż) zaimplementować w PHP. Główne założenia:
  • niezależność od źródła danych (wydzielony interfejs dla modelu danych z tłumaczeniami)
  • łatwość użycia w kodzie (szybka skrótowa funkcja $U())
  • automatyczne tworzenie bazy na podstawie wpisów w kodzie (w trybie appendMode dodajemy unikatowe ID i (opcjonalnie) tłumaczenie)
  • dobra dokumentacja - na obecnym etapie podstawowa dokumentacja w phpDoc
  • elastyczność - klasa w zasadzie projektowana była dla statycznych elementów tekstowych (napisy na przyciskach, napisy w stopce, itd.), ale ponieważ są to ciągi tekstowe to z łatwością można sobie dostosować np. do przechowywania ścieżek do plików graficznych z różnymi napisami, przy odrobinie wysiłku można w ten sposób dodawać nawet artykuły wielojęzykowe (po prostu generujemy ID dla artykułu i zawijamy w funkcję $U() - np. $U('12334') - później tworzymy wersje językowe dla tego ID)

Przykładowa baza w sql na początku ma dwie kolumny - id z identyfikatorami oraz kolumnę aktualnego języka (np. "pl_PL"), dodając nową kolumnę - dodajemy nowy język, według mnie ułatwia to tworzenie i edycję arkusza z tłumaczeniami np. w Excelu lub Calcu (po przerzuceniu tabeli w CSV). Przykładowa struktura:
  1. CREATE TABLE `Translations` (
  2. `id` varchar(40) CHARACTER SET latin1 NOT NULL,
  3. `pl_PL` mediumtext, -- nie jestem w stanie określić jak długie mogą być ciągi tekstowe tutaj
  4. `en_GB` mediumtext,
  5. PRIMARY KEY (`id`)
  6. ) ENGINE=MyISAM DEFAULT CHARSET=utf8

Przykładowe użycie:
  1. //Z użyciem trybu appendMode (dodajemy UIDy oraz przykładowe tłumaczenia w polskim)
  2. $locale = new Translation($pdo);
  3. $locale->setLang('pl_PL');
  4. $locale->appendMode(1); //włączamy appendMode
  5. $locale->setup();
  6.  
  7. echo <<<EB
  8. <ul>
  9. <li>{$U('M_HOME','Główna')}</li>
  10. <li>{$U('M_ABOUT','O nim')}</li>
  11. <li>{$U('M_PORTFOLIO','Portfolio')}</li>
  12. </ul>
  13. EB;
  14.  
  15. //Bez appendMode - sam odczyt UIDów (w przypadku braku pusty string)
  16. $locale->__destruct(); //niestety obiekty Translation nie tolerują żadnego ponownego wywołania bez ręcznego zniszczenia poprzedniej instancji - a ponieważ obiekt tworzy co najmniej 2 referencje do siebie to metoda unset() zawodzi, niestety to obecnie najsłabsze ogniwo - nie powinno się tworzyć więcej niż jedną instancję w przebiegu skryptu!
  17. $locale = new Translation($pdo);
  18. $locale->setLang('pl_PL');
  19. $locale->setup();
  20. echo <<<EB
  21. <ul>
  22. <li>{$U('M_HOME')}</li>
  23. <li>{$U('M_ABOUT')}</li>
  24. <li>{$U('M_PORTFOLIO')}</li>
  25. </ul>
  26. EB;

Kod źródłowy Translation wraz z klasami pomocniczymi jest pod tym linkiem
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
cojack
post
Post #2





Grupa: Zarejestrowani
Postów: 898
Pomógł: 80
Dołączył: 31.05.2008

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


Cytat
The locale information is maintained per process, not per thread. If you are running PHP on a multithreaded server API like IIS or Apache on Windows, you may experience sudden changes in locale settings while a script is running, though the script itself never called setlocale(). This happens due to other scripts running in different threads of the same process at the same time, changing the process-wide locale using setlocale().


Zyx, czytaj dokładniej.
Go to the top of the page
+Quote Post

Posty w temacie


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: 9.06.2026 - 17:45