/** * 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); }
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])); } }