Ho avviato la mia applicazione PHP con tutto il testo in tedesco, quindi ho usato gettext per estrarre tutte le stringhe e tradurle in inglese.
Quindi, ora ho un file .po con tutti i msgids in tedesco e msgstrs in inglese. Voglio cambiare loro, in modo che il mio codice sorgente contiene l'inglese come msgid per due motivi principali:Cambia lingua tradotta gettext con la lingua originale
- Più traduttori conoscere l'inglese, quindi è solo opportuno servirli su un file con msgid in inglese. I potrebbe passare sempre il file prima di darlo e dopo averlo ricevuto, ma naaah.
- Sarebbe utile scrivere nomi di funzioni e commenti degli oggetti inglesi & se il testo del contenuto era anche inglese. Mi piacerebbe farlo, quindi il progetto è più aperto ad altri collaboratori Open Source (è più probabile che conoscano l'inglese che il tedesco).
ho potuto fare questo manualmente e questo è il tipo di operazione in cui prevedo che mi ci vorrà più tempo per scrivere una routine automatizzate per esso (perché io sono molto male con gli script di shell) di farlo a mano. Ma prevedo anche di disprezzare ogni minuto di lavoro manuale del computer (mi sembra un ossimoro, giusto?) Come faccio sempre.
Qualcuno l'ha già fatto? Ho pensato che sarebbe stato un problema comune, ma non ho trovato nulla. Molte grazie in anticipo.
Problema Esempio:
<title><?=_('Routinen')?></title>
#: /users/ruben/sites/v/routinen.php:43
msgid "Routinen"
msgstr "Routines"
ho pensato di circoscrivere il problema. L'interruttore nel .po file è alcun problema, naturalmente, è così semplice come
preg_replace('/msgid "(.+)"\nmsgstr "(.+)"/', '/msgid "$2"\nmsgstr "$1"/', $str);
Il problema per me è la routine che cerca i miei file cartella del progetto per _('$msgid')
e sostituti _('msgstr')
durante l'analisi della .po- file (che probabilmente non è nemmeno il modo più elegante, dopo tutto il file .po contiene commenti che contengono tutti i percorsi dei file in cui si verifica msgid).
Dopo fooling around con la risposta di akirk un po ', mi sono imbattuto in qualche problema in più.
- Perché ho un misto di
_('xxx')
e_("xxx")
chiamate, devo stare attento a (in) fuga.- virgolette doppie "msgid e msgstrs devono essere escape, ma i tagli non possono essere rimossi, perché può essere che il doppio citazione è stata anche sfuggito in PHP
- citazioni singole devono essere sfuggito quando sono sostituiti in PHP, ma poi devono essere cambiati anche nel file .po. Fortunatamente per me, le virgolette singole appaiono solo nel testo inglese.
- msgid e msgstrs possono avere più linee, poi simile a questa
msgid = ""
"line 1\n"
"line 2\n"
msgstr = ""
"line 1\n"
"line 2\n"
- forme plurali sono naturalmente saltato in questo momento, ma nel mio caso questo non è un problema
- poedit vuole rimuovere stringhe come obsolete che sembrano scambiate con successo e non ho idea del perché questo avvenga in (molti) casi.
Dovrò smettere di lavorare su questo per stanotte. Tuttavia sembra che utilizzare il parser anziché RegExps non sia eccessivo.
difficile, non solo è necessario passare le voci nei file gettext, sarà anche necessario sostituire tutte le stringhe nel codice. – markus
@tharkun: sì certo, è quello che dovrei fare, ma non mi sembra così complicato. Penso che potrei farlo con una stringa PHP, ma non con la shell. nel modo più semplice si dovrebbe solo analizzare (o cercare) il file .po per msgids e strs e quindi cercare e sostituire tutti i file in una cartella per quella stringa. Ho incluso l'interruttore nel post, per restringere il problema. – Ruben
Penso che tu sia sulla strada giusta qui. Il trucco sarebbe quello di assicurarsi che il regEx che si utilizza non cambi inavvertitamente la sorgente effettiva. Non dimenticare che regEx dovrebbe anche gestire le chiamate a virgolette singole e doppie a '_ (...)'. In bocca al lupo. –