2011-12-23 12 views
1

Webアプリケーションの多言語機能を実装しました。 、私はこの多言語機能の変数変数を正しく使用する

echo $lang['the key here']; 

て値を取得し、私は、誰かが$ LANG [「sdefscfef」]のような未定義のキーを呼び出す場合ので、私はしたい。この

$lang['confirm'] = 'COnfirm the message'; 
$lang['deny'] = 'Deny the invitation'; 

のような別のfielsで値を保つinstedホワイトスペースを印刷する、私は機能

function translate($string) { 
if(! isset($string)) { 
echo THE KEY; 
} 
else { 
echo $string; 
} 
} 

translate($lang['asdadad']); 
としてそれを作りたいキーの名前、すなわち「sdefscfef」

を印刷したいです

と直接、私は(_()が一般的です)関数を作成し、配列を印刷する代わりに、キー

答えて

2

を印刷し、そのようにそれを使用する:その後、$になり

echo _('Welcome'); 

_()機能言語配列:

function _ ($str) { 
    global $language; 

    return isset($language[$str]) ? $language[$str] : $str; 
} 

このようなものです。

:あなたがこれを行うことができ、どこでも Lang::translate()を入力することを避けるために

class Lang { 
    private $lang = array(); 

    public static translate ($str) { 
     return isset(self::$lang[$str]) self::$lang[$str] : $str; 
    } 
} 

そして、:

あなたはグローバル変数を使用しないようにしたい場合は、このようなクラスでは、このすべてをラップすることができますここで

function _ ($str) { 
    return Lang::translate($str); 
} 

はもう少し高度な語学クラスの例です:単にhttp://code.google.com/p/sleek-php/source/browse/trunk/Core/Lang.php

+0

実際には、 '_()'がより一般的です。グローバル変数は推奨しません。 – KingCrunch

+0

これはすでに 'gettext()'のエイリアスです。残念ながら、定義された関数は上書きできません。 – ThiefMaster

+0

@KingCrunch:通常私はあなたに同意しますが、OOPを使用しない小規模なアプリケーションの場合は、これをグローバルに使用すると問題はありません。適切な言語ファイルを含めるだけです。 – ThiefMaster

0

使用:

$lang['confirm'] = 'COnfirm the message'; 
$lang['deny'] = 'Deny the invitation'; 
.... 

function getTranslation($key) { 
    global $lang; 
    if (isset($lang[$key])) { 
     return $lang[$key]; 
    } else { 
     return $key; 
    } 
} 

// Usage: 
echo getTranslation('confirm'); // Prints 'Confirm the message' 
echo getTranslation('sjdhj'); // Prints 'sjdhj' 
関連する問題