Durante il tentativo di usare la GNU xgettext programma di utilità per estrarre le stringhe dal codice sorgente mi sono imbattuto in alcuni problemi con l'idea pgettext() di cui sopra.
All'inizio sembra che funzionerà. Utilizzando l'argomento --keyword posso eseguire l'utilità xgettext per estrarre queste contesto e messaggi stringhe dallo script di test:
echo pgettext('Letter','mail');
echo pgettext('Letter','character');
e ottenere un file pot con i risultati attesi:
...
msgctxt "mail"
msgid "Letter"
msgstr ""
msgctxt "character"
msgid "Letter"
msgstr ""
...
Ma le funzioni di PHP * gettext() non mi permettono di passare le stringhe di contesto - quindi non posso ottenere il testo tradotto.
Essere in grado di utilizzare le utilità GNU rende le cose più facili per me, quindi la soluzione per me è stato quello di usare qualcosa di simile:
function _c($txt) { return gettext($txt); }
echo "<P>", _c("mail:Letter"), "\n";
echo "<P>", _c("character:Letter"), "\n";
Ora avvio l'utilità di xgettext
xgettext ... --keyword="_c:1" ...
contro il mio script di test. Questo genera un file .pot con semplici msgstr di cui si può accedere tramite la funzione PHP gettext():
...
msgid "mail:Letter"
...
msgid "character:Letter"
...
Poi ho copiare il modello pot alle varie cartelle LC_MESSAGE come.file po e modificare i testi tradotti:
...
msgid "mail:Letter"
msgstr "Russian outputs for Mail: \"письмо\""
msgid "character:Letter"
msgstr "Russian outputs for Letter of the Alphabet: \"буква\""
...
E il mio script di test funziona:
...
Russian outputs for Mail: "письмо"
Russian outputs for Letter of the Alphabet: "буква"
...
La documentazione per xgettext è qui: http://www.gnu.org/software/gettext/manual/html_node/xgettext-Invocation.html
(Ho ancora un problema con testo poedit e "plurale" ma questo è un altro argomento.)
La risposta sembra essere contesti * * http: //www.gnu .org/software/gettext/manual/html_node/Contexts.html Non sai come vengono utilizzati in un contesto PHP anche se –
correlati ?: http://www.php.net/manual/en/book.gettext.php# 89975 –