• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Komplette Seite Zweisprachig entwickeln?

hakura

Mitglied
Hi ,
Ich habe eine frage bezüglich Zweisprachige Webseiten. Wie würdet ihr Vorgehen, bzw was wäre die optimale Lösung.

Es geht um eine Komplette Webseite. Die Seite ist auf Deutsch und muss nun eine Funktion enthalten, die alles Auf Englisch darstellt.
Es sollte aber nicht die ganze Seite kopiert und neu auf Englisch entwickelt werden. Weil man bei Änderungen immer zweimal ran muss und das nicht sehr schlau wäre, ausser es geht nichts anderes.
Sollte man die Englischen Texte über JSON einbinden sobald der "Englisch" Button ausgewählt wird? Oder doch lieber über PHP?
Welchen Weg würdet ihr einschlagen um sowas optimal zu entwickeln ?


Vielen Dank und einen schönen Tag,
 
Werbung:
Ich mach es bei Websites die kein Framework verwenden so:

HTML:
<h1><?php echo __('Hallo Welt!') ?></h1>
<p><?php echo __('Lorem ipsum...') ?></p>

PHP:
function __ ($str) {
    // mit csv, mysql $str in die gewünschte Sprache übersetzen
    // wenn keine Übersetzung gefunden wird, $str einfach unverändert zurückgeben.
    return $str;
}
 
Hängt ganz vom Projekt ab. Idealer Weise ein Ansatz ein Ansatz wie YAML, welcher die eigentlichen Texte von der Programmlogik trennt. Rails bringt dazu das i18n Gem mit, und für PHP wird es so etwas wahrscheinlich auch geben.

Im Hintergrund liegt für jede Sprache eine einzelne .yml Datei, die nach folgendem Muster aufgebaut ist:
Code:
de:
  header:
    greetings: Hello world!

Das wird dann im View so gerendert:
HTML:
<!-- Hello World! -->
<p><%=t header.greetings %></p>

In den .yml Dateien können neben Plain Text auch Variablen und sogar HTML stehen, wenn man Markdown Code verwendet.
 
Werbung:
ja keine Ahnung, am Sinnvollsten wäre es wenn man die komplette Seite nicht doppelt Kopieren müsste. Wenn sich einfach der Inhalt selbst ändern würde. Ich weiss einfach nicht wo ich anfangen soll.
 
Ich weiss einfach nicht wo ich anfangen soll.

Fange doch mit einer Art Pflichtenheft an:

- Die primär zu ladende Sprache wird durch den Header bestimmt, den der User beim Aufruf der Seite sendet.
- Der Inhalt soll von der HTML-Struktur getrennt werden.
- Oben auf der Seite soll ein Button stehen, mit dem der User zwischen Deutsch und Englisch switchen kann.
- Wird beim Sprachwechsel die gesamte Seite neu geladen, ist AJAX keine sinnvolle Option.

- Sind es nur wenige Zeilen oder kurze Texte, die übersetzt werden müssen, kann die Ausgabe per Template-Sprache oder Variablen geschehen.
- Kurze Texte lassen sich entweder in einer Datenbank oder in .yml Files ablegen.
- Lange Textbereiche einer statischen Webseite lassen sich samt ihrer HTML-Tags in extra Dateien auslagern.
- Handelt es sich um ein umfangreiches Portal, das um neue Unterseiten erweiterbar sein soll, würde sich der Einsatz eines MVC-Frameworks in PHP oder Ruby anbieten.
- Handelt es sich nur um wenige Seiten, könnte auch ein JS-Framework wie Backbone oder Angular zum Einsatz kommen.
- Handelt es sich um eine Seite, die durch redaktionellen Content häufig aktualisiert wird, wäre ein CMS in Erwägung zu ziehen.

Welche Technologien beherrschst du?
 
Werbung:
Dann überlege, welche Technologien dafür am besten geeignet wären. Die Antwort kannst du dir nur selber liefern.
 
kennt jemand jquery-i18n ? ist das SEO fähig ?
ansonsten denke ich wird php eine gute Lösung sein.
 
Zuletzt bearbeitet:
jquery-i18n kenne ich nicht - allerdings ist das Javascript - das könnte durchaus problematisch werden was die Indizierung angeht. Die Deutsche und Englische Version haben dann ja wahrscheinlich keine unterschiedlichen URLs - daher würde ich eher von dieser Methode abraten.

Was spricht denn gegen die schon vorgestellten Methoden? Gib uns doch einen kleinen Einblick in das, was du vor hast und welche Lösung dir warum nicht gefällt - dann kann ja ggf. eine für dich passendere Methode vorschlagen.
 
Werbung:
Ja also ich würde es gerne mit PHP machen, dass ich die Texte in einer anderen Datei mit PHP hole und tauschen kann. Das die Seite komplett neu geladen wird spielt keine rolle.
Nun hab ich mal einen kleinen Anfang programmiert.
PHP:
<?php
header('Content-Type: text/html; charset=UTF-8');
// Spracherkennung
// GET abfragen; wird geliefert wenn ein Sprachlink geklickt wird
if(isset($_GET["lang"])) {
    $lang = langanalyse($_GET["lang"],"get");
}
// POST abfragen; wird in meinem Beispiel nicht benutzt
elseif(isset($_POST["lang"])) {
    $lang = langanalyse($_POST["lang"],"post");
}
// Cookie abfragen; ist ab dem 2. Besuch gesetzt (wenn Cookies aktiviert sind)
elseif(isset($_COOKIE["lang"])) {
    $lang = langanalyse($_COOKIE["lang"],"cookie");
}
// keine Sprache gefunden; Browsersprache erkennen, die Sprache mit der höchsten Priorität auswählen
else {
    $cutstring = explode("-", $_SERVER["HTTP_ACCEPT_LANGUAGE"]);
    $detectlang = $cutstring[0];
    $lang = langanalyse($detectlang,"browser");
}
// überprüfe ob für die Sprache verfügbar ist
function langanalyse($new_lang, $methode) {
    switch($new_lang) {
        // die erlaubten Sprachen hier hintereinander auflisten
        case ("de"):
        case ("en"):
            $lang = $new_lang;
            setcookie("lang", $lang, time()+31536000);
            break;
        // Cookie löschen Funktion als Pseudo-Sprache
        case ("delete"):
            setcookie("lang", $lang, time()-3600);
            break;
        // für die erkannte Sprache sind keine übersetzungen vorhanden oder die Sprache ist gänzlich unbekannt
        default:
            $unknown_lang = 1;
            // die Standardsprache:
            $lang = "en";
            setcookie("lang", $lang, time()+31536000);
    }
    // Methode erkennen, Debugbox öffnen und Informationen ausgeben
    switch($methode) {
        case ("get"): echo('<div id="langdebug">Methode = get<br/>'); break;
        case ("post"): echo('<div id="langdebug">Methode = post<br/>'); break;
        case ("cookie"): echo('<div id="langdebug">Methode = cookie<br/>'); break;
        case ("browser"): echo('<div id="langdebug">Methode = browserdetect<br/>
    (kein GET, POST und COOKIE gefunden)<br/>
    Browserlang: '.$_SERVER["HTTP_ACCEPT_LANGUAGE"].'<br/>'); break;
        default: echo('<div id="langdebug">Methode = Unbekannt oder Fehler<br/>'); break;
    }
    // Hinweis im Debugbox wenn Sprache unbekannt
    if($unknown_lang == 1) {
        echo('!! Sprache "'.$new_lang.'" unbekannt. Auf "'.$lang.'" gesetzt<br/>');
        $unknown_lang = 0;
    }
    return $lang;
}

// ein paar zusätzliche Debuginformationen und die manuelle Sprachwahl
echo('aktuelle Sprache = '.$lang.'<br/>
Cookie Sprache = '.$_COOKIE["lang"].'<br/>
Cookie Tod = '. date("d.m.Y G:i",time()+31536000) .'<br/>
Sprache setzen:<br/>
<a href="'.$_SERVER['SCRIPT_NAME'].'?lang=de">Deutsch</a>
<a href="'.$_SERVER['SCRIPT_NAME'].'?lang=en">Englisch</a><br/>
<a href="'.$_SERVER['SCRIPT_NAME'].'?lang=delete">Cookie loeschen</a>
</div>');

// PHP Array mit den eigentlichen Inhalten der erlaubten Sprachen
$content["de"]["text"]="Rehau gehört zu den international führenden Anbietern von polymerbasierten Lösungen in den Bereichen Bau, Automotive und Industrie. Das Unternehmen erkannte früh, dass es wichtig ist, noch schneller auf die Kunden&shy;wünsche reagieren zu können und suchte einen Partner für ein passendes CRM-System.
        Die Erfahrung von movento in der Baubereich-Branche war ein wichtiges Entscheidungskriterium für die Zusammenarbeit.";
$content["en"]["text"]="ich bin englisch";
$content["de"]["titel1"]="MITEINANDER DANK ZENTRALER DATENBASIS";
$content["en"]["title1"]="";
$content["de"]["u-title1"]="Rehau arbeitete früher mit einer standortbezogenen Lösung – heute ist der gesamte Zugriff zentral.";
$content["en"]["u-title1"]="";
$content["de"]["text2"]="DAS ERSTE BAUPROJEKT-SYSTEM DIESER ART";
$content["en"]["text2"]="";
$content["de"]["text3"]="Gemeinsam wurde eine einheitliche Datenbasis geschaffen, damit alle Mitarbeitenden auf die Kundenprojekte zugreifen können – auch international. Besonders wichtig waren für Rehau die Objektgeschäfte im Baubereich – wozu movento die Bauobjektverwaltung auf Basis von SAP CRM 2007 einführte. Heute kann unser Kunde die Gewerke und Bauvorhaben eines Bauprojektes optimal verwalten – auch mobil. In einem ersten Schritt wurden die Kernprozesse analysiert. Anschließend haben wir gemeinsam innerhalb von Blueprint-Workshops die speziellen Anforderungen von Rehau ausgearbeitet: Die Vertriebsmitarbeitenden finden heute einfach und schnell heraus, welche Objekte für sie interessant sind und welche Personen beteiligt sind – ein wichtiger Wettbewerbsvorteil für Rehau. Die Benutzeroberfläche des Systems wurde an das CI von Rehau angepasst.";
$content["en"]["text3"]="";
$content["de"]["title2"]="";
$content["en"]["title2"]="";

Wie baue ich die Sprachtexte in eine andere Datei und hole sie hier herein ?
 
Ja also ich würde es gerne mit PHP machen, dass ich die Texte in einer anderen Datei mit PHP hole und tauschen kann. Das die Seite komplett neu geladen wird spielt keine rolle.
Nun hab ich mal einen kleinen Anfang programmiert.
PHP:
<?php
header('Content-Type: text/html; charset=UTF-8');
// Spracherkennung
// GET abfragen; wird geliefert wenn ein Sprachlink geklickt wird
if(isset($_GET["lang"])) {
    $lang = langanalyse($_GET["lang"],"get");
}
// POST abfragen; wird in meinem Beispiel nicht benutzt
elseif(isset($_POST["lang"])) {
    $lang = langanalyse($_POST["lang"],"post");
}
// Cookie abfragen; ist ab dem 2. Besuch gesetzt (wenn Cookies aktiviert sind)
elseif(isset($_COOKIE["lang"])) {
    $lang = langanalyse($_COOKIE["lang"],"cookie");
}
// keine Sprache gefunden; Browsersprache erkennen, die Sprache mit der höchsten Priorität auswählen
else {
    $cutstring = explode("-", $_SERVER["HTTP_ACCEPT_LANGUAGE"]);
    $detectlang = $cutstring[0];
    $lang = langanalyse($detectlang,"browser");
}
// überprüfe ob für die Sprache verfügbar ist
function langanalyse($new_lang, $methode) {
    switch($new_lang) {
        // die erlaubten Sprachen hier hintereinander auflisten
        case ("de"):
        case ("en"):
            $lang = $new_lang;
            setcookie("lang", $lang, time()+31536000);
            break;
        // Cookie löschen Funktion als Pseudo-Sprache
        case ("delete"):
            setcookie("lang", $lang, time()-3600);
            break;
        // für die erkannte Sprache sind keine übersetzungen vorhanden oder die Sprache ist gänzlich unbekannt
        default:
            $unknown_lang = 1;
            // die Standardsprache:
            $lang = "en";
            setcookie("lang", $lang, time()+31536000);
    }
    // Methode erkennen, Debugbox öffnen und Informationen ausgeben
    switch($methode) {
        case ("get"): echo('<div id="langdebug">Methode = get<br/>'); break;
        case ("post"): echo('<div id="langdebug">Methode = post<br/>'); break;
        case ("cookie"): echo('<div id="langdebug">Methode = cookie<br/>'); break;
        case ("browser"): echo('<div id="langdebug">Methode = browserdetect<br/>
    (kein GET, POST und COOKIE gefunden)<br/>
    Browserlang: '.$_SERVER["HTTP_ACCEPT_LANGUAGE"].'<br/>'); break;
        default: echo('<div id="langdebug">Methode = Unbekannt oder Fehler<br/>'); break;
    }
    // Hinweis im Debugbox wenn Sprache unbekannt
    if($unknown_lang == 1) {
        echo('!! Sprache "'.$new_lang.'" unbekannt. Auf "'.$lang.'" gesetzt<br/>');
        $unknown_lang = 0;
    }
    return $lang;
}

// ein paar zusätzliche Debuginformationen und die manuelle Sprachwahl
echo('aktuelle Sprache = '.$lang.'<br/>
Cookie Sprache = '.$_COOKIE["lang"].'<br/>
Cookie Tod = '. date("d.m.Y G:i",time()+31536000) .'<br/>
Sprache setzen:<br/>
<a href="'.$_SERVER['SCRIPT_NAME'].'?lang=de">Deutsch</a>
<a href="'.$_SERVER['SCRIPT_NAME'].'?lang=en">Englisch</a><br/>
<a href="'.$_SERVER['SCRIPT_NAME'].'?lang=delete">Cookie loeschen</a>
</div>');

// PHP Array mit den eigentlichen Inhalten der erlaubten Sprachen
$content["de"]["text"]="Rehau gehört zu den international führenden Anbietern von polymerbasierten Lösungen in den Bereichen Bau, Automotive und Industrie. Das Unternehmen erkannte früh, dass es wichtig ist, noch schneller auf die Kunden&shy;wünsche reagieren zu können und suchte einen Partner für ein passendes CRM-System.
        Die Erfahrung von movento in der Baubereich-Branche war ein wichtiges Entscheidungskriterium für die Zusammenarbeit.";
$content["en"]["text"]="ich bin englisch";
$content["de"]["titel1"]="MITEINANDER DANK ZENTRALER DATENBASIS";
$content["en"]["title1"]="";
$content["de"]["u-title1"]="Rehau arbeitete früher mit einer standortbezogenen Lösung – heute ist der gesamte Zugriff zentral.";
$content["en"]["u-title1"]="";
$content["de"]["text2"]="DAS ERSTE BAUPROJEKT-SYSTEM DIESER ART";
$content["en"]["text2"]="";
$content["de"]["text3"]="Gemeinsam wurde eine einheitliche Datenbasis geschaffen, damit alle Mitarbeitenden auf die Kundenprojekte zugreifen können – auch international. Besonders wichtig waren für Rehau die Objektgeschäfte im Baubereich – wozu movento die Bauobjektverwaltung auf Basis von SAP CRM 2007 einführte. Heute kann unser Kunde die Gewerke und Bauvorhaben eines Bauprojektes optimal verwalten – auch mobil. In einem ersten Schritt wurden die Kernprozesse analysiert. Anschließend haben wir gemeinsam innerhalb von Blueprint-Workshops die speziellen Anforderungen von Rehau ausgearbeitet: Die Vertriebsmitarbeitenden finden heute einfach und schnell heraus, welche Objekte für sie interessant sind und welche Personen beteiligt sind – ein wichtiger Wettbewerbsvorteil für Rehau. Die Benutzeroberfläche des Systems wurde an das CI von Rehau angepasst.";
$content["en"]["text3"]="";
$content["de"]["title2"]="";
$content["en"]["title2"]="";

Wie baue ich die Sprachtexte in eine andere Datei und hole sie hier herein ?

Wir haben dir oben ja bereits zwei Ansätze geliefert. Tronjer s Ansatz ist meiner Meinung nach besser für neue Websites geeignet, meiner lässt sich recht gut in bestehende Seiten integrieren (ohne viel ändern zu müssen).
In der Funktion "__" wird die Übersetzung mittels MySQL oder fgetcsv oder file_get_contents oder wie auch immer du willst geladen und ein String zurückgegeben.

So wie du es jetzt hast, alle Sprachen auf einmal in ein Array zu laden (ohne dass sie benötigt werden), ist nicht so gut. Kannst du aber natürlich auch machen - mit MySQL, fgetcsv oder file_get_contents oder wie auch immer du willst ...
 
Zuletzt bearbeitet:
Okay danke, ich arbeite daran.
Nur eine Frage habe ich noch bezüglich den Sprachumstellungen.
Ich setzte die per js in die HTML-Datei ein. Wie kann ich in der JS-Datei die PHP verlinkungen reinschreiben ?
 
Werbung:
Okay danke, ich arbeite daran.
Nur eine Frage habe ich noch bezüglich den Sprachumstellungen.
Ich setzte die per js in die HTML-Datei ein. Wie kann ich in der JS-Datei die PHP verlinkungen reinschreiben ?

Ich glaube du hast entweder PHP oder JS oder beides noch nicht wirklich verstanden.
Da mir aber gerade die Zeit fehlt… laut deinem Code oben:

index.php?lang=de
index.php?lang=en
 
Ich bin da eher praktisch und würde das in simplen Platzhaltern lösen.
Überall wo Inhalt stehen soll setze ich {xy} hinein.

Mein PHP Script läuft das Dokument durch und ersetzt alle Platzhalter durch einen Inhalt der definiert ist. Diese Definition kann zB in einer Datenbank geschehen.

Je nach eingestellter Sprache wird ein anderer Inhalt eingefügt. Ich weiß nur nicht ob die Lösung zu umfangreich wäre ...
 
ok, nun habe ich ein anderes Problem,
meine JS Funktionen gehen mit den .php Dateien nicht mehr.
Und wie setzte ich zwei Bilder ein mit php, wenn Deutsch das Bild, wenn englisch das andere Bild.

Vielen Dank
 
Werbung:
Zurück
Oben