2012-04-06 10 views
1

Ich habe eine PHP-Site. Jetzt muss ich es in eine mehrsprachige Website umwandeln, indem ich eine Option hinzufüge, wo die Benutzer die Sprache ihrer Präferenz auswählen können. Nehmen wir an, ich möchte 2 Sprachen für den Anfang und dann eine intelligente Möglichkeit, um neue Sprachen hinzuzufügen, wenn es benötigt wird.Mehrsprachige PHP-Site

Datenbank VS Sprachdateien ...

Da ich weiß, zwei Möglichkeiten gibt.

1) Ich kann MySQL-Datenbanktabellen mit Sprachen, Übersetzungen usw. verwenden und jedes Mal basierend auf der bevorzugten Sprache des Benutzers Daten aus der Datenbank abrufen, was viele Datenbankanforderungen bedeutet.

2) Ich kann externe PHP-Dateien verwenden mit define Befehl (wie einige E-Commerce-Frameworks, die verschiedene Sprachen Dateien in eine Sprache Ordner wie fr.php eng.php etc)

Was ist besser? Die Antworten müssen sich auf die folgenden Argumente mit ihren Vor- und Nachteilen stützen.

1) Beste Leistung

2) Flexibilität

3) Effizientere

4) Intelligente Art und Weise

5) Ressourcen Nutzung (CPU, Speicher usw.)

P. S. Das Google-Übersetzungstool für Websites ist in meinem Fall keine geeignete Lösung.

+0

In meinen Arbeiten verwendeten wir immer Sprachdateien. Sie befinden sich auf dem Server, sie sind einfach über die Frameworks zugänglich und die Reaktionszeit zum Herunterladen ist in der Nähe von Null. Für den Fall, dass Ihre Datenbank oder was auch immer ausfällt (sei es für Wartung oder andere), werden zumindest Ihre Sprachen immer für die Benutzer verfügbar sein. Das heißt nicht, dass es keine gute Idee ist, es in die DB zu legen, ich habe einfach mehr Erfahrung in der anderen Richtung. –

+0

werfen Sie einen Blick auf diese Frage: http://stackoverflow.com/questions/8281589/develop-multilangual-system – raPHPid

Antwort

2

Die Datenbank-Lösung ist sehr teuer in meiner ehrlichen Meinung und nicht wirklich notwendig. Wahrscheinlich hat Ihre Website statische Phrasen (die sich nicht ändern). In diesem Fall sollten Sie ein Sprach-Array verwenden, um sie unter $array['key'] = 'phrase' zu speichern und sie über etwas globales abrufen zu können. Etwas wie folgt aus:

class Lang { 

    private static $loaded; 
    private static $array; 

    private static function set($key, $value) { 
     self::$array[$key] = $value; 
    } 

    public static function get($key, $default = 'empty') { 
     $lang = LANG; 
     $file = "lang/$lang.php"; 
     if (!in_array($lang, self::$array) and file_exists($file)) { 
      include($file); 
      self::$loaded[] = $lang; 
     } 
     return (isset(self::$array[$key]) 
      ? self::$array[$key] 
      : $default; 
    } 

} 

Jetzt müssen Sie nur in die Läden haben Sprachdateien als lang/en.php oder lang/it.php ... , die wie folgt enthält: self::set('MY_KEY', 'This is a phrase'); Und dann setzen gerade LANG die richtige für jede Anforderung zu sein . Ich habe eine Konstante verwendet LANG, aber es gibt andere Möglichkeiten, etwas Global zu speichern.

Sie können eine nicht-statische Klasse verwenden. Wie zum Beispiel:

class Lang { 

    private $lang; 

    public function __construct($lang) { 
     $file = "lang/{$lang}.php"; 
     if (file_exists($file)) 
      include($file); 
    } 

    private function set($key, $value) { 
     $this->lang[$key] = $value; 
    } 

    public function get($key, $default = 'empty') { 
     return (isset($this->lang[$key]) 
      ? $this->lang[$key] 
      : $default; 
    } 

} 

Aber dann sollten Sie Dependency Injection verwenden diese Klasse müssen jedes Mal, wenn Sie zu injizieren. Ein Anwendungsbeispiel:

$lang = new Lang('en'); 
$lang->get('LANG_KEY');