alvaro-prieto
5/5/2017 - 2:15 PM

literales PHP traduccion strings constantes __("texto") y ___(bd['campo']);

literales PHP traduccion strings constantes traducir ingles api multilenguaje apiMultenguaje. En resumen, existen dos funciones, una es __("texto") y la otra es ___(objetoBD->datos->valor).

Con 2 __() : se usa cuando se pone un literal en el código Con 3 ___() : Cuando se trata de un valor extraido de BD

El motivo de esta separación, es para detectar el origen de los literales y poder capturar los nuevos


Cuando es traducir textos directos, campos, etc... por ejemplo una diapositiva, 
se hace con apiMultilenguaje, buscar "traducir", etiquetado en qWeb (snipets). 

Cuando tenemos campos hardcodeados, por ejemplo si yo me invento un quontrol y 
necesito un texto que diga "porcentaje" o "anualmente", pues lo pones así:

__("anualmente");  

Esto irá a buscarlo a un diccionario y lo traducirá, si existe la entrada. En caso
de no existir, creo que se guarda la información de que alguien lo ha solicitado,
para que se agregue su traducción si se quiere. Si no tiene traducción, se muestra
el texto original (en español por defecto).

//También existen casos más avanzados al estilo C

$literal = __("literal hola %s", $variable);  //al estilo C
//i integer
//s string
//f float

Y logicamente, también se puede incluir poara cabeceras de tablas, etc...


$this->insertaTabla(
	[
		"campos"=>
		[
			"idAsignatura"=>
			[
				"campo"=>"idAsignatura",
				"rotulo"=>__("Asignatura")   //fijarse en esto __( )
				//Así en vez de poner "Asignaturas", pondrá su traducción según
				//el idioma actual.
				

Existe otro caso, que son traducciones para entradas que vienen de BD. Por ejemplo,
si yo tengo una tabla asignaturas, y hay muchas asignaturas. La información con los 
nombres de asignaturas estará en la tabla asignaturas, pero su traducción, (la traducicción
de cada registro), estará en otra tabla ApiMultilenguaje, que contendrá traducciones a múltiples
lenguajes de asociadas a la tabla y registro de, en este caso, Asignaturas.

Para que suceda la 'magia', tienen que pasar varias cosas adicionales más:
1) En información de la Tabla (Asignaturas), tiene que poner un multi:1, así:
    {"id":"cod_asig”, ”multi”:1}
    
2) En el campo que se quiere traducir, en su tabla correspondiente (Asigntaruas), 
  en su comentario de la estructura de tabla, tiene que poner algo asi:
   {"rotulo":"Asignatura","multi":1},
   y otro campo de la misma tabla podría tener otro por ejemplo:
   {"rotulo": "Ayuda" "multi":2}  
   fijarse que ahora el multi es 2, con lo cual se asociará a valor2 en el 
   siguiente paso asociado al campo ayuda, y el campo 1 al nombre de la asignatura
   
3) En la tabla ApiMultilenguaje, tiene que agregarse un nuevo registro
 del tipo: 
 
 clase: Asignatura
 idRegistro: el de la fila en concreto del registro de Asignatura, por ejemplo "Historia"
 idioma: en  (podria ser euskera, o lo que sea)
 y luego en cada valor1, valor2, .... su traducción, en este caso, podría ser algo así
 valor1: "History"
 valor2: "Learn your own history"
 
 
 creo que es algo así  :-)  lo he entendido pero nunca lo he hecho al 100% por mi mismo
 
   



//Desde JS se accede mediante
quontrol.__( ...); 

//Como actualmente __ no sustituye valores, he creado temporalmente esta funcion auxiliar

//función auxiliar ya que  __ no sustituye valores en JS todavía. Temporal, __ va a soportar sustituciones pronto
var rellenarVariables = function(string){
    //por ahora solo funciona con %s 
    var ar = string.split("%s");
    var str = "";
    var variables = arguments;
    $.each(ar, function( index, value ) {
        if($.trim(value)){
            str += value + variables[index+1];
        }
    });
    return str;
}