2012-04-12 15 views
4

Ich habe eine Website (Coldfusion), auf der ich mehrere Sprachen anbieten möchte, aber keine Ahnung, was der beste Weg ist, dies zu tun.Mehrsprachige Website, wie geht man damit um?

Es 2 Pläne Ich habe:

1:

Natürlich sind alle Inhalte (Text) ist in einer Datenbank.

Wenn ein Benutzer eine andere Sprache wünschen würde, kann der Benutzer auf einen Link/Flagge klicken, würde dies die gewünschte Sprache in einer Sitzungsvariablen setzen, zum Beispiel: session.language = „es“

In der Datenbank Ich hätte 2 Spalten (jede Sprache hat 1 Spalte) und wähle dann den Text, der zu 'es' gehört

Jede Seite würde dann eine Anfrage an die Datenbank machen, um den Text in die session.language zu bekommen.

PROS: Relativ einfache

CONS umzusetzen: SEO weise ich glaube nicht, das ist sehr gut sein könnte. http: // www.domain.com/page.cfm würde einen englischen Text oder spanischen Text (oder eine andere Sprache) geben. Google fügt keine doppelte URLs

2:

etwas mit http tun: // www.domain.com/en/page.cfm für Englisch und http: // www.domain.com/es/page .cfm für Englisch.

Mit einer URL-Rewrite-Regel wäre der Sprachwert in der URL http: // www.domain.com/en/page.cfm tatsächlich eine Seite http: // www.domain.com/page.cfm?language = de

Die Variable url.language wird dann die richtige Sprache aus der Datenbank auswählen.

PROS: Eindeutige URL für jede Sprache. Gut für SEO und Google-Indexierung.

CONS: Ein bisschen schwieriger zu implementieren. (Ich denke)

Oder hat jemand andere/bessere Ideen?

Danke !!

+0

Wenn Sie nicht schwer auf Sprache sind, können Sie Google Übersetzungstool verwenden.[Siehe] (http://translate.google.com/translate_tools) – Vikas

Antwort

1

Sie sollten immer zuerst die Browser-Kopfzeile "Accept-Language" für die Standardsprache (n) (die richtige Standardmethode) und Links (die scheinbar scheinbar richtige Art) nur als Alternative anbieten.

Doing es in einer Datenbank scheint nicht sehr Standard. Nehmen wir an, Sie möchten MVC-Architektur (Model-View-Controller) verwenden. Die meisten Software verwendet Tasten in der Präsentationsschicht (Ansicht) (z. B. HTML) und zusammen mit der Präsentationsschicht haben Sie Sprachdateien (in Java sind dies in der Regel Eigenschaften Dateien), die einfach durch ihre Dateinamen zugeordnet sind, und von geändert werden können regelmäßige Benutzer, ohne besondere Fähigkeiten, wie zum Beispiel professionelle Übersetzer ohne Computerkenntnisse. Natürlich könnten Sie es in eine Datenbank stellen, aber dann ist es nur mehr Arbeit und verschiebt die Informationen aus der Präsentationsebene.

Dafür gibt es verschiedene Bibliotheken. Sie sollten das normale für Ihre Anwendung finden. Bitte bearbeiten Sie Ihre Frage, um anzugeben, was Sie zur Entwicklung der Anwendung verwenden. (zB JSP, Tapestry, Wicket, ASP, PHP usw.) Wenn Sie zum Beispiel JSPs verwenden möchten, würde ich Ihnen vorschlagen, die Sprachunterstützung der JSTL-Tag-Bibliothek zu verwenden.Oder wenn Sie Tapestry verwenden würden, würde ich Sie auf http://tapestry.apache.org/localization.html oder http://tapestry.apache.org/tapestry4.1/UsersGuide/localization.html

zeigen Um nachzuschlagen, können Sie nach den Begriffen "Internationalisierung" alias "i18n" oder "Lokalisierung" suchen. (Die Begriffe bedeuten nicht dasselbe, aber nur wenige verwenden sie richtig, also funktioniert beides. http://www.w3.org/International/questions/qa-i18n)

1

Ich würde für Option 2 gehen. Jede Übersetzung sollte ihre eigene URL haben. Links zu Ihrer Website werden bereits in der beabsichtigten Übersetzung angezeigt.

Zum Speichern von Übersetzungen in einer Datenbank, würde ich setze jede Übersetzung in einem separaten Spalte nicht, sondern sie vielmehr in einem separaten Tisch:

Tabelle Beiträge:
- id
- title_id
- ...

Tabelle Übersetzungen:
- label_id
- Wert
- country_code
- language_code

Wo title_id label_id Spiele

diese Weise werden Sie nicht ist Ihre Tabellenstruktur ändern müssen, wenn eine neue Übersetzung hinzugefügt. Dies ermöglicht Ihnen unendliche Übersetzungen für jedes Etikett oder jeden Text.

1

Um effektiv eine mehrsprachige Website zu machen, müssen Sie eine Regel für sich selbst festlegen, dass KEIN TEXT jemals in der Quelle als hart codiert wird. Es muss entweder aus der Datenbank und/oder einem Ressourcenpaket stammen.

Text aus der Datenbank

Sie müssen sicherstellen, dass die Spalte, die Sie Ihre Daten speichern in Unicode ist sonst werden Sie Probleme mit akzentuierten Charakter haben. Haben Sie auch keine Spalte pro Sprache, da dies nicht skalierbar ist, machen Sie das, was @jan vorschlägt, und haben Sie eine Übersetzungstabelle, in der die Elemente sowohl für eine Referenz als auch für eine Sprache eingegeben werden. für diejenigen

Ressourcenbündel

Sie gehen zu wollen, nicht jeden letzten wenig Text aus der Datenbank zu erhalten, so dass Sie ein Ressourcenpaket nutzen können. Dies ist ein, zugegebenermaßen alter Link http://www.sustainablegis.com/blog/cfg11n/index.cfm?mode=entry&entry=FD48909C-50FC-543B-1FE177C1B97E8CC1 aus Paul Hastings Blog über einige Lösungen für Ressourcenbündel. Um ehrlich zu sein, ist sein Blog eine ausgezeichnete Quelle zu diesem Thema.

In Bezug darauf, wie Sie mit den URLs tun Option 1 nicht tun, wie Sie richtig erkannt haben, verursachen Sie Probleme die SEO-Rankings der Seite und es bedeutet, dass Benutzer nicht korrekt teilen oder auf die Seite zurückkehren können.

Zwei Ansätze haben den Sprachcode in der URL, wie Sie in Option 1 identifiziert haben.

Pros

  • Einfachere konfigurieren

Cons

  • Sie haben eine Anwendung, die bedeutet, dass Sie weitere Sprachen hinzufügen, die Sie mehr Komplexität und zusätzliches Gewicht auf die Erinnerung an diese App

Oder Sie können eine andere Subdomain oder Domäne pro Anwendung z. es.yourdomain.com oder yourdomain.es können sie die gleiche Code-Basis

Pros

  • alle Jede Sprache einen eigenen Speicher hat eine eigenständige Anwendung wird, was bedeutet

Cons

  • mehr Aufwand zur Konfiguration
1

http://i18n.riaforge.org/ hat einen Download für i18n. Es kann verwendet werden, um sicherzustellen, dass alle Zeichenfolgenbezeichnungen übereinstimmen. Auf diese Weise, wenn jemand "Speichern" in "Aktualisieren" ändern möchte, kann alles an einer Stelle erfolgen.

Es ist auch wichtig, den technischen Hintergrund derjenigen zu berücksichtigen, die die Übersetzung durchführen werden. Es ist oft einfacher, das Übersetzungsteam dazu zu bringen, Dateien im Editor zu bearbeiten, anstatt eine db zu aktualisieren. Textdateien funktionieren gut mit der Versionskontrolle.

0

Der beste Weg, den ich gefunden habe, ist ein XML zu verwenden, um nur diese Seiten Sprache Zeug, ein XML zu halten, um jede Seite abzudecken, und Sie dann für die Sprache variieren. Wenn die Seite geladen wird, laden Sie einfach einen anderen XML-Code aus der Datenbank oder den Dateien ... viele Möglichkeiten, dies zu tun. Alle anderen Methoden, die ich ausprobiert habe, haben ihre Probleme, und zumindest erlaubt es dir, eine Sprache XML zu nehmen, es jemandem zu übergeben, der es kopiert, und dann die Kästchen zu ändern ... du legst es in die DB, um es zu bedienen.

kann man dies auch für Text tun, und die DB muss das XML nur für den Text für diese Seite erstellen, indem eine Liste von Elementen verwendet wird, die in das XML für die Seite aufgenommen werden sollen.

sobald man auf die Idee kommen, wird der Rest sehr einfach ... und gegeben CF Möglichkeiten solcher Daten mit Punktnotation zugegriffen wird, leicht peasy uns

sagen, Sie haben „Load Images“

in english xml it may be <LoadIMGS>Load Images</LoadIMGS> 
in chinese it may be <LoadIMGS>加载图像</LoadIMGS> 
or <LoadIMGS>Jiā zǎi túxiàng</LoadIMGS> 

unabhängig, in Ihrem CFM-Code würden Sie nur # Variablenname.LoadIMGS # in den Ort ... Ich würde auch vorschlagen, in die Loadimages-Tag die Größe der Schriftart angepasst werden, wenn nicht normale Größe angepasst werden. auf diese Weise, wenn Übersetzungen zu groß sind, können Sie diese Schriftart dort für das verkleinern ... etc.

viel Spaß !!!

Verwandte Themen