Posted on 8 febrero, 2010 · Posted in Desarrollo y Programación

Cakephp a partir de la versión 1.3 ya soporta esta opción por defecto con la aplicación de consola.

Cuando intentas extraer el archivo pot de traducciones usando la erramienta de consola i18n de cakephp, y tienes varios dominios. Cake no separa cada dominio en ficheros diferentes, si no que crea un solo archivo .pot para todos. Lo cual es muy poco util.

Voy a proponer una solución aunque un poco chapuzera, pero de momento funciona.

Paso 1: Abrir el archivo cake/console/libs/tasks/extract.php

paso 2: En este archivo encontramos una función llamada __extractTokens y al final de este hay están las siguientes lineas:

$this->basic();
$this->basic('__c');
$this->extended();
$this->extended('__dc', 2);
$this->extended('__n', 0, true);
$this->extended('__dn', 2, true);
$this->extended('__dcn', 4, true);

Comentarlo todo y dejarlo así

//$this->basic();
//$this->basic('__c');
$this->extended();
//$this->extended('__dc', 2);
//$this->extended('__n', 0, true);
//$this->extended('__dn', 2, true);
//$this->extended('__dcn', 4, true);

Paso 3: Ir al método extended de este mismo fichero linea 380 encontramos la variable $condition así:

$condition = ($seoncdComma == ',' || $seoncdComma === null) &&
						(is_array($domain) && ($domain[0] == T_CONSTANT_ENCAPSED_STRING)) &&
						(is_array($text) && ($text[0] == T_CONSTANT_ENCAPSED_STRING)  );

debemos agregar el nombre del dominio que queremos generar al final de la condición

$condition = ($seoncdComma == ',' || $seoncdComma === null) &&
						(is_array($domain) && ($domain[0] == T_CONSTANT_ENCAPSED_STRING)) &&
						(is_array($text) && ($text[0] == T_CONSTANT_ENCAPSED_STRING)  && $domain[1]=="'web'" );

Donde web es el dominio que estamos generando. (Importante no olvidar las comillas simples)

Share

About the Author