Mehrsprachige Homepage optimal realisieren

Cyberm@ster

New member
Ich würde meine HP gerne zweisprachig anbieten. Wie kann ich das am effektivsten tun? Ich hab ein bisschen gegooglet und hauptsächlich das hier gefunden:

  • eine Variable per GET übergeben und den passenden Text per PHP einbinden
  • mit einem Sessioncookie
  • mit entsprechenden Verzeichnisstrukturen (/de/content/page.htm - /en/content/page.htm)

Wozu würdet ihr mir raten?
 

Mackz

Member of Honour
Übergib die Sprache per GET und switche dann in deinem Script den Content entsprechend um. (Es ist auch möglich die primäre Sprache zu bestimmen, die im Browser eingestellt ist und danach den Inhalt zu bestimmen. Das entmündigt allerdings den User, es sollte also zusätzlich immer die Möglichkeit bestehen das der User die Sprache selbst wählen kann.)
 

LX

Member of Honour
Der erste bzw. dritte Weg erscheint mir als der vernünftigste (läuft beides auf das gleiche hinaus, wenn du mod_rewrite benutzen kannst). Das ganze über Cookies zu machen würde ich bleiben lassen, da manch einer keine Cookies unterstützt (z.B. Suchmaschinencrawler).
 

Dreamer

Member
Ich rate dir zu der dritten.

duplizier die z.B. deutschsprachige seite und setz vorher kommentare ein damit du dich zurechtfindest wo welcher text steht. Aber wenn du diese texte dann ins englische übersetzt mach es selbst und net durch irgendwelche programme da dies nicht grammatikalisch richtig übersetzen. Selbst die programme für lehrer(hab ich selbst) übersetzen diese net 100 pro richtig.

Du kannst solche programme aber als stüze nehmen da diese zumindest wort wörtlich alles wiedergeben und du nur noch den satzbau selbst korrigieren musst.
 

Dreamer

Member
I mein ja nur.... :D

Habs damals so gelernt aber um ehrlich zusein, wenn i beruflich ne website mache dann natürlich auch net auf diese art (nimmt viel zeit in anspruch).

Aber privat mach i das so. Hab ja sonst nichts zutun. :D
 

bitmuncher

Moderator
Bei uns wird sowas über Locales gelöst, allerdings muss der hostende Webserver das auch unterstützen und man muss irgendwo einen Linux-Rechner zur Verfügung haben, auf dem msgfmt (gettext) installiert ist. Damit werden die Übersetzungen der auf der Seite verwendeten Texte in den locale-Dateien abgelegt und je nachdem welche Sprache mit setlocale() gesetzt ist, wird dann eine entsprechende Übersetzungsdatei genutzt. Grundlegende Dinge wie Monate, Wochentage usw. sind eh bereits in den System-locales definiert.
 

LX

Member of Honour
Mit gettext und locales bekommt man Webinterfaces übersetzt, für tatsächliche Inhalte finde ich das aber übertrieben. Da kommt man nicht umhin, 2 Versionen parallel zu betreiben.

Solange man aber Inhalte und deren Präsentation (Struktur) voneinander trennt, ist das auch kein Problem. Das Stichwort hier ist mal wieder "Templates", dann hat man auch bei einer Designänderung nicht mehr zu tun, selbst wenn es mehrere Sprachversionen gibt - zumindest, solange man bei der LTR-Darstellung bleibt und nicht Hebräisch oder Arabisch noch als Sprachversion hat ;)
 

Cyberm@ster

New member
Hi, danke für die Antworten. Was ist bitte mod_rewrite? Ich denke ich werde es so machen, dass ich eine Variable übergebe und dann mit case oder if den entsprechenden content einbinde. Ich werde zwar verschiedene Ordner für die Textdateien machen, aber nicht wie bei der 3. Methode die ganze HP klonen. Danke für den Tipp mit gettext, aber da ich keinen Rootserver habe scheidet das glaube ich sowieso aus und LX sagt ja auch, dass er es für kleine bis mittelgrosse Projekte übertrieben findet. Wie mache ich, dass die Variable immer wieder weitergegeben wird, d.h. dass er sich die Sprache während einer "Session" merkt (ohne Cookie).
 

LX

Member of Honour
mod_rewrite ist ein Apache-Modul, um URLs umzuformen. Selbst auf normalem Webspace ist das Modul oftmals eingebunden, sodass du es mit Hilfe einer simplen .htaccess-Datei benutzen kannst. So kannst du's z.B. einrichten, dass eine ansonsten hässliche URL wie

http://www.blahblubb.de/index.php?lang=eng&section=whatever

schöner aussieht:

http://www.blahblubb.de/eng/whatever

Bezogen auf dein Problem: Du übergibst die Sprache immer als GET-Parameter, allerdings wird das aus der URL nicht unmittelbar ersichtlich, sondern sieht in diesem Fall wie ein eigener Verzeichnisbaum aus.

Die Syntax dazu kannst du der Doku entnehmen, es gibt auch ein paar Tutorials dazu im Netz.
 

Cyberm@ster

New member
Super, danke für die Tipps! Ich werds mal ausprobieren (kann etwas dauern, hab viel zu tun) und sag dann bescheid falls ich noch Fragen haben sollte.
 

1000sassa

New member
Ich würde Subdomains für die Sprachen einführen, also de.domain.xy, ru.domain.xy, sk.domain.xy

Ist ein User auf der ru.domain.xy bekommt er die Seite in Russisch und anhand der URL ist dem Script klar, dass es nur russischen Content ausspucken soll.

Eine etwas komplexere Geschichte wäre ein preselect über die IP anhand einer Geodatenbank, wobei auch in Brasilien deutsche Besucher möglich sind... aber dafür hast du dann ja deine Flaggenleiste oder wie immer du das handelst.

Auch kann der Apache anhand des Browsers feststellen, welche Sprache der User spricht (anzunehmenderweise zumindest).

Eine Kombination aus diesen drei Möglichkeiten solllte Dir eine Trefferquote im Bereich ab 95% zusichern und natürlich benötigst du so oder so eine "default-Sprache" - oder du machst eine explizite "Choose your language"-Ansage, sofern keine Sprache gewählt wurde - etwa, wenn einer über www. kommt
 

Cyberm@ster

New member
Die Idee mit den Subdomains find ich super, danke! Wie mach ich, dass von den Subdomains immer auf eine zentrale Seite weitergeleitet wird? Ich will ja nicht mehrere gleiche Dateien, sonder eine Datei haben, in der ich dann überprüfe von welcher Subdomain man kommt.
 

1000sassa

New member
und fragst per PHP beispielsweise die URL ab und darin den Substring de. ru. pl. oder sonstwas

$x = strtolower("http://".$HTTP_HOST.$REQUEST_URI);
if (strpos($x,"de.blablubb"))
{
# inhalt de
}
elseif (strpos($x,"ru.blablubb"))
{
# inhalt ru
}
...
?>

eine Seite - mehrere Inhalte.
 

PC_HERO

New member
Also ich würde da ja auf funktionen von Apache zurückgreifen:
.htaccess
Code:
Options -MultiViews
DirectoryIndex index.var index.php index.htm index.html
AddType	application/x-type-map .var
index.var
Code:
URI: index.php; vary="type,language"

URI: ./lang_en/index.php
Content-type: text/html; charset=utf-8
Content-language: en_EN,en,us

URI: index.php
Content-type: text/html; charset=utf-8
Content-language: de_DE,de
Wenn man das so nutzt, wird die Sprache des Browsers ausgelesen und dementsprechend redirected!

Edit: Ohhh ist wohl nicht ganz das gesuchte, denke aber das könnte einigen helfen ;-)
 

1000sassa

New member
Die Idee ist sinnvoll. Läßt sich damit aber eine Sprache dann noch wechseln, oder ist die Auswahl dann "erzwungen", weil der Indianer einfach nix anderes als die Browser-Sprache ausliefert? Und davon ab kann auch dies nur eine Teillösung sein, da es durchaus deutsche User mit englischen Browsern gibt :/

Aber so als Gimmick oder Add-On ist es ne gute Idee :) (wie gesagt, sofern kein Zwang geschieht bei der Auswahl)
 
Oben