Frage

In unseren JS-Dateien verwenden wir das folgende Format für Gettext Übersetzung:

var str1 = '!t[The text that should be translated]';
var str2 = '!t[Some more text]';

Diese JS-Dateien werden mit PHP und die analysierte Zeichenfolge analysiert erhalten über Zend Framework Zend_Translate übersetzt. Der erzeugte JS sieht wie folgt aus:

var str1 = 'The text that should be translated';
var str2 = 'Some more text';

Saiten zu extrahieren übersetzt und für die Übersetzung unserer PHP-Dateien werden wir Poedit verwenden, es funktioniert sehr gut.
Gibt es einen Weg, um die Saiten zu analysieren aus '!t[...]' übersetzt werden mit Poedit?

Was würde das Problem lösen, ist so etwas wie ein Poedit Parser, der regex basiert. Gibt es einen solchen Parser?

Als Alternative könnten wir einen Quellcode-Parser basiert auf xgettext mit der Sprache PHP als Parameter definieren (Sie müssen es tun, weil xgettext nicht über Js Dateien nicht kennt und es behandelt sie eine C-Dateien). Dann benutzen wir das folgende Format in unseren JS-Dateien:

var str1 = '<?=_t("The text that should be translated")?>';
var str2 = '<?=_t("Some more text")?>';

Unnötig zu sagen, es ist wirklich uncool Code zu verwenden, die alle über den Ort wie PHP sieht nur in der Lage sein, die Saiten mit Poedit zu analysieren.

War es hilfreich?

Lösung

Ein regulärer Ausdruck, die Saiten Spiele

 $translated = preg_replace('/[\'"]\!t\[(.+)\][\'"]/e', 'translate_function('\\2')', $str);

Ich weiß nicht, ob die \ 2 sollte 3 durch \ 1 oder \ ersetzt wird, ist es, Sie Lösung das „e“ Modifikator vom PCRE Regex-Engine zur Verfügung gestellt.

Andere Tipps

Poedit und xgettext unterstützen jetzt JavaScript (Ehrlich gesagt, ich weiß nicht, ob es der Fall im Jahr 2009 war, aber ich glaube, es war nicht), aber sie haben nicht Stringliterale mit benutzerdefinierter Markup in ihnen unterstützen. So können Sie immer noch nicht extrahieren aus

var str1 = '!t[The text that should be translated]';

Sie können jedoch mit einer Hilfsfunktion leicht extrahieren:

var str1 = t('The text that should be translated');

, wenn Sie nur t als Schlüsselwort in Poedit hinzuzufügen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top