2009-10-25 18 views
5

Sto cercando un modo conforme agli standard per archiviare contenuti multilingue per un'applicazione Web. Fino ad ora, ho utilizzato le mie funzioni "translate()" che leggono i dati da un file o da una tabella del dizionario in un database. Tuttavia, mantenere i dizionari aggiornati in una tabella di database è molto complicato se si lavora con diverse copie dell'app Web.i18n con gettext ma senza problemi locali?

Mi piace gettext perché è disponibile una moltitudine di strumenti. Tuttavia, sviluppo applicazioni per diverse piattaforme. Non sono assolutamente disposto a gestire i modi scadenti di setlocale() e di consorti, vale a dire dozzine di diverse varianti di stringhe locali diverse da sistema a sistema che è necessario fornire per farlo funzionare. Mai e poi mai. Ho un set di linguaggi - ad esempio de, en ed es - e voglio caricare il dizionario appropriato e lavorare con _() senza toccare setlocale() o bindtexdomain() una volta.

È in qualche modo possibile utilizzare gettext? Oppure qualcuno conosce un'altra soluzione semplice, piccola, veloce (!) I18n per PHP che può funzionare con file .po/.mo, preferibilmente senza richiedere un'estensione PHP?

+2

Non è praticamente possibile utilizzare gettext in PHP senza utilizzare l'estensione gettext, ma non preoccupatevi, questa è un'estensione di PHP comune/standard e la maggior parte dell'installazione l'ha già attivata. – sorin

+1

@Sorin: È possibile, esiste un'implementazione nativa di PHP con la maggior parte, se non tutte, le funzioni gettext. –

+0

@votingmeisfree wordpress e cakephp, per citarne alcuni, usa i file po e mo senza usare l'implementazione gettext. Aprono il file direttamente. – T0xicCode

risposta

2
+0

E non richiede l'estensione gettext :) Hanno anche adattatori per fonti più amichevoli - array, xml, csv ecc. –

+0

Grazie, questo sembra interessante. Ho cercato e Zend per un po 'e forse lo proverò. Preferirei comunque una soluzione stand-alone leggera, se qualcuno ne conosce uno. –

+0

Oh, è più leggero di quanto sembri. Puoi utilizzare solo le classi di cui hai bisogno: per Zend_Translate, hai bisogno solo di Zend_Translate, Zend_Locale, Zend_Loader e Zend_Exception (forse ho sbagliato e avrai bisogno di più o meno, basta provarlo) –

3

Questo metodo dovrebbe funzionare anche con i locali non standard:

$locale = 'someWeirdLocale'; 

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

Enjoy!

+1

Non funziona su Windows 7 - PHP5 5.3.0 – Blaise