2009-07-10 10 views
1

Guten Abend,Mehrsprachige PHP-Klasse - Shortcut-Funktion

In meiner App, die ich derzeit entwickle, habe ich eine Klasse, die Multilinguismus behandelt. Es tut dies, indem von außen ein assoziatives Array geladen, wo eine Übersetzung Quelle in etwa so definiert werden würde:

'Source input' => 'Zdroj vstupního' 

Derzeit funktioniert dies einwandfrei durch Adressierung und mit der Klasse die folgenden Art und Weise:

$lang = new Lang('Czech'); 
print $lang->_('Source input'); // output: "zdroj vstupního" 

jedoch Ich möchte dies in einer Abkürzungsfunktion haben, die nicht von einer Instanz der "Lang" -Klasse abhängt. Ich habe versucht, mit statischen Methoden zu experimentieren, aber bisher habe ich kein Glück.

Pseudo-Code von dem, was ich erreichen möchte.

$lang = new Lang('Czech'); 
$lang->setCurrent('contact_us'); // loads the language file for contact_us 
<p> 
    <?php print _('Source input'); ?> // output: "zdroj vstupního" 
</p> 

Ein Punkt in die richtige Richtung wäre großartig. Vielen Dank!

Antwort

4

Sie können das globale $lang Variable von Ihrer _ Funktion zugreifen, wenn Sie eine global $lang Anweisung:

<?php 
    class Lang 
    { 
     function _($str) 
     { 
      return 'Zdroj vstupního'; 
     } 
    } 

    function _($str) 
    { 
     global $lang; 
     return $lang->_($str); 
    } 

    $lang = new Lang('Czech'); 
    print _('Source input'); 
?> 

Alternativ könnten Sie eine static Variable in der Lang Klasse verwenden, anstatt eine Instanz der Klasse zu schaffen. Es ist ein wenig sauberer auf diese Weise, da Sie vermeiden, eine $lang Variable im globalen Namespace zu erstellen.

<?php 
    class Lang 
    { 
     static $lang; 

     function setCurrent($lang) 
     { 
      self::$lang = $lang; 
     } 
    } 

    function _($str) 
    { 
     if (Lang::$lang == 'Czech') 
     { 
      return 'Zdroj vstupního'; 
     } 
    } 

    Lang::setCurrent('Czech'); 
    print _('Source input'); 
?> 
+0

Die beste Antwort, die ich bekommen konnte. Vielen, vielen Dank John! :-) – subZero