Ich versuche einen Weg zu finden, wie Mitglieder Strings in andere Sprachen übersetzen können. Sie können hier ein Beispiel sehen: ÜBERSETZUNGS-TEST
Jemand hat empfohlen, dass ich dafür die native gettext () - Funktion von PHP verwende, anstatt wie bisher die Sprachdateien zu laden, nämlich:
%Vor%Die Zeichenfolgen sind in einer Datei enthalten, die wie folgt benannt ist: VerwaltenDPModules.english.php DreamPortal.deutsch.php usw.
Diese Dateien können wie folgt aussehen, wenn sie in einem PHP-Editor geöffnet werden und viele dieser $ txt-Variablen haben können:
%Vor%Ich verwende die folgende Funktion, um die Übersetzungen zu speichern:
%Vor%Sprachfunktion:
%Vor%Ich sehe nicht, wie gettext helfen wird. Es gibt keine Möglichkeit, den Textkatalog zu aktualisieren, ohne den Server jedes Mal neu zu starten. Vielleicht, wenn jemand eine Demo für mich erstellen kann?
Außerdem möchte es UTF-8 unterstützen. Die Daten sollten konsistent sein.
Was ist also falsch an dieser Implementierung? Warum benutze gettext? Wie kann es verwendet werden, um Übersetzungen zu verbessern, damit sie sowohl für UTF-8- als auch für Nicht-UTF-8-Sprachzeichenfolgen verwendet werden können, damit sie übersetzt werden können?
BEARBEITEN:
Bitte beachten Sie, dass die Dateien eventuell umbenannt werden müssen in: ManageDPModules.[language].php
, DreamPortal.[language].php
, usw., damit die Übersetzungen funktionieren. Also, wie würden mir Kataloge dabei helfen? Wenn Sie mögliche END-RESULT-Übersetzungen sehen möchten, können Sie ein Sprachpaket herunterladen, das sich hier befindet und öffnen Sie die Sprachdateien .german.php, um zu sehen, wie es aussehen soll, nachdem das Mitglied eine Sprache auf Dateibasis übermittelt hat. Beachten Sie, dass einige dieser Pakete UTF-8-Strings haben, andere nicht. Der Dateiname der Pakete lässt Sie dies wissen. Wäre schön, wenn ich auch UTF-8 unterstützen kann, aber das ist keine Voraussetzung. Bitte beachte, ich versuche hier keine vollständigen Pakete zu erstellen. Ich möchte nur die Sprachdatei. [Sprache] .php mit allen übersetzten Zeichenfolgen in ihnen erstellen (was mein Code bereits tut).
OK, ich werde die ENTIRE index.php-Datei dafür bereitstellen, damit Sie sehen können, was genau das ist, wenn Sie Übersetzungen machen. Hier ist die Datei index.php für diese und Sie ' Ich brauche einige englische Sprachdateien: DreamPortal.english.php , ManageDPModules.english.php und DreamHelp.english-utf8.php . Um dies sehen zu können, müssen Sie auf einen Server uploaden, index.php, ein paar Ordner erstellen, in denen index.php ist, 1 Englisch anrufen und dort einen Ordner für jede weitere gewünschte Sprache erstellen (ich habe 2 Ordner, Spanisch und Französisch), als die 3 Sprachdateien in den englischen Ordner hochzuladen. Führen Sie index.php in Ihrem Browser aus und Sie werden sehen, dass es funktioniert.
Nun, wie könnte ich gettext für Kataloge mit diesem SAME-Ansatz verwenden? Ich muss die Online-Übersetzung von Dateien ermöglichen. Ich muss PHP-Dateien der Übersetzungen im GLEICHEN Stil erstellen, dass die .english.php-Dateien mit der gleichen PREFIX sind, die vor .english.php
ist, und ich muss die Sprache innerhalb des Dateinamens auf die gleiche Sprache für den Ordner ändern Name. Online-Übersetzungen sind die einzige verfügbare Methode. Der Übersetzer muss sich NUR auf die Übersetzung der Strings konzentrieren. Sie sollten sich nicht darauf konzentrieren, Programme zu installieren, sie zu verpacken, die Dateien umzubenennen usw. usw. Das macht diesen Prozess so schmerzlos wie möglich, so dass er online durchgeführt werden kann. Und ich weiß, dass es einen Weg gibt, dies zu tun, und sogar für UTF-8-Unterstützung. Aber ich benutze die beste Methode, die ich im Moment kenne. Aber so viele von euch sind viel schlauer bei dieser Sache als ich, also bitte ich um Hilfe von euch.
Gibt es jemanden, der mir einen besseren Weg zeigen kann? Ein Beispiel wie das, das ich dir in dieser Frage gegeben habe?
Ich muss ONLINE-Übersetzungen von Übersetzern ermöglichen und möchte auch, dass es UTF-8-Dateien und nicht UTF-8-Dateien unterstützt. Ich mag die Art, wie ich sie habe Setup für den oben angegebenen Link ( ÜBERSETZUNGS-TEST ), damit der Übersetzer die Übersetzungen online machen kann und sich keine Sorgen machen muss über alles andere, und es würde automatisch die benötigten Dateien erstellen. Das wäre der gleiche wie der englische Dateiname der Sprache mit dem Ordnernamen (der die Sprache repräsentiert) nach dem ersten . (Punkt) und er muss die Erweiterung .php haben (wie in der Code verwende ich gerade). Also im Grunde brauche ich eine Anpassung des aktuellen Index.PHP, um UTF-8 und nicht UTF-8 für alle oder die meisten Sprachen zu unterstützen, und es wurde gesagt, dass die Verwendung von gettext () - und Katalogdateien dabei helfen würde.
Ich suche nach einer modifizierten Version meiner aktuellen index.php, um gettext () so zu benutzen, dass es die meisten, wenn nicht alle Sprachen und Übersetzungen unterstützt. Der REGEX, den ich für preg_replace gemacht habe, ist nicht völlig zufriedenstellend, weil er beim Speichern / Übermitteln der Übersetzungen einen Schrägstrich vor doppelten Anführungszeichen setzt. Also wäre vielleicht auch eine Verbesserung des preg_replace nötig.
Ich habe ein vollständiges Beispiel mit ACTUAL CODE zur Verfügung gestellt. Ich möchte, dass jemand dieses Beispiel ändert, mit dem CODE, den ich stattdessen GETTEXT VERWENDEN und UTF-8 unterstütze. Oder stelle mir tatsächlich eine AKTUELLE METHODE zur Verfügung, mit der ich das selbst machen kann. Nicht auf der Suche nach einer Reihe von Links, die ich alleine finden kann!
Danke!
Wenn Sie empfohlen haben, gettext zu verwenden, war es eigentlich ratsam, ein gettext- like Übersetzungssystem zu verwenden. Ihr aktueller Code ist aufgrund von mnemonischen Textangaben komplex. Und das Problem, das Sie mit den regulären Ausdrücken für die Bearbeitung bekommen haben, wird dadurch verursacht, dass Sie mit Variablen darin herumspielen. Lassen Sie mich einen alternativen Code für Übergangszwecke vorschlagen.
Die Schönheit von gettext liegt in der Verwendung einer nicht aufdringlichen API. Der Funktionsaufruf _()
ist einfach genug, um ohne viel Syntax oder Code Bloat verwendet zu werden. Es ist vorzuziehen, Dinge wie getTextTrans('ABBR_TXT_ID')
. Die Verwendung solcher mnemonischen Text-IDs ist ein weit verbreiteter Irrtum; weil es in der Praxis keine häufigen Umformulierungen gibt und _("Raw english original text.")
dem gleichen Zweck dient. Da Sie jedoch bereits über mnemonische Schlüssel verfügen, behalten Sie sie bei, wenn sie zu umfangreich sind. Dies ist nur eine Empfehlung.
Ihr wirkliches Problem ist die Verwendung von Inline-PHP-Ausdrücken zum Aufbau der Übersetzungszielzeichenfolgen. Deshalb wurden die regulären Ausdrücke für Ihren Übersetzungseditor undurchsichtig. Daher würde ich sehr empfehlen, statische Strings zu verwenden und Platzhalter bereitzustellen. Die Übersetzungsfunktion sollte damit beauftragt werden. (Mach dir keine Sorgen über Mikrooptimierung hier!) - Ich würde {$url_xy}
PHP / Smarty-Stil Platzhalter zum Beispiel verwenden:
Und eine Übersetzungsfunktion, die nach einer globalen Platzhaltertabelle oder Parametern ($ context) sucht, um folgendes zu ersetzen:
%Vor%Optimierbar. Aber auf diese Weise können Sie einen statischen mnemonic- & gt; -Text oder Englisch- & gt; -Text von Übersetzungsarrays verwenden. Sie verwenden nur statische Zeichenfolgen in Ihrem Text-Übersetzungs-Editor-Formular. Diese statischen Zeichenfolgen werden unverändert angezeigt, und Ihre Übersetzer bearbeiten den englischen Text, nicht jedoch% code%.
Daher benötigt Ihr Code für die Übersetzungsfunktion keine der komplexen regulären Ausdrücke (in diesem Fall sind sie nicht nützlich), um Strings und Inline-PHP-Variablen zu finden. Tatsächlich kann jetzt eine viel einfachere Kombination aus {$placeholders}
und include()
verwendet werden:
Dateihandling und was nicht muss natürlich angepasst werden. Aber das ist immer noch ein einfacherer Ansatz.
Außerdem können Sie als Backends zu einer der gettext-Varianten wechseln. Behalten Sie Ihre benutzerdefinierte Wrapper-Funktion var_export()
bei und verwenden Sie z. Zend_Translate als Backend. Dadurch können Sie Ihre .php $ txt = array () Übersetzungsdateien weiterverwenden (oder ich denke so) oder in die gettext-style .mo / .po-Dateien verschieben. Der Vorteil dabei ist, dass es im Gegensatz zu Homebrew-Lösungen eine reichhaltige Werkzeugunterstützung gibt.
Wie auch immer du das Zeug in deiner Hauptanwendung verwendest:
%Vor%Von den short_txt-Schlüsseln zu den englischen & gt; fremden Textübersetzungsarrays zu wechseln, wäre zuerst ratsam, aber in der Theorie würde irgendeines der Backends von der dvbs Antwort anwendbar sein. Nun haben Sie bereits gesagt, dass natives Gettext für Sie keine Option ist (für nicht-schnelle PHP-Setups ist die Speicherbeständigkeit ein Nachteil). Aber native INTL-Funktionen von PHP könnten Ihnen helfen. Insbesondere Ссылка könnte nützlicher sein als der einfältige {$ var} Ersatz-Wrapper, den ich angegeben habe Sie. Aber ich habe es nie benutzt, und ich denke Zend_Translate ist wahrscheinlich nützlicher. Insbesondere kann einer dieser Backends Ihnen Zeichensatz-Unabhängigkeit geben. Persönlich würde ich einfach bei UTF-8 bleiben, egal was. Aber gettext .mo / .po-Dateien können zum Beispiel jeweils einen eigenen Zeichensatz haben.
Warum das Rad neu erfinden? Vielleicht verstehe ich es nicht, aber ich bin mir ziemlich sicher, dass das, was du zu tun versuchst, schon einmal gemacht wurde.
Verwenden Sie einfach eine der vielen vorhandenen Lösungen.
Hier sind einige Dinge, über die Sie nachdenken sollten, wenn Sie Ihre Entscheidungen treffen:
Hier sind einige (zufällig angeordnete):
Viel Glück!
Update: Danke, El Yobo. Ich habe dies als Community-Wiki markiert, jeder ist willkommen zu bearbeiten oder mit einem anderen Projekt zu antworten, wenn er etwas anderes findet.
Tags und Links php internationalization gettext