2017-01-04 4 views
0

Ich habe Array $ _en zum Speichern von englischen Wörtern/Sätzen und $ _no Array zum Speichern von norwegischem Text erstellt, um es als Übersetzung für mein PHP-Kernprojekt zu verwenden.Core PHP Site in andere Sprache übersetzen

<?php 
$_en = array(
    'mail' => 'email', 
    'msg1' => 'how are you?' 

); 
$_no = array(
    'mail' => 'epost', 
    'msg1' => 'hvordan har du det ?' 
); 

echo "EMAIL IN ENGLISH:".$_en['mail']."\n"; //email in english 
echo "EMAIL IN NORWEGIAN:".$_no['mail']; //email in NORWEGIAN 
echo "Message IN NORWEGIAN:".$_no['msg1']; //Message in NORWEGIAN 

Basierend auf dem Array und dem Schlüsselwert wird der Text basierend auf der Site-Übersetzungsfunktion aufgerufen.

Wenn irgendwelche bessere Lösungen und Verbesserungen sind sehr willkommen. Korrigiere mich Danke im Voraus.

+1

Besser eine Sprachklassendatei mit String-Tokens und deren Konvertierungen in einer separaten Datei haben.Rufen Sie die Datei auf der Grundlage der gewählten Sprache – Thamilan

+1

Es ist nicht korrekt, norwegisch, ein Leerzeichen vor dem Fragezeichen zu haben, frage ich mich, warum einige Leute haben begonnen, es zu verwenden. Sie können auch einen Blick auf http://php.net/manual/en/function.gettext.php werfen, welches die eingebaute i18n Unterstützung in PHP – rypskar

+0

@rypskar ist danke! Sie können mir mehr darüber erklären – ben

Antwort

1

Eine bessere Lösung, wie erwähnt meine Thamilan in den Kommentaren wäre eine Klasse zu verwenden, um Konvertierungen zu behandeln.

Denken Sie daran so;

Ihre Template File

$trans = new Translate('en'); 
<h1><?php echo $trans->__('This is a title'); ?></h1> 

Translate.php

class Translate { 
    public function __construct($lang) { 
     $this->lang = $lang; 
    } 

    public function __($string) { 
     // $translatedString = $this->getTranslatedString($string); 
     return $translatedString; 
    } 
} 

In dieser Klasse werden Sie die Übersetzung aus, wo es gespeichert holen müssen. Sie könnten in dieser Klasse in einem Array speichern, oder eine bessere Lösung wäre, sie aus einer CSV-Datei zu laden.

0

Try this: -

parse_ini_file() ist ein sehr leistungsfähiges kleines Tool, das genau das tut, was Sie erwarten. eine einfache Datei wie folgt verwendet, die wir en.ini nennen:

PAGE_TITLE = My website page title 
HEADER_TITLE = My website header title 
SITE_NAME = My Website 
SLOGAN = My slogan here 
HEADING = Heading 
MENU_LOGIN = Login 
MENU_SIGNUP = Sign up 
MENU_FIND_RIDE = Find Ride 
MENU_ADD_RIDE = Add Ride 
MENU_LOGOUT = Logout 

Sie einfach verwenden können: parse_ini_file (‚en.ini‘) genau ein Array zurück, wie in Ihrem Switch-Anweisung, die viel sein wird, einfacher für andere (Nicht-Programmierer) zu lesen und für Sie zu schreiben. Und wenn Sie wurden dann weiterhin mit dieser Art der Benennung der Dateien, können Sie userLanguage(), um so etwas wie reduzieren:

public function userLanguage() 
{ 
    $file = '/path/to/language/config/' . $this->UserLng . '.ini'; 
    if(!file_exists($file)) 
    { 
     //Handle Error 
    } 
    return parse_ini_file($file); 
} 
0

Another Try Lösung: -

erstellen Abstrakte Klasse

interface Language 
{ 
    public function getPageTitle(); 
    public function getHeaderTitle(); 
    public function getSiteName(); 
    public function getSlogan(); 
    public function getHeading(); 
    public function getMenuLogin(); 
    public function getMenuSignup(); 
    public function getMenuFindRide(); 
    public function getMenuAddRide(); 
    public function getMenuLogout(); 
} 

Obwohl die Schnittstelle klein ist, kann die Implementierung eine große Datei erzeugen, obwohl sie wohl klarer wäre als die Array-Art:

class English implements Language 
{ 
    public function getHeaderTitle() 
    { 
     return 'My website header title'; 
    } 

    public function getHeading() 
    { 
     return 'Heading'; 
    } 

    // etc... 
} 

Alternative: -

Alternativ können Sie diese Stile kombinieren und haben eine Singleton Sprache mit Getter-Methoden das Array zugreifen, d.h .:

class Language 
{ 
    private $languageArray; 
    private $userLanguage; 

    public function __construct($language) 
    { 
     $this->userLanguage = $language; 
     $this->languageArray = self::userLanguage(); 
    } 

    private static function userLanguage() 
    { 
     $file = '/path/to/language/config/' . $this->userLanguage . '.ini'; 
     if(!file_exists($file)) 
     { 
      //Handle Error 
     } 
     return parse_ini_file($file); 
    } 

    public function getPageTitle() 
    { 
     return $this->languageArray['PAGE_TITLE']; 
    } 

    public function getHeaderTitle() 
    { 
     return $this->languageArray['HEADER_TITLE']; 
    } 

    //etc... 
} 

, die die Vorteile beider bieten. Persönlich denke ich, dass Lösung Nr. 2 am besten zu Ihnen passt, wenn Sie nicht in naher Zukunft weitere Sprachen hinzufügen möchten.

Verwandte Themen