Más con Symfony

13.7. Accediendo al sistema de internacionalización

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.