2009-07-10 17 views
1

おはよう、多言語PHPクラス - ショートカット機能

私の開発しているアプリでは、多言語対応を扱うクラスがあります。しかし

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

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

現在、これには次のように対処してクラスを使用して、完璧に動作します:それは外部の翻訳ソースはこのような何かを定義したことになる連想配列を、ロードすることによってそれを行います私は、これを "Lang"クラスのインスタンスに依存しないショートカット関数に入れたいと思っています。私は静的メソッドを試してみましたが、これまでは私は不運です。

私が達成したいものの擬似コード。

$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> 

正しい方向にポイントがあります。ありがとう!

答えて

4

あなたがglobal $langステートメントを使用する場合は、あなたの_関数からグローバル$lang変数にアクセスすることができます。

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

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

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

またあなたの代わりにクラスのインスタンスを作成するのでLangクラスでstatic変数を使用することができます。これは、グローバル名前空間に$lang変数を作成する必要がないので、この方法では少し洗練されています。

<?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

私が得ることができる最高の答え。多くの、多くのありがとうジョン! :-) – subZero