Donde pongo una clase?

edited abril 2009 in Principiantes
Hola!

Al final me voy a hacer pesado con tanta pregunta...

Veamos, a cuento de mi pregunta de ayer sobre la traducción de etiquetas, rótulos, botones, etc. se me ocurren dos posibles soluciones para concentrar la traducción del site en una única ubicación, en lugar de andar traduciendo todas las instancias una a una. Pero las dos pasan por extender las clases predefinidas.

La primera sería como sigue: Crear varias classes "standardFormCat", standardFormFr"... que contengan la traducción de los botones a cada idioma. El código seria algo así como
class StandardFormCatalan extends StandardForm {
  $this->set_action_caption('insert', 'Afegir');
  $this->set_action_caption('report', 'Llistat');
  $this->set_action_caption('browse', 'Cercar');
  $this->set_action_caption('view', 'Visualitzar');
}

La segunda sería crear una única clase que en función de una variable definida ($this->language) seleccionase el idioma de salida como sigue:
class MyStandardForm extends StandardForm {

public function cambiaIdioma() {
  switch ($this->language){
    case 'ca':
      $this->botonesAccion = array ('Afegir','Llistat','Cercar','Visualitzar');
      break;
    case 'fr':
      $this->botonesAccion = array ('Ajouter','Lister','Chercher','Voire');
      break;
    default:
      $this->botonesAccion = array ('Añadir','Listado','Consultar','Visualizar');
  }
  $this->set_action_caption('insert', $this->botonesAccion[0]);
  $this->set_action_caption('report', '$this->botonesAccion[1]);
  $this->set_action_caption('browse', $this->botonesAccion[2]);
  $this->set_action_caption('view', $this->botonesAccion[3]);
}

}

Y luego programar normalmente usando mi(s) nueva(s) clase(s) en lugar de usar la preprogramada standardForm.

La pregunta es ¿Dónde debería guardarse el archivo conteniendo las nuevas definiciones para lograr que fuese accesible desde cualquier controlador? Y, ya por extensión, ¿dónde guardar y cómo cargar en el sistema cualquier clase que necesite crear ya sea para un controlador, modelo,vista...?


Sailor

Comentarios

  • edited 10:11
    Me respondo a mi mismo.

    El código a continuación es una "chapuza" y me falta depurarlo bastante, pero como idea general ya sirve. Se admiten (ruegan) comentarios para mejorar el código, además de ser un novato en Kumbia, también lo soy en programación orientada a objetos (de ahí que para solucionar el tema haya usado arrays en lugar de objects para contener los valores necesarios).

    apps/default/helpers/main.php
    /**
     * Modifica los textos de standarForm
     **/
    class MyStandardForm extends StandardForm {
    	public function cambiaIdioma(){
    		
    		$this->languageTextSelected=$this->languagePack[$this->language];
    		for ($i=0;$i<count($this->languagePackBase);$i++) {
    			if (substr($this->languagePackBase[$i],0,7) == '$this->') {
    				eval ($this->languagePackBase[$i]."('".addslashes($this->languageTextSelected[$i])."');" );
    			} else {
    				$this->set_caption( $this->languagePackBase[$i] , addslashes($this->languageTextSelected[$i]));
    			}
    		}
    		
    		$this->actionButtonsText= array();
    
    		$this->actionButtonsText['esp']=array('Añadir','Consultar','Visualizar','Listado');
    		$this->actionButtonsText['cat']=array('Afegir','Consultar','Visualitzar','Llistat');
    
    		$this->actionButtonsTextSelected=$this->actionButtonsText[$this->language];
    		$this->set_action_caption('insert',$this->actionButtonsTextSelected[0]);
    		$this->set_action_caption('query',$this->actionButtonsTextSelected[1]);
    		$this->set_action_caption('browse',$this->actionButtonsTextSelected[2]);
    		$this->set_action_caption('report',$this->actionButtonsTextSelected[3]);
    	}
    }
    

    class EscuelasController extends MyStandardForm {
    	
      public $scaffold = true;
      //public static $force = true;
      public function __construct() {
    		
    /* TRADUCCIONES */
    // Listado de elementos a traducir. 
    // Obsérvese que también se traduce set_form_caption (o cualquier instruccion que comience por $this->
    // Sería interesante desarrollar el tema para que tomase estos valores directamente del objeto
    
    $this->languagePackBase=array('$this->set_form_caption','id','nombre','viatipo_id','via','numero','escalera','piso','puerta','codpost','poblacion','provincias_id','telefono1','telefono2','fax','email','web','nif');
    			
    // Traducciones a los distintos idiomas
    // Sería interesante desarrollar esto para que los valores pudiesen definirse externamente (¿XML?)
    
    $this->languagePack= array();
    
    $this->languagePack['esp']=array('Gestión de escuelas','Id','Nombre','Tipo de vía','Nombre de la vía','Número','Escalera','Piso','Puerta','Código postal','Población','Provincia','Teléfono de contacto','Otro teléfono','Fax','Email','Web','NIF / DNI');
    
    $this->languagePack['cat']=array('Gestió d\'Escoles','Id','Nom','Tipus de via','Nom de la via','Número','Escala','Pis','Porta','Codi postal','Població','Provincia','Teléfon de contacte','Altre teléfon','Fax','Email','Web','NIF / DNI');
    
    /* SELECCION DE IDIOMA */
    $this->language='cat';
    $this->cambiaIdioma();
    			
    $this->use_helper('viatipo');
    }
    		
    }
    
Sign In or Register to comment.