Sto guardando le opzioni per internazionalizzare un progetto open source:Utilizzare PHP Gettext senza dover installare locali
Gettext, che tutti sembrano consigliare, a quanto pare ha bisogno di locali di essere "installato sul proprio sistema " da essere usato. Vedi questo note sul manuale PHP, che riflette esattamente la mia situazione. Questo SO question chiede anche lo stesso problema. Questo non è adatto per un progetto open source perché non posso fidarmi che gli utenti finali abbiano le localizzazioni appropriate installate sul loro sistema. Inoltre, è molto strano che devi installare local solo per usare le stringhe che hai tradotto (IMO).
Zend_Translate è consigliato anche a gettext a volte, ma non sto utilizzando il framework Zend quindi non penso che sia un'opzione per me. Alcune persone hanno detto che puoi dividerlo dal framework Zend, ma non avrei idea di come. Se qualcuno può dirmi di quali file ho bisogno (ho scaricato un tarball del framework Zend) per scegliere, sarei aperto all'utilizzo di Zend_Translate.
Array. Questo è quello che sto facendo ora, ma non è l'ideale perché:
- Utilizzerà molta memoria per definire ogni traduzione, quando la maggior parte non verrà utilizzata dalla pagina corrente.
- Sto riscontrando problemi con la duplicazione delle chiavi nell'array, che è già diventato 1000 righe di codice e non ho ancora aggiunto nulla ...
- Significa che i non programmatori non possono realmente tradurre , mentre POEDIT è lo standard che tutti si aspettano di usare.
Posso in qualche modo di leggere i file senza .mo
Gettext o Zend_Translate, o devo usare Gettext? In tal caso, come posso far funzionare tutte le impostazioni locali, come nella domanda che ho collegato sopra?
MODIFICA: Ora desidero utilizzare Zend_Translate. Ho solo bisogno di capire quali file ho bisogno (sarebbe bello se potessero essere combinati in un unico file) - Non voglio l'intero Zend Framework nel mio progetto.
Aggiornamento: ero curioso di vedere come grande progetti open source di gestire i18n:
- Moodle utilizza arrays.
- Drupal sembra utilizzare arrays, with a database fallback. Eseguono anche
setlocale('C')
per ottenere un locale generico e aggirare l'intero messsetlocale
. - Wordpress utilizza heaps of their own functions per i18n, sebbene in basso utilizzi gettext.
Quindi nessuno di questi tre progetti casuali usa Zend_Translate, né direttamente, per quanto posso vedere.
Forse è una buona idea usare la locale C
, memorizzare il nome della lingua nel nome del dominio del testo e andare da lì.
Quindi, ecco quanto ho con quel:
$lang = 'de'; //debug
setlocale(LC_ALL, 'C');
bindtextdomain('default', PATH . "/locale/$lang");
bind_textdomain_codeset('default', 'UTF-8');
textdomain('default');
var_dump(file_exists(PATH . "/locale/$lang/C/LC_MESSAGES/default.mo")); //bool(true)
Ma io ancora appena ottenere la stringa inglese, anche se ho usato poEdit, msgfmt ecc per rendere l'appropriato File. Ho anche provato a riavviare Apache.
Installare le impostazioni locali? Cosa intendi? Devi solo includere i file '.mo' specifici e impostare le impostazioni internazionali appropriate. Non è davvero così spaventoso come lo si può essere. – vanneto
Sarebbe bello se fosse così, ma non penso che sia ... vedi il link in cima alla domanda. [Note dell'utente] (http://www.php.net/manual/en/book.gettext.php#91187) sul manuale PHP anche dire questo, e che è necessario eseguire 'locale -a' per vedere quali impostazioni locali sono disponibili per l'uso (ed esegui 'sudo apt-get install language-pack-langcode-base' per installare language pack aggiuntivi). Anche i miei test riflettono questo. Questo non è adatto per un progetto open source in quanto non posso aspettarmi che gli utenti lo facciano. – stackunderflow
Chiave semplice => gli array di valori sono appena sufficienti per un sistema di traduzione completo. Supportano i plurali? Contesto? Categorie? Domini? Commenti? Queste sono tutte caratteristiche che dovresti * usare *, forse non lo sai ancora. Se sei contrario a gettext, dai un colpo a Zend_Translate. Le tue ragioni contro di essa sono in realtà non-ragioni. – deceze