2009-10-25 7 views
5

Szukam zgodnego z normami sposobu przechowywania treści wielojęzycznych dla aplikacji sieci Web. Do tej pory używałem własnych funkcji "translate()", które odczytują dane z pliku lub tabeli słownikowej w bazie danych. Jednak aktualizowanie słowników w tabeli bazy danych jest bardzo uciążliwe, jeśli pracujesz z różnymi kopiami aplikacji internetowej.i18n z gettext ale bez problemów z locale?

Lubię gettext, ponieważ istnieje wiele dostępnych na to narzędzie. Jednak tworzę aplikacje dla różnych platform. Absolutnie nie mam ochoty radzić sobie z bzdurnymi sposobami setlocale() i małżonków - mianowicie z dziesiątkami różnych wariantów ustawień locale różniących się od systemu do systemu, które trzeba zapewnić, aby działało. Nigdy. Mam zestaw języków - say de, en i es - i chcę załadować odpowiedni słownik i pracować z _() nie dotykając raz setlocale() lub bindtexdomain().

Czy jest to w jakiś sposób możliwe za pomocą gettext? Czy ktoś może znać inne proste, małe, szybkie (!) Rozwiązanie i18n dla PHP, które może pracować z plikami .po/.mo, najlepiej bez konieczności rozszerzenia PHP?

+2

Nie jest praktycznie możliwe używanie gettext w PHP bez użycia rozszerzenia gettext, ale nie martw się, jest to dość powszechne/standardowe rozszerzenie PHP i większość instalacji ma już aktywowane. – sorin

+1

@Sorin: Możliwe jest, że istnieje natywna implementacja PHP z większością, jeśli nie wszystkimi, funkcjami gettext. –

+0

@votingmeisfree wordpress i cakephp, żeby wymienić tylko kilka, użyj plików po i mo bez użycia implementacji gettext. Otwierają plik bezpośrednio. – T0xicCode

Odpowiedz

2
+0

I nie wymaga rozszerzenia gettext :) Mają także adaptery dla bardziej przyjaznych źródeł - tablica, xml, csv itp. –

+0

Dzięki, to wygląda interesująco. Szukałem i Zend przez jakiś czas, a może spróbuję. Wciąż wolałbym lekkie, samodzielne rozwiązanie, o ile ktoś je zna. –

+0

Och, jest bardziej lekki, niż wygląda. Możesz używać tylko klas, których potrzebujesz: dla Zend_Translate potrzebujesz tylko Zend_Translate, Zend_Locale, Zend_Loader i Zend_Exception (może się mylę i będziesz potrzebować mniej lub więcej, po prostu spróbuj) –

3

Ta metoda powinna działać nawet przy nietypowych lokalizacjach:

$locale = 'someWeirdLocale'; 

putenv('LC_MESSAGES=' . $locale); 
bindtextdomain('domain', './locale'); 
textdomain('domain'); 

Enjoy!

+1

Nie działa w systemie Windows 7 - PHP5 5.3.0 – Blaise

Powiązane problemy