/**
 * Smarty {assign_t_plural} compiler function plugin
 *
 * Type:     compiler function<br>
 * Name:     assign_t_plural<br>
 * Purpose:  assign a translated value to a template variable
 * @author   pineray 松田光貴 <matsudaterutaka at gmail dot com>
 * @param string containing var-attribute and value-attribute
 * @param Smarty_Compiler
 */
function smarty_compiler_assign_t_plural($tag_attrs, &$compiler)
{
    // 多言語対応用の関数が定義されていなければエラーを出力
    if (!function_exists('t')) {
        $compiler->_syntax_error("[compiler] function 't' is not defined", E_USER_WARNING);
        return;
    }
    $params = $compiler->_parse_attrs($tag_attrs);
    // セット対象が無ければエラーを出力
    if (!isset($params['var'])) {
        $compiler->_syntax_error("assign: missing 'var' parameter", E_USER_WARNING);
        return;
    }
    $var = $params['var'];
    unset($params['var']);
    // 書式判定用の数値が無ければエラーを出力
    if (empty($params['counter'])) {
        $compiler->_syntax_error("[compiler] parameter 'counter' cannot be empty", E_USER_WARNING);
        return;
    }
    // 単数形のエイリアスが無ければエラーを出力
    if (empty($params['single'])) {
        $compiler->_syntax_error("[compiler] parameter 'single' cannot be empty", E_USER_WARNING);
        return;
    }
    // 複数形のエイリアスが無ければエラーを出力
    if (empty($params['plural'])) {
        $compiler->_syntax_error("[compiler] parameter 'plural' cannot be empty", E_USER_WARNING);
        return;
    }
    foreach ($params as $key => $param) {
        eval("\$params[{$key}] = {$param};");
    }
    $counter = $params['counter'];
    unset($params['counter']);
    $single = $params['single'];
    unset($params['single']);
    $plural = $params['plural'];
    unset($params['plural']);
    // オプション用の配列
    $options = array();
    // 言語コードの指定があればオプションにセット
    if (!empty($params['lang_code'])) {
        $options['lang_code'] = $params['lang_code'];
        unset($params['lang_code']);
    }
    // 機種の指定があればオプションにセット
    if (!empty($params['device_type_id'])) {
        $options['device_type_id'] = $params['device_type_id'];
        unset($params['device_type_id']);
    }
    $translated = '"' . t_plural($counter, $single, $plural, $params, $options) . '"';
    return "\$this->assign({$var}, {$translated});";
}
/**
 * Smarty default_t_plural modifier plugin
 *
 * Type:     modifier<br>
 * Name:     default_t_plural<br>
 * Purpose:  designate translatable default value for empty variables
 * @author   pineray 松田光貴 <matsudaterutaka at gmail dot com>
 * @param string
 * @param integer
 * @param string
 * @param string
 * @return string
 */
function smarty_modifier_default_t_plural($variable, $counter = 1, $single = '', $plural = '')
{
    // 多言語対応用の関数が無い、あるいはエイリアスが無ければ変数をそのまま出力
    if (!function_exists('t_plural') || empty($single) || empty($plural)) {
        return $variable;
    }
    if (!isset($variable) || $variable === '') {
        // パラメーター用の配列
        $params = array();
        // オプション用の配列
        $options = array();
        // 引数を取得
        $args = func_get_args();
        // パラメーターの引数があればセットする
        if (count($args) > 4) {
            array_shift($args);
            // $variable
            array_shift($args);
            // $counter
            array_shift($args);
            // $sigle
            array_shift($args);
            // $plural
            // 引数をパラメーターに変換
            $max = floor(count($args) / 2);
            for ($i = 0; $i < $max; $i++) {
                $key = $i * 2;
                $params[$args[$key]] = $args[$key + 1];
            }
            // 言語コードの指定があればオプションにセット
            if (!empty($params['lang_code'])) {
                $options['lang_code'] = $params['lang_code'];
                unset($params['lang_code']);
            }
            // 機種の指定があればオプションにセット
            if (!empty($params['device_type_id'])) {
                $options['device_type_id'] = $params['device_type_id'];
                unset($params['device_type_id']);
            }
        }
        return t_plural($counter, $single, $plural, $params, $options);
    } else {
        return $variable;
    }
}
/**
 * Smarty {t_plural} plugin
 *
 * Type:     function<br>
 * Name:     t_plural<br>
 * Purpose:  replace message alias to appropriate strings
 * @author pineray 松田光貴 <matsudaterutaka at gmail dot com>
 * @param array
 * @param Smarty
 * @return string
 */
function smarty_function_t_plural($params, &$smarty)
{
    // 多言語対応用の関数が定義されていなければエラーを出力
    if (!function_exists('t_plural')) {
        $smarty->_trigger_fatal_error("[plugin] function 't_plural' is not defined");
        return;
    }
    // 書式判定用の数値が無ければエラーを出力
    if (empty($params['counter'])) {
        $smarty->_trigger_fatal_error("[plugin] parameter 'counter' cannot be empty");
        return;
    }
    $counter = $params['counter'];
    unset($params['counter']);
    // 単数形のエイリアスが無ければエラーを出力
    if (empty($params['single'])) {
        $smarty->_trigger_fatal_error("[plugin] parameter 'single' cannot be empty");
        return;
    }
    $single = $params['single'];
    unset($params['single']);
    // 複数形のエイリアスが無ければエラーを出力
    if (empty($params['plural'])) {
        $smarty->_trigger_fatal_error("[plugin] parameter 'plural' cannot be empty");
        return;
    }
    $plural = $params['plural'];
    unset($params['plural']);
    // オプション用の配列
    $options = array();
    // 言語コードの指定があればオプションにセット
    if (!empty($params['lang_code'])) {
        $options['lang_code'] = $params['lang_code'];
        unset($params['lang_code']);
    }
    // 機種の指定があればオプションにセット
    if (!empty($params['device_type_id'])) {
        $options['device_type_id'] = $params['device_type_id'];
        unset($params['device_type_id']);
    }
    return t_plural($counter, $single, $plural, $params, $options);
}
Exemplo n.º 4
0
 function NUM_COUNT_CHECK($value)
 {
     if (isset($this->arrErr[$value[1]])) {
         return;
     }
     $this->createParam($value);
     $count = strlen($this->arrParam[$value[1]]);
     if ($count > 0 && $count != $value[2]) {
         $this->arrErr[$value[1]] = t_plural($value[2], 'c_* For T_ARG1, enter T_COUNT digit. <br />_01', 'c_* For T_ARG1, enter T_COUNT digits. <br />_01', array('T_ARG1' => $value[0]));
     }
 }