Frage

Ein Freund von mir baut gerade eine Webanwendung mit J2EE und Struts, die für die Anzeige von Seiten in mehreren Sprachen vorbereitet werden soll.

Mir wurde gesagt, dass die beste Möglichkeit zur Unterstützung einer mehrsprachigen Website darin besteht, eine Eigenschaftendatei zu verwenden, in der Sie alle Zeichenfolgen Ihrer Seiten speichern, etwa so:

welcome.english = "Welcome!"
welcome.spanish = "¡Bienvenido!"
...

Diese Lösung ist in Ordnung, aber was passiert, wenn auf Ihrer Website Nachrichten oder ähnliches (ein Blog) angezeigt werden?Ich meine, Inhalte, die nicht statisch sind, sondern häufig aktualisiert werden ...Die Betreiber der Website müssen jeden neuen Eintrag in jeder unterstützten Sprache verfassen und jede Version des Eintrags in der Datenbank speichern.Die Anwendung lädt nur die Einträge in der vom Benutzer gewählten Sprache.

Wie gestalten Sie die Datenbank, um diese Art der Implementierung zu unterstützen?

Danke.

War es hilfreich?

Lösung

Die Art und Weise, wie ich die Datenbank zuvor entworfen habe, besteht darin, eine News-Tabelle mit grundlegenden Informationen wie NewsID (int), NewsPubDate (datetime), NewsAuthor (varchar/int) und dann eine verknüpfte Tabelle NewsText mit diesen Spalten zu haben:NewsID(int), NewsText(text), NewsLanguageID(int).Und schließlich haben Sie eine Sprachtabelle mit LanguageID(int) und LanguageName(varchar).

Wenn Sie Ihren Benutzern dann die News-Seite zeigen möchten, gehen Sie wie folgt vor:

SELECT NewsText FROM News INNER JOIN NewsText ON News.NewsID = NewsText.NewsID
WHERE NewsText.NewsLanguageID = <<Session["UserLanguageID"]>>

Dieses Sitzungsbit ist eine lokale Variable, in der Sie die Sprache des Benutzers speichern, wenn er sich anmeldet oder die Site zum ersten Mal betritt.

Andere Tipps

Warnung:Ich bin kein Java-Hacker, also YMMV, aber ...

Das Problem bei der Verwendung einer Liste von „Eigenschaften“ besteht darin, dass Sie viel Disziplin erfordern.Jedes Mal, wenn Sie eine Zeichenfolge hinzufügen, die an den Benutzer ausgegeben werden soll, müssen Sie Ihre Eigenschaftendatei öffnen, prüfen, ob diese Zeichenfolge (oder etwas, das in etwa gleichwertig ist) bereits in der Datei vorhanden ist, und dann die neue Eigenschaft hinzufügen wenn nicht.Darüber hinaus müssen Sie hoffen, dass die Eigenschaftendatei für Menschen einigermaßen lesbar/bearbeitbar ist, wenn Sie sie einem externen Übersetzungsteam zur Bearbeitung übergeben möchten.

Der datenbankbasierte Ansatz ist für alle Ihre datenbankbasierten Inhalte nützlich.Idealerweise möchten Sie es einfach machen, Inhalte mit ihren Übersetzungen zu verknüpfen.Es funktioniert nur für alle Orte, an denen Sie etwas ausgeben möchten ist nicht aus einer Datenbank (Fehlermeldungen etc.).

Eine ziemlich alte Technologie, die unserer Meinung nach immer noch sehr gut funktioniert, ist die Verwendung von gettext.Gettext oder eine Variante scheint für die meisten Sprachen und Plattformen verfügbar zu sein.Die Grundvoraussetzung ist, dass Sie Ihre Ausgabe wie folgt in einen speziellen Funktionsaufruf einschließen:

echo _("Please do not press this button again");

Wenn Sie dann die Gettext-Tools über Ihren Quellcode ausführen, werden alle so verpackten Instanzen in eine „po“-Datei extrahiert.Dies enthält Einträge wie:

#: myfolder/my.source:239
msgid "Please do not press this button again"
msgstr ""

Und Sie können Ihre Übersetzung an der entsprechenden Stelle hinzufügen:

#: myfolder/my.source:239
msgid "Please do not press this button again"
msgstr "s’il vous plaît ne pas appuyer sur le bouton ci-dessous à nouveau"

Nachfolgende Ausführungen der gettext-Tools aktualisieren einfach Ihre PO-Dateien.Sie müssen nicht einmal die PO-Datei aus Ihrer Quelle extrahieren.Wenn du dich kennst Mai Wenn Sie Ihre Website später übersetzen möchten, können Sie einfach das oben gezeigte Format (die unterstrichene Funktion) für Ihre gesamte Ausgabe verwenden.Wenn Sie keine PO-Datei angeben, wird einfach alles zurückgegeben, was Sie in die Anführungszeichen gesetzt haben.gettext ist für die Arbeit mit Gebietsschemas konzipiert, sodass das Gebietsschema des Benutzers zum Abrufen der entsprechenden PO-Datei verwendet wird.Dadurch ist es wirklich einfach, neue Übersetzungen hinzuzufügen.

Gettext-Profis

  • Stört Sie beim Programmieren nicht
  • Sehr einfach, Übersetzungen hinzuzufügen
  • PO-Dateien können aus Geschwindigkeitsgründen herunterkompiliert werden
  • Für die meisten Sprachen/Plattformen sind Bibliotheken verfügbar
  • Es gibt gute plattformübergreifende Tools für den Umgang mit Übersetzungen.Es ist tatsächlich möglich, Ihr Übersetzungsteam mit einem Tool wie dem einzurichten poEdit um ihnen die Verwaltung von Übersetzungsprojekten sehr einfach zu machen

Nachteile von Gettext

  • Erfüllt die „Möbel“-Anforderungen Ihrer Website, Sie wünschen sich jedoch normalerweise immer noch einen datenbankbasierten Ansatz für Ihre datenbankgesteuerten Inhalte

Weitere Informationen zu gettext finden Sie unter diese Wikipedia-Seite

Java-Webanwendungen unterstützen die Internationalisierung mithilfe der Java-Standard-Tag-Bibliothek.

Du hast wirklich zwei Probleme.Statischer Inhalt und dynamischer Inhalt.

für statische Inhalte, die Sie verwenden können jstl.Es verwendet Java Ressourcenpakets, um dies zu erreichen.Ich habe es geschafft, eine zu bekommen Datenbankgestütztes Paket Arbeiten mit Hilfe dieser Website.

Das zweite Problem sind dynamische Inhalte.Um dieses Problem zu lösen, müssen Sie die Daten speichern, damit Sie basierend auf dem Gebietsschema des Benutzers verschiedene Übersetzungen abrufen können.(Das Gebietsschema umfasst Land und Sprache).

Es ist nicht trivial, aber mit ein wenig Planung im Vorfeld kann man es schaffen.

@Auron

Darauf wenden wir es an.Unsere Apps basieren alle auf PHP, aber gettext hat eine lange Tradition.

Sieht so aus, als gäbe es eine gute Java-Implementierung

Tag-Bibliotheken sind in Ordnung, wenn Sie JSP verwenden, aber Sie können I18N auch mithilfe einer vorlagenbasierten Technologie erreichen, z FreeMarker.

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