![]() |
![]() |
![]()
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:
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:
Przykładowe użycie:
Kod źródłowy Translation wraz z klasami pomocniczymi jest pod tym linkiem -------------------- Już mi się ani wiedzieć, ani tym bardziej myśleć nie chce.
[Think different]! |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
WTF?! Poczytaj o właściwościach statycznych. Czy mi się dobrze wydaje, czy do pobrania każdej wartości wywoływane jest zapytanie do bazy danych? ![]() @access nie stosujesz jak piszesz dla php5 Jeżeli zwracasz egzemplarz tej samej klasy możesz dać @return self W preperestatement masz "podwojony" kod dla update. Po co robisz addslashes skoro możesz skorzystać z bindowania wartości, które takie "zabezpieczenie" Ci załatwia? A teraz puenta. Jaka jest różnica w stosowania twojej klasy od gettext? Czyż nie lepiej było np stworzyć klasę do zarządzania wpisami właśnie dla tegoż wyżej wynalazku? Dobra a teraz słowa uznania: - Ładny kod (formatowanie, phpdoc) - Dobre oddzielenie źródeł translacji Ten post edytował wookieb 7.08.2010, 06:50:57 -------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 782 Pomógł: 153 Dołączył: 21.07.2010 Ostrzeżenie: (0%) ![]() ![]() |
Aleś po mnie pojechał
![]()
Ten post edytował everth 7.08.2010, 07:51:04 -------------------- Już mi się ani wiedzieć, ani tym bardziej myśleć nie chce.
[Think different]! |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 952 Pomógł: 154 Dołączył: 20.01.2007 Skąd: /dev/oracle Ostrzeżenie: (0%) ![]() ![]() |
Używanie gettext() w aplikacjach PHP to lekkie nieporozumienie. Bazuje ono na locale ustawianym przez funkcję setlocale(), która owszem, ustawia locale, ale dla całego procesu serwera, a nie dla pojedynczego wątku. Oznacza to, że na hostingach współdzielonych można komuś przełączyć locale w połowie wykonywania jego skryptu i ten ktoś nawet nie będzie o tym wiedział.
Jeśli już, to klasy do tłumaczeń powinno się opierać na nowych fajnych klasach unikodowych dostępnych od PHP 5.3, np. http://docs.php.net/manual/en/class.messageformatter.php http://docs.php.net/manual/en/class.numberformatter.php http://docs.php.net/manual/en/class.intldateformatter.php Nie są to kompletne systemy, ale zwalniają programistę z wielu upierdliwości; np. klasa MessageFormatter pozwala obsługiwać argumenty i umieszczać w tekście do wyświetlenia komendy warunkowe np. do obsługi liczby mnogiej. -------------------- Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0 |
|
|
![]()
Post
#5
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
1) No właśnie dlatego z tego względu nie "powinno" się korzystać z funkcji typu _ i twojego wrappera ponieważ powinno wystarczy wykorzystanie referencji do obiektu translacji.
2) Dlatego dzieli się tłumaczenia na tzw domeny. (podobnie masz w gettext) domena - id_ciagu Komunikaty błędów - Za krótki tekst Komunikaty błędów - Za długi tekst ... Logowanie - Błędny login i hasło itd Poza tym wykorzystanie tutaj cache byłoby rozsądne ![]() 5) To było akurat podchwytliwe aczkolwiek polecam zapoznanie się z całym działem internacjonalizacji w manualu PHP aby chociaż poznać pomysły rozwiązań. Tak gettext pobiera tłumaczenia z pliku, aczkolwiek nie widzę problemu z wygenerowaniem takowego. @Zyx o tym problemie nie słyszałem, ciekawa informacja. Rozumiem twój problem i osobiście odradzam gettext ![]() Dodatkowo pytanie ciekawostka. Jakiego autoloadera stosujesz? -------------------- |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 782 Pomógł: 153 Dołączył: 21.07.2010 Ostrzeżenie: (0%) ![]() ![]() |
---------------------------------------------------------------------------------------------------------------------------- Poprawiłem trochę kod. Wprowadziłem pewne zmiany zarówno w klasie Translation, jak i w klasie TranslationDb oraz TranslationModel. Poprawione źródła są tutaj Poniżej trochę taki skrótowy changelog:
Jutro (właściwie to dziś) jak będę w stanie to zobaczę na ten model domenowy. Poniżej krótki przykład kilku instancji obiektu Translation: Tabela i dane
Przykład użycia:
Ten post edytował everth 8.08.2010, 04:36:24 -------------------- Już mi się ani wiedzieć, ani tym bardziej myśleć nie chce.
[Think different]! |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 898 Pomógł: 80 Dołączył: 31.05.2008 Ostrzeżenie: (20%) ![]() ![]() |
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. -------------------- cojack blog - mój blog (na jakiś czas off).
"jak czegoś nie wiem, to nie myślę że wiem" - moja domena |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 01:49 |