Mehrsprachigkeit für alte PHP Anwendungen

Avatar von Thoralf

Was ist zu tun um eine alte PHP Applikation mehrsprachig zu machen?

Man kann von Hand den ganzen Code durchgehen und alle hart codierten Zeichenketten mit einer Funktion ersetzen oder aber man setzt den „Translator“ ein.

Es handelt sich um ein Kommandozeilen-Tool, das nicht unter Windows funktioniert.
Verantwortlich dafür ist die verwendete ncurses-Extension. Diese wird für die Interaktion mit den Benutzer benötigt.

Folgende Systemvoraussetzungen müssen erfüllt sein:
1. Linux/Unix System
2. PHP >= 5.2.2 mit ncurses- und Tokenizer-Modul

Optionen:
  –module , -m <Modul> mit diesem Modul wird das Ausgabeformat bestimmt
  –dir , -d [Verzeichnis] Start Verzeichnis für das Scannen. Standard ist das aktuelle Verzeichnis
  –lang , -l [Sprache] Sprache der Ausgabedatei. Standard ist ‚en‘
  –defaultDomain , -D [Domain] Name der Domain. Standard ist ‚default‘

Beispielaufruf:
php stringscanner.php -m=tmx –lang=de

Fuktionsweise:

Der Translator ist ein interaktives Tool, das die PHP-Dateien in dem Verzeichnisbaum scannt und dabei lokalisierte Dateien im angegebenen Format erstellt. Die Original-Dateien werden nicht verändert, stattdessen werden neue Dateien erstellt, die den gleichen Namen besitzen wie die Ausgangsdateien, aber die Endung .trans haben.
In den neuen *.trans Dateien sind alle markierten Zeichenketten in die Funktion MyTranslate eingebettet.
Es werden auch lokalisierte Dateien im angegebenen Format erzeugt, die etwa folgenden Dateinamen haben: Domain.Sprache.Modul.
Während des Scannens fragt der Translator jedesmal nach, wenn eine Zeichenkette gefunden wurde, ob sie lokalisiert werden soll oder nicht. Das Programm fordert dazu auf, Y oder N zu drücken. Falls man einmal die falsche Taste erwischt hat, kann man durch Drücken von B zur letzten Fundstelle zurückspringen. Das funktioniert zurück bis zur ersten Position in der PHP-Datei.

Damit nicht sämtliche Wörter als Fund deklariert werden, verwendet der Translator den PHP-Tokenizer und eine Heuristik, des Weiteren können bestimmte Verzeichnisse und Funktionsnamen ausgeschlossen werden.

Die im Moment unterstützten Ausgabeformate sind CSV und TMX. Gettext und andere sind durch den modularen Aufbau leicht hinzuzufügen.
TMX ist ein Industrie Standardformat für Übersetzungen. Siehe auch TMX (Localisation Industry Standards Association).

Das Encoding und die auszuschließenden Verzeichnisse und Funktionsnamen sind momentan nicht über Parameter setzbar. Als nächster Schritt ist deshalb die Erweiterung der Optionen geplant. Eine Option soll auch eine Konfigurationsdatei sein.

Beispiel:
.php


class ForgottenPassword extends Application
{
private $emailForm;

public function __construct()
{
parent::__construct(‚forgottenPassword‘);

$this->emailForm = new ForgottenPasswordForm();
$this->setName(‚Send me an email for a new password‘);
$this->setBody( $this->emailForm );
}

.trans


class ForgottenPassword extends Application
{
private $emailForm;

public function __construct()
{
parent::__construct(‚forgottenPassword‘);

$this->emailForm = new ForgottenPasswordForm();
$this->setName( MyTranslate(‚Send_me_an_email_for_a_new_password
‚, ‚default‘)
);
$this->setBody( $this->emailForm );
}

.tmx

<?xml version=“1.0″ encoding=“UTF-8″ ?>
<!DOCTYPE tmx SYSTEM „tmx14.dtd“>
<tmx version=“1.4″>
   <header creationtoolversion=“1.0.0″ datatype=“unknown“ segtype=“sentence“ adminlang=“en-us“ srclang=“en“ o-tmf=“abc“ creationtool=“XYZTool“ >
   </header>
   <body>
     <tu tuid=’Send_me_an_email_for_a_new_password‘>
       <tuv xml:lang=“en“><seg>Send me an email for a new password</seg></tuv>
     </tu>
     …
     <tu tuid=’I_have_forgotten_my_password‘>
       <tuv xml:lang=“en“><seg>I have forgotten my password</seg></tuv>
     </tu>
   </body>
</tmx>

Avatar von Thoralf

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert


Für das Handling unseres Newsletters nutzen wir den Dienst HubSpot. Mehr Informationen, insbesondere auch zu Deinem Widerrufsrecht, kannst Du jederzeit unserer Datenschutzerklärung entnehmen.