Frage

Ich werde an einem Projekt zu arbeiten, wo eine ziemlich große web-app optimiert, um Griff verschiedenen Sprachen.Läuft das Ding mit einer hand in Handarbeit PHP-code, aber es ist ziemlich sauber.

Ich Frage mich, was wäre der beste Weg, dies zu tun?

  1. Macht was eigenes, versuchen zu passen der eigentlichen Architektur.

  2. Umschreiben einen guten Teil davon mit einem framework (z.B. Symfony), das i18n für mich?

Für option 1, wo Lagere ich die i18n-Daten?*.po, xliff, Reine DB?

Ich dachte über eine alternative:mit Symfony nur für die übersetzung, aber die Einstellung der Steuerung um die website zu laden, wie es bereits ist.Schnell, aber schmutzig.Auf der anderen Seite ermöglicht es uns, die nächste Modifikation, die sich langsam zu voller Symfony:diese Website ist wirklich ein guter Kandidat dafür.

Aber vielleicht gibt es einige eigenständige übersetzungs-engines, wäre das besser tun, als eine ganze web-framework.Es ist ein bisschen wie mit einer Panzerfaust um eine fliege zu töten...

War es hilfreich?

Lösung

Es gibt eine Reihe von Möglichkeiten, dies zu bewältigen. Keiner von ihnen „der beste Weg“ und alle von ihnen mit den Problemen, die kurzfristig oder langfristig. Das allererste, was zu sagen ist, dass mehrsprachige Websites sind nicht einfach, Übersetzer und nette Leute, aber schwer zu handhaben und die meisten Programmierer sehen das Problem als ein technisches nur einen. Es gibt auch eine andere Dimension, nicht in den Anwendungsbereich dieser Antwort, ob Sie übersetzen oder zu lokalisieren. Dies beinhaltet bei den Zielgruppen kulturellen mores sucht und dann Schneiderei Sprache, Stil, Layout, Farbe, Schriftart etc. zu dieser Kultur. Schließlich verwenden Sie keine MT, Maschinelle Übersetzung, für etwas ernst oder wenn es braucht genaue und seine beim Erwerb Übersetzer sicherzustellen, dass sie aus einer Fremdsprache in ihre Muttersprache übersetzen, was bedeutet, dass sie alle Nuancen der Zielsprache zu verstehen.

Richtig. Lösungen. Auf der Grundlage, dass Sie nicht wollen, die Seite dann einfach klonen die Website, die Sie neu schreiben und die Kopien an die Zielsprache übersetzen. die Code-Basis unter der Annahme stabiler Sie eine VCS keine Code-Änderungen verwalten können. Sie können einzelne Teile der Website optimieren die Zielsprache, zum Beispiel Französisch Text ist im Durchschnitt 30% größer ist als der entsprechende englische Text so mit einem Standort liefern das heißt, Sie können (werden) haben Formatierungsprobleme und müssen tauschen ein passen verschiedene CSS-Datei in und auf der Sprache aus, abhängig. Es könnte eine klobig Weise scheinen, es zu tun, aber dann, wie lange sind die Standorte existieren zu gehen? Der Verwaltungsaufwand es auf diese Art und Weise zu tun, kann gut sein, weniger als andere Optionen.

Zweiter Weg ohne Wiederaufbau. Ersetzen Sie alle Inhalte in der aktuellen Website mit Tags und setzen Sie dann die andere Sprache in Datei oder DB-Tabellen, schnuppern die Benutzer die gewünschte Sprache (tun Sie Benutzer haben registriert, die eine Vorliebe machen können oder wollen Sie das Browser-Sprache-Tag erhalten möchten, oder ist es geht URL dot-com-Punkt-fr, Punkt-de sein, die die Wahl treffen) und dann die Tags mit der Zielsprache ersetzen. Dann müssen Sie separat die Größenprobleme und das Bild Probleme lösen. Diese Lösung ist in Kraft, wenn Frameworks wie Symfony und Zend tun l10n zu implementieren.

Dann könnte man mit einem Rahmen oder mit gettext wieder aufbauen und möglicherweise eine sauberere Lösung hat aber nicht vergessen, Frameworks entwickelt wurden andere Probleme zu lösen, nicht Übersetzung und die Übersetzung Komponente in den Rahmen kam als Teillösung nicht die vollen.

Das große Problem bei allen Lösungen ist die laufende Wartung. Denn nicht nur haben Sie eine Code-Basis, sondern auch Basen in mehreren Sprachen zu halten. Es sei denn, Sie alle in einer Lösung ist wirklich klug und effektiv dann ständige Aufgabe wird schwierig sein.

Andere Tipps

Arbeiten mit Sprachdateien.

  1. Ersetzen Sie jede Textzeichenfolge durch eine Variable
  2. Erstellen Sie eine Sprachdatei pro Sprache und darin jede Variable mit ihrem entsprechenden Text definieren. (French.inc, dutch.inc ...)
  3. Fügen Sie die richtige Datei in jeder Seite.

Das ist für kleine Sites.

Wenn immer größer, ersetzen Sie die Dateien durch einen DB. :)

Es ist wichtig zu bemerken, dass es zwei Schritte, bevor übersetzen:

  1. Internationalisierung:, dass ist, sodass Ihre Website, um den Umgang mit mehreren Sprachen
  2. Lokalisierung:dies beinhaltet die übersetzung Ihrer Texte (die in Schritt 1) für jede Sprache, die Sie unterstützen möchten

Sehen Sie mehr dazu in Wikipedia.

Schritt 1 bitten Sie die Tatsache berücksichtigen, dass einige Sprachen werden von rechts nach Links geschrieben (RTL) und nicht-Europäische Zeichen wie Japanisch oder Chinesisch.Wenn Sie sind nicht Planung zu behandeln diese Sprachen und Zeichen es könnte einfacher sein.

Für diese Art von situation, am Liebsten hätte ich eine Sprachdatei (eigentlich so viele language-Dateien wie Sprachen, die ich plan zu unterstützen, die Benennung jeweils als langcode.php wie in en.php oder fr.php) mit ein assoziatives array mit allen Texten auf der Seite verwendet werden.Das Verfahren wäre gehen Sie wie folgt vor:

  1. Scannen Sie Ihre Website für jede einzelne text, die übersetzt werden sollen
  2. Für jede Seite/Abschnitt möchte ich erstellen eine $lang['sectionname'][] array
  3. Für jeden text, den ich schaffen würde, $lang['sectionname']['textname'] Eintrag
  4. Ich würde erstellen Lang.php Klasse erhalten werden, ein lang parameter bei der Instanziierung aber würde ein Standard-Fall, dass kein lang empfangen wird (diese Methode lädt langcode.php je nach parameter oder eine Standard-abhängig von Ihrer bevorzugten Sprache)
  5. Die Klasse hätte setPage() Methode, die würde empfangen die Seite/Abschnitt, den Sie anzeigen
  6. Die Klasse hätte show() Methode, die erhalten würde, der text angezeigt werden soll (show() wäre aufgerufen, so oft wie Texte angezeigt auf einer bestimmten Seite... show() als eine Art wrapper für echo $lang['mypage']['mytext'])

Diese Weise können Sie so viele Sprachen wie Sie wollen in einer sehr einfachen Art und Weise.Sie könnte sogar eine Sprache, admin, wo Sie Ihre Basis-Sprache Seite (die Sie eigentlich nur Lesen rekursiv die arrays und zeigt Sie in Texteingabefelder) und kann dann "Speichern unter..." eine andere Sprache.

Ich verwende einen ähnlichen Ansatz in meine Website.Es ist nur eine Seite, aber ich habe gemacht multi-page sites mit dieser Idee.

Wenn Sie von Benutzern eingereichte Inhalte oder einige Recht komplizierte CMS wäre es eine andere Geschichte.Man konnte sich für i18n-freundliche Rahmenbedingungen (Drupal in den Sinn kommt).

Sie aussehen könnte unter Zend_Translate , es ist ein ziemlich umfassendes ist, gut dokumentiert und die allgemeine Qualität des Codes ist groß. Es erlaubt Ihnen auch eine einheitliche API für gettext zu verwenden, csv, db, ini-Datei, Array oder was auch immer Sie Ihre übersetzten Strings in am Ende sparen.

Auch schauen / watch this thread: Was sind gute Werkzeuge / Frameworks für i18n eines pHP-Code-Basis? . Es scheint, ähnlich wie Ihre Frage.

Wenn es Multibyte Unterstützung dann könnte es sich lohnen, die Multibyte-String-Funktionen in PHP heraus überprüfen:

http://uk.php.net/manual/en/book .mbstring.php

Diese werden besser Multi-Byte-Zeichen verarbeiten.

Ich benutze hl Parameter und gettext Motor Übersetzungen Kombination bereits dort mit eigenen .po der neuen Übersetzungen und Sprachen erscheinen läßt, wenn der Motor oder meine django / gae Beispiel fügt hinzu:

{% get_current_language as LANGUAGE_CODE %}{{ LANGUAGE_CODE }}{% get_available_languages as LANGUAGES %}{% for LANGUAGE in LANGUAGES %}{% ifnotequal LANGUAGE_CODE LANGUAGE.0 %}{{ LANGUAGE.0 }}{% endifnotequal %}{% endfor %}

So von Duplikaten zu halten und vollständig Übersetzungen bereits dort mit lässt hier her, die fehlenden zB arabische Monatsnamen direkt erscheinen entweder, wenn der Motor-Team hinzufügt oder app

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