Si estás utilizando Smarty2 y te has decidido a dar el salto a Smarty3 para aprovecharte de sus nuevas funcionalidades (como por ejemplo la nada despreciable opción de herencia en templates), verás que existen algunas incompatibilidades, por ejemplo, se han decidido por seguir el estandar camelCase en el nombre de las funciones, utilizan getters y setters para los atributos o han cambiado la manera de registrar bloques.
En el caso del popular plugin smarty-gettext, si tenemos personalizada la llamada al traductor con, por ejemplo ‘{t}’ como es mi caso, nos encontraremos con un bonito error:
function call ‘register_block’ is unknown or deprecated
Esto es debido a que la forma correcta de registrar bloques en Smarty3 es:
$this->register->block('t', 'translate');
en lugar de:
$this->register_block( 't', 'translate' );
Una vez hecho esto, el siguiente error que nos deja Smarty es:
Plugin “t” not callable
En lugar del antiguo ‘translate’, el segundo parámetro deberá ser el nombre correcto de la función, es decir ‘smarty_translate’:
$this->register->block('t', 'smarty_translate');
de este modo solventaremos el problema y podremos seguir disfrutando de nuestro plugin de traducción.