2009-08-03 20 views
4

Ich baue eine englisch/französische Website und frage mich, ob es eine Best Practice für solch einen Job gibt.Der effizienteste Weg, um eine mehrsprachige Website zu erstellen

  1. Die Website duplizieren und einen französischen und englischen Ordner mit der entsprechenden Site erstellen.

  2. Mit PHP den Inhalt mit HTML-Tags austauschen. z. if ($ lang == 'en'):

  3. Verwenden Sie PHP, um nur den Inhalt zu tauschen, wobei die HTML-Tags für beide gleich bleiben. z.B. wenn Aussagen überall sind. Wäre das nicht effizient?

Alle anderen Vorschläge würden

+0

Ich sollte erwähnen, der englische Teil ist bereits gebaut. Werden viele "if" -Aussagen meine Website merklich verlangsamen? – chris

Antwort

5

Wir haben einen Rahmen für wenn (falls) unserer Website wird international, die wie folgt funktioniert ...

Struktur Ordner;

Alle Texte oder Bilder, die sprachenspezifisch sind, werden direkt von der Seite entfernt und durch Konstanten ersetzt. zB Auf dem Anmeldebildschirm kommen wir rein;

echo TEXT_LOGIN_WELCOME; 

definiert in /lang/english/text/login.php as;

define('TEXT_LOGIN_WELCOME', 'Welcome, please login:'); 

aber in /lang/dutch/text/login.php ist definiert als;

define('TEXT_LOGIN_WELCOME', 'Welcome, please login (in dutch):'); 

;-)

Jede Sprache definiert Datei mit dem Namen ist genau das gleiche wie die Seite es für verwendet wird, so dass, wenn wir eine öffentlich zugängliche Seite laden, brauchen wir nur die Sprache, um herauszufinden, die Benutzer spricht und wir können die relevante Sprache definieren, die Datei definiert.

Das gute an diesem System ist, dass alle Sprachinformationen zentralisiert sind. Wenn Sie eine neue Sprache hinzufügen müssen, kopieren Sie einfach den Hauptordner (Englisch?), Benennen ihn um, zippen Sie das Ganze hoch und senden Sie es an einen Übersetzungsdienst, um seine Magie zu entfalten. Natürlich ist der Nachteil dieses Systems die Wartung, da sowohl die Sprachen als auch die Inhalte wachsen ... Wenn jemand diesbezüglich irgendwelche guten Ideen hat, dann würde ich mich freuen, sie zu hören!

Btw, wenn Sie am Ende benötigen, um den Standort eines Benutzers nach IP zu erraten, möchten Sie vielleicht geoIP auschecken.

+0

könnte schwierig für eine Website sein, die UI in zu vielen Sprachen bietet, denke ich. – sepehr

4

Verwenden Sie ein Template-System erkannt werden. Smarty Template Engine ist wahrscheinlich eine der bekanntesten PHP-Versionen. Ein Templating-System dient nicht nur genau dem Zweck, den Sie erreichen wollen, es erleichtert auch die Pflege von Seiten, indem es den Display-Code vom Inhalt trennt (wodurch Sie auch die gleiche Vorlage für viele verschiedene Content-Seiten verwenden können) ähnliche Art).

+0

Smarty sieht cool aus. Ich habe versucht, meinen eigenen Templating-Motor zu bauen. Ich suche nach dem besten Weg, es jetzt mehrsprachig zu machen. – chris

0

- die gesamte Website Duplizierung wird Sie zwingen, jeden Code touch-up in die 2 Ordner zu wiederholen: - [

- Wenn Sie meine somenting wie

<?php if($lang=='en') { ?> 
    <p>English text</p> 
<? } else { ?> 
    <p>Text français</p> 
<? } ?> 

Diese Lösung ist perfekt, um zwei Sprachen auf der gleichen Seite zu verwalten.
Sie haben jedoch immer noch doppelte Tags.

- Ändern Sie nur Inhalte, es ist wirklich Zufriedenheit.
Vielleicht proliferieren, wenn Aussagen php kompilieren können ... Ich weiß es nicht.
Wie dem auch sei Dokument kann mit diesem Ansatz prägnanter sein:

<?php    
    function interpreter($buffer) { 
    $pieces = explode('#', $buffer); 

    if (isset($_GET['lang'])) $begin=$_GET['lang']; 
    else $begin = 1; // 1 to display français, 2 to display english 

    $tot = count($pieces);   

    for ($i=$begin; $i<$tot; $i+=3) { // remove one language 
    unset($pieces[$i]); } 

    foreach ($pieces as $value) { // recompose the text 
    $output .= $value; } 

    return $output; 
    } 

    ob_start("interpreter");  
?> 

<a href="?lang=#1#2#">#Français#English#</a> 
<p>#English text#Texte français#.</p> 

<?php ob_end_flush() ?> 

Der Text zwischen ob_start und ob_end_flush NACH Kompilieren von PHP analysiert wird.
Das bedeutet, dass betroffene Strings kommen z. von Echo-Anweisung, nicht innerhalb <? php?> Tags.
Auch Inhalt von PHP stammt IS betroffen.
Aber NICHT externe CSS oder Javascript.

Halten Sie die Aufmerksamkeit Begrenzer # ist kein Merkmal noch anderweitig verwendet.
Vielleicht werden Sie es vorziehen, mit || oder ^^

Natürlich auch in Zukunft ersetzen Sie diese Lösung in drei Sprachen oder mehr anpassen können. Aber wenn Sie in vielen Zeilen einer großen Site die "Übersetzung der dritten Sprache" einfügen müssen, passt vielleicht die Lösung von MatW zu Ihnen.

Verwandte Themen