Ich habe meine PHP-Anwendung mit allem Text auf Deutsch gestartet, dann habe ich gettext benutzt, um alle Strings zu extrahieren und ins Englische zu übersetzen.
So, jetzt habe ich eine .po-Datei mit allen msgids in Deutsch und msgstrs in Englisch. Ich mag, dass sie zu wechseln, so dass mein Quellcode, um das Englisch als msgids aus zwei Hauptgründen enthält:Switch gettext übersetzte Sprache mit Originalsprache
- Mehr Übersetzer wissen Englisch, so ist es nur angemessen, sie eine Datei mit msgids aufzuzutischen auf Englisch. Ich kann immer die Datei wechseln, bevor ich es gebe und nachdem ich es erhalte, aber naaah.
- Es würde mir helfen, Englisch Objekt & Funktionsnamen und Kommentare zu schreiben, wenn der Inhalt Text auch Englisch war. Ich würde das gerne machen, also ist das Projekt offen für andere Open-Source-Mitarbeiter (eher Englisch als Deutsch).
ich dies manuell tun könnte, und das ist die Art von Aufgabe, wo ich es zu antizipieren mir mehr Zeit nehmen, eine automatisierte Routine für sie zu schreiben (weil ich sehr schlecht mit Shell-Skripten bin), als es zu tun von Hand. Aber ich erwarte auch, jede Minute manuelle Computerarbeit zu verachten (fühlt sich an wie ein Oxymoron, richtig?), Wie ich es immer tue.
Hat jemand das schon mal gemacht? Ich dachte, das wäre ein häufiges Problem, konnte aber nichts finden. Vielen Dank im Voraus.
Probe Problem:
<title><?=_('Routinen')?></title>
#: /users/ruben/sites/v/routinen.php:43
msgid "Routinen"
msgstr "Routines"
Ich dachte, ich das Problem eingrenzen würde. Der Schalter in der .po-Datei ist kein Problem natürlich, es ist so einfach wie
preg_replace('/msgid "(.+)"\nmsgstr "(.+)"/', '/msgid "$2"\nmsgstr "$1"/', $str);
Das Problem für mich ist die Routine, die meine Projektordner Dateien für _('$msgid')
und Ersatzsucht _('msgstr')
während der .po- Parsen Datei (was wahrscheinlich nicht einmal der eleganteste Weg ist, nachdem die .po-Datei Kommentare enthält, die alle Dateipfade enthalten, wo die msgid auftritt).
Nach fooling around mit Antwort des akirk ein wenig, ich lief in einige Probleme mehr.
- Weil ich eine Mischung aus
_('xxx')
und_("xxx")
Anrufe haben, muss ich über (un) vorsichtig sein, zu entkommen.- doppelte Anführungszeichen "in msgids und msgstrs haben unescaped sein, aber die Schrägstriche gestrippt können nicht sein, weil es, dass die doppelten Anführungszeichen auch in PHP
- Einfache Anführungszeichen, wenn entwertet werden müssen entgangen waren sein kann sie In PHP werden sie ersetzt, aber dann müssen sie auch in der .po-Datei geändert werden. Glücklicherweise erscheinen einfache Anführungszeichen nur in englischem Text.
- msgids und msgstrs mehrere Zeilen haben kann, dann sehen sie aus wie dieses
msgid = ""
"line 1\n"
"line 2\n"
msgstr = ""
"line 1\n"
"line 2\n"
- Pluralformen sind natürlich im Moment übersprungen, aber in meinem Fall ist das kein Problem
- poedit möchte Strings als veraltet entfernen, die erfolgreich geschaltet scheinen und ich habe keine Ahnung, warum dies in (vielen) Fällen passiert.
Ich muss aufhören für heute Nacht daran zu arbeiten. Dennoch scheint es, dass die Verwendung des Parsers anstelle von RegExps nicht übertrieben ist.
knifflig, nicht nur müssten Sie die Einträge in den gettext-Dateien wechseln, müssten Sie auch alle Zeichenfolgen in Ihrem Code ersetzen. – markus
@tharkun: Ja natürlich, das ist was ich tun müsste, aber das scheint mir nicht so schwierig zu sein. Ich denke, ich könnte es mit einer PHP-Zeichenfolge tun, aber nicht mit der Shell. auf die einfachste Weise würde man die .po-Datei einfach nach msgids und strs durchsuchen (oder durchsuchen) und dann alle Dateien in einem Ordner nach dieser Zeichenfolge suchen und ersetzen. Ich habe den Schalter in die Post eingefügt, um das Problem einzugrenzen. – Ruben
Ich denke du bist hier auf dem richtigen Weg. Der Trick wäre, sicherzustellen, dass die RegEx, die Sie verwenden, nicht versehentlich die tatsächliche Quelle ändert. Vergessen Sie nicht, dass regEx auch einfache und doppelte Anführungszeichen für '_ (...)' verarbeiten muss. Viel Glück. –