No todas las factorías son tan fáciles de acceder como el mailer y el
enrutamiento. Si se quiere por ejemplo internacionalizar las tareas, es preciso
acceder al sistema de internacionalización o i18n de Symfony. Para ello, se
emplea la clase sfFactoryConfigHandler
:
protected function getI18N($culture = 'en')
{
if (!$this->i18n)
{
$config = sfFactoryConfigHandler::getConfiguration($this->configuration->getConfigPaths('config/factories.yml'));
$class = $config['i18n']['class'];
$this->i18n = new $class($this->configuration, null, $config['i18n']['param']);
}
$this->i18n->setCulture($culture);
return $this->i18n;
}
En primer lugar se utiliza una estrategia sencilla de cache para no tener que
reconstruir el componente i18n cada vez que se utilice. A continuación, haciendo
uso de sfFactoryConfigHandler
, se obtiene la configuración del componente para
instanciarlo. Por último, se establece la configuración de la cultura y la tarea
ya tiene acceso a la internacionalización:
public function execute($arguments = array(), $options = array())
{
$this->log($this->getI18N('fr')->__('some translated text!'));
}
Obviamente no es muy cómodo pasar la cultura en cada llamada, sobre todo cuando no se modifica mucho en una misma tarea. La próxima sección explica precisamente cómo conseguirlo.