7 days of WordPress plugins, themes & templates - for free!* Unlimited asset downloads! Start 7-Day Free Trial
Advertisement
  1. Code
  2. APIs

Lokalisieren Sie Ihre Webanwendung für jedes Land mit der Google Translate-API

Scroll to top
Read Time: 12 mins

German (Deutsch) translation by Wei Zhang (you can also view the original English article)

Final product imageFinal product imageFinal product image
What You'll Be Creating

In meinem Tutorial Lokalisierung mit I18n für das Erstellen Ihres Startups mit PHP-Serie habe ich spanischen Beispielcode erstellt, indem Sie Textzeichenfolgen in Google Translate ausschneiden und einfügen. Ich begann mich zu fragen, ob ich die Google Translate API mit dem I18n-Ressourcenextraktionsskript des Yii Framework integrieren könnte, um die Übersetzung für eine Reihe von Ländern zu automatisieren. Ich habe im Yii-Forum eine Feature-Anfrage gestellt und dann entschieden, ob ich die Funktion selbst erstellen kann.

In diesem Tutorial werde ich Sie durch meine Erweiterungen des Yii I18n-Extraktskripts führen, die genau dies tun. Ich zeige Ihnen, wie Sie meine Startanwendung Meeting Planner in eine Handvoll Sprachen übersetzen.

Beachten Sie, dass Google Translate nicht perfekt ist und sich nicht mit Problemen im Zusammenhang mit Zeit- und Datumsformaten und Währungen befasst. Für eine schnelle und kostengünstige (kostenlose) Möglichkeit, Standardübersetzungen für Ihre Webanwendung in mehr als 50 Sprachen zu erstellen, ist dies eine ideale Lösung.

Zum Beispiel ist hier ein auffälligerer Fehler aufgefallen, auf den ich beim Testen gestoßen bin - zum Glück sind dies selten:

Wenn Sie einen professionelleren Ansatz benötigen, wies mich ein Freund auf einen kostenpflichtigen Dienst zur Verwaltung der Lokalisierung in Apps, Transifex, hin. Ich habe es selbst nicht überprüft, aber es sieht faszinierend aus.

Mit Google Translate arbeiten

Welche Sprachen unterstützt es?

Google Translate bietet Übersetzungsdienste für 64 Sprachen an, darunter Schwedisch, aber leider nicht Schwedisch.

Hier finden Sie eine Auswahl der von Google unterstützten Sprachen. Die vollständige Liste finden Sie hier:

Google Translate List of Languages SupportedGoogle Translate List of Languages SupportedGoogle Translate List of Languages Supported

Mit der Google Translate-API sprechen

Ich habe zwei Composer-Bibliotheken für die Arbeit mit der Google Translator-API in PHP gefunden:

Ich habe Velijanashvili zuerst gefunden, es ist also das, was ich in diesem Tutorial verwendet habe. Es nutzt Google Translate über seine kostenlose RESTful-Weboberfläche, sodass Sie keinen API-Schlüssel benötigen. Wenn Sie jedoch über eine große Ressourcenbibliothek verfügen oder viele Sprachen übersetzen möchten, sollten Sie Tillotson's integrieren, da es vollständig über Google Keys in den kostenpflichtigen Dienst von Google Translate integriert ist.

Für dieses Tutorial baue ich auf die Codebase der PHP-Serie zum Erstellen Ihres Startups auf. Um die Google Translate-Bibliothek von Velijanashvili zu installieren, geben Sie einfach Folgendes ein:

Hier ist ein Beispielcode, um aus dem Englischen ins Spanische zu übersetzen:

Es sollte ausgeben:

hola mundo

Extending Yii2's I18n Message/Extract Script

Wie der I18n-Support von Yii2 heute funktioniert

Zu diesem Zeitpunkt möchten Sie vielleicht das Lernprogramm Lokalisierung mit I18n überprüfen, in dem erläutert wird, wie Sie Nachrichtenzeichenfolgen für Ihre erforderlichen Sprachübersetzungen extrahieren.

Sie können den Gii-Code-Generator von Yii verwenden, um Modelle und CRUD-Code zu generieren, der automatisch die Unterstützung von I18n integriert. Jeder String im Code wird durch einen Funktionsaufruf wie ersetzt Yii::t('category','text string to translate');

Yii bietet einen Konsolenbefehl message / extract, der alle diese Funktionsaufrufe in Ihrer Anwendung findet und eine Verzeichnisstruktur der Dateien nach Sprache und Kategorie für die Übersetzung all dieser Zeichenfolgen erstellt.

Hier eine Beispiel-String-Datei für Deutsch:

Hier ein Beispiel für die Verzeichnispfade:

Yii I18n Directory Structure For Message FilesYii I18n Directory Structure For Message FilesYii I18n Directory Structure For Message Files

Nachricht erweitern / extrahieren für Google Translate

Ich entschied mich für das Erstellen eines Ersatzskripts mit dem Namen message/google_extract, mit dem Google Translate aufgerufen wird, wenn ein String übersetzt werden muss.

Verhindern, dass beschädigter Code Token übersetzt

Da I18n Parametermarken in geschwungenen geschweiften Klammern für Variablenwerte integriert, sind mir sofort einige Probleme aufgefallen. Hier sind zum Beispiel einige I18n-Zeichenfolgen, die Token und verschachtelte Token enthalten:

Die Google Translate-API verfügt nicht über einen Parameter zum Ignorieren von Token wie diesen in diesem Formular. Wir können diese jedoch nicht übersetzen, da sie Variablennamen und Formatzeichenfolgen im Code entsprechen.

Es schien mir nicht, dass ein regulärer Ausdruck das lösen könnte, wenn übersetzbare Zeichenketten und Marken gemeinsam vorhanden waren. Es ist wahrscheinlich, dass die Leser eine effizientere Lösung haben, als ich für die Lösung dieses Problems gefunden habe. Wenn Ihnen eines klar ist, schreiben Sie es in die Kommentare.

Ich habe mich entschieden, die Saiten nach Zeichen zu scannen und die Verschachtelung von geschweiften Klammern zu verfolgen. Ich gebe als erster zu, dass es vielleicht einen besseren Weg gibt. Hier ist meine Funktion parse_safe_translate():

Es konvertiert einen I18n-String in ein Array von Elementen, die in übersetzbare und nicht übersetzbare Elemente unterteilt sind. Zum Beispiel dieser Code:

Erzeugt diese Ausgabe:

Immer wenn der Extraktionsprozess eine zu übersetzende neue Zeichenfolge identifiziert, teilt er die Zeichenfolge in diese Teile auf und ruft die Google Translate-API für jede übersetzbare Zeichenfolge auf, z. Eine, die nicht mit einer linken geschweiften Klammer beginnt. Anschließend werden diese Übersetzungen mit den tokenisierten Zeichenfolgen zu einer einzigen Zeichenfolge zusammengefasst.

Übersetzung eines Token-Strings mit Google Translate

Hier ist die Funktion getGoogleTranslation() für einen String und eine Zielsprache. Die Ausgangssprache wird durch Yii::$app->language festgelegt.

Ich fand, dass die Kombination dieser Ansätze in meinen Tests fast perfekt funktionierte.

Anpassen von Yiis Nachricht / Auszug

Die I18n-Implementierung von Yii unterstützt das Laden von Ressourcenzeichenfolgen aus .PO-Dateien, .PHP-Dateien (die ich verwende) und der Datenbank. Für dieses Tutorial habe ich Message / Extract für die PHP-Dateigeneration angepasst.

Ich habe die message/ extract in /console/controllers/TranslateController.php kopiert und erweitert. Aufgrund der strengen Regeln von PHP 5.6.x habe ich die Funktionsnamen für saveMessagesToPHP in saveMessagesToPHPEnhanced und saveMessagesCategoryToPHP in saveMessagesCategoryToPHPEnhanced geändert.

Hier ist die saveMessagesToPHPEnhanced() - Funktion:

Es ruft die saveMessagesCategoryToPHP-Funktion auf:

Leider ist der ursprüngliche Message / Extract-Code nicht kommentiert. Es gibt zwar einige weitere Verbesserungen, aber ich habe hier einfach einen Aufruf der Google Translate API hinzugefügt:

Und ich habe einen Parameter ($force=true) hinzugefügt, um die Neuerstellung der Nachrichtendateien zu erzwingen:

Message Planner übersetzen

Die Tests wurden abgeschlossen und ich war begeistert, Message Planner in weitere Sprachen zu übersetzen. Zuerst fügen wir die neuen Sprachübersetzungen der Datei /console/config/i18n.php hinzu:

Wenn Sie eine breitere Sprachunterstützung benötigen oder eine größere Anzahl von zu übersetzenden Zeichenfolgen benötigen, möchten Sie möglicherweise zu Travis Tillotsons Google Translation Client und einem kostenpflichtigen API-Zugriff wechseln.

Dann fügte ich die Übersetzungszeichenfolgen /frontend/views/layouts/main.php und /frontend/views/site/index.php hinzu, um die Übersetzung der Startseite zu demonstrieren. Da diese Seiten nicht von Yiis Gii-Code-Generator generiert werden, wurden die Textzeichenfolgen in reinem HTML-Code gelassen. Hier ist ein Beispiel, wie sie jetzt aussehen:

So sieht die Homepage auf Englisch aus:

Meeting Planner English Home PageMeeting Planner English Home PageMeeting Planner English Home Page

Dann lief ich google_extract:

Hinweis: Stellen Sie dabei sicher, dass die Anwendungssprache auf Ihre Standardsprache eingestellt ist, z. Englisch. Diese Einstellung befindet sich in /common/config/main.php:

Ich stellte fest, dass es notwendig war, google_extract einmal auszuführen, um die Vorlage für die ursprüngliche Nachrichtendatei zu erstellen, und ein zweites Mal, um die Aufrufe von Google Translate einzuleiten.

Dann kann ich die Spracheinstellung in /common/config/main.php ändern, um jede Übersetzung anzuzeigen. Die Ergebnisse sind ziemlich unglaublich für etwas, das so schnell generiert werden kann.

Hier ist die Startseite auf Chinesisch:

Meeting Planner Chinese Home PageMeeting Planner Chinese Home PageMeeting Planner Chinese Home Page

Hier ist die Homepage auf Arabisch:

Meeting Planner Arabic Home PageMeeting Planner Arabic Home PageMeeting Planner Arabic Home Page

Hier ist die Startseite auf Japanisch:

Meeting Planner Japanese Home PageMeeting Planner Japanese Home PageMeeting Planner Japanese Home Page

Hier ist die Homepage auf Jiddisch:

Meeting Planner Yiddish Home PageMeeting Planner Yiddish Home PageMeeting Planner Yiddish Home Page

Hier ist die Startseite in deutscher Sprache:

Meeting Planner German Home PageMeeting Planner German Home PageMeeting Planner German Home Page

Was kommt als nächstes?

Ich hoffe, dir hat dieses Tutorial gefallen. Es hat Spaß gemacht, etwas zu schreiben, das die Reichweite meiner Meeting Planner-Anwendung so stark beeinflusste. Wenn Sie mehr über Meeting Planner erfahren möchten, finden Sie in der Serie "Erstellen Sie Ihr Startup mit PHP" die nächsten Tutorials. Es gibt viele lustige Features.

Bitte zögern Sie nicht, Ihre Fragen und Kommentare unten hinzuzufügen. Ich nehme generell an den Diskussionen teil. Sie können mich auch auf Twitter @reifman erreichen oder mich direkt per E-Mail kontaktieren.

ähnliche Links

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.