CakePHP bietet die Möglichkeit Anwendungen mit überschaubarem Aufwand zu übersetzen, indem man sich .pot-Dateien generieren lässt. Diese lassen sich dann mit Standardwerkzeugen wie PoEdit verwenden, um die .po-Dateien mit den jeweiligen Übersetzungen zu erzeugen.
Um alle verwendeten Zeichenketten innerhalb eines Projektes in die entsprechenden .pot-Dateien zu bringen, bietet CakePHP eine eigene Shell an, die sich wie folgt aus dem app-Verzeichnis heraus aufrufen lässt:
./Console/cake i18n extract
Dieser Aufruf erfasst leider gelegentlich nicht alle Strings, die man innerhalb der Übersetzungsfunktion __() benutzt hat.
Eine Ursache hierfür kann die Art sein, wie die PHP-Codestücke in den Views eingebunden sind. Es ist hier nicht möglich die Kurzform <? ?> zu verwenden, sondern für diejenigen Abschnitte, die übersetzungspflichtige Texte enthalten, muss die ausführliche Form (<?php ?>) der PHP-Tags gewählt werden. Diese Einschränkung gilt auch, wenn die kurzen Tags bei der Codeausführung (auch über CakePHP) problemlos verarbeitet werden.
Die Lösung ist also, den Code wie folgt anzupassen. Aus:
<? echo __('Überschrift'); ?>
wird:
<?php echo __('Überschrift'); ?>
Abschnitte, die keine Übersetzung benötigen, können nach wie vor mit der PHP-Kurzform definiert werden, wenn PHP grundsätzlich entsprechend konfiguriert ist.