2011-11-15 12 views
1

私はいくつかのパラメータを含む$langという配列を含むファイルlang.phpを必要とする関数language($tag)を持っています。特に文字列$lang['message']。いくつかの実行行の後には、$lang['message']を返します。次のように配列の文字列の中にパラメータを設定する

ザ・$ LANG配列が定義されています

$lang[$tag] = array(
    'message' => 'This is a message', 
    ... 
); 

は、今の私はlanguage($tag, $parameters)に定義することができるはず$lang['message']内部パラメータを設定できるようにしたいと思いましょう。

$lang[$tag] = array(
    'message' => 'This is a '. $1, 
    ... 
); 

方法は$parametersセット$lang['message']$1にあるものとなるようlanguage($tag, $parameters)を整理する最善の方法である:?そして、これらのパラメータは、次のような$lang['message']内のVARを設定する必要がありますか

ご理解いただけない場合は、language($tag, 'post')に電話して'This is a post'を返信したいと思います。

答えて

3

あなたはその後、例えば

function language($tag, array $values) 
{ 
    // get $lang from somewhere 

    return vsprintf($lang[$tag]['message'], $values); 
} 
+0

+1 'vsprintfの()':

function language() { $lang = get_lang_from_file(); // You probably have the idea $params = func_get_args(); if(count($params) == 1) return $lang[$params[0]]; $params[0] = $lang[$params[0]]; return call_user_func_array("sprintf", $params); } 

あなたはこのようにそれを使用することができるこの方法を

ソリューションは、おそらくこのようになります。さらに良いかもしれない。 – kapa

2

sprintf()を使用することができます。

'message' => 'This is a %s', 

そして、あなたはちょうどこのようにそれを使用します。

sprintf($lang['message'], 'post'); 

その多数の機能を確認するためにmanual page of sprintf()をお読みください。

2

、値置換の配列を渡すvsprintfを使用するにはどうすればよいprintfテンプレートとして文字列を保存する方法について、例えば

$lang[$tag] = array(
    'message' => 'This is a %s' 
); 

私はおそらく私のためにsprintf()となるだろう言語機能。

$lang = array(
    'stop' => 'Stop right there!', 
    'message' => 'This is a %s', 
    'double_message' => 'This is a %s with %s comments', 
    ... 
); 

そして:

echo language('stop'); // outputs 'Stop right there!' 
echo language('message', 'message for you'); // outputs 'This is a message for you' 
echo language('double_message', 'message for you', '6'); // outputs 'This is a message for you with 6 comments 
+0

'vsprintf()'は 'call_user_func_array()'を介して 'sprintf'よりもずっといいです – Phil

+0

チップありがとうございました:) – Repox

関連する問題