0

私はこのような静的クラスを持っています。

<?php

class Language
{
    public static $language = array();
    var $config;

    function __construct($config)
    {
        switch(strtoupper($config['LANGUAGE']))
        {
            case 'ENGLISH':
                self::setEnglish();
                break;

            case 'TURKISH':
                self::setTurkish();
                break;

            default:
                self::setEnglish();
        }
    }

    public static function setEnglish()
    {
        self::$language = array(

                'CHAIN_VALIDATOR_INITIALIZED' => 'ChainValidator initialized!',
                'ERROR_FUNCTION_RETURNED_FALSE' => 'A function returned false.',
            );
    }

    public static function setTurkish()
    {
        self::$language = array(

                'CHAIN_VALIDATOR_INITIALIZED' => 'ChainValidator çalışıyor!',
                'ERROR_FUNCTION_RETURNED_FALSE' => 'Bir fonksiyon false döndürdü.',
            );
    }

    public static function getLanguage($key)
    {
        return isset(self::$language[$key]) ? self::$language[$key] : $key;
    }
}

?>

このように使われています、

Language::getLanguage('CHAIN_VALIDATOR_INITIALIZED')

しかし、もっと多くのパラメータを渡さなければなりません。これと同様に、

Language::getLanguage('CHAIN_VALIDATOR_INITIALIZED', array(__FUNCTION__))

これらのパラメーターは、%sのように順番に渡す必要があります。最終的な外観は次のようになります。

 "A function returned false" to;
 "%s function returned false"

 And output would be;
 "myLovelyFunction() returned false" (the first array parameter, which is __FUNCTION__)

私の脳がATMを止めたケーキのように聞こえます。

これどうやってするの?

4

3 に答える 3

1

質問を誤解しているかもしれませんが、vsprintfはあなたが望むことをしていると思います。基本的には、引数を配列として受け入れる sprintf です。

$string = "%s %s blabla";
$params = array('foo', 'bar');

$output = vsprintf($string, $params);
于 2012-09-12T13:26:51.253 に答える
1

そのためにcall_user_func_arraysprintfを使用できます。

<?php
foo();

function foo() {
    $text = format('CHAIN_VALIDATOR_INITIALIZED', array(__FUNCTION__, __LINE__));
    echo $text;
}

function format($key, $params) {
    $format = '%s@%s: function returned false'; // =getLanguage($key)
    array_unshift($params, $format);
    return call_user_func_array('sprintf', $params);
}

版画

foo@5: function returned false
于 2012-09-12T12:31:46.420 に答える
0

getLanguage 関数を変更すると解決しました。誰かがそれを必要とする場合、ここに解決策があります。

public static function getLanguage($key, $parameters = null)
{
    $string = self::$language[$key];

    if(is_array($parameters))
    {
        foreach ($parameters as $k => $v)
        {
            $string = str_ireplace('%s', $v, $string);
        }
    }

    return $string;
}
于 2012-09-12T12:29:23.240 に答える